[docker-io] Initial import (#1000662).
Lokesh Mandvekar
lsm5 at fedoraproject.org
Tue Sep 24 21:46:00 UTC 2013
commit 49ceef2db41f3b0120210eb2ec5981bab42ca220
Author: Lokesh Mandvekar <lsm5 at redhat.com>
Date: Tue Sep 24 16:45:45 2013 -0500
Initial import (#1000662).
Signed-off-by: Lokesh Mandvekar <lsm5 at redhat.com>
.gitignore | 1 +
docker-0.6.2-alexl-devmapper.patch |78606 ++++++++++++++++++++++++++++++++
docker-0.6.2-remove-dotcloud-tar.patch | 12 +
docker-io.spec | 163 +
docker.service | 10 +
sources | 1 +
6 files changed, 78793 insertions(+), 0 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index e69de29..c2ee710 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/v0.6.2.tar.gz
diff --git a/docker-0.6.2-alexl-devmapper.patch b/docker-0.6.2-alexl-devmapper.patch
new file mode 100644
index 0000000..f57aa3b
--- /dev/null
+++ b/docker-0.6.2-alexl-devmapper.patch
@@ -0,0 +1,78606 @@
+diff -uNr docker-0.6.2/api.go docker-devmapper/api.go
+--- docker-0.6.2/api.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/api.go 2013-09-23 10:37:39.287305262 -0500
+@@ -72,18 +72,9 @@
+ http.Error(w, err.Error(), statusCode)
+ }
+
+-func writeJSON(w http.ResponseWriter, code int, v interface{}) error {
+- b, err := json.Marshal(v)
+-
+- if err != nil {
+- return err
+- }
+-
++func writeJSON(w http.ResponseWriter, b []byte) {
+ w.Header().Set("Content-Type", "application/json")
+- w.WriteHeader(code)
+ w.Write(b)
+-
+- return nil
+ }
+
+ func getBoolParam(value string) (bool, error) {
+@@ -116,14 +107,25 @@
+ return err
+ }
+ if status != "" {
+- return writeJSON(w, http.StatusOK, &APIAuth{Status: status})
++ b, err := json.Marshal(&APIAuth{Status: status})
++ if err != nil {
++ return err
++ }
++ writeJSON(w, b)
++ return nil
+ }
+ w.WriteHeader(http.StatusNoContent)
+ return nil
+ }
+
+ func getVersion(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+- return writeJSON(w, http.StatusOK, srv.DockerVersion())
++ m := srv.DockerVersion()
++ b, err := json.Marshal(m)
++ if err != nil {
++ return err
++ }
++ writeJSON(w, b)
++ return nil
+ }
+
+ func postContainersKill(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+@@ -166,8 +168,12 @@
+ if err != nil {
+ return err
+ }
+-
+- return writeJSON(w, http.StatusOK, outs)
++ b, err := json.Marshal(outs)
++ if err != nil {
++ return err
++ }
++ writeJSON(w, b)
++ return nil
+ }
+
+ func getImagesViz(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+@@ -178,7 +184,13 @@
+ }
+
+ func getInfo(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+- return writeJSON(w, http.StatusOK, srv.DockerInfo())
++ out := srv.DockerInfo()
++ b, err := json.Marshal(out)
++ if err != nil {
++ return err
++ }
++ writeJSON(w, b)
++ return nil
+ }
+
+ func getEvents(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+@@ -247,8 +259,12 @@
+ if err != nil {
+ return err
+ }
+-
+- return writeJSON(w, http.StatusOK, outs)
++ b, err := json.Marshal(outs)
++ if err != nil {
++ return err
++ }
++ writeJSON(w, b)
++ return nil
+ }
+
+ func getContainersChanges(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+@@ -260,8 +276,12 @@
+ if err != nil {
+ return err
+ }
+-
+- return writeJSON(w, http.StatusOK, changesStr)
++ b, err := json.Marshal(changesStr)
++ if err != nil {
++ return err
++ }
++ writeJSON(w, b)
++ return nil
+ }
+
+ func getContainersTop(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+@@ -280,8 +300,12 @@
+ if err != nil {
+ return err
+ }
+-
+- return writeJSON(w, http.StatusOK, procsStr)
++ b, err := json.Marshal(procsStr)
++ if err != nil {
++ return err
++ }
++ writeJSON(w, b)
++ return nil
+ }
+
+ func getContainersJSON(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+@@ -303,18 +327,23 @@
+ n = -1
+ }
+
++ var b []byte
+ outs := srv.Containers(all, size, n, since, before)
+-
+ if version < 1.5 {
+ outs2 := []APIContainersOld{}
+ for _, ctnr := range outs {
+ outs2 = append(outs2, ctnr.ToLegacy())
+ }
+-
+- return writeJSON(w, http.StatusOK, outs2)
++ b, err = json.Marshal(outs2)
+ } else {
+- return writeJSON(w, http.StatusOK, outs)
++ b, err = json.Marshal(outs)
++ }
++
++ if err != nil {
++ return err
+ }
++ writeJSON(w, b)
++ return nil
+ }
+
+ func postImagesTag(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+@@ -356,8 +385,13 @@
+ if err != nil {
+ return err
+ }
+-
+- return writeJSON(w, http.StatusCreated, &APIID{id})
++ b, err := json.Marshal(&APIID{id})
++ if err != nil {
++ return err
++ }
++ w.WriteHeader(http.StatusCreated)
++ writeJSON(w, b)
++ return nil
+ }
+
+ // Creates an image from Pull or from Import
+@@ -421,8 +455,12 @@
+ if err != nil {
+ return err
+ }
+-
+- return writeJSON(w, http.StatusOK, outs)
++ b, err := json.Marshal(outs)
++ if err != nil {
++ return err
++ }
++ writeJSON(w, b)
++ return nil
+ }
+
+ func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+@@ -447,8 +485,12 @@
+ return nil
+ }
+ }
+-
+- return writeJSON(w, http.StatusOK, &APIID{ID: imgID})
++ b, err := json.Marshal(&APIID{ID: imgID})
++ if err != nil {
++ return err
++ }
++ writeJSON(w, b)
++ return nil
+ }
+
+ func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+@@ -510,7 +552,7 @@
+ return err
+ }
+
+- if !config.NetworkDisabled && len(config.Dns) == 0 && len(srv.runtime.Dns) == 0 && utils.CheckLocalDns(resolvConf) {
++ if len(config.Dns) == 0 && len(srv.runtime.Dns) == 0 && utils.CheckLocalDns(resolvConf) {
+ out.Warnings = append(out.Warnings, fmt.Sprintf("Docker detected local DNS server on resolv.conf. Using default external servers: %v", defaultDns))
+ config.Dns = defaultDns
+ }
+@@ -530,12 +572,18 @@
+ out.Warnings = append(out.Warnings, "Your kernel does not support memory swap capabilities. Limitation discarded.")
+ }
+
+- if !config.NetworkDisabled && srv.runtime.capabilities.IPv4ForwardingDisabled {
++ if srv.runtime.capabilities.IPv4ForwardingDisabled {
+ log.Println("Warning: IPv4 forwarding is disabled.")
+ out.Warnings = append(out.Warnings, "IPv4 forwarding is disabled.")
+ }
+
+- return writeJSON(w, http.StatusCreated, out)
++ b, err := json.Marshal(out)
++ if err != nil {
++ return err
++ }
++ w.WriteHeader(http.StatusCreated)
++ writeJSON(w, b)
++ return nil
+ }
+
+ func postContainersRestart(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+@@ -591,7 +639,11 @@
+ }
+ if imgs != nil {
+ if len(imgs) != 0 {
+- return writeJSON(w, http.StatusOK, imgs)
++ b, err := json.Marshal(imgs)
++ if err != nil {
++ return err
++ }
++ writeJSON(w, b)
+ } else {
+ return fmt.Errorf("Conflict, %s wasn't deleted", name)
+ }
+@@ -602,11 +654,11 @@
+ }
+
+ func postContainersStart(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+- var hostConfig *HostConfig
++ hostConfig := &HostConfig{}
++
+ // allow a nil body for backwards compatibility
+ if r.Body != nil {
+ if matchesContentType(r.Header.Get("Content-Type"), "application/json") {
+- hostConfig = &HostConfig{}
+ if err := json.NewDecoder(r.Body).Decode(hostConfig); err != nil {
+ return err
+ }
+@@ -654,8 +706,12 @@
+ if err != nil {
+ return err
+ }
+-
+- return writeJSON(w, http.StatusOK, &APIWait{StatusCode: status})
++ b, err := json.Marshal(&APIWait{StatusCode: status})
++ if err != nil {
++ return err
++ }
++ writeJSON(w, b)
++ return nil
+ }
+
+ func postContainersResize(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+@@ -802,8 +858,12 @@
+ if err == nil {
+ return fmt.Errorf("Conflict between containers and images")
+ }
+-
+- return writeJSON(w, http.StatusOK, container)
++ b, err := json.Marshal(container)
++ if err != nil {
++ return err
++ }
++ writeJSON(w, b)
++ return nil
+ }
+
+ func getImagesByName(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+@@ -821,8 +881,12 @@
+ if err == nil {
+ return fmt.Errorf("Conflict between containers and images")
+ }
+-
+- return writeJSON(w, http.StatusOK, image)
++ b, err := json.Marshal(image)
++ if err != nil {
++ return err
++ }
++ writeJSON(w, b)
++ return nil
+ }
+
+ func postBuild(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
+@@ -833,7 +897,6 @@
+ repoName := r.FormValue("t")
+ rawSuppressOutput := r.FormValue("q")
+ rawNoCache := r.FormValue("nocache")
+- rawRm := r.FormValue("rm")
+ repoName, tag := utils.ParseRepositoryTag(repoName)
+
+ var context io.Reader
+@@ -884,12 +947,8 @@
+ if err != nil {
+ return err
+ }
+- rm, err := getBoolParam(rawRm)
+- if err != nil {
+- return err
+- }
+
+- b := NewBuildFile(srv, utils.NewWriteFlusher(w), !suppressOutput, !noCache, rm)
++ b := NewBuildFile(srv, utils.NewWriteFlusher(w), !suppressOutput, !noCache)
+ id, err := b.Build(context)
+ if err != nil {
+ fmt.Fprintf(w, "Error build: %s\n", err)
+diff -uNr docker-0.6.2/api_test.go docker-devmapper/api_test.go
+--- docker-0.6.2/api_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/api_test.go 2013-09-23 10:37:38.713306858 -0500
+@@ -445,7 +445,7 @@
+ }
+
+ func TestGetContainersTop(t *testing.T) {
+- t.Skip("Fixme. Skipping test for now. Reported error when testing using dind: 'api_test.go:527: Expected 2 processes, found 0.'")
++ t.Skip("Fixme. Skipping test for now. Reported error when testing using dind: 'api_test.go:527: Expected 2 processes, found 0.'")
+ runtime, err := newTestRuntime()
+ if err != nil {
+ t.Fatal(err)
+@@ -647,13 +647,21 @@
+ t.Fatal(err)
+ }
+
+- if _, err := os.Stat(path.Join(container.rwPath(), "test")); err != nil {
++ if err := container.EnsureMounted(); err != nil {
++ t.Fatalf("Unable to mount container: %s", err)
++ }
++
++ if _, err := os.Stat(path.Join(container.RootfsPath(), "test")); err != nil {
+ if os.IsNotExist(err) {
+ utils.Debugf("Err: %s", err)
+ t.Fatalf("The test file has not been created")
+ }
+ t.Fatal(err)
+ }
++
++ if err := container.Unmount(); err != nil {
++ t.Fatalf("Unable to unmount container: %s", err)
++ }
+ }
+
+ func TestPostContainersKill(t *testing.T) {
+diff -uNr docker-0.6.2/archive.go docker-devmapper/archive.go
+--- docker-0.6.2/archive.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/archive.go 2013-09-23 10:37:39.546304541 -0500
+@@ -80,20 +80,73 @@
+ // Tar creates an archive from the directory at `path`, and returns it as a
+ // stream of bytes.
+ func Tar(path string, compression Compression) (io.Reader, error) {
+- return TarFilter(path, compression, nil)
++ return TarFilter(path, compression, nil, true, nil)
++}
++
++func escapeName(name string) string {
++ escaped := make([]byte,0)
++ for i, c := range []byte(name) {
++ if i == 0 && c == '/' {
++ continue
++ }
++ // all printable chars except "-" which is 0x2d
++ if (0x20 <= c && c <= 0x7E) && c != 0x2d {
++ escaped = append(escaped, c)
++ } else {
++ escaped = append(escaped, fmt.Sprintf("\\%03o", c)...)
++ }
++ }
++ return string(escaped)
+ }
+
+ // Tar creates an archive from the directory at `path`, only including files whose relative
+ // paths are included in `filter`. If `filter` is nil, then all files are included.
+-func TarFilter(path string, compression Compression, filter []string) (io.Reader, error) {
+- args := []string{"tar", "--numeric-owner", "-f", "-", "-C", path}
++func TarFilter(path string, compression Compression, filter []string, recursive bool, createFiles []string) (io.Reader, error) {
++ args := []string{"tar", "--numeric-owner", "-f", "-", "-C", path, "-T", "-",}
+ if filter == nil {
+ filter = []string{"."}
+ }
++ args = append(args, "-c"+compression.Flag())
++
++ if !recursive {
++ args = append(args, "--no-recursion")
++ }
++
++ files := ""
+ for _, f := range filter {
+- args = append(args, "-c"+compression.Flag(), f)
++ files = files + escapeName(f) + "\n"
+ }
+- return CmdStream(exec.Command(args[0], args[1:]...))
++
++ tmpDir := ""
++
++ if createFiles != nil {
++ tmpDir, err := ioutil.TempDir("", "docker-tar")
++ if err != nil {
++ return nil, err
++ }
++
++ files = files + "-C" + tmpDir + "\n"
++ for _, f := range createFiles {
++ path := filepath.Join(tmpDir, f)
++ err := os.MkdirAll(filepath.Dir(path), 0600)
++ if err != nil {
++ return nil, err
++ }
++
++ if file, err := os.OpenFile(path, os.O_CREATE, 0600); err != nil {
++ return nil, err
++ } else {
++ file.Close()
++ }
++ files = files + escapeName(f) + "\n"
++ }
++ }
++
++ return CmdStream(exec.Command(args[0], args[1:]...), &files, func () {
++ if tmpDir != "" {
++ _ = os.RemoveAll(tmpDir)
++ }
++ })
+ }
+
+ // Untar reads a stream of bytes from `archive`, parses it as a tar archive,
+@@ -140,7 +193,7 @@
+ // TarUntar aborts and returns the error.
+ func TarUntar(src string, filter []string, dst string) error {
+ utils.Debugf("TarUntar(%s %s %s)", src, filter, dst)
+- archive, err := TarFilter(src, Uncompressed, filter)
++ archive, err := TarFilter(src, Uncompressed, filter, true, nil)
+ if err != nil {
+ return err
+ }
+@@ -227,7 +280,18 @@
+ // CmdStream executes a command, and returns its stdout as a stream.
+ // If the command fails to run or doesn't complete successfully, an error
+ // will be returned, including anything written on stderr.
+-func CmdStream(cmd *exec.Cmd) (io.Reader, error) {
++func CmdStream(cmd *exec.Cmd, input *string, atEnd func()) (io.Reader, error) {
++ if input != nil {
++ stdin, err := cmd.StdinPipe()
++ if err != nil {
++ return nil, err
++ }
++ // Write stdin if any
++ go func() {
++ _, _ = stdin.Write([]byte(*input))
++ stdin.Close()
++ }()
++ }
+ stdout, err := cmd.StdoutPipe()
+ if err != nil {
+ return nil, err
+@@ -258,6 +322,9 @@
+ } else {
+ pipeW.Close()
+ }
++ if atEnd != nil {
++ atEnd()
++ }
+ }()
+ // Run the command and return the pipe
+ if err := cmd.Start(); err != nil {
+diff -uNr docker-0.6.2/archive_test.go docker-devmapper/archive_test.go
+--- docker-0.6.2/archive_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/archive_test.go 2013-09-23 10:37:39.133305690 -0500
+@@ -14,7 +14,7 @@
+
+ func TestCmdStreamLargeStderr(t *testing.T) {
+ cmd := exec.Command("/bin/sh", "-c", "dd if=/dev/zero bs=1k count=1000 of=/dev/stderr; echo hello")
+- out, err := CmdStream(cmd)
++ out, err := CmdStream(cmd, nil, nil)
+ if err != nil {
+ t.Fatalf("Failed to start command: %s", err)
+ }
+@@ -35,7 +35,7 @@
+
+ func TestCmdStreamBad(t *testing.T) {
+ badCmd := exec.Command("/bin/sh", "-c", "echo hello; echo >&2 error couldn\\'t reverse the phase pulser; exit 1")
+- out, err := CmdStream(badCmd)
++ out, err := CmdStream(badCmd, nil, nil)
+ if err != nil {
+ t.Fatalf("Failed to start command: %s", err)
+ }
+@@ -50,7 +50,7 @@
+
+ func TestCmdStreamGood(t *testing.T) {
+ cmd := exec.Command("/bin/sh", "-c", "echo hello; exit 0")
+- out, err := CmdStream(cmd)
++ out, err := CmdStream(cmd, nil, nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+diff -uNr docker-0.6.2/buildfile.go docker-devmapper/buildfile.go
+--- docker-0.6.2/buildfile.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/buildfile.go 2013-09-23 10:37:39.238305398 -0500
+@@ -1,6 +1,7 @@
+ package docker
+
+ import (
++ "bufio"
+ "encoding/json"
+ "fmt"
+ "github.com/dotcloud/docker/utils"
+@@ -30,7 +31,6 @@
+ context string
+ verbose bool
+ utilizeCache bool
+- rm bool
+
+ tmpContainers map[string]struct{}
+ tmpImages map[string]struct{}
+@@ -38,11 +38,15 @@
+ out io.Writer
+ }
+
+-func (b *buildFile) clearTmp(containers map[string]struct{}) {
++func (b *buildFile) clearTmp(containers, images map[string]struct{}) {
+ for c := range containers {
+ tmp := b.runtime.Get(c)
+ b.runtime.Destroy(tmp)
+- fmt.Fprintf(b.out, "Removing intermediate container %s\n", utils.TruncateID(c))
++ utils.Debugf("Removing container %s", c)
++ }
++ for i := range images {
++ b.runtime.DeleteImage(i)
++ utils.Debugf("Removing image %s", i)
+ }
+ }
+
+@@ -454,9 +458,6 @@
+ return nil
+ }
+
+-// Long lines can be split with a backslash
+-var lineContinuation = regexp.MustCompile(`\s*\\\s*\n`)
+-
+ func (b *buildFile) Build(context io.Reader) (string, error) {
+ // FIXME: @creack any reason for using /tmp instead of ""?
+ // FIXME: @creack "name" is a terrible variable name
+@@ -469,18 +470,22 @@
+ }
+ defer os.RemoveAll(name)
+ b.context = name
+- filename := path.Join(name, "Dockerfile")
+- if _, err := os.Stat(filename); os.IsNotExist(err) {
+- return "", fmt.Errorf("Can't build a directory with no Dockerfile")
+- }
+- fileBytes, err := ioutil.ReadFile(filename)
++ dockerfile, err := os.Open(path.Join(name, "Dockerfile"))
+ if err != nil {
+- return "", err
++ return "", fmt.Errorf("Can't build a directory with no Dockerfile")
+ }
+- dockerfile := string(fileBytes)
+- dockerfile = lineContinuation.ReplaceAllString(dockerfile, "")
++ // FIXME: "file" is also a terrible variable name ;)
++ file := bufio.NewReader(dockerfile)
+ stepN := 0
+- for _, line := range strings.Split(dockerfile, "\n") {
++ for {
++ line, err := file.ReadString('\n')
++ if err != nil {
++ if err == io.EOF && line == "" {
++ break
++ } else if err != io.EOF {
++ return "", err
++ }
++ }
+ line = strings.Trim(strings.Replace(line, "\t", " ", -1), " \t\r\n")
+ // Skip comments and empty line
+ if len(line) == 0 || line[0] == '#' {
+@@ -511,15 +516,12 @@
+ }
+ if b.image != "" {
+ fmt.Fprintf(b.out, "Successfully built %s\n", utils.TruncateID(b.image))
+- if b.rm {
+- b.clearTmp(b.tmpContainers)
+- }
+ return b.image, nil
+ }
+ return "", fmt.Errorf("An error occurred during the build\n")
+ }
+
+-func NewBuildFile(srv *Server, out io.Writer, verbose, utilizeCache, rm bool) BuildFile {
++func NewBuildFile(srv *Server, out io.Writer, verbose, utilizeCache bool) BuildFile {
+ return &buildFile{
+ runtime: srv.runtime,
+ srv: srv,
+@@ -529,6 +531,5 @@
+ tmpImages: make(map[string]struct{}),
+ verbose: verbose,
+ utilizeCache: utilizeCache,
+- rm: rm,
+ }
+ }
+diff -uNr docker-0.6.2/buildfile_test.go docker-devmapper/buildfile_test.go
+--- docker-0.6.2/buildfile_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/buildfile_test.go 2013-09-23 10:37:39.263305328 -0500
+@@ -45,34 +45,6 @@
+ nil,
+ },
+
+- // Exactly the same as above, except uses a line split with a \ to test
+- // multiline support.
+- {
+- `
+-from {IMAGE}
+-run sh -c 'echo root:testpass \
+- > /tmp/passwd'
+-run mkdir -p /var/run/sshd
+-run [ "$(cat /tmp/passwd)" = "root:testpass" ]
+-run [ "$(ls -d /var/run/sshd)" = "/var/run/sshd" ]
+-`,
+- nil,
+- nil,
+- },
+-
+- // Line containing literal "\n"
+- {
+- `
+-from {IMAGE}
+-run sh -c 'echo root:testpass > /tmp/passwd'
+-run echo "foo \n bar"; echo "baz"
+-run mkdir -p /var/run/sshd
+-run [ "$(cat /tmp/passwd)" = "root:testpass" ]
+-run [ "$(ls -d /var/run/sshd)" = "/var/run/sshd" ]
+-`,
+- nil,
+- nil,
+- },
+ {
+ `
+ from {IMAGE}
+@@ -257,7 +229,7 @@
+ ip := srv.runtime.networkManager.bridgeNetwork.IP
+ dockerfile := constructDockerfile(context.dockerfile, ip, port)
+
+- buildfile := NewBuildFile(srv, ioutil.Discard, false, useCache, false)
++ buildfile := NewBuildFile(srv, ioutil.Discard, false, useCache)
+ id, err := buildfile.Build(mkTestContext(dockerfile, context.files, t))
+ if err != nil {
+ t.Fatal(err)
+@@ -498,7 +470,7 @@
+ ip := srv.runtime.networkManager.bridgeNetwork.IP
+ dockerfile := constructDockerfile(context.dockerfile, ip, port)
+
+- buildfile := NewBuildFile(srv, ioutil.Discard, false, true, false)
++ buildfile := NewBuildFile(srv, ioutil.Discard, false, true)
+ _, err = buildfile.Build(mkTestContext(dockerfile, context.files, t))
+
+ if err == nil {
+@@ -546,7 +518,7 @@
+ ip := srv.runtime.networkManager.bridgeNetwork.IP
+ dockerfile := constructDockerfile(context.dockerfile, ip, port)
+
+- buildfile := NewBuildFile(srv, ioutil.Discard, false, true, false)
++ buildfile := NewBuildFile(srv, ioutil.Discard, false, true)
+ _, err = buildfile.Build(mkTestContext(dockerfile, context.files, t))
+
+ if err == nil {
+diff -uNr docker-0.6.2/CHANGELOG.md docker-devmapper/CHANGELOG.md
+--- docker-0.6.2/CHANGELOG.md 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/CHANGELOG.md 2013-09-23 10:37:39.276305292 -0500
+@@ -1,24 +1,5 @@
+ # Changelog
+
+-## 0.6.2 (2013-09-17)
+-+ Hack: Vendor all dependencies
+-+ Builder: Add -rm option in order to remove intermediate containers
+-+ Runtime: Add domainname support
+-+ Runtime: Implement image filtering with path.Match
+-* Builder: Allow multiline for the RUN instruction
+-* Runtime: Remove unnecesasry warnings
+-* Runtime: Only mount the hostname file when the config exists
+-* Runtime: Handle signals within the `docker login` command
+-* Runtime: Remove os/user dependency
+-* Registry: Implement login with private registry
+-* Remote API: Bump to v1.5
+-* Packaging: Break down hack/make.sh into small scripts, one per 'bundle': test, binary, ubuntu etc.
+-* Documentation: General improvments
+-- Runtime: UID and GID are now also applied to volumes
+-- Runtime: `docker start` set error code upon error
+-- Runtime: `docker run` set the same error code as the process started
+-- Registry: Fix push issues
+-
+ ## 0.6.1 (2013-08-23)
+ * Registry: Pass "meta" headers in API calls to the registry
+ - Packaging: Use correct upstart script with new build tool
+diff -uNr docker-0.6.2/changes.go docker-devmapper/changes.go
+--- docker-0.6.2/changes.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/changes.go 2013-09-23 10:37:39.487304706 -0500
+@@ -5,6 +5,7 @@
+ "os"
+ "path/filepath"
+ "strings"
++ "syscall"
+ )
+
+ type ChangeType int
+@@ -33,7 +34,7 @@
+ return fmt.Sprintf("%s %s", kind, change.Path)
+ }
+
+-func Changes(layers []string, rw string) ([]Change, error) {
++func ChangesAUFS(layers []string, rw string) ([]Change, error) {
+ var changes []Change
+ err := filepath.Walk(rw, func(path string, f os.FileInfo, err error) error {
+ if err != nil {
+@@ -104,3 +105,289 @@
+ }
+ return changes, nil
+ }
++
++type FileInfo struct {
++ parent *FileInfo
++ name string
++ stat syscall.Stat_t
++ children map[string]*FileInfo
++}
++
++func (root *FileInfo) LookUp(path string) *FileInfo {
++ parent := root
++ if path == "/" {
++ return root
++ }
++
++ pathElements := strings.Split(path, "/")
++ for _, elem := range pathElements {
++ if elem != "" {
++ child := parent.children[elem]
++ if child == nil {
++ return nil
++ }
++ parent = child
++ }
++ }
++ return parent
++}
++
++func (info *FileInfo)path() string {
++ if info.parent == nil {
++ return "/"
++ }
++ return filepath.Join(info.parent.path(), info.name)
++}
++
++func (info *FileInfo)unlink() {
++ if info.parent != nil {
++ delete(info.parent.children, info.name)
++ }
++}
++
++func (info *FileInfo)Remove(path string) bool {
++ child := info.LookUp(path)
++ if child != nil {
++ child.unlink()
++ return true
++ }
++ return false
++}
++
++func (info *FileInfo)isDir() bool {
++ return info.parent == nil || info.stat.Mode&syscall.S_IFDIR == syscall.S_IFDIR
++}
++
++
++func (info *FileInfo)addChanges(oldInfo *FileInfo, changes *[]Change) {
++ if oldInfo == nil {
++ // add
++ change := Change{
++ Path: info.path(),
++ Kind: ChangeAdd,
++ }
++ *changes = append(*changes, change)
++ }
++
++ // We make a copy so we can modify it to detect additions
++ // also, we only recurse on the old dir if the new info is a directory
++ // otherwise any previous delete/change is considered recursive
++ oldChildren := make(map[string]*FileInfo)
++ if oldInfo != nil && info.isDir() {
++ for k, v := range oldInfo.children {
++ oldChildren[k] = v
++ }
++ }
++
++ for name, newChild := range info.children {
++ oldChild, _ := oldChildren[name]
++ if oldChild != nil {
++ // change?
++ oldStat := &oldChild.stat
++ newStat := &newChild.stat
++ // Note: We can't compare inode or ctime or blocksize here, because these change
++ // when copying a file into a container. However, that is not generally a problem
++ // because any content change will change mtime, and any status change should
++ // be visible when actually comparing the stat fields. The only time this
++ // breaks down is if some code intentionally hides a change by setting
++ // back mtime
++ oldMtime := syscall.NsecToTimeval(oldStat.Mtim.Nano())
++ newMtime := syscall.NsecToTimeval(oldStat.Mtim.Nano())
++ if oldStat.Mode != newStat.Mode ||
++ oldStat.Uid != newStat.Uid ||
++ oldStat.Gid != newStat.Gid ||
++ oldStat.Rdev != newStat.Rdev ||
++ // Don't look at size for dirs, its not a good measure of change
++ (oldStat.Size != newStat.Size && oldStat.Mode &syscall.S_IFDIR != syscall.S_IFDIR) ||
++ oldMtime.Sec != newMtime.Sec ||
++ oldMtime.Usec != newMtime.Usec {
++ change := Change{
++ Path: newChild.path(),
++ Kind: ChangeModify,
++ }
++ *changes = append(*changes, change)
++ }
++
++ // Remove from copy so we can detect deletions
++ delete(oldChildren, name)
++ }
++
++ newChild.addChanges(oldChild, changes)
++ }
++ for _, oldChild := range oldChildren {
++ // delete
++ change := Change{
++ Path: oldChild.path(),
++ Kind: ChangeDelete,
++ }
++ *changes = append(*changes, change)
++ }
++
++
++}
++
++func (info *FileInfo)Changes(oldInfo *FileInfo) []Change {
++ var changes []Change
++
++ info.addChanges(oldInfo, &changes)
++
++ return changes
++}
++
++
++func newRootFileInfo() *FileInfo {
++ root := &FileInfo {
++ name: "/",
++ children: make(map[string]*FileInfo),
++ }
++ return root
++}
++
++func applyLayer(root *FileInfo, layer string) error {
++ err := filepath.Walk(layer, func(layerPath string, f os.FileInfo, err error) error {
++ if err != nil {
++ return err
++ }
++
++ // Skip root
++ if layerPath == layer {
++ return nil
++ }
++
++ // rebase path
++ relPath, err := filepath.Rel(layer, layerPath)
++ if err != nil {
++ return err
++ }
++ relPath = filepath.Join("/", relPath)
++
++ // Skip AUFS metadata
++ if matched, err := filepath.Match("/.wh..wh.*", relPath); err != nil || matched {
++ if err != nil || !f.IsDir() {
++ return err
++ }
++ return filepath.SkipDir
++ }
++
++ var layerStat syscall.Stat_t
++ err = syscall.Lstat(layerPath, &layerStat)
++ if err != nil {
++ return err
++ }
++
++ file := filepath.Base(relPath)
++ // If there is a whiteout, then the file was removed
++ if strings.HasPrefix(file, ".wh.") {
++ originalFile := file[len(".wh."):]
++ deletePath := filepath.Join(filepath.Dir(relPath), originalFile)
++
++ root.Remove(deletePath)
++ } else {
++ // Added or changed file
++ existing := root.LookUp(relPath)
++ if existing != nil {
++ // Changed file
++ existing.stat = layerStat
++ if !existing.isDir() {
++ // Changed from dir to non-dir, delete all previous files
++ existing.children = make(map[string]*FileInfo)
++ }
++ } else {
++ // Added file
++ parent := root.LookUp(filepath.Dir(relPath))
++ if parent == nil {
++ return fmt.Errorf("collectFileInfo: Unexpectedly no parent for %s", relPath)
++ }
++
++ info := &FileInfo {
++ name: filepath.Base(relPath),
++ children: make(map[string]*FileInfo),
++ parent: parent,
++ stat: layerStat,
++ }
++
++ parent.children[info.name] = info
++ }
++ }
++ return nil
++ })
++ return err
++}
++
++
++func collectFileInfo(sourceDir string) (*FileInfo, error) {
++ root := newRootFileInfo()
++
++ err := filepath.Walk(sourceDir, func(path string, f os.FileInfo, err error) error {
++ if err != nil {
++ return err
++ }
++
++ // Rebase path
++ relPath, err := filepath.Rel(sourceDir, path)
++ if err != nil {
++ return err
++ }
++ relPath = filepath.Join("/", relPath)
++
++ if relPath == "/" {
++ return nil
++ }
++
++ parent := root.LookUp(filepath.Dir(relPath))
++ if parent == nil {
++ return fmt.Errorf("collectFileInfo: Unexpectedly no parent for %s", relPath)
++ }
++
++ info := &FileInfo {
++ name: filepath.Base(relPath),
++ children: make(map[string]*FileInfo),
++ parent: parent,
++ }
++
++ if err := syscall.Lstat(path, &info.stat); err != nil {
++ return err
++ }
++
++ parent.children[info.name] = info
++
++ return nil
++ })
++ if err != nil {
++ return nil, err
++ }
++ return root, nil
++}
++
++func ChangesLayers(newDir string, layers []string) ([]Change, error) {
++ newRoot, err := collectFileInfo(newDir)
++ if err != nil {
++ return nil, err
++ }
++ oldRoot := newRootFileInfo()
++ for i := len(layers)-1; i >= 0; i-- {
++ layer := layers[i]
++ if err = applyLayer(oldRoot, layer); err != nil {
++ return nil, err
++ }
++ }
++
++ return newRoot.Changes(oldRoot), nil
++}
++
++func ChangesDirs(newDir, oldDir string) ([]Change, error) {
++ oldRoot, err := collectFileInfo(oldDir)
++ if err != nil {
++ return nil, err
++ }
++ newRoot, err := collectFileInfo(newDir)
++ if err != nil {
++ return nil, err
++ }
++
++ // Ignore changes in .docker-id
++ _ = newRoot.Remove("/.docker-id")
++ _ = oldRoot.Remove("/.docker-id")
++
++ return newRoot.Changes(oldRoot), nil
++}
+diff -uNr docker-0.6.2/commands.go docker-devmapper/commands.go
+--- docker-0.6.2/commands.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/commands.go 2013-09-23 10:37:39.246305376 -0500
+@@ -165,7 +165,6 @@
+ tag := cmd.String("t", "", "Repository name (and optionally a tag) to be applied to the resulting image in case of success")
+ suppressOutput := cmd.Bool("q", false, "Suppress verbose build output")
+ noCache := cmd.Bool("no-cache", false, "Do not use cache when building the image")
+- rm := cmd.Bool("rm", false, "Remove intermediate containers after a successful build")
+ if err := cmd.Parse(args); err != nil {
+ return nil
+ }
+@@ -216,9 +215,6 @@
+ if *noCache {
+ v.Set("nocache", "1")
+ }
+- if *rm {
+- v.Set("rm", "1")
+- }
+ req, err := http.NewRequest("POST", fmt.Sprintf("/v%g/build?%s", APIVERSION, v.Encode()), body)
+ if err != nil {
+ return err
+diff -uNr docker-0.6.2/container.go docker-devmapper/container.go
+--- docker-0.6.2/container.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/container.go 2013-09-23 10:37:38.715306852 -0500
+@@ -290,12 +290,17 @@
+
+ // Inject the io.Reader at the given path. Note: do not close the reader
+ func (container *Container) Inject(file io.Reader, pth string) error {
++ if err := container.EnsureMounted(); err != nil {
++ return err
++ }
++
+ // Make sure the directory exists
+- if err := os.MkdirAll(path.Join(container.rwPath(), path.Dir(pth)), 0755); err != nil {
++ if err := os.MkdirAll(path.Join(container.RootfsPath(), path.Dir(pth)), 0755); err != nil {
+ return err
+ }
++
+ // FIXME: Handle permissions/already existing dest
+- dest, err := os.Create(path.Join(container.rwPath(), pth))
++ dest, err := os.Create(path.Join(container.RootfsPath(), pth))
+ if err != nil {
+ return err
+ }
+@@ -564,7 +569,7 @@
+ container.State.Lock()
+ defer container.State.Unlock()
+
+- if hostConfig == nil { // in docker start of docker restart we want to reuse previous HostConfigFile
++ if len(hostConfig.Binds) == 0 && len(hostConfig.LxcConf) == 0 {
+ hostConfig, _ = container.ReadHostConfig()
+ }
+
+@@ -648,7 +653,7 @@
+ continue
+ }
+ if err := os.MkdirAll(path.Join(container.RootfsPath(), volPath), 0755); err != nil {
+- return err
++ return nil
+ }
+ container.Volumes[volPath] = id
+ if isRW, exists := c.VolumesRW[volPath]; exists {
+@@ -707,19 +712,6 @@
+ }
+ }
+ }
+- var stat syscall.Stat_t
+- if err := syscall.Stat(rootVolPath, &stat); err != nil {
+- return err
+- }
+- var srcStat syscall.Stat_t
+- if err := syscall.Stat(srcPath, &srcStat); err != nil {
+- return err
+- }
+- if stat.Uid != srcStat.Uid || stat.Gid != srcStat.Gid {
+- if err := os.Chown(srcPath, int(stat.Uid), int(stat.Gid)); err != nil {
+- return err
+- }
+- }
+ }
+ }
+
+@@ -728,6 +720,7 @@
+ }
+
+ params := []string{
++ "lxc-start",
+ "-n", container.ID,
+ "-f", container.lxcConfigPath(),
+ "--",
+@@ -776,7 +769,21 @@
+ params = append(params, "--", container.Path)
+ params = append(params, container.Args...)
+
+- container.cmd = exec.Command("lxc-start", params...)
++ if RootIsShared() {
++ // lxc-start really needs / to be private, or all kinds of stuff break
++ // What we really want is to clone into a new namespace and then
++ // mount / MS_REC|MS_PRIVATE, but since we can't really clone or fork
++ // without exec in go we have to do this horrible shell hack...
++ shellString :=
++ "mount --make-rprivate /; exec " +
++ utils.ShellQuoteArguments(params)
++
++ params = []string{
++ "unshare", "-m", "--", "/bin/sh", "-c", shellString,
++ }
++ }
++
++ container.cmd = exec.Command(params[0], params[1:]...)
+
+ // Setup logging of stdout and stderr to disk
+ if err := container.runtime.LogToDisk(container.stdout, container.logPath("json"), "stdout"); err != nil {
+@@ -1092,7 +1099,15 @@
+ }
+
+ func (container *Container) ExportRw() (Archive, error) {
+- return Tar(container.rwPath(), Uncompressed)
++ if err := container.EnsureMounted(); err != nil {
++ return nil, err
++ }
++
++ image, err := container.GetImage()
++ if err != nil {
++ return nil, err
++ }
++ return image.ExportChanges(container.runtime, container.RootfsPath(), container.rwPath(), container.ID)
+ }
+
+ func (container *Container) RwChecksum() (string, error) {
+@@ -1134,20 +1149,33 @@
+ return container.Mount()
+ }
+
++func (container *Container) EnsureUnmounted() error {
++ if mounted, err := container.Mounted(); err != nil {
++ return err
++ } else if !mounted {
++ return nil
++ }
++ return container.Unmount()
++}
++
+ func (container *Container) Mount() error {
+ image, err := container.GetImage()
+ if err != nil {
+ return err
+ }
+- return image.Mount(container.RootfsPath(), container.rwPath())
++ return image.Mount(container.runtime, container.RootfsPath(), container.rwPath(), container.ID)
+ }
+
+ func (container *Container) Changes() ([]Change, error) {
++ if err := container.EnsureMounted(); err != nil {
++ return nil, err
++ }
++
+ image, err := container.GetImage()
+ if err != nil {
+ return nil, err
+ }
+- return image.Changes(container.rwPath())
++ return image.Changes(container.runtime, container.RootfsPath(), container.rwPath(), container.ID)
+ }
+
+ func (container *Container) GetImage() (*Image, error) {
+@@ -1158,11 +1186,20 @@
+ }
+
+ func (container *Container) Mounted() (bool, error) {
+- return Mounted(container.RootfsPath())
++ image, err := container.GetImage()
++ if err != nil {
++ return false, err
++ }
++ return image.Mounted(container.runtime, container.RootfsPath(), container.rwPath())
+ }
+
+ func (container *Container) Unmount() error {
+- return Unmount(container.RootfsPath())
++ image, err := container.GetImage()
++ if err != nil {
++ return err
++ }
++ err = image.Unmount(container.runtime, container.RootfsPath(), container.ID)
++ return err
+ }
+
+ // ShortID returns a shorthand version of the container's id for convenience.
+@@ -1250,5 +1287,5 @@
+ filter = []string{path.Base(basePath)}
+ basePath = path.Dir(basePath)
+ }
+- return TarFilter(basePath, Uncompressed, filter)
++ return TarFilter(basePath, Uncompressed, filter, true, nil)
+ }
+diff -uNr docker-0.6.2/container_test.go docker-devmapper/container_test.go
+--- docker-0.6.2/container_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/container_test.go 2013-09-23 10:37:38.668306983 -0500
+@@ -1196,51 +1196,6 @@
+ return tmpDir
+ }
+
+-// Test for #1737
+-func TestCopyVolumeUidGid(t *testing.T) {
+- r := mkRuntime(t)
+- defer nuke(r)
+-
+- // Add directory not owned by root
+- container1, _, _ := mkContainer(r, []string{"_", "/bin/sh", "-c", "mkdir -p /hello && chown daemon.daemon /hello"}, t)
+- defer r.Destroy(container1)
+-
+- if container1.State.Running {
+- t.Errorf("Container shouldn't be running")
+- }
+- if err := container1.Run(); err != nil {
+- t.Fatal(err)
+- }
+- if container1.State.Running {
+- t.Errorf("Container shouldn't be running")
+- }
+-
+- rwTar, err := container1.ExportRw()
+- if err != nil {
+- t.Error(err)
+- }
+- img, err := r.graph.Create(rwTar, container1, "unit test commited image", "", nil)
+- if err != nil {
+- t.Error(err)
+- }
+-
+- // Test that the uid and gid is copied from the image to the volume
+- tmpDir1 := tempDir(t)
+- defer os.RemoveAll(tmpDir1)
+- stdout1, _ := runContainer(r, []string{"-v", fmt.Sprintf("%s:/hello", tmpDir1), img.ID, "stat", "-c", "%U %G", "/hello"}, t)
+- if !strings.Contains(stdout1, "daemon daemon") {
+- t.Fatal("Container failed to transfer uid and gid to volume")
+- }
+-
+- // Test that the uid and gid is not copied from the image when the volume is read only
+- tmpDir2 := tempDir(t)
+- defer os.RemoveAll(tmpDir1)
+- stdout2, _ := runContainer(r, []string{"-v", fmt.Sprintf("%s:/hello:ro", tmpDir2), img.ID, "stat", "-c", "%U %G", "/hello"}, t)
+- if strings.Contains(stdout2, "daemon daemon") {
+- t.Fatal("Container transfered uid and gid to volume")
+- }
+-}
+-
+ // Test for #1582
+ func TestCopyVolumeContent(t *testing.T) {
+ r := mkRuntime(t)
+diff -uNr docker-0.6.2/contrib/docker.bash docker-devmapper/contrib/docker.bash
+--- docker-0.6.2/contrib/docker.bash 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/contrib/docker.bash 2013-09-23 10:37:38.589307202 -0500
+@@ -114,7 +114,7 @@
+
+ case "$cur" in
+ -*)
+- COMPREPLY=( $( compgen -W "-no-cache -t -q -rm" -- "$cur" ) )
++ COMPREPLY=( $( compgen -W "-no-cache -t -q" -- "$cur" ) )
+ ;;
+ *)
+ _filedir
+diff -uNr docker-0.6.2/deviceset.go docker-devmapper/deviceset.go
+--- docker-0.6.2/deviceset.go 1969-12-31 18:00:00.000000000 -0600
++++ docker-devmapper/deviceset.go 2013-09-23 10:37:39.131305695 -0500
+@@ -0,0 +1,75 @@
++package docker
++
++type DeviceSet interface {
++ AddDevice(hash, baseHash string) error
++ SetInitialized(hash string) error
++ DeactivateDevice(hash string) error
++ RemoveDevice(hash string) error
++ MountDevice(hash, path string) error
++ UnmountDevice(hash, path string) error
++ HasDevice(hash string) bool
++ HasInitializedDevice(hash string) bool
++ HasActivatedDevice(hash string) bool
++ Shutdown() error
++}
++
++type DeviceSetWrapper struct {
++ wrapped DeviceSet
++ prefix string
++}
++
++func (wrapper *DeviceSetWrapper) wrap(hash string) string {
++ if hash != "" {
++ hash = wrapper.prefix + "-" + hash
++ }
++ return hash
++}
++
++
++func (wrapper *DeviceSetWrapper) AddDevice(hash, baseHash string) error {
++ return wrapper.wrapped.AddDevice(wrapper.wrap(hash), wrapper.wrap(baseHash))
++}
++
++func (wrapper *DeviceSetWrapper) SetInitialized(hash string) error {
++ return wrapper.wrapped.SetInitialized(wrapper.wrap(hash))
++}
++
++func (wrapper *DeviceSetWrapper) DeactivateDevice(hash string) error {
++ return wrapper.wrapped.DeactivateDevice(wrapper.wrap(hash))
++}
++
++func (wrapper *DeviceSetWrapper) Shutdown() error {
++ return nil
++}
++
++func (wrapper *DeviceSetWrapper) RemoveDevice(hash string) error {
++ return wrapper.wrapped.RemoveDevice(wrapper.wrap(hash))
++}
++
++func (wrapper *DeviceSetWrapper) MountDevice(hash, path string) error {
++ return wrapper.wrapped.MountDevice(wrapper.wrap(hash), path)
++}
++
++func (wrapper *DeviceSetWrapper) UnmountDevice(hash, path string) error {
++ return wrapper.wrapped.UnmountDevice(wrapper.wrap(hash), path)
++}
++
++func (wrapper *DeviceSetWrapper) HasDevice(hash string) bool {
++ return wrapper.wrapped.HasDevice(wrapper.wrap(hash))
++}
++
++func (wrapper *DeviceSetWrapper) HasInitializedDevice(hash string) bool {
++ return wrapper.wrapped.HasInitializedDevice(wrapper.wrap(hash))
++}
++
++func (wrapper *DeviceSetWrapper) HasActivatedDevice(hash string) bool {
++ return wrapper.wrapped.HasActivatedDevice(wrapper.wrap(hash))
++}
++
++func NewDeviceSetWrapper(wrapped DeviceSet, prefix string) DeviceSet {
++ wrapper := &DeviceSetWrapper{
++ wrapped: wrapped,
++ prefix: prefix,
++ }
++ return wrapper
++}
+diff -uNr docker-0.6.2/devmapper/deviceset_devmapper.go docker-devmapper/devmapper/deviceset_devmapper.go
+--- docker-0.6.2/devmapper/deviceset_devmapper.go 1969-12-31 18:00:00.000000000 -0600
++++ docker-devmapper/devmapper/deviceset_devmapper.go 2013-09-23 10:37:39.249305367 -0500
+@@ -0,0 +1,919 @@
++package devmapper
++
++import (
++ "github.com/dotcloud/docker/utils"
++ "encoding/json"
++ "fmt"
++ "io"
++ "io/ioutil"
++ "log"
++ "os"
++ "os/exec"
++ "path"
++ "path/filepath"
++ "strings"
++ "syscall"
++)
++
++const defaultDataLoopbackSize int64 = 100 * 1024 * 1024 * 1024
++const defaultMetaDataLoopbackSize int64 = 2 * 1024 * 1024 * 1024
++const defaultBaseFsSize uint64 = 10 * 1024 * 1024 * 1024
++
++type DevInfo struct {
++ Hash string `json:"-"`
++ DeviceId int `json:"device_id"`
++ Size uint64 `json:"size"`
++ TransactionId uint64 `json:"transaction_id"`
++ Initialized bool `json:"initialized"`
++ devices *DeviceSetDM `json:"-"`
++}
++
++type MetaData struct {
++ Devices map[string]*DevInfo `json:devices`
++}
++
++type DeviceSetDM struct {
++ initialized bool
++ root string
++ devicePrefix string
++ MetaData
++ TransactionId uint64
++ NewTransactionId uint64
++ nextFreeDevice int
++ activeMounts map[string]int
++}
++
++func getDevName(name string) string {
++ return "/dev/mapper/" + name
++}
++
++func (info *DevInfo) Name() string {
++ hash := info.Hash
++ if hash == "" {
++ hash = "base"
++ }
++ return fmt.Sprintf("%s-%s", info.devices.devicePrefix, hash)
++}
++
++func (info *DevInfo) DevName() string {
++ return getDevName(info.Name())
++}
++
++func (devices *DeviceSetDM) loopbackDir() string {
++ return path.Join(devices.root, "loopback")
++}
++
++func (devices *DeviceSetDM) jsonFile() string {
++ return path.Join(devices.loopbackDir(), "json")
++}
++
++func (devices *DeviceSetDM) getPoolName() string {
++ return fmt.Sprintf("%s-pool", devices.devicePrefix)
++}
++
++func (devices *DeviceSetDM) getPoolDevName() string {
++ return getDevName(devices.getPoolName())
++}
++
++func (devices *DeviceSetDM) createTask(t TaskType, name string) (*Task, error) {
++ task := TaskCreate(t)
++ if task == nil {
++ return nil, fmt.Errorf("Can't create task of type %d", int(t))
++ }
++ err := task.SetName(name)
++ if err != nil {
++ return nil, fmt.Errorf("Can't set task name %s", name)
++ }
++ return task, nil
++}
++
++func (devices *DeviceSetDM) getInfo(name string) (*Info, error) {
++ task, err := devices.createTask(DeviceInfo, name)
++ if task == nil {
++ return nil, err
++ }
++ err = task.Run()
++ if err != nil {
++ return nil, err
++ }
++ info, err := task.GetInfo()
++ if err != nil {
++ return nil, err
++ }
++ return info, nil
++}
++
++func (devices *DeviceSetDM) getStatus(name string) (uint64, uint64, string, string, error) {
++ task, err := devices.createTask(DeviceStatus, name)
++ if task == nil {
++ return 0, 0, "", "", err
++ }
++ err = task.Run()
++ if err != nil {
++ return 0, 0, "", "", err
++ }
++
++ devinfo, err := task.GetInfo()
++ if err != nil {
++ return 0, 0, "", "", err
++ }
++ if devinfo.Exists == 0 {
++ return 0, 0, "", "", fmt.Errorf("Non existing device %s", name)
++ }
++
++ var next uintptr = 0
++ next, start, length, target_type, params := task.GetNextTarget(next)
++
++ return start, length, target_type, params, nil
++}
++
++func (devices *DeviceSetDM) setTransactionId(oldId uint64, newId uint64) error {
++ task, err := devices.createTask(DeviceTargetMsg, devices.getPoolDevName())
++ if task == nil {
++ return err
++ }
++
++ err = task.SetSector(0)
++ if err != nil {
++ return fmt.Errorf("Can't set sector")
++ }
++
++ message := fmt.Sprintf("set_transaction_id %d %d", oldId, newId)
++ err = task.SetMessage(message)
++ if err != nil {
++ return fmt.Errorf("Can't set message")
++ }
++
++ err = task.Run()
++ if err != nil {
++ return fmt.Errorf("Error running setTransactionId")
++ }
++ return nil
++}
++
++func (devices *DeviceSetDM) hasImage(name string) bool {
++ dirname := devices.loopbackDir()
++ filename := path.Join(dirname, name)
++
++ _, err := os.Stat(filename)
++ return err == nil
++}
++
++func (devices *DeviceSetDM) ensureImage(name string, size int64) (string, error) {
++ dirname := devices.loopbackDir()
++ filename := path.Join(dirname, name)
++
++ if err := os.MkdirAll(dirname, 0700); err != nil && !os.IsExist(err) {
++ return "", err
++ }
++
++ _, err := os.Stat(filename)
++ if err != nil {
++ if !os.IsNotExist(err) {
++ return "", err
++ }
++ log.Printf("Creating loopback file %s for device-manage use", filename)
++ file, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE, 0600)
++ if err != nil {
++ return "", err
++ }
++ err = file.Truncate(size)
++ if err != nil {
++ return "", err
++ }
++ }
++ return filename, nil
++}
++
++func (devices *DeviceSetDM) createPool(dataFile *os.File, metadataFile *os.File) error {
++ utils.Debugf("Activating device-mapper pool %s", devices.getPoolName())
++ task, err := devices.createTask(DeviceCreate, devices.getPoolName())
++ if task == nil {
++ return err
++ }
++
++ size, err := GetBlockDeviceSize(dataFile)
++ if err != nil {
++ return fmt.Errorf("Can't get data size")
++ }
++
++ params := metadataFile.Name() + " " + dataFile.Name() + " 512 8192"
++ err = task.AddTarget(0, size/512, "thin-pool", params)
++ if err != nil {
++ return fmt.Errorf("Can't add target")
++ }
++
++ var cookie uint32 = 0
++ err = task.SetCookie(&cookie, 32)
++ if err != nil {
++ return fmt.Errorf("Can't set cookie")
++ }
++
++ err = task.Run()
++ if err != nil {
++ return fmt.Errorf("Error running DeviceCreate")
++ }
++
++ UdevWait(cookie)
++
++ return nil
++}
++
++func (devices *DeviceSetDM) suspendDevice(info *DevInfo) error {
++ task, err := devices.createTask(DeviceSuspend, info.Name())
++ if task == nil {
++ return err
++ }
++ err = task.Run()
++ if err != nil {
++ return fmt.Errorf("Error running DeviceSuspend")
++ }
++ return nil
++}
++
++func (devices *DeviceSetDM) resumeDevice(info *DevInfo) error {
++ task, err := devices.createTask(DeviceResume, info.Name())
++ if task == nil {
++ return err
++ }
++
++ var cookie uint32 = 0
++ err = task.SetCookie(&cookie, 32)
++ if err != nil {
++ return fmt.Errorf("Can't set cookie")
++ }
++
++ err = task.Run()
++ if err != nil {
++ return fmt.Errorf("Error running DeviceSuspend")
++ }
++
++ UdevWait(cookie)
++
++ return nil
++}
++
++func (devices *DeviceSetDM) createDevice(deviceId int) error {
++ task, err := devices.createTask(DeviceTargetMsg, devices.getPoolDevName())
++ if task == nil {
++ return err
++ }
++
++ err = task.SetSector(0)
++ if err != nil {
++ return fmt.Errorf("Can't set sector")
++ }
++
++ message := fmt.Sprintf("create_thin %d", deviceId)
++ err = task.SetMessage(message)
++ if err != nil {
++ return fmt.Errorf("Can't set message")
++ }
++
++ err = task.Run()
++ if err != nil {
++ return fmt.Errorf("Error running createDevice")
++ }
++ return nil
++}
++
++func (devices *DeviceSetDM) createSnapDevice(deviceId int, baseInfo *DevInfo) error {
++ doSuspend := false
++ devinfo, _ := devices.getInfo(baseInfo.Name())
++ if devinfo != nil && devinfo.Exists != 0 {
++ doSuspend = true
++ }
++
++ if doSuspend {
++ err := devices.suspendDevice(baseInfo)
++ if err != nil {
++ return err
++ }
++ }
++
++ task, err := devices.createTask(DeviceTargetMsg, devices.getPoolDevName())
++ if task == nil {
++ _ = devices.resumeDevice(baseInfo)
++ return err
++ }
++ err = task.SetSector(0)
++ if err != nil {
++ _ = devices.resumeDevice(baseInfo)
++ return fmt.Errorf("Can't set sector")
++ }
++
++ message := fmt.Sprintf("create_snap %d %d", deviceId, baseInfo.DeviceId)
++ err = task.SetMessage(message)
++ if err != nil {
++ _ = devices.resumeDevice(baseInfo)
++ return fmt.Errorf("Can't set message")
++ }
++
++ err = task.Run()
++ if err != nil {
++ _ = devices.resumeDevice(baseInfo)
++ return fmt.Errorf("Error running DeviceCreate")
++ }
++
++ if doSuspend {
++ err = devices.resumeDevice(baseInfo)
++ if err != nil {
++ return err
++ }
++ }
++
++ return nil
++}
++
++func (devices *DeviceSetDM) deleteDevice(deviceId int) error {
++ task, err := devices.createTask(DeviceTargetMsg, devices.getPoolDevName())
++ if task == nil {
++ return err
++ }
++
++ err = task.SetSector(0)
++ if err != nil {
++ return fmt.Errorf("Can't set sector")
++ }
++
++ message := fmt.Sprintf("delete %d", deviceId)
++ err = task.SetMessage(message)
++ if err != nil {
++ return fmt.Errorf("Can't set message")
++ }
++
++ err = task.Run()
++ if err != nil {
++ return fmt.Errorf("Error running deleteDevice")
++ }
++ return nil
++}
++
++func (devices *DeviceSetDM) removeDevice(name string) error {
++ task, err := devices.createTask(DeviceRemove, name)
++ if task == nil {
++ return err
++ }
++ err = task.Run()
++ if err != nil {
++ return fmt.Errorf("Error running removeDevice")
++ }
++ return nil
++}
++
++func (devices *DeviceSetDM) activateDevice(info *DevInfo) error {
++ task, err := devices.createTask(DeviceCreate, info.Name())
++ if task == nil {
++ return err
++ }
++
++ params := fmt.Sprintf("%s %d", devices.getPoolDevName(), info.DeviceId)
++ err = task.AddTarget(0, info.Size/512, "thin", params)
++ if err != nil {
++ return fmt.Errorf("Can't add target")
++ }
++
++ var cookie uint32 = 0
++ err = task.SetCookie(&cookie, 32)
++ if err != nil {
++ return fmt.Errorf("Can't set cookie")
++ }
++
++ err = task.Run()
++ if err != nil {
++ return fmt.Errorf("Error running DeviceCreate")
++ }
++
++ UdevWait(cookie)
++
++ return nil
++}
++
++func (devices *DeviceSetDM) allocateDeviceId() int {
++ // TODO: Add smarter reuse of deleted devices
++ id := devices.nextFreeDevice
++ devices.nextFreeDevice = devices.nextFreeDevice + 1
++ return id
++}
++
++func (devices *DeviceSetDM) allocateTransactionId() uint64 {
++ devices.NewTransactionId = devices.NewTransactionId + 1
++ return devices.NewTransactionId
++}
++
++func (devices *DeviceSetDM) saveMetadata() error {
++ jsonData, err := json.Marshal(devices.MetaData)
++ if err != nil {
++ return err
++ }
++ tmpFile, err := ioutil.TempFile(filepath.Dir(devices.jsonFile()), ".json")
++ if err != nil {
++ return err
++ }
++
++ n, err := tmpFile.Write(jsonData)
++ if err != nil {
++ return err
++ }
++ if n < len(jsonData) {
++ err = io.ErrShortWrite
++ }
++ err = tmpFile.Sync()
++ if err != nil {
++ return err
++ }
++ err = tmpFile.Close()
++ if err != nil {
++ return err
++ }
++ err = os.Rename(tmpFile.Name(), devices.jsonFile())
++ if err != nil {
++ return err
++ }
++
++ if devices.NewTransactionId != devices.TransactionId {
++ err = devices.setTransactionId(devices.TransactionId, devices.NewTransactionId)
++ if err != nil {
++ return err
++ }
++ devices.TransactionId = devices.NewTransactionId
++ }
++
++ return nil
++}
++
++func (devices *DeviceSetDM) registerDevice(id int, hash string, size uint64) (*DevInfo, error) {
++ transaction := devices.allocateTransactionId()
++
++ info := &DevInfo{
++ Hash: hash,
++ DeviceId: id,
++ Size: size,
++ TransactionId: transaction,
++ Initialized: false,
++ devices: devices,
++ }
++
++ devices.Devices[hash] = info
++ err := devices.saveMetadata()
++ if err != nil {
++ // Try to remove unused device
++ devices.Devices[hash] = nil
++ return nil, err
++ }
++
++ return info, nil
++}
++
++func (devices *DeviceSetDM) activateDeviceIfNeeded(hash string) error {
++ info := devices.Devices[hash]
++ if info == nil {
++ return fmt.Errorf("Unknown device %s", hash)
++ }
++
++ name := info.Name()
++ devinfo, _ := devices.getInfo(name)
++ if devinfo != nil && devinfo.Exists != 0 {
++ return nil
++ }
++
++ return devices.activateDevice(info)
++}
++
++func (devices *DeviceSetDM) createFilesystem(info *DevInfo) error {
++ devname := info.DevName()
++
++ err := exec.Command("mkfs.ext4", "-E",
++ "discard,lazy_itable_init=0,lazy_journal_init=0", devname).Run()
++ if err != nil {
++ err = exec.Command("mkfs.ext4", "-E",
++ "discard,lazy_itable_init=0", devname).Run()
++ }
++ if err != nil {
++ return err
++ }
++ return nil
++}
++
++func (devices *DeviceSetDM) loadMetaData() error {
++ _, _, _, params, err := devices.getStatus(devices.getPoolName())
++ if err != nil {
++ return err
++ }
++ var currentTransaction uint64
++ _, err = fmt.Sscanf(params, "%d", ¤tTransaction)
++ if err != nil {
++ return err
++ }
++
++ devices.TransactionId = currentTransaction
++ devices.NewTransactionId = devices.TransactionId
++
++ jsonData, err := ioutil.ReadFile(devices.jsonFile())
++ if err != nil && !os.IsNotExist(err) {
++ return err
++ }
++
++ metadata := &MetaData{
++ Devices: make(map[string]*DevInfo),
++ }
++ if jsonData != nil {
++ if err := json.Unmarshal(jsonData, metadata); err != nil {
++ return err
++ }
++ }
++ devices.MetaData = *metadata
++
++ for hash, d := range devices.Devices {
++ d.Hash = hash
++ d.devices = devices
++
++ if d.DeviceId >= devices.nextFreeDevice {
++ devices.nextFreeDevice = d.DeviceId + 1
++ }
++
++ // If the transaction id is larger than the actual one we lost the device due to some crash
++ if d.TransactionId > currentTransaction {
++ log.Printf("Removing lost device %s with id %d", hash, d.TransactionId)
++ delete(devices.Devices, hash)
++ }
++ }
++
++ return nil
++}
++
++func (devices *DeviceSetDM) setupBaseImage() error {
++ oldInfo := devices.Devices[""]
++ if oldInfo != nil && oldInfo.Initialized {
++ return nil
++ }
++
++ if oldInfo != nil && !oldInfo.Initialized {
++ log.Printf("Removing uninitialized base image")
++ if err := devices.RemoveDevice(""); err != nil {
++ return err
++ }
++ }
++
++ log.Printf("Initializing base device-manager snapshot")
++
++ id := devices.allocateDeviceId()
++
++ // Create initial device
++ err := devices.createDevice(id)
++ if err != nil {
++ return err
++ }
++
++ info, err := devices.registerDevice(id, "", defaultBaseFsSize)
++ if err != nil {
++ _ = devices.deleteDevice(id)
++ return err
++ }
++
++ log.Printf("Creating filesystem on base device-manager snapshot")
++
++ err = devices.activateDeviceIfNeeded("")
++ if err != nil {
++ return err
++ }
++
++ err = devices.createFilesystem(info)
++ if err != nil {
++ return err
++ }
++
++ info.Initialized = true
++
++ err = devices.saveMetadata()
++ if err != nil {
++ info.Initialized = false
++ return err
++ }
++
++ return nil
++}
++
++func (devices *DeviceSetDM) initDevmapper() error {
++ info, err := devices.getInfo(devices.getPoolName())
++ if info == nil {
++ return err
++ }
++
++ if info.Exists != 0 {
++ /* Pool exists, assume everything is up */
++ err = devices.loadMetaData()
++ if err != nil {
++ return err
++ }
++ err = devices.setupBaseImage()
++ if err != nil {
++ return err
++ }
++ return nil
++ }
++
++ createdLoopback := false
++ if !devices.hasImage("data") || !devices.hasImage("metadata") {
++ /* If we create the loopback mounts we also need to initialize the base fs */
++ createdLoopback = true
++ }
++
++ data, err := devices.ensureImage("data", defaultDataLoopbackSize)
++ if err != nil {
++ return err
++ }
++
++ metadata, err := devices.ensureImage("metadata", defaultMetaDataLoopbackSize)
++ if err != nil {
++ return err
++ }
++
++ dataFile, err := AttachLoopDevice(data)
++ if err != nil {
++ return err
++ }
++ defer dataFile.Close()
++
++ metadataFile, err := AttachLoopDevice(metadata)
++ if err != nil {
++ return err
++ }
++ defer metadataFile.Close()
++
++ err = devices.createPool(dataFile, metadataFile)
++ if err != nil {
++ return err
++ }
++
++ if !createdLoopback {
++ err = devices.loadMetaData()
++ if err != nil {
++ return err
++ }
++ }
++
++ err = devices.setupBaseImage()
++ if err != nil {
++ return err
++ }
++
++ return nil
++}
++
++func (devices *DeviceSetDM) AddDevice(hash, baseHash string) error {
++ if err := devices.ensureInit(); err != nil {
++ return err
++ }
++
++ if devices.Devices[hash] != nil {
++ return fmt.Errorf("hash %s already exists", hash)
++ }
++
++ baseInfo := devices.Devices[baseHash]
++ if baseInfo == nil {
++ return fmt.Errorf("Unknown base hash %s", baseHash)
++ }
++
++ deviceId := devices.allocateDeviceId()
++
++ err := devices.createSnapDevice(deviceId, baseInfo)
++ if err != nil {
++ return err
++ }
++
++ _, err = devices.registerDevice(deviceId, hash, baseInfo.Size)
++ if err != nil {
++ _ = devices.deleteDevice(deviceId)
++ return err
++ }
++ return nil
++}
++
++func (devices *DeviceSetDM) RemoveDevice(hash string) error {
++ if err := devices.ensureInit(); err != nil {
++ return err
++ }
++
++ info := devices.Devices[hash]
++ if info == nil {
++ return fmt.Errorf("hash %s doesn't exists", hash)
++ }
++
++ devinfo, _ := devices.getInfo(info.Name())
++ if devinfo != nil && devinfo.Exists != 0 {
++ err := devices.removeDevice(info.Name())
++ if err != nil {
++ return err
++ }
++ }
++
++ if info.Initialized {
++ info.Initialized = false
++ err := devices.saveMetadata()
++ if err != nil {
++ return err
++ }
++ }
++
++ err := devices.deleteDevice(info.DeviceId)
++ if err != nil {
++ return err
++ }
++
++ _ = devices.allocateTransactionId()
++ delete(devices.Devices, info.Hash)
++
++ err = devices.saveMetadata()
++ if err != nil {
++ devices.Devices[info.Hash] = info
++ return err
++ }
++
++ return nil
++}
++
++func (devices *DeviceSetDM) DeactivateDevice(hash string) error {
++ if err := devices.ensureInit(); err != nil {
++ return err
++ }
++
++ info := devices.Devices[hash]
++ if info == nil {
++ return fmt.Errorf("hash %s doesn't exists", hash)
++ }
++
++ devinfo, err := devices.getInfo(info.Name())
++ if err != nil {
++ return err
++ }
++ if devinfo.Exists != 0 {
++ err := devices.removeDevice(info.Name())
++ if err != nil {
++ return err
++ }
++ }
++
++ return nil
++}
++
++func (devices *DeviceSetDM) Shutdown() error {
++ if !devices.initialized {
++ return nil
++ }
++
++ for path, count := range devices.activeMounts {
++ for i := count; i > 0; i-- {
++ err := syscall.Unmount(path, 0)
++ if err != nil {
++ fmt.Printf("Shutdown unmounting %s, error: %s\n", path, err)
++ }
++ }
++ delete(devices.activeMounts, path)
++ }
++
++ for _, d := range devices.Devices {
++ if err := devices.DeactivateDevice(d.Hash); err != nil {
++ fmt.Printf("Shutdown deactivate %s , error: %s\n", d.Hash, err)
++ }
++ }
++
++
++ pool := devices.getPoolDevName()
++ devinfo, err := devices.getInfo(pool)
++ if err == nil && devinfo.Exists != 0 {
++ if err := devices.removeDevice(pool); err != nil {
++ fmt.Printf("Shutdown deactivate %s , error: %s\n", pool, err)
++ }
++ }
++
++ return nil
++}
++
++func (devices *DeviceSetDM) MountDevice(hash, path string) error {
++ if err := devices.ensureInit(); err != nil {
++ return err
++ }
++
++ err := devices.activateDeviceIfNeeded(hash)
++ if err != nil {
++ return err
++ }
++
++ info := devices.Devices[hash]
++
++ err = syscall.Mount(info.DevName(), path, "ext4", syscall.MS_MGC_VAL, "discard")
++ if err != nil && err == syscall.EINVAL {
++ err = syscall.Mount(info.DevName(), path, "ext4", syscall.MS_MGC_VAL, "")
++ }
++ if err != nil {
++ return err
++ }
++
++ count := devices.activeMounts[path]
++ devices.activeMounts[path] = count + 1
++
++ return nil
++}
++
++func (devices *DeviceSetDM) UnmountDevice(hash, path string) error {
++ err := syscall.Unmount(path, 0)
++ if err != nil {
++ return err
++ }
++
++ count := devices.activeMounts[path]
++ if count > 1 {
++ devices.activeMounts[path] = count - 1
++ } else {
++ delete(devices.activeMounts, path)
++ }
++
++ return nil
++}
++
++
++func (devices *DeviceSetDM) HasDevice(hash string) bool {
++ if err := devices.ensureInit(); err != nil {
++ return false
++ }
++
++ info := devices.Devices[hash]
++ return info != nil
++}
++
++func (devices *DeviceSetDM) HasInitializedDevice(hash string) bool {
++ if err := devices.ensureInit(); err != nil {
++ return false
++ }
++
++ info := devices.Devices[hash]
++ return info != nil && info.Initialized
++}
++
++func (devices *DeviceSetDM) HasActivatedDevice(hash string) bool {
++ if err := devices.ensureInit(); err != nil {
++ return false
++ }
++
++ info := devices.Devices[hash]
++ if info == nil {
++ return false
++ }
++ name := info.Name()
++ devinfo, _ := devices.getInfo(name)
++ if devinfo != nil && devinfo.Exists != 0 {
++ return true
++ }
++ return false
++}
++
++func (devices *DeviceSetDM) SetInitialized(hash string) error {
++ if err := devices.ensureInit(); err != nil {
++ return err
++ }
++
++ info := devices.Devices[hash]
++ if info == nil {
++ return fmt.Errorf("Unknown device %s", hash)
++ }
++
++ info.Initialized = true
++ err := devices.saveMetadata()
++ if err != nil {
++ info.Initialized = false
++ return err
++ }
++
++ return nil
++}
++
++func (devices *DeviceSetDM) ensureInit() error {
++ if !devices.initialized {
++ devices.initialized = true
++ err := devices.initDevmapper()
++ if err != nil {
++ return err
++ }
++ }
++ return nil
++}
++
++func NewDeviceSetDM(root string) *DeviceSetDM {
++ SetDevDir("/dev")
++
++ base := filepath.Base(root)
++ if !strings.HasPrefix(base, "docker") {
++ base = "docker-" + base
++ }
++
++ devices := &DeviceSetDM{
++ initialized: false,
++ root: root,
++ devicePrefix: base,
++ }
++ devices.Devices = make(map[string]*DevInfo)
++ devices.activeMounts = make(map[string]int)
++
++ return devices
++}
+diff -uNr docker-0.6.2/devmapper/devmapper.go docker-devmapper/devmapper/devmapper.go
+--- docker-0.6.2/devmapper/devmapper.go 1969-12-31 18:00:00.000000000 -0600
++++ docker-devmapper/devmapper/devmapper.go 2013-09-23 10:37:39.248305370 -0500
+@@ -0,0 +1,366 @@
++package devmapper
++
++/*
++#cgo LDFLAGS: -L. -ldevmapper
++#include <stdio.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <libdevmapper.h>
++#include <linux/loop.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <sys/ioctl.h>
++#include <linux/fs.h>
++#include <errno.h>
++
++static char *
++attach_loop_device(const char *filename, int *loop_fd_out)
++{
++ struct loop_info64 loopinfo = { 0 };
++ struct stat st;
++ char buf[64];
++ int i, loop_fd, fd, start_index;
++ char *loopname;
++
++ *loop_fd_out = -1;
++
++ start_index = 0;
++ fd = open("/dev/loop-control", O_RDONLY);
++ if (fd >= 0) {
++ start_index = ioctl(fd, LOOP_CTL_GET_FREE);
++ close(fd);
++
++ if (start_index < 0)
++ start_index = 0;
++ }
++
++ fd = open(filename, O_RDWR);
++ if (fd < 0) {
++ return NULL;
++ }
++
++ loop_fd = -1;
++ for (i = start_index ; loop_fd < 0 ; i++ ) {
++ if (sprintf(buf, "/dev/loop%d", i) < 0) {
++ close(fd);
++ return NULL;
++ }
++
++ if (stat(buf, &st) || !S_ISBLK(st.st_mode)) {
++ close(fd);
++ return NULL;
++ }
++
++ loop_fd = open(buf, O_RDWR);
++ if (loop_fd < 0 && errno == ENOENT) {
++ close(fd);
++ fprintf (stderr, "no available loopback device!");
++ return NULL;
++ } else if (loop_fd < 0)
++ continue;
++
++ if (ioctl (loop_fd, LOOP_SET_FD, (void *)(size_t)fd) < 0) {
++ close(loop_fd);
++ loop_fd = -1;
++ if (errno != EBUSY) {
++ close (fd);
++ fprintf (stderr, "cannot set up loopback device %s", buf);
++ return NULL;
++ }
++ continue;
++ }
++
++ close (fd);
++
++ strncpy((char*)loopinfo.lo_file_name, buf, LO_NAME_SIZE);
++ loopinfo.lo_offset = 0;
++ loopinfo.lo_flags = LO_FLAGS_AUTOCLEAR;
++
++ if (ioctl(loop_fd, LOOP_SET_STATUS64, &loopinfo) < 0) {
++ ioctl(loop_fd, LOOP_CLR_FD, 0);
++ close(loop_fd);
++ fprintf (stderr, "cannot set up loopback device info");
++ return NULL;
++ }
++
++ loopname = strdup(buf);
++ if (loopname == NULL) {
++ close(loop_fd);
++ return NULL;
++ }
++
++ *loop_fd_out = loop_fd;
++ return loopname;
++ }
++ return NULL;
++}
++
++static int64_t
++get_block_size(int fd)
++{
++ uint64_t size;
++ if (ioctl(fd, BLKGETSIZE64, &size) == -1)
++ return -1;
++ return (int64_t)size;
++}
++
++
++*/
++import "C"
++import "unsafe"
++import "fmt"
++import "runtime"
++import "os"
++
++func SetDevDir(dir string) error {
++ c_dir := C.CString(dir)
++ defer C.free(unsafe.Pointer(c_dir))
++ res := C.dm_set_dev_dir(c_dir)
++ if res != 1 {
++ return fmt.Errorf("dm_set_dev_dir failed")
++ }
++ return nil
++}
++
++func GetLibraryVersion() (string, error) {
++ buffer := (*C.char)(C.malloc(128))
++ defer C.free(unsafe.Pointer(buffer))
++ res := C.dm_get_library_version(buffer, 128)
++ if res != 1 {
++ return "", fmt.Errorf("dm_get_library_version failed")
++ } else {
++ return C.GoString(buffer), nil
++ }
++}
++
++type TaskType int
++
++const (
++ DeviceCreate TaskType = iota
++ DeviceReload
++ DeviceRemove
++ DeviceRemoveAll
++ DeviceSuspend
++ DeviceResume
++ DeviceInfo
++ DeviceDeps
++ DeviceRename
++ DeviceVersion
++ DeviceStatus
++ DeviceTable
++ DeviceWaitevent
++ DeviceList
++ DeviceClear
++ DeviceMknodes
++ DeviceListVersions
++ DeviceTargetMsg
++ DeviceSetGeometry
++)
++
++type Task struct {
++ unmanaged *C.struct_dm_task
++}
++
++type Info struct {
++ Exists int
++ Suspended int
++ LiveTable int
++ InactiveTable int
++ OpenCount int32
++ EventNr uint32
++ Major uint32
++ Minor uint32
++ ReadOnly int
++ TargetCount int32
++}
++
++func (t *Task) destroy() {
++ if t != nil {
++ C.dm_task_destroy(t.unmanaged)
++ runtime.SetFinalizer(t, nil)
++ }
++}
++
++func TaskCreate(tasktype TaskType) *Task {
++ c_task := C.dm_task_create(C.int(int(tasktype)))
++ if c_task == nil {
++ return nil
++ }
++ task := &Task{c_task}
++ runtime.SetFinalizer(task, (*Task).destroy)
++ return task
++}
++
++func (t *Task) Run() error {
++ res := C.dm_task_run(t.unmanaged)
++ if res != 1 {
++ return fmt.Errorf("dm_task_run failed")
++ }
++ return nil
++}
++
++func (t *Task) SetName(name string) error {
++ c_name := C.CString(name)
++ defer C.free(unsafe.Pointer(c_name))
++
++ res := C.dm_task_set_name(t.unmanaged, c_name)
++ if res != 1 {
++ return fmt.Errorf("dm_task_set_name failed")
++ }
++ return nil
++}
++
++func (t *Task) SetMessage(message string) error {
++ c_message := C.CString(message)
++ defer C.free(unsafe.Pointer(c_message))
++
++ res := C.dm_task_set_message(t.unmanaged, c_message)
++ if res != 1 {
++ return fmt.Errorf("dm_task_set_message failed")
++ }
++ return nil
++}
++
++func (t *Task) SetSector(sector uint64) error {
++ res := C.dm_task_set_sector(t.unmanaged, C.uint64_t(sector))
++ if res != 1 {
++ return fmt.Errorf("dm_task_set_add_node failed")
++ }
++ return nil
++}
++
++func (t *Task) SetCookie(cookie *uint32, flags uint16) error {
++ var c_cookie C.uint32_t
++ c_cookie = C.uint32_t(*cookie)
++ res := C.dm_task_set_cookie(t.unmanaged, &c_cookie, C.uint16_t(flags))
++ if res != 1 {
++ return fmt.Errorf("dm_task_set_add_node failed")
++ }
++ *cookie = uint32(c_cookie)
++ return nil
++}
++
++func (t *Task) SetRo() error {
++ res := C.dm_task_set_ro(t.unmanaged)
++ if res != 1 {
++ return fmt.Errorf("dm_task_set_ro failed")
++ }
++ return nil
++}
++
++func (t *Task) AddTarget(start uint64, size uint64, ttype string, params string) error {
++ c_ttype := C.CString(ttype)
++ defer C.free(unsafe.Pointer(c_ttype))
++
++ c_params := C.CString(params)
++ defer C.free(unsafe.Pointer(c_params))
++
++ res := C.dm_task_add_target(t.unmanaged, C.uint64_t(start), C.uint64_t(size), c_ttype, c_params)
++ if res != 1 {
++ return fmt.Errorf("dm_task_add_target failed")
++ }
++ return nil
++}
++
++func (t *Task) GetDriverVersion() (string, error) {
++ buffer := (*C.char)(C.malloc(128))
++ defer C.free(unsafe.Pointer(buffer))
++
++ res := C.dm_task_get_driver_version(t.unmanaged, buffer, 128)
++ if res != 1 {
++ return "", fmt.Errorf("dm_task_get_driver_version")
++ } else {
++ return C.GoString(buffer), nil
++ }
++}
++
++func (t *Task) GetInfo() (*Info, error) {
++ c_info := C.struct_dm_info{}
++ res := C.dm_task_get_info(t.unmanaged, &c_info)
++ if res != 1 {
++ return nil, fmt.Errorf("dm_task_get_driver_version")
++ } else {
++ info := &Info{}
++ info.Exists = int(c_info.exists)
++ info.Suspended = int(c_info.suspended)
++ info.LiveTable = int(c_info.live_table)
++ info.InactiveTable = int(c_info.inactive_table)
++ info.OpenCount = int32(c_info.open_count)
++ info.EventNr = uint32(c_info.event_nr)
++ info.Major = uint32(c_info.major)
++ info.Minor = uint32(c_info.minor)
++ info.ReadOnly = int(c_info.read_only)
++ info.TargetCount = int32(c_info.target_count)
++
++ return info, nil
++ }
++}
++
++func (t *Task) GetNextTarget(next uintptr) (uintptr, uint64, uint64, string, string) {
++ nextp := unsafe.Pointer(next)
++ var c_start C.uint64_t
++ var c_length C.uint64_t
++ var c_target_type *C.char
++ var c_params *C.char
++
++ nextp = C.dm_get_next_target(t.unmanaged, nextp, &c_start, &c_length, &c_target_type, &c_params)
++
++ target_type := C.GoString(c_target_type)
++ params := C.GoString(c_params)
++
++ return uintptr(nextp), uint64(c_start), uint64(c_length), target_type, params
++}
++
++func AttachLoopDevice(filename string) (*os.File, error) {
++ c_filename := C.CString(filename)
++ defer C.free(unsafe.Pointer(c_filename))
++
++ var fd C.int
++ res := C.attach_loop_device(c_filename, &fd)
++ if res == nil {
++ return nil, fmt.Errorf("error loopback mounting")
++ }
++ file := os.NewFile(uintptr(fd), C.GoString(res))
++ C.free(unsafe.Pointer(res))
++ return file, nil
++}
++
++func GetBlockDeviceSize(file *os.File) (uint64, error) {
++ fd := file.Fd()
++ size := C.get_block_size(C.int(fd))
++ if size == -1 {
++ return 0, fmt.Errorf("Can't get block size")
++ }
++ return uint64(size), nil
++
++}
++
++func UdevWait(cookie uint32) error {
++ res := C.dm_udev_wait(C.uint32_t(cookie))
++ if res != 1 {
++ return fmt.Errorf("Failed to wait on udev cookie %d", cookie)
++ }
++ return nil
++}
++
++func LogInitVerbose(level int) {
++ C.dm_log_init_verbose(C.int(level))
++}
++
++// Useful helper for cleanup
++func RemoveDevice(name string) error {
++ task := TaskCreate(DeviceRemove)
++ if task == nil {
++ return fmt.Errorf("Can't create task of type DeviceRemove")
++ }
++ err := task.SetName(name)
++ if err != nil {
++ return fmt.Errorf("Can't set task name %s", name)
++ }
++ err = task.Run()
++ if err != nil {
++ return fmt.Errorf("Error running removeDevice")
++ }
++ return nil
++}
+diff -uNr docker-0.6.2/devmapper/docker-device-tool/device_tool.go docker-devmapper/devmapper/docker-device-tool/device_tool.go
+--- docker-0.6.2/devmapper/docker-device-tool/device_tool.go 1969-12-31 18:00:00.000000000 -0600
++++ docker-devmapper/devmapper/docker-device-tool/device_tool.go 2013-09-23 10:37:39.260305337 -0500
+@@ -0,0 +1,62 @@
++package main
++
++import (
++ "fmt"
++ "github.com/dotcloud/docker/devmapper"
++ "os"
++)
++
++func usage() {
++ fmt.Printf("Usage: %s [snap new-id base-id] | [remove id] | [mount id mountpoint]\n", os.Args[0])
++ os.Exit(1)
++}
++
++func main() {
++ devices := devmapper.NewDeviceSetDM("/var/lib/docker")
++
++ if len(os.Args) < 2 {
++ usage()
++ }
++
++ cmd := os.Args[1]
++ if cmd == "snap" {
++ if len(os.Args) < 4 {
++ usage()
++ }
++
++ err := devices.AddDevice(os.Args[2], os.Args[3])
++ if err != nil {
++ fmt.Println("Can't create snap device: ", err)
++ os.Exit(1)
++ }
++ } else if cmd == "remove" {
++ if len(os.Args) < 3 {
++ usage()
++ }
++
++ err := devices.RemoveDevice(os.Args[2])
++ if err != nil {
++ fmt.Println("Can't remove device: ", err)
++ os.Exit(1)
++ }
++ } else if cmd == "mount" {
++ if len(os.Args) < 4 {
++ usage()
++ }
++
++ err := devices.MountDevice(os.Args[2], os.Args[3])
++ if err != nil {
++ fmt.Println("Can't create snap device: ", err)
++ os.Exit(1)
++ }
++ } else {
++ fmt.Printf("Unknown command %s\n", cmd)
++ if len(os.Args) < 4 {
++ usage()
++ }
++
++ os.Exit(1)
++ }
++
++ return
++}
+diff -uNr docker-0.6.2/docker/docker.go docker-devmapper/docker/docker.go
+--- docker-0.6.2/docker/docker.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/docker/docker.go 2013-09-23 10:37:38.659307008 -0500
+@@ -4,6 +4,7 @@
+ "flag"
+ "fmt"
+ "github.com/dotcloud/docker"
++ "github.com/dotcloud/docker/devmapper"
+ "github.com/dotcloud/docker/utils"
+ "io/ioutil"
+ "log"
+@@ -133,7 +134,7 @@
+ if flDns != "" {
+ dns = []string{flDns}
+ }
+- server, err := docker.NewServer(flGraphPath, autoRestart, enableCors, dns)
++ server, err := docker.NewServer(flGraphPath, devmapper.NewDeviceSetDM(flGraphPath), autoRestart, enableCors, dns)
+ if err != nil {
+ return err
+ }
+diff -uNr docker-0.6.2/Dockerfile docker-devmapper/Dockerfile
+--- docker-0.6.2/Dockerfile 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/Dockerfile 2013-09-23 10:37:38.647307041 -0500
+@@ -1,29 +1,5 @@
+ # This file describes the standard way to build Docker, using docker
+-#
+-# Usage:
+-#
+-# # Assemble the full dev environment. This is slow the first time.
+-# docker build -t docker .
+-# # Apparmor messes with privileged mode: disable it
+-# /etc/init.d/apparmor stop ; /etc/init.d/apparmor teardown
+-#
+-# # Mount your source in an interactive container for quick testing:
+-# docker run -v `pwd`:/go/src/github.com/dotcloud/docker -privileged -lxc-conf=lxc.aa_profile=unconfined -i -t docker bash
+-#
+-#
+-# # Run the test suite:
+-# docker run -privileged -lxc-conf=lxc.aa_profile=unconfined docker go test -v
+-#
+-# # Publish a release:
+-# docker run -privileged -lxc-conf=lxc.aa_profile=unconfined \
+-# -e AWS_S3_BUCKET=baz \
+-# -e AWS_ACCESS_KEY=foo \
+-# -e AWS_SECRET_KEY=bar \
+-# -e GPG_PASSPHRASE=gloubiboulga \
+-# -lxc-conf=lxc.aa_profile=unconfined -privileged docker hack/release.sh
+-#
+-
+-docker-version 0.6.1
++docker-version 0.4.2
+ from ubuntu:12.04
+ maintainer Solomon Hykes <solomon at dotcloud.com>
+ # Build dependencies
+@@ -35,7 +11,7 @@
+ # Install Go
+ run curl -s https://go.googlecode.com/files/go1.1.2.linux-amd64.tar.gz | tar -v -C /usr/local -xz
+ env PATH /usr/local/go/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
+-env GOPATH /go:/go/src/github.com/dotcloud/docker/vendor
++env GOPATH /go
+ env CGO_ENABLED 0
+ run cd /tmp && echo 'package main' > t.go && go test -a -i -v
+ # Ubuntu stuff
+@@ -47,12 +23,15 @@
+ run pip install s3cmd
+ run pip install python-magic
+ run /bin/echo -e '[default]\naccess_key=$AWS_ACCESS_KEY\nsecret_key=$AWS_SECRET_KEY\n' > /.s3cfg
+-# Runtime dependencies
+-run apt-get install -y -q iptables
+-run apt-get install -y -q lxc
+-volume /var/lib/docker
+-workdir /go/src/github.com/dotcloud/docker
+-# Wrap all commands in the "docker-in-docker" script to allow nested containers
+-entrypoint ["hack/dind"]
++# Download dependencies
++run PKG=github.com/kr/pty REV=27435c699; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV
++run PKG=github.com/gorilla/context/ REV=708054d61e5; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV
++run PKG=github.com/gorilla/mux/ REV=9b36453141c; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV
++run PKG=github.com/dotcloud/tar/ REV=e5ea6bb21a3294; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV
++run PKG=code.google.com/p/go.net/ REV=84a4013f96e0; hg clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && hg checkout $REV
+ # Upload docker source
+ add . /go/src/github.com/dotcloud/docker
++run ln -s /go/src/github.com/dotcloud/docker /src
++# Build the binary
++run cd /go/src/github.com/dotcloud/docker && hack/release/make.sh
++cmd cd /go/src/github.com/dotcloud/docker && hack/release/release.sh
+diff -uNr docker-0.6.2/docker-init/docker-init.go docker-devmapper/docker-init/docker-init.go
+--- docker-0.6.2/docker-init/docker-init.go 1969-12-31 18:00:00.000000000 -0600
++++ docker-devmapper/docker-init/docker-init.go 2013-09-23 10:37:39.486304708 -0500
+@@ -0,0 +1,16 @@
++package main
++
++import (
++ "github.com/dotcloud/docker"
++)
++
++var (
++ GITCOMMIT string
++ VERSION string
++)
++
++func main() {
++ // Running in init mode
++ docker.SysInit()
++ return
++}
+diff -uNr docker-0.6.2/docs/sources/api/docker_remote_api_v1.4.rst docker-devmapper/docs/sources/api/docker_remote_api_v1.4.rst
+--- docker-0.6.2/docs/sources/api/docker_remote_api_v1.4.rst 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/docs/sources/api/docker_remote_api_v1.4.rst 2013-09-23 10:37:38.945306212 -0500
+@@ -359,7 +359,7 @@
+
+ {
+ "Binds":["/tmp:/tmp"],
+- "LxcConf":[{"Key":"lxc.utsname","Value":"docker"}]
++ "LxcConf":{"lxc.utsname":"docker"}
+ }
+
+ **Example response**:
+diff -uNr docker-0.6.2/docs/sources/api/docker_remote_api_v1.5.rst docker-devmapper/docs/sources/api/docker_remote_api_v1.5.rst
+--- docker-0.6.2/docs/sources/api/docker_remote_api_v1.5.rst 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/docs/sources/api/docker_remote_api_v1.5.rst 2013-09-23 10:37:38.924306271 -0500
+@@ -358,7 +358,7 @@
+
+ {
+ "Binds":["/tmp:/tmp"],
+- "LxcConf":[{"Key":"lxc.utsname","Value":"docker"}]
++ "LxcConf":{"lxc.utsname":"docker"}
+ }
+
+ **Example response**:
+@@ -976,7 +976,6 @@
+ :query t: repository name (and optionally a tag) to be applied to the resulting image in case of success
+ :query q: suppress verbose build output
+ :query nocache: do not use the cache when building the image
+- :query rm: remove intermediate containers after a successful build
+ :statuscode 200: no error
+ :statuscode 500: server error
+
+diff -uNr docker-0.6.2/docs/sources/commandline/command/build.rst docker-devmapper/docs/sources/commandline/command/build.rst
+--- docker-0.6.2/docs/sources/commandline/command/build.rst 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/docs/sources/commandline/command/build.rst 2013-09-23 10:37:38.988306093 -0500
+@@ -13,7 +13,6 @@
+ -t="": Repository name (and optionally a tag) to be applied to the resulting image in case of success.
+ -q=false: Suppress verbose build output.
+ -no-cache: Do not use the cache when building the image.
+- -rm: Remove intermediate containers after a successful build
+ When a single Dockerfile is given as URL, then no context is set. When a git repository is set as URL, the repository is used as context
+
+
+diff -uNr docker-0.6.2/docs/sources/commandline/command/commit.rst docker-devmapper/docs/sources/commandline/command/commit.rst
+--- docker-0.6.2/docs/sources/commandline/command/commit.rst 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/docs/sources/commandline/command/commit.rst 2013-09-23 10:37:38.984306104 -0500
+@@ -19,31 +19,15 @@
+
+ Full -run example::
+
+-{
+- "Entrypoint" : null,
+- "Privileged" : false,
+- "User" : "",
+- "VolumesFrom" : "",
+- "Cmd" : ["cat", "-e", "/etc/resolv.conf"],
+- "Dns" : ["8.8.8.8", "8.8.4.4"],
+- "MemorySwap" : 0,
+- "AttachStdin" : false,
+- "AttachStderr" : false,
+- "CpuShares" : 0,
+- "OpenStdin" : false,
+- "Volumes" : null,
+- "Hostname" : "122612f45831",
+- "PortSpecs" : ["22", "80", "443"],
+- "Image" : "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
+- "Tty" : false,
+- "Env" : [
+- "HOME=/",
+- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+- ],
+- "StdinOnce" : false,
+- "Domainname" : "",
+- "WorkingDir" : "/",
+- "NetworkDisabled" : false,
+- "Memory" : 0,
+- "AttachStdout" : false
+-}
++ {"Hostname": "",
++ "User": "",
++ "CpuShares": 0,
++ "Memory": 0,
++ "MemorySwap": 0,
++ "PortSpecs": ["22", "80", "443"],
++ "Tty": true,
++ "OpenStdin": true,
++ "StdinOnce": true,
++ "Env": ["FOO=BAR", "FOO2=BAR2"],
++ "Cmd": ["cat", "-e", "/etc/resolv.conf"],
++ "Dns": ["8.8.8.8", "8.8.4.4"]}
+diff -uNr docker-0.6.2/docs/sources/examples/hello_world_daemon.rst docker-devmapper/docs/sources/examples/hello_world_daemon.rst
+--- docker-0.6.2/docs/sources/examples/hello_world_daemon.rst 1969-12-31 18:00:00.000000000 -0600
++++ docker-devmapper/docs/sources/examples/hello_world_daemon.rst 2013-09-23 10:37:38.841306502 -0500
+@@ -0,0 +1,95 @@
++:title: Hello world daemon example
++:description: A simple hello world daemon example with Docker
++:keywords: docker, example, hello world, daemon
++
++.. _hello_world_daemon:
++
++Hello World Daemon
++==================
++
++.. include:: example_header.inc
++
++The most boring daemon ever written.
++
++This example assumes you have Docker installed and the Ubuntu
++image already imported with ``docker pull ubuntu``. We will use the Ubuntu
++image to run a simple hello world daemon that will just print hello
++world to standard out every second. It will continue to do this until
++we stop it.
++
++**Steps:**
++
++.. code-block:: bash
++
++ CONTAINER_ID=$(sudo docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done")
++
++We are going to run a simple hello world daemon in a new container
++made from the *ubuntu* image.
++
++- **"docker run -d "** run a command in a new container. We pass "-d"
++ so it runs as a daemon.
++- **"ubuntu"** is the image we want to run the command inside of.
++- **"/bin/sh -c"** is the command we want to run in the container
++- **"while true; do echo hello world; sleep 1; done"** is the mini
++ script we want to run, that will just print hello world once a
++ second until we stop it.
++- **$CONTAINER_ID** the output of the run command will return a
++ container id, we can use in future commands to see what is going on
++ with this process.
++
++.. code-block:: bash
++
++ sudo docker logs $CONTAINER_ID
++
++Check the logs make sure it is working correctly.
++
++- **"docker logs**" This will return the logs for a container
++- **$CONTAINER_ID** The Id of the container we want the logs for.
++
++.. code-block:: bash
++
++ sudo docker attach $CONTAINER_ID
++
++Attach to the container to see the results in realtime.
++
++- **"docker attach**" This will allow us to attach to a background
++ process to see what is going on.
++- **$CONTAINER_ID** The Id of the container we want to attach too.
++
++Exit from the container attachment by pressing Control-C.
++
++.. code-block:: bash
++
++ sudo docker ps
++
++Check the process list to make sure it is running.
++
++- **"docker ps"** this shows all running process managed by docker
++
++.. code-block:: bash
++
++ sudo docker stop $CONTAINER_ID
++
++Stop the container, since we don't need it anymore.
++
++- **"docker stop"** This stops a container
++- **$CONTAINER_ID** The Id of the container we want to stop.
++
++.. code-block:: bash
++
++ sudo docker ps
++
++Make sure it is really stopped.
++
++
++**Video:**
++
++See the example in action
++
++.. raw:: html
++
++ <div style="margin-top:10px;">
++ <iframe width="560" height="350" src="http://ascii.io/a/2562/raw" frameborder="0"></iframe>
++ </div>
++
++Continue to the :ref:`python_web_app` example.
+diff -uNr docker-0.6.2/docs/sources/examples/hello_world.rst docker-devmapper/docs/sources/examples/hello_world.rst
+--- docker-0.6.2/docs/sources/examples/hello_world.rst 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/docs/sources/examples/hello_world.rst 2013-09-23 10:37:38.854306466 -0500
+@@ -2,28 +2,6 @@
+ :description: A simple hello world example with Docker
+ :keywords: docker, example, hello world
+
+-.. _running_examples:
+-
+-Running the Examples
+-====================
+-
+-All the examples assume your machine is running the docker daemon. To
+-run the docker daemon in the background, simply type:
+-
+-.. code-block:: bash
+-
+- sudo docker -d &
+-
+-Now you can run docker in client mode: by default all commands will be
+-forwarded to the ``docker`` daemon via a protected Unix socket, so you
+-must run as root.
+-
+-.. code-block:: bash
+-
+- sudo docker help
+-
+-----
+-
+ .. _hello_world:
+
+ Hello World
+@@ -71,108 +49,4 @@
+ </div>
+
+
+-----
+-
+-.. _hello_world_daemon:
+-
+-Hello World Daemon
+-==================
+-
+-.. include:: example_header.inc
+-
+-And now for the most boring daemon ever written!
+-
+-This example assumes you have Docker installed and the Ubuntu
+-image already imported with ``docker pull ubuntu``. We will use the Ubuntu
+-image to run a simple hello world daemon that will just print hello
+-world to standard out every second. It will continue to do this until
+-we stop it.
+-
+-**Steps:**
+-
+-.. code-block:: bash
+-
+- CONTAINER_ID=$(sudo docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done")
+-
+-We are going to run a simple hello world daemon in a new container
+-made from the *ubuntu* image.
+-
+-- **"docker run -d "** run a command in a new container. We pass "-d"
+- so it runs as a daemon.
+-- **"ubuntu"** is the image we want to run the command inside of.
+-- **"/bin/sh -c"** is the command we want to run in the container
+-- **"while true; do echo hello world; sleep 1; done"** is the mini
+- script we want to run, that will just print hello world once a
+- second until we stop it.
+-- **$CONTAINER_ID** the output of the run command will return a
+- container id, we can use in future commands to see what is going on
+- with this process.
+-
+-.. code-block:: bash
+-
+- sudo docker logs $CONTAINER_ID
+-
+-Check the logs make sure it is working correctly.
+-
+-- **"docker logs**" This will return the logs for a container
+-- **$CONTAINER_ID** The Id of the container we want the logs for.
+-
+-.. code-block:: bash
+-
+- sudo docker attach $CONTAINER_ID
+-
+-Attach to the container to see the results in realtime.
+-
+-- **"docker attach**" This will allow us to attach to a background
+- process to see what is going on.
+-- **$CONTAINER_ID** The Id of the container we want to attach too.
+-
+-Exit from the container attachment by pressing Control-C.
+-
+-.. code-block:: bash
+-
+- sudo docker ps
+-
+-Check the process list to make sure it is running.
+-
+-- **"docker ps"** this shows all running process managed by docker
+-
+-.. code-block:: bash
+-
+- sudo docker stop $CONTAINER_ID
+-
+-Stop the container, since we don't need it anymore.
+-
+-- **"docker stop"** This stops a container
+-- **$CONTAINER_ID** The Id of the container we want to stop.
+-
+-.. code-block:: bash
+-
+- sudo docker ps
+-
+-Make sure it is really stopped.
+-
+-
+-**Video:**
+-
+-See the example in action
+-
+-.. raw:: html
+-
+- <div style="margin-top:10px;">
+- <iframe width="560" height="350" src="http://ascii.io/a/2562/raw" frameborder="0"></iframe>
+- </div>
+-
+-The next example in the series is a :ref:`python_web_app` example, or
+-you could skip to any of the other examples:
+-
+-.. toctree::
+- :maxdepth: 1
+-
+- python_web_app
+- nodejs_web_app
+- running_redis_service
+- running_ssh_service
+- couchdb_data_volumes
+- postgresql_service
+- mongodb
++Continue to the :ref:`hello_world_daemon` example.
+diff -uNr docker-0.6.2/docs/sources/examples/index.rst docker-devmapper/docs/sources/examples/index.rst
+--- docker-0.6.2/docs/sources/examples/index.rst 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/docs/sources/examples/index.rst 2013-09-23 10:37:38.849306480 -0500
+@@ -5,16 +5,16 @@
+
+
+ Examples
+-========
++============
+
+-Here are some examples of how to use Docker to create running
+-processes, starting from a very simple *Hello World* and progressing
+-to more substantial services like you might find in production.
++Contents:
+
+ .. toctree::
+ :maxdepth: 1
+
++ running_examples
+ hello_world
++ hello_world_daemon
+ python_web_app
+ nodejs_web_app
+ running_redis_service
+diff -uNr docker-0.6.2/docs/sources/examples/running_examples.rst docker-devmapper/docs/sources/examples/running_examples.rst
+--- docker-0.6.2/docs/sources/examples/running_examples.rst 1969-12-31 18:00:00.000000000 -0600
++++ docker-devmapper/docs/sources/examples/running_examples.rst 2013-09-23 10:37:38.857306457 -0500
+@@ -0,0 +1,23 @@
++:title: Running the Examples
++:description: An overview on how to run the docker examples
++:keywords: docker, examples, how to
++
++.. _running_examples:
++
++Running the Examples
++--------------------
++
++All the examples assume your machine is running the docker daemon. To
++run the docker daemon in the background, simply type:
++
++ .. code-block:: bash
++
++ sudo docker -d &
++
++Now you can run docker in client mode: by defalt all commands will be
++forwarded to the ``docker`` daemon via a protected Unix socket, so you
++must run as root.
++
++ .. code-block:: bash
++
++ sudo docker help
+diff -uNr docker-0.6.2/docs/sources/faq.rst docker-devmapper/docs/sources/faq.rst
+--- docker-0.6.2/docs/sources/faq.rst 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/docs/sources/faq.rst 2013-09-23 10:37:38.998306065 -0500
+@@ -122,13 +122,6 @@
+ (Jenkins, Strider, Travis), etc. Docker is rapidly establishing
+ itself as the standard for container-based tooling.
+
+-Do I lose my data when the container exits?
+-...........................................
+-
+-Not at all! Any data that your application writes to disk gets preserved
+-in its container until you explicitly delete the container. The file
+-system for the container persists even after the container halts.
+-
+ Can I help by adding some questions and answers?
+ ................................................
+
+diff -uNr docker-0.6.2/docs/sources/installation/amazon.rst docker-devmapper/docs/sources/installation/amazon.rst
+--- docker-0.6.2/docs/sources/installation/amazon.rst 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/docs/sources/installation/amazon.rst 2013-09-23 10:37:39.065305879 -0500
+@@ -1,77 +1,24 @@
+ :title: Installation on Amazon EC2
+-:description: Docker installation on Amazon EC2
++:description: Docker installation on Amazon EC2 with a single vagrant command. Vagrant 1.1 or higher is required.
+ :keywords: amazon ec2, virtualization, cloud, docker, documentation, installation
+
+-Amazon EC2
+-==========
++Using Vagrant (Amazon EC2)
++==========================
+
+-.. include:: install_header.inc
+-
+-There are several ways to install Docker on AWS EC2:
+-
+-* :ref:`amazonquickstart` or
+-* :ref:`amazonstandard` or
+-* :ref:`amazonvagrant`
+-
+-**You'll need an** `AWS account <http://aws.amazon.com/>`_ **first, of course.**
+-
+-.. _amazonquickstart:
+-
+-Amazon QuickStart
+------------------
+-
+-1. **Choose an image:**
+-
+- * Open http://cloud-images.ubuntu.com/locator/ec2/
+- * Enter ``amd64 precise`` in the search field (it will search as you
+- type)
+- * Pick an image by clicking on the image name. *An EBS-enabled
+- image will let you use a t1.micro instance.* Clicking on the image
+- name will take you to your AWS Console.
+-
+-2. **Tell CloudInit to install Docker:**
+-
+- * Enter ``#include https://get.docker.io`` into the instance *User
+- Data*. `CloudInit <https://help.ubuntu.com/community/CloudInit>`_
+- is part of the Ubuntu image you chose and it bootstraps from this
+- *User Data*.
++This page explains how to setup and run an Amazon EC2 instance from
++your local machine. **Vagrant is not necessary to run Docker on
++EC2.** You can follow the :ref:`ubuntu_linux` instructions installing
++Docker on any EC2 instance running Ubuntu.
+
+-3. After a few more standard choices where defaults are probably ok, your
+- AWS Ubuntu instance with Docker should be running!
++Installation
++------------
+
+-**If this is your first AWS instance, you may need to set up your
+-Security Group to allow SSH.** By default all incoming ports to your
+-new instance will be blocked by the AWS Security Group, so you might
+-just get timeouts when you try to connect.
+-
+-Installing with ``get.docker.io`` (as above) will create a service
+-named ``dockerd``. You may want to set up a :ref:`docker group
+-<dockergroup>` and add the *ubuntu* user to it so that you don't have
+-to use ``sudo`` for every Docker command.
+-
+-Once you've got Docker installed, you're ready to try it out -- head
+-on over to the :doc:`../use/basics` or :doc:`../examples/index` section.
+-
+-.. _amazonstandard:
+-
+-Standard Ubuntu Installation
+-----------------------------
+-
+-If you want a more hands-on installation, then you can follow the
+-:ref:`ubuntu_linux` instructions installing Docker on any EC2 instance
+-running Ubuntu. Just follow Step 1 from :ref:`amazonquickstart` to
+-pick an image (or use one of your own) and skip the step with the
+-*User Data*. Then continue with the :ref:`ubuntu_linux` instructions.
+-
+-.. _amazonvagrant:
+-
+-Use Vagrant
+------------
++.. include:: install_header.inc
+
+ .. include:: install_unofficial.inc
+
+-And finally, if you prefer to work through Vagrant, you can install
+-Docker that way too. Vagrant 1.1 or higher is required.
++Docker can now be installed on Amazon EC2 with a single vagrant
++command. Vagrant 1.1 or higher is required.
+
+ 1. Install vagrant from http://www.vagrantup.com/ (or use your package manager)
+ 2. Install the vagrant aws plugin
+@@ -90,17 +37,16 @@
+
+ 4. Check your AWS environment.
+
+- Create a keypair specifically for EC2, give it a name and save it
+- to your disk. *I usually store these in my ~/.ssh/ folder*.
++ Create a keypair specifically for EC2, give it a name and save it to your disk. *I usually store these in my ~/.ssh/ folder*.
++
++ Check that your default security group has an inbound rule to accept SSH (port 22) connections.
++
+
+- Check that your default security group has an inbound rule to
+- accept SSH (port 22) connections.
+
+ 5. Inform Vagrant of your settings
+
+- Vagrant will read your access credentials from your environment, so
+- we need to set them there first. Make sure you have everything on
+- amazon aws setup so you can (manually) deploy a new image to EC2.
++ Vagrant will read your access credentials from your environment, so we need to set them there first. Make sure
++ you have everything on amazon aws setup so you can (manually) deploy a new image to EC2.
+
+ ::
+
+@@ -114,8 +60,7 @@
+ * ``AWS_ACCESS_KEY_ID`` - The API key used to make requests to AWS
+ * ``AWS_SECRET_ACCESS_KEY`` - The secret key to make AWS API requests
+ * ``AWS_KEYPAIR_NAME`` - The name of the keypair used for this EC2 instance
+- * ``AWS_SSH_PRIVKEY`` - The path to the private key for the named
+- keypair, for example ``~/.ssh/docker.pem``
++ * ``AWS_SSH_PRIVKEY`` - The path to the private key for the named keypair, for example ``~/.ssh/docker.pem``
+
+ You can check if they are set correctly by doing something like
+
+@@ -130,12 +75,10 @@
+ vagrant up --provider=aws
+
+
+- If it stalls indefinitely on ``[default] Waiting for SSH to become
+- available...``, Double check your default security zone on AWS
+- includes rights to SSH (port 22) to your container.
++ If it stalls indefinitely on ``[default] Waiting for SSH to become available...``, Double check your default security
++ zone on AWS includes rights to SSH (port 22) to your container.
+
+- If you have an advanced AWS setup, you might want to have a look at
+- https://github.com/mitchellh/vagrant-aws
++ If you have an advanced AWS setup, you might want to have a look at https://github.com/mitchellh/vagrant-aws
+
+ 7. Connect to your machine
+
+diff -uNr docker-0.6.2/docs/sources/installation/kernel.rst docker-devmapper/docs/sources/installation/kernel.rst
+--- docker-0.6.2/docs/sources/installation/kernel.rst 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/docs/sources/installation/kernel.rst 2013-09-23 10:37:39.011306029 -0500
+@@ -62,7 +62,7 @@
+ Cgroups and namespaces
+ ----------------------
+
+-You need to enable namespaces and cgroups, to the extent of what is needed
++You need to enable namespaces and cgroups, to the extend of what is needed
+ to run LXC containers. Technically, while namespaces have been introduced
+ in the early 2.6 kernels, we do not advise to try any kernel before 2.6.32
+ to run LXC containers. Note that 2.6.32 has some documented issues regarding
+diff -uNr docker-0.6.2/docs/sources/installation/ubuntulinux.rst docker-devmapper/docs/sources/installation/ubuntulinux.rst
+--- docker-0.6.2/docs/sources/installation/ubuntulinux.rst 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/docs/sources/installation/ubuntulinux.rst 2013-09-23 10:37:39.068305871 -0500
+@@ -78,7 +78,7 @@
+ sudo sh -c "curl https://get.docker.io/gpg | apt-key add -"
+
+ # Add the Docker repository to your apt sources list.
+- sudo sh -c "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
++ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
+
+ # Update your sources
+ sudo apt-get update
+@@ -132,7 +132,7 @@
+ sudo sh -c "curl http://get.docker.io/gpg | apt-key add -"
+
+ # Add the Docker repository to your apt sources list.
+- sudo sh -c "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
++ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
+
+ # update
+ sudo apt-get update
+Binary files docker-0.6.2/docs/sources/terms/images/docker-filesystems-busyboxrw.png and docker-devmapper/docs/sources/terms/images/docker-filesystems-busyboxrw.png differ
+Binary files docker-0.6.2/docs/sources/terms/images/docker-filesystems-debian.png and docker-devmapper/docs/sources/terms/images/docker-filesystems-debian.png differ
+Binary files docker-0.6.2/docs/sources/terms/images/docker-filesystems-debianrw.png and docker-devmapper/docs/sources/terms/images/docker-filesystems-debianrw.png differ
+Binary files docker-0.6.2/docs/sources/terms/images/docker-filesystems-generic.png and docker-devmapper/docs/sources/terms/images/docker-filesystems-generic.png differ
+Binary files docker-0.6.2/docs/sources/terms/images/docker-filesystems-multilayer.png and docker-devmapper/docs/sources/terms/images/docker-filesystems-multilayer.png differ
+Binary files docker-0.6.2/docs/sources/terms/images/docker-filesystems-multiroot.png and docker-devmapper/docs/sources/terms/images/docker-filesystems-multiroot.png differ
+diff -uNr docker-0.6.2/docs/sources/terms/images/docker-filesystems.svg docker-devmapper/docs/sources/terms/images/docker-filesystems.svg
+--- docker-0.6.2/docs/sources/terms/images/docker-filesystems.svg 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/docs/sources/terms/images/docker-filesystems.svg 2013-09-23 10:37:38.907306318 -0500
+@@ -26,16 +26,16 @@
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.82666667"
+- inkscape:cx="236.08871"
+- inkscape:cy="300"
++ inkscape:cx="382.45968"
++ inkscape:cy="348.3871"
+ inkscape:document-units="px"
+- inkscape:current-layer="layer2"
++ inkscape:current-layer="layer4"
+ showgrid="false"
+ width="800px"
+ inkscape:window-width="1327"
+ inkscape:window-height="714"
+- inkscape:window-x="686"
+- inkscape:window-y="219"
++ inkscape:window-x="616"
++ inkscape:window-y="1483"
+ inkscape:window-maximized="0"
+ showguides="false"
+ inkscape:guide-bbox="true"
+@@ -48,98 +48,98 @@
+ inkscape:snap-bbox="false"
+ inkscape:snap-grids="false">
+ <sodipodi:guide
+- id="guide3907"
++ orientation="0,1"
+ position="412.84404,257.33945"
+- orientation="0,1" />
++ id="guide3907" />
+ <sodipodi:guide
+- id="guide4041"
++ orientation="1,0"
+ position="-404.80241,513.78768"
+- orientation="1,0" />
++ id="guide4041" />
+ <sodipodi:guide
+- id="guide4043"
++ orientation="1,0"
+ position="1202.7302,257.33945"
+- orientation="1,0" />
++ id="guide4043" />
+ <sodipodi:guide
+- id="guide4091"
++ orientation="1,0"
+ position="131.92561,176.67443"
+- orientation="1,0" />
++ id="guide4091" />
+ <sodipodi:guide
+- id="guide4093"
++ orientation="1,0"
+ position="667.58474,178.3563"
+- orientation="1,0" />
++ id="guide4093" />
+ <sodipodi:guide
+- id="guide4109"
++ orientation="1,0"
+ position="386.00972,138.85222"
+- orientation="1,0" />
++ id="guide4109" />
+ <sodipodi:guide
+- id="guide4125"
++ orientation="0,1"
+ position="85.321101,260.09174"
+- orientation="0,1" />
++ id="guide4125" />
+ <sodipodi:guide
+- id="guide4206"
++ orientation="1,0"
+ position="251.6129,347.17742"
+- orientation="1,0" />
++ id="guide4206" />
+ <sodipodi:guide
+- id="guide4281"
++ orientation="0,1"
+ position="-404.80241,590.32258"
+- orientation="0,1" />
++ id="guide4281" />
+ <sodipodi:guide
+- orientation="1,0"
++ id="guide5235"
+ position="400.40322,131.85484"
+- id="guide5235" />
++ orientation="1,0" />
+ <sodipodi:guide
+- orientation="1,0"
++ id="guide5237"
+ position="143.95161,295.16129"
+- id="guide5237" />
++ orientation="1,0" />
+ <sodipodi:guide
+- orientation="1,0"
++ id="guide5239"
+ position="281.85484,384.67742"
+- id="guide5239" />
++ orientation="1,0" />
+ </sodipodi:namedview>
+ <defs
+ id="defs4">
+ <inkscape:perspective
+- sodipodi:type="inkscape:persp3d"
+- inkscape:vp_x="-406.34117 : 522.93291 : 1"
+- inkscape:vp_y="0 : 1000 : 0"
+- inkscape:vp_z="1196.7644 : 521.45993 : 1"
++ id="perspective11489"
+ inkscape:persp3d-origin="403.62904 : 221.23862 : 1"
+- id="perspective11489" />
+- <inkscape:perspective
+- id="perspective5786"
+- inkscape:persp3d-origin="400 : 200 : 1"
+- inkscape:vp_z="1200.3935 : 584.89873 : 1"
++ inkscape:vp_z="1196.7644 : 521.45993 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+- inkscape:vp_x="-407.55086 : 591.21042 : 1"
++ inkscape:vp_x="-406.34117 : 522.93291 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+- inkscape:vp_x="-403.92182 : 591.88452 : 1"
+- inkscape:vp_y="0 : 1000 : 0"
+- inkscape:vp_z="1199.1838 : 590.41154 : 1"
+- inkscape:persp3d-origin="406.04839 : 290.19023 : 1"
+- id="perspective4014" />
+- <inkscape:perspective
+- sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="-407.55086 : 591.21042 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1200.3935 : 584.89873 : 1"
+ inkscape:persp3d-origin="400 : 200 : 1"
+- id="perspective4012" />
++ id="perspective5786" />
++ <inkscape:perspective
++ id="perspective4014"
++ inkscape:persp3d-origin="406.04839 : 290.19023 : 1"
++ inkscape:vp_z="1199.1838 : 590.41154 : 1"
++ inkscape:vp_y="0 : 1000 : 0"
++ inkscape:vp_x="-403.92182 : 591.88452 : 1"
++ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+- id="perspective3054"
++ id="perspective4012"
+ inkscape:persp3d-origin="400 : 200 : 1"
+ inkscape:vp_z="1200.3935 : 584.89873 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="-407.55086 : 591.21042 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+- id="perspective3054-6"
+- inkscape:persp3d-origin="400.19492 : 199.86531 : 1"
+- inkscape:vp_z="1200.5884 : 584.76404 : 1"
++ sodipodi:type="inkscape:persp3d"
++ inkscape:vp_x="-407.55086 : 591.21042 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
++ inkscape:vp_z="1200.3935 : 584.89873 : 1"
++ inkscape:persp3d-origin="400 : 200 : 1"
++ id="perspective3054" />
++ <inkscape:perspective
++ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="-407.35594 : 591.07573 : 1"
+- sodipodi:type="inkscape:persp3d" />
++ inkscape:vp_y="0 : 1000 : 0"
++ inkscape:vp_z="1200.5884 : 584.76404 : 1"
++ inkscape:persp3d-origin="400.19492 : 199.86531 : 1"
++ id="perspective3054-6" />
+ </defs>
+ <metadata
+ id="metadata7">
+@@ -149,1393 +149,1392 @@
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+- <dc:title />
++ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+- style="display:inline"
+- inkscape:label="Background"
+- id="layer8"
++ sodipodi:insensitive="true"
+ inkscape:groupmode="layer"
+- sodipodi:insensitive="true">
++ id="layer8"
++ inkscape:label="Background"
++ style="display:inline">
+ <rect
+- y="0"
+- x="0"
+- height="600"
+- width="800"
++ style="fill:#f0f0f0;fill-opacity:0.51111115;stroke:none"
+ id="rect8704"
+- style="fill:#f0f0f0;fill-opacity:0.51111115;stroke:none" />
++ width="800"
++ height="600"
++ x="0"
++ y="0" />
+ </g>
+ <g
+- style="display:inline"
+- inkscape:label="bootfs"
++ inkscape:groupmode="layer"
+ id="layer2"
+- inkscape:groupmode="layer">
++ inkscape:label="bootfs"
++ style="display:inline">
+ <g
+- transform="translate(0,-452.36218)"
+- inkscape:corner7="0.017576171 : -0.16150813 : 0.53533062 : 1"
+- inkscape:corner0="0.49469727 : -0.063230334 : 0 : 1"
+- inkscape:perspectiveID="#perspective3054"
+- id="g3999"
+- style="fill:#aad3d3;fill-opacity:1;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+- sodipodi:type="inkscape:box3d"
+- inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+- inkscape:export-ydpi="90">
++ inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ sodipodi:type="inkscape:box3d"
++ style="fill:#aad3d3;fill-opacity:1;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ id="g3999"
++ inkscape:perspectiveID="#perspective3054"
++ inkscape:corner0="0.49469727 : -0.063230334 : 0 : 1"
++ inkscape:corner7="0.017576171 : -0.16150813 : 0.53533062 : 1"
++ transform="translate(0,-452.36218)">
+ <path
+- d="M 132.72634,830.93804 386.05151,1004.3234 666.77808,819.25271 414.27662,735.0876 z"
+- inkscape:box3dsidetype="13"
+- style="fill:#afafde;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4009"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#afafde;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="13"
++ d="M 132.72634,830.93804 386.05151,1004.3234 666.77808,819.25271 414.27662,735.0876 z" />
+ <path
+- d="m 132.72634,765.18707 0,65.75097 281.55028,-95.85044 0,-48.41204 z"
+- inkscape:box3dsidetype="6"
+- style="fill:#353564;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4001"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#353564;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="6"
++ d="m 132.72634,765.18707 0,65.75097 281.55028,-95.85044 0,-48.41204 z" />
+ <path
+- d="m 414.27662,686.67556 252.50146,69.2908 0,63.28635 -252.50146,-84.16511 z"
+- inkscape:box3dsidetype="11"
+- style="fill:#e9e9ff;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4011"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#e9e9ff;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="11"
++ d="m 414.27662,686.67556 252.50146,69.2908 0,63.28635 -252.50146,-84.16511 z" />
+ <path
+- d="M 132.72634,765.18707 386.05151,907.74315 666.77808,755.96636 414.27662,686.67556 z"
+- inkscape:box3dsidetype="5"
+- style="fill:#bbdbdb;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4003"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#bbdbdb;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="5"
++ d="M 132.72634,765.18707 386.05151,907.74315 666.77808,755.96636 414.27662,686.67556 z" />
+ <path
+- d="m 386.05151,907.74315 0,96.58025 280.72657,-185.07069 0,-63.28635 z"
+- inkscape:box3dsidetype="14"
+- style="fill:#91c6c6;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4007"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#91c6c6;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="14"
++ d="m 386.05151,907.74315 0,96.58025 280.72657,-185.07069 0,-63.28635 z" />
+ <path
+- d="m 132.72634,765.18707 253.32517,142.55608 0,96.58025 -253.32517,-173.38536 z"
+- inkscape:box3dsidetype="3"
+- style="fill:#a9d2d2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4005"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#a9d2d2;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.4000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="3"
++ d="m 132.72634,765.18707 253.32517,142.55608 0,96.58025 -253.32517,-173.38536 z" />
+ </g>
+ <path
+- style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+- d="m 386.05151,551.96125 0,-96.58028 280.72657,-151.77679 0,63.28635 z"
+- id="path8380"
+- inkscape:connector-curvature="0"
+- inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+- inkscape:export-ydpi="90" />
+- <g
+- id="text9360"
+- style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New Bold"
+- transform="matrix(0.75405944,0,0,0.75405944,111.78234,89.235813)"
+ inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ inkscape:connector-curvature="0"
++ id="path8380"
++ d="m 386.05151,551.96125 0,-96.58028 280.72657,-151.77679 0,63.28635 z"
++ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
++ <g
++ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+- inkscape:export-ydpi="90">
++ inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ transform="matrix(0.75405944,0,0,0.75405944,111.78234,89.235813)"
++ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New Bold"
++ id="text9360">
+ <path
+- id="path9367"
++ inkscape:connector-curvature="0"
+ d="m 266.71327,371.36648 c 0,0 42.02322,22.59745 42.02322,22.59745 -0.88334,-2.7494 -0.92807,-5.0556 -0.14667,-6.93271 0.74185,-1.90975 2.28564,-3.39773 4.62971,-4.47237 6.2804,-2.87893 16.29751,-2.91299 30.29812,-0.0808 14.27878,2.88854 28.84623,7.93676 43.91285,15.30907 14.96985,7.32504 25.82666,14.76208 32.30008,22.2841 6.60774,7.73294 6.42608,13.62664 -0.77341,17.5191 -2.57568,1.39255 -5.9428,2.27952 -10.09196,2.65645 -4.14722,0.37682 -9.03195,0.27276 -14.63551,-0.30994 0,0 6.12635,3.29437 6.12635,3.29437 0,0 -11.62996,6.24761 -11.62996,6.24761 -2.41692,1.29837 -5.29563,1.59264 -8.61905,0.88139 -3.35728,-0.771 -6.87004,-2.19044 -10.52344,-4.24635 -3.54102,-1.99268 -5.86779,-3.86777 -6.99837,-5.62926 -1.19938,-1.79188 -0.61523,-3.29313 1.73951,-4.51039 0,0 1.68826,-0.87272 1.68826,-0.87272 0,0 -90.45829,-49.85167 -90.45829,-49.85167 0,0 -1.59344,0.71389 -1.59344,0.71389 -2.25209,1.00907 -4.70558,1.26625 -7.34808,0.77047 -2.66136,-0.54067 -5.33776,-1.56961 -8.020
42,-3.07925 -2.60339,-1.46503 -4.2303,-2.85092 -4.89296,-4.16015 -0.68502,-1.34601 0.087,-2.50041 2.30772,-3.46734 0,0 10.70574,-4.66093 10.70574,-4.66093 m 112.24992,31.28573 c -9.24083,-4.62749 -18.2154,-7.8208 -27.00552,-9.64439 -8.68476,-1.80163 -14.90975,-1.78551 -18.76933,0.0401 -3.85162,1.82199 -4.17827,4.93626 -0.91435,9.40205 3.33104,4.5576 9.38532,9.21781 18.26644,13.9935 8.2787,4.45179 16.48672,7.54923 24.5504,9.23207 8.07047,1.65936 14.42008,1.30809 18.96216,-1.05409 4.51014,-2.34553 5.14578,-5.59044 1.97324,-9.69201 -3.16324,-4.08344 -8.87974,-8.17923 -17.06304,-12.27723"
+- inkscape:connector-curvature="0" />
++ id="path9367" />
+ <path
+- id="path9369"
++ inkscape:connector-curvature="0"
+ d="m 437.98696,372.26204 c 8.99001,3.86459 16.99429,8.15462 23.98969,12.89 7.10735,4.79779 11.64579,9.38974 13.51508,13.75095 1.84778,4.39015 0.77479,7.7026 -3.26515,9.88682 -4.03834,2.18336 -10.64299,3.02836 -19.75031,2.52645 -9.13238,-0.53761 -19.16951,-2.42955 -30.00743,-5.6346 -10.64461,-3.14785 -20.49641,-6.91697 -29.54294,-11.275 -8.99106,-4.3313 -16.62248,-8.95602 -22.92919,-13.85679 -6.22481,-4.81666 -9.76552,-9.10257 -10.7207,-12.89418 -0.91096,-3.7398 0.56253,-6.46753 4.39211,-8.22314 3.83482,-1.75785 9.80768,-2.40719 17.97503,-1.9535 8.17976,0.41437 17.24042,1.97213 27.27404,4.70697 10.13979,2.75246 19.82425,6.10167 29.06977,10.07602 m -8.30516,4.22688 c -7.37544,-3.23914 -15.01481,-5.69353 -22.94614,-7.39099 -10.59158,-2.24412 -18.0015,-2.32455 -22.37343,-0.25658 -3.87071,1.83102 -4.04253,4.79198 -0.44507,8.9356 3.66986,4.22702 9.76566,8.36619 18.36814,12.41764 7.19768,3.38988 15.42275,5.9332 24.65726,7.59871 9.26097,1.64784 15.89905,1.45513 19.81688,-0
.58239 3.92134,-2.03932 3.86523,-5.23176 -0.0906,-9.52309 -3.95681,-4.24224 -9.63234,-7.96878 -16.98706,-11.1989"
+- inkscape:connector-curvature="0" />
++ id="path9369" />
+ <path
+- id="path9371"
++ inkscape:connector-curvature="0"
+ d="m 486.12662,348.37269 c 9.12904,3.46892 17.3339,7.32826 24.59454,11.59549 7.36867,4.31928 12.21724,8.46335 14.44995,12.41098 2.21291,3.97101 1.48935,6.9806 -2.2182,8.98511 -3.70503,2.00315 -10.02616,2.80997 -18.90507,2.41265 -8.90912,-0.4296 -18.83267,-2.08097 -29.67005,-4.91891 -10.65199,-2.78938 -20.6048,-6.1499 -29.84349,-10.05334 -9.19036,-3.88303 -17.09633,-8.04492 -23.74853,-12.47019 -6.56981,-4.35325 -10.47308,-8.24211 -11.80577,-11.6979 -1.28493,-3.41097 -0.13687,-5.91277 3.41353,-7.5404 3.55603,-1.63005 9.3155,-2.25883 17.33088,-1.89147 8.02147,0.33124 17.0176,1.70257 27.07805,4.14312 10.15907,2.45438 19.92781,5.45443 29.32416,9.02486 m -7.65999,3.9026 c -7.50262,-2.90854 -15.1879,-5.10156 -23.08465,-6.60329 -10.54858,-1.98575 -17.7778,-2.01539 -21.82395,-0.10153 -3.58138,1.69415 -3.44041,4.39661 0.49404,8.15321 4.01058,3.82924 10.36918,7.5608 19.15114,11.19424 7.34217,3.03775 15.59205,5.29806 24.72975,6.75377 9.15745,1.43882 15.58337,1.22282 19.18663,-
0.65111 3.60745,-1.87607 3.2401,-4.77605 -1.02456,-8.65304 -4.26414,-3.8354 -10.15199,-7.19381 -17.6284,-10.09225"
+- inkscape:connector-curvature="0" />
++ id="path9371" />
+ <path
+- id="path9373"
++ inkscape:connector-curvature="0"
+ d="m 480.19699,325.92671 c 0,0 46.81732,16.72492 46.81732,16.72492 5.30636,1.89565 9.16415,2.98806 11.53246,3.26156 3.7232,0.43657 6.89415,-0.0226 9.49293,-1.37414 3.75665,-1.95367 4.44336,-4.69849 2.10883,-8.19919 -0.90969,-1.33519 -1.02233,-2.17338 -0.34299,-2.52081 0.9357,-0.47846 2.95503,-0.48037 6.06821,-0.005 3.1485,0.46528 6.49481,1.29323 10.04934,2.48906 3.32993,1.12037 5.84704,2.28915 7.54222,3.50637 2.83733,1.95367 4.27456,4.42822 4.29002,7.43825 -0.0474,3.00727 -1.25752,5.16708 -3.63759,6.45388 -4.62111,2.49844 -11.67395,3.11368 -21.05614,1.83994 -9.34487,-1.30401 -18.94785,-3.76018 -28.72768,-7.32238 0,0 -51.54329,-18.77413 -51.54329,-18.77413 0,0 -2.69607,1.28076 -2.69607,1.28076 -1.80402,0.85705 -4.10418,1.10091 -6.88948,0.73055 -2.8225,-0.40698 -5.85549,-1.21407 -9.08819,-2.41555 -3.13895,-1.16664 -5.2901,-2.28205 -6.46547,-3.348 -1.2127,-1.09633 -0.91887,-2.05519 0.87217,-2.87962 0,0 2.67694,-1.23211 2.67694,-1.23211 0,0 -18.59439,-6.77282 -18.59439
,-6.77282 -4.82318,-1.75679 -7.87823,-3.13859 -9.20076,-4.15603 -1.3546,-1.04496 -1.48412,-1.80449 -0.39608,-2.28266 1.06279,-0.46689 2.94303,-0.47915 5.6499,-0.0361 2.67661,0.41136 6.41632,1.47416 11.25307,3.20202 0,0 18.64358,6.66019 18.64358,6.66019 0,0 13.36854,-6.15311 13.36854,-6.15311 1.71867,-0.79098 3.93689,-1.00802 6.6652,-0.65194 2.69085,0.32287 5.65208,1.03373 8.89493,2.1378 3.19532,1.08797 5.46866,2.16327 6.80877,3.22473 1.29906,1.03205 1.08863,1.9601 -0.64069,2.78154 0,0 -13.45561,6.39201 -13.45561,6.39201"
+- inkscape:connector-curvature="0" />
++ id="path9373" />
+ <path
+- id="path9375"
++ inkscape:connector-curvature="0"
+ d="m 524.35826,304.94812 c 0,0 57.86252,18.38857 57.86252,18.38857 0,0 9.7239,-5.0266 9.7239,-5.0266 1.62583,-0.84042 3.97193,-1.06764 7.05011,-0.68253 3.02751,0.34959 6.47003,1.1138 10.34207,2.2985 3.81658,1.16778 6.62659,2.32065 8.41675,3.45726 1.7367,1.10538 1.79678,2.09684 0.1687,2.97144 0,0 -20.86256,11.20735 -20.86256,11.20735 -1.69813,0.91223 -4.12808,1.16816 -7.27767,0.76668 -3.20111,-0.44068 -6.755,-1.30911 -10.64737,-2.59887 -3.77828,-1.25192 -6.46425,-2.44676 -8.07231,-3.5865 -1.65775,-1.17192 -1.63386,-2.19399 0.06,-3.06965 0,0 4.16686,-2.15398 4.16686,-2.15398 0,0 -57.79955,-18.70882 -57.79955,-18.70882 0,0 -3.31246,1.57357 -3.31246,1.57357 -1.67461,0.79557 -3.894,1.0321 -6.648,0.70863 -2.79428,-0.35685 -5.83447,-1.07922 -9.10983,-2.16217 -3.18126,-1.05181 -5.3938,-2.06251 -6.64916,-3.0336 -1.29516,-0.99893 -1.10545,-1.88041 0.5601,-2.64708 0,0 3.29491,-1.51654 3.29491,-1.51654 0,0 -8.05013,-2.6057 -8.05013,-2.6057 -9.0452,-2.92777 -15.29182,-5.80135 -
18.83144,-8.62907 -3.52308,-2.81085 -3.17907,-5.10586 0.96661,-6.91085 1.83597,-0.79923 4.45749,-1.5595 7.86455,-2.28173 3.35858,-0.74992 6.26927,-0.99401 8.74211,-0.7327 2.50162,0.25283 5.19422,0.81488 8.08621,1.68978 3.10997,0.94091 5.375,1.84984 6.78473,2.72549 1.35022,0.86008 1.58905,1.48936 0.71009,1.88489 -0.40765,0.18355 -1.25572,0.38688 -2.54436,0.60991 -4.41723,0.71294 -7.6893,1.54538 -9.81886,2.49937 -2.22444,0.99667 -2.73118,2.01496 -1.5084,3.05681 1.18494,1.01695 3.30412,2.01202 6.36785,2.98566 0,0 8.06456,2.56289 8.06456,2.56289 0,0 10.38017,-4.77766 10.38017,-4.77766 1.60406,-0.73823 3.75199,-0.95017 6.4536,-0.63657 2.66155,0.28314 5.62415,0.92234 8.8989,1.92218 3.22598,0.985 5.54921,1.96307 6.95893,2.93324 1.36659,0.94309 1.24876,1.79847 -0.36254,2.56385 0,0 -10.42964,4.95455 -10.42964,4.95455"
+- inkscape:connector-curvature="0" />
++ id="path9375" />
+ <path
+- id="path9377"
++ inkscape:connector-curvature="0"
+ d="m 574.61499,283.99905 c -3.31444,-0.15435 -6.08369,-0.11845 -8.31443,0.10735 -2.30321,0.20508 -4.07372,0.60048 -5.31424,1.18721 -2.46838,1.16767 -3.01224,2.51015 -1.61447,4.03327 0.60292,0.67291 1.64413,1.22527 3.12534,1.65615 1.70913,0.49721 3.82744,0.77332 6.35381,0.8271 1.87073,0.0245 4.53088,-0.36099 7.97382,-1.15539 6.3436,-1.44672 11.39483,-2.26881 15.17355,-2.47016 4.98619,-0.25925 10.88971,0.10784 17.75075,1.10837 6.92387,1.00975 13.65666,2.40914 20.21272,4.20821 9.03796,2.4802 15.73657,5.10339 20.02734,7.86932 6.35081,4.06357 7.3,7.36394 2.70673,9.84732 -1.85312,1.00191 -4.27563,1.73258 -7.2635,2.1895 -2.88132,0.47104 -6.28692,0.6849 -10.20845,0.64145 0.80272,0.49803 1.32719,0.93276 1.57202,1.30366 0.24495,0.37149 0.1769,0.66031 -0.20564,0.86576 -1.02151,0.54865 -3.18409,0.59244 -6.47634,0.13197 -3.34347,-0.49542 -8.15753,-1.67755 -14.39541,-3.53092 0,0 -8.59884,-2.55485 -8.59884,-2.55485 -6.05987,-1.80048 -10.01632,-3.2171 -11.91481,-4.26116 -1.94556,-
1.07213 -2.42442,-1.85248 -1.44701,-2.34539 0.78497,-0.39581 2.2796,-0.48123 4.48868,-0.25629 2.13397,0.20198 5.36767,0.81735 9.72187,1.85154 4.26215,0.44403 7.96002,0.55921 11.08074,0.3439 3.04016,-0.23936 5.45895,-0.82613 7.25042,-1.75782 2.92404,-1.52066 3.35798,-3.20948 1.3294,-5.05875 -1.04765,-0.89657 -2.55062,-1.61718 -4.50718,-2.1636 -3.2445,-0.90604 -6.44882,-1.37387 -9.62339,-1.4077 -3.16808,-0.0337 -7.17813,0.6088 -12.04806,1.93106 -7.21679,1.99422 -14.62018,2.58337 -22.13286,1.76443 -7.37333,-0.78946 -15.08696,-2.38082 -23.08624,-4.74933 -8.08729,-2.39456 -13.72809,-4.81726 -16.98815,-7.27133 -4.41938,-3.29135 -4.47329,-5.88661 -0.24956,-7.8229 1.46281,-0.6705 3.34863,-1.17273 5.65981,-1.50788 2.26094,-0.36411 4.98687,-0.55216 8.18326,-0.56429 -0.60143,-0.45433 -0.98542,-0.82473 -1.153,-1.11182 -0.14687,-0.2959 -0.0782,-0.50905 0.20561,-0.63976 0.85095,-0.3916 2.68442,-0.40633 5.50914,-0.0436 2.76417,0.34452 6.79329,1.24528 12.1235,2.71337 0,0 5.46229,1.50449 5.4
6229,1.50449 4.9316,1.35835 8.14703,2.36621 9.61371,3.01537 2.80152,1.26506 3.65218,2.17198 2.53312,2.71381 -0.75407,0.36519 -2.28486,0.44438 -4.58735,0.23757 -2.2968,-0.20623 -4.94238,-0.66681 -7.9287,-1.37921"
+- inkscape:connector-curvature="0" />
++ id="path9377" />
+ </g>
+ <path
+- inkscape:connector-curvature="0"
+- id="path4672"
++ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 386.05151,551.96125 0,-96.58028 280.72657,-151.77679 0,63.28635 z"
+- style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
++ id="path4672"
++ inkscape:connector-curvature="0" />
+ <g
+- id="text6884"
+- style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Courier New;-inkscape-font-specification:Sans"
+- transform="translate(1.2096774,-17.209677)">
++ id="text7447"
++ style="font-size:40px;font-style:italic;font-variant:normal;font-weight:500;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Futura;-inkscape-font-specification:Futura Medium Italic">
+ <path
+- id="path6891"
+- d="m 405.68539,517.2315 c 0,0 -0.0193,16.2617 -0.0193,16.2617 0,0 3.17768,-2.015 3.17768,-2.015 0.42104,-0.26699 0.71912,-0.28408 0.89461,-0.0515 0.17538,0.20367 0.26245,0.57777 0.26128,1.12234 -0.001,0.51582 -0.0901,1.00179 -0.26671,1.45807 -0.1768,0.45653 -0.47536,0.81943 -0.89606,1.08884 0,0 -7.2615,4.65021 -7.2615,4.65021 -0.4181,0.26775 -0.71809,0.2856 -0.89962,0.053 -0.18168,-0.23276 -0.27256,-0.61101 -0.27256,-1.13472 0,-0.55292 0.0909,-1.0473 0.27272,-1.48298 0.18171,-0.4645 0.48198,-0.82951 0.90042,-1.09484 0,0 2.35294,-1.49203 2.35294,-1.49203 0,0 0.0349,-43.95921 0.0349,-43.95921 0,0 -2.3762,1.32682 -2.3762,1.32682 -0.4226,0.23601 -0.72583,0.24206 -0.90932,0.0178 -0.18363,-0.25407 -0.2755,-0.66358 -0.2755,-1.22844 0,-0.56489 0.0919,-1.06185 0.27567,-1.49066 0.18367,-0.45823 0.48718,-0.80413 0.91014,-1.03765 0,0 7.3447,-4.05398 7.3447,-4.05398 0.42546,-0.23477 0.72666,-0.22523 0.90398,0.0279 0.17721,0.22388 0.26518,0.61389 0.26399,1.17006 -0.001,0.55615 -
0.0911,1.05925 -0.26963,1.50941 -0.1786,0.42125 -0.48025,0.7505 -0.90536,0.98782 0,0 -3.20861,1.79162 -3.20861,1.79162 0,0 -0.027,22.7262 -0.027,22.7262 0,0 11.85347,-29.32986 11.85347,-29.32986 0,0 -1.84356,1.0294 -1.84356,1.0294 -0.4158,0.23222 -0.71071,0.23758 -0.8844,0.0157 -0.17376,-0.25093 -0.25981,-0.65252 -0.25806,-1.20465 0.002,-0.55216 0.0906,-1.03662 0.2666,-1.4532 0.17596,-0.44532 0.4722,-0.78288 0.88832,-1.01263 0,0 4.9265,-2.71923 4.9265,-2.71923 0.39516,-0.21804 0.67722,-0.2015 0.84652,0.049 0.16926,0.22176 0.25255,0.60547 0.24997,1.15114 -0.003,0.54567 -0.0901,1.03822 -0.26231,1.47778 -0.17228,0.41121 -0.45565,0.72699 -0.8505,0.94742 0,0 -0.67254,0.37553 -0.67254,0.37553 0,0 -9.34163,23.22298 -9.34163,23.22298 1.39299,0.391 2.54214,1.22247 3.45037,2.49219 0.90456,1.26471 1.76961,3.30318 2.59512,6.10986 0.47018,1.56163 1.32542,5.36141 2.55962,11.3683 0,0 2.05678,-1.30423 2.05678,-1.30423 0.40304,-0.25557 0.68792,-0.26799 0.85497,-0.0375 0.16702,0.20219 0.24918
,0.57016 0.24656,1.10393 -0.003,0.5056 -0.0889,0.98066 -0.25892,1.42533 -0.17022,0.44492 -0.45652,0.79627 -0.85925,1.05417 0,0 -3.17718,2.03464 -3.17718,2.03464 -1.70416,-9.14138 -3.15817,-14.85521 -4.35315,-17.0766 -1.2016,-2.2625 -2.71697,-3.45967 -4.55059,-3.58265 0,0 -3.48846,8.71251 -3.48846,8.71251"
++ id="path7454"
++ d="m 147.58834,332.81239 c 0,0 -1.75619,37.90152 -1.75619,37.90152 0,0 -1.88054,-1.21673 -1.88054,-1.21673 0,0 1.76021,-37.74043 1.76021,-37.74043 0,0 1.87652,1.05564 1.87652,1.05564"
+ inkscape:connector-curvature="0" />
+ <path
+- id="path6893"
+- d="m 443.47158,496.16573 c 0,0 -15.92023,9.70195 -15.92023,9.70195 0.25261,4.3947 1.09424,7.53188 2.51855,9.41247 1.42789,1.83288 3.19316,2.07344 5.2907,0.7382 1.15976,-0.73828 2.37336,-1.93312 3.64044,-3.58163 1.2617,-1.64151 2.29067,-3.40363 3.08952,-5.2883 0.23317,-0.55259 0.43412,-0.88169 0.60291,-0.98752 0.19273,-0.12084 0.35959,-0.0498 0.50059,0.2133 0.14113,0.23564 0.20944,0.58439 0.20501,1.04631 -0.004,0.46186 -0.1049,0.97075 -0.30138,1.52697 -0.59063,1.72481 -1.63435,3.65941 -3.13604,5.80979 -1.49675,2.12595 -3.03903,3.70146 -4.62822,4.72308 -2.68176,1.72399 -4.92977,1.22514 -6.73564,-1.52638 -1.80812,-2.81062 -2.70176,-7.0448 -2.66946,-12.69552 0.0295,-5.15711 0.92218,-10.10229 2.67206,-14.81044 1.75462,-4.69402 3.89166,-7.75636 6.39992,-9.19327 2.55976,-1.46633 4.63179,-0.79081 6.22479,2.00024 1.58113,2.74246 2.3269,7.04454 2.24648,12.91075 m -1.50759,-2.55533 c -0.26805,-3.63428 -1.04266,-6.26807 -2.32893,-7.90085 -1.28159,-1.6495 -2.8345,-1.95112 -4.66
221,-0.89235 -1.83997,1.06596 -3.44162,3.19609 -4.79954,6.39411 -1.36305,3.21016 -2.22473,6.90224 -2.58104,11.06526 0,0 14.37172,-8.66617 14.37172,-8.66617"
++ id="path7456"
++ d="m 155.5998,356.97158 c 0,0 -0.24054,5.14593 -0.24054,5.14593 -0.40443,-1.61247 -0.78977,-2.82699 -1.15617,-3.64502 -0.35987,-0.7974 -0.78335,-1.34369 -1.27013,-1.63943 -0.73705,-0.44773 -1.33999,-0.091 -1.81,1.06776 -0.46924,1.15688 -0.70259,2.86881 -0.7006,5.13825 0.002,2.13082 0.22404,3.97436 0.6673,5.53232 0.4501,1.58081 1.03211,2.60051 1.7469,3.05745 0.68755,0.43955 1.39964,0.10214 2.13626,-1.01548 0,0 -0.24938,5.3343 -0.24938,5.3343 -0.75516,0.32879 -1.47328,0.27142 -2.15455,-0.1704 -1.21082,-0.78524 -2.19272,-2.47392 -2.94825,-5.0617 -0.74689,-2.57425 -1.12029,-5.52395 -1.12234,-8.85412 -0.002,-3.41998 0.39606,-6.0285 1.19618,-7.83178 0.80817,-1.82041 1.81762,-2.37095 3.0313,-1.64489 0.99666,0.59627 1.95471,2.12313 2.87402,4.58681"
+ inkscape:connector-curvature="0" />
+ <path
+- id="path6895"
+- d="m 455.58667,470.66722 c 0,0 -0.10498,8.56019 -0.10498,8.56019 1.93651,-5.08183 3.37081,-8.44336 4.30858,-10.1013 0.94661,-1.68612 1.80908,-2.7511 2.58784,-3.19777 0.84383,-0.48395 1.61379,-0.25336 2.31017,0.68823 0.70553,0.90558 1.05243,1.70098 1.04247,2.38832 -0.007,0.50226 -0.0857,0.96734 -0.23511,1.3954 -0.13804,0.39541 -0.31278,0.65513 -0.52432,0.77918 -0.11142,0.0654 -0.20559,0.0813 -0.28249,0.0476 -0.0766,-0.0601 -0.21729,-0.27954 -0.42229,-0.65871 -0.37824,-0.6994 -0.71083,-1.13744 -0.99754,-1.31325 -0.2871,-0.17598 -0.57132,-0.18255 -0.85261,-0.0195 -0.61996,0.35957 -1.37941,1.38224 -2.27917,3.07105 -0.89096,1.68702 -2.45801,5.46216 -4.70984,11.34948 0,0 -0.22596,18.42612 -0.22596,18.42612 0,0 6.33459,-4.01684 6.33459,-4.01684 0.34746,-0.22033 0.59161,-0.21895 0.7327,0.004 0.14133,0.1965 0.2085,0.54399 0.2016,1.04251 -0.007,0.47221 -0.0847,0.91205 -0.23427,1.31965 -0.14973,0.40781 -0.39805,0.72284 -0.74529,0.94521 0,0 -11.32013,7.24932 -11.32013,7.24932
-0.35123,0.22493 -0.6016,0.23885 -0.75084,0.0414 -0.14907,-0.22443 -0.22099,-0.57831 -0.21571,-1.0616 0.005,-0.45652 0.0796,-0.87735 0.22375,-1.26235 0.15613,-0.41912 0.41594,-0.74392 0.77913,-0.97432 0,0 3.54132,-2.24639 3.54132,-2.24639 0,0 0.33638,-28.17047 0.33638,-28.17047 0,0 -2.71509,1.57907 -2.71509,1.57907 -0.35236,0.20495 -0.60335,0.18908 -0.75268,-0.0481 -0.14946,-0.2372 -0.22135,-0.61416 -0.2156,-1.13086 0.005,-0.48951 0.0807,-0.93834 0.22572,-1.34628 0.15673,-0.41449 0.41745,-0.72656 0.78182,-0.93616 0,0 4.17785,-2.40283 4.17785,-2.40283"
++ id="path7458"
++ d="m 162.12519,369.14836 c 0,0 3.15558,14.14905 3.15558,14.14905 0,0 -2.36428,-1.52972 -2.36428,-1.52972 0,0 -2.06013,-9.88013 -2.06013,-9.88013 0,0 -2.73436,6.77803 -2.73436,6.77803 0,0 -2.55294,-1.65178 -2.55294,-1.65178 0,0 4.27078,-9.71399 4.27078,-9.71399 0,0 -2.54931,-11.45318 -2.54931,-11.45318 0,0 2.27488,1.36446 2.27488,1.36446 0,0 1.52855,7.34113 1.52855,7.34113 0,0 2.03981,-5.20084 2.03981,-5.20084 0,0 2.60043,1.55972 2.60043,1.55972 0,0 -3.60901,8.23725 -3.60901,8.23725"
+ inkscape:connector-curvature="0" />
+ <path
+- id="path6897"
+- d="m 473.30415,460.47729 c 0,0 -0.0804,4.97133 -0.0804,4.97133 0.98569,-2.87136 1.86574,-4.96674 2.64065,-6.28932 0.77288,-1.31909 1.63191,-2.24853 2.57593,-2.78936 1.01432,-0.58102 1.92593,-0.57975 2.7356,4.3e-4 0.57165,0.43409 1.07517,1.41355 1.51085,2.93619 0.44533,1.487 0.6504,3.16172 0.61612,5.02597 0,0 -0.37098,20.16552 -0.37098,20.16552 0,0 1.09632,-0.69519 1.09632,-0.69519 0.30795,-0.19527 0.52558,-0.18379 0.65312,0.0343 0.1279,0.19274 0.18732,0.5284 0.17832,1.00704 -0.009,0.4534 -0.0822,0.87365 -0.22092,1.26091 -0.13883,0.38745 -0.362,0.67967 -0.66977,0.87676 0,0 -3.48879,2.2342 -3.48879,2.2342 -0.32291,0.20678 -0.54961,0.20133 -0.67985,-0.0168 -0.13035,-0.21825 -0.19152,-0.55628 -0.18341,-1.01409 0.009,-0.48331 0.0832,-0.90811 0.22395,-1.27426 0.14113,-0.39138 0.37338,-0.68956 0.69648,-0.89444 0,0 1.09126,-0.69198 1.09126,-0.69198 0,0 0.35635,-19.67714 0.35635,-19.67714 0.0412,-2.27809 -0.26274,-4.00074 -0.9136,-5.16921 -0.65266,-1.19813 -1.55322,-1.46656
-2.70395,-0.79997 -0.87978,0.50971 -1.6529,1.39411 -2.31814,2.65394 -0.66627,1.2367 -1.63439,3.93929 -2.90635,8.11592 0,0 -0.33083,20.46711 -0.33083,20.46711 0,0 1.52554,-0.96736 1.52554,-0.96736 0.32,-0.20291 0.54652,-0.19417 0.67982,0.026 0.13361,0.19441 0.19632,0.5352 0.1882,1.02244 -0.008,0.46152 -0.0833,0.89021 -0.22665,1.28621 -0.14347,0.39619 -0.37497,0.69664 -0.69477,0.90144 0,0 -4.42215,2.83191 -4.42215,2.83191 -0.3258,0.20863 -0.55714,0.20298 -0.6938,-0.0174 -0.13675,-0.22051 -0.20159,-0.56416 -0.19444,-1.03091 0.008,-0.49277 0.0843,-0.92686 0.23029,-1.30217 0.1463,-0.40101 0.38259,-0.70494 0.70859,-0.91166 0,0 1.54286,-0.97835 1.54286,-0.97835 0,0 0.43113,-27.17649 0.43113,-27.17649 0,0 -1.15824,0.67362 -1.15824,0.67362 -0.32722,0.19033 -0.55954,0.16948 -0.69672,-0.0629 -0.13729,-0.23247 -0.20212,-0.59828 -0.19443,-1.09741 0.007,-0.47286 0.0845,-0.90805 0.23156,-1.30535 0.14701,-0.39707 0.38436,-0.6898 0.71179,-0.87815 0,0 2.52342,-1.45131 2.52342,-1.45131"
++ id="path7460"
++ d="m 169.92343,379.36559 c 0,0 -3.25195,12.16924 -3.25195,12.16924 0,0 -1.27259,-2.63135 -1.27259,-2.63135 0,0 2.90583,-12.86349 2.90583,-12.86349 0,0 1.61871,3.3256 1.61871,3.3256"
+ inkscape:connector-curvature="0" />
+ <path
+- id="path6899"
+- d="m 502.73274,460.0514 c 0,0 -12.58078,7.66685 -12.58078,7.66685 0.13943,3.95275 0.75486,6.81973 1.84191,8.60127 1.09127,1.74028 2.46782,2.07625 4.12588,1.02077 0.91736,-0.58398 1.88324,-1.57454 2.89733,-2.9694 1.01026,-1.38958 1.83995,-2.9037 2.49094,-4.54374 0.19007,-0.48101 0.352,-0.76339 0.48584,-0.84731 0.15283,-0.0958 0.2829,-0.0209 0.39022,0.22483 0.10778,0.2211 0.15695,0.53905 0.14755,0.95388 -0.009,0.41479 -0.0948,0.86546 -0.25619,1.35225 -0.48577,1.51058 -1.32969,3.17888 -2.53523,5.00941 -1.20067,1.80791 -2.42926,3.11745 -3.68662,3.92576 -2.11999,1.36285 -3.86995,0.76072 -5.24366,-1.82965 -1.37343,-2.64104 -2.01438,-6.49315 -1.91501,-11.55003 0.0906,-4.61389 0.85108,-8.9821 2.27681,-13.08506 1.42996,-4.0921 3.13808,-6.70212 5.11668,-7.83561 2.02129,-1.15786 3.63504,-0.42605 4.84758,2.17494 1.20485,2.55883 1.735,6.46775 1.59675,11.73084 m -1.15024,-2.39108 c -0.1636,-3.27931 -0.73716,-5.69144 -1.72424,-7.23625 -0.98254,-1.55853 -2.19418,-1.92464 -3.63745,
-1.08857 -1.45189,0.84113 -2.73048,2.64931 -3.83206,5.42777 -1.10528,2.78784 -1.82554,6.03803 -2.15785,9.74209 0,0 11.3516,-6.84504 11.3516,-6.84504"
++ id="path7462"
++ d="m 189.30148,375.04665 c 0,0 -1.03888,23.12027 -1.03888,23.12027 0,0 -2.24228,-1.45077 -2.24228,-1.45077 0,0 0.11673,-2.49125 0.11673,-2.49125 -0.94298,1.47092 -1.92196,1.87493 -2.93613,1.21763 -1.24207,-0.80501 -2.25567,-2.51652 -3.04325,-5.13028 -0.78468,-2.60409 -1.18382,-5.57547 -1.1996,-8.91911 -0.0182,-3.85301 0.40809,-6.73894 1.2807,-8.66498 0.88831,-1.92374 2.04012,-2.46472 3.45951,-1.61503 0.6727,0.40274 1.24847,1.02201 1.72666,1.85828 0.48587,0.84208 0.98515,2.09412 1.498,3.75781 0,0 0.13357,-3.0291 0.13357,-3.0291 0,0 2.24497,1.34653 2.24497,1.34653 m -2.66567,9.53882 c -0.0121,-2.10019 -0.26427,-3.95362 -0.75572,-5.55842 -0.49044,-1.61785 -1.11651,-2.65716 -1.8773,-3.11967 -0.82492,-0.50144 -1.51048,-0.11404 -2.058,1.15924 -0.54646,1.28764 -0.81341,3.10968 -0.80158,5.46904 0.0103,2.06152 0.24981,3.89591 0.71924,5.50498 0.47047,1.61265 1.07146,2.65376 1.80379,3.12165 0.81474,0.52057 1.51683,0.14096 2.10513,-1.14196 0.58925,-1.31904 0.87768,-3.13164 0.8
6444,-5.43486"
+ inkscape:connector-curvature="0" />
+ <path
+- id="path6901"
+- d="m 514.91047,422.62215 c 0,0 -1.06434,42.27288 -1.06434,42.27288 0,0 4.45362,-2.8241 4.45362,-2.8241 0.2761,-0.17507 0.46813,-0.15759 0.57629,0.0523 0.10868,0.18619 0.15712,0.50328 0.14534,0.95133 -0.0112,0.42443 -0.0782,0.81493 -0.20113,1.17164 -0.12299,0.35687 -0.32235,0.62363 -0.59831,0.80035 0,0 -10.15763,6.50487 -10.15763,6.50487 -0.27917,0.17878 -0.476,0.16246 -0.5903,-0.0494 -0.11437,-0.21191 -0.16642,-0.53506 -0.15609,-0.96944 0.0109,-0.45857 0.0801,-0.85922 0.20776,-1.20182 0.12814,-0.36656 0.33197,-0.63844 0.61129,-0.81556 0,0 4.56188,-2.89274 4.56188,-2.89274 0,0 0.97884,-39.26779 0.97884,-39.26779 0,0 -3.35907,1.85407 -3.35907,1.85407 -0.27977,0.15447 -0.48159,0.1208 -0.60529,-0.10124 -0.11445,-0.22726 -0.16609,-0.57399 -0.15489,-1.04015 0.0106,-0.44163 0.0802,-0.843 0.20889,-1.204 0.12859,-0.36073 0.33761,-0.62003 0.62686,-0.77784 0,0 4.51628,-2.46343 4.51628,-2.46343"
++ id="path7464"
++ d="m 200.98417,382.05386 c 0,0 -0.60701,13.76386 -0.60701,13.76386 -0.0478,1.17529 -0.11093,2.18594 -0.18949,3.03183 -0.0786,0.8458 -0.16535,1.53989 -0.26032,2.08222 -0.1903,1.03239 -0.51634,1.84794 -0.97764,2.4463 -0.78121,1.00906 -1.81569,1.09476 -3.10016,0.26227 -1.21534,-0.78769 -2.18714,-2.17556 -2.91798,-4.16161 -0.72858,-1.99666 -1.10026,-4.27781 -1.1168,-6.84699 -0.003,-0.39117 10e-4,-0.84599 0.0118,-1.36445 0.0173,-0.51405 0.0409,-1.10033 0.0709,-1.75873 0,0 0.55615,-12.57127 0.55615,-12.57127 0,0 2.29365,1.37572 2.29365,1.37572 0,0 -0.58535,13.12163 -0.58535,13.12163 -0.0239,0.56331 -0.0413,1.06266 -0.0521,1.49808 -0.011,0.4184 -0.0156,0.77281 -0.0136,1.06329 0.0172,2.54701 0.63463,4.21014 1.85674,4.9909 0.66588,0.42543 1.15463,0.31796 1.46518,-0.3237 0.31086,-0.6423 0.51161,-1.98957 0.60201,-4.04108 0,0 0.62456,-13.97146 0.62456,-13.97146 0,0 2.33946,1.40319 2.33946,1.40319"
+ inkscape:connector-curvature="0" />
+- </g>
+- <g
+- id="text3655"
+- style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+- transform="matrix(0.67123869,0,0,0.67123869,53.68199,126.56876)">
+ <path
+- id="path3662"
+- d="m 132.8684,367.78607 c 0,0 0.71572,-54.35962 0.71572,-54.35962 0,0 2.66242,1.51122 2.66242,1.51122 0,0 -0.71153,54.62187 -0.71153,54.62187 0,0 -2.66661,-1.77347 -2.66661,-1.77347"
++ id="path7466"
++ d="m 206.63389,390.78613 c 0,0 -0.82079,18.73618 -0.82079,18.73618 0,0 -2.40115,-1.55357 -2.40115,-1.55357 0,0 0.82954,-18.64209 0.82954,-18.64209 0,0 -1.55408,-0.94806 -1.55408,-0.94806 0,0 0.22678,-5.16711 0.22678,-5.16711 0,0 1.55445,0.93235 1.55445,0.93235 0,0 0.47336,-10.6332 0.47336,-10.6332 0.12045,-2.83044 0.43153,-4.7841 0.93387,-5.86279 0.50314,-1.08033 1.23473,-1.3513 2.1968,-0.81014 0.58479,0.32902 1.27387,1.15978 2.06817,2.49496 0,0 -0.21954,4.94262 -0.21954,4.94262 -0.4636,-1.13664 -0.88579,-1.81328 -1.26683,-2.03137 -0.43899,-0.25118 -0.76101,-0.0798 -0.96652,0.51359 -0.19081,0.60146 -0.32899,1.83118 -0.41464,3.6896 0,0 -0.40076,9.13858 -0.40076,9.13858 0,0 2.19474,1.3164 2.19474,1.3164 0,0 -0.22825,5.2293 -0.22825,5.2293 0,0 -2.20515,-1.34525 -2.20515,-1.34525"
+ inkscape:connector-curvature="0" />
+ <path
+- id="path3664"
+- d="m 137.92667,371.15014 c 0,0 6.14809,-16.99741 6.14809,-16.99741 0,0 -5.19986,-22.51479 -5.19986,-22.51479 0,0 3.39897,2.02031 3.39897,2.02031 0,0 2.36954,10.8944 2.36954,10.8944 0.44814,2.07993 0.80843,3.81608 1.08051,5.20679 0.47284,-1.39022 0.90795,-2.61465 1.30519,-3.67276 0,0 2.89882,-7.87895 2.89882,-7.87895 0,0 3.37501,2.00607 3.37501,2.00607 0,0 -5.97372,15.60005 -5.97372,15.60005 0,0 5.92178,25.52797 5.92178,25.52797 0,0 -3.4783,-2.3133 -3.4783,-2.3133 0,0 -3.23409,-14.8189 -3.23409,-14.8189 0,0 -0.8528,-3.95585 -0.8528,-3.95585 0,0 -4.46772,13.08538 -4.46772,13.08538 0,0 -3.29142,-2.18901 -3.29142,-2.18901"
++ id="path7468"
++ d="m 217.52646,394.74253 c 0,0 -1.38661,2.48014 -1.38661,2.48014 -0.67725,-1.8109 -1.29703,-2.88559 -1.8599,-3.22743 -0.38208,-0.23202 -0.69765,-0.16825 -0.94697,0.19084 -0.24182,0.34568 -0.3592,0.89013 -0.3523,1.63368 0.007,0.72604 0.11693,1.40131 0.33073,2.02617 0.21414,0.64318 0.65861,1.60559 1.33464,2.88942 0.96807,1.85739 1.62118,3.41663 1.95681,4.67361 0.3587,1.2553 0.54644,2.71574 0.56281,4.38041 0.0236,2.39986 -0.31049,4.09968 -1.00105,5.09661 -0.70429,0.96703 -1.62822,1.07848 -2.76933,0.33845 -1.54613,-1.0027 -2.83506,-3.48418 -3.86988,-7.43484 0,0 1.58533,-1.65255 1.58533,-1.65255 0.67846,2.3152 1.39501,3.71619 2.14973,4.19878 0.42688,0.27296 0.76562,0.22407 1.01586,-0.14723 0.25795,-0.3668 0.38295,-0.97802 0.37484,-1.83329 -0.007,-0.74819 -0.12185,-1.42257 -0.34408,-2.02287 -0.10729,-0.29756 -0.29412,-0.7335 -0.56031,-1.30745 -0.26591,-0.57331 -0.6257,-1.28445 -1.07896,-2.13273 -0.79912,-1.53842 -1.35435,-2.89536 -1.66731,-4.07336 -0.31299,-1.22922 -0.47
603,-2.59245 -0.48943,-4.09057 -0.0202,-2.25482 0.31059,-3.91075 0.99349,-4.97061 0.68445,-1.0622 1.56745,-1.27103 2.65118,-0.62272 1.20102,0.71853 2.32478,2.58513 3.37071,5.60754"
+ inkscape:connector-curvature="0" />
+ <path
+- id="path3666"
+- d="m 166.82131,374.91047 c 0,0 2.93572,2.79373 2.93572,2.79373 -0.37761,4.62343 -1.24922,7.86985 -2.61073,9.73548 -1.34456,1.83887 -2.96947,2.11901 -4.86973,0.85217 -2.3637,-1.5758 -4.23108,-4.67579 -5.61088,-9.29124 -1.36166,-4.61024 -1.99867,-10.32878 -1.91636,-17.16995 0.0532,-4.42099 0.40174,-8.10179 1.04648,-11.0477 0.64585,-2.95094 1.59765,-4.88106 2.85839,-5.78928 1.27692,-0.93132 2.65738,-0.95975 4.14303,-0.0791 1.88674,1.11849 3.42575,3.18947 4.61182,6.21733 1.19146,3.01472 1.93755,6.74983 2.23475,11.20086 0,0 -2.92082,-0.72724 -2.92082,-0.72724 -0.24353,-2.97398 -0.70922,-5.3811 -1.39599,-7.22057 -0.67412,-1.8282 -1.50208,-3.03683 -2.48268,-3.62779 -1.47568,-0.88924 -2.68418,-0.33926 -3.629,1.6424 -0.94184,1.95024 -1.44412,5.64763 -1.50886,11.09862 -0.0657,5.53171 0.32577,9.83698 1.17652,12.92095 0.85352,3.09406 1.99526,5.11378 3.42833,6.05501 1.15583,0.75914 2.13411,0.54393 2.93293,-0.65009 0.80075,-1.19694 1.32691,-3.50191 1.57708,-6.91359"
++ id="path7470"
++ d="m 230.10477,380.45134 c 0,0 -10.56007,50.00187 -10.56007,50.00187 0,0 -1.7864,-3.10109 -1.7864,-3.10109 0,0 10.48761,-49.78707 10.48761,-49.78707 0,0 1.85886,2.88629 1.85886,2.88629"
+ inkscape:connector-curvature="0" />
+ <path
+- id="path3668"
+- d="m 172.97661,394.46064 c 0,0 0.0905,-8.17492 0.0905,-8.17492 0,0 3.48861,2.27245 3.48861,2.27245 0,0 -0.0895,8.22327 -0.0895,8.22327 -0.0329,3.02363 -0.28765,5.30542 -0.76375,6.84314 -0.47577,1.56243 -1.21303,2.51325 -2.20987,2.85324 0,0 -0.81311,-3.65386 -0.81311,-3.65386 0.65091,-0.22881 1.13685,-0.89297 1.45702,-1.99285 0.32015,-1.07418 0.51068,-2.8142 0.57137,-5.21909 0,0 -1.73124,-1.15138 -1.73124,-1.15138"
++ id="path7472"
++ d="m 235.60558,382.32627 c 0,0 -0.96703,22.30206 -0.96703,22.30206 0.68945,-0.7749 1.29198,-1.21024 1.8071,-1.30486 0.54025,-0.0986 1.12911,0.0426 1.76693,0.4244 1.5763,0.94367 2.90043,2.95835 3.96916,6.05018 1.07316,3.08672 1.63707,6.54247 1.68823,10.35998 0.0562,4.19815 -0.49112,7.31628 -1.63901,9.3455 -1.15172,2.0543 -2.57758,2.52687 -4.27282,1.42815 -1.57073,-1.01801 -2.95455,-3.2779 -4.15367,-6.7709 0,0 -0.15177,3.37409 -0.15177,3.37409 0,0 -2.66427,-1.72381 -2.66427,-1.72381 0,0 1.94788,-44.98639 1.94788,-44.98639 0,0 2.66927,1.5016 2.66927,1.5016 m 5.4938,36.24781 c -0.0307,-2.35775 -0.3661,-4.47468 -1.00488,-6.34826 -0.63711,-1.86861 -1.44772,-3.10059 -2.43047,-3.69802 -1.06071,-0.64478 -1.92383,-0.28834 -2.59137,1.06538 -0.66665,1.31409 -0.98282,3.34554 -0.94953,6.09789 0.028,2.31062 0.34566,4.35609 0.9543,6.13874 0.61062,1.82429 1.3932,3.04273 2.34903,3.65337 1.05772,0.67576 1.9389,0.3393 2.64164,-1.01349 0.72078,-1.34522 1.06493,-3.31161 1.03128,-5.89561
"
+ inkscape:connector-curvature="0" />
+ <path
+- id="path3670"
+- d="m 204.77784,410.06983 c -1.27022,1.55778 -2.48568,2.44071 -3.64678,2.65261 -1.1447,0.21934 -2.36657,-0.10529 -3.66459,-0.97064 -2.13127,-1.42084 -3.74779,-3.67649 -4.85717,-6.76514 -1.10483,-3.1041 -1.63719,-6.47275 -1.60031,-10.11391 0.0216,-2.13477 0.25062,-3.94364 0.6874,-5.42825 0.44957,-1.50612 1.02226,-2.57799 1.71876,-3.21526 0.71002,-0.63098 1.50367,-0.94896 2.38159,-0.95288 0.64759,0.017 1.6255,0.25355 2.93681,0.71095 2.68835,0.95136 4.68535,1.32634 5.97773,1.11825 0.0222,-1.02578 0.0346,-1.67832 0.0372,-1.95765 0.0289,-3.07178 -0.26872,-5.42898 -0.8919,-7.06976 -0.84101,-2.21749 -2.10184,-3.83086 -3.77761,-4.84085 -1.55688,-0.93829 -2.71034,-1.00947 -3.46489,-0.21839 -0.74047,0.76925 -1.30109,2.5996 -1.68287,5.49061 0,0 -3.16708,-2.94172 -3.16708,-2.94172 0.31864,-2.91383 0.81734,-5.11515 1.49696,-6.60484 0.6812,-1.51989 1.65517,-2.41342 2.92464,-2.67921 1.27473,-0.29431 2.75127,0.0544 4.43259,1.05105 1.67794,0.99472 3.04366,2.25211 4.09313,3.7721 1.05
306,1.52531 1.82526,3.12483 2.31452,4.79681 0.49033,1.64692 0.82696,3.5698 1.00937,5.76792 0.10151,1.36012 0.13673,3.72492 0.1056,7.09479 0,0 -0.0935,10.11679 -0.0935,10.11679 -0.0653,7.05995 -0.0372,11.58025 0.0844,13.55797 0.13448,1.95911 0.40887,3.94126 0.8236,5.94773 0,0 -3.55349,-2.3633 -3.55349,-2.3633 -0.33594,-1.80359 -0.5439,-3.78856 -0.62416,-5.9558 m -0.12224,-17.05427 c -1.23154,0.34731 -3.06331,0.14247 -5.48491,-0.60924 -1.36335,-0.41924 -2.32581,-0.53009 -2.89103,-0.33412 -0.56424,0.19568 -1.00286,0.73389 -1.31639,1.61435 -0.31298,0.85222 -0.4758,1.92485 -0.48867,3.21853 -0.0197,1.98221 0.29058,3.84732 0.93197,5.59804 0.65498,1.76261 1.62279,3.0659 2.90625,3.90947 1.27641,0.83893 2.42209,0.96176 3.43544,0.36456 1.01669,-0.62694 1.7731,-1.89094 2.26739,-3.79238 0.3778,-1.47261 0.58252,-3.87376 0.61388,-7.20158 0,0 0.0261,-2.76763 0.0261,-2.76763"
++ id="path7474"
++ d="m 250.36366,417.46334 c 0,0 -0.86865,20.3217 -0.86865,20.3217 0,0 -2.82008,-1.82462 -2.82008,-1.82462 0,0 0.86643,-20.21881 0.86643,-20.21881 0,0 -1.58388,-0.96624 -1.58388,-0.96624 0,0 0.23648,-5.60491 0.23648,-5.60491 0,0 1.5842,0.9502 1.5842,0.9502 0,0 0.51345,-11.96899 0.51345,-11.96899 0,0 2.8242,1.63235 2.8242,1.63235 0,0 -0.51476,12.02979 -0.51476,12.02979 0,0 2.631,1.57806 2.631,1.57806 0,0 -0.23791,5.67619 -0.23791,5.67619 0,0 -2.63048,-1.60472 -2.63048,-1.60472"
+ inkscape:connector-curvature="0" />
+ <path
+- id="path3672"
+- d="m 226.91498,430.33317 c 0,0 0.056,-6.79135 0.056,-6.79135 -1.69979,4.12585 -3.95958,5.23997 -6.76691,3.36841 -1.23125,-0.82083 -2.37518,-2.1017 -3.4326,-3.84047 -1.04088,-1.72429 -1.81148,-3.52427 -2.31374,-5.40182 -0.48827,-1.89422 -0.82487,-4.02954 -1.01034,-6.40682 -0.12775,-1.59592 -0.17698,-4.02489 -0.14772,-7.28678 0,0 0.25063,-27.95019 0.25063,-27.95019 0,0 3.47921,2.068 3.47921,2.068 0,0 -0.22098,25.15376 -0.22098,25.15376 -0.0353,4.02044 0.0122,6.77614 0.14272,8.26649 0.20297,2.17003 0.65699,4.07445 1.36316,5.71471 0.70804,1.61546 1.59303,2.77268 2.65633,3.47053 1.06676,0.70016 2.07587,0.76801 3.02668,0.20066 0.95364,-0.59783 1.63329,-1.79901 2.03728,-3.60358 0.41794,-1.82668 0.64337,-4.71043 0.67595,-8.64861 0,0 0.20406,-24.67831 0.20406,-24.67831 0,0 3.62583,2.15515 3.62583,2.15515 0,0 -0.37466,46.37229 -0.37466,46.37229 0,0 -3.25092,-2.16207 -3.25092,-2.16207"
++ id="path7476"
++ d="m 258.21202,416.37883 c 0,0 -0.096,2.26144 -0.096,2.26144 0.95454,-1.4502 1.93663,-1.87534 2.94687,-1.27069 0.8891,0.53219 1.71186,1.72674 2.46789,3.5865 0,0 -1.80434,4.16015 -1.80434,4.16015 -0.55854,-1.34027 -1.10799,-2.17406 -1.64849,-2.50309 -0.37157,-0.22615 -0.69596,-0.26088 -0.97335,-0.10449 -0.27744,0.13698 -0.51645,0.48836 -0.7171,1.05404 -0.19204,0.55148 -0.35012,1.32418 -0.47428,2.31814 -0.11535,0.99924 -0.20109,2.22694 -0.25723,3.68339 0,0 -0.55745,13.1404 -0.55745,13.1404 0,0 -2.89641,-1.87402 -2.89641,-1.87402 0,0 1.11066,-26.19071 1.11066,-26.19071 0,0 2.89923,1.73894 2.89923,1.73894"
+ inkscape:connector-curvature="0" />
+ <path
+- id="path3674"
+- d="m 236.84818,436.9394 c 0,0 0.31458,-40.68866 0.31458,-40.68866 0,0 -3.27066,-1.97443 -3.27066,-1.97443 0,0 0.0485,-6.13244 0.0485,-6.13244 0,0 3.26986,1.94357 3.26986,1.94357 0,0 0.0384,-4.9718 0.0384,-4.9718 0.0242,-3.13718 0.17313,-5.39171 0.44675,-6.76504 0.37445,-1.8466 1.0157,-3.14492 1.92523,-3.8952 0.92597,-0.77365 2.21207,-0.69593 3.86256,0.23811 1.06731,0.60412 2.24898,1.54093 3.54628,2.81271 0,0 -0.62418,6.66996 -0.62418,6.66996 -0.78934,-0.75385 -1.53564,-1.33338 -2.23919,-1.73932 -1.15067,-0.66373 -1.96603,-0.6152 -2.44858,0.14318 -0.48194,0.75751 -0.73333,2.55103 -0.75467,5.38196 0,0 -0.0327,4.33654 -0.0327,4.33654 0,0 4.35398,2.58795 4.35398,2.58795 0,0 -0.0456,6.23957 -0.0456,6.23957 0,0 -4.35509,-2.62908 -4.35509,-2.62908 0,0 -0.30843,40.92114 -0.30843,40.92114 0,0 -3.72704,-2.47872 -3.72704,-2.47872"
++ id="path7478"
++ d="m 268.68987,428.64319 c 0,0 -0.86895,20.99894 -0.86895,20.99894 0,0 -3.0058,-1.94479 -3.0058,-1.94479 0,0 0.88041,-20.88084 0.88041,-20.88084 0,0 -1.94335,-1.18553 -1.94335,-1.18553 0,0 0.24005,-5.7852 0.24005,-5.7852 0,0 1.94372,1.16583 1.94372,1.16583 0,0 0.50232,-11.90806 0.50232,-11.90806 0.12679,-3.17002 0.49833,-5.34145 1.11549,-6.5165 0.61826,-1.17706 1.52819,-1.42867 2.73266,-0.75115 0.7324,0.41206 1.59932,1.39576 2.60215,2.95457 0,0 -0.233,5.54102 -0.233,5.54102 -0.58832,-1.31228 -1.12097,-2.10411 -1.59836,-2.37735 -0.54989,-0.31462 -0.95023,-0.14571 -1.2017,0.50598 -0.23303,0.66182 -0.39522,2.0335 -0.48667,4.11558 0,0 -0.42429,10.24046 -0.42429,10.24046 0,0 2.74973,1.64927 2.74973,1.64927 0,0 -0.24152,5.86326 -0.24152,5.86326 0,0 -2.76289,-1.68549 -2.76289,-1.68549"
+ inkscape:connector-curvature="0" />
+ <path
+- id="path3676"
+- d="m 246.46465,429.05307 c 0,0 3.81968,1.1922 3.81968,1.1922 0.19276,3.35392 0.7721,6.20708 1.74012,8.56243 0.98544,2.37207 2.3721,4.14723 4.16469,5.32459 1.81668,1.19318 3.17579,1.3205 4.07171,0.37548 0.89826,-0.97786 1.35491,-2.50699 1.36833,-4.58524 0.012,-1.86394 -0.37148,-3.58214 -1.14903,-5.15206 -0.54183,-1.08052 -1.89103,-2.87259 -4.03793,-5.36553 -2.87017,-3.33767 -4.84719,-5.88768 -5.94667,-7.66691 -1.08128,-1.7942 -1.8993,-3.82568 -2.45597,-6.09572 -0.54119,-2.28674 -0.80303,-4.59245 -0.78627,-6.91984 0.0153,-2.11796 0.25669,-3.93345 0.72469,-5.44816 0.48302,-1.53765 1.12853,-2.66509 1.93745,-3.38209 0.60808,-0.56866 1.4316,-0.86027 2.47213,-0.87408 1.05827,-0.0353 2.19002,0.30354 3.396,1.01839 1.82428,1.08147 3.42677,2.57943 4.80442,4.49544 1.39816,1.9329 2.42778,4.04798 3.08549,6.34283 0.65928,2.26923 1.10658,5.05898 1.34104,8.36831 0,0 -3.93498,-1.30965 -3.93498,-1.30965 -0.1613,-2.60573 -0.66572,-4.86818 -1.51169,-6.78511 -0.82908,-1.90296 -2.01211,-
3.31622 -3.54556,-4.24034 -1.80214,-1.08596 -3.08681,-1.24118 -3.85989,-0.47117 -0.77146,0.76845 -1.16235,1.97686 -1.17391,3.62665 -0.007,1.05006 0.14407,2.09235 0.45452,3.12753 0.31055,1.06635 0.80269,2.09487 1.47721,3.08626 0.38829,0.54294 1.53561,1.95069 3.44979,4.23261 2.78949,3.29205 4.7444,5.79841 5.85003,7.50277 1.12436,1.68881 2.00304,3.68747 2.63416,5.99522 0.63237,2.3125 0.94024,4.88426 0.92265,7.71231 -0.0173,2.76736 -0.43134,5.12235 -1.24099,7.06139 -0.79291,1.91427 -1.93089,3.05649 -3.41056,3.42835 -1.47342,0.33983 -3.12755,-0.1039 -4.95957,-1.32524 -3.01245,-2.00831 -5.28496,-4.82452 -6.83171,-8.44857 -1.52498,-3.59708 -2.47979,-8.05614 -2.86938,-13.38305"
++ id="path7480"
++ d="m 282.34177,433.95542 c 0,0 -1.71638,2.6839 -1.71638,2.6839 -0.86347,-2.09418 -1.64851,-3.35394 -2.35592,-3.78356 -0.48009,-0.29154 -0.8744,-0.24473 -1.1833,0.13981 -0.29959,0.37 -0.44186,0.97364 -0.42698,1.8113 0.0145,0.81794 0.15802,1.58703 0.43072,2.30771 0.27333,0.74144 0.83759,1.86101 1.69454,3.3616 1.22784,2.17108 2.05909,3.98138 2.49024,5.42552 0.46013,1.4444 0.70781,3.10618 0.74244,4.98411 0.0499,2.7075 -0.35443,4.59578 -1.21137,5.66132 -0.87414,1.03039 -2.03028,1.07769 -3.4649,0.14731 -1.94263,-1.25984 -3.57478,-4.16196 -4.90072,-8.69458 0,0 1.96723,-1.72943 1.96723,-1.72943 0.86759,2.66246 1.77547,4.29951 2.72371,4.90584 0.53649,0.34304 0.96004,0.31621 1.27016,-0.0812 0.31984,-0.39178 0.47119,-1.07004 0.45383,-2.03432 -0.0152,-0.84353 -0.16454,-1.61277 -0.44778,-2.30734 -0.1368,-0.34403 -0.37432,-0.85044 -0.71229,-1.51877 -0.33757,-0.66749 -0.7937,-1.49777 -1.36782,-2.48995 -1.01224,-1.79695 -1.71772,-3.36927 -2.11873,-4.7203 -0.4014,-1.40844 -0.6165,-
2.95548 -0.64576,-4.64225 -0.044,-2.5386 0.35547,-4.37575 1.20006,-5.51489 0.84671,-1.14196 1.94916,-1.30825 3.31041,-0.49392 1.50935,0.90299 2.93246,3.09378 4.26861,6.58212"
+ inkscape:connector-curvature="0" />
++ </g>
++ <g
++ transform="translate(1.2096774,-17.209677)"
++ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Courier New;-inkscape-font-specification:Sans"
++ id="text6884">
+ <path
+- id="path3678"
+- d="m 267.46509,458.46409 c 0,0 10.16276,-64.44628 10.16276,-64.44628 0,0 3.35985,1.90154 3.35985,1.90154 0,0 -10.22211,64.7453 -10.22211,64.7453 0,0 -3.3005,-2.20056 -3.3005,-2.20056"
+- inkscape:connector-curvature="0" />
++ inkscape:connector-curvature="0"
++ d="m 405.68539,517.2315 c 0,0 -0.0193,16.2617 -0.0193,16.2617 0,0 3.17768,-2.015 3.17768,-2.015 0.42104,-0.26699 0.71912,-0.28408 0.89461,-0.0515 0.17538,0.20367 0.26245,0.57777 0.26128,1.12234 -0.001,0.51582 -0.0901,1.00179 -0.26671,1.45807 -0.1768,0.45653 -0.47536,0.81943 -0.89606,1.08884 0,0 -7.2615,4.65021 -7.2615,4.65021 -0.4181,0.26775 -0.71809,0.2856 -0.89962,0.053 -0.18168,-0.23276 -0.27256,-0.61101 -0.27256,-1.13472 0,-0.55292 0.0909,-1.0473 0.27272,-1.48298 0.18171,-0.4645 0.48198,-0.82951 0.90042,-1.09484 0,0 2.35294,-1.49203 2.35294,-1.49203 0,0 0.0349,-43.95921 0.0349,-43.95921 0,0 -2.3762,1.32682 -2.3762,1.32682 -0.4226,0.23601 -0.72583,0.24206 -0.90932,0.0178 -0.18363,-0.25407 -0.2755,-0.66358 -0.2755,-1.22844 0,-0.56489 0.0919,-1.06185 0.27567,-1.49066 0.18367,-0.45823 0.48718,-0.80413 0.91014,-1.03765 0,0 7.3447,-4.05398 7.3447,-4.05398 0.42546,-0.23477 0.72666,-0.22523 0.90398,0.0279 0.17721,0.22388 0.26518,0.61389 0.26399,1.17006 -0.001,0.55615 -
0.0911,1.05925 -0.26963,1.50941 -0.1786,0.42125 -0.48025,0.7505 -0.90536,0.98782 0,0 -3.20861,1.79162 -3.20861,1.79162 0,0 -0.027,22.7262 -0.027,22.7262 0,0 11.85347,-29.32986 11.85347,-29.32986 0,0 -1.84356,1.0294 -1.84356,1.0294 -0.4158,0.23222 -0.71071,0.23758 -0.8844,0.0157 -0.17376,-0.25093 -0.25981,-0.65252 -0.25806,-1.20465 0.002,-0.55216 0.0906,-1.03662 0.2666,-1.4532 0.17596,-0.44532 0.4722,-0.78288 0.88832,-1.01263 0,0 4.9265,-2.71923 4.9265,-2.71923 0.39516,-0.21804 0.67722,-0.2015 0.84652,0.049 0.16926,0.22176 0.25255,0.60547 0.24997,1.15114 -0.003,0.54567 -0.0901,1.03822 -0.26231,1.47778 -0.17228,0.41121 -0.45565,0.72699 -0.8505,0.94742 0,0 -0.67254,0.37553 -0.67254,0.37553 0,0 -9.34163,23.22298 -9.34163,23.22298 1.39299,0.391 2.54214,1.22247 3.45037,2.49219 0.90456,1.26471 1.76961,3.30318 2.59512,6.10986 0.47018,1.56163 1.32542,5.36141 2.55962,11.3683 0,0 2.05678,-1.30423 2.05678,-1.30423 0.40304,-0.25557 0.68792,-0.26799 0.85497,-0.0375 0.16702,0.20219 0.24918
,0.57016 0.24656,1.10393 -0.003,0.5056 -0.0889,0.98066 -0.25892,1.42533 -0.17022,0.44492 -0.45652,0.79627 -0.85925,1.05417 0,0 -3.17718,2.03464 -3.17718,2.03464 -1.70416,-9.14138 -3.15817,-14.85521 -4.35315,-17.0766 -1.2016,-2.2625 -2.71697,-3.45967 -4.55059,-3.58265 0,0 -3.48846,8.71251 -3.48846,8.71251"
++ id="path6891" />
+ <path
+- id="path3680"
+- d="m 287.73074,470.77961 c 0,0 -3.98413,-2.64971 -3.98413,-2.64971 0,0 0.36657,-69.26132 0.36657,-69.26132 0,0 4.28286,2.431 4.28286,2.431 0,0 -0.12574,24.80354 -0.12574,24.80354 1.84841,-3.43804 4.20286,-4.3171 7.07399,-2.61515 1.5995,0.94822 3.11282,2.48894 4.53901,4.62548 1.44866,2.12297 2.63509,4.62828 3.55675,7.51533 0.94101,2.87289 1.67339,6.11301 2.19582,9.71903 0.52331,3.61258 0.77764,7.29172 0.76223,11.03361 -0.0367,8.8888 -1.19889,15.02735 -3.47692,18.39523 -2.26525,3.34891 -4.9514,3.97742 -8.04813,1.91293 -3.05429,-2.0362 -5.42013,-6.12345 -7.11007,-12.2502 0,0 -0.0322,6.34023 -0.0322,6.34023 m 0.0826,-25.6991 c -0.0308,6.05748 0.36263,10.70405 1.18198,13.94323 1.3439,5.31484 3.18967,8.7503 5.54452,10.29694 1.92772,1.26611 3.60983,0.72174 5.04245,-1.64447 1.43781,-2.407 2.17299,-6.89882 2.20167,-13.46572 0.0293,-6.72399 -0.63702,-12.10528 -1.99483,-16.13506 -1.33586,-4.00333 -2.96003,-6.57643 -4.86901,-7.72687 -1.91517,-1.15407 -3.57055,-0.50907 -4.97003
,1.92406 -1.39445,2.39298 -2.10547,6.6592 -2.13675,12.80789"
+- inkscape:connector-curvature="0" />
++ inkscape:connector-curvature="0"
++ d="m 443.47158,496.16573 c 0,0 -15.92023,9.70195 -15.92023,9.70195 0.25261,4.3947 1.09424,7.53188 2.51855,9.41247 1.42789,1.83288 3.19316,2.07344 5.2907,0.7382 1.15976,-0.73828 2.37336,-1.93312 3.64044,-3.58163 1.2617,-1.64151 2.29067,-3.40363 3.08952,-5.2883 0.23317,-0.55259 0.43412,-0.88169 0.60291,-0.98752 0.19273,-0.12084 0.35959,-0.0498 0.50059,0.2133 0.14113,0.23564 0.20944,0.58439 0.20501,1.04631 -0.004,0.46186 -0.1049,0.97075 -0.30138,1.52697 -0.59063,1.72481 -1.63435,3.65941 -3.13604,5.80979 -1.49675,2.12595 -3.03903,3.70146 -4.62822,4.72308 -2.68176,1.72399 -4.92977,1.22514 -6.73564,-1.52638 -1.80812,-2.81062 -2.70176,-7.0448 -2.66946,-12.69552 0.0295,-5.15711 0.92218,-10.10229 2.67206,-14.81044 1.75462,-4.69402 3.89166,-7.75636 6.39992,-9.19327 2.55976,-1.46633 4.63179,-0.79081 6.22479,2.00024 1.58113,2.74246 2.3269,7.04454 2.24648,12.91075 m -1.50759,-2.55533 c -0.26805,-3.63428 -1.04266,-6.26807 -2.32893,-7.90085 -1.28159,-1.6495 -2.8345,-1.95112 -4.66
221,-0.89235 -1.83997,1.06596 -3.44162,3.19609 -4.79954,6.39411 -1.36305,3.21016 -2.22473,6.90224 -2.58104,11.06526 0,0 14.37172,-8.66617 14.37172,-8.66617"
++ id="path6893" />
+ <path
+- id="path3682"
+- d="m 322.12463,485.58433 c 0,0 0.65936,8.40758 0.65936,8.40758 -1.33673,-0.35442 -2.52804,-0.88064 -3.57528,-1.5781 -1.70425,-1.13503 -3.01872,-2.52454 -3.94739,-4.16917 -0.92628,-1.6404 -1.57435,-3.40805 -1.9457,-5.30454 -0.37079,-1.92713 -0.54592,-5.5546 -0.52573,-10.88197 0,0 0.114,-30.08386 0.114,-30.08386 0,0 -3.36894,-2.03377 -3.36894,-2.03377 0,0 0.0272,-6.84805 0.0272,-6.84805 0,0 3.36786,2.00182 3.36786,2.00182 0,0 0.0489,-12.91135 0.0489,-12.91135 0,0 4.63253,-2.66881 4.63253,-2.66881 0,0 -0.065,18.3241 -0.065,18.3241 0,0 4.72675,2.80952 4.72675,2.80952 0,0 -0.023,6.96866 -0.023,6.96866 0,0 -4.72829,-2.85438 -4.72829,-2.85438 0,0 -0.10923,30.77205 -0.10923,30.77205 -0.009,2.54809 0.0632,4.23726 0.21665,5.06728 0.17091,0.8418 0.43796,1.59732 0.80137,2.26677 0.38115,0.6815 0.92028,1.25067 1.61806,1.70755 0.52419,0.34326 1.21588,0.67931 2.07599,1.00867"
+- inkscape:connector-curvature="0" />
++ inkscape:connector-curvature="0"
++ d="m 455.58667,470.66722 c 0,0 -0.10498,8.56019 -0.10498,8.56019 1.93651,-5.08183 3.37081,-8.44336 4.30858,-10.1013 0.94661,-1.68612 1.80908,-2.7511 2.58784,-3.19777 0.84383,-0.48395 1.61379,-0.25336 2.31017,0.68823 0.70553,0.90558 1.05243,1.70098 1.04247,2.38832 -0.007,0.50226 -0.0857,0.96734 -0.23511,1.3954 -0.13804,0.39541 -0.31278,0.65513 -0.52432,0.77918 -0.11142,0.0654 -0.20559,0.0813 -0.28249,0.0476 -0.0766,-0.0601 -0.21729,-0.27954 -0.42229,-0.65871 -0.37824,-0.6994 -0.71083,-1.13744 -0.99754,-1.31325 -0.2871,-0.17598 -0.57132,-0.18255 -0.85261,-0.0195 -0.61996,0.35957 -1.37941,1.38224 -2.27917,3.07105 -0.89096,1.68702 -2.45801,5.46216 -4.70984,11.34948 0,0 -0.22596,18.42612 -0.22596,18.42612 0,0 6.33459,-4.01684 6.33459,-4.01684 0.34746,-0.22033 0.59161,-0.21895 0.7327,0.004 0.14133,0.1965 0.2085,0.54399 0.2016,1.04251 -0.007,0.47221 -0.0847,0.91205 -0.23427,1.31965 -0.14973,0.40781 -0.39805,0.72284 -0.74529,0.94521 0,0 -11.32013,7.24932 -11.32013,7.24932
-0.35123,0.22493 -0.6016,0.23885 -0.75084,0.0414 -0.14907,-0.22443 -0.22099,-0.57831 -0.21571,-1.0616 0.005,-0.45652 0.0796,-0.87735 0.22375,-1.26235 0.15613,-0.41912 0.41594,-0.74392 0.77913,-0.97432 0,0 3.54132,-2.24639 3.54132,-2.24639 0,0 0.33638,-28.17047 0.33638,-28.17047 0,0 -2.71509,1.57907 -2.71509,1.57907 -0.35236,0.20495 -0.60335,0.18908 -0.75268,-0.0481 -0.14946,-0.2372 -0.22135,-0.61416 -0.2156,-1.13086 0.005,-0.48951 0.0807,-0.93834 0.22572,-1.34628 0.15673,-0.41449 0.41745,-0.72656 0.78182,-0.93616 0,0 4.17785,-2.40283 4.17785,-2.40283"
++ id="path6895" />
+ <path
+- id="path3684"
+- d="m 326.68371,496.68588 c 0,0 0.16352,-53.31935 0.16352,-53.31935 0,0 4.33405,2.57612 4.33405,2.57612 0,0 -0.0231,8.11168 -0.0231,8.11168 1.12479,-3.12783 2.15869,-5.02087 3.10122,-5.67423 0.96285,-0.64401 2.01732,-0.62746 3.16426,0.0524 1.66273,0.98571 3.35799,2.97819 5.08643,5.98483 0,0 -1.73463,7.50163 -1.73463,7.50163 -1.20956,-2.06252 -2.41678,-3.45673 -3.62177,-4.18598 -1.07402,-0.64988 -2.03784,-0.62407 -2.89238,0.075 -0.85268,0.66393 -1.46157,1.94671 -1.82782,3.84834 -0.54904,2.90043 -0.82874,6.26858 -0.83955,10.10792 0,0 -0.0793,28.13461 -0.0793,28.13461 0,0 -4.83103,-3.21295 -4.83103,-3.21295"
+- inkscape:connector-curvature="0" />
++ inkscape:connector-curvature="0"
++ d="m 473.30415,460.47729 c 0,0 -0.0804,4.97133 -0.0804,4.97133 0.98569,-2.87136 1.86574,-4.96674 2.64065,-6.28932 0.77288,-1.31909 1.63191,-2.24853 2.57593,-2.78936 1.01432,-0.58102 1.92593,-0.57975 2.7356,4.3e-4 0.57165,0.43409 1.07517,1.41355 1.51085,2.93619 0.44533,1.487 0.6504,3.16172 0.61612,5.02597 0,0 -0.37098,20.16552 -0.37098,20.16552 0,0 1.09632,-0.69519 1.09632,-0.69519 0.30795,-0.19527 0.52558,-0.18379 0.65312,0.0343 0.1279,0.19274 0.18732,0.5284 0.17832,1.00704 -0.009,0.4534 -0.0822,0.87365 -0.22092,1.26091 -0.13883,0.38745 -0.362,0.67967 -0.66977,0.87676 0,0 -3.48879,2.2342 -3.48879,2.2342 -0.32291,0.20678 -0.54961,0.20133 -0.67985,-0.0168 -0.13035,-0.21825 -0.19152,-0.55628 -0.18341,-1.01409 0.009,-0.48331 0.0832,-0.90811 0.22395,-1.27426 0.14113,-0.39138 0.37338,-0.68956 0.69648,-0.89444 0,0 1.09126,-0.69198 1.09126,-0.69198 0,0 0.35635,-19.67714 0.35635,-19.67714 0.0412,-2.27809 -0.26274,-4.00074 -0.9136,-5.16921 -0.65266,-1.19813 -1.55322,-1.46656
-2.70395,-0.79997 -0.87978,0.50971 -1.6529,1.39411 -2.31814,2.65394 -0.66627,1.2367 -1.63439,3.93929 -2.90635,8.11592 0,0 -0.33083,20.46711 -0.33083,20.46711 0,0 1.52554,-0.96736 1.52554,-0.96736 0.32,-0.20291 0.54652,-0.19417 0.67982,0.026 0.13361,0.19441 0.19632,0.5352 0.1882,1.02244 -0.008,0.46152 -0.0833,0.89021 -0.22665,1.28621 -0.14347,0.39619 -0.37497,0.69664 -0.69477,0.90144 0,0 -4.42215,2.83191 -4.42215,2.83191 -0.3258,0.20863 -0.55714,0.20298 -0.6938,-0.0174 -0.13675,-0.22051 -0.20159,-0.56416 -0.19444,-1.03091 0.008,-0.49277 0.0843,-0.92686 0.23029,-1.30217 0.1463,-0.40101 0.38259,-0.70494 0.70859,-0.91166 0,0 1.54286,-0.97835 1.54286,-0.97835 0,0 0.43113,-27.17649 0.43113,-27.17649 0,0 -1.15824,0.67362 -1.15824,0.67362 -0.32722,0.19033 -0.55954,0.16948 -0.69672,-0.0629 -0.13729,-0.23247 -0.20212,-0.59828 -0.19443,-1.09741 0.007,-0.47286 0.0845,-0.90805 0.23156,-1.30535 0.14701,-0.39707 0.38436,-0.6898 0.71179,-0.87815 0,0 2.52342,-1.45131 2.52342,-1.45131"
++ id="path6897" />
+ <path
+- id="path3686"
+- d="m 346.63844,509.95707 c 0,0 0.0968,-47.55946 0.0968,-47.55946 0,0 -4.43131,-2.6751 -4.43131,-2.6751 0,0 0.0162,-7.15908 0.0162,-7.15908 0,0 4.42975,2.633 4.42975,2.633 0,0 0.0118,-5.80848 0.0118,-5.80848 0.007,-3.66486 0.19039,-6.28429 0.54899,-7.86025 0.49107,-2.11858 1.34725,-3.56796 2.57091,-4.34826 1.24623,-0.8062 2.9874,-0.57829 5.2303,0.69102 1.45137,0.82149 3.06136,2.04536 4.83196,3.67489 0,0 -0.79224,7.74699 -0.79224,7.74699 -1.07705,-0.96968 -2.09389,-1.73012 -3.05099,-2.28234 -1.56464,-0.90254 -2.66858,-0.93449 -3.31577,-0.0995 -0.64623,0.83385 -0.9719,2.90502 -0.97777,6.21534 0,0 -0.009,5.07119 -0.009,5.07119 0,0 5.92043,3.51903 5.92043,3.51903 0,0 -0.0107,7.30549 -0.0107,7.30549 0,0 -5.92257,-3.57534 -5.92257,-3.57534 0,0 -0.0849,47.87735 -0.0849,47.87735 0,0 -5.0619,-3.36649 -5.0619,-3.36649"
+- inkscape:connector-curvature="0" />
++ inkscape:connector-curvature="0"
++ d="m 502.73274,460.0514 c 0,0 -12.58078,7.66685 -12.58078,7.66685 0.13943,3.95275 0.75486,6.81973 1.84191,8.60127 1.09127,1.74028 2.46782,2.07625 4.12588,1.02077 0.91736,-0.58398 1.88324,-1.57454 2.89733,-2.9694 1.01026,-1.38958 1.83995,-2.9037 2.49094,-4.54374 0.19007,-0.48101 0.352,-0.76339 0.48584,-0.84731 0.15283,-0.0958 0.2829,-0.0209 0.39022,0.22483 0.10778,0.2211 0.15695,0.53905 0.14755,0.95388 -0.009,0.41479 -0.0948,0.86546 -0.25619,1.35225 -0.48577,1.51058 -1.32969,3.17888 -2.53523,5.00941 -1.20067,1.80791 -2.42926,3.11745 -3.68662,3.92576 -2.11999,1.36285 -3.86995,0.76072 -5.24366,-1.82965 -1.37343,-2.64104 -2.01438,-6.49315 -1.91501,-11.55003 0.0906,-4.61389 0.85108,-8.9821 2.27681,-13.08506 1.42996,-4.0921 3.13808,-6.70212 5.11668,-7.83561 2.02129,-1.15786 3.63504,-0.42605 4.84758,2.17494 1.20485,2.55883 1.735,6.46775 1.59675,11.73084 m -1.15024,-2.39108 c -0.1636,-3.27931 -0.73716,-5.69144 -1.72424,-7.23625 -0.98254,-1.55853 -2.19418,-1.92464 -3.63745,
-1.08857 -1.45189,0.84113 -2.73048,2.64931 -3.83206,5.42777 -1.10528,2.78784 -1.82554,6.03803 -2.15785,9.74209 0,0 11.3516,-6.84504 11.3516,-6.84504"
++ id="path6899" />
+ <path
+- id="path3688"
+- d="m 359.60073,501.90418 c 0,0 5.20059,1.86777 5.20059,1.86777 0.29001,3.96114 1.10193,7.38322 2.43911,10.27061 1.36176,2.91073 3.2661,5.17238 5.72054,6.78444 2.48967,1.63519 4.34728,1.95881 5.56379,0.96109 1.21993,-1.0365 1.83154,-2.77869 1.83229,-5.22389 6.2e-4,-2.19296 -0.5384,-4.26389 -1.61481,-6.20909 -0.7497,-1.33918 -2.60804,-3.61528 -5.55946,-6.8122 -3.94075,-4.27425 -6.65395,-7.50944 -8.16465,-9.73106 -1.48522,-2.23573 -2.61386,-4.7171 -3.38893,-7.44614 -0.75395,-2.74593 -1.12852,-5.48045 -1.12491,-8.2074 0.003,-2.48146 0.31617,-4.58205 0.93929,-6.30404 0.64345,-1.7475 1.51123,-2.99566 2.60481,-3.74404 0.82208,-0.59757 1.93976,-0.84564 3.35554,-0.74295 1.44048,0.0796 2.98492,0.60687 4.63457,1.58472 2.49729,1.48044 4.69744,3.42626 6.59564,5.83924 1.92772,2.43694 3.35406,5.04673 4.27363,7.82559 0.92183,2.74989 1.55812,6.08842 1.90744,10.01415 0,0 -5.39591,-2.01583 -5.39591,-2.01583 -0.24253,-3.08522 -0.95109,-5.80694 -2.12313,-8.16184 -1.14834,-2.33544 -2.77
51,-4.13563 -4.87465,-5.40091 -2.46541,-1.48565 -4.2164,-1.81727 -5.26239,-1.00324 -1.04343,0.8121 -1.56519,2.18465 -1.56724,4.11944 -10e-4,1.23148 0.21335,2.47259 0.64434,3.72428 0.43146,1.28852 1.10985,2.55443 2.03645,3.7988 0.53331,0.68393 2.10812,2.47474 4.73703,5.38635 3.83534,4.20888 6.52812,7.39657 8.05468,9.53851 1.55295,2.12718 2.77297,4.59004 3.65706,7.38727 0.88613,2.80397 1.33003,5.87348 1.33006,9.20426 -3e-5,3.25947 -0.54743,5.98195 -1.64026,8.16269 -1.06972,2.15296 -2.61798,3.35081 -4.63932,3.59644 -2.01164,0.20856 -4.27524,-0.52848 -6.78627,-2.2025 -4.12399,-2.74933 -7.24172,-6.34882 -9.37583,-10.80056 -2.10254,-4.4137 -3.43626,-9.76409 -4.0091,-16.05996"
+- inkscape:connector-curvature="0" />
++ inkscape:connector-curvature="0"
++ d="m 514.91047,422.62215 c 0,0 -1.06434,42.27288 -1.06434,42.27288 0,0 4.45362,-2.8241 4.45362,-2.8241 0.2761,-0.17507 0.46813,-0.15759 0.57629,0.0523 0.10868,0.18619 0.15712,0.50328 0.14534,0.95133 -0.0112,0.42443 -0.0782,0.81493 -0.20113,1.17164 -0.12299,0.35687 -0.32235,0.62363 -0.59831,0.80035 0,0 -10.15763,6.50487 -10.15763,6.50487 -0.27917,0.17878 -0.476,0.16246 -0.5903,-0.0494 -0.11437,-0.21191 -0.16642,-0.53506 -0.15609,-0.96944 0.0109,-0.45857 0.0801,-0.85922 0.20776,-1.20182 0.12814,-0.36656 0.33197,-0.63844 0.61129,-0.81556 0,0 4.56188,-2.89274 4.56188,-2.89274 0,0 0.97884,-39.26779 0.97884,-39.26779 0,0 -3.35907,1.85407 -3.35907,1.85407 -0.27977,0.15447 -0.48159,0.1208 -0.60529,-0.10124 -0.11445,-0.22726 -0.16609,-0.57399 -0.15489,-1.04015 0.0106,-0.44163 0.0802,-0.843 0.20889,-1.204 0.12859,-0.36073 0.33761,-0.62003 0.62686,-0.77784 0,0 4.51628,-2.46343 4.51628,-2.46343"
++ id="path6901" />
+ </g>
+ </g>
+ <g
+- style="display:inline"
+- inkscape:groupmode="layer"
++ inkscape:label="GenericRootfs"
+ id="layer9"
+- inkscape:label="GenericRootfs">
++ inkscape:groupmode="layer"
++ style="display:none">
+ <g
+- inkscape:corner7="0.22429094 : -0.062018081 : 0.53531208 : 1"
+- inkscape:corner0="0.4922944 : 0.05733945 : 0 : 1"
+- inkscape:perspectiveID="#perspective3054-6"
+- id="g4111-4"
++ sodipodi:type="inkscape:box3d"
+ style="fill:#aad3d3;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+- sodipodi:type="inkscape:box3d">
++ id="g4111-4"
++ inkscape:perspectiveID="#perspective3054-6"
++ inkscape:corner0="0.4922944 : 0.05733945 : 0 : 1"
++ inkscape:corner7="0.22429094 : -0.062018081 : 0.53531208 : 1">
+ <path
+- d="M 133.79121,312.6368 252.25105,379.121 540.75728,268.41872 415.43828,234.11946 z"
+- inkscape:box3dsidetype="13"
+- style="fill:#afafde;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4121-8"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#afafde;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="13"
++ d="M 133.79121,312.6368 252.25105,379.121 540.75728,268.41872 415.43828,234.11946 z" />
+ <path
+- d="m 133.79121,232.65423 0,79.98257 281.64707,-78.51734 0,-58.86622 z"
+- inkscape:box3dsidetype="6"
+- style="fill:#353564;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4113-3"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#353564;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="6"
++ d="m 133.79121,232.65423 0,79.98257 281.64707,-78.51734 0,-58.86622 z" />
+ <path
+- d="m 415.43828,175.25324 125.319,25.33341 0,67.83207 -125.319,-34.29926 z"
+- inkscape:box3dsidetype="11"
+- style="fill:#e9e9ff;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4123-4"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#e9e9ff;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="11"
++ d="m 415.43828,175.25324 125.319,25.33341 0,67.83207 -125.319,-34.29926 z" />
+ <path
+- d="m 133.79121,232.65423 118.45984,48.97562 288.50623,-81.0432 -125.319,-25.33341 z"
+- inkscape:box3dsidetype="5"
+- style="fill:#00b9f5;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4115-0"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#00b9f5;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="5"
++ d="m 133.79121,232.65423 118.45984,48.97562 288.50623,-81.0432 -125.319,-25.33341 z" />
+ <path
+- d="m 252.25105,281.62985 0,97.49115 288.50623,-110.70228 0,-67.83207 z"
+- inkscape:box3dsidetype="14"
+- style="fill:#008bb8;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4119-1"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#008bb8;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="14"
++ d="m 252.25105,281.62985 0,97.49115 288.50623,-110.70228 0,-67.83207 z" />
+ <path
+- d="m 133.79121,232.65423 118.45984,48.97562 0,97.49115 -118.45984,-66.4842 z"
+- inkscape:box3dsidetype="3"
+- style="fill:#00ade5;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4117-3"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#00ade5;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="3"
++ d="m 133.79121,232.65423 118.45984,48.97562 0,97.49115 -118.45984,-66.4842 z" />
+ </g>
+ <g
+- transform="matrix(0.61031919,0,0,0.61031919,129.70332,83.586066)"
++ id="text9988-4"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Courier New;-inkscape-font-specification:Courier New Bold"
+- id="text9988-4">
++ transform="matrix(0.61031919,0,0,0.61031919,129.70332,83.586066)">
+ <path
+- inkscape:connector-curvature="0"
++ id="path9995-1"
+ d="m 188.59801,239.37973 c 0,0 10.80142,4.18005 10.80142,4.18005 -0.76616,-3.05917 -0.73057,-5.17362 0.0851,-6.39339 0.84106,-1.21417 2.36138,-2.05944 4.56041,-2.54399 3.36438,-0.74121 8.67469,-0.70434 15.98654,0.11115 4.98595,0.55071 8.9953,1.36554 12.03184,2.45026 2.59214,0.92602 4.30231,1.84095 5.11951,2.74446 0.79707,0.88127 0.47618,1.49409 -0.97048,1.83415 -1.28207,0.30141 -3.77637,0.20361 -7.46885,-0.2925 -3.67698,-0.49394 -6.07112,-0.61056 -7.19576,-0.35091 -1.46934,0.3393 -2.09539,1.44179 -1.87218,3.32952 0.26187,1.91063 1.40513,4.65856 3.4729,8.3019 0,0 30.03524,11.62336 30.03524,11.62336 0,0 15.65393,-4.11957 15.65393,-4.11957 2.59381,-0.68257 5.41952,-0.79884 8.49618,-0.35048 3.05257,0.41529 6.19038,1.21068 9.42837,2.39338 3.19708,1.16781 5.29058,2.28918 6.26454,3.36278 0.94452,1.04629 0.1181,1.93489 -2.49634,2.66251 0,0 -34.13326,9.49952 -34.13326,9.49952 -2.83088,0.78785 -5.87094,0.94375 -9.09895,0.46537 -3.24862,-0.51643 -6.4804,-1.44072 -9.68065,-2.7
6446 -3.10024,-1.28236 -4.99727,-2.47227 -5.70886,-3.572 -0.73485,-1.12824 0.30694,-2.05895 3.10831,-2.79621 0,0 6.8587,-1.80497 6.8587,-1.80497 0,0 -46.80164,-18.64214 -46.80164,-18.64214 0,0 -4.03596,0.93784 -4.03596,0.93784 -2.70867,0.62944 -5.46556,0.75303 -8.25329,0.36912 -2.79889,-0.41446 -5.49653,-1.1558 -8.08261,-2.21792 -2.50769,-1.02993 -3.9575,-1.9862 -4.36329,-2.87045 -0.42087,-0.90793 0.71271,-1.65692 3.38783,-2.24995 0,0 14.87133,-3.29643 14.87133,-3.29643"
+- id="path9995-1" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path9997-2"
+ d="m 318.69753,233.65347 c 7.81088,2.41917 14.56844,5.07064 20.25204,7.96924 5.7885,2.94264 9.1431,5.72809 9.96615,8.34264 0.79838,2.64066 -1.00301,4.6031 -5.45216,5.85289 -4.46386,1.25393 -11.15148,1.66904 -20.00626,1.23659 -8.898,-0.4557 -18.38088,-1.74499 -28.34354,-3.84206 -9.79574,-2.06193 -18.6433,-4.48749 -26.52662,-7.25379 -7.82927,-2.74735 -14.20756,-5.64394 -19.17016,-8.67619 -4.89257,-2.97384 -7.23458,-5.57586 -7.12327,-7.82898 0.14059,-2.21435 2.37339,-3.78147 6.67139,-4.72848 4.29012,-0.94517 10.38008,-1.19953 18.3213,-0.76824 7.94217,0.40759 16.43086,1.49423 25.55556,3.2805 9.21274,1.79636 17.82485,3.92867 25.85557,6.41588 m -9.12553,2.31728 c -6.4118,-2.03184 -13.27849,-3.60974 -20.62972,-4.75217 -9.83924,-1.51489 -17.12877,-1.70611 -22.00563,-0.58005 -4.33293,1.00051 -5.30614,2.74024 -2.84855,5.25406 2.51376,2.57126 7.47645,5.13939 14.96669,7.70184 6.2706,2.14521 13.7825,3.8011 22.51055,4.94615 8.74133,1.13263 15.33249,1.12147 19.68005,-0.0328 4.336
31,-1.15122 5.04492,-3.04688 2.20597,-5.65133 -2.84427,-2.56876 -7.48377,-4.85895 -13.87936,-6.8857"
+- id="path9997-2" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path9999-5"
+ d="m 370.18311,220.89138 c 7.87167,2.1472 14.79353,4.49711 20.75003,7.06196 6.05519,2.59988 9.78662,5.05673 11.1054,7.35908 1.29936,2.32214 0.0231,4.04525 -3.87749,5.14096 -3.91087,1.09859 -10.07589,1.46092 -18.44725,1.07985 -8.41856,-0.40157 -17.5687,-1.53459 -27.35306,-3.37787 -9.6307,-1.81431 -18.46587,-3.95046 -26.48622,-6.3895 -7.97675,-2.42578 -14.6373,-4.98669 -20.00949,-7.67132 -5.30105,-2.63705 -8.1214,-4.94735 -8.55222,-6.94998 -0.39449,-1.97048 1.33688,-3.36597 5.164,-4.20923 3.82211,-0.84206 9.50591,-1.06776 17.09603,-0.68142 7.58396,0.3651 15.83663,1.33558 24.84202,2.92873 9.08222,1.6007 17.66471,3.49833 25.76825,5.70874 m -8.07385,2.05333 c -6.47949,-1.80327 -13.29219,-3.20538 -20.46816,-4.22173 -9.60797,-1.34865 -16.51634,-1.52019 -20.848,-0.52003 -3.84631,0.88815 -4.35747,2.43275 -1.46283,4.66292 2.95687,2.27808 8.20823,4.55087 15.82272,6.81614 6.36681,1.89411 13.7807,3.35532 22.21491,4.3658 8.43901,0.99896 14.61124,0.99061 18.43477,-0.0245 3.81601,
-1.01309 4.07248,-2.68403 0.84721,-4.98329 -3.22688,-2.27084 -8.08432,-4.29842 -14.54062,-6.09528"
+- id="path9999-5" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path10001-8"
+ d="m 369.35032,208.21091 c 0,0 40.18029,10.31554 40.18029,10.31554 4.54941,1.16799 7.90985,1.85733 10.04607,2.05851 3.35439,0.31973 6.36087,0.12804 8.99839,-0.57223 3.80233,-1.00946 4.92338,-2.51808 3.41338,-4.50415 -0.59265,-0.75666 -0.54527,-1.22149 0.13796,-1.39847 0.94028,-0.24357 2.78416,-0.20123 5.53983,0.12736 2.78771,0.32353 5.69044,0.85075 8.71788,1.58481 2.83553,0.68756 4.92392,1.38477 6.25775,2.09178 2.24812,1.1379 3.13828,2.53669 2.64599,4.20684 -0.55053,1.67203 -2.02066,2.85282 -4.41529,3.52548 -4.66368,1.31006 -11.25115,1.51999 -19.66772,0.62294 -8.39599,-0.91541 -16.83231,-2.48591 -25.2301,-4.68294 0,0 -44.30445,-11.59087 -44.30445,-11.59087 0,0 -2.80728,0.65233 -2.80728,0.65233 -1.88196,0.43734 -4.10034,0.52199 -6.64393,0.25302 -2.57229,-0.29043 -5.25643,-0.80912 -8.04218,-1.5525 -2.70522,-0.72188 -4.48808,-1.39261 -5.35902,-2.01314 -0.89888,-0.63794 -0.40471,-1.16405 1.47199,-1.58009 0,0 2.79988,-0.62063 2.79988,-0.62063 0,0 -16.0131,-4.18933 -16.0
131,-4.18933 -4.15526,-1.08708 -6.72467,-1.9241 -7.73865,-2.51744 -1.03741,-0.60902 -0.98184,-1.03024 0.15945,-1.26617 1.11384,-0.23015 2.89308,-0.19004 5.34585,0.12065 2.43006,0.29236 5.71138,0.96864 9.87337,2.03715 0,0 16.03516,4.11673 16.03516,4.11673 0,0 13.81074,-3.06134 13.81074,-3.06134 1.7648,-0.39115 3.87091,-0.45617 6.32889,-0.19576 2.42845,0.24118 5.0259,0.70062 7.80255,1.38148 2.73549,0.67079 4.62059,1.3128 5.64569,1.9254 0.99363,0.59583 0.6121,1.09974 -1.15489,1.51031 0,0 -13.8345,3.21473 -13.8345,3.21473"
+- id="path10001-8" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path10003-9"
+ d="m 414.19529,197.79027 c 0,0 49.09089,11.29188 49.09089,11.29188 0,0 9.51455,-2.5039 9.51455,-2.5039 1.5833,-0.41664 3.71061,-0.48612 6.39269,-0.20922 2.64034,0.25642 5.58449,0.74526 8.845,1.46995 3.21279,0.71412 5.53419,1.39784 6.95389,2.0505 1.37743,0.63488 1.28518,1.1721 -0.28855,1.61008 0,0 -20.36165,5.66678 -20.36165,5.66678 -1.67346,0.46574 -3.90405,0.55615 -6.68041,0.27017 -2.81866,-0.30882 -5.88811,-0.86047 -9.19551,-1.6511 -3.21122,-0.76763 -5.44315,-1.48078 -6.70743,-2.1405 -1.30329,-0.67814 -1.1083,-1.23745 0.57268,-1.67985 0,0 4.12495,-1.08555 4.12495,-1.08555 0,0 -49.13122,-11.49283 -49.13122,-11.49283 0,0 -3.32684,0.77306 -3.32684,0.77306 -1.68527,0.39163 -3.76431,0.46707 -6.22722,0.22551 -2.49509,-0.26082 -5.14605,-0.72637 -7.94301,-1.39362 -2.71716,-0.64821 -4.55136,-1.25057 -5.51217,-1.80789 -0.99143,-0.57315 -0.63973,-1.04575 1.04522,-1.41928 0,0 3.32676,-0.73743 3.32676,-0.73743 0,0 -6.86908,-1.60682 -6.86908,-1.60682 -7.72281,-1.80653 -12.8825
,-3.51276 -15.55532,-5.12306 -2.65764,-1.59876 -1.86099,-2.81696 2.32262,-3.66964 1.84848,-0.37669 4.40558,-0.71108 7.66872,-1.00365 3.21822,-0.30802 5.92136,-0.35936 8.12214,-0.15455 2.22716,0.20095 4.56577,0.57073 7.02338,1.11149 2.64213,0.58139 4.52279,1.1234 5.63365,1.62529 1.06013,0.49218 1.15601,0.83283 0.28178,1.02017 -0.40571,0.087 -1.21582,0.17299 -2.43036,0.25814 -4.16009,0.26467 -7.30795,0.6235 -9.44187,1.07766 -2.2328,0.47529 -2.90043,1.00733 -1.98928,1.59704 0.88196,0.57571 2.62421,1.16376 5.23535,1.76437 0,0 6.87026,1.58029 6.87026,1.58029 0,0 10.36792,-2.29819 10.36792,-2.29819 1.59462,-0.35343 3.58152,-0.41186 5.9701,-0.1759 2.35624,0.21854 4.91761,0.6344 7.69391,1.25031 2.73418,0.6066 4.65441,1.18684 5.75196,1.74017 1.06391,0.53802 0.80425,0.99268 -0.78855,1.36278 0,0 -10.35995,2.40734 -10.35995,2.40734"
+- id="path10003-9" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path10005-9"
+ d="m 462.86528,187.90449 c -2.90569,-0.16593 -5.36269,-0.21815 -7.37595,-0.15683 -2.07622,0.0486 -3.71307,0.21108 -4.91243,0.48799 -2.39002,0.55188 -3.09951,1.24612 -2.11015,2.08594 0.42438,0.3709 1.25961,0.68923 2.50703,0.95438 1.43917,0.30592 3.27869,0.50507 5.51653,0.59672 1.65829,0.0597 4.08262,-0.0775 7.26301,-0.41077 5.84081,-0.60338 10.42557,-0.90895 13.78419,-0.91984 4.42293,-0.011 9.54763,0.32933 15.40812,1.02483 5.9049,0.7008 11.57911,1.60001 17.03778,2.70347 7.51845,1.51988 12.98207,3.05778 16.33947,4.61419 4.979,2.29033 5.3772,4.05686 1.0617,5.26911 -1.74579,0.49041 -3.95512,0.82442 -6.62498,1.0004 -2.58257,0.18616 -5.59293,0.22359 -9.02452,0.11209 0.63516,0.28397 1.03505,0.52794 1.19856,0.73158 0.16356,0.20401 0.064,0.35687 -0.30016,0.45818 -0.97288,0.27068 -2.879,0.24588 -5.70939,-0.0742 -2.87272,-0.34021 -6.9451,-1.08148 -12.17878,-2.2148 0,0 -7.21961,-1.56336 -7.21961,-1.56336 -5.09134,-1.1025 -8.37985,-1.95133 -9.90167,-2.55303 -1.5588,-0.61762 -1.
8621,-1.04479 -0.91937,-1.28407 0.75656,-0.19198 2.09291,-0.20186 4.01286,-0.0297 1.85597,0.1581 4.61964,0.56195 8.30756,1.21468 3.69149,0.33625 6.93021,0.48413 9.70546,0.44275 2.70434,-0.056 4.90971,-0.31064 6.61127,-0.76242 2.77196,-0.73591 3.38675,-1.61784 1.87353,-2.64169 -0.78919,-0.49759 -2.00028,-0.91325 -3.63224,-1.24812 -2.70691,-0.55542 -5.4427,-0.87941 -8.21759,-0.97439 -2.77232,-0.0949 -6.38748,0.14627 -10.86946,0.72618 -6.6715,0.88095 -13.31679,1.01463 -19.85457,0.39749 -6.43141,-0.5993 -13.04559,-1.63447 -19.79212,-3.09094 -6.82592,-1.4736 -11.45826,-2.90095 -13.94953,-4.28347 -3.37925,-1.85317 -2.96738,-3.22257 1.14981,-4.12973 1.42276,-0.31344 3.19198,-0.52707 5.30887,-0.64174 2.07491,-0.13099 4.5307,-0.15741 7.37162,-0.0794 -0.45722,-0.25351 -0.73544,-0.45733 -0.83571,-0.61184 -0.0802,-0.1585 0.0166,-0.26808 0.29048,-0.32883 0.82077,-0.1819 2.44849,-0.14089 4.89001,0.12332 2.38932,0.25295 5.8038,0.82932 10.27286,1.73557 0,0 4.5771,0.92817 4.5771,0.92817 4.12
998,0.83752 6.80238,1.44722 7.99164,1.82436 2.2679,0.73357 2.87579,1.23007 1.80718,1.48552 -0.72062,0.17229 -2.08136,0.17497 -4.07847,0.008 -1.99347,-0.16663 -4.25567,-0.47572 -6.77994,-0.92582"
+- id="path10005-9" />
++ inkscape:connector-curvature="0" />
+ </g>
+ <g
+- transform="matrix(0.92024041,0,0,0.92024041,31.625011,23.667711)"
++ id="text11583"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Sans"
+- id="text11583">
++ transform="matrix(0.92024041,0,0,0.92024041,31.625011,23.667711)">
+ <path
+- inkscape:connector-curvature="0"
++ id="path11602"
+ d="m 254.05165,365.60408 c 0,0 34.35431,-1.75104 34.35431,-1.75104 0.56363,-0.0317 0.84519,0.0983 0.84519,0.39005 0,0.18368 -0.0989,0.38365 -0.29678,0.6 -0.18273,0.1998 -0.38839,0.34357 -0.61701,0.43129 -0.18298,0.0702 -0.43469,0.1127 -0.75526,0.12744 0,0 -34.41756,1.82791 -34.41756,1.82791 -0.37832,0.017 -0.62523,-0.009 -0.74053,-0.079 -0.11527,-0.0696 -0.17293,-0.18314 -0.17296,-0.34054 3e-5,-0.19113 0.10711,-0.3938 0.32116,-0.60796 0.19756,-0.2192 0.41967,-0.37441 0.66632,-0.46568 0.18084,-0.0669 0.45194,-0.11108 0.81312,-0.13252"
+- id="path11602" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11604"
+ d="m 255.55102,343.84068 c 0,0 27.88938,-9.69758 27.88938,-9.69758 0,0 0,-1.82666 0,-1.82666 0,-0.33704 0.0924,-0.60815 0.27728,-0.81326 0.16937,-0.19968 0.40023,-0.3499 0.69247,-0.45066 0.2767,-0.0954 0.50715,-0.10421 0.69143,-0.0267 0.18421,0.0775 0.27628,0.28447 0.27628,0.62079 0,0 0,3.20618 0,3.20618 0,0 -3.85993,1.34799 -3.85993,1.34799 3.08439,0.5083 4.61884,1.98077 4.61884,4.41998 0,1.23589 -0.4598,2.5878 -1.38077,4.05795 -0.93823,1.46783 -2.27197,2.8472 -4.00467,4.13951 -1.73925,1.28627 -3.53975,2.26892 -5.4022,2.94633 -1.8857,0.68587 -3.70797,1.01828 -5.46602,0.99507 -1.78062,-0.0286 -3.16051,-0.44253 -4.13609,-1.24301 -0.97758,-0.81323 -1.46715,-1.85874 -1.46717,-3.13526 2e-5,-2.44202 1.60325,-5.05828 4.79328,-7.8345 0,0 -11.44072,3.99542 -11.44072,3.99542 0,0 0,1.87805 0,1.87805 3e-5,0.34655 -0.0977,0.62688 -0.29329,0.84104 -0.1956,0.21427 -0.4484,0.37601 -0.7585,0.48523 -0.29391,0.10354 -0.539,0.1171 -0.7352,0.0406 -0.19621,-0.0765 -0.29437,-0.28849 -0.
2944,-0.6358 0,0 0,-3.31067 0,-3.31067 m 19.79811,-5.48558 c -2.51598,0.87866 -4.64951,2.21904 -6.39524,4.02263 -1.75225,1.81039 -2.63086,3.54328 -2.63088,5.19358 2e-5,1.66139 0.87863,2.77473 2.63088,3.33845 1.74573,0.56159 3.87926,0.38406 6.39524,-0.52729 2.4868,-0.90079 4.58775,-2.25119 6.30804,-4.04978 1.69847,-1.78636 2.54535,-3.49185 2.54535,-5.12145 0,-1.61872 -0.84688,-2.71626 -2.54535,-3.29425 -1.72029,-0.57467 -3.82124,-0.43033 -6.30804,0.43811"
+- id="path11604" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11606"
+ d="m 275.77236,315.9068 c 0,0 0,14.07759 0,14.07759 2.54686,-1.10732 4.59132,-2.54443 6.13998,-4.31143 1.52806,-1.76674 2.29018,-3.56591 2.29018,-5.40192 0,-1.0212 -0.2385,-2.01245 -0.7159,-2.9745 -0.47788,-0.96303 -1.11069,-1.66976 -1.89907,-2.12003 -0.23212,-0.13128 -0.34823,-0.27325 -0.34824,-0.42585 1e-5,-0.17436 0.10064,-0.3597 0.30183,-0.55594 0.18564,-0.19108 0.40986,-0.32934 0.67259,-0.41476 0.26258,-0.0853 0.5173,-0.0811 0.76416,0.0127 0.77059,0.27102 1.49377,0.9639 2.16975,2.07776 0.65966,1.10646 0.98913,2.35832 0.98913,3.7568 0,2.34166 -1.08125,4.66345 -3.25144,6.97357 -2.196,2.31547 -4.86226,4.01213 -8.00691,5.08712 -2.88171,0.98511 -5.36835,1.09009 -7.45342,0.30771 -2.09439,-0.79698 -3.14513,-2.30681 -3.14515,-4.52684 2e-5,-2.28661 1.0828,-4.52434 3.24085,-6.70559 2.13228,-2.16603 4.88653,-3.7843 8.25166,-4.85636 m -2.00199,2.0518 c -2.19245,0.99146 -3.98247,2.30495 -5.36535,3.94059 -1.38696,1.62946 -2.08199,3.26008 -2.08201,4.88823 2e-5,1.62815 0.6870
7,2.79791 2.05814,3.50771 1.36707,0.70771 3.16515,0.82466 5.38922,0.35413 0,0 0,-12.69066 0,-12.69066"
+- id="path11606" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11608"
+ d="m 285.37786,298.99901 c 0,0 0,2.31105 0,2.31105 0,0 -18.33587,11.45873 -18.33587,11.45873 0,0 0,1.42769 0,1.42769 2e-5,0.33202 -0.0958,0.6007 -0.28746,0.80612 -0.19172,0.2055 -0.4395,0.35707 -0.74343,0.4547 -0.28808,0.0925 -0.52829,0.0977 -0.72057,0.0153 -0.19233,-0.0824 -0.28853,-0.29004 -0.28855,-0.62278 0,0 0,-5.24075 0,-5.24075 2e-5,-0.33275 0.0962,-0.60143 0.28855,-0.80598 0.19228,-0.20446 0.4405,-0.35436 0.74457,-0.44974 0.28793,-0.0903 0.52771,-0.0936 0.71943,-0.01 0.19168,0.0837 0.28748,0.2916 0.28746,0.62362 0,0 0,2.30754 0,2.30754 0,0 16.39841,-10.22344 16.39841,-10.22344 0,0 0,-0.60344 0,-0.60344 0,0 -16.39841,0.086 -16.39841,0.086 0,0 0,2.32415 0,2.32415 2e-5,0.33203 -0.0958,0.59954 -0.28746,0.80262 -0.19172,0.20318 -0.4395,0.35174 -0.74343,0.44568 -0.28808,0.089 -0.52829,0.0913 -0.72057,0.006 -0.19233,-0.0848 -0.28853,-0.29353 -0.28855,-0.62628 0,0 0,-5.2574 0,-5.2574 2e-5,-0.34382 0.0962,-0.61133 0.28855,-0.80246 0.19228,-0.20211 0.4405,-0.34901 0.
74457,-0.44069 0.28793,-0.0868 0.52771,-0.0871 0.71943,-0.001 0.19168,0.075 0.28748,0.28404 0.28746,0.62711 0,0 0,1.4111 0,1.4111 0,0 18.33587,-0.0241 18.33587,-0.0241"
+- id="path11608" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11610"
+ d="m 313.14156,343.73148 c 0,0 30.26747,-0.89947 30.26747,-0.89947 0.49772,-0.0176 0.74637,0.11073 0.74637,0.38486 0,0.17261 -0.0873,0.35838 -0.26208,0.55741 -0.16138,0.18378 -0.34299,0.31442 -0.54487,0.39188 -0.16157,0.062 -0.38383,0.0964 -0.66688,0.10333 0,0 -30.31978,0.96684 -30.31978,0.96684 -0.3325,0.008 -0.54951,-0.0224 -0.65085,-0.0901 -0.1013,-0.0678 -0.15197,-0.17545 -0.152,-0.32301 3e-5,-0.17918 0.0941,-0.36685 0.28225,-0.56297 0.17363,-0.20121 0.36885,-0.3419 0.58564,-0.42213 0.15895,-0.0588 0.39724,-0.0944 0.71473,-0.10662"
+- id="path11610" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11612"
+ d="m 322.77432,331.83011 c 0,0 3.22768,-1.1641 3.22768,-1.1641 -1.27696,-0.3182 -2.24067,-0.80828 -2.88903,-1.47027 -0.64929,-0.66296 -0.9743,-1.60405 -0.97432,-2.8225 2e-5,-1.29136 0.40977,-2.62776 1.22813,-4.00727 0.81688,-1.37693 1.95511,-2.61452 3.41221,-3.71194 1.43833,-1.09927 2.94835,-1.92196 4.52929,-2.46932 2.49833,-0.86491 4.6264,-0.93537 6.38954,-0.21728 1.7424,0.70972 2.61095,2.02729 2.61095,3.95484 0,2.29474 -1.2423,4.602 -3.73771,6.93188 0,0 10.25658,-3.69916 10.25658,-3.69916 0,0 0,-3.09717 0,-3.09717 -10e-6,-0.30363 0.0734,-0.54742 0.22027,-0.73131 0.16012,-0.18856 0.36685,-0.32792 0.62013,-0.41811 0.23981,-0.0854 0.43955,-0.0908 0.59928,-0.0163 0.15966,0.0745 0.23947,0.2632 0.23947,0.56624 0,0 0,6.0761 0,6.0761 0,0.30304 -0.0798,0.54933 -0.23947,0.73894 -0.14642,0.18481 -0.34615,0.32344 -0.59928,0.41587 -0.25328,0.0925 -0.46001,0.10225 -0.62013,0.0291 -0.14684,-0.078 -0.22028,-0.26881 -0.22027,-0.57246 0,0 0,-1.71559 0,-1.71559 0,0 -22.25724,8.0605
9 -22.25724,8.06059 0,0 0,1.76032 0,1.76032 3e-5,0.31155 -0.0843,0.5656 -0.25311,0.76222 -0.16882,0.19668 -0.38698,0.34388 -0.65457,0.4416 -0.25363,0.0926 -0.46511,0.10225 -0.63439,0.0288 -0.16931,-0.0735 -0.254,-0.26634 -0.25401,-0.57853 0,0 0,-3.07517 0,-3.07517 m 8.53396,-14.33144 c -2.01183,0.69956 -3.73971,1.8489 -5.18019,3.44956 -1.45926,1.60052 -2.19074,3.19263 -2.19075,4.77233 10e-6,1.59012 0.73149,2.67448 2.19075,3.25164 1.45445,0.57524 3.18226,0.50062 5.18019,-0.21996 2.00257,-0.72224 3.71467,-1.8836 5.13968,-3.48257 1.42034,-1.59371 2.12875,-3.17039 2.12875,-4.73395 0,-1.5431 -0.70159,-2.61012 -2.10823,-3.2025 -1.42494,-0.58951 -3.14385,-0.53566 -5.1602,0.16545"
+- id="path11612" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11614"
+ d="m 322.77432,309.28933 c 0,0 4.466,-1.49604 4.466,-1.49604 -2.07284,-1.00766 -3.40857,-1.83609 -4.00042,-2.48234 -0.60674,-0.65286 -0.91044,-1.33884 -0.91046,-2.05728 2e-5,-0.78088 0.36019,-1.62201 1.07964,-2.52227 0.70421,-0.90459 1.23865,-1.41561 1.60394,-1.53409 0.26677,-0.0865 0.49127,-0.0918 0.67359,-0.0162 0.16824,0.0699 0.25234,0.20327 0.25233,0.40027 10e-6,0.1037 -0.021,0.19867 -0.0631,0.28493 -0.0561,0.0909 -0.2173,0.27818 -0.48383,0.56209 -0.49137,0.52348 -0.82864,0.95029 -1.01146,1.28006 -0.18285,0.32993 -0.27432,0.62483 -0.27433,0.88459 10e-6,0.57151 0.30951,1.16058 0.92783,1.76659 0.61748,0.5948 2.12241,1.48399 4.50565,2.66339 0,0 9.48595,-3.17764 9.48595,-3.17764 0,0 0,-5.69941 0,-5.69941 0,-0.31662 0.0816,-0.56805 0.24469,-0.75427 0.14947,-0.18168 0.3532,-0.31473 0.61114,-0.39918 0.2442,-0.0799 0.44761,-0.0802 0.61026,-9.4e-4 0.16259,0.0793 0.24386,0.27691 0.24386,0.5929 0,0 0,10.07648 0,10.07648 0,0.30581 -0.0745,0.55036 -0.22353,0.73369 -0.16265,
0.18801 -0.36605,0.32368 -0.61024,0.40696 -0.23075,0.0787 -0.42089,0.0823 -0.57034,0.0107 -0.16308,-0.0772 -0.24465,-0.27406 -0.24465,-0.59068 0,0 0,-3.10993 0,-3.10993 0,0 -14.51647,4.88446 -14.51647,4.88446 0,0 0,2.41459 0,2.41459 3e-5,0.31156 -0.0843,0.56351 -0.25311,0.75592 -0.16882,0.19247 -0.38698,0.33424 -0.65457,0.42527 -0.25363,0.0863 -0.46511,0.0959 -0.63439,0.0286 -0.16931,-0.0777 -0.254,-0.27786 -0.25401,-0.60048 0,0 0,-3.73077 0,-3.73077"
+- id="path11614" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11616"
+ d="m 331.88928,278.46069 c 2.64617,-0.80181 4.8937,-0.77623 6.74868,0.0703 1.84704,0.83275 2.76758,2.23581 2.76758,4.21183 0,1.99643 -0.92054,3.98292 -2.76758,5.96587 -1.86865,1.99586 -4.11625,3.41592 -6.74868,4.25753 -2.66238,0.85118 -4.94945,0.87291 -6.8552,0.0586 -1.92815,-0.81342 -2.89541,-2.24206 -2.89543,-4.28324 2e-5,-2.02034 0.96023,-4.03876 2.87437,-6.04866 1.90583,-2.01148 4.19997,-3.42129 6.87626,-4.23225 m 0,1.31306 c -2.18973,0.66684 -4.06249,1.82173 -5.61412,3.46652 -1.55715,1.64029 -2.33781,3.29405 -2.33782,4.9569 10e-6,1.66286 0.7877,2.83345 2.35882,3.50996 1.55156,0.66817 3.41729,0.65387 5.59312,-0.0385 2.15125,-0.68456 3.99062,-1.84394 5.52202,-3.47635 1.52598,-1.63685 2.28696,-3.26958 2.28696,-4.90255 0,-1.63295 -0.75418,-2.78878 -2.26649,-3.4693 -1.53133,-0.68895 -3.37749,-0.70594 -5.54249,-0.0467"
+- id="path11616" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11618"
+ d="m 324.5704,263.40235 c 0,0 -0.59083,0.16738 -0.59083,0.16738 -0.43659,0.12369 -0.74671,0.14914 -0.93008,0.0762 -0.18341,-0.0729 -0.27516,-0.20308 -0.27517,-0.39041 1e-5,-0.19771 0.0917,-0.38488 0.27517,-0.5615 0.18337,-0.17651 0.49349,-0.3263 0.93008,-0.44933 0,0 3.9937,-1.12534 3.9937,-1.12534 0.43222,-0.11147 0.73869,-0.13059 0.91967,-0.0576 0.18093,0.0626 0.27137,0.19209 0.27136,0.38837 10e-6,0.17563 -0.0765,0.34708 -0.2296,0.51438 -0.16703,0.16098 -0.43864,0.3051 -0.81498,0.43238 -0.99118,0.3429 -1.93559,1.09775 -2.83293,2.26567 -0.89916,1.15996 -1.34944,2.50989 -1.34945,4.04802 10e-6,1.94347 0.82283,3.17814 2.46382,3.70253 1.63489,0.52243 3.49981,0.47227 5.59179,-0.14678 2.24699,-0.66492 4.09236,-1.7593 5.54116,-3.28189 1.44397,-1.5175 2.16415,-3.14186 2.16415,-4.87689 0,-1.00018 -0.24446,-1.94558 -0.73378,-2.83696 -0.48988,-0.9026 -1.28029,-1.619 -2.3729,-2.14945 -0.27359,-0.13793 -0.41044,-0.28891 -0.41045,-0.45289 1e-5,-0.17419 0.0821,-0.34075 0.24632,-0
.49964 0.15045,-0.1652 0.34186,-0.28042 0.57418,-0.34571 0.58707,-0.16488 1.33,0.14264 2.22797,0.92121 1.45185,1.25125 2.17594,2.89386 2.17594,4.931 0,2.06772 -0.87312,4.02504 -2.6247,5.87761 -1.77237,1.85395 -4.0256,3.18955 -6.76716,4.0049 -2.8146,0.8371 -5.16475,0.84722 -7.04279,0.0237 -1.88612,-0.83751 -2.83222,-2.31465 -2.83224,-4.42874 2e-5,-2.00993 0.81209,-3.92834 2.43175,-5.75018"
+- id="path11618" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11620"
+ d="m 365.2873,324.42931 c 0,0 26.86883,-0.22742 26.86883,-0.22742 0.44274,-0.006 0.66393,0.11973 0.66393,0.37829 0,0.1628 -0.0777,0.33622 -0.23314,0.52034 -0.14356,0.17002 -0.3051,0.2895 -0.48467,0.35839 -0.14372,0.0552 -0.34141,0.0831 -0.59316,0.0837 0,0 -26.91257,0.28707 -26.91257,0.28707 -0.29454,3.9e-4 -0.48676,-0.0323 -0.57653,-0.0982 -0.0897,-0.0659 -0.13461,-0.16825 -0.13464,-0.30713 3e-5,-0.16862 0.0834,-0.34333 0.25001,-0.52404 0.15381,-0.18582 0.32673,-0.31424 0.51876,-0.3853 0.14082,-0.0521 0.35191,-0.0807 0.63318,-0.0857"
+- id="path11620" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11622"
+ d="m 366.45519,316.07608 c 0,0 10.51502,-3.79236 10.51502,-3.79236 -2.46784,-0.59854 -3.70731,-1.95353 -3.70733,-4.06227 2e-5,-1.80468 0.83926,-3.64326 2.51264,-5.51006 1.65423,-1.85493 3.67873,-3.19501 6.068,-4.02221 2.39983,-0.83081 4.42136,-0.88869 6.07011,-0.17943 1.64209,0.6968 2.46064,1.91342 2.46064,3.65195 0,2.11316 -1.19227,4.30365 -3.58738,6.58151 0,0 2.99169,-1.07899 2.99169,-1.07899 0,0 0,2.84044 0,2.84044 0,0.28837 -0.0722,0.52138 -0.21683,0.69912 -0.14463,0.17779 -0.32548,0.30634 -0.5426,0.38563 -0.22932,0.0837 -0.41044,0.0873 -0.54332,0.0106 -0.14501,-0.0723 -0.21753,-0.25286 -0.21753,-0.54177 0,0 0,-1.63234 0,-1.63234 0,0 -20.18116,7.30873 -20.18116,7.30873 0,0 0,1.67289 0,1.67289 2e-5,0.29607 -0.0762,0.53606 -0.2286,0.72001 -0.15244,0.18399 -0.34947,0.32012 -0.59113,0.40837 -0.22903,0.0836 -0.41999,0.0891 -0.57285,0.0164 -0.15288,-0.0728 -0.22934,-0.25747 -0.22937,-0.55412 0,0 0,-2.92215 0,-2.92215 m 15.462,-16.18951 c -1.95683,0.6804 -3.61946,1.78
978 -4.98426,3.32953 -1.38179,1.54926 -2.07443,3.04045 -2.07444,4.46966 10e-6,1.42923 0.69265,2.42978 2.07444,3.00024 1.3648,0.57302 3.02743,0.5047 4.98426,-0.20103 1.94753,-0.70236 3.59383,-1.82272 4.9425,-3.35975 1.33211,-1.52762 1.99654,-2.99206 1.99654,-4.39706 0,-1.40498 -0.66443,-2.39877 -1.99654,-2.98281 -1.34867,-0.58171 -2.99497,-0.53592 -4.9425,0.14122"
+- id="path11622" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11624"
+ d="m 365.65142,292.81786 c 0,0 4.13622,-1.37513 4.13622,-1.37513 0,0 0,1.83197 0,1.83197 0,0 -4.13622,1.38424 -4.13622,1.38424 0,0 0,-1.84108 0,-1.84108 m 8.17532,-2.76207 c 0,0 14.43156,-4.79712 14.43156,-4.79712 0,0 0,-4.76701 0,-4.76701 0,-0.29852 0.0725,-0.53402 0.21753,-0.70646 0.13288,-0.16841 0.314,-0.28994 0.54332,-0.36461 0.21712,-0.0707 0.39797,-0.067 0.5426,0.0109 0.14457,0.0779 0.21683,0.26581 0.21683,0.56377 0,0 0,10.72732 0,10.72732 0,0.28838 -0.0722,0.51963 -0.21683,0.69384 -0.14463,0.17426 -0.32548,0.2984 -0.5426,0.37238 -0.22932,0.0781 -0.41044,0.0773 -0.54332,-0.003 -0.14501,-0.0758 -0.21753,-0.25817 -0.21753,-0.54708 0,0 0,-4.76701 0,-4.76701 0,0 -12.83813,4.28664 -12.83813,4.28664 0,0 0,3.59507 0,3.59507 2e-5,0.29348 -0.0748,0.53405 -0.22458,0.72179 -0.14978,0.17801 -0.33709,0.30517 -0.56199,0.38148 -0.2375,0.0806 -0.43136,0.0827 -0.58153,0.006 -0.15019,-0.0765 -0.22532,-0.26666 -0.22533,-0.5705 0,0 0,-4.837 0,-4.837"
+- id="path11624" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11626"
+ d="m 373.82674,276.64747 c 0,0 2.37852,-0.75206 2.37852,-0.75206 -1.1095,-0.51038 -1.87794,-1.04696 -2.3034,-1.60911 -0.42586,-0.56274 -0.63896,-1.28079 -0.63898,-2.15371 2e-5,-0.94158 0.25698,-1.87901 0.77041,-2.81146 0.37531,-0.66385 1.00004,-1.34972 1.87307,-2.05696 0.85877,-0.7117 1.74056,-1.20509 2.6452,-1.48083 0,0 9.70674,-2.9585 9.70674,-2.9585 0,0 0,-1.02563 0,-1.02563 0,-0.28889 0.0725,-0.5179 0.21753,-0.68701 0.13288,-0.16536 0.314,-0.28272 0.54332,-0.35212 0.21712,-0.0657 0.39797,-0.0578 0.5426,0.0233 0.14457,0.0812 0.21683,0.26599 0.21683,0.55434 0,0 0,3.24415 0,3.24415 0,0.298 -0.0722,0.53173 -0.21683,0.70126 -0.14463,0.16962 -0.32548,0.28793 -0.5426,0.35491 -0.22932,0.0708 -0.41044,0.0641 -0.54332,-0.0201 -0.14501,-0.0805 -0.21753,-0.26998 -0.21753,-0.56853 0,0 0,-1.01118 0,-1.01118 0,0 -9.44686,2.8934 -9.44686,2.8934 -1.1025,0.33769 -2.03388,0.94036 -2.79297,1.80854 -0.77294,0.87364 -1.15997,1.84458 -1.15998,2.9116 10e-6,0.8125 0.2123,1.45101 0.6365
2,1.91517 0.41136,0.4676 1.44414,0.993 3.09369,1.57481 0,0 9.6696,-3.0574 9.6696,-3.0574 0,0 0,-1.37231 0,-1.37231 0,-0.28891 0.0725,-0.51872 0.21753,-0.68941 0.13288,-0.16682 0.314,-0.28617 0.54332,-0.35807 0.21712,-0.0681 0.39797,-0.0623 0.5426,0.0174 0.14457,0.0796 0.21683,0.26361 0.21683,0.55197 0,0 0,3.95065 0,3.95065 0,0.28838 -0.0722,0.51815 -0.21683,0.68941 -0.14463,0.17132 -0.32548,0.29176 -0.5426,0.36132 -0.22932,0.0735 -0.41044,0.069 -0.54332,-0.0137 -0.14501,-0.0788 -0.21753,-0.2626 -0.21753,-0.55151 0,0 0,-1.37233 0,-1.37233 0,0 -12.83813,4.07843 -12.83813,4.07843 0,0 0,1.04184 0,1.04184 2e-5,0.29348 -0.0748,0.52771 -0.22458,0.70277 -0.14978,0.17512 -0.34333,0.30066 -0.58074,0.37662 -0.225,0.072 -0.41261,0.0684 -0.56278,-0.011 -0.15019,-0.0794 -0.22532,-0.26611 -0.22533,-0.56015 0,0 0,-2.27883 0,-2.27883"
+- id="path11626" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11628"
+ d="m 411.64505,307.26962 c 0,0 24.01211,0.30708 24.01211,0.30708 0.39638,0.003 0.59442,0.12622 0.59442,0.37088 0,0.15404 -0.0695,0.31662 -0.20874,0.48781 -0.12853,0.15807 -0.27316,0.26797 -0.43393,0.32965 -0.12866,0.0494 -0.30564,0.0719 -0.53101,0.0676 0,0 -24.04906,-0.25383 -24.04906,-0.25383 -0.26273,-0.005 -0.43418,-0.04 -0.51425,-0.10399 -0.08,-0.064 -0.12006,-0.16151 -0.12008,-0.29267 2e-5,-0.15925 0.0744,-0.32263 0.22299,-0.49006 0.13719,-0.1725 0.29143,-0.29043 0.46272,-0.35381 0.12562,-0.0465 0.31391,-0.0694 0.56483,-0.0687"
+- id="path11628" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11630"
+ d="m 426.79297,283.70541 c 0,0 0,11.77875 0,11.77875 1.78379,-0.84739 3.21685,-1.98723 4.30308,-3.41944 1.07237,-1.43341 1.60743,-2.91786 1.60743,-4.45634 0,-0.85571 -0.16747,-1.69337 -0.50261,-2.51354 -0.33545,-0.82085 -0.77954,-1.43139 -1.33267,-1.83151 -0.16283,-0.1167 -0.24428,-0.23897 -0.24428,-0.36678 0,-0.14603 0.0706,-0.29833 0.21172,-0.45687 0.13023,-0.15468 0.28754,-0.26399 0.47187,-0.32796 0.18426,-0.0639 0.36301,-0.053 0.53626,0.0327 0.54092,0.24935 1.04869,0.85091 1.52344,1.80407 0.46339,0.9467 0.69488,2.00574 0.69488,3.17799 0,1.96287 -0.75959,3.87613 -2.28327,5.74532 -1.54063,1.87147 -3.40957,3.20872 -5.61156,4.00955 -2.01574,0.7331 -3.75348,0.74237 -5.20943,0.0229 -1.46137,-0.73138 -2.19411,-2.02497 -2.19413,-3.87871 2e-5,-1.90933 0.75511,-3.7453 2.26094,-5.50281 1.48895,-1.74687 3.4139,-3.01888 5.76833,-3.81736 m -1.40103,1.65782 c -1.5332,0.76449 -2.78409,1.80947 -3.74992,3.13515 -0.96821,1.31975 -1.45323,2.66086 -1.45324,4.02086 10e-6,1.36002 0.4
7946,2.35846 1.43656,2.99416 0.9548,0.63415 2.2113,0.78823 3.7666,0.4644 0,0 0,-10.61457 0,-10.61457"
+- id="path11630" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11632"
+ d="m 419.26727,277.96614 c 0,0 0,-6.33569 0,-6.33569 0,-0.27787 0.0671,-0.49899 0.20124,-0.66333 0.13412,-0.16426 0.30727,-0.28109 0.5194,-0.3505 0.20088,-0.0657 0.36819,-0.0603 0.50199,0.0161 0.13376,0.0764 0.20062,0.25331 0.20061,0.53068 0,0 0,6.32415 0,6.32415 0,0 9.23228,-3.10449 9.23228,-3.10449 0.79344,-0.2668 1.45519,-0.75378 1.98594,-1.46062 0.53001,-0.71496 0.79475,-1.58641 0.79475,-2.6151 0,-0.77379 -0.13505,-1.56672 -0.40528,-2.37925 -0.28125,-0.80953 -0.59519,-1.40852 -0.94191,-1.79678 -0.14094,-0.13644 -0.21142,-0.26397 -0.21142,-0.38258 0,-0.14593 0.0705,-0.29655 0.21142,-0.45185 0.13007,-0.15168 0.28715,-0.25741 0.47124,-0.31724 0.16236,-0.0527 0.31384,-0.0427 0.45444,0.03 0.35669,0.17539 0.74542,0.75863 1.1661,1.74904 0.40946,0.98379 0.61402,1.98873 0.61402,3.01559 0,1.33583 -0.37153,2.52358 -1.11565,3.56475 -0.74557,1.0432 -1.75277,1.77967 -3.02365,2.20894 0,0 -9.23228,3.11843 -9.23228,3.11843 0,0 0,2.14966 0,2.14966 10e-6,0.27737 -0.0668,0.49896 -
0.20061,0.66483 -0.1338,0.1659 -0.30669,0.28508 -0.51874,0.3575 -0.20097,0.0686 -0.36853,0.0657 -0.50265,-0.009 -0.13414,-0.0746 -0.20124,-0.25088 -0.20124,-0.52876 0,0 0,-2.15358 0,-2.15358 0,0 -4.18238,1.4127 -4.18238,1.4127 -0.33922,0.11459 -0.58252,0.14087 -0.72973,0.0787 -0.14722,-0.0622 -0.22086,-0.17718 -0.22088,-0.345 2e-5,-0.17715 0.0737,-0.34647 0.22088,-0.50787 0.14721,-0.16136 0.39051,-0.29909 0.72973,-0.41316 0,0 4.18238,-1.40638 4.18238,-1.40638"
+- id="path11632" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11634"
+ d="m 420.69051,253.20339 c 0,0 -0.46826,0.14288 -0.46826,0.14288 -0.34597,0.10557 -0.59169,0.125 -0.73698,0.0582 -0.14531,-0.0668 -0.218,-0.18361 -0.218,-0.35035 0,-0.17598 0.0727,-0.34163 0.218,-0.49694 0.14529,-0.15523 0.39101,-0.28539 0.73698,-0.39045 0,0 3.16649,-0.96139 3.16649,-0.96139 0.34288,-0.0949 0.58603,-0.10885 0.72963,-0.042 0.14356,0.0576 0.21532,0.17385 0.21531,0.34869 10e-6,0.15646 -0.0607,0.3084 -0.18218,0.45586 -0.13253,0.14169 -0.34802,0.26728 -0.64659,0.37679 -0.78619,0.2952 -1.53512,0.95764 -2.24655,1.98819 -0.71271,1.02321 -1.06957,2.22014 -1.06958,3.5894 10e-6,1.73008 0.65213,2.83849 1.9531,3.32402 1.29666,0.48391 2.77641,0.46056 4.43715,-0.0671 1.78476,-0.56711 3.25127,-1.52194 4.40311,-2.86347 1.14841,-1.33751 1.72134,-2.77856 1.72134,-4.32615 0,-0.89212 -0.19449,-1.7379 -0.58375,-2.53793 -0.38965,-0.80994 -1.01825,-1.45675 -1.88698,-1.9406 -0.21749,-0.12568 -0.32627,-0.26166 -0.32628,-0.40785 10e-6,-0.15531 0.0653,-0.303 0.1958,-0.44306 0
.11961,-0.14581 0.27178,-0.24668 0.45648,-0.30261 0.4668,-0.14131 1.05762,0.1402 1.77188,0.84341 1.15518,1.13056 1.73146,2.60329 1.73146,4.42074 0,1.84473 -0.69488,3.58146 -2.08843,5.21464 -1.40947,1.63345 -3.20043,2.79857 -5.37817,3.49381 -2.23421,0.71326 -4.09853,0.69501 -5.58755,-0.06 -1.49471,-0.76715 -2.24422,-2.09261 -2.24424,-3.97415 2e-5,-1.78885 0.64334,-3.48767 1.92681,-5.09249"
+- id="path11634" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11636"
+ d="m 453.1278,291.91445 c 0,0 21.58792,0.73488 21.58792,0.73488 0.35694,0.01 0.53529,0.13079 0.53529,0.36296 0,0.14619 -0.0626,0.29918 -0.18798,0.45905 -0.11574,0.14762 -0.24598,0.24921 -0.39075,0.30475 -0.11586,0.0445 -0.27522,0.0626 -0.47815,0.0543 0,0 -21.61942,-0.68698 -21.61942,-0.68698 -0.2358,-0.01 -0.38968,-0.046 -0.46153,-0.10803 -0.0718,-0.0621 -0.10775,-0.15523 -0.10778,-0.27948 3e-5,-0.15087 0.0668,-0.30427 0.20013,-0.46014 0.12312,-0.16089 0.26156,-0.26976 0.4153,-0.32665 0.11274,-0.0417 0.28175,-0.0599 0.50697,-0.0547"
+- id="path11636" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11638"
+ d="m 472.79955,269.90469 c 0,0 -1.79464,0.62799 -1.79464,0.62799 1.518,0.95341 2.27463,2.29087 2.27463,4.01534 0,1.06055 -0.32478,1.98337 -0.97519,2.7695 -0.85604,1.02552 -1.85568,1.74546 -3.00009,2.15898 0,0 -8.05232,2.9096 -8.05232,2.9096 0,0 0,1.48567 0,1.48567 1e-5,0.26294 -0.0601,0.47325 -0.18028,0.63098 -0.12024,0.15777 -0.2756,0.27137 -0.46615,0.3408 -0.1806,0.0658 -0.33116,0.0636 -0.45168,-0.007 -0.12052,-0.0703 -0.18081,-0.23708 -0.18082,-0.50048 0,0 0,-2.59453 0,-2.59453 0,0 9.33125,-3.35779 9.33125,-3.35779 0.80244,-0.28875 1.46167,-0.75092 1.97844,-1.38632 0.51605,-0.6345 0.7738,-1.28824 0.7738,-1.96192 0,-1.77056 -0.91511,-3.07222 -2.75224,-3.90813 0,0 -8.05232,2.81768 -8.05232,2.81768 0,0 0,2.03785 0,2.03785 1e-5,0.26295 -0.0601,0.47262 -0.18028,0.62905 -0.12024,0.1565 -0.2756,0.26844 -0.46615,0.33583 -0.1806,0.0639 -0.33116,0.0601 -0.45168,-0.0114 -0.12052,-0.0715 -0.18081,-0.23899 -0.18082,-0.5024 0,0 0,-3.14768 0,-3.14768 0,0 11.60189,-4.04242 11.6
0189,-4.04242 0,0 0,-0.92043 0,-0.92043 0,-0.25926 0.0584,-0.46532 0.1752,-0.61814 0.10702,-0.14937 0.25292,-0.25603 0.43764,-0.31999 0.1749,-0.0605 0.3206,-0.0548 0.43711,0.017 0.11648,0.0718 0.1747,0.23717 0.1747,0.49599 0,0 0,2.00603 0,2.00603"
+- id="path11638" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11640"
+ d="m 460.80106,258.07986 c -0.29085,0.0955 -0.50162,0.11202 -0.63216,0.0495 -0.13057,-0.0625 -0.19588,-0.17279 -0.19589,-0.33084 1e-5,-0.16682 0.0653,-0.32426 0.19589,-0.47233 0.13054,-0.14798 0.35135,-0.27278 0.66224,-0.37438 0,0 2.15906,-0.70548 2.15906,-0.70548 0.29888,-0.0976 0.51292,-0.11518 0.64227,-0.0526 0.12933,0.0625 0.19397,0.17679 0.19396,0.34273 10e-6,0.1485 -0.0547,0.29308 -0.16411,0.43379 -0.10944,0.13202 -0.28861,0.24763 -0.5376,0.34683 -0.59825,0.24893 -1.09254,0.68261 -1.48245,1.30134 -0.56058,0.90354 -0.8412,1.94781 -0.84121,3.1318 10e-6,1.23662 0.28564,2.10094 0.85621,2.59241 0.42987,0.37163 0.90912,0.46784 1.43756,0.28913 0.59734,-0.20199 1.09438,-0.67563 1.49152,-1.42055 0.27777,-0.51224 0.49089,-1.37741 0.63951,-2.59544 0.18817,-1.58801 0.40099,-2.71723 0.63839,-3.38792 0.34596,-0.95843 0.82481,-1.74203 1.43603,-2.35072 0.61022,-0.61634 1.2685,-1.03937 1.97459,-1.26953 1.04682,-0.3412 1.9786,-0.19963 2.79622,0.42294 0.80608,0.62439 1.20845,1.
79399 1.20845,3.50983 0,1.71586 -0.48969,3.28655 -1.47106,4.71495 0.33065,-0.11206 0.54445,-0.16723 0.64159,-0.16569 0.0971,0.002 0.17964,0.0384 0.24758,0.11023 0.0679,0.0633 0.1019,0.15093 0.1019,0.26309 0,0.15531 -0.0631,0.30617 -0.18926,0.45266 -0.12623,0.14653 -0.33509,0.26942 -0.62672,0.3687 0,0 -2.53239,0.86214 -2.53239,0.86214 -0.2939,0.10005 -0.50466,0.12411 -0.63217,0.0721 -0.12755,-0.0607 -0.19133,-0.17353 -0.19134,-0.3384 10e-6,-0.1562 0.0638,-0.308 0.19134,-0.45539 0.1177,-0.15268 0.27947,-0.26389 0.48525,-0.33364 0.45037,-0.15263 0.82688,-0.37983 1.12976,-0.68154 0.46848,-0.46136 0.85842,-1.07305 1.17008,-1.83503 0.30166,-0.7667 0.4524,-1.62916 0.4524,-2.58786 0,-1.41643 -0.29667,-2.37228 -0.89074,-2.86815 -0.59504,-0.49666 -1.22527,-0.63648 -1.89089,-0.41854 -0.76499,0.2505 -1.37912,0.80339 -1.84163,1.65907 -0.46309,0.86548 -0.77378,2.00772 -0.93171,3.42636 -0.15797,1.41055 -0.36543,2.45523 -0.62245,3.13395 -0.25718,0.6792 -0.64331,1.27172 -1.15879,1.77774 -0.5
1618,0.50673 -1.07288,0.8617 -1.6703,1.06463 -1.07777,0.36609 -1.93324,0.19205 -2.56488,-0.52385 -0.64274,-0.71374 -0.96453,-1.71681 -0.96454,-3.00827 10e-6,-1.52867 0.42733,-2.91265 1.28049,-4.14979"
+- id="path11640" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11642"
+ d="m 459.97301,247.15701 c 0,0 3.18159,-0.9963 3.18159,-0.9963 -1.47732,-0.974 -2.42873,-1.75239 -2.85014,-2.33274 -0.43193,-0.58669 -0.64809,-1.18333 -0.6481,-1.78942 10e-6,-0.65879 0.25637,-1.34729 0.76855,-2.0648 0.50146,-0.72222 0.88211,-1.12235 1.14232,-1.20107 0.19006,-0.0575 0.35002,-0.0489 0.47993,0.0256 0.11989,0.0688 0.17982,0.1863 0.17982,0.3526 0,0.0875 -0.015,0.16649 -0.045,0.23686 -0.04,0.0735 -0.15485,0.22213 -0.34476,0.44622 -0.35007,0.41312 -0.59032,0.75359 -0.72054,1.0212 -0.13023,0.26772 -0.19537,0.51122 -0.19538,0.73043 1e-5,0.4823 0.22044,0.99766 0.66089,1.54559 0.43995,0.53853 1.5126,1.37834 3.21245,2.51597 0,0 6.78021,-2.1232 6.78021,-2.1232 0,0 0,-4.82256 0,-4.82256 0,-0.26791 0.0584,-0.47591 0.1752,-0.62398 0.10702,-0.14502 0.25292,-0.24575 0.43764,-0.3022 0.1749,-0.0534 0.3206,-0.0418 0.43711,0.0348 0.11648,0.0766 0.1747,0.24858 0.1747,0.51604 0,0 0,8.52884 0,8.52884 0,0.25885 -0.0534,0.46137 -0.16014,0.60759 -0.1165,0.14939 -0.2622,0.252
-0.43709,0.30783 -0.16526,0.0528 -0.30142,0.0444 -0.40844,-0.0251 -0.11677,-0.0751 -0.17518,-0.24658 -0.17518,-0.51448 0,0 0,-2.63151 0,-2.63151 0,0 -10.36676,3.2618 -10.36676,3.2618 0,0 0,2.03785 0,2.03785 10e-6,0.26295 -0.0601,0.4705 -0.18028,0.6227 -0.12024,0.15225 -0.2756,0.25871 -0.46615,0.31938 -0.1806,0.0575 -0.33116,0.0528 -0.45168,-0.0142 -0.12052,-0.0758 -0.18081,-0.24977 -0.18082,-0.52195 0,0 0,-3.14768 0,-3.14768"
+- id="path11642" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11644"
+ d="m 490.46613,278.09337 c 0,0 19.51315,1.07897 19.51315,1.07897 0.32311,0.0156 0.48456,0.13389 0.48456,0.35479 0,0.13909 -0.0567,0.28355 -0.17017,0.43343 -0.10477,0.1384 -0.22267,0.23275 -0.35371,0.28303 -0.10488,0.0402 -0.24913,0.0546 -0.43281,0.0432 0,0 -19.54022,-1.03558 -19.54022,-1.03558 -0.21281,-0.0136 -0.35168,-0.0505 -0.41653,-0.11078 -0.0648,-0.0602 -0.0972,-0.14937 -0.0973,-0.2674 2e-5,-0.14332 0.0603,-0.28787 0.18061,-0.4336 0.11111,-0.15068 0.23606,-0.25167 0.37481,-0.30302 0.10175,-0.0376 0.25429,-0.052 0.45757,-0.043"
+- id="path11644" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11646"
+ d="m 496.64736,267.31812 c 0,0 0,-5.70821 0,-5.70821 1e-5,-0.25036 0.0545,-0.4488 0.16336,-0.59533 0.10888,-0.14646 0.24944,-0.24974 0.42166,-0.30985 0.1631,-0.0569 0.29895,-0.0501 0.40758,0.0203 0.10862,0.0704 0.16292,0.23055 0.1629,0.4805 0,0 0,5.69885 0,5.69885 0,0 7.50564,-2.68778 7.50564,-2.68778 0.64587,-0.23128 1.18465,-0.66285 1.61683,-1.29443 0.43164,-0.63901 0.64726,-1.42241 0.64726,-2.35081 0,-0.69833 -0.10999,-1.41548 -0.33009,-2.15179 -0.22904,-0.73368 -0.48469,-1.27767 -0.76701,-1.63184 -0.11476,-0.12466 -0.17215,-0.2405 -0.17215,-0.34752 0,-0.13168 0.0574,-0.26682 0.17215,-0.40542 0.1059,-0.13545 0.23381,-0.22916 0.38372,-0.28115 0.13222,-0.0458 0.25557,-0.0351 0.37008,0.032 0.2905,0.16215 0.60714,0.69277 0.94983,1.59129 0.33359,0.89253 0.50026,1.80192 0.50026,2.72882 0,1.2058 -0.3027,2.27359 -0.90889,3.20459 -0.60725,0.93264 -1.42741,1.58517 -2.46199,1.95722 0,0 -7.50564,2.69912 -7.50564,2.69912 0,0 0,1.93711 0,1.93711 2e-5,0.24995 -0.0543,0.44878 -
0.1629,0.59654 -0.10863,0.14781 -0.24901,0.25299 -0.42117,0.31555 -0.16316,0.0593 -0.29919,0.0545 -0.40807,-0.0144 -0.10889,-0.0689 -0.16335,-0.22859 -0.16336,-0.47895 0,0 0,-1.94029 0,-1.94029 0,0 -3.39317,1.22022 -3.39317,1.22022 -0.27506,0.0989 -0.47232,0.11952 -0.59167,0.0617 -0.11935,-0.0578 -0.17905,-0.1623 -0.17906,-0.31341 1e-5,-0.1595 0.0597,-0.31103 0.17906,-0.45451 0.11935,-0.14346 0.31661,-0.26444 0.59167,-0.36295 0,0 3.39317,-1.2151 3.39317,-1.2151"
+- id="path11646" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11648"
+ d="m 496.64736,254.57478 c 0,0 1.1555,-0.39287 1.1555,-0.39287 -1.04204,-0.53851 -1.56422,-1.25928 -1.56423,-2.1611 10e-6,-0.54276 0.15902,-1.07194 0.4768,-1.5872 0.30846,-0.51177 0.77968,-1.0107 1.413,-1.49648 -0.63332,-0.25606 -1.10454,-0.57087 -1.413,-0.9443 -0.31778,-0.37911 -0.47679,-0.81095 -0.4768,-1.29526 10e-6,-0.75987 0.26801,-1.4528 0.80338,-2.07811 0.68847,-0.81606 1.4388,-1.35555 2.25059,-1.61921 0,0 7.84421,-2.54762 7.84421,-2.54762 0,0 0,-0.87553 0,-0.87553 0,-0.24662 0.0528,-0.44043 0.15853,-0.58142 0.0968,-0.13808 0.22885,-0.23407 0.396,-0.28799 0.15827,-0.051 0.29012,-0.0402 0.39556,0.0325 0.1054,0.0727 0.15809,0.23217 0.15809,0.47839 0,0 0,1.90832 0,1.90832 0,0 -8.84429,2.88563 -8.84429,2.88563 -0.5769,0.18823 -1.05537,0.50669 -1.43501,0.95549 -0.38003,0.4493 -0.57021,0.88671 -0.57021,1.31186 0,0.38349 0.15849,0.73555 0.47524,1.05599 0.30744,0.32315 0.91699,0.60401 1.82708,0.84233 0,0 7.43901,-2.47237 7.43901,-2.47237 0,0 0,-0.8632 0,-0.8632 0,-0
.24662 0.0528,-0.44083 0.15853,-0.58262 0.0968,-0.13882 0.22885,-0.23581 0.396,-0.291 0.15827,-0.0522 0.29012,-0.0424 0.39556,0.0295 0.1054,0.0719 0.15809,0.23096 0.15809,0.47718 0,0 0,1.90833 0,1.90833 0,0 -8.76324,2.92573 -8.76324,2.92573 -0.60382,0.2016 -1.10029,0.53384 -1.48893,0.99686 -0.39811,0.45823 -0.59734,0.89179 -0.59734,1.30027 0,0.37514 0.13132,0.70184 0.39381,0.97992 0.37079,0.38275 1.00745,0.69975 1.90851,0.95082 0,0 7.43901,-2.52926 7.43901,-2.52926 0,0 0,-0.87553 0,-0.87553 0,-0.24663 0.0528,-0.44125 0.15853,-0.58383 0.0968,-0.13956 0.22885,-0.23756 0.396,-0.29402 0.15827,-0.0534 0.29012,-0.0446 0.39556,0.0265 0.1054,0.0711 0.15809,0.22974 0.15809,0.47597 0,0 0,2.78246 0,2.78246 0,0.24624 -0.0527,0.4408 -0.15809,0.58372 -0.10544,0.14296 -0.23729,0.24165 -0.39556,0.29606 -0.16715,0.0574 -0.29916,0.0494 -0.396,-0.0242 -0.10568,-0.0706 -0.15853,-0.22916 -0.15853,-0.4758 0,0 0,-0.87553 0,-0.87553 0,0 -9.33395,3.18747 -9.33395,3.18747 0,0 0,0.88732 0,0.88732 2e-5
,0.24995 -0.0543,0.44772 -0.1629,0.59335 -0.10863,0.14567 -0.24901,0.2481 -0.42117,0.30728 -0.16316,0.0561 -0.29919,0.0487 -0.40807,-0.0224 -0.10889,-0.0711 -0.16335,-0.2318 -0.16336,-0.48216 0,0 0,-1.94029 0,-1.94029"
+- id="path11648" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11650"
+ d="m 496.64736,238.37646 c 0,0 2.07718,-0.65844 2.07718,-0.65844 -0.82215,-0.36416 -1.44231,-0.83933 -1.85938,-1.42537 -0.41755,-0.58674 -0.62652,-1.36885 -0.62653,-2.34582 10e-6,-1.03542 0.26347,-2.07259 0.78978,-3.11032 0.52556,-1.03618 1.25819,-1.93417 2.19662,-2.69363 0.92694,-0.76299 1.90073,-1.2984 2.92097,-1.60707 1.61375,-0.48819 2.98978,-0.36858 4.13085,0.35538 1.12853,0.71608 1.69142,1.84919 1.69142,3.40109 0,1.84751 -0.80503,3.59989 -2.42074,5.26294 0,0 6.65254,-2.10877 6.65254,-2.10877 0,0 0,-2.49725 0,-2.49725 -10e-6,-0.24483 0.0477,-0.43522 0.1432,-0.57115 0.10412,-0.1386 0.23855,-0.23361 0.40327,-0.28507 0.15597,-0.0487 0.28589,-0.0363 0.3898,0.0372 0.10387,0.0735 0.1558,0.23241 0.1558,0.47685 0,0 0,4.90103 0,4.90103 0,0.24444 -0.0519,0.43629 -0.1558,0.57559 -0.0952,0.13657 -0.22517,0.23132 -0.3898,0.28425 -0.16472,0.0529 -0.29915,0.0432 -0.40327,-0.0295 -0.0955,-0.0754 -0.14321,-0.23555 -0.1432,-0.48037 0,0 0,-1.38329 0,-1.38329 0,0 -14.39721,4.5852
4 -14.39721,4.58524 0,0 0,1.41222 0,1.41222 2e-5,0.24994 -0.0543,0.4465 -0.1629,0.58972 -0.10863,0.14325 -0.24901,0.24256 -0.42117,0.29791 -0.16316,0.0524 -0.29919,0.042 -0.40807,-0.0315 -0.10889,-0.0735 -0.16335,-0.23544 -0.16336,-0.48579 0,0 0,-2.46606 0,-2.46606 m 5.49864,-10.78493 c -1.29819,0.39472 -2.4122,1.17378 -3.34025,2.33842 -0.93954,1.16219 -1.41027,2.37801 -1.41027,3.64515 0,1.27548 0.47073,2.20732 1.41027,2.79434 0.93705,0.58545 2.05103,0.6727 3.34025,0.26403 1.29338,-0.40998 2.40009,-1.19814 3.32187,-2.36328 0.91935,-1.16205 1.37812,-2.3711 1.37812,-3.62945 0,-1.24188 -0.45435,-2.15914 -1.36484,-2.75298 -0.92175,-0.59266 -2.03286,-0.69217 -3.33515,-0.29623"
+- id="path11650" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11652"
+ d="m 537.49915,265.34139 c 0,0 0,-0.4245 0,-0.4245 0,-0.44021 0.16106,-0.87799 0.48293,-1.313 0.31352,-0.43158 0.69498,-0.73132 1.14414,-0.89937 0.46455,-0.1738 0.85251,-0.15839 1.16415,0.0459 0.31134,0.19627 0.46691,0.50944 0.46691,0.93967 0,0 0,0.42241 0,0.42241 0,0.43806 -0.15557,0.87241 -0.46691,1.30334 -0.31963,0.43437 -0.7036,0.73677 -1.15213,0.90702 -0.46519,0.17659 -0.85469,0.16741 -1.16822,-0.0279 -0.31384,-0.20331 -0.47087,-0.52122 -0.47087,-0.95358"
+- id="path11652" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11654"
+ d="m 537.49915,250.86135 c 0,0 0,-0.4245 0,-0.4245 0,-0.4402 0.16106,-0.87446 0.48293,-1.30246 0.31352,-0.42473 0.69498,-0.71614 1.14414,-0.87438 0.46455,-0.16364 0.85251,-0.13977 1.16415,0.0713 0.31134,0.20308 0.46691,0.51965 0.46691,0.94987 0,0 0,0.42242 0,0.42242 0,0.43805 -0.15557,0.869 -0.46691,1.29313 -0.31963,0.4274 -0.7036,0.72141 -1.15213,0.88187 -0.46519,0.16644 -0.85469,0.14875 -1.16822,-0.0534 -0.31384,-0.21017 -0.47087,-0.53151 -0.47087,-0.96387"
+- id="path11654" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path11656"
+ d="m 537.49915,236.38131 c 0,0 0,-0.42449 0,-0.42449 0,-0.44021 0.16106,-0.87095 0.48293,-1.29191 0.31352,-0.41789 0.69498,-0.70097 1.14414,-0.8494 0.46455,-0.15351 0.85251,-0.12116 1.16415,0.0967 0.31134,0.20987 0.46691,0.52984 0.46691,0.96007 0,0 0,0.42241 0,0.42241 0,0.43806 -0.15557,0.86561 -0.46691,1.28294 -0.31963,0.42042 -0.7036,0.70604 -1.15213,0.85671 -0.46519,0.15627 -0.85469,0.13008 -1.16822,-0.0789 -0.31384,-0.21701 -0.47087,-0.54178 -0.47087,-0.97415"
+- id="path11656" />
++ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+- style="display:none"
+- inkscape:label="Debian"
++ inkscape:groupmode="layer"
+ id="layer5"
+- inkscape:groupmode="layer">
++ inkscape:label="Debian"
++ style="display:inline">
+ <g
+- inkscape:corner7="0.22429094 : -0.062018081 : 0.53531208 : 1"
+- inkscape:corner0="0.4922944 : 0.05733945 : 0 : 1"
+- inkscape:perspectiveID="#perspective3054"
+- id="g4111"
+- style="fill:#aad3d3;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+- sodipodi:type="inkscape:box3d"
+- transform="translate(0,-452.36218)"
+- inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+- inkscape:export-ydpi="90">
++ inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ transform="translate(0,-452.36218)"
++ sodipodi:type="inkscape:box3d"
++ style="fill:#aad3d3;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
++ id="g4111"
++ inkscape:perspectiveID="#perspective3054"
++ inkscape:corner0="0.4922944 : 0.05733945 : 0 : 1"
++ inkscape:corner7="0.22429094 : -0.062018081 : 0.53531208 : 1">
+ <path
+- d="M 133.59629,764.86429 252.05613,831.34849 540.56237,720.64621 415.24336,686.34695 z"
+- inkscape:box3dsidetype="13"
+- style="fill:#afafde;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4121"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#afafde;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="13"
++ d="M 133.59629,764.86429 252.05613,831.34849 540.56237,720.64621 415.24336,686.34695 z" />
+ <path
+- d="m 133.59629,684.88172 0,79.98257 281.64707,-78.51734 0,-58.86622 z"
+- inkscape:box3dsidetype="6"
+- style="fill:#353564;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4113"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#353564;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="6"
++ d="m 133.59629,684.88172 0,79.98257 281.64707,-78.51734 0,-58.86622 z" />
+ <path
+- d="m 415.24336,627.48073 125.31901,25.33341 0,67.83207 -125.31901,-34.29926 z"
+- inkscape:box3dsidetype="11"
+- style="fill:#e9e9ff;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4123"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#e9e9ff;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="11"
++ d="m 415.24336,627.48073 125.31901,25.33341 0,67.83207 -125.31901,-34.29926 z" />
+ <path
+- d="m 133.59629,684.88172 118.45984,48.97562 288.50624,-81.0432 -125.31901,-25.33341 z"
+- inkscape:box3dsidetype="5"
+- style="fill:#00b9f5;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4115"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#00b9f5;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="5"
++ d="m 133.59629,684.88172 118.45984,48.97562 288.50624,-81.0432 -125.31901,-25.33341 z" />
+ <path
+- d="m 252.05613,733.85734 0,97.49115 288.50624,-110.70228 0,-67.83207 z"
+- inkscape:box3dsidetype="14"
+- style="fill:#008bb8;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4119"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#008bb8;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="14"
++ d="m 252.05613,733.85734 0,97.49115 288.50624,-110.70228 0,-67.83207 z" />
+ <path
+- d="m 133.59629,684.88172 118.45984,48.97562 0,97.49115 -118.45984,-66.4842 z"
+- inkscape:box3dsidetype="3"
+- style="fill:#00ade5;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4117"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#00ade5;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="3"
++ d="m 133.59629,684.88172 118.45984,48.97562 0,97.49115 -118.45984,-66.4842 z" />
+ </g>
+ <g
+- transform="matrix(0.61031919,0,0,0.61031919,136.50792,89.854955)"
+- style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New Bold"
+- id="text9988"
+- inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+- inkscape:export-ydpi="90">
++ inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ id="text9988"
++ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New Bold"
++ transform="matrix(0.61031919,0,0,0.61031919,136.50792,89.854955)">
+ <path
+- inkscape:connector-curvature="0"
++ id="path9995"
+ d="m 188.59801,239.37973 c 0,0 10.80142,4.18005 10.80142,4.18005 -0.76616,-3.05917 -0.73057,-5.17362 0.0851,-6.39339 0.84106,-1.21417 2.36138,-2.05944 4.56041,-2.54399 3.36438,-0.74121 8.67469,-0.70434 15.98654,0.11115 4.98595,0.55071 8.9953,1.36554 12.03184,2.45026 2.59214,0.92602 4.30231,1.84095 5.11951,2.74446 0.79707,0.88127 0.47618,1.49409 -0.97048,1.83415 -1.28207,0.30141 -3.77637,0.20361 -7.46885,-0.2925 -3.67698,-0.49394 -6.07112,-0.61056 -7.19576,-0.35091 -1.46934,0.3393 -2.09539,1.44179 -1.87218,3.32952 0.26187,1.91063 1.40513,4.65856 3.4729,8.3019 0,0 30.03524,11.62336 30.03524,11.62336 0,0 15.65393,-4.11957 15.65393,-4.11957 2.59381,-0.68257 5.41952,-0.79884 8.49618,-0.35048 3.05257,0.41529 6.19038,1.21068 9.42837,2.39338 3.19708,1.16781 5.29058,2.28918 6.26454,3.36278 0.94452,1.04629 0.1181,1.93489 -2.49634,2.66251 0,0 -34.13326,9.49952 -34.13326,9.49952 -2.83088,0.78785 -5.87094,0.94375 -9.09895,0.46537 -3.24862,-0.51643 -6.4804,-1.44072 -9.68065,-2.7
6446 -3.10024,-1.28236 -4.99727,-2.47227 -5.70886,-3.572 -0.73485,-1.12824 0.30694,-2.05895 3.10831,-2.79621 0,0 6.8587,-1.80497 6.8587,-1.80497 0,0 -46.80164,-18.64214 -46.80164,-18.64214 0,0 -4.03596,0.93784 -4.03596,0.93784 -2.70867,0.62944 -5.46556,0.75303 -8.25329,0.36912 -2.79889,-0.41446 -5.49653,-1.1558 -8.08261,-2.21792 -2.50769,-1.02993 -3.9575,-1.9862 -4.36329,-2.87045 -0.42087,-0.90793 0.71271,-1.65692 3.38783,-2.24995 0,0 14.87133,-3.29643 14.87133,-3.29643"
+- id="path9995" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path9997"
+ d="m 318.69753,233.65347 c 7.81088,2.41917 14.56844,5.07064 20.25204,7.96924 5.7885,2.94264 9.1431,5.72809 9.96615,8.34264 0.79838,2.64066 -1.00301,4.6031 -5.45216,5.85289 -4.46386,1.25393 -11.15148,1.66904 -20.00626,1.23659 -8.898,-0.4557 -18.38088,-1.74499 -28.34354,-3.84206 -9.79574,-2.06193 -18.6433,-4.48749 -26.52662,-7.25379 -7.82927,-2.74735 -14.20756,-5.64394 -19.17016,-8.67619 -4.89257,-2.97384 -7.23458,-5.57586 -7.12327,-7.82898 0.14059,-2.21435 2.37339,-3.78147 6.67139,-4.72848 4.29012,-0.94517 10.38008,-1.19953 18.3213,-0.76824 7.94217,0.40759 16.43086,1.49423 25.55556,3.2805 9.21274,1.79636 17.82485,3.92867 25.85557,6.41588 m -9.12553,2.31728 c -6.4118,-2.03184 -13.27849,-3.60974 -20.62972,-4.75217 -9.83924,-1.51489 -17.12877,-1.70611 -22.00563,-0.58005 -4.33293,1.00051 -5.30614,2.74024 -2.84855,5.25406 2.51376,2.57126 7.47645,5.13939 14.96669,7.70184 6.2706,2.14521 13.7825,3.8011 22.51055,4.94615 8.74133,1.13263 15.33249,1.12147 19.68005,-0.0328 4.336
31,-1.15122 5.04492,-3.04688 2.20597,-5.65133 -2.84427,-2.56876 -7.48377,-4.85895 -13.87936,-6.8857"
+- id="path9997" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path9999"
+ d="m 370.18311,220.89138 c 7.87167,2.1472 14.79353,4.49711 20.75003,7.06196 6.05519,2.59988 9.78662,5.05673 11.1054,7.35908 1.29936,2.32214 0.0231,4.04525 -3.87749,5.14096 -3.91087,1.09859 -10.07589,1.46092 -18.44725,1.07985 -8.41856,-0.40157 -17.5687,-1.53459 -27.35306,-3.37787 -9.6307,-1.81431 -18.46587,-3.95046 -26.48622,-6.3895 -7.97675,-2.42578 -14.6373,-4.98669 -20.00949,-7.67132 -5.30105,-2.63705 -8.1214,-4.94735 -8.55222,-6.94998 -0.39449,-1.97048 1.33688,-3.36597 5.164,-4.20923 3.82211,-0.84206 9.50591,-1.06776 17.09603,-0.68142 7.58396,0.3651 15.83663,1.33558 24.84202,2.92873 9.08222,1.6007 17.66471,3.49833 25.76825,5.70874 m -8.07385,2.05333 c -6.47949,-1.80327 -13.29219,-3.20538 -20.46816,-4.22173 -9.60797,-1.34865 -16.51634,-1.52019 -20.848,-0.52003 -3.84631,0.88815 -4.35747,2.43275 -1.46283,4.66292 2.95687,2.27808 8.20823,4.55087 15.82272,6.81614 6.36681,1.89411 13.7807,3.35532 22.21491,4.3658 8.43901,0.99896 14.61124,0.99061 18.43477,-0.0245 3.81601,
-1.01309 4.07248,-2.68403 0.84721,-4.98329 -3.22688,-2.27084 -8.08432,-4.29842 -14.54062,-6.09528"
+- id="path9999" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path10001"
+ d="m 369.35032,208.21091 c 0,0 40.18029,10.31554 40.18029,10.31554 4.54941,1.16799 7.90985,1.85733 10.04607,2.05851 3.35439,0.31973 6.36087,0.12804 8.99839,-0.57223 3.80233,-1.00946 4.92338,-2.51808 3.41338,-4.50415 -0.59265,-0.75666 -0.54527,-1.22149 0.13796,-1.39847 0.94028,-0.24357 2.78416,-0.20123 5.53983,0.12736 2.78771,0.32353 5.69044,0.85075 8.71788,1.58481 2.83553,0.68756 4.92392,1.38477 6.25775,2.09178 2.24812,1.1379 3.13828,2.53669 2.64599,4.20684 -0.55053,1.67203 -2.02066,2.85282 -4.41529,3.52548 -4.66368,1.31006 -11.25115,1.51999 -19.66772,0.62294 -8.39599,-0.91541 -16.83231,-2.48591 -25.2301,-4.68294 0,0 -44.30445,-11.59087 -44.30445,-11.59087 0,0 -2.80728,0.65233 -2.80728,0.65233 -1.88196,0.43734 -4.10034,0.52199 -6.64393,0.25302 -2.57229,-0.29043 -5.25643,-0.80912 -8.04218,-1.5525 -2.70522,-0.72188 -4.48808,-1.39261 -5.35902,-2.01314 -0.89888,-0.63794 -0.40471,-1.16405 1.47199,-1.58009 0,0 2.79988,-0.62063 2.79988,-0.62063 0,0 -16.0131,-4.18933 -16.0
131,-4.18933 -4.15526,-1.08708 -6.72467,-1.9241 -7.73865,-2.51744 -1.03741,-0.60902 -0.98184,-1.03024 0.15945,-1.26617 1.11384,-0.23015 2.89308,-0.19004 5.34585,0.12065 2.43006,0.29236 5.71138,0.96864 9.87337,2.03715 0,0 16.03516,4.11673 16.03516,4.11673 0,0 13.81074,-3.06134 13.81074,-3.06134 1.7648,-0.39115 3.87091,-0.45617 6.32889,-0.19576 2.42845,0.24118 5.0259,0.70062 7.80255,1.38148 2.73549,0.67079 4.62059,1.3128 5.64569,1.9254 0.99363,0.59583 0.6121,1.09974 -1.15489,1.51031 0,0 -13.8345,3.21473 -13.8345,3.21473"
+- id="path10001" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path10003"
+ d="m 414.19529,197.79027 c 0,0 49.09089,11.29188 49.09089,11.29188 0,0 9.51455,-2.5039 9.51455,-2.5039 1.5833,-0.41664 3.71061,-0.48612 6.39269,-0.20922 2.64034,0.25642 5.58449,0.74526 8.845,1.46995 3.21279,0.71412 5.53419,1.39784 6.95389,2.0505 1.37743,0.63488 1.28518,1.1721 -0.28855,1.61008 0,0 -20.36165,5.66678 -20.36165,5.66678 -1.67346,0.46574 -3.90405,0.55615 -6.68041,0.27017 -2.81866,-0.30882 -5.88811,-0.86047 -9.19551,-1.6511 -3.21122,-0.76763 -5.44315,-1.48078 -6.70743,-2.1405 -1.30329,-0.67814 -1.1083,-1.23745 0.57268,-1.67985 0,0 4.12495,-1.08555 4.12495,-1.08555 0,0 -49.13122,-11.49283 -49.13122,-11.49283 0,0 -3.32684,0.77306 -3.32684,0.77306 -1.68527,0.39163 -3.76431,0.46707 -6.22722,0.22551 -2.49509,-0.26082 -5.14605,-0.72637 -7.94301,-1.39362 -2.71716,-0.64821 -4.55136,-1.25057 -5.51217,-1.80789 -0.99143,-0.57315 -0.63973,-1.04575 1.04522,-1.41928 0,0 3.32676,-0.73743 3.32676,-0.73743 0,0 -6.86908,-1.60682 -6.86908,-1.60682 -7.72281,-1.80653 -12.8825
,-3.51276 -15.55532,-5.12306 -2.65764,-1.59876 -1.86099,-2.81696 2.32262,-3.66964 1.84848,-0.37669 4.40558,-0.71108 7.66872,-1.00365 3.21822,-0.30802 5.92136,-0.35936 8.12214,-0.15455 2.22716,0.20095 4.56577,0.57073 7.02338,1.11149 2.64213,0.58139 4.52279,1.1234 5.63365,1.62529 1.06013,0.49218 1.15601,0.83283 0.28178,1.02017 -0.40571,0.087 -1.21582,0.17299 -2.43036,0.25814 -4.16009,0.26467 -7.30795,0.6235 -9.44187,1.07766 -2.2328,0.47529 -2.90043,1.00733 -1.98928,1.59704 0.88196,0.57571 2.62421,1.16376 5.23535,1.76437 0,0 6.87026,1.58029 6.87026,1.58029 0,0 10.36792,-2.29819 10.36792,-2.29819 1.59462,-0.35343 3.58152,-0.41186 5.9701,-0.1759 2.35624,0.21854 4.91761,0.6344 7.69391,1.25031 2.73418,0.6066 4.65441,1.18684 5.75196,1.74017 1.06391,0.53802 0.80425,0.99268 -0.78855,1.36278 0,0 -10.35995,2.40734 -10.35995,2.40734"
+- id="path10003" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path10005"
+ d="m 462.86528,187.90449 c -2.90569,-0.16593 -5.36269,-0.21815 -7.37595,-0.15683 -2.07622,0.0486 -3.71307,0.21108 -4.91243,0.48799 -2.39002,0.55188 -3.09951,1.24612 -2.11015,2.08594 0.42438,0.3709 1.25961,0.68923 2.50703,0.95438 1.43917,0.30592 3.27869,0.50507 5.51653,0.59672 1.65829,0.0597 4.08262,-0.0775 7.26301,-0.41077 5.84081,-0.60338 10.42557,-0.90895 13.78419,-0.91984 4.42293,-0.011 9.54763,0.32933 15.40812,1.02483 5.9049,0.7008 11.57911,1.60001 17.03778,2.70347 7.51845,1.51988 12.98207,3.05778 16.33947,4.61419 4.979,2.29033 5.3772,4.05686 1.0617,5.26911 -1.74579,0.49041 -3.95512,0.82442 -6.62498,1.0004 -2.58257,0.18616 -5.59293,0.22359 -9.02452,0.11209 0.63516,0.28397 1.03505,0.52794 1.19856,0.73158 0.16356,0.20401 0.064,0.35687 -0.30016,0.45818 -0.97288,0.27068 -2.879,0.24588 -5.70939,-0.0742 -2.87272,-0.34021 -6.9451,-1.08148 -12.17878,-2.2148 0,0 -7.21961,-1.56336 -7.21961,-1.56336 -5.09134,-1.1025 -8.37985,-1.95133 -9.90167,-2.55303 -1.5588,-0.61762 -1.
8621,-1.04479 -0.91937,-1.28407 0.75656,-0.19198 2.09291,-0.20186 4.01286,-0.0297 1.85597,0.1581 4.61964,0.56195 8.30756,1.21468 3.69149,0.33625 6.93021,0.48413 9.70546,0.44275 2.70434,-0.056 4.90971,-0.31064 6.61127,-0.76242 2.77196,-0.73591 3.38675,-1.61784 1.87353,-2.64169 -0.78919,-0.49759 -2.00028,-0.91325 -3.63224,-1.24812 -2.70691,-0.55542 -5.4427,-0.87941 -8.21759,-0.97439 -2.77232,-0.0949 -6.38748,0.14627 -10.86946,0.72618 -6.6715,0.88095 -13.31679,1.01463 -19.85457,0.39749 -6.43141,-0.5993 -13.04559,-1.63447 -19.79212,-3.09094 -6.82592,-1.4736 -11.45826,-2.90095 -13.94953,-4.28347 -3.37925,-1.85317 -2.96738,-3.22257 1.14981,-4.12973 1.42276,-0.31344 3.19198,-0.52707 5.30887,-0.64174 2.07491,-0.13099 4.5307,-0.15741 7.37162,-0.0794 -0.45722,-0.25351 -0.73544,-0.45733 -0.83571,-0.61184 -0.0802,-0.1585 0.0166,-0.26808 0.29048,-0.32883 0.82077,-0.1819 2.44849,-0.14089 4.89001,0.12332 2.38932,0.25295 5.8038,0.82932 10.27286,1.73557 0,0 4.5771,0.92817 4.5771,0.92817 4.12
998,0.83752 6.80238,1.44722 7.99164,1.82436 2.2679,0.73357 2.87579,1.23007 1.80718,1.48552 -0.72062,0.17229 -2.08136,0.17497 -4.07847,0.008 -1.99347,-0.16663 -4.25567,-0.47572 -6.77994,-0.92582"
+- id="path10005" />
++ inkscape:connector-curvature="0" />
+ </g>
+ <g
+- inkscape:groupmode="layer"
+- id="layer1"
++ style="display:inline"
+ inkscape:label="ExtraImages"
+- style="display:inline">
++ id="layer1"
++ inkscape:groupmode="layer">
+ <g
+- sodipodi:type="inkscape:box3d"
+- style="fill:#f0f0f0;fill-opacity:0.51111115;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;display:inline"
+- id="g3195"
+- inkscape:perspectiveID="#perspective5786"
++ inkscape:corner7="0.22235256 : 0.05733945 : 0.532878 : 1"
+ inkscape:corner0="0.4922944 : 0.12449455 : 0 : 1"
+- inkscape:corner7="0.22235256 : 0.05733945 : 0.532878 : 1">
++ inkscape:perspectiveID="#perspective5786"
++ id="g3195"
++ style="fill:#f0f0f0;fill-opacity:0.51111115;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;display:inline"
++ sodipodi:type="inkscape:box3d">
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path3205"
+- style="fill:#afafde;fill-rule:evenodd;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
++ d="M 133.59629,232.51954 253.10212,281.92761 540.69439,200.92065 414.29968,175.31088 z"
+ inkscape:box3dsidetype="13"
+- d="M 133.59629,232.51954 253.10212,281.92761 540.69439,200.92065 414.29968,175.31088 z" />
++ style="fill:#afafde;fill-rule:evenodd;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
++ id="path3205"
++ sodipodi:type="inkscape:box3dside" />
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path3197"
+- style="fill:#353564;fill-rule:evenodd;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
++ d="m 133.59629,187.5183 0,45.00124 280.70339,-57.20866 0,-33.16019 z"
+ inkscape:box3dsidetype="6"
+- d="m 133.59629,187.5183 0,45.00124 280.70339,-57.20866 0,-33.16019 z" />
++ style="fill:#353564;fill-rule:evenodd;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
++ id="path3197"
++ sodipodi:type="inkscape:box3dside" />
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path3207"
+- style="fill:#e9e9ff;fill-rule:evenodd;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
++ d="m 414.29968,142.15069 126.39471,20.50998 0,38.25998 -126.39471,-25.60977 z"
+ inkscape:box3dsidetype="11"
+- d="m 414.29968,142.15069 126.39471,20.50998 0,38.25998 -126.39471,-25.60977 z" />
++ style="fill:#e9e9ff;fill-rule:evenodd;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
++ id="path3207"
++ sodipodi:type="inkscape:box3dside" />
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path3199"
+- style="fill:#24b8eb;fill-opacity:1;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
++ d="M 133.59629,187.5183 253.10212,226.98839 540.69439,162.66067 414.29968,142.15069 z"
+ inkscape:box3dsidetype="5"
+- d="M 133.59629,187.5183 253.10212,226.98839 540.69439,162.66067 414.29968,142.15069 z" />
++ style="fill:#24b8eb;fill-opacity:1;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
++ id="path3199"
++ sodipodi:type="inkscape:box3dside" />
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path3203"
+- style="fill:#008bb8;fill-opacity:1;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
++ d="m 253.10212,226.98839 0,54.93922 287.59227,-81.00696 0,-38.25998 z"
+ inkscape:box3dsidetype="14"
+- d="m 253.10212,226.98839 0,54.93922 287.59227,-81.00696 0,-38.25998 z" />
++ style="fill:#008bb8;fill-opacity:1;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
++ id="path3203"
++ sodipodi:type="inkscape:box3dside" />
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path3201"
+- style="fill:#00ade5;fill-opacity:1;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
++ d="m 133.59629,187.5183 119.50583,39.47009 0,54.93922 -119.50583,-49.40807 z"
+ inkscape:box3dsidetype="3"
+- d="m 133.59629,187.5183 119.50583,39.47009 0,54.93922 -119.50583,-49.40807 z" />
++ style="fill:#00ade5;fill-opacity:1;stroke:#253237;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none"
++ id="path3201"
++ sodipodi:type="inkscape:box3dside" />
+ </g>
+ <g
+- sodipodi:type="inkscape:box3d"
+- style="fill:#24b8eb;fill-opacity:1;stroke:#253237;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+- id="g3998"
+- inkscape:perspectiveID="#perspective4012"
++ inkscape:corner7="0.22235256 : 0.12449455 : 0.532878 : 1"
+ inkscape:corner0="0.4922944 : 0.24244228 : 0 : 1"
+- inkscape:corner7="0.22235256 : 0.12449455 : 0.532878 : 1">
++ inkscape:perspectiveID="#perspective4012"
++ id="g3998"
++ style="fill:#24b8eb;fill-opacity:1;stroke:#253237;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
++ sodipodi:type="inkscape:box3d">
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path4008"
+- style="fill:#afafde;fill-rule:evenodd;stroke:none"
++ d="M 133.59629,187.5183 253.10212,226.98839 540.69439,162.66067 414.29968,142.15069 z"
+ inkscape:box3dsidetype="13"
+- d="M 133.59629,187.5183 253.10212,226.98839 540.69439,162.66067 414.29968,142.15069 z" />
++ style="fill:#afafde;fill-rule:evenodd;stroke:none"
++ id="path4008"
++ sodipodi:type="inkscape:box3dside" />
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path4000"
+- style="fill:#353564;fill-rule:evenodd;stroke:none"
++ d="m 133.59629,108.48046 0,79.03784 280.70339,-45.36761 0,-58.240838 z"
+ inkscape:box3dsidetype="6"
+- d="m 133.59629,108.48046 0,79.03784 280.70339,-45.36761 0,-58.240838 z" />
++ style="fill:#353564;fill-rule:evenodd;stroke:none"
++ id="path4000"
++ sodipodi:type="inkscape:box3dside" />
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path4010"
+- style="fill:#e9e9ff;fill-rule:evenodd;stroke:none"
++ d="m 414.29968,83.909852 126.39471,11.552957 0,67.197861 -126.39471,-20.50998 z"
+ inkscape:box3dsidetype="11"
+- d="m 414.29968,83.909852 126.39471,11.552957 0,67.197861 -126.39471,-20.50998 z" />
++ style="fill:#e9e9ff;fill-rule:evenodd;stroke:none"
++ id="path4010"
++ sodipodi:type="inkscape:box3dside" />
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path4002"
+- style="fill:#24b8eb;fill-opacity:1"
++ d="M 133.59629,108.48046 253.10212,130.49599 540.69439,95.462809 414.29968,83.909852 z"
+ inkscape:box3dsidetype="5"
+- d="M 133.59629,108.48046 253.10212,130.49599 540.69439,95.462809 414.29968,83.909852 z" />
++ style="fill:#24b8eb;fill-opacity:1"
++ id="path4002"
++ sodipodi:type="inkscape:box3dside" />
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path4006"
+- style="fill:#008bb8;fill-opacity:1"
++ d="m 253.10212,130.49599 0,96.4924 287.59227,-64.32772 0,-67.197861 z"
+ inkscape:box3dsidetype="14"
+- d="m 253.10212,130.49599 0,96.4924 287.59227,-64.32772 0,-67.197861 z" />
++ style="fill:#008bb8;fill-opacity:1"
++ id="path4006"
++ sodipodi:type="inkscape:box3dside" />
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path4004"
+- style="fill:#00ade5;fill-opacity:1"
++ d="m 133.59629,108.48046 119.50583,22.01553 0,96.4924 -119.50583,-39.47009 z"
+ inkscape:box3dsidetype="3"
+- d="m 133.59629,108.48046 119.50583,22.01553 0,96.4924 -119.50583,-39.47009 z" />
++ style="fill:#00ade5;fill-opacity:1"
++ id="path4004"
++ sodipodi:type="inkscape:box3dside" />
+ </g>
+ <g
+- id="text4480"
++ transform="matrix(0.80256968,0,0,0.80256968,38.124381,46.818937)"
+ style="font-size:40px;font-style:italic;font-variant:normal;font-weight:500;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Futura;-inkscape-font-specification:Futura Medium Italic"
+- transform="matrix(0.80256968,0,0,0.80256968,38.124381,46.818937)">
++ id="text4480">
+ <path
+- id="path4487"
++ inkscape:connector-curvature="0"
+ d="m 143.91526,210.9311 c 0,0 -1.18454,24.55103 -1.18454,24.55103 0,0 -2.20126,-0.90734 -2.20126,-0.90734 0,0 0.12991,-2.63169 0.12991,-2.63169 -0.93879,1.79036 -1.9065,2.47622 -2.90333,2.06429 -1.22136,-0.50473 -2.21392,-2.01843 -2.98056,-4.53883 -0.76506,-2.51517 -1.14847,-5.52448 -1.15142,-9.03501 -0.003,-4.05437 0.43071,-7.21704 1.30508,-9.49091 0.89102,-2.27841 2.03847,-3.16512 3.445,-2.65101 0.66636,0.24361 1.23499,0.74282 1.70523,1.49806 0.47758,0.75889 0.96572,1.94715 1.46436,3.56555 0,0 0.15162,-3.23808 0.15162,-3.23808 0,0 2.21991,0.81394 2.21991,0.81394 m -2.70474,10.77799 c 9.4e-4,-2.20514 -0.23756,-4.08804 -0.71503,-5.64599 -0.47687,-1.57355 -1.09205,-2.50076 -1.84444,-2.78257 -0.81606,-0.3056 -1.49838,0.28994 -2.04775,1.783 -0.54795,1.50674 -0.82079,3.49941 -0.8196,5.97938 10e-4,2.16395 0.22976,4.0248 0.68657,5.58512 0.45737,1.56225 1.04603,2.48958 1.767,2.78117 0.80185,0.32429 1.49733,-0.26268 2.08586,-1.76474 0.59014,-1.54136 0.88635,-3.52038 0.88
739,-5.93537"
+- inkscape:connector-curvature="0" />
++ id="path4487" />
+ <path
+- id="path4489"
++ inkscape:connector-curvature="0"
+ d="m 157.92113,195.55223 c 0,0 -2.33546,45.22859 -2.33546,45.22859 0,0 -2.295,-0.94598 -2.295,-0.94598 0,0 0.13145,-2.66681 0.13145,-2.66681 -0.57101,1.07748 -1.06372,1.76286 -1.47866,2.05777 -0.40732,0.26153 -0.90972,0.26858 -1.50673,0.0219 -1.35398,-0.55953 -2.45507,-2.17899 -3.30672,-4.85578 -0.84966,-2.68836 -1.27154,-5.87559 -1.26707,-9.56978 0.005,-3.94788 0.47592,-7.05654 1.41645,-9.32935 0.94456,-2.28249 2.13425,-3.16573 3.57161,-2.64034 0.73875,0.27007 1.36089,0.8317 1.86557,1.68538 0.52627,0.88083 1.07659,2.25139 1.65095,4.11269 0,0 1.21171,-23.87173 1.21171,-23.87173 0,0 2.3419,0.77347 2.3419,0.77347 m -3.92922,30.73909 c 0.006,-2.16483 -0.24748,-4.01389 -0.7586,-5.54441 -0.51041,-1.52834 -1.18081,-2.44732 -2.00988,-2.75785 -0.89539,-0.33531 -1.63523,0.25817 -2.2205,1.77658 -0.58371,1.5144 -0.87707,3.59168 -0.88126,6.23313 -0.004,2.22916 0.24219,4.11919 0.73769,5.67293 0.49618,1.538 1.15865,2.47523 1.98877,2.81091 0.86704,0.35063 1.60413,-0.26672 2.210
49,-1.85616 0.6149,-1.55511 0.92642,-3.66731 0.93329,-6.33513"
+- inkscape:connector-curvature="0" />
++ id="path4489" />
+ <path
+- id="path4491"
++ inkscape:connector-curvature="0"
+ d="m 171.83406,200.14736 c 0,0 -2.55693,46.27694 -2.55693,46.27694 0,0 -2.40802,-0.99256 -2.40802,-0.99256 0,0 0.14408,-2.7277 0.14408,-2.7277 -0.60205,1.09661 -1.12096,1.79276 -1.55731,2.09015 -0.42825,0.26329 -0.95574,0.26517 -1.58195,0.006 -1.42008,-0.58685 -2.57217,-2.25538 -3.46001,-5.00292 -0.88568,-2.75922 -1.32126,-6.02433 -1.30829,-9.80383 0.0139,-4.03918 0.5153,-7.21532 1.50756,-9.53194 0.9966,-2.32672 2.24751,-3.21942 3.75541,-2.66825 0.77507,0.28335 1.4271,0.86403 1.95512,1.74255 0.55067,0.90656 1.1255,2.31463 1.72448,4.2253 0,0 1.32723,-24.42616 1.32723,-24.42616 0,0 2.45863,0.81203 2.45863,0.81203 m -4.19774,31.43101 c 0.0108,-2.21564 -0.25077,-4.11066 -0.78405,-5.68214 -0.53254,-1.5692 -1.23443,-2.51624 -2.10426,-2.84203 -0.93935,-0.35177 -1.71742,0.24846 -2.33525,1.79662 -0.61616,1.54398 -0.92878,3.66668 -0.93912,6.36944 -0.009,2.28085 0.24493,4.21722 0.76154,5.81207 0.51739,1.57879 1.21071,2.54466 2.08144,2.89675 0.90952,0.36781 1.68486,-0.25628
2.3252,-1.87659 0.64925,-1.5852 0.98121,-3.74375 0.9945,-6.47412"
+- inkscape:connector-curvature="0" />
++ id="path4491" />
+ <path
+- id="path4493"
++ inkscape:connector-curvature="0"
+ d="m 182.69754,240.8285 c -0.0146,1.96517 0.25017,3.6903 0.79476,5.17797 0.55309,1.49296 1.26652,2.41699 2.14161,2.77118 1.20457,0.48759 2.14181,-0.2399 2.80954,-2.18822 0,0 1.92241,3.38486 1.92241,3.38486 -0.69601,1.93926 -1.40388,3.19849 -2.1237,3.78089 -0.72587,0.59658 -1.62503,0.67216 -2.69605,0.22915 -1.69176,-0.69977 -3.02386,-2.46883 -4.00169,-5.30474 -0.97533,-2.82862 -1.44791,-6.27057 -1.41959,-10.33544 0.0297,-4.25897 0.60073,-7.61925 1.71709,-10.08492 1.11376,-2.46107 2.51227,-3.38933 4.19884,-2.7735 1.64135,0.59937 2.93032,2.37929 3.86168,5.34244 0.94917,2.99527 1.40506,6.7054 1.36602,11.12012 -0.004,0.4603 -0.0226,1.20346 -0.0554,2.22925 0,0 -8.51549,-3.34904 -8.51549,-3.34904 m 5.94733,-2.7777 c -0.23979,-4.27417 -1.16688,-6.71401 -2.77464,-7.31554 -1.51391,-0.56637 -2.51126,1.13572 -2.99678,5.09537 0,0 5.77142,2.22017 5.77142,2.22017"
+- inkscape:connector-curvature="0" />
++ id="path4493" />
+ <path
+- id="path4495"
++ inkscape:connector-curvature="0"
+ d="m 197.8251,230.69747 c 0,0 -0.14702,2.52361 -0.14702,2.52361 0.93046,-1.84506 1.99597,-2.55128 3.19747,-2.11217 0.72975,0.26675 1.28917,0.79597 1.67724,1.58783 0.3889,0.75353 0.73113,2.03235 1.02645,3.8365 1.19073,-2.4989 2.4622,-3.5065 3.8146,-3.01217 2.35158,0.85962 3.50317,3.84522 3.4413,8.9453 -0.006,0.5155 -0.0362,1.23097 -0.0897,2.14616 -0.0451,0.91806 -0.10965,2.04698 -0.19366,3.38638 0,0 -0.99233,15.02936 -0.99233,15.02936 0,0 -2.76874,-1.14125 -2.76874,-1.14125 0,0 1.03619,-15.71489 1.03619,-15.71489 0.0927,-1.46905 0.14324,-2.55901 0.15154,-3.26921 0.0283,-2.42778 -0.47649,-3.83675 -1.51169,-4.22448 -0.40812,-0.15281 -0.76332,-0.13757 -1.06576,0.0453 -0.30191,0.16313 -0.5639,0.50867 -0.78607,1.0364 -0.21349,0.51078 -0.39577,1.22001 -0.54687,2.1275 -0.14253,0.89037 -0.2581,1.97722 -0.34672,3.26042 0,0 -0.95735,15.07915 -0.95735,15.07915 0,0 -2.70807,-1.11624 -2.70807,-1.11624 0,0 1.01402,-15.95745 1.01402,-15.95745 0.0892,-1.45406 0.1367,-2.45477 0.14
245,-3.00134 0.024,-2.28494 -0.48377,-3.62276 -1.52072,-4.01114 -1.49609,-0.56028 -2.39114,1.58906 -2.6901,6.4369 0,0 -0.93279,14.88957 -0.93279,14.88957 0,0 -2.64897,-1.09188 -2.64897,-1.09188 0,0 1.64547,-26.69011 1.64547,-26.69011 0,0 2.75982,1.01191 2.75982,1.01191"
+- inkscape:connector-curvature="0" />
++ id="path4495" />
+ <path
+- id="path4497"
++ inkscape:connector-curvature="0"
+ d="m 227.47251,241.56788 c 0,0 -1.96817,28.03272 -1.96817,28.03272 0,0 -2.9137,-1.201 -2.9137,-1.201 0,0 0.21426,-3.00044 0.21426,-3.00044 -1.27606,1.97872 -2.57236,2.69156 -3.88932,2.14733 -1.61264,-0.66642 -2.90516,-2.46805 -3.88202,-5.40218 -0.97452,-2.92712 -1.43562,-6.39083 -1.38499,-10.40048 0.0585,-4.63168 0.68291,-8.21622 1.87744,-10.75721 1.21742,-2.54665 2.75422,-3.48611 4.61431,-2.80621 0.88173,0.32234 1.62982,0.93102 2.24322,1.82656 0.62325,0.90039 1.2539,2.2934 1.89185,4.18002 0,0 0.25313,-3.69854 0.25313,-3.69854 0,0 2.94399,1.07943 2.94399,1.07943 m -3.77279,12.16064 c 0.0361,-2.52408 -0.25136,-4.69591 -0.86185,-6.51188 -0.60933,-1.83342 -1.41259,-2.93599 -2.4081,-3.30885 -1.07928,-0.40417 -1.99466,0.23144 -2.74726,1.90206 -0.75064,1.6857 -1.14372,3.94496 -1.18087,6.77954 -0.0324,2.47309 0.24184,4.61564 0.82339,6.43108 0.58235,1.81801 1.34902,2.92014 2.30157,3.30538 1.05986,0.42865 1.99317,-0.19242 2.79915,-1.86824 0.80908,-1.72138 1.23437,-3.96512
1.27397,-6.72909"
+- inkscape:connector-curvature="0" />
++ id="path4497" />
+ <path
+- id="path4499"
++ inkscape:connector-curvature="0"
+ d="m 241.15171,249.44072 c 0,0 -0.51108,6.85965 -0.51108,6.85965 -0.59993,-2.04325 -1.1799,-3.56582 -1.73987,-4.56859 -0.55027,-0.97708 -1.20738,-1.6081 -1.97059,-1.89367 -1.15517,-0.43214 -2.11644,0.17099 -2.88523,1.80464 -0.76653,1.62888 -1.17268,3.9367 -1.22011,6.9248 -0.0445,2.80119 0.26393,5.17511 0.92596,7.12607 0.67183,1.97819 1.56355,3.1933 2.67726,3.64408 1.07168,0.4338 2.20133,-0.1552 3.39005,-1.77327 0,0 -0.52436,7.03659 -0.52436,7.03659 -1.19607,0.58312 -2.32359,0.65405 -3.38352,0.21562 -1.8828,-0.77879 -3.38549,-2.78338 -4.51401,-6.01055 -1.11646,-3.21472 -1.63998,-7.00391 -1.57276,-11.37894 0.0692,-4.50383 0.75204,-8.03336 2.05324,-10.59293 1.31708,-2.58949 2.92634,-3.54286 4.83129,-2.8473 1.56535,0.57162 3.04724,2.3875 4.44373,5.4538"
+- inkscape:connector-curvature="0" />
++ id="path4499" />
+ <path
+- id="path4501"
++ inkscape:connector-curvature="0"
+ d="m 252.58194,254.09736 c 0,0 -1.87702,3.28085 -1.87702,3.28085 -0.81074,-1.97994 -1.57331,-3.10222 -2.28776,-3.36939 -0.48496,-0.18133 -0.8941,-0.0281 -1.22769,0.45901 -0.32335,0.4692 -0.49289,1.14326 -0.50888,2.02239 -0.0156,0.858 0.10368,1.63024 0.35802,2.31723 0.25411,0.70838 0.79385,1.73768 1.62048,3.08984 1.18234,1.95741 1.96886,3.63812 2.35695,5.03831 0.41755,1.39168 0.60783,3.06493 0.57059,5.01782 -0.0537,2.81157 -0.54165,4.884 -1.46175,6.216 -0.93573,1.29895 -2.12289,1.64879 -3.55906,1.05475 -1.94572,-0.80482 -3.51487,-3.40136 -4.71379,-7.78467 0,0 2.0849,-2.32202 2.0849,-2.32202 0.79461,2.55648 1.66718,4.02867 2.61873,4.41396 0.53823,0.21794 0.97427,0.0795 1.30775,-0.41609 0.34335,-0.49234 0.52447,-1.23998 0.54307,-2.24271 0.0163,-0.87766 -0.10823,-1.64301 -0.37334,-2.29558 -0.12777,-0.32424 -0.35307,-0.79218 -0.67573,-1.40353 -0.32239,-0.61081 -0.7609,-1.36144 -1.31509,-2.25129 -0.97613,-1.62012 -1.6453,-3.08635 -2.00922,-4.40115 -0.36254,-1.37616 -0.
52806,-2.94843 -0.49678,-4.7184 0.0471,-2.66732 0.52729,-4.71397 1.4427,-6.14168 0.91845,-1.4324 2.06564,-1.8996 3.44365,-1.39645 1.52731,0.55773 2.91459,2.50016 4.15927,5.8328"
+- inkscape:connector-curvature="0" />
++ id="path4501" />
+ </g>
+ <g
+- transform="matrix(0.74694175,0,0,0.74694175,45.485062,44.593966)"
++ id="text4949"
+ style="font-size:40px;font-style:italic;font-variant:normal;font-weight:500;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Futura;-inkscape-font-specification:Futura Medium Italic"
+- id="text4949">
++ transform="matrix(0.74694175,0,0,0.74694175,45.485062,44.593966)">
+ <path
+- inkscape:connector-curvature="0"
++ id="path4956"
+ d="m 142.69979,137.10297 c 0,0 -1.02955,33.67577 -1.02955,33.67577 0,0 -1.95085,-0.57539 -1.95085,-0.57539 0,0 0.11438,-3.62641 0.11438,-3.62641 -0.83178,2.72212 -1.69018,3.94864 -2.57494,3.68641 -1.08457,-0.32145 -1.96585,-2.08912 -2.6458,-5.29794 -0.67825,-3.20078 -1.01674,-7.18681 -1.01674,-11.96409 0,-5.51039 0.38729,-9.93148 1.16353,-13.27043 0.79003,-3.34576 1.80543,-4.8788 3.04874,-4.59076 0.58877,0.13642 1.0911,0.64686 1.50651,1.53207 0.42191,0.88799 0.85328,2.3539 1.29417,4.39917 0,0 0.13239,-4.42502 0.13239,-4.42502 0,0 1.95816,0.45662 1.95816,0.45662 m -2.38162,15.3911 c 0,-2.99293 -0.21149,-5.4766 -0.63396,-7.44868 -0.42183,-1.99292 -0.96573,-3.06948 -1.63097,-3.23169 -0.72176,-0.17595 -1.32564,0.83047 -1.81241,3.01599 -0.4859,2.20539 -0.72852,4.99168 -0.72852,8.36184 0,2.94297 0.20217,5.40768 0.60697,7.39634 0.40539,1.99165 0.92751,3.07935 1.56702,3.26122 0.71103,0.20221 1.32739,-0.80489 1.84844,-3.02486 0.52203,-2.27207 0.78343,-5.04988 0.78343,-8.3
3016"
+- id="path4956" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path4958"
+ d="m 154.95323,112.41486 c 0,0 -1.92623,61.71348 -1.92623,61.71348 0,0 -2.02305,-0.59669 -2.02305,-0.59669 0,0 0.10998,-3.66649 0.10998,-3.66649 -0.50064,1.63638 -0.93339,2.71678 -1.29856,3.24286 -0.35864,0.4785 -0.80173,0.63929 -1.32886,0.48305 -1.196,-0.35447 -2.17072,-2.22885 -2.92647,-5.61729 -0.75369,-3.40336 -1.12977,-7.61039 -1.12977,-12.62806 0,-5.35535 0.41192,-9.70405 1.23761,-13.0536 0.82815,-3.35953 1.87288,-4.89719 3.13661,-4.60442 0.64921,0.15043 1.19644,0.72801 1.64111,1.73364 0.46368,1.03603 0.94955,2.72617 1.45772,5.07233 0,0 1.00373,-32.45575 1.00373,-32.45575 0,0 2.04618,0.37694 2.04618,0.37694 m -3.36226,42.52286 c -1e-5,-2.93233 -0.2264,-5.35968 -0.67863,-7.2797 -0.45151,-1.91688 -1.04224,-2.96322 -1.7713,-3.14099 -0.78768,-0.19203 -1.43735,0.82649 -1.94996,3.05208 -0.51168,2.22151 -0.76716,5.12229 -0.76715,8.70541 -1e-5,3.02634 0.21939,5.52006 0.65871,7.48353 0.44002,1.94232 1.02578,3.01856 1.75821,3.2268 0.76475,0.21744 1.41278,-0.84157 1.9
4329,-3.18083 0.53762,-2.29319 0.80682,-5.24972 0.80683,-8.8663"
+- id="path4958" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path4960"
+ d="m 167.06579,114.64626 c 0,0 -2.00992,63.02991 -2.00992,63.02991 0,0 -2.11064,-0.62251 -2.11064,-0.62251 0,0 0.11473,-3.74419 0.11473,-3.74419 -0.52227,1.66819 -0.9737,2.76889 -1.35463,3.30386 -0.37409,0.4864 -0.83626,0.64776 -1.38608,0.4848 -1.24739,-0.36971 -2.2639,-2.29008 -3.052,-5.75504 -0.78591,-3.47998 -1.17805,-7.77816 -1.17805,-12.90181 0,-5.46847 0.42951,-9.90682 1.2905,-13.32287 0.86362,-3.42644 1.95315,-4.99145 3.27121,-4.6861 0.67716,0.15691 1.24799,0.74958 1.71185,1.77894 0.48371,1.06055 0.99058,2.78934 1.52074,5.18839 0,0 1.04721,-33.14671 1.04721,-33.14671 0,0 2.13508,0.39333 2.13508,0.39333 m -3.50816,43.4193 c -1e-5,-2.99509 -0.23619,-5.47563 -0.70797,-7.43918 -0.471,-1.96028 -1.08722,-3.0321 -1.84771,-3.21754 -0.82158,-0.20029 -1.49917,0.83644 -2.03379,3.10653 -0.53362,2.26586 -0.80004,5.22673 -0.80004,8.88581 0,3.0905 0.2288,5.6384 0.68696,7.64617 0.4589,1.98625 1.06983,3.08896 1.83376,3.30617 0.79768,0.2268 1.47367,-0.85081 2.02708,-3.2368
0.56086,-2.33898 0.8417,-5.35718 0.84171,-9.05116"
+- id="path4960" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path4962"
+ d="m 177.90406,167.53396 c 0,0 -1.88635,13.37534 -1.88635,13.37534 0,0 -2.4798,-0.7314 -2.4798,-0.7314 0,0 8.5941,-61.40315 8.5941,-61.40315 0,0 5.49381,65.55828 5.49381,65.55828 0,0 -2.47606,-0.73029 -2.47606,-0.73029 0,0 -1.15325,-14.41683 -1.15325,-14.41683 0,0 -6.09245,-1.65195 -6.09245,-1.65195 m 0.99827,-7.3414 c 0,0 4.43719,1.14553 4.43719,1.14553 0,0 -1.69728,-21.643 -1.69728,-21.643 0,0 -2.73991,20.49747 -2.73991,20.49747"
+- id="path4962" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path4964"
+ d="m 192.75692,148.77584 c 0,0 -0.12697,3.86553 -0.12697,3.86553 1.01023,-2.96327 2.07712,-4.3188 3.20127,-4.05837 1.34306,0.31118 2.46566,2.30556 3.36532,5.99023 0.90231,3.69569 1.35448,8.20525 1.35449,13.52042 -1e-5,5.89988 -0.51724,10.72485 -1.54904,14.46536 -1.02115,3.70347 -2.28559,5.32671 -3.79028,4.88074 -0.76729,-0.22741 -1.39457,-0.86013 -1.88273,-1.89728 -0.50856,-1.0417 -1.04794,-2.81175 -1.618,-5.30795 0,0 -0.8741,26.18906 -0.8741,26.18906 0,0 -2.31502,-0.7646 -2.31502,-0.7646 0,0 1.90518,-57.42645 1.90518,-57.42645 0,0 2.32988,0.54331 2.32988,0.54331 m 5.40346,19.04889 c -1e-5,-3.30891 -0.25849,-6.08753 -0.7748,-8.33299 -0.51544,-2.26802 -1.17277,-3.49809 -1.97107,-3.69274 -0.95235,-0.23218 -1.74603,0.8618 -2.38229,3.27753 -0.63493,2.41066 -0.95189,5.48779 -0.95188,9.2352 -1e-5,3.27574 0.26762,5.98325 0.80361,8.12542 0.53693,2.19855 1.23072,3.42012 2.08244,3.66228 0.8969,0.25501 1.65351,-0.79727 2.26877,-3.16101 0.61649,-2.42148 0.92521,-5.46059 0.92
522,-9.11369"
+- id="path4964" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path4966"
+ d="m 214.24305,153.78621 c 0,0 -1.31435,38.00974 -1.31435,38.00974 0,0 -2.48877,-0.73404 -2.48877,-0.73404 0,0 0.14585,-4.09022 0.14585,-4.09022 -1.06049,3.03838 -2.15448,4.38616 -3.28161,4.0521 -1.38103,-0.40932 -2.50267,-2.44113 -3.36776,-6.08907 -0.86265,-3.63764 -1.29306,-8.14604 -1.29306,-13.53286 0,-6.21349 0.49246,-11.18485 1.4798,-14.92315 1.00522,-3.74687 2.29778,-5.44224 3.88129,-5.07538 0.75019,0.17382 1.39041,0.76705 1.91998,1.78061 0.53794,1.01712 1.08806,2.68746 1.65043,5.01282 0,0 0.1689,-4.99337 0.1689,-4.99337 0,0 2.4993,0.58282 2.4993,0.58282 m -3.03948,17.3009 c 0,-3.38017 -0.26974,-6.19298 -0.8085,-8.43545 -0.53784,-2.26554 -1.23115,-3.50039 -2.07889,-3.7071 -0.91948,-0.22416 -1.68853,0.89015 -2.30828,3.33872 -0.61851,2.47046 -0.9273,5.60476 -0.92729,9.40665 -1e-5,3.31998 0.25729,6.10848 0.77254,8.36836 0.51611,2.2637 1.18097,3.51257 1.99554,3.74422 0.90594,0.25764 1.69151,-0.8539 2.35579,-3.33921 0.6657,-2.54472 0.99909,-5.67149 0.99909,-9.37
619"
+- id="path4966" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path4968"
+ d="m 225.85606,160.27285 c 0,0 -0.32974,9.25891 -0.32974,9.25891 -0.53316,-2.54039 -1.04195,-4.39401 -1.52648,-5.56273 -0.47601,-1.13738 -1.03693,-1.78408 -1.68229,-1.94111 -0.97722,-0.23772 -1.77766,0.84395 -2.40266,3.24086 -0.62377,2.3922 -0.9352,5.58535 -0.93519,9.58301 -1e-5,3.75126 0.29218,6.83011 0.87738,9.23994 0.594,2.44396 1.36325,3.80207 2.30903,4.07147 0.90969,0.25913 1.85325,-0.86598 2.83097,-3.38173 0,0 -0.34058,9.56174 -0.34058,9.56174 -1.00008,1.14095 -1.95034,1.57604 -2.85121,1.30856 -1.60121,-0.47541 -2.8986,-2.70866 -3.8959,-6.69199 -0.98649,-3.96852 -1.47857,-8.8796 -1.47857,-14.74267 0,-6.02664 0.53026,-10.92676 1.59348,-14.71003 1.07455,-3.82167 2.4152,-5.55208 4.02537,-5.1799 1.32215,0.30565 2.59117,2.28435 3.80639,5.94567"
+- id="path4968" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path4970"
+ d="m 232.48778,126.69839 c 0,0 -1.2248,34.40689 -1.2248,34.40689 1.06442,-2.62651 2.14849,-3.81555 3.25237,-3.55982 1.11579,0.25853 2.00797,1.49263 2.67467,3.70508 0.69253,2.19472 1.03936,4.94487 1.03937,8.24689 -1e-5,0.79026 -0.0123,1.69031 -0.0367,2.70007 -0.0245,0.98152 -0.0572,2.10196 -0.0979,3.36123 0,0 -0.84363,23.41094 -0.84363,23.41094 0,0 -2.68728,-0.79259 -2.68728,-0.79259 0,0 0.84874,-23.81693 0.84874,-23.81693 0.0486,-1.28016 0.0728,-2.4402 0.0729,-3.48004 -1e-5,-3.54092 -0.59854,-5.45732 -1.79226,-5.74838 -1.70224,-0.415 -2.68971,3.34888 -2.969,11.28478 0,0 -0.72901,20.41307 -0.72901,20.41307 0,0 -2.62726,-0.77489 -2.62726,-0.77489 0,0 2.47212,-69.84409 2.47212,-69.84409 0,0 2.6478,0.48779 2.6478,0.48779"
+- id="path4970" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path4972"
+ d="m 243.86302,184.18013 c 0,2.96077 0.29923,5.4779 0.89852,7.55428 0.60873,2.08253 1.38589,3.25982 2.33269,3.52952 1.30314,0.3712 2.30716,-1.00805 3.00927,-4.14387 0,0 2.10256,4.51871 2.10256,4.51871 -0.73212,3.13364 -1.48381,5.24718 -2.25495,6.34396 -0.77779,1.12041 -1.74744,1.50699 -2.90723,1.16263 -1.83216,-0.54398 -3.2847,-2.8112 -4.36263,-6.79404 -1.07436,-3.96967 -1.61021,-9.01104 -1.61021,-15.13396 0,-6.40637 0.58948,-11.61792 1.77168,-15.6456 1.17819,-4.01578 2.67365,-5.82003 4.49073,-5.40001 1.7681,0.40873 3.16829,2.68802 4.19578,6.84588 1.04775,4.20396 1.57288,9.6313 1.57289,16.27199 -1e-5,0.69296 -0.0128,1.81558 -0.0385,3.36775 0,0 -9.20064,-2.47724 -9.20064,-2.47724 m 6.38024,-5.95778 c -0.29639,-6.34049 -1.31473,-9.72032 -3.04833,-10.14211 -1.63263,-0.39717 -2.69156,2.45136 -3.18233,8.53724 0,0 6.23066,1.60487 6.23066,1.60487"
+- id="path4972" />
++ inkscape:connector-curvature="0" />
+ </g>
+ <g
+- id="text5788"
++ transform="matrix(0.87020295,0,0,0.87020295,36.583926,33.755817)"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Sans"
+- transform="matrix(0.87020295,0,0,0.87020295,36.583926,33.755817)">
++ id="text5788">
+ <path
+- id="path5793"
++ inkscape:connector-curvature="0"
+ d="m 292.16734,221.79451 c 0,0 0.079,32.92107 0.079,32.92107 0,0 6.83396,-1.8594 6.83396,-1.8594 0.46993,-0.12786 0.80691,-0.0884 1.01132,0.11827 0.20419,0.18473 0.30715,0.48443 0.30895,0.89923 0.002,0.39306 -0.0986,0.7486 -0.30066,1.06669 -0.20232,0.31832 -0.53842,0.54236 -1.00864,0.67204 0,0 -15.85959,4.37404 -15.85959,4.37404 -0.49118,0.13546 -0.8436,0.0983 -1.05684,-0.11192 -0.21335,-0.21022 -0.32005,-0.51707 -0.32005,-0.92043 0,-0.42568 0.10663,-0.79078 0.31991,-1.09527 0.21307,-0.32663 0.56522,-0.55672 1.05608,-0.69027 0,0 6.99856,-1.90419 6.99856,-1.90419 0,0 -0.0639,-33.01316 -0.0639,-33.01316 0,0 -6.94528,1.58452 -6.94528,1.58452 -0.48709,0.11116 -0.83656,0.0697 -1.04802,-0.12452 -0.21157,-0.21626 -0.31738,-0.53384 -0.31738,-0.95255 0,-0.41857 0.10573,-0.77281 0.31723,-1.06267 0.2113,-0.3116 0.56052,-0.52201 1.04729,-0.63134 0,0 15.72034,-3.52906 15.72034,-3.52906 0.46618,-0.1046 0.80048,-0.0507 1.00326,0.16175 0.20255,0.1909 0.30468,0.4903 0.30646,0.898
34 0.002,0.40818 -0.0977,0.76414 -0.29818,1.06788 -0.2008,0.28254 -0.53427,0.47704 -1.00074,0.58343 0,0 -6.78316,1.54752 -6.78316,1.54752"
+- inkscape:connector-curvature="0" />
++ id="path5793" />
+ <path
+- id="path5795"
++ inkscape:connector-curvature="0"
+ d="m 310.82617,224.548 c 0,0 0.0183,2.71052 0.0183,2.71052 1.59486,-2.82856 3.1975,-4.42813 4.80917,-4.80918 0.96652,-0.22849 1.81505,-0.0602 2.54657,0.50362 0.73011,0.54196 1.34443,1.48928 1.84362,2.84195 0.81039,-1.66756 1.62919,-2.95534 2.45658,-3.86518 0.83957,-0.93171 1.68046,-1.49641 2.52294,-1.6956 1.31778,-0.31154 2.3707,0.0529 3.16143,1.09107 1.03734,1.32998 1.56558,2.9259 1.58639,4.79109 0,0 0.20434,18.33386 0.20434,18.33386 0,0 1.53013,-0.41632 1.53013,-0.41632 0.42981,-0.11694 0.739,-0.0757 0.92789,0.12381 0.18853,0.17852 0.2851,0.46568 0.2898,0.86158 0.004,0.37517 -0.0849,0.71339 -0.26782,1.01476 -0.18312,0.30159 -0.48957,0.51171 -0.91962,0.63032 0,0 -3.35086,0.92415 -3.35086,0.92415 0,0 -0.22279,-20.77656 -0.22279,-20.77656 -0.0143,-1.33018 -0.30714,-2.3628 -0.87909,-3.0991 -0.57267,-0.73709 -1.22837,-1.01732 -1.9678,-0.8398 -0.66827,0.16051 -1.37063,0.69532 -2.10748,1.60588 -0.73886,0.89188 -1.5757,2.51342 -2.51176,4.86946 0,0 0.15842,17.6379 0.158
42,17.6379 0,0 1.54833,-0.42128 1.54833,-0.42128 0.44115,-0.12002 0.75819,-0.0792 0.95147,0.12232 0.19296,0.18032 0.29136,0.47108 0.29523,0.8724 0.004,0.38029 -0.0887,0.72347 -0.27704,1.02961 -0.18854,0.30636 -0.50335,0.52043 -0.94475,0.64217 0,0 -3.43946,0.94859 -3.43946,0.94859 0,0 -0.17831,-20.87173 -0.17831,-20.87173 -0.0121,-1.41164 -0.31784,-2.49778 -0.91785,-3.25983 -0.5861,-0.78757 -1.24345,-1.09429 -1.97265,-0.91922 -0.67099,0.16116 -1.3334,0.62756 -1.98734,1.40021 -0.90879,1.0908 -1.86103,2.82298 -2.85755,5.20088 0,0 0.12057,17.88402 0.12057,17.88402 0,0 1.61271,-0.43879 1.61271,-0.43879 0.45299,-0.12325 0.77823,-0.083 0.97608,0.1207 0.1976,0.18215 0.29787,0.47663 0.3009,0.88354 0.003,0.38558 -0.0926,0.73385 -0.28674,1.04496 -0.19419,0.31131 -0.51774,0.52949 -0.971,0.6545 0,0 -5.16143,1.42351 -5.16143,1.42351 -0.46029,0.12695 -0.79127,0.0881 -0.99256,-0.11674 -0.20137,-0.20491 -0.30318,-0.50235 -0.30537,-0.89222 -0.002,-0.41142 0.0958,-0.76345 0.29429,-1.05603 0.19
822,-0.314 0.5275,-0.53357 0.98751,-0.65873 0,0 1.62837,-0.44305 1.62837,-0.44305 0,0 -0.14116,-22.4169 -0.14116,-22.4169 0,0 -1.62022,0.3912 -1.62022,0.3912 -0.4577,0.11052 -0.78681,0.0614 -0.98695,-0.14757 -0.20023,-0.209 -0.30151,-0.51693 -0.3038,-0.92368 -0.002,-0.38522 0.0954,-0.72992 0.29266,-1.034 0.19711,-0.30384 0.52454,-0.51011 0.98197,-0.61888 0,0 3.52575,-0.83819 3.52575,-0.83819"
+- inkscape:connector-curvature="0" />
++ id="path5795" />
+ <path
+- id="path5797"
++ inkscape:connector-curvature="0"
+ d="m 350.89656,241.32467 c 0,0 -0.0589,-3.6804 -0.0589,-3.6804 -2.44263,3.80778 -5.10211,6.12062 -7.98027,6.91861 -2.10441,0.58347 -3.76815,0.25666 -4.98415,-0.98555 -1.21953,-1.26623 -1.84495,-3.04991 -1.87379,-5.34667 -0.0317,-2.52154 0.73085,-4.92487 2.28129,-7.20305 1.54219,-2.26605 3.8038,-3.77126 6.77195,-4.51991 0.7964,-0.20085 1.66062,-0.33746 2.59222,-0.41005 0.92884,-0.0925 1.93136,-0.11301 3.00698,-0.0616 0,0 -0.0657,-4.10694 -0.0657,-4.10694 -0.0222,-1.38732 -0.47413,-2.48748 -1.3571,-3.30238 -0.88479,-0.81652 -2.19971,-1.01605 -3.95,-0.59577 -1.34605,0.32326 -3.2353,1.35808 -5.67763,3.11343 -0.44361,0.31258 -0.72851,0.48429 -0.85424,0.51483 -0.22367,0.0544 -0.4211,-0.0207 -0.59224,-0.22543 -0.1572,-0.2081 -0.23822,-0.49632 -0.24303,-0.86451 -0.005,-0.34763 0.0618,-0.6405 0.19913,-0.87854 0.1918,-0.35344 0.97539,-0.96079 2.34657,-1.81956 2.14879,-1.36681 3.76798,-2.17692 4.86556,-2.43642 2.17117,-0.5133 3.8675,-0.11811 5.09661,1.18044 1.22539,1.27503
1.8531,2.9031 1.88568,4.88818 0,0 0.27554,16.79617 0.27554,16.79617 0,0 2.26031,-0.61499 2.26031,-0.61499 0.41544,-0.11304 0.71203,-0.0724 0.89013,0.12173 0.17763,0.17395 0.26972,0.45203 0.27631,0.83437 0.006,0.36231 -0.0756,0.68817 -0.24525,0.97765 -0.1699,0.28969 -0.46252,0.49188 -0.87818,0.60651 0,0 -3.98778,1.09982 -3.98778,1.09982 m -0.20304,-12.6875 c -0.80507,-0.13756 -1.65804,-0.17224 -2.55931,-0.10371 -0.90358,0.0688 -1.85617,0.23114 -2.85824,0.48756 -2.52482,0.64614 -4.49945,1.96292 -5.91531,3.95406 -1.07701,1.49735 -1.60605,3.09291 -1.58411,4.78359 0.0203,1.56816 0.45251,2.77768 1.29533,3.62647 0.85525,0.84341 2.07851,1.0467 3.66561,0.61257 1.51075,-0.41325 2.89832,-1.234 4.16372,-2.45986 1.27358,-1.2449 2.56786,-3.01121 3.88202,-5.29462 0,0 -0.0897,-5.60606 -0.0897,-5.60606"
+- inkscape:connector-curvature="0" />
++ id="path5797" />
+ <path
+- id="path5799"
++ inkscape:connector-curvature="0"
+ d="m 375.34938,213.69585 c 0,0 -0.0974,-4.46393 -0.0974,-4.46393 0,0 3.68773,-0.87669 3.68773,-0.87669 0.37208,-0.0884 0.64113,-0.0368 0.8074,0.15502 0.16617,0.1917 0.25341,0.46963 0.26178,0.83387 0.008,0.34517 -0.066,0.6522 -0.22166,0.92112 -0.15581,0.26917 -0.41973,0.44869 -0.792,0.53856 0,0 -2.11132,0.50977 -2.11132,0.50977 0,0 0.54123,24.40071 0.54123,24.40071 0.0363,1.63856 -0.15744,3.16664 -0.58194,4.58541 -0.2835,0.94739 -0.76869,1.98351 -1.45663,3.10962 -0.68973,1.12896 -1.32331,1.97649 -1.90026,2.54121 -0.57809,0.56581 -1.35962,0.99328 -2.34591,1.28221 0,0 -4.61112,1.35073 -4.61112,1.35073 -0.39039,0.11434 -0.67276,0.0767 -0.84684,-0.11314 -0.17377,-0.16995 -0.26435,-0.44453 -0.27168,-0.82361 -0.007,-0.37906 0.0714,-0.71279 0.23628,-1.00117 0.16471,-0.28821 0.4423,-0.4887 0.83248,-0.60152 0,0 4.66707,-1.3197 4.66707,-1.3197 0.94729,-0.27395 1.78841,-0.89388 2.52391,-1.85846 0.74626,-0.96574 1.35024,-2.23429 1.81265,-3.80502 0.26003,-0.90063 0.37608,-1.98
619 0.34838,-3.25697 0,0 -0.16086,-7.37517 -0.16086,-7.37517 -1.62758,4.07072 -3.80169,6.48925 -6.53059,7.23934 -2.23287,0.61374 -4.19888,-0.12311 -5.89159,-2.21938 -1.68617,-2.12737 -2.56457,-4.99526 -2.6305,-8.59335 -0.0658,-3.59204 0.69765,-6.85485 2.28324,-9.77979 1.5891,-2.91055 3.49618,-4.62319 5.71739,-5.14835 2.71476,-0.64182 4.95439,0.6184 6.73072,3.76863 m 0.16039,7.3538 c -0.0626,-2.87086 -0.7569,-5.1338 -2.0858,-6.79534 -1.32015,-1.66944 -2.87807,-2.29072 -4.67812,-1.8585 -1.80975,0.43462 -3.35087,1.81991 -4.62062,4.16259 -1.27628,2.33429 -1.88951,4.95932 -1.83504,7.86963 0.0549,2.93412 0.76232,5.25114 2.11916,6.94432 1.35246,1.66842 2.93958,2.25345 4.75697,1.76072 1.80761,-0.49005 3.33004,-1.90799 4.57015,-4.24741 1.2464,-2.3511 1.83598,-4.96126 1.7733,-7.83601"
+- inkscape:connector-curvature="0" />
++ id="path5799" />
+ <path
+- id="path5801"
++ inkscape:connector-curvature="0"
+ d="m 400.95375,215.84309 c 0,0 -15.30351,3.94188 -15.30351,3.94188 0.34391,3.04783 1.23396,5.34503 2.66637,6.88627 1.43922,1.51372 3.17433,1.99038 5.19951,1.43641 1.12095,-0.30662 2.28367,-0.91984 3.48738,-1.83766 1.19883,-0.91409 2.16489,-1.95211 2.90025,-3.11439 0.2145,-0.34084 0.40349,-0.53306 0.56706,-0.57689 0.1868,-0.05 0.35355,0.0278 0.50028,0.23369 0.14614,0.18703 0.22361,0.43961 0.23247,0.75782 0.009,0.31828 -0.0759,0.65247 -0.25418,1.00277 -0.53474,1.08992 -1.51174,2.24633 -2.93533,3.4719 -1.41926,1.20943 -2.89777,2.0288 -4.43582,2.45524 -2.59183,0.71861 -4.80714,-0.0257 -6.63604,-2.24415 -1.8247,-2.25008 -2.7858,-5.3079 -2.87757,-9.16136 -0.0834,-3.50233 0.67052,-6.70553 2.2543,-9.60045 1.58612,-2.87997 3.57782,-4.59755 5.9692,-5.16295 2.44485,-0.578 4.47658,0.20903 6.10451,2.35191 1.62144,2.1165 2.47361,5.16594 2.56112,9.15996 m -1.55297,-1.99958 c -0.36339,-2.52164 -1.19348,-4.43925 -2.49343,-5.75652 -1.29227,-1.32421 -2.81005,-1.77891 -4.55736,-1.35
935 -1.75678,0.42189 -3.25581,1.59979 -4.49431,3.53879 -1.24433,1.94813 -1.99432,4.30819 -2.24605,7.0779 0,0 13.79115,-3.50082 13.79115,-3.50082"
+- inkscape:connector-curvature="0" />
++ id="path5801" />
+ </g>
+ <g
+- transform="translate(1.4477142e-8,-14.516129)"
++ id="text6335"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Sans"
+- id="text6335">
++ transform="translate(1.4477142e-8,-14.516129)">
+ <path
+- inkscape:connector-curvature="0"
++ id="path6342"
+ d="m 289.7812,172.74924 c 0,0 0,30.32096 0,30.32096 0,0 5.31622,-1.09403 5.31622,-1.09403 0.36864,-0.0759 0.6328,-0.009 0.79253,0.19948 0.15968,0.18869 0.23953,0.47439 0.23955,0.85707 -2e-5,0.36257 -0.0799,0.68117 -0.23955,0.95582 -0.15973,0.27468 -0.42389,0.45007 -0.79253,0.52616 0,0 -12.20372,2.51907 -12.20372,2.51907 -0.37097,0.0766 -0.63686,0.0102 -0.79765,-0.19916 -0.16081,-0.20937 -0.24121,-0.49598 -0.24121,-0.85983 0,-0.38404 0.0804,-0.7038 0.24121,-0.95925 0.16079,-0.27564 0.42668,-0.45161 0.79765,-0.52795 0,0 5.3343,-1.09775 5.3343,-1.09775 0,0 0,-30.33259 0,-30.33259 0,0 -5.3343,1.0578 -5.3343,1.0578 -0.37097,0.0736 -0.63686,0.0152 -0.79765,-0.17532 -0.16081,-0.21064 -0.24121,-0.50801 -0.24121,-0.89209 0,-0.38402 0.0804,-0.70312 0.24121,-0.9573 0.16079,-0.2743 0.42668,-0.44812 0.79765,-0.52149 0,0 12.20372,-2.41236 12.20372,-2.41236 0.36864,-0.0728 0.6328,-0.004 0.79253,0.20591 0.15968,0.19002 0.23953,0.47636 0.23955,0.85902 -2e-5,0.38273 -0.0799,0.7107
6 -0.23955,0.98409 -0.15973,0.25327 -0.42389,0.41645 -0.79253,0.48952 0,0 -5.31622,1.05422 -5.31622,1.05422"
+- id="path6342" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path6344"
+ d="m 304.56912,176.44974 c 0,0 0,2.56275 0,2.56275 1.30843,-2.57317 2.62214,-3.99091 3.94109,-4.25437 0.79339,-0.15843 1.48888,0.0539 2.08658,0.63694 0.5975,0.56281 1.09732,1.50612 1.49954,2.82986 0.68233,-1.5411 1.37053,-2.72191 2.0646,-3.54263 0.70597,-0.84286 1.41171,-1.33466 2.11721,-1.47559 1.10637,-0.22094 1.98741,0.19403 2.64338,1.24457 0.86213,1.3493 1.29307,2.9247 1.29309,4.72665 0,0 0,17.62938 0,17.62938 0,0 1.29225,-0.26593 1.29225,-0.26593 0.36384,-0.0749 0.62457,-0.008 0.78222,0.19923 0.1576,0.18768 0.23641,0.47161 0.23643,0.8518 -2e-5,0.3602 -0.0789,0.67662 -0.23643,0.94926 -0.15765,0.27268 -0.41838,0.44656 -0.78222,0.52167 0,0 -2.82218,0.58254 -2.82218,0.58254 0,0 0,-19.91946 0,-19.91946 -2e-5,-1.28187 -0.2369,-2.29585 -0.71072,-3.04209 -0.47398,-0.74635 -1.02099,-1.0575 -1.64109,-0.93328 -0.55951,0.11212 -1.14958,0.58117 -1.77024,1.40731 -0.62086,0.80639 -1.32718,2.30204 -2.11901,4.48741 0,0 0,16.76074 0,16.76074 0,0 1.27899,-0.26321 1.27899,-0.26
321 0.36526,-0.0752 0.62699,-0.009 0.78525,0.19931 0.15823,0.18797 0.23733,0.47243 0.23735,0.85335 -2e-5,0.3609 -0.0792,0.67796 -0.23735,0.95119 -0.15826,0.27327 -0.41999,0.4476 -0.78525,0.52299 0,0 -2.83314,0.58481 -2.83314,0.58481 0,0 0,-19.77746 0,-19.77746 -1e-5,-1.34457 -0.2439,-2.39933 -0.73178,-3.16444 -0.47581,-0.78777 -1.01275,-1.12183 -1.61085,-1.00201 -0.54945,0.11011 -1.09295,0.51024 -1.63047,1.20051 -0.74545,0.97331 -1.52785,2.54716 -2.34725,4.72194 0,0 0,16.79351 0,16.79351 0,0 1.30233,-0.26801 1.30233,-0.26801 0.3667,-0.0755 0.62946,-0.009 0.78832,0.19938 0.15885,0.18827 0.23827,0.47325 0.23828,0.85492 -1e-5,0.3616 -0.0794,0.6793 -0.23828,0.95314 -0.15886,0.27387 -0.42162,0.44864 -0.78832,0.52433 0,0 -4.14836,0.8563 -4.14836,0.8563 -0.36753,0.0759 -0.63097,0.01 -0.79027,-0.199 -0.15931,-0.20855 -0.23897,-0.49391 -0.23897,-0.85606 0,-0.38226 0.0796,-0.70045 0.23897,-0.95457 0.1593,-0.2742 0.42274,-0.44911 0.79027,-0.52474 0,0 1.30416,-0.26839 1.30416,-0.26839 0
,0 0,-21.02253 0,-21.02253 0,0 -1.30416,0.26159 -1.30416,0.26159 -0.36753,0.0737 -0.63097,0.006 -0.79027,-0.20361 -0.15931,-0.20947 -0.23897,-0.50535 -0.23897,-0.88764 0,-0.36212 0.0796,-0.67984 0.23897,-0.95317 0.1593,-0.27324 0.42274,-0.44662 0.79027,-0.52013 0,0 2.84603,-0.56906 2.84603,-0.56906"
+- id="path6344" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path6346"
+ d="m 338.26689,195.60376 c 0,0 0,-3.61767 0,-3.61767 -2.20252,3.52388 -4.55814,5.54631 -7.06742,6.06489 -1.82363,0.37688 -3.24985,-0.0877 -4.27786,-1.39461 -1.02852,-1.32754 -1.54299,-3.10136 -1.54298,-5.32096 -10e-6,-2.43953 0.67785,-4.70711 2.03287,-6.80168 1.35409,-2.09312 3.3292,-3.40199 5.92348,-3.92714 0.69926,-0.14153 1.45854,-0.21543 2.27777,-0.22172 0.81887,-0.0262 1.70362,0.0239 2.65414,0.15025 0,0 0,-4.06615 0,-4.06615 -2e-5,-1.37528 -0.38498,-2.49383 -1.15511,-3.35589 -0.77046,-0.86234 -1.92668,-1.1392 -3.46933,-0.83014 -1.18192,0.23683 -2.84139,1.13844 -4.97959,2.70598 -0.38682,0.2775 -0.63466,0.4272 -0.74347,0.44903 -0.19348,0.0389 -0.36277,-0.047 -0.50789,-0.25774 -0.13305,-0.2131 -0.19957,-0.49956 -0.19957,-0.85935 0,-0.33976 0.0605,-0.6217 0.18143,-0.84583 0.1693,-0.33368 0.85246,-0.88012 2.04895,-1.63902 1.8839,-1.21542 3.30773,-1.91909 4.27248,-2.1118 1.91602,-0.38264 3.40901,0.10672 4.47992,1.46726 1.07032,1.33994 1.60526,2.99588 1.60527,4.968
38 0,0 0,16.61698 0,16.61698 0,0 2.01829,-0.41534 2.01829,-0.41534 0.37219,-0.0766 0.63629,-0.0115 0.79235,0.19532 0.15601,0.18689 0.23402,0.46947 0.23404,0.84774 -2e-5,0.35837 -0.0781,0.67311 -0.23404,0.9442 -0.15606,0.27114 -0.42016,0.44511 -0.79235,0.52194 0,0 -3.55138,0.73307 -3.55138,0.73307 m 0,-12.49741 c -0.70985,-0.19458 -1.46206,-0.29097 -2.25669,-0.2891 -0.79498,0.002 -1.63244,0.0922 -2.51243,0.27083 -2.20778,0.44829 -3.93465,1.58796 -5.17941,3.41949 -0.94315,1.37125 -1.41489,2.87666 -1.41489,4.51572 0,1.51915 0.35684,2.72513 1.07033,3.61771 0.72532,0.8898 1.77657,1.19268 3.15324,0.90903 1.31539,-0.27102 2.53349,-0.95103 3.65445,-2.03968 1.13235,-1.11048 2.29417,-2.73492 3.4854,-4.87285 0,0 0,-5.53115 0,-5.53115"
+- id="path6346" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path6348"
+ d="m 361.03362,169.73799 c 0,0 0,-4.57811 0,-4.57811 0,0 3.51111,-0.70203 3.51111,-0.70203 0.35609,-0.0712 0.61126,-0.003 0.76556,0.20328 0.15424,0.20673 0.23137,0.49814 0.23139,0.87424 -2e-5,0.35635 -0.0772,0.66876 -0.23139,0.93722 -0.1543,0.26853 -0.40947,0.4385 -0.76556,0.50991 0,0 -2.01322,0.40381 -2.01322,0.40381 0,0 0,24.93239 0,24.93239 -2e-5,1.66412 -0.21394,3.19438 -0.64182,4.59098 -0.28533,0.93124 -0.76094,1.93198 -1.42698,3.00242 -0.66629,1.07077 -1.27327,1.8618 -1.82089,2.37289 -0.5478,0.51123 -1.2804,0.8629 -2.198,1.05498 0,0 -4.25995,0.89161 -4.25995,0.89161 -0.3584,0.075 -0.61529,0.01 -0.77062,-0.19631 -0.15536,-0.18605 -0.23304,-0.46782 -0.23304,-0.8453 0,-0.37749 0.0777,-0.70165 0.23304,-0.9725 0.15533,-0.27081 0.41222,-0.44362 0.77062,-0.51839 0,0 4.31359,-0.87039 4.31359,-0.87039 0.88183,-0.18403 1.67398,-0.72615 2.37652,-1.6262 0.71418,-0.90221 1.3032,-2.12502 1.76716,-3.66839 0.26165,-0.88672 0.39248,-1.97415 0.39248,-3.26235 0,0 0,-7.49145 0
,-7.49145 -1.60613,3.99699 -3.67816,6.25834 -6.21753,6.78211 -2.06489,0.42591 -3.85102,-0.4773 -5.35762,-2.71118 -1.49577,-2.25793 -2.24408,-5.18732 -2.24408,-8.78698 0,-3.59961 0.74831,-6.82288 2.24408,-9.66819 1.5066,-2.84552 3.29273,-4.47385 5.35762,-4.88629 2.53937,-0.50714 4.6114,0.90308 6.21753,4.22817 m 0,7.52118 c 0,-2.93314 -0.60662,-5.28816 -1.82036,-7.06588 -1.20261,-1.78115 -2.6443,-2.50382 -4.3256,-2.16698 -1.68272,0.33717 -3.12789,1.64976 -4.33499,3.9386 -1.20785,2.27039 -1.81204,4.86726 -1.81204,7.78958 0,2.94224 0.60419,5.31369 1.81204,7.11356 1.2071,1.77893 2.65227,2.49487 4.33499,2.14886 1.6813,-0.34572 3.12299,-1.65368 4.3256,-3.9231 1.21374,-2.29027 1.82036,-4.90147 1.82036,-7.83464"
+- id="path6348" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path6350"
+ d="m 385.85186,173.58032 c 0,0 -15.13765,3.07797 -15.13765,3.07797 0.26034,3.16944 1.06482,5.60432 2.41279,7.30409 1.35885,1.67644 3.03546,2.3087 5.02902,1.89796 1.10796,-0.22828 2.26831,-0.77304 3.48095,-1.634 1.21188,-0.86041 2.19967,-1.87147 2.96371,-3.03319 0.22326,-0.34131 0.41713,-0.52883 0.58164,-0.56257 0.18794,-0.0385 0.3524,0.0557 0.49337,0.2829 0.14092,0.20743 0.21138,0.47854 0.21141,0.81334 -3e-5,0.33482 -0.094,0.67909 -0.28188,1.03285 -0.56391,1.10093 -1.56872,2.23389 -3.01514,3.39933 -1.43573,1.14415 -2.91371,1.87353 -4.43406,2.18773 -2.54834,0.52665 -4.68036,-0.42556 -6.39472,-2.85877 -1.70402,-2.4575 -2.55658,-5.67472 -2.55657,-9.65009 -10e-6,-3.61935 0.79928,-6.88542 2.39688,-9.79647 1.60812,-2.91102 3.59284,-4.60156 5.95302,-5.07297 2.42802,-0.4849 4.42362,0.44725 5.9881,2.79462 1.5632,2.32586 2.3326,5.59781 2.30913,9.81727 m -1.49798,-2.20747 c -0.29388,-2.67927 -1.06987,-4.74949 -2.32855,-6.21109 -1.24773,-1.46483 -2.73778,-2.02412 -4.4707,-1.
67694 -1.73447,0.34753 -3.22825,1.49618 -4.48082,3.44663 -1.25337,1.95173 -2.03418,4.35276 -2.34185,7.20251 0,0 13.62192,-2.76111 13.62192,-2.76111"
+- id="path6350" />
++ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <text
+- xml:space="preserve"
+- style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+- x="82.258064"
+- y="465.7258"
++ sodipodi:linespacing="125%"
+ id="text4798"
+- sodipodi:linespacing="125%"><tspan
+- sodipodi:role="line"
+- id="tspan4800"
++ y="465.7258"
++ x="82.258064"
++ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
++ xml:space="preserve"><tspan
++ y="465.7258"
+ x="82.258064"
+- y="465.7258" /></text>
++ id="tspan4800"
++ sodipodi:role="line" /></text>
+ <path
+- style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+- d="m 252.05613,378.98631 0,-97.49115 288.50624,-81.0432 0,67.83207 z"
+- id="path5189"
+- inkscape:connector-curvature="0"
+- inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+- inkscape:export-ydpi="90" />
+- <path
++ inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
+ inkscape:connector-curvature="0"
+- id="path5394"
++ id="path5189"
+ d="m 252.05613,378.98631 0,-97.49115 288.50624,-81.0432 0,67.83207 z"
+- style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+- inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
++ <path
++ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+- inkscape:export-ydpi="90" />
+- <g
+- id="text10309"
+- style="font-size:40px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Futura;-inkscape-font-specification:Futura Medium"
+- transform="matrix(0.64605126,0,0,0.64605126,58.138831,104.45649)"
+ inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
++ d="m 252.05613,378.98631 0,-97.49115 288.50624,-81.0432 0,67.83207 z"
++ id="path5394"
++ inkscape:connector-curvature="0" />
++ <g
++ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+- inkscape:export-ydpi="90">
++ inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ transform="matrix(0.64605126,0,0,0.64605126,58.138831,104.45649)"
++ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Futura;-inkscape-font-specification:Futura Medium"
++ id="text10309">
+ <path
+- id="path10316"
++ inkscape:connector-curvature="0"
+ d="m 133.59691,311.19724 c 0,0 0.0341,-71.93226 0.0341,-71.93226 0,0 4.97796,2.12108 4.97796,2.12108 2.4191,1.03084 4.34433,2.57775 5.76509,4.64185 1.53424,2.08909 2.93256,5.12989 4.19288,9.12732 2.57036,8.129 3.86225,17.92567 3.85772,29.33406 -0.005,11.44161 -1.35809,19.98395 -4.04123,25.58595 -1.33737,2.7781 -2.73156,4.44376 -4.18165,5.00473 -1.34807,0.6107 -3.24782,0.22861 -5.68779,-1.13492 0,0 -4.91706,-2.74781 -4.91706,-2.74781 m 3.57614,-8.27683 c 0,0 1.62482,0.87739 1.62482,0.87739 1.62931,0.87983 2.99125,1.09483 4.08175,0.6397 1.09483,-0.52025 2.08846,-1.74916 2.97977,-3.68986 1.83397,-4.03722 2.75714,-10.08799 2.76049,-18.13201 0.003,-8.10729 -0.90365,-15.10613 -2.71203,-20.96799 -1.61748,-5.20484 -3.98605,-8.49142 -7.08641,-9.87087 0,0 -1.62455,-0.72279 -1.62455,-0.72279 0,0 -0.0238,51.86643 -0.0238,51.86643"
+- inkscape:connector-curvature="0" />
++ id="path10316" />
+ <path
+- id="path10318"
++ inkscape:connector-curvature="0"
+ d="m 171.6044,310.79008 c 0,0 -11.92047,-6.21665 -11.92047,-6.21665 0.0989,3.96019 0.53319,7.30268 1.30431,10.03197 0.77323,2.70408 1.76874,4.38967 2.98883,5.05334 0.95256,0.51815 1.74332,0.28998 2.37093,-0.68737 0.61752,-0.98564 1.32273,-3.04997 2.11628,-6.19783 0,0 3.29422,7.02686 3.29422,7.02686 -0.51213,2.21738 -1.05221,4.06653 -1.62009,5.5482 -0.56679,1.44567 -1.17269,2.56833 -1.81744,3.36871 -0.64334,0.76559 -1.33663,1.20382 -2.0795,1.31578 -0.74099,0.11163 -1.54239,-0.0749 -2.40371,-0.5583 -2.45636,-1.3786 -4.41214,-4.75525 -5.8774,-10.1178 -1.45767,-5.36709 -2.18221,-11.80744 -2.17931,-19.34157 0.003,-7.46897 0.70996,-13.16746 2.12652,-17.11048 1.43471,-3.89223 3.34632,-5.28239 5.74447,-4.14868 2.4412,1.15416 4.3855,4.33633 5.82264,9.55868 1.43278,5.20986 2.15057,11.83002 2.14801,19.84136 0,0 -0.0183,2.6338 -0.0183,2.6338 m -3.99695,-11.19743 c -0.53631,-6.20848 -1.83108,-9.81172 -3.87414,-10.81331 -0.46334,-0.22708 -0.89781,-0.22714 -1.30355,-10e-4 -0.4051
7,0.19331 -0.77615,0.59888 -1.11306,1.21644 -0.32533,0.58979 -0.60557,1.36421 -0.84087,2.32318 -0.23512,0.95823 -0.41428,2.09033 -0.53758,3.39647 0,0 7.6692,3.87824 7.6692,3.87824"
+- inkscape:connector-curvature="0" />
++ id="path10318" />
+ <path
+- id="path10320"
++ inkscape:connector-curvature="0"
+ d="m 179.93525,251.66351 c 0,0 -0.0121,41.86591 -0.0121,41.86591 1.62022,-3.948 3.46639,-5.4419 5.54274,-4.46032 2.41014,1.13948 4.43092,4.61505 6.05427,10.44356 1.6322,5.82609 2.45081,12.51411 2.44909,20.04041 -0.002,7.76847 -0.82973,13.74432 -2.47695,17.91009 -1.62595,4.11583 -3.66666,5.47456 -6.11352,4.10129 -2.05202,-1.15168 -3.87289,-4.37212 -5.46671,-9.64566 0,0 -0.001,5.15996 -0.001,5.15996 0,0 -4.00924,-2.24049 -4.00924,-2.24049 0,0 0.0258,-84.83261 0.0258,-84.83261 0,0 4.00805,1.65786 4.00805,1.65786 m 9.73919,66.18469 c 0.001,-4.79896 -0.46713,-8.94263 -1.4027,-12.42285 -0.94491,-3.54353 -2.12544,-5.65875 -3.53881,-6.35166 -1.50347,-0.73697 -2.72284,0.13731 -3.66162,2.61413 -0.92386,2.44141 -1.38538,5.98483 -1.38672,10.63611 -0.001,4.78635 0.45197,8.85375 1.36222,12.20995 0.91306,3.43436 2.11948,5.5629 3.62283,6.38065 1.42549,0.7754 2.6129,-0.0643 3.55932,-2.52762 0.96174,-2.49883 1.44433,-6.01376 1.44548,-10.53871"
+- inkscape:connector-curvature="0" />
++ id="path10320" />
+ <path
+- id="path10322"
++ inkscape:connector-curvature="0"
+ d="m 202.80947,298.68717 c 0,0 -0.0101,51.18253 -0.0101,51.18253 0,0 -4.32611,-2.41756 -4.32611,-2.41756 0,0 0.0109,-50.81986 0.0109,-50.81986 0,0 4.3253,2.05489 4.3253,2.05489 m -4.96901,-23.46565 c 4.4e-4,-2.04922 0.27393,-3.70212 0.8212,-4.96036 0.54823,-1.26037 1.20593,-1.72748 1.97379,-1.39905 0.78264,0.3349 1.45126,1.37296 2.00509,3.11597 0.55484,1.71129 0.83243,3.63731 0.83203,5.7757 -4.3e-4,2.13859 -0.27873,3.8374 -0.83418,5.09473 -0.54158,1.26101 -1.20414,1.71303 -1.98687,1.35837 -0.78074,-0.35359 -1.44454,-1.40288 -1.99217,-3.14615 -0.54664,-1.73998 -0.81936,-3.6856 -0.81889,-5.83921"
+- inkscape:connector-curvature="0" />
++ id="path10322" />
+ <path
+- id="path10324"
++ inkscape:connector-curvature="0"
+ d="m 222.90657,308.23503 c 0,0 4.70271,2.23419 4.70271,2.23419 0,0 -0.005,53.2621 -0.005,53.2621 0,0 -4.70368,-2.62856 -4.70368,-2.62856 0,0 6.5e-4,-5.53751 6.5e-4,-5.53751 -1.90915,3.64099 -3.94938,4.84159 -6.11798,3.62448 -2.71657,-1.52464 -4.94425,-5.37091 -6.69324,-11.52244 -1.72592,-6.2156 -2.58454,-13.24681 -2.58314,-21.11949 0.001,-7.73093 0.86222,-13.74862 2.58972,-18.07138 1.73711,-4.34674 3.92492,-5.90726 6.57295,-4.65541 2.30326,1.08895 4.38361,4.59766 6.23649,10.54642 0,0 7.2e-4,-6.1324 7.2e-4,-6.1324 m -10.8443,20.66662 c -8.1e-4,4.97903 0.49779,9.29877 1.49823,12.96793 1.03051,3.73139 2.33394,6.02979 3.91368,6.88909 1.69661,0.92288 3.07441,0.12183 4.12912,-2.41319 1.05819,-2.65201 1.58892,-6.46131 1.5895,-11.42118 5.6e-4,-4.95966 -0.52918,-9.31691 -1.58652,-13.06242 -1.05383,-3.66071 -2.41744,-5.8973 -4.08683,-6.71571 -1.5663,-0.76777 -2.87026,0.16426 -3.91516,2.78663 -1.02812,2.65605 -1.54129,6.3101 -1.54202,10.96885"
+- inkscape:connector-curvature="0" />
++ id="path10324" />
+ <path
+- id="path10326"
++ inkscape:connector-curvature="0"
+ d="m 233.61915,313.32443 c 0,0 4.86427,2.31094 4.86427,2.31094 0,0 -2.7e-4,5.00485 -2.7e-4,5.00485 1.71074,-3.52308 3.64965,-4.78093 5.82081,-3.75454 2.5118,1.18756 4.48297,4.13443 5.9036,8.84914 1.23117,4.03483 1.84851,9.9569 1.84853,17.75524 0,0 0,33.90579 0,33.90579 0,0 -5.07083,-2.83374 -5.07083,-2.83374 0,0 6.2e-4,-30.6586 6.2e-4,-30.6586 9e-5,-5.40954 -0.29652,-9.29502 -0.88902,-11.65343 -0.57668,-2.38426 -1.62396,-3.94697 -3.13732,-4.68877 -1.63768,-0.80262 -2.79522,0.005 -3.4777,2.41735 -0.6666,2.37712 -0.99957,6.93792 -0.99994,13.68633 0,0 -0.001,26.14439 -0.001,26.14439 0,0 -4.86529,-2.71887 -4.86529,-2.71887 0,0 0.004,-53.76608 0.004,-53.76608"
+- inkscape:connector-curvature="0" />
++ id="path10326" />
+ </g>
+ <g
+- inkscape:groupmode="layer"
+- id="layer3"
++ style="display:none"
+ inkscape:label="rwlayershort"
+- style="display:none">
++ id="layer3"
++ inkscape:groupmode="layer">
+ <g
+- sodipodi:type="inkscape:box3d"
+- style="fill:#24b8eb;fill-opacity:0.64251206;stroke:#253237;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+- id="g11520"
+- inkscape:perspectiveID="#perspective4014"
++ inkscape:corner7="0.23104367 : -0.032927705 : 0.53664065 : 1"
+ inkscape:corner0="0.51156871 : 0.026428054 : 0 : 1"
+- inkscape:corner7="0.23104367 : -0.032927705 : 0.53664065 : 1">
++ inkscape:perspectiveID="#perspective4014"
++ id="g11520"
++ style="fill:#24b8eb;fill-opacity:0.64251206;stroke:#253237;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3d">
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path11530"
+- style="fill:#24b8eb;fill-opacity:0.64251206;fill-rule:evenodd;stroke:none"
++ d="M 131.92561,229.48947 254.03226,279.93524 540.96513,197.86229 411.55236,171.87435 z"
+ inkscape:box3dsidetype="13"
+- d="M 131.92561,229.48947 254.03226,279.93524 540.96513,197.86229 411.55236,171.87435 z" />
+- <path
+- sodipodi:type="inkscape:box3dside"
+- id="path11522"
+ style="fill:#24b8eb;fill-opacity:0.64251206;fill-rule:evenodd;stroke:none"
+- inkscape:box3dsidetype="6"
+- d="m 131.92561,190.22181 0,39.26766 279.62675,-57.61512 0,-28.97934 z" />
++ id="path11530"
++ sodipodi:type="inkscape:box3dside" />
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path11532"
++ d="m 131.92561,190.22181 0,39.26766 279.62675,-57.61512 0,-28.97934 z"
++ inkscape:box3dsidetype="6"
+ style="fill:#24b8eb;fill-opacity:0.64251206;fill-rule:evenodd;stroke:none"
++ id="path11522"
++ sodipodi:type="inkscape:box3dside" />
++ <path
++ d="m 411.55236,142.89501 129.41277,21.38902 0,33.57826 -129.41277,-25.98794 z"
+ inkscape:box3dsidetype="11"
+- d="m 411.55236,142.89501 129.41277,21.38902 0,33.57826 -129.41277,-25.98794 z" />
++ style="fill:#24b8eb;fill-opacity:0.64251206;fill-rule:evenodd;stroke:none"
++ id="path11532"
++ sodipodi:type="inkscape:box3dside" />
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path11524"
+- style="fill:#24b8eb;fill-opacity:0.64251206"
++ d="M 131.92561,190.22181 254.03226,231.71944 540.96513,164.28403 411.55236,142.89501 z"
+ inkscape:box3dsidetype="5"
+- d="M 131.92561,190.22181 254.03226,231.71944 540.96513,164.28403 411.55236,142.89501 z" />
+- <path
+- sodipodi:type="inkscape:box3dside"
+- id="path11528"
+ style="fill:#24b8eb;fill-opacity:0.64251206"
+- inkscape:box3dsidetype="14"
+- d="m 254.03226,231.71944 0,48.2158 286.93287,-82.07295 0,-33.57826 z" />
++ id="path11524"
++ sodipodi:type="inkscape:box3dside" />
+ <path
+- sodipodi:type="inkscape:box3dside"
+- id="path11526"
++ d="m 254.03226,231.71944 0,48.2158 286.93287,-82.07295 0,-33.57826 z"
++ inkscape:box3dsidetype="14"
+ style="fill:#24b8eb;fill-opacity:0.64251206"
++ id="path11528"
++ sodipodi:type="inkscape:box3dside" />
++ <path
++ d="m 131.92561,190.22181 122.10665,41.49763 0,48.2158 -122.10665,-50.44577 z"
+ inkscape:box3dsidetype="3"
+- d="m 131.92561,190.22181 122.10665,41.49763 0,48.2158 -122.10665,-50.44577 z" />
++ style="fill:#24b8eb;fill-opacity:0.64251206"
++ id="path11526"
++ sodipodi:type="inkscape:box3dside" />
+ </g>
+ <g
+- id="text12905"
++ transform="matrix(0.65426564,0,0,0.65426564,59.078784,80.39098)"
+ style="font-size:40px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic"
+- transform="matrix(0.65426564,0,0,0.65426564,59.078784,80.39098)">
++ id="text12905">
+ <path
+- id="path12912"
++ inkscape:connector-curvature="0"
+ d="m 132.39162,196.56835 c 0,0 2.25832,0.79098 2.25832,0.79098 0,0 1.50732,28.61196 1.50732,28.61196 0,0 4.34598,-26.56183 4.34598,-26.56183 0,0 2.722,0.95339 2.722,0.95339 0,0 1.63516,29.08943 1.63516,29.08943 0,0 4.31997,-27.00363 4.31997,-27.00363 0,0 2.42221,0.84838 2.42221,0.84838 0,0 -5.66212,33.42382 -5.66212,33.42382 0,0 -2.73065,-1.12467 -2.73065,-1.12467 0,0 -1.5784,-29.68879 -1.5784,-29.68879 0,0 -4.4624,27.20079 -4.4624,27.20079 0,0 -2.67264,-1.10077 -2.67264,-1.10077 0,0 -2.10475,-35.43906 -2.10475,-35.43906"
+- inkscape:connector-curvature="0" />
++ id="path12912" />
+ <path
+- id="path12914"
++ inkscape:connector-curvature="0"
+ d="m 164.03604,213.26939 c -0.2639,-0.42447 -0.56258,-0.78434 -0.89592,-1.0796 -0.33304,-0.29492 -0.68661,-0.50929 -1.06059,-0.64322 -1.33705,-0.47863 -2.47231,0.33686 -3.4066,2.43656 -0.92991,2.06688 -1.50465,5.07325 -1.72714,9.01466 0,0 -1.04777,17.82424 -1.04777,17.82424 0,0 -2.42011,-0.99676 -2.42011,-0.99676 0,0 1.98378,-35.17658 1.98378,-35.17658 0,0 2.47527,0.86697 2.47527,0.86697 0,0 -0.33507,5.56959 -0.33507,5.56959 0.60533,-1.89455 1.35104,-3.25595 2.23803,-4.08114 0.89961,-0.82526 1.87507,-1.05633 2.92646,-0.68969 0.27488,0.0959 0.54641,0.23479 0.81455,0.4165 0.26786,0.15981 0.53715,0.37533 0.80786,0.64667 0,0 -0.35275,5.89174 -0.35275,5.89174"
+- inkscape:connector-curvature="0" />
++ id="path12914" />
+ <path
+- id="path12916"
++ inkscape:connector-curvature="0"
+ d="m 167.87077,194.36999 c 0,0 2.5978,0.8462 2.5978,0.8462 0,0 -0.48615,7.70745 -0.48615,7.70745 0,0 -2.58509,-0.87602 -2.58509,-0.87602 0,0 0.47344,-7.67763 0.47344,-7.67763 m -0.87992,14.31682 c 0,0 2.57415,0.9016 2.57415,0.9016 0,0 -2.30324,35.91396 -2.30324,35.91396 0,0 -2.5149,-1.0358 -2.5149,-1.0358 0,0 2.24399,-35.77976 2.24399,-35.77976"
+- inkscape:connector-curvature="0" />
++ id="path12916" />
+ <path
+- id="path12918"
++ inkscape:connector-curvature="0"
+ d="m 183.34977,214.41656 c 0,0 -0.34194,4.75863 -0.34194,4.75863 0,0 -5.33307,-1.91046 -5.33307,-1.91046 0,0 -1.36427,19.81122 -1.36427,19.81122 -0.0441,0.73284 -0.076,1.34864 -0.0958,1.84769 -0.0198,0.49879 -0.0272,0.89218 -0.0223,1.18025 0.024,1.41732 0.22117,2.51814 0.59164,3.30404 0.38018,0.79025 0.97369,1.34835 1.78193,1.67447 0,0 2.66812,1.07661 2.66812,1.07661 0,0 -0.36838,4.94638 -0.36838,4.94638 0,0 -2.51686,-1.03661 -2.51686,-1.03661 -1.55308,-0.63966 -2.72009,-1.81877 -3.50617,-3.53794 -0.77559,-1.71295 -1.18868,-3.99849 -1.24016,-6.86324 -0.009,-0.50749 -0.005,-1.05378 0.0125,-1.63897 0.0171,-0.60759 0.0472,-1.26529 0.0905,-1.97325 0,0 1.33026,-19.73599 1.33026,-19.73599 0,0 -2.21945,-0.79507 -2.21945,-0.79507 0,0 0.32464,-4.68341 0.32464,-4.68341 0,0 2.18338,0.76473 2.18338,0.76473 0,0 0.70719,-10.54703 0.70719,-10.54703 0,0 2.66503,0.88587 2.66503,0.88587 0,0 -0.71095,10.59328 -0.71095,10.59328 0,0 5.36413,1.8788 5.36413,1.8788"
+- inkscape:connector-curvature="0" />
++ id="path12918" />
+ <path
+- id="path12920"
++ inkscape:connector-curvature="0"
+ d="m 199.13849,236.70883 c 0,0 -1.72385,21.2125 -1.72385,21.2125 0,0 -2.77523,-1.14302 -2.77523,-1.14302 0,0 0.45537,-5.5694 0.45537,-5.5694 -0.79039,1.93977 -1.69787,3.25939 -2.72178,3.963 -1.00998,0.68226 -2.14049,0.76306 -3.39088,0.2461 -1.4019,-0.5796 -2.56171,-2.02483 -3.48324,-4.3353 -0.91085,-2.32565 -1.3871,-5.01869 -1.42975,-8.08698 -0.0612,-4.40249 0.65095,-7.60298 2.1444,-9.6005 1.51381,-2.0078 3.64053,-2.5073 6.39035,-1.48111 0,0 3.88091,1.44834 3.88091,1.44834 0,0 0.13737,-1.64241 0.13737,-1.64241 0.0187,-0.17753 0.0322,-0.36859 0.0405,-0.57316 0.008,-0.22771 0.0101,-0.57318 0.006,-1.03646 -0.0184,-2.06353 -0.40494,-3.80038 -1.15864,-5.20652 -0.74267,-1.42355 -1.7772,-2.37178 -3.10017,-2.84471 -0.90567,-0.32369 -1.83075,-0.39003 -2.77476,-0.20023 -0.93078,0.19278 -1.88487,0.63805 -2.86168,1.33418 0,0 0.40119,-5.68296 0.40119,-5.68296 1.0224,-0.5343 2.0267,-0.84843 3.0124,-0.94098 0.99899,-0.11252 1.96874,-0.005 2.90868,0.32235 2.01064,0.70123 3.55659
,2.24252 4.62956,4.62368 1.08518,2.38922 1.64359,5.50025 1.67366,9.32128 0.006,0.76751 -0.0125,1.66447 -0.0556,2.69043 -0.0433,1.00181 -0.11156,2.06254 -0.20482,3.18188 m -3.01967,1.47698 c 0,0 -2.78542,-1.06163 -2.78542,-1.06163 -2.2624,-0.86226 -3.92041,-0.80292 -4.98268,0.16995 -1.04789,0.94964 -1.55167,2.85777 -1.51494,5.72282 0.0254,1.98149 0.31466,3.64088 0.8682,4.98133 0.56384,1.34561 1.32816,2.21415 2.29484,2.60564 1.48548,0.60158 2.77591,-0.0812 3.87044,-2.05855 1.10034,-2.01109 1.81516,-5.00707 2.14096,-8.99265 0,0 0.1086,-1.36691 0.1086,-1.36691"
+- inkscape:connector-curvature="0" />
++ id="path12920" />
+ <path
+- id="path12922"
++ inkscape:connector-curvature="0"
+ d="m 217.64994,242.08214 c -0.003,-3.45467 -0.36941,-6.29845 -1.09988,-8.52314 -0.71911,-2.21914 -1.712,-3.55453 -2.9753,-4.006 -0.9147,-0.32682 -1.77169,-0.13384 -2.57095,0.57649 -0.7861,0.6882 -1.46696,1.86026 -2.04305,3.51377 -0.60552,1.7306 -1.08098,3.81943 -1.42712,6.2652 -0.33468,2.41877 -0.49538,4.89667 -0.48288,7.43549 0.0158,3.20708 0.36798,5.85818 1.05704,7.96044 0.69992,2.08483 1.65443,3.37263 2.86659,3.86366 0.92007,0.37271 1.77251,0.25313 2.55721,-0.36105 0.78714,-0.63948 1.47963,-1.76427 2.07706,-3.37684 0.61006,-1.68425 1.10315,-3.73887 1.47858,-6.16534 0.37661,-2.43421 0.56447,-4.82931 0.5627,-7.18268 m -9.23169,-12.84717 c 0.71257,-1.9212 1.61108,-3.31025 2.69696,-4.16424 1.10132,-0.8778 2.25765,-1.10762 3.46876,-0.68529 1.8688,0.65177 3.36054,2.56955 4.46812,5.75349 1.11991,3.19191 1.67936,7.16826 1.67728,11.91278 -0.002,3.86886 -0.33149,7.48101 -0.9869,10.83305 -0.64142,3.34015 -1.55578,6.15428 -2.74017,8.44433 -0.7715,1.50955 -1.65836,2.54577
-2.65987,3.1114 -0.99765,0.5634 -2.04044,0.61881 -3.12849,0.16897 -1.14744,-0.4744 -2.14129,-1.46065 -2.98356,-2.95812 -0.84085,-1.4949 -1.52693,-3.4884 -2.05939,-5.98273 0,0 -0.48266,5.66038 -0.48266,5.66038 0,0 -2.84889,-1.17336 -2.84889,-1.17336 0,0 4.44431,-52.94734 4.44431,-52.94734 0,0 2.95322,0.96198 2.95322,0.96198 0,0 -1.81872,21.0647 -1.81872,21.0647"
+- inkscape:connector-curvature="0" />
++ id="path12922" />
+ <path
+- id="path12924"
++ inkscape:connector-curvature="0"
+ d="m 228.71944,214.19071 c 0,0 3.15615,1.02808 3.15615,1.02808 0,0 -5.33605,54.69811 -5.33605,54.69811 0,0 -3.03879,-1.25157 -3.03879,-1.25157 0,0 5.21869,-54.47462 5.21869,-54.47462"
+- inkscape:connector-curvature="0" />
++ id="path12924" />
+ <path
+- id="path12926"
++ inkscape:connector-curvature="0"
+ d="m 249.07211,254.74636 c 0.0404,-0.38368 0.0691,-0.78443 0.0859,-1.20226 0.0288,-0.41348 0.0457,-0.83161 0.0506,-1.25434 0.0353,-3.03778 -0.36798,-5.60275 -1.20915,-7.68768 -0.82831,-2.07819 -1.97429,-3.37815 -3.43389,-3.89992 -1.61834,-0.57843 -3.05045,-0.009 -4.29713,1.70059 -1.23987,1.67549 -2.18445,4.34652 -2.83626,8.00619 0,0 11.63988,4.33748 11.63988,4.33748 m 2.81056,6.45167 c 0,0 -15.09094,-5.79069 -15.09094,-5.79069 -0.0752,0.89703 -0.126,1.60789 -0.15253,2.13298 -0.0265,0.52486 -0.0411,0.98119 -0.0437,1.36905 -0.0225,3.36482 0.44677,6.15468 1.40888,8.37881 0.97504,2.23208 2.36307,3.71384 4.1703,4.44572 1.39681,0.56568 2.72662,0.77468 3.98908,0.62476 1.26781,-0.15056 2.45566,-0.64338 3.56302,-1.48066 0,0 -0.70189,6.42657 -0.70189,6.42657 -1.18125,0.49488 -2.39603,0.72794 -3.64426,0.70088 -1.23153,-0.0222 -2.4791,-0.29519 -3.74285,-0.81767 -2.68557,-1.11031 -4.73074,-3.28927 -6.14928,-6.53818 -1.40393,-3.26112 -2.09137,-7.34961 -2.06451,-12.28511 0.023,
-4.22844 0.39788,-8.03395 1.12728,-11.41867 0.74471,-3.42191 1.82516,-6.33485 3.24539,-8.73744 0.92003,-1.50587 2.01004,-2.53659 3.27144,-3.08937 1.27888,-0.55109 2.63589,-0.57813 4.0712,-0.0776 2.26618,0.79035 4.06153,2.85633 5.37632,6.19826 1.32912,3.35217 1.96352,7.4395 1.9016,12.24399 -0.0148,1.14841 -0.0669,2.36942 -0.15622,3.66262 -0.0889,1.26675 -0.21507,2.6175 -0.37835,4.05176"
+- inkscape:connector-curvature="0" />
++ id="path12926" />
+ </g>
+ <g
+- transform="matrix(1.1734694,0,0,1.1734694,-48.893189,-48.489991)"
++ id="text14746"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New"
+- id="text14746">
++ transform="matrix(1.1734694,0,0,1.1734694,-48.893189,-48.489991)">
+ <path
+- inkscape:connector-curvature="0"
++ id="path14753"
+ d="m 292.56742,237.4772 c 0,0 0,-1.59047 0,-1.59047 -1e-5,-0.5391 0.0453,-0.93633 0.13582,-1.19161 0.0987,-0.25714 0.22627,-0.40435 0.38255,-0.44167 0.1562,-0.0372 0.27949,0.0501 0.36989,0.26184 0.0986,0.20984 0.14786,0.58398 0.14787,1.12245 0,0 0,6.27362 0,6.27362 -10e-6,0.55648 -0.0493,0.96364 -0.14787,1.22152 -0.0904,0.25592 -0.21369,0.40336 -0.36989,0.44226 -0.13983,0.0349 -0.25912,-0.0432 -0.35786,-0.23424 -0.0906,-0.1931 -0.14406,-0.53022 -0.16051,-1.01139 -0.0412,-1.49945 -0.41597,-2.74678 -1.12524,-3.74312 -0.95853,-1.37023 -2.0518,-1.9091 -3.28082,-1.61375 -0.80737,0.19408 -1.57032,0.76646 -2.2886,1.71804 -0.5353,0.69109 -0.96233,1.48343 -1.28077,2.37687 -0.55364,1.55049 -0.99453,3.22917 -1.32232,5.0356 -0.2355,1.33038 -0.35329,2.79525 -0.35329,4.3941 0,0 0,4.00625 0,4.00625 0,3.41577 0.57185,6.23436 1.71333,8.4515 1.13855,2.19332 2.4576,3.08294 3.95555,2.67411 0.89633,-0.24464 1.69568,-0.88624 2.39858,-1.92393 0.71,-1.03826 1.39417,-2.49958 2.05261,-4.3
8314 0.13978,-0.41447 0.29596,-0.64466 0.46853,-0.69065 0.14784,-0.0394 0.26691,0.0276 0.35722,0.20089 0.0903,0.17329 0.13541,0.41244 0.13543,0.71743 -2e-5,0.41269 -0.17649,1.08812 -0.52962,2.02685 -0.67425,1.83488 -1.43607,3.29166 -2.28591,4.36978 -0.84324,1.0599 -1.70051,1.71048 -2.57191,1.95056 -0.75663,0.20846 -1.52704,0.10426 -2.31133,-0.31343 -0.60168,-0.3239 -1.09951,-0.75841 -1.49315,-1.30354 -0.394,-0.54561 -0.88069,-1.51132 -1.46037,-2.89811 -0.57203,-1.40902 -0.96363,-2.74066 -1.1743,-3.99402 -0.21078,-1.27211 -0.3162,-2.69969 -0.3162,-4.28229 0,0 0,-4.6659 0,-4.6659 0,-2.25562 0.27827,-4.62592 0.83428,-7.1086 0.56373,-2.49973 1.32824,-4.49134 2.29251,-5.97481 0.97053,-1.50028 2.01815,-2.3831 3.14231,-2.65042 1.72644,-0.41045 3.20678,0.51535 4.44348,2.77142"
+- id="path14753" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path14755"
+ d="m 308.66695,250.09217 c -10e-6,3.3873 -0.5478,6.4277 -1.64547,9.12638 -1.09249,2.70338 -2.41593,4.27147 -3.97244,4.7003 -1.57825,0.43483 -2.92347,-0.40609 -4.03348,-2.528 -1.11284,-2.14518 -1.67032,-4.92676 -1.67032,-8.34065 0,-3.43174 0.55748,-6.50462 1.67032,-9.21347 1.11001,-2.71971 2.45523,-4.27243 4.03348,-4.66229 1.55651,-0.38443 2.87995,0.49215 3.97244,2.62466 1.09767,2.12517 1.64546,4.88816 1.64547,8.29307 m -1.01277,0.2646 c -10e-6,-2.7907 -0.44957,-5.05158 -1.35007,-6.78534 -0.89442,-1.73935 -1.98297,-2.45048 -3.26712,-2.12996 -1.28798,0.32151 -2.38981,1.59368 -3.30406,3.8193 -0.90806,2.21042 -1.3628,4.71879 -1.36279,7.52165 -10e-6,2.78505 0.45473,5.0558 1.36279,6.80955 0.91425,1.7479 2.01608,2.44432 3.30406,2.09279 1.28415,-0.35048 2.3727,-1.63042 3.26712,-3.83716 0.9005,-2.22197 1.35006,-4.71775 1.35007,-7.49083"
+- id="path14755" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path14757"
+ d="m 314.42401,237.15342 c 0,0 0,3.33838 0,3.33838 0.68834,-1.73173 1.30925,-2.96305 1.86301,-3.69535 0.55304,-0.7313 1.17532,-1.18207 1.86656,-1.35283 0.74434,-0.18383 1.42164,0.006 2.03224,0.56853 0.43228,0.41464 0.82174,1.18719 1.16849,2.31729 0.35414,1.10991 0.53111,2.29857 0.53112,3.56668 0,0 0,13.7844 0,13.7844 0,0 0.81847,-0.22256 0.81847,-0.22256 0.23026,-0.0626 0.39521,-0.003 0.49492,0.17762 0.0997,0.16363 0.14951,0.41019 0.14952,0.73967 -1e-5,0.31216 -0.0499,0.58594 -0.14952,0.82137 -0.0997,0.23549 -0.26466,0.38485 -0.49492,0.44805 0,0 -2.59918,0.71347 -2.59918,0.71347 -0.23955,0.0658 -0.40963,0.008 -0.51015,-0.17349 -0.10057,-0.18148 -0.15085,-0.42903 -0.15085,-0.74263 0,-0.331 0.0503,-0.60603 0.15085,-0.82505 0.10052,-0.23636 0.2706,-0.3871 0.51015,-0.45224 0,0 0.81034,-0.22035 0.81034,-0.22035 0,0 0,-13.43494 0,-13.43494 -10e-6,-1.54782 -0.25067,-2.78882 -0.75241,-3.72384 -0.50236,-0.9535 -1.17565,-1.32537 -2.02071,-1.11445 -0.64462,0.16091 -1.20459,
0.59773 -1.67958,1.31084 -0.47553,0.69646 -1.15466,2.32016 -2.03835,4.87447 0,0 0,13.85296 0,13.85296 0,0 1.1141,-0.30294 1.1141,-0.30294 0.23417,-0.0637 0.40192,-0.004 0.50332,0.17797 0.10137,0.16478 0.15204,0.4133 0.15205,0.74557 -1e-5,0.31479 -0.0507,0.59099 -0.15205,0.82865 -0.1014,0.23771 -0.26915,0.38871 -0.50332,0.45299 0,0 -3.22119,0.88421 -3.22119,0.88421 -0.23607,0.0648 -0.40534,0.006 -0.50771,-0.17703 -0.10241,-0.18288 -0.15362,-0.43257 -0.15362,-0.74903 0,-0.33403 0.0512,-0.61171 0.15362,-0.83298 0.10237,-0.23878 0.27164,-0.39025 0.50771,-0.45445 0,0 1.11958,-0.30443 1.11958,-0.30443 0,0 0,-18.34278 0,-18.34278 0,0 -0.83646,0.20956 -0.83646,0.20956 -0.23592,0.0591 -0.40507,-0.004 -0.50738,-0.18919 -0.10234,-0.18526 -0.15352,-0.4449 -0.15351,-0.77884 -10e-6,-0.31633 0.0512,-0.59268 0.15351,-0.829 0.10231,-0.23622 0.27146,-0.38357 0.50738,-0.44208 0,0 1.82397,-0.4522 1.82397,-0.4522"
+- id="path14757" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path14759"
+ d="m 329.72799,233.35924 c 0,0 5.13345,-1.27269 5.13345,-1.27269 0.22371,-0.0554 0.38397,0.007 0.48085,0.18852 0.0968,0.18111 0.14525,0.43402 0.14526,0.75877 -10e-6,0.30771 -0.0485,0.57622 -0.14526,0.80555 -0.0969,0.22944 -0.25714,0.37217 -0.48085,0.4282 0,0 -5.13345,1.28608 -5.13345,1.28608 0,0 0,14.43158 0,14.43158 -10e-6,1.25643 0.21891,2.24711 0.65643,2.97148 0.44458,0.72157 1.09178,0.96605 1.94066,0.73436 0.6374,-0.17396 1.32621,-0.5761 2.06616,-1.20576 0.73864,-0.64564 1.31224,-1.29704 1.72148,-1.95454 0.1487,-0.2622 0.27135,-0.40633 0.36797,-0.43241 0.11885,-0.0321 0.22284,0.0507 0.31196,0.24856 0.0891,0.18071 0.13361,0.41608 0.13362,0.70616 -10e-6,0.25597 -0.0483,0.50799 -0.14476,0.75609 -0.23768,0.62804 -0.81757,1.40124 -1.74108,2.32087 -0.91812,0.90249 -1.8008,1.47097 -2.64781,1.70434 -1.10446,0.30428 -1.98559,-0.0463 -2.64198,-1.05341 -0.65743,-1.00874 -0.98654,-2.52169 -0.98653,-4.53773 0,0 0,-14.44811 0,-14.44811 0,0 -1.76335,0.44177 -1.76335,0.44177
-0.22807,0.0572 -0.39159,-0.006 -0.4905,-0.18811 -0.0989,-0.18257 -0.1484,-0.43805 -0.14839,-0.7664 -1e-5,-0.31102 0.0494,-0.58251 0.14839,-0.81445 0.0989,-0.23183 0.26243,-0.37601 0.4905,-0.43258 0,0 1.76335,-0.43717 1.76335,-0.43717 0,0 0,-6.4099 0,-6.4099 -1e-5,-0.51689 0.0454,-0.89822 0.13621,-1.14394 0.0908,-0.24561 0.20423,-0.38466 0.34033,-0.41716 0.14361,-0.0342 0.26073,0.0498 0.35139,0.25184 0.0906,0.20213 0.13594,0.56133 0.13595,1.07763 0,0 0,6.40256 0,6.40256"
+- id="path14759" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path14761"
+ d="m 347.92414,250.72178 c 0,0 0,-3.05626 0,-3.05626 -1.32486,2.95612 -2.74493,4.64604 -4.26117,5.06378 -1.10424,0.30423 -1.9692,-0.10219 -2.59338,-1.22112 -0.62513,-1.1376 -0.93805,-2.65046 -0.93805,-4.53728 0,-2.07378 0.41226,-3.99242 1.23557,-5.75329 0.82167,-1.75736 2.01824,-2.83768 3.58648,-3.24242 0.42203,-0.10891 0.87997,-0.15956 1.37368,-0.15206 0.49311,-0.009 1.02545,0.0469 1.59687,0.16843 0,0 0,-3.43514 0,-3.43514 -1e-5,-1.16186 -0.23137,-2.11384 -0.69447,-2.85657 -0.46365,-0.7435 -1.16008,-0.99968 -2.09048,-0.76745 -0.71376,0.17817 -1.7173,0.9112 -3.01271,2.20186 -0.23464,0.22862 -0.38501,0.35128 -0.45105,0.36788 -0.11743,0.0296 -0.22021,-0.0464 -0.30832,-0.22792 -0.0808,-0.18338 -0.12119,-0.42787 -0.12118,-0.73345 -10e-6,-0.28856 0.0367,-0.52691 0.11017,-0.715 0.10279,-0.2802 0.51741,-0.73128 1.24291,-1.35247 1.14063,-0.994 2.00133,-1.56201 2.58384,-1.70592 1.1553,-0.28533 2.05404,0.15837 2.69792,1.32913 0.64285,1.15216 0.9639,2.56014 0.96391,4.22531
0,0 0,14.02795 0,14.02795 0,0 1.20981,-0.32897 1.20981,-0.32897 0.22283,-0.0606 0.38091,-0.003 0.4743,0.17316 0.0933,0.15921 0.14002,0.39824 0.14004,0.7171 -2e-5,0.3021 -0.0467,0.56663 -0.14004,0.79361 -0.0934,0.22705 -0.25147,0.37117 -0.4743,0.43233 0,0 -2.13035,0.58478 -2.13035,0.58478 m 0,-10.558 c -0.42669,-0.17475 -0.87915,-0.26722 -1.35749,-0.27728 -0.47891,-0.0101 -0.9838,0.054 -1.51479,0.19244 -1.33413,0.34776 -2.37964,1.28966 -3.13434,2.82696 -0.57244,1.15204 -0.85896,2.42481 -0.85896,3.81711 0,1.29044 0.21674,2.31854 0.64989,3.0837 0.44002,0.76238 1.07722,1.02935 1.9107,0.80187 0.79534,-0.21708 1.53095,-0.78111 2.20715,-1.69129 0.68232,-0.92751 1.38163,-2.28814 2.09784,-4.08071 0,0 0,-4.6728 0,-4.6728"
+- id="path14761" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path14763"
+ d="m 358.9208,215.38083 c 0,0 0,5.40783 0,5.40783 0,0 -1.31083,0.31638 -1.31083,0.31638 0,0 0,-5.41657 0,-5.41657 0,0 1.31083,-0.30764 1.31083,-0.30764 m 0.0317,10.73306 c 0,0 0,19.48737 0,19.48737 0,0 3.46775,-0.94294 3.46775,-0.94294 0.21618,-0.0588 0.36953,-0.001 0.46013,0.17246 0.0906,0.15719 0.13584,0.39281 0.13585,0.70687 -1e-5,0.29756 -0.0453,0.5579 -0.13585,0.7811 -0.0906,0.22326 -0.24395,0.36455 -0.46013,0.42389 0,0 -7.86049,2.15769 -7.86049,2.15769 -0.21341,0.0586 -0.36643,3.5e-4 -0.45897,-0.17483 -0.0926,-0.1752 -0.13887,-0.41325 -0.13887,-0.71413 0,-0.31759 0.0463,-0.58094 0.13887,-0.79001 0.0925,-0.22573 0.24556,-0.36759 0.45897,-0.42562 0,0 3.50529,-0.95316 3.50529,-0.95316 0,0 0,-17.38816 0,-17.38816 0,0 -2.59952,0.65125 -2.59952,0.65125 -0.21294,0.0534 -0.36917,-0.008 -0.46862,-0.1831 -0.0924,-0.17722 -0.13856,-0.41614 -0.13855,-0.71671 -1e-5,-0.31722 0.0462,-0.58749 0.13855,-0.81081 0.0924,-0.22321 0.24857,-0.36209 0.46862,-0.41667 0,0 3.48697,-0
.86449 3.48697,-0.86449"
+- id="path14763" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path14765"
+ d="m 368.46442,223.75567 c 0,0 0,3.12776 0,3.12776 0.60425,-1.6123 1.14936,-2.75688 1.63557,-3.43494 0.4856,-0.67719 1.03206,-1.09054 1.63914,-1.24051 0.65376,-0.16146 1.24872,0.0263 1.78514,0.56245 0.37979,0.39496 0.72197,1.12482 1.02665,2.18925 0.31119,1.04566 0.4667,2.16256 0.46671,3.35132 0,0 0,12.92183 0,12.92183 0,0 0.71929,-0.19559 0.71929,-0.19559 0.20237,-0.055 0.34735,0.003 0.43499,0.17441 0.0876,0.155 0.13141,0.38695 0.13142,0.69584 -1e-5,0.29266 -0.0438,0.54854 -0.13142,0.76765 -0.0876,0.21918 -0.23262,0.35655 -0.43499,0.4121 0,0 -2.28391,0.62693 -2.28391,0.62693 -0.21044,0.0578 -0.35985,8.6e-4 -0.44816,-0.17084 -0.0883,-0.17172 -0.13252,-0.40454 -0.13251,-0.69846 -1e-5,-0.31023 0.0442,-0.56721 0.13251,-0.77087 0.0883,-0.21993 0.23772,-0.3585 0.44816,-0.41572 0,0 0.71195,-0.19359 0.71195,-0.19359 0,0 0,-12.59334 0,-12.59334 0,-1.45086 -0.22023,-2.61784 -0.66105,-3.50168 -0.44133,-0.90112 -1.03277,-1.25955 -1.77501,-1.0743 -0.56613,0.14133 -1.05787,0.5
4243 -1.47496,1.20365 -0.41753,0.64556 -1.01377,2.15684 -1.78952,4.5368 0,0 0,12.97896 0,12.97896 0,0 0.97803,-0.26595 0.97803,-0.26595 0.20559,-0.0559 0.35287,0.002 0.4419,0.17485 0.089,0.15603 0.1335,0.38972 0.1335,0.70106 0,0.29497 -0.0445,0.55297 -0.1335,0.77401 -0.089,0.2211 -0.23631,0.35987 -0.4419,0.41631 0,0 -2.82735,0.7761 -2.82735,0.7761 -0.20715,0.0569 -0.35568,-0.001 -0.44551,-0.17409 -0.0899,-0.17297 -0.13479,-0.40769 -0.13479,-0.70413 0,-0.31289 0.0449,-0.57216 0.13479,-0.77778 0.0898,-0.22202 0.23836,-0.36119 0.44551,-0.41752 0,0 0.98254,-0.26717 0.98254,-0.26717 0,0 0,-17.18426 0,-17.18426 0,0 -0.73409,0.18391 -0.73409,0.18391 -0.20703,0.0519 -0.35546,-0.01 -0.44524,-0.18475 -0.0898,-0.17506 -0.13471,-0.41902 -0.13471,-0.73184 0,-0.29632 0.0449,-0.55442 0.13471,-0.7743 0.0898,-0.21977 0.23821,-0.35532 0.44524,-0.40667 0,0 1.60087,-0.39689 1.60087,-0.39689"
+- id="path14765" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path14767"
+ d="m 388.11235,229.76789 c 0,0 -8.48758,2.22224 -8.48758,2.22224 0.14697,2.60006 0.60091,4.60711 1.36077,6.01981 0.76503,1.39207 1.70765,1.93407 2.82657,1.62868 0.62097,-0.16949 1.27063,-0.59601 1.94883,-1.27892 0.67702,-0.6817 1.22829,-1.48892 1.65434,-2.42175 0.12444,-0.27395 0.23249,-0.42323 0.32414,-0.44789 0.10471,-0.0282 0.19631,0.0513 0.27482,0.23843 0.0785,0.17107 0.11771,0.39273 0.11772,0.665 -10e-6,0.27228 -0.0523,0.55072 -0.15697,0.83539 -0.31413,0.88653 -0.87429,1.79282 -1.68153,2.71981 -0.80235,0.91103 -1.62941,1.48439 -2.48135,1.71911 -1.43066,0.39416 -2.63019,-0.41452 -3.59644,-2.43084 -0.96193,-2.03924 -1.44377,-4.68961 -1.44377,-7.94738 0,-2.96601 0.45175,-5.62524 1.35369,-7.97367 0.90655,-2.34471 2.02355,-3.67918 3.34919,-4.00664 1.36076,-0.33608 2.47689,0.47235 3.35047,2.42115 0.87162,1.92849 1.30016,4.60654 1.2871,8.03747 m -0.83466,-1.82578 c -0.16388,-2.18666 -0.59682,-3.88887 -1.29971,-5.10755 -0.69758,-1.2225 -1.5317,-1.71355 -2.5032,-1.47
106 -0.97392,0.24311 -1.81394,1.14718 -2.51921,2.71386 -0.70654,1.5695 -1.1471,3.51858 -1.32078,5.8459 0,0 7.6429,-1.98115 7.6429,-1.98115"
+- id="path14767" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path14769"
+ d="m 394.65863,217.26158 c 0,0 0,5.05071 0,5.05071 1.05317,-2.61538 1.83796,-4.31797 2.35603,-5.11227 0.52374,-0.81061 1.00534,-1.26991 1.44497,-1.37865 0.47726,-0.11799 0.91902,0.17532 1.32537,0.87929 0.41225,0.68589 0.61821,1.23352 0.61822,1.64339 -10e-6,0.29956 -0.0412,0.56219 -0.12356,0.78788 -0.0761,0.20844 -0.17434,0.32787 -0.29482,0.35828 -0.0634,0.016 -0.11736,0.006 -0.16176,-0.0302 -0.0444,-0.0519 -0.12694,-0.21251 -0.24755,-0.48199 -0.2223,-0.49656 -0.41611,-0.82689 -0.58139,-0.99082 -0.16538,-0.16396 -0.32763,-0.22611 -0.48676,-0.18636 -0.35034,0.0875 -0.77435,0.54152 -1.27228,1.36266 -0.49218,0.82062 -1.35019,2.74163 -2.57647,5.76941 0,0 0,10.95911 0,10.95911 0,0 3.57169,-0.97122 3.57169,-0.97122 0.19745,-0.0537 0.33753,0.003 0.42029,0.17013 0.0827,0.15127 0.12408,0.37699 0.12409,0.67715 -10e-6,0.28439 -0.0414,0.53269 -0.12409,0.74496 -0.0828,0.21232 -0.22284,0.34558 -0.42029,0.39978 0,0 -6.34991,1.74303 -6.34991,1.74303 -0.19434,0.0533 -0.33368,0.004
-0.41796,-0.14841 -0.0843,-0.16829 -0.12645,-0.396 -0.12645,-0.68312 0,-0.27115 0.0389,-0.50507 0.11673,-0.70172 0.0843,-0.21431 0.22686,-0.34878 0.42768,-0.40341 0,0 1.96714,-0.53508 1.96714,-0.53508 0,0 0,-16.69431 0,-16.69431 0,0 -1.5011,0.37607 -1.5011,0.37607 -0.19412,0.0486 -0.33329,-0.0121 -0.41746,-0.18232 -0.0842,-0.17019 -0.1263,-0.40677 -0.1263,-0.70967 0,-0.28692 0.0389,-0.53569 0.11658,-0.7463 0.0842,-0.21212 0.22659,-0.34304 0.42718,-0.3928 0,0 2.31218,-0.57324 2.31218,-0.57324"
+- id="path14769" />
++ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+- style="display:inline"
+- inkscape:label="rwlayer"
++ inkscape:groupmode="layer"
+ id="layer6"
+- inkscape:groupmode="layer">
++ inkscape:label="rwlayer"
++ style="display:inline">
+ <g
+- inkscape:corner7="0.23278645 : 0.15045726 : 0.53790114 : 1"
+- inkscape:corner0="0.50687055 : 0.22942044 : 0 : 1"
+- inkscape:perspectiveID="#perspective4014"
+- id="g4127"
++ sodipodi:type="inkscape:box3d"
+ style="fill:#00ade5;fill-opacity:0.51111115;stroke:#000000;stroke-linejoin:round;stroke-opacity:1;display:inline"
+- sodipodi:type="inkscape:box3d">
++ id="g4127"
++ inkscape:perspectiveID="#perspective4014"
++ inkscape:corner0="0.50687055 : 0.22942044 : 0 : 1"
++ inkscape:corner7="0.23278645 : 0.15045726 : 0.53790114 : 1">
+ <path
+- d="M 133.59629,108.48046 253.10212,130.7945 540.5037,93.974413 413.91156,82.46576 z"
+- inkscape:box3dsidetype="13"
+- style="fill:#00ade5;fill-opacity:0.51111115;fill-rule:evenodd;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
++ sodipodi:type="inkscape:box3dside"
+ id="path4137"
+- sodipodi:type="inkscape:box3dside" />
+- <path
+- d="m 133.59629,56.078359 0,52.402101 280.31527,-26.0147 0,-38.617113 z"
+- inkscape:box3dsidetype="6"
+ style="fill:#00ade5;fill-opacity:0.51111115;fill-rule:evenodd;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
+- id="path4129"
+- sodipodi:type="inkscape:box3dside" />
++ inkscape:box3dsidetype="13"
++ d="M 133.59629,108.48046 253.10212,130.7945 540.5037,93.974413 413.91156,82.46576 z" />
+ <path
+- d="m 413.91156,43.848647 126.59214,5.531124 0,44.594642 L 413.91156,82.46576 z"
+- inkscape:box3dsidetype="11"
++ sodipodi:type="inkscape:box3dside"
++ id="path4129"
+ style="fill:#00ade5;fill-opacity:0.51111115;fill-rule:evenodd;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
+- id="path4139"
+- sodipodi:type="inkscape:box3dside" />
++ inkscape:box3dsidetype="6"
++ d="m 133.59629,56.078359 0,52.402101 280.31527,-26.0147 0,-38.617113 z" />
+ <path
+- d="M 133.59629,56.078359 253.10212,66.741895 540.5037,49.379771 413.91156,43.848647 z"
+- inkscape:box3dsidetype="5"
++ sodipodi:type="inkscape:box3dside"
++ id="path4139"
+ style="fill:#00ade5;fill-opacity:0.51111115;fill-rule:evenodd;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
+- id="path4131"
+- sodipodi:type="inkscape:box3dside" />
++ inkscape:box3dsidetype="11"
++ d="m 413.91156,43.848647 126.59214,5.531124 0,44.594642 L 413.91156,82.46576 z" />
+ <path
+- d="m 253.10212,66.741895 0,64.052605 287.40158,-36.820087 0,-44.594642 z"
+- inkscape:box3dsidetype="14"
++ sodipodi:type="inkscape:box3dside"
++ id="path4131"
+ style="fill:#00ade5;fill-opacity:0.51111115;fill-rule:evenodd;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
+- id="path4135"
+- sodipodi:type="inkscape:box3dside" />
++ inkscape:box3dsidetype="5"
++ d="M 133.59629,56.078359 253.10212,66.741895 540.5037,49.379771 413.91156,43.848647 z" />
+ <path
+- d="m 133.59629,56.078359 119.50583,10.663536 0,64.052605 -119.50583,-22.31404 z"
+- inkscape:box3dsidetype="3"
++ sodipodi:type="inkscape:box3dside"
++ id="path4135"
+ style="fill:#00ade5;fill-opacity:0.51111115;fill-rule:evenodd;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
++ inkscape:box3dsidetype="14"
++ d="m 253.10212,66.741895 0,64.052605 287.40158,-36.820087 0,-44.594642 z" />
++ <path
++ sodipodi:type="inkscape:box3dside"
+ id="path4133"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#00ade5;fill-opacity:0.51111115;fill-rule:evenodd;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
++ inkscape:box3dsidetype="3"
++ d="m 133.59629,56.078359 119.50583,10.663536 0,64.052605 -119.50583,-22.31404 z" />
+ </g>
+ <g
+- id="text6476"
++ transform="matrix(0.70185341,0,0,0.70185341,103.7893,28.378586)"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New Bold"
+- transform="matrix(0.70185341,0,0,0.70185341,103.7893,28.378586)">
++ id="text6476">
+ <path
+- id="path6483"
++ inkscape:connector-curvature="0"
+ d="m 284.7875,71.172554 c 0.44477,-0.832231 0.92421,-1.465513 1.4382,-1.900127 0.53667,-0.4355 1.1077,-0.672696 1.71297,-0.711885 1.04557,-0.06757 1.89194,0.353644 2.5402,1.262581 0.67037,0.906179 1.0052,2.492869 1.00523,4.761013 0,0 0,8.000002 0,8.000002 -3e-5,2.26822 -0.33486,3.921026 -1.00523,4.959505 -0.64826,1.007365 -1.49463,1.556992 -2.5402,1.647991 -0.95479,0.08315 -1.72468,-0.204346 -2.30875,-0.863225 -0.58488,-0.65966 -1.01814,-1.950635 -1.29935,-3.87322 -0.16424,-1.284181 -0.49265,-2.262294 -0.98575,-2.934566 -0.96432,-1.3174 -2.32007,-2.329246 -4.07067,-3.035472 -1.73349,-0.710549 -3.48536,-1.002067 -5.25579,-0.872195 -2.2105,0.162261 -4.25002,0.939439 -6.11624,2.335152 -1.87367,1.401341 -3.53455,3.579947 -4.98033,6.538425 -1.45023,2.967618 -2.17702,6.418844 -2.177,10.346848 0,0 0,6.319689 0,6.319689 -2e-5,4.68833 1.31723,8.4578 3.94077,11.29662 2.63334,2.82038 6.25448,3.9553 10.84051,3.42052 2.71589,-0.31667 5.00256,-1.0641 6.86624,-2.24004 1.08169,-
0.681 2.23119,-1.9088 3.44797,-3.68114 0.74716,-1.06937 1.33005,-1.76505 1.74931,-2.0881 0.41882,-0.35351 0.89537,-0.55926 1.4295,-0.61747 0.95051,-0.10353 1.78351,0.28116 2.49963,1.15291 0.71496,0.87043 1.07203,1.94803 1.07206,3.23382 -3e-5,1.28582 -0.48388,2.72011 -1.45306,4.30537 -1.41137,2.31718 -3.23399,4.2301 -5.47274,5.73891 -3.02557,2.04682 -6.39086,3.30935 -10.10307,3.78033 -4.36859,0.55426 -8.34027,-0.12163 -11.90441,-2.04242 -2.90041,-1.54355 -5.38471,-4.24401 -7.44624,-8.1068 -2.0705,-3.91143 -3.10914,-8.31641 -3.10914,-13.20215 0,0 0,-6.658033 0,-6.658033 0,-5.109235 0.92611,-9.943355 2.77299,-14.489167 1.86452,-4.561782 4.42566,-8.139695 7.6721,-10.733799 3.2243,-2.576297 6.62007,-3.970988 10.18341,-4.195938 2.1298,-0.134375 4.10732,0.06744 5.93444,0.603403 1.8435,0.501452 3.5505,1.349515 5.12244,2.542658"
+- inkscape:connector-curvature="0" />
++ id="path6483" />
+ <path
+- id="path6485"
++ inkscape:connector-curvature="0"
+ d="m 332.72241,99.695904 c -3e-5,3.454376 -0.69544,6.883666 -2.08953,10.295926 -1.37739,3.39127 -3.45151,6.22973 -6.23223,8.51821 -2.77679,2.27061 -5.7014,3.60556 -8.77662,3.99619 -3.07455,0.39054 -6.03717,-0.19462 -8.88547,-1.76496 -2.86641,-1.61052 -5.06204,-4.01078 -6.577,-7.20109 -1.52005,-3.20093 -2.28198,-6.64692 -2.28197,-10.32991 -1e-5,-3.743818 0.77328,-7.485228 2.31594,-11.214731 1.53742,-3.747128 3.73278,-6.765923 6.57651,-9.055026 2.84809,-2.276467 5.79948,-3.529834 8.85199,-3.769629 3.05348,-0.23978 5.96744,0.568964 8.74442,2.416299 2.78093,1.804629 4.86582,4.376812 6.26443,7.717058 1.39409,3.300382 2.0895,6.761654 2.08953,10.391663 m -6.52296,0.719196 c -3e-5,-2.919695 -0.75935,-5.529693 -2.28187,-7.835916 -2.08863,-3.122229 -4.84898,-4.536825 -8.29355,-4.230938 -3.05251,0.271115 -5.6159,1.835234 -7.68164,4.700785 -2.07528,2.878816 -3.11648,6.090208 -3.11648,9.624269 0,2.89979 1.05239,5.50275 3.14988,7.80089 2.08774,2.25751 4.63979,3.20582 7.64824,2
.85456 3.01001,-0.35144 5.52454,-1.87594 7.55183,-4.56609 2.01799,-2.70736 3.02356,-5.4868 3.02359,-8.34756"
+- inkscape:connector-curvature="0" />
++ id="path6485" />
+ <path
+- id="path6487"
++ inkscape:connector-curvature="0"
+ d="m 347.8693,77.803424 c 0,0 0,2.977535 0,2.977535 1.13725,-1.473815 2.38274,-2.608435 3.73555,-3.404894 1.3686,-0.795449 2.84302,-1.254431 4.42214,-1.378502 3.6158,-0.283947 6.45504,1.090917 8.53297,4.111636 1.63938,2.396082 2.4567,5.64404 2.45673,9.750881 0,0 0,16.07587 0,16.07587 1.26176,-0.14523 2.19111,0.1546 2.79025,0.89839 0.59824,0.71473 0.89705,1.71585 0.89708,3.00413 -3e-5,1.26026 -0.30848,2.33443 -0.92604,3.22348 -0.5992,0.85987 -1.61585,1.38012 -3.05301,1.5603 0,0 -5.43347,0.68121 -5.43347,0.68121 -1.46081,0.18314 -2.51013,-0.083 -3.14492,-0.79957 -0.6159,-0.7486 -0.92419,-1.77778 -0.92416,-3.08678 -3e-5,-1.28051 0.30826,-2.35539 0.92416,-3.22368 0.61496,-0.89541 1.56546,-1.41668 2.84922,-1.56445 0,0 0,-16.445742 0,-16.445742 -3e-5,-1.898092 -0.35513,-3.253658 -1.06623,-4.067719 -0.9302,-1.051374 -2.32932,-1.495065 -4.20195,-1.32878 -1.41994,0.126126 -2.6738,0.637836 -3.76007,1.536474 -1.06886,0.870461 -2.43401,2.660203 -4.09825,5.375433 0,0 0,16.441
254 0,16.441254 1.60347,-0.18456 2.63545,-0.0881 3.10006,0.28814 0.98811,0.74447 1.48131,1.94593 1.48133,3.60564 -2e-5,1.28769 -0.32204,2.38607 -0.96682,3.29618 -0.62558,0.88027 -1.68708,1.41472 -3.18774,1.60286 0,0 -7.15906,0.89754 -7.15906,0.89754 -1.5311,0.19196 -2.63101,-0.0773 -3.29645,-0.80905 -0.64563,-0.7646 -0.96879,-1.81744 -0.96879,-3.15769 0,-1.63159 0.50029,-2.95748 1.49915,-3.97589 0.49856,-0.49379 1.5665,-0.83474 3.19961,-1.02272 0,0 0,-21.647257 0,-21.647257 -1.34325,0.121155 -2.33786,-0.210491 -2.98141,-0.996089 -0.64452,-0.786693 -0.96715,-1.835481 -0.96713,-3.145494 -2e-5,-1.309966 0.32261,-2.399054 0.96713,-3.26632 0.66429,-0.896616 1.76232,-1.405653 3.2908,-1.527814 0,0 5.98932,-0.478512 5.98932,-0.478512"
+- inkscape:connector-curvature="0" />
++ id="path6487" />
+ <path
+- id="path6489"
++ inkscape:connector-curvature="0"
+ d="m 388.14058,83.018823 c 0,0 0,16.90685 0,16.90685 -10e-6,1.809987 0.24937,2.974387 0.74771,3.492757 0.77393,0.81424 2.15235,1.10494 4.12918,0.87413 2.85672,-0.33354 5.4774,-1.54665 7.86642,-3.63181 0.91233,-0.804602 1.62645,-1.235237 2.14344,-1.293212 0.71193,-0.07979 1.32498,0.254725 1.8396,1.002732 0.53162,0.74505 0.79719,1.69422 0.79722,2.84828 -3e-5,1.07356 -0.28331,2.03341 -0.85042,2.88048 -0.87002,1.36914 -2.59781,2.75291 -5.19443,4.15584 -2.59535,1.38257 -4.79813,2.19134 -6.60183,2.42046 -3.50256,0.44491 -6.1539,-0.34442 -7.93718,-2.37749 -1.77237,-2.07172 -2.66142,-4.76781 -2.6614,-8.08161 0,0 0,-18.681529 0,-18.681529 0,0 -2.08504,0.187991 -2.08504,0.187991 -1.39587,0.125896 -2.39851,-0.172406 -3.00504,-0.896017 -0.58843,-0.754073 -0.88296,-1.771254 -0.88296,-3.050741 0,-1.251632 0.29453,-2.29109 0.88296,-3.117521 0.60653,-0.854462 1.60917,-1.337151 3.00504,-1.448715 0,0 2.08504,-0.166582 2.08504,-0.166582 0,0 0,-7.663148 0,-7.663148 -2e-5,-2.043459 0
.26221,-3.510671 0.78619,-4.400745 0.54197,-0.917653 1.24175,-1.403398 2.09855,-1.458075 0.83641,-0.05329 1.5136,0.343008 2.03236,1.18804 0.53656,0.815375 0.80458,2.237345 0.80459,4.266667 0,0 0,7.610131 0,7.610131 0,0 10.37233,-0.828688 10.37233,-0.828688 1.33087,-0.106287 2.27244,0.210007 2.82742,0.94786 0.57201,0.708497 0.85774,1.682302 0.85777,2.92219 -3e-5,1.212982 -0.28576,2.235382 -0.85777,3.068081 -0.55498,0.805342 -1.49655,1.268255 -2.82742,1.388207 0,0 -10.37233,0.935187 -10.37233,0.935187"
+- inkscape:connector-curvature="0" />
++ id="path6489" />
+ <path
+- id="path6491"
++ inkscape:connector-curvature="0"
+ d="m 426.78356,107.09258 c 0,0 0,-1.88162 0,-1.88162 -1.29426,1.23241 -2.72793,2.21052 -4.30255,2.93345 -1.58097,0.75218 -3.02296,1.21187 -4.32438,1.37727 -2.84033,0.36091 -5.16206,-0.50088 -6.95591,-2.59442 -1.80197,-2.1297 -2.706,-4.61561 -2.706,-7.450523 0,-3.449995 1.14945,-6.766286 3.43846,-9.93519 2.29325,-3.179053 5.43363,-4.95254 9.40099,-5.331327 1.57921,-0.150749 3.39679,-0.06225 5.44939,0.26374 0,0 0,-1.920817 0,-1.920817 -1e-5,-1.202127 -0.33577,-2.151503 -1.00813,-2.849026 -0.6567,-0.700183 -1.92263,-0.967515 -3.80372,-0.800477 -1.5489,0.137578 -3.56646,0.792207 -6.05983,1.968997 -0.9326,0.429384 -1.65947,0.668141 -2.17946,0.715577 -0.71179,0.06498 -1.32039,-0.265367 -1.82538,-0.991816 -0.48819,-0.755544 -0.7325,-1.746725 -0.7325,-2.972869 0,-0.693 0.0873,-1.300079 0.26176,-1.821128 0.17441,-0.520739 0.41846,-0.940499 0.73202,-1.259265 0.31331,-0.345082 0.96525,-0.770689 1.95416,-1.276103 1.31474,-0.663016 2.65095,-1.206818 4.00842,-1.631975 1.3528,-
0.449995 2.5732,-0.717309 3.66242,-0.802899 3.23272,-0.253864 5.71949,0.634365 7.47424,2.656278 1.76343,1.985514 2.64219,4.831201 2.64221,8.543807 0,0 0,16.434219 0,16.434219 0,0 0.8685,-0.09997 0.8685,-0.09997 1.22086,-0.140526 2.0847,0.135063 2.5939,0.825754 0.52488,0.662055 0.78706,1.586613 0.78708,2.774353 -2e-5,1.16192 -0.2622,2.14952 -0.78708,2.96365 -0.5092,0.78731 -1.37304,1.2577 -2.5939,1.41076 0,0 -5.99471,0.75157 -5.99471,0.75157 m 0,-14.386546 c -2.06948,-0.40743 -3.98883,-0.518817 -5.75577,-0.331915 -2.13431,0.225806 -3.97905,1.227956 -5.53012,3.010736 -0.96819,1.140564 -1.45318,2.243056 -1.45316,3.305406 -2e-5,0.770223 0.23388,1.367569 0.70129,1.791659 0.86409,0.77522 2.04484,1.07465 3.53944,0.90007 1.26684,-0.14798 2.69144,-0.69613 4.27211,-1.641975 1.59121,-0.943971 2.9993,-2.138927 4.22621,-3.584347 0,0 0,-3.449634 0,-3.449634"
+- inkscape:connector-curvature="0" />
++ id="path6491" />
+ <path
+- id="path6493"
++ inkscape:connector-curvature="0"
+ d="m 453.9243,54.610091 c 0,0 0,8.211498 0,8.211498 0,0 -5.76678,0.411052 -5.76678,0.411052 0,0 0,-8.274175 0,-8.274175 0,0 5.76678,-0.348375 5.76678,-0.348375 m 0.65618,14.667738 c 0,0 0,26.579133 0,26.579133 0,0 5.71636,-0.65798 5.71636,-0.65798 1.13594,-0.130751 1.93979,0.138491 2.41364,0.806796 0.48847,0.640773 0.73247,1.533755 0.73249,2.679593 -2e-5,1.120916 -0.24402,2.072579 -0.73249,2.855759 -0.47385,0.75733 -1.2777,1.2074 -2.41364,1.34982 0,0 -16.42615,2.05938 -16.42615,2.05938 -1.18999,0.14919 -2.04454,-0.10251 -2.56141,-0.7561 -0.5014,-0.68215 -0.75234,-1.61404 -0.75234,-2.79504 0,-1.1553 0.25094,-2.121869 0.75234,-2.898952 0.51687,-0.803545 1.37142,-1.273558 2.56141,-1.41053 0,0 5.87909,-0.67671 5.87909,-0.67671 0,0 0,-18.948966 0,-18.948966 0,0 -3.93328,0.354631 -3.93328,0.354631 -1.16791,0.105341 -2.01005,-0.17664 -2.52426,-0.846857 -0.51491,-0.696656 -0.77263,-1.634334 -0.77262,-2.812333 -10e-6,-1.152351 0.24966,-2.107591 0.7485,-2.864998 0.51424,-0
.783198 1.36445,-1.221827 2.54838,-1.316456 0,0 8.76398,-0.70019 8.76398,-0.70019"
+- inkscape:connector-curvature="0" />
++ id="path6493" />
+ <path
+- id="path6495"
++ inkscape:connector-curvature="0"
+ d="m 475.50208,67.606316 c 0,0 0,2.536447 0,2.536447 0.82543,-1.243767 1.72979,-2.197864 2.71251,-2.863045 0.99466,-0.664475 2.06675,-1.041275 3.21558,-1.131544 2.63288,-0.206754 4.70261,0.995273 6.21864,3.596757 1.19685,2.064769 1.79379,4.849578 1.79381,8.359593 0,0 0,13.739648 0,13.739648 0.92188,-0.106113 1.60115,0.163521 2.03918,0.808107 0.43746,0.619866 0.656,1.480388 0.65602,2.582152 -2e-5,1.077801 -0.22561,1.991748 -0.6772,2.74255 -0.43807,0.725982 -1.18113,1.154978 -2.23108,1.286613 0,0 -3.96487,0.497085 -3.96487,0.497085 -1.0647,0.133484 -1.82917,-0.110058 -2.2915,-0.731511 -0.44847,-0.648312 -0.67292,-1.531197 -0.6729,-2.648076 -2e-5,-1.092577 0.22443,-2.005162 0.6729,-2.737073 0.44789,-0.755228 1.14034,-1.186443 2.07594,-1.294135 0,0 0,-14.041184 0,-14.041184 -2e-5,-1.62057 -0.25886,-2.78201 -0.77709,-3.485072 -0.67772,-0.907895 -1.69667,-1.302142 -3.05969,-1.181111 -1.03295,0.09175 -1.94465,0.514073 -2.73418,1.267944 -0.7766,0.729774 -1.76804,2.239168
-2.97607,4.532658 0,0 0,14.005672 0,14.005672 1.16391,-0.133971 1.91333,-0.03683 2.25082,0.290636 0.71792,0.649047 1.07636,1.68058 1.07637,3.095536 -1e-5,1.097796 -0.23405,2.029224 -0.70258,2.795022 -0.45448,0.740495 -1.22543,1.179235 -2.31485,1.315815 0,0 -5.18947,0.65062 -5.18947,0.65062 -1.10822,0.13893 -1.90397,-0.10756 -2.38525,-0.74043 -0.46685,-0.66032 -0.70049,-1.56056 -0.70049,-2.700113 0,-1.387265 0.36171,-2.50717 1.08406,-3.358431 0.36064,-0.412646 1.13337,-0.687031 2.31557,-0.823108 0,0 0,-18.420515 0,-18.420515 -0.97243,0.08771 -1.69217,-0.205769 -2.15774,-0.881257 -0.46616,-0.67628 -0.69947,-1.571732 -0.69946,-2.685719 -1e-5,-1.113947 0.2333,-2.03669 0.69946,-2.767556 0.48058,-0.755792 1.27518,-1.177643 2.38178,-1.266092 0,0 4.34178,-0.346883 4.34178,-0.346883"
+- inkscape:connector-curvature="0" />
++ id="path6495" />
+ <path
+- id="path6497"
++ inkscape:connector-curvature="0"
+ d="m 516.2673,83.722347 c 0,0 -17.01231,1.834644 -17.01231,1.834644 0.44185,1.848273 1.22067,3.289103 2.33424,4.321792 1.12374,1.027866 2.63243,1.429872 4.52114,1.209352 1.54145,-0.179976 3.57954,-0.990387 6.10559,-2.424021 1.03717,-0.583484 1.75341,-0.897083 2.15071,-0.942116 0.54219,-0.06141 0.99779,0.223013 1.36714,0.85272 0.3689,0.629061 0.55322,1.452524 0.55324,2.47089 -2e-5,0.925797 -0.19751,1.736603 -0.5928,2.432995 -0.5278,0.922061 -1.81764,1.905265 -3.87803,2.953251 -2.07267,1.030855 -4.07672,1.670911 -6.01089,1.916599 -3.35242,0.425841 -6.0602,-0.877156 -8.10814,-3.925214 -2.04585,-3.067292 -3.07319,-7.030199 -3.07319,-11.875495 0,-5.155547 1.11107,-9.444274 3.3229,-12.850313 2.21193,-3.409715 4.73871,-5.21866 7.57349,-5.441345 1.69266,-0.132909 3.23602,0.260598 4.63201,1.177293 1.40373,0.912009 2.44288,1.931821 3.12066,3.060528 0.9546,1.636213 1.7415,3.688648 2.36186,6.157338 0.42169,1.719696 0.63236,3.736031 0.63238,6.05059 0,0 0,3.020512 0,3.020512 m
-4.51107,-6.677135 c -0.62731,-1.990684 -1.44983,-3.441932 -2.46895,-4.353009 -1.02212,-0.937128 -2.24313,-1.343777 -3.6651,-1.217511 -1.41414,0.125607 -2.6425,0.753666 -3.68311,1.886295 -1.04369,1.112332 -1.89741,2.742795 -2.55975,4.891895 0,0 12.37691,-1.20767 12.37691,-1.20767"
+- inkscape:connector-curvature="0" />
++ id="path6497" />
+ <path
+- id="path6499"
++ inkscape:connector-curvature="0"
+ d="m 529.26714,63.310804 c 0,0 0,4.360627 0,4.360627 1.63097,-2.247844 2.90878,-3.756252 3.83736,-4.531717 0.93851,-0.774258 1.81212,-1.192426 2.62133,-1.256017 1.24109,-0.09744 2.44062,0.637677 3.59899,2.201052 0.78636,1.052813 1.17886,2.159045 1.17888,3.320496 -2e-5,0.982826 -0.19008,1.837577 -0.5705,2.564837 -0.36861,0.704643 -0.8176,1.081739 -1.34729,1.13078 -0.46884,0.04344 -0.96305,-0.337016 -1.48272,-1.142328 -0.52052,-0.806521 -0.98594,-1.192073 -1.39602,-1.155672 -0.53514,0.04754 -1.33941,0.727598 -2.41476,2.043211 -1.06624,1.318692 -2.40692,3.27905 -4.02527,5.887282 0,0 0,10.526834 0,10.526834 0,0 5.50612,-0.63378 5.50612,-0.63378 0.92146,-0.106064 1.57368,0.14475 1.95822,0.751703 0.39645,0.582377 0.59451,1.389478 0.59453,2.421834 -2e-5,1.009903 -0.19808,1.864635 -0.59453,2.564818 -0.38454,0.676972 -1.03676,1.073391 -1.95822,1.188916 0,0 -11.77989,1.476871 -11.77989,1.476871 -0.95657,0.119927 -1.64331,-0.115635 -2.05861,-0.707472 -0.40281,-0.617169 -0.6
0438,-1.455248 -0.60438,-2.513711 0,-1.035437 0.20157,-1.898985 0.60438,-2.590038 0.4153,-0.714702 1.10204,-1.126896 2.05861,-1.237002 0,0 2.35416,-0.270974 2.35416,-0.270974 0,0 0,-17.063345 0,-17.063345 0,0 -1.426,0.128571 -1.426,0.128571 -0.95398,0.08605 -1.63887,-0.173426 -2.05304,-0.779149 -0.40171,-0.630509 -0.60275,-1.474561 -0.60274,-2.531606 -10e-6,-1.034031 0.20103,-1.889297 0.60274,-2.565222 0.41417,-0.699049 1.09906,-1.086463 2.05304,-1.162716 0,0 5.34561,-0.427083 5.34561,-0.427083"
+- inkscape:connector-curvature="0" />
++ id="path6499" />
+ </g>
+ <g
+- id="text10906"
++ transform="matrix(0.86745158,0,0,0.86745158,24.966041,10.718461)"
+ style="font-size:40px;font-style:italic;font-variant:normal;font-weight:500;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Futura;-inkscape-font-specification:Futura Medium Italic"
+- transform="matrix(0.86745158,0,0,0.86745158,24.966041,10.718461)">
++ id="text10906">
+ <path
+- id="path10913"
++ inkscape:connector-curvature="0"
+ d="m 153.83888,80.580698 c 0,0 -8.49369,30.064162 -8.49369,30.064162 0,0 -2.61138,-18.595363 -2.61138,-18.595363 0,0 -4.57263,17.271913 -4.57263,17.271913 0,0 -4.56489,-31.350308 -4.56489,-31.350308 0,0 3.1018,0.399872 3.1018,0.399872 0,0 2.23125,17.302482 2.23125,17.302482 0,0 4.5716,-17.201161 4.5716,-17.201161 0,0 2.48011,18.325657 2.48011,18.325657 0,0 4.30892,-16.674766 4.30892,-16.674766 0,0 3.54891,0.457512 3.54891,0.457512"
+- inkscape:connector-curvature="0" />
++ id="path10913" />
+ <path
+- id="path10915"
++ inkscape:connector-curvature="0"
+ d="m 159.48545,81.308632 c 0,0 -0.14506,2.466001 -0.14506,2.466001 1.08487,-2.027243 2.18358,-2.972954 3.29626,-2.831021 0.97953,0.125009 1.8738,0.992223 2.68199,2.604674 0,0 -2.07993,5.347173 -2.07993,5.347173 -0.59716,-1.153753 -1.19308,-1.770955 -1.78777,-1.853275 -0.40876,-0.05653 -0.76837,0.06793 -1.07902,0.373103 -0.31033,0.284418 -0.58159,0.778602 -0.81389,1.482374 -0.22246,0.684173 -0.41092,1.58735 -0.56546,2.709458 -0.14482,1.12299 -0.26061,2.474469 -0.34742,4.054536 0,0 -0.83785,14.250185 -0.83785,14.250185 0,0 -3.1705,-0.5674 -3.1705,-0.5674 0,0 1.65971,-28.446914 1.65971,-28.446914 0,0 3.18894,0.411106 3.18894,0.411106"
+- inkscape:connector-curvature="0" />
++ id="path10915" />
+ <path
+- id="path10917"
++ inkscape:connector-curvature="0"
+ d="m 172.11805,68.890531 c 0,1.003379 -0.1767,1.8517 -0.5298,2.544356 -0.35269,0.691923 -0.77536,1.010087 -1.2677,0.955217 -0.49153,-0.05472 -0.91719,-0.476639 -1.27726,-1.265141 -0.34966,-0.827922 -0.52433,-1.750538 -0.52433,-2.768572 -1e-5,-1.017937 0.16966,-1.862856 0.50931,-2.535355 0.35004,-0.692993 0.76564,-1.016131 1.24707,-0.968719 0.49226,0.04858 0.9199,0.476836 1.28263,1.285447 0.37326,0.789837 0.56007,1.707665 0.56008,2.752767 m -1.04353,13.912119 c 0,0 -1.74602,29.17105 -1.74602,29.17105 0,0 -3.29827,-0.59027 -3.29827,-0.59027 0,0 1.72646,-29.008502 1.72646,-29.008502 0,0 3.31783,0.427722 3.31783,0.427722"
+- inkscape:connector-curvature="0" />
++ id="path10917" />
+ <path
+- id="path10919"
++ inkscape:connector-curvature="0"
+ d="m 179.01598,90.329159 c 0,0 -1.40773,23.126301 -1.40773,23.126301 0,0 -3.39164,-0.60698 -3.39164,-0.60698 0,0 1.39174,-22.995732 1.39174,-22.995732 0,0 -1.91023,-0.267064 -1.91023,-0.267064 0,0 0.38103,-6.395689 0.38103,-6.395689 0,0 1.91269,0.246577 1.91269,0.246577 0,0 0.83004,-13.70396 0.83004,-13.70396 0,0 3.4216,0.361663 3.4216,0.361663 0,0 -0.8396,13.782164 -0.8396,13.782164 0,0 3.18457,0.410542 3.18457,0.410542 0,0 -0.39205,6.486823 -0.39205,6.486823 0,0 -3.18042,-0.444645 -3.18042,-0.444645"
+- inkscape:connector-curvature="0" />
++ id="path10919" />
+ <path
+- id="path10921"
++ inkscape:connector-curvature="0"
+ d="m 200.09638,86.544035 c 0,0 -1.9219,30.592005 -1.9219,30.592005 0,0 -3.62917,-0.64949 -3.62917,-0.64949 0,0 0.21227,-3.28285 0.21227,-3.28285 -1.54259,2.41691 -3.13133,3.47304 -4.76546,3.17868 -1.99844,-0.35998 -3.6185,-2.0112 -4.86612,-4.94632 -1.24249,-2.92301 -1.86183,-6.53106 -1.86186,-10.83321 -3e-5,-4.962328 0.70859,-8.930336 2.13088,-11.914549 1.45024,-2.995545 3.31826,-4.353123 5.61178,-4.060287 1.08848,0.139025 2.01838,0.614876 2.78825,1.428732 0.78266,0.817394 1.58372,2.160431 2.4033,4.031318 0,0 0.24627,-4.0148 0.24627,-4.0148 0,0 3.65176,0.470771 3.65176,0.470771 m -4.43909,13.904255 c -4e-5,-2.717054 -0.39303,-4.980086 -1.17745,-6.785644 -0.78246,-1.822565 -1.79014,-2.81699 -3.02082,-2.98627 -1.33305,-0.183291 -2.44658,0.70638 -3.34298,2.664066 -0.89378,1.973413 -1.33967,4.478873 -1.33964,7.520788 1e-5,2.65635 0.37157,4.89141 1.11605,6.70853 0.74629,1.8216 1.70851,2.83435 2.88872,3.03545 1.31431,0.22398 2.45545,-0.65327 3.42144,-2.63719 0.96902,-2
.03362 1.45468,-4.54179 1.45468,-7.51973"
+- inkscape:connector-curvature="0" />
++ id="path10921" />
+ <path
+- id="path10923"
++ inkscape:connector-curvature="0"
+ d="m 210.59369,62.948857 c 0,0 -1.76545,27.618349 -1.76545,27.618349 0.99306,-1.312846 1.85741,-2.168093 2.59198,-2.563345 0.77082,-0.414004 1.60707,-0.563925 2.50926,-0.448755 2.23175,0.285016 4.08604,2.008664 5.55612,5.180407 1.47685,3.163873 2.21788,7.051196 2.21795,11.650967 4e-5,5.05301 -0.84154,9.11579 -2.51812,12.17628 -1.67956,3.08741 -3.71714,4.40866 -6.1058,3.97839 -2.21018,-0.39812 -4.13144,-2.38754 -5.76892,-5.95632 0,0 -0.27204,4.13756 -0.27204,4.13756 0,0 -3.73402,-0.66825 -3.73402,-0.66825 0,0 3.51259,-55.442257 3.51259,-55.442257 0,0 3.77645,0.336974 3.77645,0.336974 m 7.18157,41.007653 c -5e-5,-2.83751 -0.43943,-5.220592 -1.31634,-7.145285 -0.87451,-1.919338 -2.00774,-2.97287 -3.3969,-3.163946 -1.49809,-0.205986 -2.73151,0.692689 -3.70333,2.690649 -0.96885,1.947466 -1.45212,4.570632 -1.45209,7.874012 3e-5,2.77133 0.41508,5.06732 1.24682,6.89164 0.83393,1.87364 1.9225,2.92662 3.26838,3.15588 1.49058,0.25395 2.74975,-0.61929 3.77469,-2.62548 1.0516
5,-2.00888 1.57878,-4.5697 1.57877,-7.67747"
+- inkscape:connector-curvature="0" />
++ id="path10923" />
+ <path
+- id="path10925"
++ inkscape:connector-curvature="0"
+ d="m 232.93555,64.942427 c 0,0 -3.79307,57.735703 -3.79307,57.735703 0,0 -4.00192,-0.71619 -4.00192,-0.71619 0,0 3.76441,-57.379163 3.76441,-57.379163 0,0 4.03058,0.35965 4.03058,0.35965"
+- inkscape:connector-curvature="0" />
++ id="path10925" />
+ <path
+- id="path10927"
++ inkscape:connector-curvature="0"
+ d="m 239.0771,110.77066 c 3e-5,2.42055 0.4512,4.48489 1.35536,6.19654 0.91925,1.71851 2.09407,2.70154 3.52717,2.94627 1.9759,0.33746 3.50088,-0.76924 4.56866,-3.32776 0,0 3.20464,3.76569 3.20464,3.76569 -1.11698,2.55798 -2.26253,4.27421 -3.43636,5.15274 -1.18257,0.89672 -2.65489,1.18453 -4.41309,0.86707 -2.77117,-0.50035 -4.9627,-2.39688 -6.58594,-5.68055 -1.61524,-3.26745 -2.41991,-7.39273 -2.41997,-12.38791 -7e-5,-5.2264 0.88505,-9.472622 2.6626,-12.752021 1.77469,-3.27557 4.03189,-4.746141 6.78148,-4.39624 2.68278,0.341472 4.81246,2.219379 6.37821,5.643695 1.59914,3.467846 2.40165,7.941666 2.40175,13.409026 -1e-5,0.57052 -0.0196,1.49453 -0.0587,2.77194 0,0 -13.96577,-2.20849 -13.96577,-2.20849 m 9.66372,-4.77749 c -0.45108,-5.21198 -1.99914,-7.996687 -4.62896,-8.357264 -2.4703,-0.338637 -4.06923,1.982786 -4.80935,6.953984 0,0 9.43831,1.40328 9.43831,1.40328"
+- inkscape:connector-curvature="0" />
++ id="path10927" />
+ </g>
+ </g>
+ <g
+- inkscape:groupmode="layer"
+- id="layer10"
++ style="display:none"
+ inkscape:label="Base Image"
+- style="display:none">
++ id="layer10"
++ inkscape:groupmode="layer">
+ <g
+- transform="matrix(0.71864924,0,0,0.71864924,102.10269,88.99025)"
++ id="text7027"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New Bold"
+- id="text7027">
++ transform="matrix(0.71864924,0,0,0.71864924,102.10269,88.99025)">
+ <path
+- inkscape:connector-curvature="0"
++ id="path7034"
+ d="m 257.77651,339.30723 c 0,0 -0.0126,-47.29911 -0.0126,-47.29911 0,0 -1.07548,0.31593 -1.07548,0.31593 -1.66284,0.48854 -2.85746,0.28792 -3.58019,-0.6041 -0.70114,-0.93919 -1.05207,-2.31685 -1.05207,-4.13168 0,-1.81444 0.35082,-3.37328 1.05164,-4.67526 0.72225,-1.34546 1.91609,-2.25144 3.57799,-2.71834 0,0 16.97387,-4.76807 16.97387,-4.76807 3.96095,-1.11259 7.12511,-0.0323 9.50921,3.22201 2.37256,3.20077 3.55893,7.47543 3.56767,12.83748 0.004,2.54895 -0.26558,5.03047 -0.80964,7.44667 -0.54488,2.41969 -1.37616,4.76094 -2.49546,7.02568 2.05523,1.5616 3.5872,3.66333 4.601,6.30634 1.03267,2.59309 1.55152,5.7504 1.5581,9.47676 0.005,2.96688 -0.35657,5.85099 -1.08626,8.65561 -0.5429,2.13369 -1.21349,3.9137 -2.01229,5.33981 -1.07439,1.98467 -2.39566,3.77328 -3.96594,5.36629 -1.57592,1.56019 -3.5546,2.76646 -5.94107,3.61797 0,0 -19.88366,7.09459 -19.88366,7.09459 -1.66745,0.59496 -2.8654,0.46776 -3.59015,-0.3841 -0.7031,-0.90081 -1.05501,-2.26426 -1.05501,-4.08924 0,-
1.78498 0.36314,-3.35858 1.08856,-4.71936 0.72421,-1.39809 1.91002,-2.37974 3.55397,-2.94517 0,0 1.07785,-0.37071 1.07785,-0.37071 m 6.82963,-31.88447 c 0,0 7.39137,-2.30892 7.39137,-2.30892 2.62158,-0.8189 4.78642,-2.6695 6.50056,-5.5468 1.1532,-1.92898 1.72713,-4.06042 1.72408,-6.3978 -0.003,-2.06859 -0.54939,-3.7066 -1.64172,-4.9163 -1.09485,-1.25071 -2.83681,-1.52649 -5.23332,-0.82255 0,0 -8.7512,2.57075 -8.7512,2.57075 0,0 0.0102,17.42162 0.0102,17.42162 m 0.0173,29.5295 c 0,0 11.59226,-3.98707 11.59226,-3.98707 2.6872,-0.92424 4.5687,-2.28259 5.65417,-4.07576 0.82819,-1.3569 1.24028,-3.03056 1.23742,-5.02267 -0.003,-2.37465 -0.82491,-4.43936 -2.46842,-6.19896 -1.6491,-1.76544 -4.02284,-2.14729 -7.13269,-1.13597 0,0 -8.89303,2.89208 -8.89303,2.89208 0,0 0.0103,17.52835 0.0103,17.52835"
+- id="path7034" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7036"
+ d="m 315.63395,330.78832 c 0,0 -0.008,-2.66312 -0.008,-2.66312 -1.5205,2.05858 -3.20684,3.79158 -5.06081,5.19796 -1.86182,1.44967 -3.56117,2.45156 -5.09604,3.00252 -3.35058,1.20262 -6.09378,0.54663 -8.21773,-1.98311 -2.1334,-2.5787 -3.20755,-5.87974 -3.21543,-9.8935 -0.01,-4.88257 1.33706,-9.85215 4.02708,-14.88639 2.69328,-5.04641 6.38764,-8.30943 11.05913,-9.80146 1.85895,-0.5937 3.99917,-0.90711 6.4167,-0.94198 0,0 -0.008,-2.71047 -0.008,-2.71047 -0.005,-1.69597 -0.40413,-2.95433 -1.19822,-3.7763 -0.77565,-0.82947 -2.26653,-0.90179 -4.47994,-0.2133 -1.82287,0.56707 -4.19603,1.97667 -7.12852,4.23834 -1.09717,0.83095 -1.95272,1.34329 -2.56522,1.53566 -0.83846,0.26342 -1.55663,-0.0562 -2.15389,-0.96001 -0.57751,-0.94891 -0.86835,-2.28914 -0.872,-4.01969 -0.002,-0.97796 0.0989,-1.85561 0.30293,-2.6328 0.20389,-0.77667 0.49009,-1.42758 0.85846,-1.95271 0.36795,-0.56215 1.13444,-1.3193 2.29738,-2.26995 1.54584,-1.25105 3.11705,-2.33895 4.71339,-3.2645 1.59048,-0.959
27 3.02556,-1.62913 4.30677,-2.01132 3.80176,-1.13384 6.73,-0.47944 8.80217,1.94792 2.08246,2.37423 3.12878,6.17396 3.14584,11.40899 0,0 0.0755,23.20429 0.0755,23.20429 0,0 1.02221,-0.35158 1.02221,-0.35158 1.43677,-0.49417 2.45508,-0.3138 3.05789,0.53908 0.62114,0.80865 0.93435,2.052 0.94024,3.73109 0.006,1.64284 -0.29817,3.103 -0.91229,4.38174 -0.5959,1.23719 -1.61113,2.11228 -3.0486,2.62518 0,0 -7.06105,2.51942 -7.06105,2.51942 m -0.0605,-20.34496 c -2.43905,-0.0753 -4.70041,0.23148 -6.78144,0.92294 -2.51422,0.83547 -4.68502,2.69856 -6.5076,5.59502 -1.13795,1.84779 -1.70634,3.52499 -1.70292,5.02807 0.002,1.0899 0.28029,1.87848 0.83301,2.36524 1.0218,0.88744 2.41549,1.02464 4.17755,0.41484 1.49329,-0.5168 3.1709,-1.63797 5.03058,-3.3593 1.87161,-1.72078 3.52592,-3.75158 4.9653,-6.09198 0,0 -0.0145,-4.87483 -0.0145,-4.87483"
+- id="path7036" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7038"
+ d="m 351.45961,282.46833 c -0.91452,-0.81047 -1.87521,-1.32503 -2.88241,-1.54283 -1.00973,-0.2537 -2.06646,-0.2094 -3.17058,0.13403 -2.19836,0.68386 -3.94926,1.92675 -5.24728,3.73026 -0.5762,0.79085 -0.86315,1.54528 -0.8602,2.26251 0.003,0.82494 0.39908,1.5073 1.18614,2.04629 0.59861,0.38285 1.93021,0.51244 3.98804,0.38963 3.75668,-0.20875 6.35384,-0.0517 7.81225,0.46829 1.90678,0.68882 3.37659,2.14965 4.41397,4.38104 1.03506,2.22658 1.55882,4.7606 1.57299,7.60629 0.0192,3.8658 -0.83398,7.40347 -2.56521,10.62256 -2.494,4.67157 -5.77005,7.74446 -9.84541,9.20702 -1.64484,0.59029 -3.1764,0.85271 -4.59341,0.78534 -1.40277,-0.0383 -2.69857,-0.38697 -3.88635,-1.04728 -0.28039,0.56921 -0.58022,1.03726 -0.89956,1.40403 -0.31959,0.36694 -0.64935,0.61132 -0.9893,0.73259 -0.90789,0.32388 -1.6396,0.0228 -2.1942,-0.90467 -0.5364,-0.97147 -0.80986,-2.79935 -0.81995,-5.48228 0,0 -0.0141,-3.75135 -0.0141,-3.75135 -0.0101,-2.68128 0.24884,-4.67325 0.77628,-5.97507 0.54553,-1.3425
7 1.25338,-2.15911 2.12282,-2.4506 0.69806,-0.23398 1.28355,-0.0514 1.75697,0.54708 0.47278,0.56188 0.84401,1.69794 1.114,3.40803 0.88673,1.1377 1.94787,1.87097 3.18209,2.20069 1.2306,0.29303 2.64142,0.16353 4.23059,-0.38634 2.59273,-0.89712 4.59185,-2.37089 6.00541,-4.42001 0.6686,-1.00942 1.00048,-1.93805 0.99651,-2.78707 -0.007,-1.41485 -0.49308,-2.41976 -1.46078,-3.01586 -0.96983,-0.59733 -2.9752,-0.70841 -6.03069,-0.33021 -4.58673,0.59585 -7.6827,-0.17688 -9.25518,-2.32843 -1.57769,-2.12264 -2.37589,-5.11935 -2.39063,-8.9837 -0.0152,-3.97117 0.8521,-7.54395 2.5961,-10.70925 2.35076,-4.30605 5.42069,-7.0163 9.19499,-8.14207 1.30582,-0.38941 2.55386,-0.51306 3.74464,-0.37241 1.20554,0.0997 2.35451,0.48017 3.44739,1.14045 0.34168,-0.59723 0.65654,-1.06254 0.94466,-1.39612 0.30594,-0.33858 0.58518,-0.54582 0.83779,-0.62164 0.75685,-0.22696 1.38927,0.14621 1.89787,1.11843 0.50782,0.93618 0.76793,2.70208 0.78072,5.29897 0,0 0.013,2.63267 0.013,2.63267 0.0115,2.35245 -0.12411,
3.99567 -0.4071,4.9298 -0.56706,1.80018 -1.34596,2.85977 -2.33781,3.17733 -0.6686,0.21411 -1.25866,-0.004 -1.76979,-0.6537 -0.51177,-0.6508 -0.84365,-1.62508 -0.99522,-2.92244"
+- id="path7038" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7040"
+ d="m 391.08767,286.09973 c 0,0 -21.40037,7.16598 -21.40037,7.16598 0.57216,2.58305 1.56606,4.48187 2.97874,5.69565 1.42536,1.20392 3.33049,1.3912 5.70856,0.56836 1.94011,-0.6713 4.49918,-2.39426 7.66518,-5.15474 1.2993,-1.12534 2.19719,-1.77197 2.69637,-1.94256 0.68118,-0.23272 1.25664,0.0618 1.72693,0.88273 0.46973,0.82008 0.70926,1.97252 0.71896,3.45813 0.009,1.35076 -0.23184,2.58617 -0.72232,3.70718 -0.65513,1.48575 -2.26858,3.26333 -4.85199,5.34083 -2.60048,2.05693 -5.11941,3.52549 -7.55489,4.39953 -4.22378,1.51581 -7.65099,0.33127 -10.26023,-3.58227 -2.60677,-3.94222 -3.93431,-9.46384 -3.97137,-16.54436 -0.0394,-7.52874 1.32903,-14.07941 4.09047,-19.62629 2.75903,-5.5472 5.92505,-8.84107 9.48957,-9.90426 2.12737,-0.63445 4.07097,-0.46394 5.83355,0.50605 1.77201,0.96099 3.08675,2.17372 3.94852,3.63907 1.21416,2.13157 2.22166,4.91277 3.02403,8.34384 0.54592,2.39326 0.82964,5.27426 0.85162,8.64573 0,0 0.0287,4.4014 0.0287,4.4014 m -5.73214,-8.54412 c -0.80672,-
2.7354 -1.85391,-4.63367 -3.14346,-5.69374 -1.29366,-1.0973 -2.833,-1.37003 -4.62091,-0.81389 -1.77862,0.55329 -3.31967,1.79032 -4.62063,3.71406 -1.30548,1.89566 -2.36785,4.49783 -3.18525,7.80742 0,0 15.57025,-5.01385 15.57025,-5.01385"
+- id="path7040" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7042"
+ d="m 438.50105,238.91477 c 0,0 0.33366,38.11886 0.33366,38.11886 0,0 4.5189,-1.55424 4.5189,-1.55424 1.06904,-0.36769 1.8298,-0.17153 2.28417,0.58709 0.46789,0.72139 0.70825,1.80481 0.72144,3.25104 0.0129,1.41496 -0.20635,2.65984 -0.65806,3.73554 -0.43823,1.04046 -1.19112,1.75156 -2.26052,2.13313 0,0 -13.68028,4.8812 -13.68028,4.8812 -1.1116,0.39663 -1.91344,0.23005 -2.40353,-0.50122 -0.47582,-0.76976 -0.72,-1.89742 -0.73214,-3.38218 -0.0119,-1.45226 0.21273,-2.71134 0.67337,-3.77635 0.47483,-1.10101 1.26883,-1.84247 2.38003,-2.22466 0,0 4.62789,-1.59173 4.62789,-1.59173 0,0 -0.3275,-38.34793 -0.3275,-38.34793 0,0 -4.6215,1.35761 -4.6215,1.35761 -1.10965,0.32602 -1.91007,0.11077 -2.39927,-0.64712 -0.47496,-0.79518 -0.71868,-1.93224 -0.73077,-3.41027 -0.0121,-1.47774 0.21202,-2.73263 0.67186,-3.76384 0.47403,-1.06604 1.26664,-1.75469 2.37589,-2.06634 0,0 13.65257,-3.78793 13.65257,-3.78793 1.06727,-0.29982 1.82661,-0.0734 2.27992,0.67815 0.4671,0.74675 0.70703,1.8
3959 0.72016,3.27935 0.0131,1.44004 -0.20565,2.68084 -0.65663,3.72319 -0.43753,1.00825 -1.18918,1.66931 -2.25681,1.98288 0,0 -4.51285,1.3257 -4.51285,1.3257"
+- id="path7042" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7044"
+ d="m 455.88348,238.41146 c 0,0 0.0257,2.69003 0.0257,2.69003 0.68312,-1.72546 1.29991,-2.94833 1.85075,-3.67036 0.56356,-0.75579 1.21217,-1.24275 1.94542,-1.46144 0.62141,-0.18526 1.23821,-0.0305 1.85047,0.46347 0.61126,0.49329 1.21121,1.3268 1.79992,2.49991 0.71137,-1.56555 1.43158,-2.77864 2.16064,-3.64047 0.7408,-0.89447 1.49699,-1.45627 2.26852,-1.68643 1.53816,-0.45872 2.79097,0.0945 3.76153,1.65542 1.28104,2.03781 1.94044,5.01712 1.98128,8.9439 0,0 0.21643,20.82129 0.21643,20.82129 0.85204,-0.29305 1.48772,-0.0721 1.90821,0.66181 0.42,0.73316 0.63698,1.77834 0.65128,3.13628 0.0143,1.35811 -0.17928,2.54755 -0.58098,3.56911 -0.40256,0.99258 -1.09593,1.66483 -2.08175,2.01658 0,0 -3.92315,1.3998 -3.92315,1.3998 0,0 -0.30125,-29.5317 -0.30125,-29.5317 -0.0146,-1.42806 -0.13917,-2.37963 -0.37387,-2.85506 -0.23487,-0.47561 -0.58859,-0.64006 -1.06152,-0.49297 -0.46004,0.14313 -0.88398,0.55012 -1.27173,1.2214 -0.49476,0.91973 -1.09234,2.54691 -1.79337,4.88434 0,0 0.
1894,18.96164 0.1894,18.96164 0.8724,-0.30006 1.52302,-0.079 1.95307,0.662 0.42956,0.74027 0.65113,1.79714 0.66503,3.17137 0.0139,1.37439 -0.18487,2.57895 -0.59663,3.61451 -0.4126,1.00623 -1.12276,1.68951 -2.13218,2.04968 0,0 -4.01729,1.43339 -4.01729,1.43339 0,0 -0.29261,-29.88883 -0.29261,-29.88883 -0.0139,-1.41455 -0.14767,-2.35965 -0.40153,-2.83564 -0.24053,-0.51127 -0.60278,-0.69179 -1.08713,-0.54115 -0.49887,0.15521 -0.98803,0.66317 -1.46747,1.52462 -0.4804,0.8318 -1.05239,2.39108 -1.71646,4.68046 0,0 0.18368,19.19395 0.18368,19.19395 0.89368,-0.30737 1.55989,-0.0863 1.99991,0.66201 0.45342,0.74274 0.68669,1.80921 0.70018,3.2002 0.0135,1.39115 -0.19765,2.61376 -0.6338,3.6687 -0.42312,1.02036 -1.1508,1.7151 -2.18483,2.08405 0,0 -3.90344,1.39277 -3.90344,1.39277 -1.04783,0.37387 -1.79708,0.20173 -2.24591,-0.51779 -0.46384,-0.74661 -0.70262,-1.84073 -0.71594,-3.28161 -0.013,-1.40935 0.19719,-2.62896 0.63021,-3.65799 0.43218,-1.05897 1.10915,-1.74654 2.02961,-2.06313 0,0 -
0.21801,-23.27593 -0.21801,-23.27593 -0.91971,0.2877 -1.60455,0.0483 -2.05317,-0.71937 -0.44909,-0.76843 -0.68033,-1.85564 -0.69331,-3.26087 -0.013,-1.40499 0.20412,-2.61343 0.65085,-3.62449 0.43169,-1.03656 1.17158,-1.71162 2.21788,-2.0255 0,0 4.10732,-1.23196 4.10732,-1.23196"
+- id="path7044" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7046"
+ d="m 490.87185,268.26248 c 0,0 -0.0238,-2.12947 -0.0238,-2.12947 -0.96684,1.56112 -2.04221,2.85176 -3.22705,3.87118 -1.18857,1.05267 -2.27482,1.75638 -3.25773,2.1092 -2.1433,0.7693 -3.90736,0.0916 -5.28616,-2.04226 -1.38398,-2.17145 -2.09463,-4.85752 -2.12832,-8.05178 -0.041,-3.88602 0.78508,-7.77051 2.47177,-11.63982 1.69085,-3.8838 4.03967,-6.29946 7.03403,-7.25585 1.19331,-0.3811 2.57099,-0.52435 4.13102,-0.43103 0,0 -0.0243,-2.16861 -0.0243,-2.16861 -0.0152,-1.35698 -0.28175,-2.38328 -0.80016,-3.07972 -0.50639,-0.70131 -1.46852,-0.83189 -2.89014,-0.3897 -1.16973,0.36389 -2.6864,1.37311 -4.5546,3.03337 -0.69844,0.60846 -1.2438,0.97457 -1.63533,1.09754 -0.5358,0.16833 -0.99846,-0.12206 -1.38767,-0.87192 -0.37678,-0.78462 -0.57264,-1.86678 -0.58731,-3.24582 -0.008,-0.77933 0.0501,-1.47376 0.17529,-2.08321 0.1251,-0.60911 0.30385,-1.1141 0.53618,-1.51496 0.23184,-0.43046 0.71786,-0.99743 1.45701,-1.70003 0.98321,-0.92446 1.98458,-1.71816 3.00395,-2.38162 1.01611,
-0.69116 1.93495,-1.15887 2.7573,-1.40418 2.44294,-0.72858 4.33815,-0.0679 5.69456,1.97299 1.36388,2.00056 2.06787,5.09484 2.11563,9.28942 0,0 0.21151,18.5876 0.21151,18.5876 0,0 0.65945,-0.22681 0.65945,-0.22681 0.92741,-0.31897 1.58879,-0.11998 1.98565,0.5958 0.40854,0.68149 0.62043,1.69497 0.63598,3.04114 0.0152,1.31705 -0.17178,2.47066 -0.56118,3.4616 -0.37775,0.95836 -1.02971,1.60314 -1.95738,1.93413 0,0 -4.54817,1.62282 -4.54817,1.62282 m -0.18218,-16.27076 c -1.57456,-0.18741 -3.03025,-0.0602 -4.36568,0.38353 -1.61175,0.53558 -2.9938,1.90828 -4.14364,4.12194 -0.71713,1.41252 -1.06983,2.71889 -1.05695,3.91694 0.009,0.8687 0.19313,1.51219 0.55118,1.93012 0.66205,0.76298 1.55791,0.94835 2.68579,0.55802 0.95654,-0.33103 2.02809,-1.13477 3.2135,-2.40861 1.19412,-1.27383 2.24686,-2.80822 3.15946,-4.60277 0,0 -0.0437,-3.89917 -0.0437,-3.89917"
+- id="path7046" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7048"
+ d="m 513.83107,223.64708 c 0,0 -0.0321,-2.60694 -0.0321,-2.60694 0,0 4.24921,-1.27452 4.24921,-1.27452 0.86692,-0.25998 1.48579,-0.0345 1.85799,0.67552 0.38309,0.67764 0.58268,1.66515 0.59908,2.9632 0.016,1.27005 -0.15729,2.37215 -0.52017,3.30702 -0.35202,0.90414 -0.96092,1.49191 -1.82805,1.76307 0,0 -0.61656,0.19283 -0.61656,0.19283 0,0 0.3963,31.78092 0.3963,31.78092 0.0383,3.07233 -0.1991,5.84676 -0.71289,8.32595 -0.50258,2.50775 -1.30016,4.80111 -2.39487,6.88205 -1.09848,2.08802 -2.35446,3.40535 -3.76947,3.94832 0,0 -4.20721,1.61434 -4.20721,1.61434 -0.90127,0.34581 -1.55322,0.17312 -1.95437,-0.5193 -0.389,-0.66876 -0.59138,-1.65732 -0.60684,-2.96502 -0.0158,-1.33662 0.16113,-2.49707 0.53047,-3.48063 0.38146,-0.95795 1.02342,-1.60387 1.92446,-1.93799 0,0 4.09797,-1.51959 4.09797,-1.51959 1.12773,-0.41818 1.99206,-1.47339 2.59485,-3.16418 0.6016,-1.68753 0.88825,-3.64562 0.86083,-5.87641 0,0 -0.0527,-4.28868 -0.0527,-4.28868 -0.79402,1.54526 -1.61175,2.78547 -
2.45334,3.71951 -0.83173,0.93214 -1.69344,1.55874 -2.58528,1.87869 -2.53138,0.90814 -4.68912,-0.3421 -6.46539,-3.76745 -1.78479,-3.47022 -2.71501,-8.19944 -2.78452,-14.17311 -0.0698,-5.99942 0.74291,-11.29294 2.43134,-15.86475 1.6791,-4.57629 3.78635,-7.2342 6.31459,-7.98783 0.93884,-0.27979 1.83117,-0.21544 2.67743,0.19177 0.8558,0.37421 1.67211,1.10227 2.44924,2.18321 m 0.18895,16.81679 c -0.0397,-3.22458 -0.57346,-5.86075 -1.60346,-7.91342 -1.02083,-2.06186 -2.23403,-2.87672 -3.64183,-2.43909 -1.41359,0.43948 -2.61815,2.01503 -3.61171,4.73172 -0.98452,2.72148 -1.4586,5.72173 -1.41993,8.9951 0.039,3.30339 0.58054,5.9872 1.62246,8.04652 1.05092,2.02074 2.28478,2.78371 3.69937,2.29449 1.4088,-0.48717 2.59406,-2.07774 3.55781,-4.76688 0.97229,-2.71336 1.4373,-5.6943 1.39729,-8.94844"
+- id="path7048" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7050"
+ d="m 540.11181,236.19855 c 0,0 -14.17571,4.74678 -14.17571,4.74678 0.39598,2.12039 1.06655,3.70874 2.0101,4.76439 0.95245,1.04897 2.21683,1.29937 3.78949,0.75521 1.28429,-0.44438 2.97443,-1.71113 5.06396,-3.7914 0.85848,-0.84849 1.45291,-1.3286 1.78475,-1.44201 0.45294,-0.15474 0.83898,0.11397 1.1584,0.80553 0.3191,0.69101 0.48673,1.64075 0.5031,2.84977 0.0149,1.09925 -0.1376,2.09168 -0.45762,2.9779 -0.4274,1.17397 -1.49195,2.53431 -3.19995,4.08586 -1.71744,1.53209 -3.38257,2.58934 -4.99438,3.16779 -2.79108,1.00165 -5.0682,-0.14146 -6.81995,-3.44725 -1.74841,-3.32527 -2.66198,-7.85839 -2.73457,-13.58545 -0.0772,-6.09039 0.78143,-11.32407 2.56808,-15.68474 1.78745,-4.3669 3.86227,-6.89434 6.21974,-7.59751 1.4088,-0.42014 2.70212,-0.19498 3.88143,0.67196 1.18643,0.86072 2.07063,1.90611 2.65495,3.13691 0.82406,1.78934 1.51493,4.09853 2.07343,6.92778 0.38048,1.97331 0.58916,4.3313 0.62629,7.07581 0,0 0.0485,3.58267 0.0485,3.58267 m -3.88051,-7.22718 c -0.55565,-2.261
43 -1.2656,-3.85327 -2.13087,-4.7749 -0.86777,-0.95155 -1.89277,-1.24457 -3.07652,-0.87637 -1.17666,0.36604 -2.19027,1.29725 -3.03946,2.79568 -0.85185,1.47453 -1.5375,3.53206 -2.05595,6.17324 0,0 10.3028,-3.31765 10.3028,-3.31765"
+- id="path7050" />
++ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+- inkscape:groupmode="layer"
+- id="layer11"
++ style="display:none"
+ inkscape:label="Image (name)"
+- style="display:none">
++ id="layer11"
++ inkscape:groupmode="layer">
+ <g
+- id="text14133"
+- style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New">
++ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New"
++ id="text14133">
+ <path
+- id="path14140"
++ inkscape:connector-curvature="0"
+ d="m 290.77223,304.74825 c 0,0 0,32.31662 0,32.31662 0,0 5.87857,-2.13185 5.87857,-2.13185 0.40465,-0.14674 0.69438,-0.12402 0.86947,0.0681 0.17497,0.17071 0.26242,0.45829 0.26244,0.86282 -2e-5,0.38327 -0.0874,0.73459 -0.26244,1.05416 -0.17509,0.31972 -0.46482,0.5537 -0.86947,0.70197 0,0 -13.61665,4.98933 -13.61665,4.98933 -0.42075,0.15417 -0.72258,0.13428 -0.9052,-0.06 -0.18272,-0.19433 -0.27412,-0.48744 -0.27411,-0.87928 -1e-5,-0.41357 0.0914,-0.77331 0.27411,-1.07911 0.18262,-0.32736 0.48445,-0.56735 0.9052,-0.71994 0,0 6.0052,-2.17777 6.0052,-2.17777 0,0 0,-32.39447 0,-32.39447 0,0 -6.0052,1.90797 -6.0052,1.90797 -0.42075,0.13372 -0.72258,0.10996 -0.9052,-0.0714 -0.18272,-0.20317 -0.27412,-0.51163 -0.27411,-0.92526 -1e-5,-0.41355 0.0914,-0.76884 0.27411,-1.06575 0.18262,-0.31845 0.48445,-0.54373 0.9052,-0.67588 0,0 13.61665,-4.27499 13.61665,-4.27499 0.40465,-0.127 0.69438,-0.0902 0.86947,0.11043 0.17497,0.17924 0.26242,0.47109 0.26244,0.87558 -2e-5,0.40459 -
0.0874,0.76232 -0.26244,1.07333 -0.17509,0.28993 -0.46482,0.49917 -0.86947,0.6277 0,0 -5.87857,1.86774 -5.87857,1.86774"
+- inkscape:connector-curvature="0" />
++ id="path14140" />
+ <path
+- id="path14142"
++ inkscape:connector-curvature="0"
+ d="m 306.92675,306.55175 c 0,0 0,2.67986 0,2.67986 1.40003,-2.87625 2.80101,-4.53947 4.20289,-4.99685 0.84101,-0.27434 1.57685,-0.14959 2.20819,0.37302 0.63018,0.50092 1.1566,1.40903 1.57974,2.72378 0.71685,-1.69138 1.43861,-3.00815 2.16526,-3.95142 0.7378,-0.96608 1.47405,-1.5684 2.20876,-1.80813 1.14953,-0.37499 2.06265,-0.0655 2.74123,0.9259 0.89011,1.26835 1.33432,2.825 1.33433,4.6724 0,0 0,18.0741 0,18.0741 0,0 1.32918,-0.48202 1.32918,-0.48202 0.37346,-0.13543 0.64087,-0.10964 0.80249,0.0773 0.16149,0.1664 0.24221,0.4439 0.24224,0.83254 -3e-5,0.36823 -0.0808,0.70459 -0.24224,1.00917 -0.16162,0.30475 -0.42903,0.52553 -0.80249,0.66237 0,0 -2.90839,1.06568 -2.90839,1.06568 0,0 0,-20.46113 0,-20.46113 -2e-5,-1.31673 -0.24507,-2.32553 -0.73568,-3.02713 -0.49135,-0.70254 -1.05913,-0.94797 -1.70374,-0.73524 -0.58247,0.19227 -1.19764,0.75726 -1.8457,1.69604 -0.6493,0.9199 -1.38919,2.56622 -2.22024,4.94195 0,0 0,17.3523 0,17.3523 0,0 1.3415,-0.48649 1.3415,-0.48649
0.38232,-0.13865 0.65607,-0.11371 0.8215,0.0747 0.16532,0.16767 0.24796,0.44807 0.24797,0.8413 -1e-5,0.37255 -0.0826,0.71319 -0.24797,1.02208 -0.16543,0.30904 -0.43918,0.53359 -0.8215,0.67367 0,0 -2.97744,1.09098 -2.97744,1.09098 0,0 0,-20.5158 0,-20.5158 -10e-6,-1.39476 -0.25733,-2.45395 -0.77253,-3.1784 -0.50307,-0.7506 -1.0715,-1.02182 -1.70561,-0.81257 -0.58338,0.19258 -1.16121,0.68673 -1.7335,1.4832 -0.79496,1.12309 -1.63094,2.88106 -2.50825,5.27652 0,0 0,17.56098 0,17.56098 0,0 1.39351,-0.50535 1.39351,-0.50535 0.39153,-0.14199 0.67186,-0.11795 0.84127,0.072 0.16931,0.16894 0.25394,0.45233 0.25395,0.85026 -10e-6,0.377 -0.0846,0.72208 -0.25395,1.0354 -0.16941,0.31346 -0.44974,0.54191 -0.84127,0.68538 0,0 -4.455,1.63237 -4.455,1.63237 -0.39697,0.14545 -0.68175,0.12306 -0.85404,-0.0675 -0.17239,-0.19062 -0.25861,-0.47625 -0.25861,-0.85683 0,-0.40172 0.0862,-0.75019 0.25861,-1.04538 0.17229,-0.31613 0.45707,-0.54619 0.85404,-0.69015 0,0 1.40566,-0.50976 1.40566,-0.50976 0,
0 0,-22.02661 0,-22.02661 0,0 -1.40566,0.46583 -1.40566,0.46583 -0.39697,0.13157 -0.68175,0.0992 -0.85404,-0.0974 -0.17239,-0.19662 -0.25861,-0.49584 -0.25861,-0.8976 0,-0.38054 0.0862,-0.72601 0.25861,-1.03629 0.17229,-0.31008 0.45707,-0.53015 0.85404,-0.66022 0,0 3.06149,-1.00289 3.06149,-1.00289"
+- inkscape:connector-curvature="0" />
++ id="path14142" />
+ <path
+- id="path14144"
++ inkscape:connector-curvature="0"
+ d="m 341.55437,321.16678 c 0,0 0,-3.62699 0,-3.62699 -2.17583,3.87291 -4.51596,6.27757 -7.0237,7.20015 -1.83227,0.67408 -3.27105,0.43232 -4.31124,-0.73067 -1.0434,-1.1869 -1.56629,-2.91222 -1.56629,-5.17318 0,-2.48503 0.68882,-4.89489 2.06231,-7.22253 1.36795,-2.31825 3.35505,-3.9208 5.95041,-4.80953 0.69672,-0.23856 1.45188,-0.41679 2.26509,-0.53489 0.81121,-0.13772 1.68585,-0.20766 2.62342,-0.20985 0,0 0,-4.07662 0,-4.07662 -2e-5,-1.37882 -0.37947,-2.45115 -1.13965,-3.21827 -0.76194,-0.7688 -1.90808,-0.90154 -3.44237,-0.39518 -1.17945,0.38931 -2.84126,1.51364 -4.99257,3.38085 -0.3904,0.3327 -0.64074,0.51747 -0.7507,0.55406 -0.19558,0.0652 -0.3668,3.9e-4 -0.51363,-0.19445 -0.13465,-0.19895 -0.202,-0.48128 -0.20199,-0.84695 -1e-5,-0.3453 0.0612,-0.63975 0.18363,-0.88328 0.17131,-0.36105 0.86176,-1.00434 2.06822,-1.92757 1.89239,-1.46888 3.31682,-2.35756 4.27913,-2.67154 1.90441,-0.62126 3.38216,-0.31269 4.43882,0.92018 1.05329,1.20909 1.5787,2.79915 1.57872,4.773
0,0 0,16.62862 0,16.62862 0,0 1.97614,-0.71664 1.97614,-0.71664 0.36334,-0.13177 0.62098,-0.10607 0.77314,0.077 0.15205,0.16316 0.22807,0.43326 0.22809,0.81038 -2e-5,0.35731 -0.0761,0.68284 -0.22809,0.97668 -0.15216,0.294 -0.4098,0.50756 -0.77314,0.64069 0,0 -3.48375,1.2765 -3.48375,1.2765 m 0,-12.52962 c -0.69996,-0.0967 -1.44303,-0.0891 -2.22949,0.0233 -0.78834,0.11262 -1.62047,0.32041 -2.49673,0.62375 -2.20674,0.76397 -3.94122,2.16401 -5.19605,4.20202 -0.95337,1.53165 -1.43106,3.1323 -1.43105,4.79877 -1e-5,1.54453 0.36138,2.71501 1.08302,3.51015 0.73228,0.78902 1.7913,0.93038 3.17399,0.42691 1.31676,-0.47947 2.5323,-1.35466 3.64772,-2.62381 1.12362,-1.28931 2.27325,-3.09547 3.44859,-5.41563 0,0 0,-5.54541 0,-5.54541"
+- inkscape:connector-curvature="0" />
++ id="path14144" />
+ <path
+- id="path14146"
++ inkscape:connector-curvature="0"
+ d="m 363.37657,292.52517 c 0,0 0,-4.46549 0,-4.46549 0,0 3.26058,-1.06811 3.26058,-1.06811 0.32917,-0.10781 0.56487,-0.0698 0.70734,0.11412 0.14235,0.1838 0.21351,0.45813 0.21353,0.82302 -2e-5,0.34574 -0.0711,0.65733 -0.21353,0.93491 -0.14247,0.27777 -0.37817,0.47117 -0.70734,0.58025 0,0 -1.86625,0.61846 -1.86625,0.61846 0,0 0,24.27579 0,24.27579 -2e-5,1.62032 -0.19884,3.14134 -0.59683,4.56437 -0.26563,0.94969 -0.7088,1.99622 -1.33026,3.14072 -0.62268,1.14668 -1.19079,2.01258 -1.70405,2.59672 -0.51409,0.58507 -1.20267,1.04343 -2.06685,1.37504 0,0 -4.03689,1.54904 -4.03689,1.54904 -0.34152,0.13104 -0.58649,0.1075 -0.73469,-0.0709 -0.14829,-0.15886 -0.22246,-0.42461 -0.22245,-0.79717 -1e-5,-0.37258 0.0741,-0.70475 0.22245,-0.99644 0.1482,-0.29158 0.39317,-0.50222 0.73469,-0.63197 0,0 4.08746,-1.52372 4.08746,-1.52372 0.83042,-0.31553 1.57488,-0.96721 2.23397,-1.95413 0.66885,-0.98911 1.21963,-2.27103 1.65294,-3.84567 0.24415,-0.9032 0.36616,-1.98282 0.36618,-3.2393
4 0,0 0,-7.30717 0,-7.30717 -1.50064,4.12055 -3.44508,6.62347 -5.84129,7.49922 -1.95926,0.71605 -3.66187,0.0829 -5.10374,-1.90912 -1.43671,-2.02462 -2.15742,-4.82517 -2.15742,-8.39501 0,-3.56981 0.72071,-6.859 2.15742,-9.85774 1.44187,-2.98939 3.14448,-4.80022 5.10374,-5.43943 2.39621,-0.78171 4.34065,0.36653 5.84129,3.42973 m 0,7.33618 c -2e-5,-2.86099 -0.5661,-5.08622 -1.70124,-6.6799 -1.12797,-1.60294 -2.48445,-2.14543 -4.0723,-1.62139 -1.59565,0.52668 -2.97118,1.98968 -4.12378,4.39343 -1.15668,2.39261 -1.73656,5.03846 -1.73655,7.93123 -1e-5,2.91249 0.57987,5.17691 1.73655,6.78901 1.1526,1.58686 2.52813,2.0886 4.12378,1.51152 1.58785,-0.57426 2.94433,-2.05505 4.0723,-4.43824 1.13514,-2.39819 1.70122,-5.02464 1.70124,-7.88566"
+- inkscape:connector-curvature="0" />
++ id="path14146" />
+ <path
+- id="path14148"
++ inkscape:connector-curvature="0"
+ d="m 385.85611,293.37466 c 0,0 -13.55496,4.71571 -13.55496,4.71571 0.2372,3.02382 0.96927,5.26873 2.19279,6.73218 1.2295,1.435 2.74111,1.82321 4.53079,1.17154 0.99106,-0.36087 2.02623,-1.02925 3.10508,-2.00348 1.07513,-0.97087 1.94922,-2.05434 2.62395,-3.25093 0.19693,-0.351 0.36786,-0.55242 0.51284,-0.60437 0.16557,-0.0593 0.31039,0.01 0.43448,0.20823 0.12401,0.17941 0.18601,0.42768 0.18602,0.74485 -10e-6,0.31721 -0.0827,0.65493 -0.24805,1.01332 -0.49671,1.11372 -1.38342,2.31505 -2.66343,3.60658 -1.27482,1.27424 -2.59161,2.16252 -3.95089,2.66259 -2.28921,0.84219 -4.21494,0.2119 -5.77044,-1.90319 -1.55233,-2.14839 -2.33133,-5.14665 -2.33133,-8.98687 0,-3.4963 0.73037,-6.7413 2.18612,-9.72476 1.45984,-2.97335 3.25394,-4.80294 5.37664,-5.49548 2.17154,-0.70841 3.94716,-0.0213 5.33343,2.05084 1.38014,2.04439 2.0576,5.06314 2.03696,9.06324 m -1.32018,-1.9248 c -0.25953,-2.51086 -0.94567,-4.39376 -2.06125,-5.65048 -1.10911,-1.26462 -2.43784,-1.64358 -3.98896,-1.13166
-1.55879,0.51451 -2.90637,1.77483 -4.03999,3.78444 -1.13768,2.01684 -1.8481,4.41869 -2.1284,7.20193 0,0 12.2186,-4.20423 12.2186,-4.20423"
+- inkscape:connector-curvature="0" />
++ id="path14148" />
+ </g>
+ </g>
+ </g>
+ <g
+- style="display:none"
+- inkscape:label="busybox"
++ inkscape:groupmode="layer"
+ id="layer4"
+- inkscape:groupmode="layer">
++ inkscape:label="busybox"
++ style="display:inline">
+ <g
+- inkscape:corner7="0.017576171 : -0.063230334 : 0.53533062 : 1"
+- inkscape:corner0="0.22429094 : 0.05733945 : 0 : 1"
+- inkscape:perspectiveID="#perspective3054"
+- id="g4208"
+- style="fill:#dcdc00;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+- sodipodi:type="inkscape:box3d"
+- transform="translate(0,-452.36218)"
+- inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+- inkscape:export-ydpi="90">
++ inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ transform="translate(0,-452.36218)"
++ sodipodi:type="inkscape:box3d"
++ style="fill:#dcdc00;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
++ id="g4208"
++ inkscape:perspectiveID="#perspective3054"
++ inkscape:corner0="0.22429094 : 0.05733945 : 0 : 1"
++ inkscape:corner7="0.017576171 : -0.063230334 : 0.53533062 : 1">
+ <path
+- d="M 252.05613,832.33866 386.05151,907.74315 666.77808,755.96636 540.56932,721.33247 z"
+- inkscape:box3dsidetype="13"
+- style="fill:#afafde;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4218"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#afafde;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="13"
++ d="M 252.05613,832.33866 386.05151,907.74315 666.77808,755.96636 540.56932,721.33247 z" />
+ <path
+- d="m 252.05613,733.85734 0,98.48132 288.51319,-111.00619 0,-68.52029 z"
+- inkscape:box3dsidetype="6"
+- style="fill:#353564;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4210"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#353564;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="6"
++ d="m 252.05613,733.85734 0,98.48132 288.51319,-111.00619 0,-68.52029 z" />
+ <path
+- d="m 540.56932,652.81218 126.20876,25.51283 0,77.64135 -126.20876,-34.63389 z"
+- inkscape:box3dsidetype="11"
+- style="fill:#e9e9ff;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4220"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#e9e9ff;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="11"
++ d="m 540.56932,652.81218 126.20876,25.51283 0,77.64135 -126.20876,-34.63389 z" />
+ <path
+- d="M 252.05613,733.85734 386.05151,789.25592 666.77808,678.32501 540.56932,652.81218 z"
+- inkscape:box3dsidetype="5"
+- style="fill:#ffa64a;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4212"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#ffa64a;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="5"
++ d="M 252.05613,733.85734 386.05151,789.25592 666.77808,678.32501 540.56932,652.81218 z" />
+ <path
+- d="m 386.05151,789.25592 0,118.48723 280.72657,-151.77679 0,-77.64135 z"
+- inkscape:box3dsidetype="14"
+- style="fill:#dc7000;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4216"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#dc7000;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="14"
++ d="m 386.05151,789.25592 0,118.48723 280.72657,-151.77679 0,-77.64135 z" />
+ <path
+- d="m 252.05613,733.85734 133.99538,55.39858 0,118.48723 -133.99538,-75.40449 z"
+- inkscape:box3dsidetype="3"
+- style="fill:#ff8100;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ sodipodi:type="inkscape:box3dside"
+ id="path4214"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#ff8100;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
++ inkscape:box3dsidetype="3"
++ d="m 252.05613,733.85734 133.99538,55.39858 0,118.48723 -133.99538,-75.40449 z" />
+ </g>
+ <g
+- transform="matrix(0.61103367,0,0,0.61103367,184.90921,105.33439)"
+- style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New Bold"
+- id="text10644"
+- inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+- inkscape:export-ydpi="90">
++ inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ id="text10644"
++ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New Bold"
++ transform="matrix(0.61103367,0,0,0.61103367,184.90921,105.33439)">
+ <path
+- inkscape:connector-curvature="0"
++ id="path10651"
+ d="m 312.93934,287.49231 c 0,0 12.15911,4.70344 12.15911,4.70344 -1.16914,-3.78566 -1.36609,-6.42779 -0.62059,-7.98893 0.77303,-1.55433 2.31974,-2.67971 4.63741,-3.3866 3.54185,-1.08012 9.2588,-1.28149 17.20089,-0.60825 5.40472,0.45149 9.7877,1.2756 13.15813,2.47913 2.87526,1.02678 4.8067,2.08085 5.78393,3.16281 0.953,1.05529 0.68242,1.83093 -0.82147,2.32213 -1.33343,0.43565 -4.00933,0.4338 -8.01521,-0.006 -3.99361,-0.43793 -6.57276,-0.46832 -7.74897,-0.0914 -1.53752,0.49281 -2.08336,1.89562 -1.62775,4.23618 0.49993,2.36832 2.04282,5.7384 4.6821,10.18097 0,0 33.47054,12.9472 33.47054,12.9472 0,0 16.11184,-5.93607 16.11184,-5.93607 2.65935,-0.97979 5.63016,-1.26849 8.93207,-0.87019 3.26952,0.35821 6.67266,1.18225 10.22658,2.47982 3.50638,1.28029 5.84566,2.55946 7.00284,3.83743 1.12276,1.24563 0.36649,2.38913 -2.2893,3.42814 0,0 -34.94558,13.67154 -34.94558,13.67154 -2.92114,1.14282 -6.14486,1.50751 -9.6487,1.08867 -3.53391,-0.46581 -7.10149,-1.44423 -10.68545,-2.925
97 -3.47431,-1.4364 -5.64896,-2.82393 -6.54145,-4.16365 -0.92064,-1.37405 0.0882,-2.59675 3.00508,-3.67143 0,0 7.12694,-2.62577 7.12694,-2.62577 0,0 -52.50231,-20.9034 -52.50231,-20.9034 0,0 -4.27235,1.37853 -4.27235,1.37853 -2.87125,0.92652 -5.85382,1.22124 -8.9284,0.88018 -3.09273,-0.37919 -6.11307,-1.17472 -9.04863,-2.37981 -2.84813,-1.16919 -4.53428,-2.29919 -5.0725,-3.39075 -0.55713,-1.12041 0.60034,-2.11765 3.45566,-2.99408 0,0 15.81554,-4.85435 15.81554,-4.85435"
+- id="path10651" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path10653"
+ d="m 450.20563,274.37419 c 8.39709,2.60001 15.72122,5.52626 21.95999,8.79892 6.3459,3.31795 10.16268,6.55569 11.35388,9.70501 1.16996,3.18395 -0.42377,5.66797 -4.84155,7.41369 -4.44065,1.75475 -11.29966,2.59506 -20.53347,2.50467 -9.3083,-0.11708 -19.3597,-1.23176 -30.04354,-3.32169 -10.53359,-2.06052 -20.14144,-4.62211 -28.79416,-7.65729 -8.60943,-3.02 -15.71357,-6.29886 -21.33959,-9.81595 -5.54916,-3.45086 -8.34517,-6.56091 -8.49064,-9.35044 -0.10977,-2.74104 2.07888,-4.77406 6.52814,-6.13104 4.4334,-1.35202 10.84307,-1.93047 19.27225,-1.74607 8.40563,0.1548 17.44551,1.11721 27.21347,2.90541 9.83591,1.79207 19.06472,4.0164 27.71522,6.69478 m -9.1814,3.24321 c -6.93135,-2.19582 -14.29205,-3.81877 -22.11986,-4.88928 -10.50184,-1.41904 -18.18921,-1.3288 -23.19156,0.27443 -4.45277,1.42715 -5.27242,3.61512 -2.37386,6.60149 2.9646,3.05434 8.51146,5.98902 16.71268,8.7937 6.85441,2.34413 14.93822,4.0224 24.21188,5.01023 9.26163,0.96935 16.11825,0.63716 20.48531,-0.98704 4
.34778,-1.61702 4.83734,-3.96995 1.56143,-7.02173 -3.27745,-3.00847 -8.38315,-5.59494 -15.28602,-7.7818"
+- id="path10653" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path10655"
+ d="m 501.40677,256.67853 c 8.2855,2.25963 15.62021,4.79866 21.99648,7.63322 6.47283,2.86893 10.57529,5.66316 12.22278,8.37595 1.63106,2.73812 0.58249,4.87053 -3.20352,6.3666 -3.80218,1.50245 -9.99557,2.22018 -18.54554,2.1403 -8.62384,-0.10275 -18.11647,-1.06013 -28.37944,-2.85438 -10.12931,-1.77086 -19.50731,-3.97401 -28.10366,-6.58751 -8.56668,-2.60446 -15.80044,-5.43615 -21.72056,-8.47841 -5.84614,-2.99034 -9.07173,-5.68938 -9.76924,-8.11339 -0.65546,-2.38528 0.97453,-4.15611 4.85105,-5.33841 3.86545,-1.17881 9.7319,-1.68234 17.63502,-1.51931 7.87476,0.13718 16.4959,0.97944 25.94841,2.5416 9.5079,1.56414 18.52115,3.50283 27.06822,5.83374 m -7.95134,2.81325 c -6.85533,-1.90745 -14.01072,-3.3192 -21.50235,-4.25178 -10.05394,-1.23699 -17.19863,-1.16034 -21.54591,0.23293 -3.8666,1.23928 -4.20012,3.13888 -0.92004,5.7292 3.34951,2.64513 9.06763,5.18338 17.21435,7.60636 6.79993,2.02243 14.60664,3.46973 23.38184,4.3222 8.75636,0.83617 15.0472,0.55232 18.80158,-0.84401 3.
74096,-1.39134 3.77541,-3.41948 0.18938,-6.0547 -3.58531,-2.60191 -8.79935,-4.84267 -15.61885,-6.7402"
+- id="path10655" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path10657"
+ d="m 498.86956,241.45737 c 0,0 41.97186,10.7737 41.97186,10.7737 4.72482,1.21282 8.18703,1.90051 10.35328,2.05414 3.39916,0.24557 6.37558,-0.10546 8.90933,-1.04781 3.64783,-1.3567 4.55117,-3.19879 2.7674,-5.50388 -0.6968,-0.87747 -0.71509,-1.43265 -0.0598,-1.67007 0.90171,-0.32661 2.7423,-0.34832 5.5286,-0.0653 2.81508,0.27553 5.77095,0.78832 8.87752,1.54145 2.9075,0.70494 5.07478,1.45029 6.49612,2.23688 2.387,1.26153 3.46837,2.88671 3.22214,4.89035 -0.30366,2.00954 -1.58865,3.47386 -3.86359,4.37282 -4.437,1.75331 -10.95243,2.27794 -19.46295,1.55789 -8.51408,-0.7447 -17.18129,-2.27383 -25.91666,-4.55876 0,0 -46.39955,-12.13682 -46.39955,-12.13682 0,0 -2.7752,0.89546 -2.7752,0.89546 -1.86215,0.6009 -4.11562,0.79062 -6.74951,0.56709 -2.66817,-0.24844 -5.48254,-0.76797 -8.43243,-1.555 -2.86659,-0.7648 -4.7821,-1.50445 -5.75594,-2.21936 -1.00485,-0.73491 -0.56559,-1.38896 1.30594,-1.96342 0,0 2.78949,-0.8562 2.78949,-0.8562 0,0 -16.98287,-4.44224 -16.98287,-4.44224 -4.
41845,-1.15574 -7.17384,-2.07008 -8.2949,-2.74877 -1.14744,-0.69685 -1.14322,-1.20764 0.005,-1.53492 1.11968,-0.31913 2.95891,-0.33663 5.52502,-0.0527 2.53854,0.26248 5.99934,0.95593 10.41152,2.08847 0,0 16.95436,4.35199 16.95436,4.35199 0,0 13.67203,-4.19643 13.67203,-4.19643 1.74162,-0.53454 3.87186,-0.69057 6.40061,-0.46977 2.49444,0.19871 5.18733,0.65224 8.0893,1.36373 2.85684,0.70045 4.8485,1.39785 5.96674,2.09213 1.084,0.67526 0.76656,1.2925 -0.96369,1.85073 0,0 -13.58879,4.3846 -13.58879,4.3846"
+- id="path10657" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path10659"
+ d="m 542.64636,227.3322 c 0,0 50.30268,11.56948 50.30268,11.56948 0,0 8.9914,-3.3127 8.9914,-3.3127 1.49284,-0.55001 3.56871,-0.71065 6.23706,-0.48365 2.62245,0.20425 5.57385,0.67066 8.86663,1.40246 3.2418,0.72052 5.60729,1.43801 7.08806,2.15243 1.43645,0.69487 1.42623,1.33017 -0.0428,1.9049 0,0 -19.09238,7.46939 -19.09238,7.46939 -1.57621,0.61665 -3.75607,0.81144 -6.52948,0.58225 -2.82081,-0.2548 -5.92636,-0.7877 -9.3039,-1.59499 -3.28207,-0.78447 -5.59066,-1.54313 -6.93561,-2.27638 -1.38642,-0.75375 -1.27354,-1.42456 0.32574,-2.01378 0,0 3.91972,-1.44414 3.91972,-1.44414 0,0 -50.48283,-11.80771 -50.48283,-11.80771 0,0 -3.22958,1.04207 -3.22958,1.04207 -1.6376,0.52845 -3.71505,0.69487 -6.22312,0.49759 -2.54497,-0.21925 -5.27648,-0.67718 -8.18454,-1.37085 -2.82709,-0.67435 -4.75883,-1.3266 -5.80358,-1.95708 -1.07789,-0.64836 -0.78636,-1.2253 0.864,-1.73188 0,0 3.25512,-0.99911 3.25512,-0.99911 0,0 -7.14548,-1.6713 -7.14548,-1.6713 -8.04906,-1.88263 -13.50193,-3.739
05 -16.42509,-5.56951 -2.90745,-1.81796 -2.2591,-3.30015 1.87049,-4.46023 1.82249,-0.51189 4.36616,-0.99693 7.62653,-1.45546 3.20922,-0.47487 5.92956,-0.62662 8.17557,-0.4568 2.27055,0.16423 4.6744,0.52526 7.21938,1.08521 2.73422,0.60161 4.69659,1.1818 5.87988,1.7402 1.13087,0.5485 1.27334,0.94979 0.42127,1.20214 -0.39551,0.11721 -1.19735,0.24708 -2.40585,0.38982 -4.14698,0.45727 -7.26756,0.99245 -9.35671,1.60673 -2.18785,0.6434 -2.79023,1.30053 -1.79181,1.97156 0.96689,0.65524 2.80275,1.29494 5.51496,1.91873 0,0 7.12726,1.63925 7.12726,1.63925 0,0 10.0897,-3.09688 10.0897,-3.09688 1.54811,-0.47515 3.52827,-0.61353 5.94897,-0.41655 2.38432,0.17729 4.99889,0.58126 7.85366,1.21453 2.80935,0.62323 4.80258,1.24333 5.97236,1.86026 1.13393,0.59982 0.93891,1.14763 -0.59531,1.64261 0,0 -10.00235,3.22739 -10.00235,3.22739"
+- id="path10659" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path10661"
+ d="m 589.48601,213.95725 c -2.88005,-0.0975 -5.30469,-0.0765 -7.27812,0.0633 -2.03857,0.12703 -3.62912,0.37333 -4.77268,0.73982 -2.28045,0.73092 -2.88262,1.57313 -1.7864,2.52927 0.47168,0.42268 1.34142,0.76925 2.61025,1.03894 1.46337,0.31105 3.30554,0.48238 5.52375,0.51333 1.6416,0.0133 4.00769,-0.2316 7.08668,-0.73274 5.64676,-0.9087 10.09533,-1.42339 13.38057,-1.55014 4.32134,-0.16274 9.37219,0.0625 15.18361,0.67808 5.84524,0.61923 11.48629,1.47712 16.94002,2.57957 7.49865,1.51585 13.00374,3.12101 16.47539,4.81925 5.14156,2.49571 5.79314,4.54187 1.82082,6.11155 -1.60894,0.63579 -3.68997,1.10603 -6.24152,1.40854 -2.4679,0.31155 -5.37436,0.46484 -8.71406,0.45919 0.65791,0.30946 1.08187,0.5806 1.27074,0.81312 0.18903,0.23297 0.11547,0.41567 -0.22205,0.54768 -0.90205,0.3528 -2.75348,0.3937 -5.54721,0.12233 -2.84009,-0.29363 -6.90888,-1.01429 -12.1713,-2.15376 0,0 -7.27125,-1.57445 -7.27125,-1.57445 -5.1361,-1.11212 -8.47726,-1.99207 -10.05479,-2.64523 -1.6166,-0.6707
8 -1.97587,-1.16244 -1.08732,-1.47738 0.71287,-0.25262 2.01954,-0.31165 3.923,-0.17741 1.8377,0.11988 4.59703,0.49608 8.29255,1.13126 3.64844,0.26305 6.82436,0.32104 9.51832,0.17365 2.6204,-0.16181 4.72453,-0.53848 6.30887,-1.12773 2.57853,-0.95901 3.04281,-2.01212 1.42353,-3.15654 -0.83916,-0.55439 -2.07554,-0.99843 -3.70855,-1.33352 -2.71024,-0.55608 -5.41638,-0.84072 -8.12889,-0.85609 -2.71232,-0.0153 -6.19939,0.39233 -10.48737,1.22807 -6.39329,1.2674 -12.88463,1.65786 -19.39285,1.16129 -6.41377,-0.48024 -13.08239,-1.46912 -19.95419,-2.95254 -6.9653,-1.50361 -11.75935,-3.0305 -14.4257,-4.579 -3.61559,-2.07534 -3.39708,-3.70695 0.56399,-4.91503 1.36734,-0.41695 3.09122,-0.72744 5.1722,-0.93255 2.03564,-0.22281 4.46121,-0.33483 7.27996,-0.33645 -0.48744,-0.28339 -0.79117,-0.5142 -0.91199,-0.69279 -0.10162,-0.18395 -0.0215,-0.31611 0.24059,-0.39658 0.78505,-0.24093 2.39809,-0.24587 4.84466,-0.0149 2.39169,0.21927 5.83727,0.78489 10.36383,1.70278 0,0 4.63024,0.93893 4.63024,0
.93893 4.17306,0.84624 6.88071,1.47283 8.10025,1.87564 2.3269,0.78471 2.99384,1.3467 1.98474,1.68224 -0.68071,0.2264 -2.01331,0.27535 -3.99484,0.1466 -1.97906,-0.12856 -4.24374,-0.41553 -6.78748,-0.85957"
+- id="path10661" />
++ inkscape:connector-curvature="0" />
+ </g>
+ <g
+- style="display:inline"
+- inkscape:label="rwlayer#1"
++ inkscape:groupmode="layer"
+ id="layer7"
+- inkscape:groupmode="layer">
++ inkscape:label="rwlayer#1"
++ style="display:inline">
+ <g
+- inkscape:corner7="0.019282233 : 0.058900499 : 0.53880824 : 1"
+- inkscape:corner0="0.22429094 : 0.11834566 : 0 : 1"
+- inkscape:perspectiveID="#perspective3054"
+- id="g4222"
++ sodipodi:type="inkscape:box3d"
+ style="fill:#dc7000;fill-opacity:0.6956522;stroke:#000000;stroke-linejoin:round;stroke-opacity:1;display:inline"
+- sodipodi:type="inkscape:box3d">
++ id="g4222"
++ inkscape:perspectiveID="#perspective3054"
++ inkscape:corner0="0.22429094 : 0.11834566 : 0 : 1"
++ inkscape:corner7="0.019282233 : 0.058900499 : 0.53880824 : 1">
+ <path
+- d="M 252.05613,280.2201 384.72319,334.81304 666.79274,224.25249 541.87079,199.19901 z"
+- inkscape:box3dsidetype="13"
+- style="fill:#dc7000;fill-opacity:0.6956522;fill-rule:evenodd;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
++ sodipodi:type="inkscape:box3dside"
+ id="path4232"
+- sodipodi:type="inkscape:box3dside" />
+- <path
+- d="m 252.05613,231.66533 0,48.55477 289.81466,-81.02109 0,-33.71629 z"
+- inkscape:box3dsidetype="6"
+ style="fill:#dc7000;fill-opacity:0.6956522;fill-rule:evenodd;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
+- id="path4224"
+- sodipodi:type="inkscape:box3dside" />
++ inkscape:box3dsidetype="13"
++ d="M 252.05613,280.2201 384.72319,334.81304 666.79274,224.25249 541.87079,199.19901 z" />
+ <path
+- d="m 541.87079,165.48272 124.92195,20.6172 0,38.15257 -124.92195,-25.05348 z"
+- inkscape:box3dsidetype="11"
++ sodipodi:type="inkscape:box3dside"
++ id="path4224"
+ style="fill:#dc7000;fill-opacity:0.6956522;fill-rule:evenodd;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
++ inkscape:box3dsidetype="6"
++ d="m 252.05613,231.66533 0,48.55477 289.81466,-81.02109 0,-33.71629 z" />
++ <path
++ sodipodi:type="inkscape:box3dside"
+ id="path4234"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#dc7000;fill-opacity:0.6956522;fill-rule:evenodd;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
++ inkscape:box3dsidetype="11"
++ d="m 541.87079,165.48272 124.92195,20.6172 0,38.15257 -124.92195,-25.05348 z" />
+ <path
+- d="m 252.05613,231.66533 132.66706,44.8271 282.06955,-90.39251 -124.92195,-20.6172 z"
+- inkscape:box3dsidetype="5"
+- style="fill:#dc7000;fill-opacity:0.6956522;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
++ sodipodi:type="inkscape:box3dside"
+ id="path4226"
+- sodipodi:type="inkscape:box3dside" />
+- <path
+- d="m 384.72319,276.49243 0,58.32061 282.06955,-110.56055 0,-38.15257 z"
+- inkscape:box3dsidetype="14"
+ style="fill:#dc7000;fill-opacity:0.6956522;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
+- id="path4230"
+- sodipodi:type="inkscape:box3dside" />
++ inkscape:box3dsidetype="5"
++ d="m 252.05613,231.66533 132.66706,44.8271 282.06955,-90.39251 -124.92195,-20.6172 z" />
+ <path
+- d="m 252.05613,231.66533 132.66706,44.8271 0,58.32061 -132.66706,-54.59294 z"
+- inkscape:box3dsidetype="3"
++ sodipodi:type="inkscape:box3dside"
++ id="path4230"
+ style="fill:#dc7000;fill-opacity:0.6956522;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
++ inkscape:box3dsidetype="14"
++ d="m 384.72319,276.49243 0,58.32061 282.06955,-110.56055 0,-38.15257 z" />
++ <path
++ sodipodi:type="inkscape:box3dside"
+ id="path4228"
+- sodipodi:type="inkscape:box3dside" />
++ style="fill:#dc7000;fill-opacity:0.6956522;stroke:#000000;stroke-linejoin:round;stroke-opacity:1"
++ inkscape:box3dsidetype="3"
++ d="m 252.05613,231.66533 132.66706,44.8271 0,58.32061 -132.66706,-54.59294 z" />
+ </g>
+ <path
+- inkscape:connector-curvature="0"
+- id="path7409"
++ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 384.72319,334.81304 0,-58.32061 282.06955,-90.39251 0,38.15257 z"
+- style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
++ id="path7409"
++ inkscape:connector-curvature="0" />
+ <g
+- transform="matrix(0.80267821,0,0,0.80267821,62.825218,56.880895)"
++ id="text7712"
+ style="font-size:40px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Italic"
+- id="text7712">
++ transform="matrix(0.80267821,0,0,0.80267821,62.825218,56.880895)">
+ <path
+- inkscape:connector-curvature="0"
++ id="path7719"
+ d="m 252.05613,245.37246 c 0,0 2.58377,0.91853 2.58377,0.91853 0,0 0.67003,28.68254 0.67003,28.68254 0,0 6.00991,-26.30785 6.00991,-26.30785 0,0 3.09814,1.10138 3.09814,1.10138 0,0 0.9064,29.13092 0.9064,29.13092 0,0 5.85342,-26.72782 5.85342,-26.72782 0,0 2.74237,0.9749 2.74237,0.9749 0,0 -7.58463,33.16045 -7.58463,33.16045 0,0 -3.14227,-1.25917 -3.14227,-1.25917 0,0 -0.79984,-29.88269 -0.79984,-29.88269 0,0 -6.16927,27.09001 -6.16927,27.09001 0,0 -3.09117,-1.23869 -3.09117,-1.23869 0,0 -1.07686,-35.64251 -1.07686,-35.64251"
+- id="path7719" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7721"
+ d="m 287.79597,263.66772 c -0.28884,-0.43333 -0.61869,-0.80462 -0.98942,-1.11388 -0.37042,-0.30892 -0.76619,-0.53938 -1.1872,-0.69144 -1.50601,-0.5438 -2.8179,0.2025 -3.93755,2.23319 -1.11656,2.0034 -1.85585,4.96514 -2.21993,8.88673 0,0 -1.70981,17.89804 -1.70981,17.89804 0,0 -2.76864,-1.10946 -2.76864,-1.10946 0,0 3.29745,-35.07562 3.29745,-35.07562 0,0 2.79152,0.99237 2.79152,0.99237 0,0 -0.53249,5.48111 -0.53249,5.48111 0.74059,-1.84081 1.625,-3.14432 2.65417,-3.90946 1.042,-0.76339 2.15336,-0.93697 3.33464,-0.51836 0.30871,0.10945 0.61252,0.26092 0.91141,0.45449 0.29909,0.17185 0.5984,0.39859 0.89796,0.68032 0,0 -0.54211,5.79198 -0.54211,5.79198"
+- id="path7721" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7723"
+ d="m 292.56008,245.35128 c 0,0 2.89162,0.97705 2.89162,0.97705 0,0 -0.70907,7.48716 -0.70907,7.48716 0,0 -2.88665,-1.00253 -2.88665,-1.00253 0,0 0.7041,-7.46168 0.7041,-7.46168 m -1.31334,13.95333 c 0,0 2.88235,1.02466 2.88235,1.02466 0,0 -3.42832,35.73991 -3.42832,35.73991 0,0 -2.85836,-1.14541 -2.85836,-1.14541 0,0 3.40433,-35.61916 3.40433,-35.61916"
+- id="path7723" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7725"
+ d="m 309.48682,265.7889 c 0,0 -0.45655,4.66236 -0.45655,4.66236 0,0 -5.9382,-2.1453 -5.9382,-2.1453 0,0 -1.90738,19.63158 -1.90738,19.63158 -0.0639,0.73285 -0.11193,1.34923 -0.1439,1.84921 -0.032,0.49995 -0.048,0.89472 -0.048,1.1843 -1e-5,1.42569 0.20251,2.54103 0.60784,3.34663 0.4164,0.8106 1.07925,1.3955 1.98972,1.75468 0,0 3.00258,1.18453 3.00258,1.18453 0,0 -0.50194,4.9795 -0.50194,4.9795 0,0 -2.83827,-1.13736 -2.83827,-1.13736 -1.75347,-0.70265 -3.05838,-1.93771 -3.91896,-3.70464 -0.8482,-1.75906 -1.27165,-4.08007 -1.27165,-6.96573 0,-0.51053 0.0159,-1.0593 0.0476,-1.64631 0.0318,-0.60924 0.0794,-1.2679 0.14289,-1.97605 0,0 1.89388,-19.56447 1.89388,-19.56447 0,0 -2.48097,-0.8963 -2.48097,-0.8963 0,0 0.46008,-4.59549 0.46008,-4.59549 0,0 2.43584,0.86593 2.43584,0.86593 0,0 0.99117,-10.28061 0.99117,-10.28061 0,0 2.95558,1.01275 2.95558,1.01275 0,0 -0.98217,10.32176 -0.98217,10.32176 0,0 5.96075,2.11903 5.96075,2.11903"
+- id="path7725" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7727"
+ d="m 326.77086,288.50631 c 0,0 -2.11917,21.16773 -2.11917,21.16773 0,0 -3.10033,-1.24237 -3.10033,-1.24237 0,0 0.57118,-5.5966 0.57118,-5.5966 -0.90683,1.9249 -1.94003,3.22465 -3.09866,3.90094 -1.14439,0.65615 -2.41844,0.70102 -3.82097,0.13736 -1.57366,-0.63245 -2.86231,-2.13265 -3.86853,-4.49812 -0.99293,-2.37801 -1.4885,-5.10715 -1.4885,-8.19165 0,-4.41285 0.84992,-7.57977 2.55495,-9.50664 1.72298,-1.93059 4.10506,-2.33393 7.15742,-1.19795 0,0 4.29935,1.6001 4.29935,1.6001 0,0 0.16883,-1.62004 0.16883,-1.62004 0.0225,-0.17483 0.0394,-0.36319 0.0507,-0.56513 0.0112,-0.2248 0.0169,-0.5662 0.0169,-1.02419 -2e-5,-2.03791 -0.41079,-3.76742 -1.23112,-5.18647 -0.80758,-1.43506 -1.94341,-2.41584 -3.40486,-2.94303 -1.00115,-0.36108 -2.02764,-0.47008 -3.07927,-0.32789 -1.038,0.1459 -2.10643,0.53972 -3.20508,1.18047 0,0 0.527,-5.57563 0.527,-5.57563 1.14408,-0.47421 2.26368,-0.73276 3.35858,-0.77478 1.10883,-0.0609 2.18164,0.092 3.21813,0.45926 2.21516,0.78511 3.90669,2.3
6932 5.06825,4.75443 1.17603,2.39577 1.76527,5.48042 1.76529,9.24901 -2e-5,0.75834 -0.0284,1.64404 -0.0851,2.65701 -0.0567,0.98991 -0.14171,2.038 -0.255,3.14416 m -3.36876,1.34525 c 0,0 -3.09125,-1.16846 -3.09125,-1.16846 -2.51456,-0.95045 -4.36861,-0.95956 -5.57074,-0.0335 -1.18775,0.905 -1.78036,2.79153 -1.78036,5.66151 0,1.98867 0.30169,3.66629 0.90572,5.03434 0.6159,1.37437 1.46424,2.27595 2.54643,2.70406 1.66181,0.6574 3.11849,0.0152 4.3679,-1.93292 1.25308,-1.9767 2.08305,-4.94692 2.48743,-8.90911 0,0 0.13487,-1.35589 0.13487,-1.35589"
+- id="path7727" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7729"
+ d="m 347.13009,294.55189 c -2e-5,-3.41012 -0.39774,-6.22506 -1.19207,-8.44179 -0.78109,-2.20838 -1.86163,-3.56012 -3.2394,-4.05701 -0.99824,-0.35995 -1.93565,-0.20773 -2.81262,0.45506 -0.86357,0.64245 -1.61486,1.76619 -2.25446,3.37042 -0.67347,1.68204 -1.20686,3.72671 -1.60067,6.13433 -0.38191,2.38662 -0.57272,4.84375 -0.57271,7.37297 -1e-5,3.20217 0.37593,5.86657 1.12879,7.996 0.76577,2.11448 1.81805,3.43778 3.1589,3.96832 1.01712,0.40245 1.9604,0.30824 2.82934,-0.28424 0.87064,-0.61709 1.63686,-1.72238 2.29808,-3.31677 0.67403,-1.66265 1.21875,-3.69516 1.63369,-6.09732 0.4153,-2.40442 0.62311,-4.77164 0.62313,-7.09997 M 337.0567,281.51791 c 0.78987,-1.85443 1.77924,-3.17561 2.9695,-3.9626 1.20523,-0.80829 2.46671,-0.98024 3.7849,-0.51311 2.03216,0.72026 3.65166,2.65879 4.85388,5.81961 1.21743,3.17392 1.82742,7.10144 1.82744,11.77595 -2e-5,3.82463 -0.35895,7.39468 -1.07589,10.70609 -0.7039,3.31065 -1.71002,6.09679 -3.0163,8.35733 -0.85293,1.49389 -1.83409,2.5108
8 -2.9426,3.05212 -1.10572,0.53986 -2.26135,0.5666 -3.46649,0.0823 -1.27171,-0.51109 -2.37123,-1.53454 -3.29984,-3.06897 -0.92665,-1.53116 -1.67807,-3.55843 -2.25519,-6.08175 0,0 -0.5706,5.68136 -0.5706,5.68136 0,0 -3.16769,-1.26936 -3.16769,-1.26936 0,0 5.22886,-52.09236 5.22886,-52.09236 0,0 3.20652,1.08346 3.20652,1.08346 0,0 -2.0765,20.42996 -2.0765,20.42996"
+- id="path7729" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7731"
+ d="m 359.06752,267.82359 c 0,0 3.38124,1.1425 3.38124,1.1425 0,0 -5.55435,53.6283 -5.55435,53.6283 0,0 -3.33921,-1.33809 -3.33921,-1.33809 0,0 5.51232,-53.43271 5.51232,-53.43271"
+- id="path7731" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path7733"
+ d="m 381.17073,308.13218 c 0.0384,-0.37658 0.0641,-0.77018 0.0769,-1.18085 0.0256,-0.40586 0.0384,-0.81654 0.0385,-1.23197 -2e-5,-2.98137 -0.46146,-5.50826 -1.38292,-7.5775 -0.90686,-2.06038 -2.14287,-3.37156 -3.70532,-3.93518 -1.73397,-0.62542 -3.25989,-0.12256 -4.57984,1.50318 -1.31611,1.59689 -2.31002,4.18671 -2.98387,7.76891 0,0 12.53655,4.65342 12.53655,4.65342 m 3.08753,6.45078 c 0,0 -16.27824,-6.18387 -16.27824,-6.18387 -0.0747,0.88659 -0.1245,1.5899 -0.14939,2.11004 -0.0249,0.52016 -0.0374,0.97278 -0.0374,1.35796 0,3.34636 0.52926,6.14103 1.58968,8.38801 1.07544,2.25725 2.59296,3.77513 4.55703,4.55209 1.51665,0.59999 2.95587,0.84102 4.3169,0.72132 1.36511,-0.12007 2.63824,-0.58361 3.81862,-1.39193 0,0 -0.67396,6.40861 -0.67396,6.40861 -1.26817,0.4707 -2.57744,0.67848 -3.92742,0.62445 -1.33332,-0.0488 -2.68797,-0.35023 -4.06377,-0.90315 -2.92691,-1.1763 -5.1688,-3.41411 -6.73581,-6.71046 -1.54917,-3.30395 -2.32174,-7.40977 -2.32174,-12.32606 0,-4.19681 0.3
8303,-7.95002 1.15007,-11.26392 0.78077,-3.33904 1.92339,-6.1559 3.43066,-8.452 0.97432,-1.43432 2.13251,-2.39622 3.47601,-2.88445 1.36012,-0.48514 2.80661,-0.4572 4.3403,0.0863 2.41878,0.85727 4.35033,2.93449 5.78837,6.23605 1.45546,3.31676 2.18494,7.33401 2.18497,12.0438 -3e-5,1.1284 -0.0388,2.32815 -0.11628,3.59909 -0.0775,1.24624 -0.19376,2.57565 -0.34866,3.9881"
+- id="path7733" />
++ inkscape:connector-curvature="0" />
+ </g>
+ <g
+- transform="translate(0,-6)"
++ id="text9181"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New"
+- id="text9181">
++ transform="translate(0,-6)">
+ <path
+- inkscape:connector-curvature="0"
++ id="path9188"
+ d="m 419.10683,281.89145 c 0,0 0,-2.03714 0,-2.03714 -3e-5,-0.69051 0.0779,-1.21057 0.23359,-1.56003 0.16977,-0.35378 0.38897,-0.57387 0.65748,-0.66032 0.26827,-0.0863 0.47992,-0.005 0.63507,0.24347 0.16913,0.24399 0.25367,0.71031 0.2537,1.39901 0,0 0,8.02408 0,8.02408 -3e-5,0.71176 -0.0846,1.24546 -0.2537,1.6012 -0.15515,0.3512 -0.3668,0.57235 -0.63507,0.66333 -0.24024,0.0815 -0.44526,0.0131 -0.61501,-0.20548 -0.15572,-0.22341 -0.24776,-0.64111 -0.27606,-1.25309 -0.0708,-1.90988 -0.71598,-3.41113 -1.93866,-4.50643 -1.6562,-1.51414 -3.55054,-1.92872 -5.68694,-1.23502 -1.40743,0.45705 -2.7403,1.39227 -3.99772,2.80806 -0.93873,1.03358 -1.68859,2.17121 -2.24836,3.41229 -0.97438,2.15669 -1.75138,4.45228 -2.32971,6.88527 -0.4158,1.79161 -0.62389,3.72591 -0.62389,5.80133 0,0 0,5.20043 0,5.20043 0,4.43391 1.00955,7.91984 3.01993,10.44682 1.99887,2.48909 4.30676,3.23169 6.91744,2.24404 1.55697,-0.58902 2.94224,-1.65714 4.15785,-3.20225 1.2255,-1.54498 2.40414,-3.62131 3.
53637,-6.22666 0.24009,-0.57118 0.50825,-0.91111 0.80442,-1.02002 0.25361,-0.0933 0.45778,-0.0421 0.61262,0.1533 0.15472,0.19535 0.23206,0.48794 0.23209,0.87783 -3e-5,0.52756 -0.30247,1.44272 -0.90815,2.74722 -1.15807,2.54873 -2.46912,4.64404 -3.9349,6.28471 -1.45779,1.61908 -2.94333,2.71978 -4.45696,3.29882 -1.31723,0.50391 -2.6613,0.60967 -4.03252,0.31496 -1.05399,-0.23099 -1.9274,-0.63787 -2.61886,-1.22095 -0.69284,-0.58423 -1.54974,-1.68494 -2.57189,-3.30482 -1.01027,-1.65369 -1.7028,-3.26411 -2.07569,-4.82896 -0.37329,-1.59011 -0.56008,-3.4145 -0.56008,-5.47187 0,0 0,-6.06566 0,-6.06566 0,-2.93231 0.49291,-6.09055 1.47668,-9.46765 0.99585,-3.39605 2.34392,-6.18065 4.04011,-8.35311 1.70261,-2.18997 3.53533,-3.5965 5.49604,-4.22491 2.99933,-0.96119 5.55976,-0.14235 7.69078,2.4382"
+- id="path9188" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path9190"
+ d="m 446.20148,293.70621 c -2e-5,4.24459 -0.90262,8.20511 -2.71524,11.89678 -1.80943,3.70706 -4.00854,6.06196 -6.60502,7.05524 -2.64397,1.01145 -4.90651,0.34117 -6.7797,-2.02677 -1.88367,-2.40388 -2.82947,-5.7829 -2.82946,-10.12702 -1e-5,-4.36681 0.94579,-8.42515 2.82946,-12.15934 1.87319,-3.73593 4.13573,-6.04253 6.7797,-6.93007 2.59648,-0.87152 4.79559,-0.0961 6.60502,2.31138 1.81262,2.38984 2.71522,5.71315 2.71524,9.9798 m -1.66979,0.59968 c -1e-5,-3.50178 -0.74267,-6.22333 -2.23301,-8.17124 -1.48384,-1.96123 -3.2946,-2.58265 -5.43761,-1.85412 -2.1569,0.73328 -4.00807,2.62575 -5.54831,5.68434 -1.53361,3.04527 -2.30304,6.35392 -2.30304,9.91552 0,3.53895 0.76943,6.29496 2.30304,8.26131 1.54024,1.9523 3.39141,2.51514 5.54831,1.69916 2.14301,-0.81073 3.95377,-2.73277 5.43761,-5.75981 1.49034,-3.04055 2.233,-6.29551 2.23301,-9.77516"
+- id="path9190" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path9192"
+ d="m 455.60751,276.10974 c 0,0 0,4.15113 0,4.15113 1.11495,-2.3191 2.11892,-3.99679 3.01293,-5.03692 0.89151,-1.03717 1.89309,-1.74157 3.00371,-2.11441 1.19364,-0.40064 2.27776,-0.32355 3.25343,0.22887 0.68978,0.41072 1.31055,1.27219 1.86271,2.58332 0.56341,1.28329 0.84476,2.70473 0.84478,4.26601 0,0 0,16.97118 0,16.97118 0,0 1.29949,-0.48945 1.29949,-0.48945 0.36507,-0.1375 0.62647,-0.10806 0.78443,0.0883 0.15785,0.17489 0.23676,0.46473 0.23678,0.86961 -2e-5,0.38358 -0.079,0.73322 -0.23678,1.04899 -0.15796,0.31594 -0.41936,0.54343 -0.78443,0.68248 0,0 -4.13649,1.57553 -4.13649,1.57553 -0.38266,0.14575 -0.6545,0.1203 -0.81523,-0.0767 -0.16083,-0.19703 -0.24127,-0.48927 -0.24126,-0.8766 -10e-6,-0.40886 0.0804,-0.76201 0.24126,-1.05937 0.16073,-0.31869 0.43257,-0.5501 0.81523,-0.69423 0,0 1.29268,-0.48689 1.29268,-0.48689 0,0 0,-16.56218 0,-16.56218 -2e-5,-1.9081 -0.39958,-3.37817 -1.20018,-4.41215 -0.80264,-1.05804 -1.88008,-1.35848 -3.23511,-0.89784 -1.03568,0.35
211 -1.93681,1.02658 -2.70223,2.02432 -0.76727,0.97846 -1.86472,3.15928 -3.29572,6.55195 0,0 0,17.22555 0,17.22555 0,0 1.80355,-0.67931 1.80355,-0.67931 0.3784,-0.14252 0.64933,-0.11436 0.81305,0.0844 0.16361,0.17695 0.24539,0.47148 0.2454,0.88368 -1e-5,0.39049 -0.0818,0.74701 -0.2454,1.06957 -0.16372,0.32276 -0.43465,0.55619 -0.81305,0.70032 0,0 -5.22933,1.99177 -5.22933,1.99177 -0.38503,0.14665 -0.66124,0.12033 -0.82837,-0.0793 -0.16721,-0.19969 -0.25085,-0.49706 -0.25084,-0.89202 -1e-5,-0.4169 0.0836,-0.77761 0.25084,-1.08204 0.16713,-0.32618 0.44334,-0.56178 0.82837,-0.7068 0,0 1.82264,-0.68649 1.82264,-0.68649 0,0 0,-22.83855 0,-22.83855 0,0 -1.36122,0.46482 -1.36122,0.46482 -0.38448,0.13131 -0.6603,0.094 -0.82719,-0.11207 -0.16697,-0.20614 -0.2505,-0.51757 -0.25049,-0.93421 -1e-5,-0.39465 0.0835,-0.75178 0.25049,-1.07132 0.16689,-0.31929 0.44271,-0.54376 0.82719,-0.67343 0,0 2.96436,-0.99954 2.96436,-0.99954"
+- id="path9192" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path9194"
+ d="m 479.92231,267.91115 c 0,0 7.93929,-2.67701 7.93929,-2.67701 0.34358,-0.11582 0.58957,-0.0747 0.73824,0.12332 0.14856,0.19796 0.22283,0.49327 0.22285,0.88604 -2e-5,0.37214 -0.0743,0.70755 -0.22285,1.00626 -0.14867,0.29894 -0.39466,0.50704 -0.73824,0.62435 0,0 -7.93929,2.71107 -7.93929,2.71107 0,0 0,17.5856 0,17.5856 -10e-6,1.53103 0.34075,2.68285 1.02117,3.45423 0.69061,0.76528 1.69453,0.8979 3.00873,0.40072 0.98487,-0.37258 2.04735,-1.03413 3.18661,-1.9829 1.13503,-0.96594 2.01495,-1.89616 2.64195,-2.79193 0.22765,-0.35338 0.41536,-0.55761 0.56319,-0.61282 0.1818,-0.0679 0.3408,0.007 0.47704,0.22365 0.13614,0.1963 0.20421,0.46949 0.20422,0.81966 -10e-6,0.30901 -0.0738,0.62518 -0.22124,0.94859 -0.36343,0.81742 -1.25108,1.8964 -2.66748,3.24084 -1.41148,1.32553 -2.77168,2.23999 -4.07986,2.74044 -1.71013,0.65421 -3.07802,0.45516 -4.09907,-0.60245 -1.02442,-1.06109 -1.53788,-2.82281 -1.53788,-5.28253 0,0 0,-17.628 0,-17.628 0,0 -2.75879,0.94206 -2.75879,0.94206 -
0.35775,0.12218 -0.61439,0.083 -0.76967,-0.11774 -0.15535,-0.20078 -0.23305,-0.50216 -0.23305,-0.90403 0,-0.38067 0.0777,-0.72418 0.23305,-1.03047 0.15528,-0.30606 0.41192,-0.51941 0.76967,-0.64007 0,0 2.75879,-0.93022 2.75879,-0.93022 0,0 0,-7.82065 0,-7.82065 0,-0.63066 0.0709,-1.10555 0.21258,-1.42455 0.14162,-0.31879 0.31857,-0.51233 0.53079,-0.58066 0.22384,-0.072 0.40634,0.006 0.54755,0.23289 0.14114,0.22719 0.21169,0.65532 0.2117,1.28446 0,0 0,7.80185 0,7.80185"
+- id="path9194" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path9196"
+ d="m 507.59418,284.6149 c 0,0 0,-3.63759 0,-3.63759 -1.97126,3.83544 -4.09162,6.19491 -6.36413,7.06425 -1.66058,0.63526 -2.96464,0.36062 -3.90749,-0.82933 -0.94581,-1.21408 -1.41981,-2.9567 -1.41981,-5.22501 0,-2.49306 0.62441,-4.89516 1.86942,-7.19916 1.2399,-2.29455 3.04084,-3.85692 5.3928,-4.68926 0.63133,-0.22341 1.31558,-0.38496 2.05241,-0.48487 0.73499,-0.11963 1.52741,-0.16982 2.3768,-0.15063 0,0 0,-4.08853 0,-4.08853 -10e-6,-1.38285 -0.34377,-2.46702 -1.03247,-3.25387 -0.69032,-0.78861 -1.72878,-0.94811 -3.11901,-0.47551 -1.06879,0.36336 -2.57478,1.45299 -4.52455,3.2767 -0.35386,0.32479 -0.58075,0.50443 -0.68042,0.53862 -0.17727,0.0609 -0.33247,-0.008 -0.46556,-0.20685 -0.12205,-0.20267 -0.1831,-0.48744 -0.18309,-0.85428 -1e-5,-0.34641 0.0555,-0.64039 0.16645,-0.88189 0.15527,-0.35826 0.7811,-0.98775 1.87459,-1.88616 1.71506,-1.42987 3.00589,-2.28846 3.8779,-2.5812 1.72557,-0.5792 3.06445,-0.23562 4.02174,1.02522 0.95419,1.23685 1.43016,2.84357 1.43017,4.
82313 0,0 0,16.67655 0,16.67655 0,0 1.79004,-0.67421 1.79004,-0.67421 0.32911,-0.12395 0.56246,-0.0924 0.70028,0.0947 0.13772,0.16703 0.20657,0.43961 0.20659,0.8178 -2e-5,0.35829 -0.0689,0.68305 -0.20659,0.9743 -0.13782,0.29141 -0.37117,0.49978 -0.70028,0.62513 0,0 -3.15579,1.202 -3.15579,1.202 m 0,-12.56621 c -0.63412,-0.11291 -1.30734,-0.12215 -2.01989,-0.0274 -0.71427,0.095 -1.46826,0.28452 -2.26226,0.56886 -1.99974,0.71618 -3.57168,2.08121 -4.70901,4.09722 -0.86414,1.51494 -1.29713,3.10995 -1.29712,4.78174 -1e-5,1.54949 0.32757,2.73182 0.98167,3.54568 0.66373,0.80794 1.62356,0.97347 2.87668,0.4994 1.19328,-0.45143 2.29477,-1.30203 3.30546,-2.54998 1.01808,-1.26789 2.05966,-3.05352 3.12447,-5.35395 0,0 0,-5.5616 0,-5.5616"
+- id="path9196" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path9198"
+ d="m 523.702,240.54258 c 0,0 0,6.34723 0,6.34723 0,0 -1.89662,0.61903 -1.89662,0.61903 0,0 0,-6.36799 0,-6.36799 0,0 1.89662,-0.59827 1.89662,-0.59827 m 0.0457,12.59128 c 0,0 0,22.8716 0,22.8716 0,0 4.98692,-1.8783 4.98692,-1.8783 0.30944,-0.11656 0.52886,-0.0834 0.65845,0.0995 0.1295,0.16349 0.19423,0.42857 0.19424,0.79531 -10e-6,0.34743 -0.0648,0.66158 -0.19424,0.94246 -0.12959,0.28103 -0.34901,0.48047 -0.65845,0.59834 0,0 -11.367,4.32951 -11.367,4.32951 -0.31177,0.11876 -0.53541,0.0856 -0.67072,-0.0998 -0.13538,-0.1854 -0.20308,-0.45583 -0.20308,-0.81118 0,-0.37512 0.0677,-0.69681 0.20308,-0.96503 0.13531,-0.28782 0.35895,-0.49043 0.67072,-0.60786 0,0 5.09683,-1.9197 5.09683,-1.9197 0,0 0,-20.43068 0,-20.43068 0,0 -3.77547,1.28922 -3.77547,1.28922 -0.31037,0.106 -0.53819,0.0657 -0.68325,-0.12114 -0.13477,-0.19038 -0.20218,-0.46292 -0.20217,-0.81751 -10e-6,-0.37425 0.0674,-0.70236 0.20217,-0.98427 0.1347,-0.28172 0.36252,-0.47665 0.68325,-0.58482 0,0 5.05872,-1
.70573 5.05872,-1.70573"
+- id="path9198" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path9200"
+ d="m 537.32375,248.55623 c 0,0 0,3.62744 0,3.62744 0.85157,-1.98473 1.61868,-3.41372 2.30203,-4.28987 0.68168,-0.87397 1.4478,-1.45313 2.29768,-1.73844 0.91383,-0.30672 1.74417,-0.19946 2.49175,0.31998 0.5287,0.38502 1.00462,1.16228 1.42804,2.33096 0.43214,1.14498 0.64797,2.40056 0.64799,3.76807 0,0 0,14.86484 0,14.86484 0,0 0.99719,-0.37559 0.99719,-0.37559 0.28024,-0.10556 0.48092,-0.0691 0.6022,0.1094 0.1212,0.15971 0.18179,0.41693 0.18181,0.77172 -2e-5,0.33612 -0.0606,0.63926 -0.18181,0.90944 -0.12128,0.27032 -0.32196,0.45885 -0.6022,0.56559 0,0 -3.17247,1.20835 -3.17247,1.20835 -0.29322,0.11168 -0.5015,0.0781 -0.62464,-0.10097 -0.1232,-0.17913 -0.18482,-0.43824 -0.18481,-0.77724 -1e-5,-0.35784 0.0616,-0.66361 0.18481,-0.91724 0.12314,-0.27233 0.33142,-0.46371 0.62464,-0.57415 0,0 0.99087,-0.37321 0.99087,-0.37321 0,0 0,-14.50223 0,-14.50223 -2e-5,-1.67078 -0.30634,-2.97304 -0.91998,-3.90831 -0.61502,-0.95611 -1.44029,-1.25912 -2.47769,-0.90646 -0.79254,0.269
45 -1.48185,0.82573 -2.06717,1.66956 -0.58655,0.82666 -1.42522,2.69155 -2.51824,5.6018 0,0 0,15.05244 0,15.05244 0,0 1.37768,-0.5189 1.37768,-0.5189 0.28918,-0.10892 0.49624,-0.0731 0.62138,0.10749 0.12507,0.16149 0.18759,0.4224 0.18759,0.7828 0,0.34142 -0.0626,0.64972 -0.18759,0.9249 -0.12514,0.27533 -0.3322,0.46807 -0.62138,0.57821 0,0 -3.99187,1.52045 -3.99187,1.52045 -0.2936,0.11182 -0.50419,0.0772 -0.6316,-0.10415 -0.12747,-0.18138 -0.19123,-0.44453 -0.19122,-0.78936 -1e-5,-0.36399 0.0637,-0.67542 0.19122,-0.93422 0.12741,-0.27783 0.338,-0.47202 0.6316,-0.5826 0,0 1.39041,-0.52369 1.39041,-0.52369 0,0 0,-19.9511 0,-19.9511 0,0 -1.03851,0.35462 -1.03851,0.35462 -0.29323,0.10015 -0.50356,0.0572 -0.63081,-0.1291 -0.12731,-0.18629 -0.19099,-0.46138 -0.19098,-0.82516 -1e-5,-0.3446 0.0636,-0.6533 0.19098,-0.92606 0.12725,-0.27258 0.33758,-0.4583 0.63081,-0.5572 0,0 2.26229,-0.76281 2.26229,-0.76281"
+- id="path9200" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path9202"
+ d="m 564.37221,251.7564 c 0,0 -11.52429,4.14925 -11.52429,4.14925 0.20161,2.94498 0.82381,5.14921 1.86378,6.61012 1.04511,1.43359 2.33011,1.85933 3.85161,1.28373 0.8426,-0.31877 1.72276,-0.93491 2.64009,-1.84687 0.91423,-0.90885 1.65753,-1.93361 2.23132,-3.07472 0.16748,-0.33476 0.31285,-0.525 0.43614,-0.57085 0.14082,-0.0524 0.26398,0.0197 0.36951,0.21624 0.10547,0.17832 0.15819,0.42155 0.1582,0.72977 -10e-6,0.30823 -0.0703,0.63376 -0.21096,0.97672 -0.42243,1.06628 -1.1765,2.20515 -2.26499,3.41901 -1.08401,1.1971 -2.20364,2.01781 -3.35931,2.45991 -1.94615,0.7445 -3.58314,0.0702 -4.90528,-2.03457 -1.31936,-2.13686 -1.98142,-5.07429 -1.98141,-8.80462 -10e-6,-3.39624 0.62072,-6.52518 1.85798,-9.37715 1.24083,-2.84225 2.7659,-4.56294 4.57045,-5.16871 1.84627,-0.61971 3.35606,0.10399 4.53489,2.16125 1.17368,2.03023 1.74983,4.98512 1.73227,8.87149 m -1.12272,-1.91239 c -0.22071,-2.44805 -0.8042,-4.29941 -1.75284,-5.55586 -0.94308,-1.26387 -2.07284,-1.67412 -3.3916,-1.
2258 -1.32518,0.45052 -2.47072,1.63227 -3.43432,3.54863 -0.96701,1.92314 -1.57083,4.23377 -1.80906,6.92855 0,0 10.38782,-3.69552 10.38782,-3.69552"
+- id="path9202" />
++ inkscape:connector-curvature="0" />
+ <path
+- inkscape:connector-curvature="0"
++ id="path9204"
+ d="m 573.09946,236.49319 c 0,0 0,5.67252 0,5.67252 1.39118,-3.11706 2.42557,-5.15863 3.10733,-6.13505 0.68836,-0.9944 1.32057,-1.58768 1.89705,-1.78148 0.62514,-0.2101 1.20313,0.0452 1.73426,0.76436 0.5383,0.69735 0.80705,1.27409 0.80706,1.73125 -1e-5,0.33412 -0.0538,0.63396 -0.16121,0.89952 -0.0993,0.24531 -0.22754,0.39508 -0.38483,0.4493 -0.0829,0.0286 -0.15328,0.0265 -0.21128,-0.006 -0.0581,-0.0505 -0.16584,-0.21587 -0.32347,-0.49644 -0.29063,-0.51722 -0.54416,-0.85379 -0.76045,-1.00936 -0.21651,-0.15563 -0.42901,-0.19806 -0.6375,-0.12711 -0.4593,0.15634 -1.01569,0.73516 -1.66979,1.73811 -0.64734,1.00259 -1.77765,3.30323 -3.39717,6.91661 0,0 0,12.30832 0,12.30832 0,0 4.70377,-1.77166 4.70377,-1.77166 0.25887,-0.0975 0.44243,-0.0607 0.55085,0.11042 0.10835,0.15336 0.16252,0.39774 0.16253,0.73321 -10e-6,0.3178 -0.0542,0.60323 -0.16253,0.85632 -0.10842,0.25321 -0.29198,0.42911 -0.55085,0.52771 0,0 -8.39069,3.19589 -8.39069,3.19589 -0.25883,0.0986 -0.44449,0.0704
-0.55681,-0.0846 -0.11237,-0.17308 -0.16857,-0.42152 -0.16857,-0.74529 0,-0.30576 0.0519,-0.57716 0.15561,-0.81415 0.11232,-0.25813 0.3023,-0.43758 0.56977,-0.53836 0,0 2.61311,-0.98462 2.61311,-0.98462 0,0 0,-18.76796 0,-18.76796 0,0 -1.99291,0.68053 -1.99291,0.68053 -0.25825,0.0882 -0.44347,0.0437 -0.55552,-0.13359 -0.11211,-0.17732 -0.16818,-0.43671 -0.16818,-0.77807 0,-0.32336 0.0517,-0.61034 0.15524,-0.8609 0.11207,-0.25331 0.3016,-0.42495 0.56846,-0.51496 0,0 3.06672,-1.03405 3.06672,-1.03405"
+- id="path9204" />
++ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+- style="display:inline"
+- inkscape:label="Image (name)#1"
++ inkscape:groupmode="layer"
+ id="layer12"
+- inkscape:groupmode="layer">
++ inkscape:label="Image (name)#1"
++ style="display:inline">
+ <g
+- id="text8052"
++ transform="translate(-12.096774,4.8387096)"
+ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Courier New;-inkscape-font-specification:Courier New"
+- transform="translate(-12.096774,4.8387096)">
++ id="text8052">
+ <path
+- id="path8059"
++ inkscape:connector-curvature="0"
+ d="m 423.74041,363.69642 c 0,0 0,46.13338 0,46.13338 0,0 6.60461,-3.25288 6.60461,-3.25288 0.45439,-0.22379 0.77972,-0.20169 0.97632,0.0662 0.19645,0.2373 0.29465,0.64448 0.29467,1.22164 -2e-5,0.54682 -0.0983,1.05125 -0.29467,1.51342 -0.1966,0.46245 -0.52193,0.80673 -0.97632,1.03282 0,0 -15.30796,7.61688 -15.30796,7.61688 -0.47355,0.23563 -0.81328,0.21827 -1.01883,-0.0526 -0.20568,-0.27092 -0.30855,-0.68631 -0.30855,-1.24607 0,-0.59083 0.10283,-1.10805 0.30855,-1.55154 0.20555,-0.47431 0.54528,-0.8281 1.01883,-1.06133 0,0 6.75525,-3.32706 6.75525,-3.32706 0,0 0,-46.25099 0,-46.25099 0,0 -6.75525,2.91925 -6.75525,2.91925 -0.47355,0.20469 -0.81328,0.18057 -1.01883,-0.0726 -0.20568,-0.2843 -0.30855,-0.72199 -0.30855,-1.31286 0,-0.59081 0.10283,-1.1013 0.30855,-1.53138 0.20555,-0.46081 0.54528,-0.79235 1.01883,-0.99466 0,0 15.30796,-6.53778 15.30796,-6.53778 0.45439,-0.19399 0.77972,-0.15067 0.97632,0.13006 0.19645,0.25021 0.29465,0.66381 0.29467,1.24095 -2e-5,0.5772
2 -0.0983,1.09044 -0.29467,1.53969 -0.1966,0.41925 -0.52193,0.72704 -0.97632,0.92336 0,0 -6.60461,2.85414 -6.60461,2.85414"
+- inkscape:connector-curvature="0" />
++ id="path8059" />
+ <path
+- id="path8061"
++ inkscape:connector-curvature="0"
+ d="m 441.87507,365.74833 c 0,0 0,3.82064 0,3.82064 1.56942,-4.14583 3.13954,-6.56174 4.71033,-7.25855 0.94216,-0.41791 1.76641,-0.26368 2.47352,0.46081 0.70573,0.69355 1.29521,1.97053 1.76901,3.83012 0.80259,-2.43288 1.61058,-4.33197 2.42395,-5.69892 0.82577,-1.39965 1.64969,-2.28097 2.47179,-2.64567 1.28608,-0.57047 2.30749,-0.15871 3.06643,1.23159 0.99542,1.77766 1.49212,3.97984 1.49215,6.61017 0,0 0,25.73386 0,25.73386 0,0 1.48605,-0.73191 1.48605,-0.73191 0.41748,-0.20562 0.71641,-0.17807 0.89705,0.0826 0.18051,0.23133 0.27074,0.62358 0.27077,1.17682 -3e-5,0.52419 -0.0903,1.00579 -0.27077,1.44493 -0.18064,0.43941 -0.47957,0.76299 -0.89705,0.97072 0,0 -3.25208,1.61816 -3.25208,1.61816 0,0 0,-29.13622 0,-29.13622 -2e-5,-1.87499 -0.27409,-3.30363 -0.82284,-4.287 -0.54964,-0.98475 -1.18481,-1.31612 -1.90601,-0.99255 -0.65174,0.29248 -1.34015,1.11693 -2.06542,2.47501 -0.72674,1.33131 -1.55495,3.70059 -2.48533,7.11235 0,0 0,24.72225 0,24.72225 0,0 1.50177,-0.73965
1.50177,-0.73965 0.42794,-0.21077 0.73434,-0.18473 0.9195,0.078 0.18502,0.23308 0.27752,0.62963 0.27753,1.18976 -1e-5,0.53068 -0.0926,1.01883 -0.27753,1.46455 -0.18516,0.446 -0.49156,0.77547 -0.9195,0.9884 0,0 -3.33363,1.65874 -3.33363,1.65874 0,0 0,-29.23324 0,-29.23324 -2e-5,-1.9874 -0.2882,-3.4883 -0.86521,-4.50391 -0.56348,-1.05333 -1.20023,-1.42148 -1.91062,-1.10276 -0.65361,0.29333 -1.30108,1.01634 -1.94239,2.17018 -0.89094,1.6268 -1.82798,4.16023 -2.81147,7.60421 0,0 0,25.03641 0,25.03641 0,0 1.56211,-0.76936 1.56211,-0.76936 0.43885,-0.21614 0.75303,-0.1917 0.94289,0.0732 0.18975,0.23484 0.28458,0.63583 0.28459,1.20303 -1e-5,0.53738 -0.0948,1.03223 -0.28459,1.48482 -0.18986,0.45281 -0.50404,0.78839 -0.94289,1.00674 0,0 -4.99523,2.48551 -4.99523,2.48551 -0.44529,0.22157 -0.76474,0.19977 -0.95802,-0.0659 -0.19339,-0.26571 -0.29012,-0.67 -0.29011,-1.21278 -1e-5,-0.57291 0.0967,-1.07295 0.29011,-1.5 0.19328,-0.45695 0.51273,-0.7951 0.95802,-1.01441 0,0 1.5765,-0.77645 1.
5765,-0.77645 0,0 0,-31.40719 0,-31.40719 0,0 -1.5765,0.71024 -1.5765,0.71024 -0.44529,0.20064 -0.76474,0.16379 -0.95802,-0.11096 -0.19339,-0.27476 -0.29012,-0.69868 -0.29011,-1.27164 -1e-5,-0.54273 0.0967,-1.03824 0.29011,-1.48635 0.19328,-0.44782 0.51273,-0.77089 0.95802,-0.96927 0,0 3.43312,-1.52911 3.43312,-1.52911"
+- inkscape:connector-curvature="0" />
++ id="path8061" />
+ <path
+- id="path8063"
++ inkscape:connector-curvature="0"
+ d="m 480.58851,385.41099 c 0,0 0,-5.15657 0,-5.15657 -2.4262,5.5798 -5.03657,9.079 -7.835,10.47699 -2.04539,1.02181 -3.65191,0.72721 -4.81363,-0.89204 -1.16547,-1.65345 -1.74963,-4.09108 -1.74963,-7.30887 0,-3.53667 0.76951,-6.98913 2.30362,-10.34663 1.52759,-3.34322 3.746,-5.68753 6.64239,-7.03536 0.77733,-0.36171 1.61976,-0.63945 2.52684,-0.83351 0.90473,-0.2221 1.88006,-0.34939 2.92541,-0.38255 0,0 0,-5.7958 0,-5.7958 -10e-6,-1.96032 -0.42307,-3.47297 -1.27068,-4.53986 -0.84967,-1.0694 -2.12799,-1.22244 -3.8396,-0.45447 -1.31604,0.59057 -3.17073,2.24198 -5.57246,4.96625 -0.43594,0.48573 -0.71549,0.75657 -0.83828,0.81214 -0.21842,0.0989 -0.40964,0.0122 -0.57362,-0.26044 -0.15038,-0.27883 -0.22559,-0.67845 -0.22559,-1.19879 0,-0.49136 0.0684,-0.91228 0.20509,-1.26267 0.19131,-0.51914 0.96238,-1.45616 2.30947,-2.80749 2.11245,-2.14861 3.70209,-3.45689 4.77581,-3.9332 2.12442,-0.94235 3.77243,-0.54918 4.95058,1.17099 1.17422,1.68619 1.75986,3.93017 1.75988,6.73612
0,0 0,23.63827 0,23.63827 0,0 2.20228,-1.08466 2.20228,-1.08466 0.40486,-0.19939 0.6919,-0.17146 0.86143,0.0837 0.1694,0.2268 0.25409,0.60813 0.25411,1.1441 -2e-5,0.5078 -0.0847,0.973 -0.25411,1.39571 -0.16953,0.42296 -0.45657,0.73515 -0.86143,0.9366 0,0 -3.88288,1.93203 -3.88288,1.93203 m 0,-17.81357 c -0.78041,-0.11482 -1.60899,-0.0799 -2.48605,0.10525 -0.87928,0.18568 -1.80752,0.50815 -2.78512,0.968 -2.46256,1.15841 -4.39871,3.20675 -5.7998,6.14762 -1.06467,2.21091 -1.5982,4.50451 -1.59819,6.87592 -1e-5,2.19789 0.40363,3.85127 1.20954,4.95824 0.81771,1.09778 2.0001,1.26287 3.54357,0.49962 1.46955,-0.72669 2.82587,-2.01263 4.07022,-3.85519 1.2533,-1.87118 2.53536,-4.47776 3.84583,-7.81547 0,0 0,-7.88399 0,-7.88399"
+- inkscape:connector-curvature="0" />
++ id="path8063" />
+ <path
+- id="path8065"
++ inkscape:connector-curvature="0"
+ d="m 504.87507,344.02572 c 0,0 0,-6.33756 0,-6.33756 0,0 3.62149,-1.61301 3.62149,-1.61301 0.3655,-0.16275 0.62721,-0.11582 0.78538,0.14085 0.15805,0.25653 0.23705,0.64362 0.23708,1.1613 -3e-5,0.49052 -0.0791,0.93476 -0.23708,1.33282 -0.15817,0.39836 -0.41988,0.67984 -0.78538,0.84448 0,0 -2.07259,0.93375 -2.07259,0.93375 0,0 0,34.44897 0,34.44897 -2e-5,2.29935 -0.22086,4.46439 -0.66296,6.49712 -0.29508,1.35662 -0.78741,2.85674 -1.47785,4.50202 -0.69188,1.64858 -1.32318,2.89693 -1.89359,3.74358 -0.57137,0.84805 -1.33675,1.52227 -2.29743,2.02265 0,0 -4.48946,2.33825 -4.48946,2.33825 -0.37994,0.19787 -0.65249,0.17289 -0.81737,-0.0754 -0.16499,-0.22051 -0.24751,-0.5954 -0.2475,-1.12453 -10e-6,-0.52918 0.0825,-1.0035 0.2475,-1.42286 0.16488,-0.41919 0.43743,-0.72673 0.81737,-0.92267 0,0 4.54567,-2.30289 4.54567,-2.30289 0.92315,-0.47614 1.75064,-1.42648 2.48315,-2.84967 0.74328,-1.42651 1.3553,-3.26448 1.83674,-5.51382 0.27125,-1.28999 0.40681,-2.82626 0.40683,-4.6095
6 0,0 0,-10.37051 0,-10.37051 -1.66739,5.89686 -3.82848,9.5134 -6.49259,10.83562 -2.17909,1.08151 -4.07329,0.23861 -5.67781,-2.54346 -1.59915,-2.82914 -2.40148,-6.78447 -2.40147,-11.85622 -1e-5,-5.07169 0.80232,-9.76707 2.40147,-14.07131 1.60452,-4.29012 3.49872,-6.9134 5.67781,-7.88005 2.66411,-1.18176 4.8252,0.38981 6.49259,4.69207 m 0,10.41166 c -2e-5,-4.06038 -0.62896,-7.20112 -1.89031,-9.42839 -1.2536,-2.24103 -2.76147,-2.97007 -4.52696,-2.17791 -1.77459,0.79633 -3.30477,2.91596 -4.5872,6.36538 -1.28721,3.43436 -1.9326,7.21098 -1.9326,11.32033 0,4.13734 0.64539,7.33529 1.9326,9.58763 1.28243,2.21618 2.81261,2.88369 4.5872,2.01202 1.76549,-0.86719 3.27336,-3.01347 4.52696,-6.43279 1.26135,-3.44025 1.89029,-7.18583 1.89031,-11.24627"
+- inkscape:connector-curvature="0" />
++ id="path8065" />
+ <path
+- id="path8067"
++ inkscape:connector-curvature="0"
+ d="m 529.8044,344.5465 c 0,0 -15.0214,7.10051 -15.0214,7.10051 0.26314,4.28098 1.07521,7.44153 2.43223,9.47797 1.36338,1.99553 3.03922,2.49762 5.02283,1.51672 1.09819,-0.54306 2.24508,-1.52324 3.44017,-2.93807 1.19075,-1.4097 2.1587,-2.97236 2.90578,-4.68889 0.21804,-0.50344 0.40728,-0.79413 0.56779,-0.87226 0.1833,-0.0892 0.34362,0.005 0.48099,0.28146 0.13728,0.25029 0.2059,0.60007 0.20592,1.0494 -2e-5,0.44938 -0.0915,0.9304 -0.27459,1.44334 -0.5499,1.59345 -1.53164,3.3235 -2.9491,5.19415 -1.412,1.84634 -2.87079,3.14741 -4.37696,3.89984 -2.53736,1.26758 -4.67257,0.436 -6.39774,-2.51332 -1.72209,-2.9974 -2.58645,-7.22532 -2.58645,-12.67216 0,-4.95904 0.81041,-9.58368 2.42538,-13.8585 1.61912,-4.25962 3.60849,-6.90642 5.96144,-7.9502 2.40629,-1.06738 4.37322,-0.14533 5.90848,2.75024 1.52811,2.85581 2.27809,7.11232 2.25523,12.77977 m -1.46157,-2.68694 c -0.28736,-3.54969 -1.04714,-6.19709 -2.28263,-7.94479 -1.22853,-1.7594 -2.70063,-2.2574 -4.41951,-1.48616 -1.7278
1,0.77534 -3.22184,2.60204 -4.47892,5.48524 -1.26182,2.8941 -2.04987,6.32176 -2.36082,10.27751 0,0 13.54188,-6.3318 13.54188,-6.3318"
+- inkscape:connector-curvature="0" />
++ id="path8067" />
+ </g>
+ </g>
+ <g
+- id="text10963"
+- style="font-size:40px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Futura;-inkscape-font-specification:Futura Medium"
+- transform="matrix(0.71809444,0,0,0.71809444,82.080142,116.02377)"
+- inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+- inkscape:export-ydpi="90">
++ inkscape:export-filename="/Users/arothfusz/src/metalivedev/docker/docs/sources/terms/images/docker-filesystems-multiroot.png"
++ transform="matrix(0.71809444,0,0,0.71809444,82.080142,116.02377)"
++ style="font-size:40px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Futura;-inkscape-font-specification:Futura Medium"
++ id="text10963">
+ <path
+- id="path10970"
++ inkscape:connector-curvature="0"
+ d="m 252.05613,354.81009 c 0,0 0,-73.31493 0,-73.31493 0,0 3.38868,1.401 3.38868,1.401 1.52054,0.62872 2.73709,1.51509 3.64624,2.65926 0.92155,1.15157 1.70141,2.77527 2.33858,4.87173 0.64835,2.16908 1.16294,4.75107 1.54316,7.74529 0.39065,3.03432 0.58615,6.01823 0.58616,8.94912 -10e-6,5.34653 -0.63622,9.57957 -1.90503,12.69023 1.22877,1.92249 2.20099,4.74462 2.91443,8.46703 0.725,3.70293 1.08809,7.78667 1.08811,12.24523 -2e-5,5.84786 -0.64525,10.46278 -1.93199,13.83506 -0.77171,2.08048 -1.63651,3.35145 -2.59366,3.81545 -1.04378,0.38383 -2.34639,0.1651 -3.90478,-0.65241 0,0 -5.1699,-2.71206 -5.1699,-2.71206 m 3.40336,-40.26368 c 0,0 1.07352,0.49507 1.07352,0.49507 1.27901,0.58986 2.21681,0.111 2.81048,-1.44041 0.60462,-1.58159 0.90735,-4.16824 0.90736,-7.7578 -1e-5,-3.49331 -0.3077,-6.27138 -0.92222,-8.33141 -0.61341,-2.08813 -1.50181,-3.38041 -2.66303,-3.87846 0,0 -1.20611,-0.51723 -1.20611,-0.51723 0,0 0,21.43024 0,21.43024 m 0,31.59642 c 0,0 2.12098,1.0792 2.1209
8,1.0792 1.56006,0.79381 2.71009,0.38538 3.44582,-1.23071 0.77722,-1.76027 1.16653,-4.29727 1.16654,-7.60796 -1e-5,-3.2142 -0.37434,-6.09507 -1.12175,-8.63833 -0.7259,-2.49601 -2.01962,-4.18458 -3.87458,-5.06609 0,0 -1.73701,-0.82543 -1.73701,-0.82543 0,0 0,22.28932 0,22.28932"
+- inkscape:connector-curvature="0" />
++ id="path10970" />
+ <path
+- id="path10972"
++ inkscape:connector-curvature="0"
+ d="m 272.95516,318.05887 c 0,0 0,27.38443 0,27.38443 -10e-6,7.90343 0.98616,12.3602 2.9671,13.3747 1.99248,1.02041 2.99308,-2.45348 2.9931,-10.42612 0,0 0,-27.62428 0,-27.62428 0,0 3.5597,1.61778 3.5597,1.61778 0,0 0,28.01587 0,28.01587 -2e-5,3.87456 -0.15371,7.14154 -0.46088,9.79921 -0.29635,2.363 -0.80903,4.36412 -1.53709,6.00225 -1.19955,2.64012 -2.71925,3.47147 -4.55483,2.50486 -1.81544,-0.95602 -3.30722,-3.35739 -4.47951,-7.19797 -0.71785,-2.35856 -1.22454,-4.84843 -1.52104,-7.47161 -0.28603,-2.35571 -0.42896,-5.70986 -0.42895,-10.06389 0,0 0,-27.48878 0,-27.48878 0,0 3.4624,1.57355 3.4624,1.57355"
+- inkscape:connector-curvature="0" />
++ id="path10972" />
+ <path
+- id="path10974"
++ inkscape:connector-curvature="0"
+ d="m 296.26263,337.06199 c 0,0 -3.06393,3.56502 -3.06393,3.56502 -0.48078,-3.25229 -1.07536,-5.04233 -1.78317,-5.37295 -0.33707,-0.15741 -0.62496,0.06 -0.86377,0.6519 -0.23866,0.55807 -0.35792,1.3727 -0.35791,2.44422 -10e-6,1.87525 0.70533,4.07067 2.12031,6.59386 1.95771,3.53383 3.28179,6.57062 3.96502,9.09921 0.68454,2.53353 1.02731,5.66263 1.02732,9.38364 -1e-5,4.7697 -0.5748,8.46498 -1.72155,11.07953 -1.11013,2.45482 -2.44639,3.26727 -4.00621,2.44587 -2.65634,-1.39883 -4.52528,-6.3666 -5.61934,-14.89109 0,0 3.09805,-2.88498 3.09805,-2.88498 0.43247,2.55923 0.76259,4.2157 0.99008,4.96747 0.44455,1.49948 0.97659,2.40845 1.59653,2.72594 1.24315,0.63666 1.86639,-0.79371 1.8664,-4.29282 -1e-5,-2.0187 -0.48121,-4.143 -1.44161,-6.36829 -0.37037,-0.75441 -0.74034,-1.49123 -1.10991,-2.21054 -0.3692,-0.71854 -0.74342,-1.45572 -1.12265,-2.21154 -1.05967,-2.12522 -1.80382,-4.09186 -2.23449,-5.90308 -0.54834,-2.29933 -0.82218,-5.04714 -0.82218,-8.2461 0,-4.23189 0.46728,-7.5
1461 1.40371,-9.85292 0.96057,-2.33469 2.12977,-3.19317 3.50971,-2.56876 2.04183,0.92403 3.56729,4.86919 4.56959,11.84641"
+- inkscape:connector-curvature="0" />
++ id="path10974" />
+ <path
+- id="path10976"
++ inkscape:connector-curvature="0"
+ d="m 305.87224,373.74548 c 0,0 -7.36895,-44.07576 -7.36895,-44.07576 0,0 4.37264,1.98723 4.37264,1.98723 0,0 5.05922,31.14284 5.05922,31.14284 0,0 4.78506,-26.66891 4.78506,-26.66891 0,0 4.42827,2.01251 4.42827,2.01251 0,0 -13.36109,70.94431 -13.36109,70.94431 0,0 -4.31706,-2.42938 -4.31706,-2.42938 0,0 6.40191,-32.91284 6.40191,-32.91284"
+- inkscape:connector-curvature="0" />
++ id="path10976" />
+ <path
+- id="path10978"
++ inkscape:connector-curvature="0"
+ d="m 320.58526,390.7595 c 0,0 0,-80.9319 0,-80.9319 0,0 4.13158,1.70815 4.13158,1.70815 1.85533,0.76714 3.34037,1.80475 4.45055,3.11286 1.12564,1.31726 2.07847,3.1499 2.85713,5.49865 0.79249,2.43006 1.42159,5.31052 1.88649,8.64052 0.47771,3.37527 0.7168,6.68514 0.71682,9.9264 -2e-5,5.91271 -0.77803,10.55984 -2.32917,13.93073 1.50217,2.19251 2.69114,5.36674 3.56386,9.52332 0.88707,4.13662 1.33141,8.67481 1.33143,13.60714 -2e-5,6.46928 -0.78959,11.53605 -2.36369,15.18868 -0.94375,2.25405 -2.00105,3.60684 -3.17093,4.06153 -1.27537,0.36067 -2.8664,0.0396 -4.769,-0.95852 0,0 -6.30507,-3.30756 -6.30507,-3.30756 m 4.14949,-44.2658 c 0,0 1.3098,0.60403 1.3098,0.60403 1.5611,0.71995 2.70612,0.24091 3.43115,-1.44195 0.73854,-1.71596 1.10838,-4.55903 1.10839,-8.52665 -1e-5,-3.86122 -0.37591,-6.94748 -1.12654,-9.25529 -0.74912,-2.33835 -1.83384,-3.81055 -3.25119,-4.41845 0,0 -1.47161,-0.63109 -1.47161,-0.63109 0,0 0,23.6694 0,23.6694 m 0,34.8978 c 0,0 2.58822,1.31694 2.58822,1
.31694 1.90485,0.96926 3.30964,0.5858 4.20862,-1.15726 0.94991,-1.90043 1.4258,-4.68271 1.42581,-8.3432 -1e-5,-3.55382 -0.4576,-6.7602 -1.37107,-9.61384 -0.88698,-2.79955 -2.46728,-4.73743 -4.73203,-5.81367 0,0 -2.11955,-1.00721 -2.11955,-1.00721 0,0 0,24.61824 0,24.61824"
+- inkscape:connector-curvature="0" />
++ id="path10978" />
+ <path
+- id="path10980"
++ inkscape:connector-curvature="0"
+ d="m 341.02978,374.86334 c 0,-7.58031 0.94324,-13.58541 2.83689,-18.03209 1.90324,-4.46909 4.23548,-6.08903 7.00465,-4.83597 2.80241,1.26822 5.19693,5.08204 7.17562,11.4591 1.9627,6.39795 2.94785,13.61113 2.94787,21.61494 -2e-5,8.07762 -0.99173,14.34113 -2.96745,18.7734 -1.97859,4.36606 -4.39233,5.78851 -7.23288,4.29267 -2.79403,-1.47134 -5.11934,-5.407 -6.98438,-11.79134 -1.85584,-6.2808 -2.78032,-13.43331 -2.78032,-21.48071 m 4.32968,2.33405 c -1e-5,5.27553 0.49258,9.69619 1.47972,13.26896 1.01512,3.63141 2.358,5.87802 4.03214,6.7354 1.6944,0.86776 3.0541,0.011 4.07547,-2.57854 1.02408,-2.59641 1.53716,-6.50064 1.53718,-11.70745 -2e-5,-5.20678 -0.5131,-9.61348 -1.53718,-13.21288 -1.03428,-3.63232 -2.39394,-5.83885 -4.07547,-6.62442 -1.64864,-0.77008 -2.97891,0.16745 -3.99412,2.80484 -1.01252,2.63034 -1.51775,6.39995 -1.51774,11.31409"
+- inkscape:connector-curvature="0" />
++ id="path10980" />
+ <path
+- id="path10982"
++ inkscape:connector-curvature="0"
+ d="m 371.81801,388.06805 c 0,0 -7.03657,-28.27692 -7.03657,-28.27692 0,0 5.37653,2.44347 5.37653,2.44347 0,0 4.40854,17.99359 4.40854,17.99359 0,0 4.54148,-13.92608 4.54148,-13.92608 0,0 5.7463,2.61152 5.7463,2.61152 0,0 -7.47868,21.85902 -7.47868,21.85902 0,0 8.6759,34.32953 8.6759,34.32953 0,0 -5.59774,-2.9365 -5.59774,-2.9365 0,0 -5.88726,-23.58269 -5.88726,-23.58269 0,0 -5.94081,17.37785 -5.94081,17.37785 0,0 -5.49434,-2.88225 -5.49434,-2.88225 0,0 8.68665,-25.01054 8.68665,-25.01054"
+- inkscape:connector-curvature="0" />
++ id="path10982" />
+ </g>
+ </g>
+ </svg>
+diff -uNr docker-0.6.2/docs/theme/docker/layout.html docker-devmapper/docs/theme/docker/layout.html
+--- docker-0.6.2/docs/theme/docker/layout.html 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/docs/theme/docker/layout.html 2013-09-23 10:37:38.736306794 -0500
+@@ -6,7 +6,6 @@
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+- <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="google-site-verification" content="UxV66EKuPe87dgnH1sbrldrx6VsoWMrx5NjwkgUFxXI" />
+
+ <title>{{ meta['title'] if meta and meta['title'] else title }} - Docker Documentation</title>
+@@ -114,6 +113,10 @@
+ <form>
+ <input type="text" id="st-search-input" class="st-search-input span3" style="width:160px;" />
+ </form>
++ <a href="http://swiftype.com?ref=pb">
++ <img id="swiftype-img" src="http://swiftype.com/assets/media/swiftype-logo-lightbg-small.png"
++ alt="Search by Swiftype" />
++ </a>
+ </div>
+
+ <!-- body block -->
+diff -uNr docker-0.6.2/FIXME docker-devmapper/FIXME
+--- docker-0.6.2/FIXME 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/FIXME 2013-09-23 10:37:38.639307063 -0500
+@@ -34,4 +34,3 @@
+ * entry point config
+ * bring back git revision info, looks like it was lost
+ * Clean up the ProgressReader api, it's a PITA to use
+-* Use netlink instead of iproute2/iptables (#925)
+diff -uNr docker-0.6.2/graph_test.go docker-devmapper/graph_test.go
+--- docker-0.6.2/graph_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/graph_test.go 2013-09-23 10:37:38.652307027 -0500
+@@ -121,6 +121,9 @@
+ }
+
+ func TestMount(t *testing.T) {
++ runtime := mkRuntime(t)
++ defer nuke(runtime)
++
+ graph := tempGraph(t)
+ defer os.RemoveAll(graph.Root)
+ archive, err := fakeTar()
+@@ -144,12 +147,12 @@
+ if err := os.MkdirAll(rw, 0700); err != nil {
+ t.Fatal(err)
+ }
+- if err := image.Mount(rootfs, rw); err != nil {
++ if err := image.Mount(runtime, rootfs, rw, "testing"); err != nil {
+ t.Fatal(err)
+ }
+ // FIXME: test for mount contents
+ defer func() {
+- if err := Unmount(rootfs); err != nil {
++ if err := image.Unmount(runtime, rootfs, "testing"); err != nil {
+ t.Error(err)
+ }
+ }()
+diff -uNr docker-0.6.2/hack/dind docker-devmapper/hack/dind
+--- docker-0.6.2/hack/dind 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/hack/dind 1969-12-31 18:00:00.000000000 -0600
+@@ -1,59 +0,0 @@
+-#!/bin/bash
+-
+-# DinD: a wrapper script which allows docker to be run inside a docker container.
+-# Original version by Jerome Petazzoni <jerome at dotcloud.com>
+-# See the blog post: http://blog.docker.io/2013/09/docker-can-now-run-within-docker/
+-#
+-# This script should be executed inside a docker container in privilieged mode
+-# ('docker run -privileged', introduced in docker 0.6).
+-
+-# Usage: dind CMD [ARG...]
+-
+-# First, make sure that cgroups are mounted correctly.
+-CGROUP=/sys/fs/cgroup
+-
+-[ -d $CGROUP ] ||
+- mkdir $CGROUP
+-
+-mountpoint -q $CGROUP ||
+- mount -n -t tmpfs -o uid=0,gid=0,mode=0755 cgroup $CGROUP || {
+- echo "Could not make a tmpfs mount. Did you use -privileged?"
+- exit 1
+- }
+-
+-# Mount the cgroup hierarchies exactly as they are in the parent system.
+-for SUBSYS in $(cut -d: -f2 /proc/1/cgroup)
+-do
+- [ -d $CGROUP/$SUBSYS ] || mkdir $CGROUP/$SUBSYS
+- mountpoint -q $CGROUP/$SUBSYS ||
+- mount -n -t cgroup -o $SUBSYS cgroup $CGROUP/$SUBSYS
+-done
+-
+-# Note: as I write those lines, the LXC userland tools cannot setup
+-# a "sub-container" properly if the "devices" cgroup is not in its
+-# own hierarchy. Let's detect this and issue a warning.
+-grep -q :devices: /proc/1/cgroup ||
+- echo "WARNING: the 'devices' cgroup should be in its own hierarchy."
+-grep -qw devices /proc/1/cgroup ||
+- echo "WARNING: it looks like the 'devices' cgroup is not mounted."
+-
+-# Now, close extraneous file descriptors.
+-pushd /proc/self/fd
+-for FD in *
+-do
+- case "$FD" in
+- # Keep stdin/stdout/stderr
+- [012])
+- ;;
+- # Nuke everything else
+- *)
+- eval exec "$FD>&-"
+- ;;
+- esac
+-done
+-popd
+-
+-# Mount /tmp
+-mount -t tmpfs none /tmp
+-
+-exec $*
+diff -uNr docker-0.6.2/hack/MAINTAINERS docker-devmapper/hack/MAINTAINERS
+--- docker-0.6.2/hack/MAINTAINERS 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/hack/MAINTAINERS 1969-12-31 18:00:00.000000000 -0600
+@@ -1 +0,0 @@
+-Solomon Hykes <solomon at dotcloud.com> (@shykes)
+diff -uNr docker-0.6.2/hack/make/binary docker-devmapper/hack/make/binary
+--- docker-0.6.2/hack/make/binary 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/hack/make/binary 1969-12-31 18:00:00.000000000 -0600
+@@ -1,4 +0,0 @@
+-
+-DEST=$1
+-
+-go build -o $DEST/docker-$VERSION -ldflags "$LDFLAGS" ./docker
+diff -uNr docker-0.6.2/hack/make/README.md docker-devmapper/hack/make/README.md
+--- docker-0.6.2/hack/make/README.md 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/hack/make/README.md 1969-12-31 18:00:00.000000000 -0600
+@@ -1,17 +0,0 @@
+-This directory holds scripts called by `make.sh` in the parent directory.
+-
+-Each script is named after the bundle it creates.
+-They should not be called directly - instead, pass it as argument to make.sh, for example:
+-
+-```
+-./hack/make.sh test
+-./hack/make.sh binary ubuntu
+-
+-# Or to run all bundles:
+-./hack/make.sh
+-```
+-
+-To add a bundle:
+-
+-* Create a shell-compatible file here
+-* Add it to $DEFAULT_BUNDLES in make.sh
+diff -uNr docker-0.6.2/hack/make/test docker-devmapper/hack/make/test
+--- docker-0.6.2/hack/make/test 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/hack/make/test 1969-12-31 18:00:00.000000000 -0600
+@@ -1,27 +0,0 @@
+-DEST=$1
+-
+-set -e
+-
+-# Run Docker's test suite, including sub-packages, and store their output as a bundle
+-bundle_test() {
+- {
+- date
+- for test_dir in $(find_test_dirs); do (
+- set -x
+- cd $test_dir
+- go test -v -ldflags "$LDFLAGS"
+- ) done
+- } 2>&1 | tee $DEST/test.log
+-}
+-
+-
+-# This helper function walks the current directory looking for directories
+-# holding Go test files, and prints their paths on standard output, one per
+-# line.
+-find_test_dirs() {
+- find . -name '*_test.go' | grep -v '^./vendor' |
+- { while read f; do dirname $f; done; } |
+- sort -u
+-}
+-
+-bundle_test
+diff -uNr docker-0.6.2/hack/make/ubuntu docker-devmapper/hack/make/ubuntu
+--- docker-0.6.2/hack/make/ubuntu 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/hack/make/ubuntu 1969-12-31 18:00:00.000000000 -0600
+@@ -1,94 +0,0 @@
+-#!/bin/sh
+-
+-DEST=$1
+-
+-PKGVERSION="$VERSION"
+-if test -n "$(git status --porcelain)"
+-then
+- PKGVERSION="$PKGVERSION-$(date +%Y%m%d%H%M%S)-$GITCOMMIT"
+-fi
+-
+-PACKAGE_ARCHITECTURE="$(dpkg-architecture -qDEB_HOST_ARCH)"
+-PACKAGE_URL="http://www.docker.io/"
+-PACKAGE_MAINTAINER="docker at dotcloud.com"
+-PACKAGE_DESCRIPTION="lxc-docker is a Linux container runtime
+-Docker complements LXC with a high-level API which operates at the process
+-level. It runs unix processes with strong guarantees of isolation and
+-repeatability across servers.
+-Docker is a great building block for automating distributed systems:
+-large-scale web deployments, database clusters, continuous deployment systems,
+-private PaaS, service-oriented architectures, etc."
+-
+-UPSTART_SCRIPT='description "Docker daemon"
+-
+-start on filesystem and started lxc-net
+-stop on runlevel [!2345]
+-
+-respawn
+-
+-script
+- /usr/bin/docker -d
+-end script
+-'
+-
+-# Build docker as an ubuntu package using FPM and REPREPRO (sue me).
+-# bundle_binary must be called first.
+-bundle_ubuntu() {
+- DIR=$DEST/build
+-
+- # Generate an upstart config file (ubuntu-specific)
+- mkdir -p $DIR/etc/init
+- echo "$UPSTART_SCRIPT" > $DIR/etc/init/docker.conf
+-
+- # Copy the binary
+- # This will fail if the binary bundle hasn't been built
+- mkdir -p $DIR/usr/bin
+- # Copy the binary
+- # This will fail if the binary bundle hasn't been built
+- cp $DEST/../binary/docker-$VERSION $DIR/usr/bin/docker
+-
+- # Generate postinstall/prerm scripts
+- cat >/tmp/postinstall <<EOF
+-#!/bin/sh
+-/sbin/stop docker || true
+-/sbin/start docker
+-EOF
+- cat >/tmp/prerm <<EOF
+-#!/bin/sh
+-/sbin/stop docker || true
+-EOF
+- chmod +x /tmp/postinstall /tmp/prerm
+-
+- (
+- cd $DEST
+- fpm -s dir -C $DIR \
+- --name lxc-docker-$VERSION --version $PKGVERSION \
+- --after-install /tmp/postinstall \
+- --before-remove /tmp/prerm \
+- --architecture "$PACKAGE_ARCHITECTURE" \
+- --prefix / \
+- --depends lxc --depends aufs-tools \
+- --description "$PACKAGE_DESCRIPTION" \
+- --maintainer "$PACKAGE_MAINTAINER" \
+- --conflicts lxc-docker-virtual-package \
+- --provides lxc-docker \
+- --provides lxc-docker-virtual-package \
+- --replaces lxc-docker \
+- --replaces lxc-docker-virtual-package \
+- --url "$PACKAGE_URL" \
+- --vendor "$PACKAGE_VENDOR" \
+- -t deb .
+- mkdir empty
+- fpm -s dir -C empty \
+- --name lxc-docker --version $PKGVERSION \
+- --architecture "$PACKAGE_ARCHITECTURE" \
+- --depends lxc-docker-$VERSION \
+- --description "$PACKAGE_DESCRIPTION" \
+- --maintainer "$PACKAGE_MAINTAINER" \
+- --url "$PACKAGE_URL" \
+- --vendor "$PACKAGE_VENDOR" \
+- -t deb .
+- )
+-}
+-
+-bundle_ubuntu
+diff -uNr docker-0.6.2/hack/make.sh docker-devmapper/hack/make.sh
+--- docker-0.6.2/hack/make.sh 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/hack/make.sh 1969-12-31 18:00:00.000000000 -0600
+@@ -1,91 +0,0 @@
+-#!/bin/bash
+-
+-# This script builds various binary artifacts from a checkout of the docker
+-# source code.
+-#
+-# Requirements:
+-# - The current directory should be a checkout of the docker source code
+-# (http://github.com/dotcloud/docker). Whatever version is checked out
+-# will be built.
+-# - The VERSION file, at the root of the repository, should exist, and
+-# will be used as Docker binary version and package version.
+-# - The hash of the git commit will also be included in the Docker binary,
+-# with the suffix -dirty if the repository isn't clean.
+-# - The script is intented to be run inside the docker container specified
+-# in the Dockerfile at the root of the source. In other words:
+-# DO NOT CALL THIS SCRIPT DIRECTLY.
+-# - The right way to call this script is to invoke "docker build ." from
+-# your checkout of the Docker repository, and then
+-# "docker run hack/make.sh" in the resulting container image.
+-#
+-
+-set -e
+-
+-# We're a nice, sexy, little shell script, and people might try to run us;
+-# but really, they shouldn't. We want to be in a container!
+-RESOLVCONF=$(readlink --canonicalize /etc/resolv.conf)
+-grep -q "$RESOLVCONF" /proc/mounts || {
+- echo "# WARNING! I don't seem to be running in a docker container.
+- echo "# The result of this command might be an incorrect build, and will not be officially supported."
+- echo "# Try this: 'docker build -t docker . && docker run docker ./hack/make.sh'
+-}
+-
+-# List of bundles to create when no argument is passed
+-DEFAULT_BUNDLES=(
+- test
+- binary
+- ubuntu
+-)
+-
+-VERSION=$(cat ./VERSION)
+-GITCOMMIT=$(git rev-parse --short HEAD)
+-if test -n "$(git status --porcelain)"
+-then
+- GITCOMMIT="$GITCOMMIT-dirty"
+-fi
+-
+-# Use these flags when compiling the tests and final binary
+-LDFLAGS="-X main.GITCOMMIT $GITCOMMIT -X main.VERSION $VERSION -d -w"
+-
+-
+-bundle() {
+- bundlescript=$1
+- bundle=$(basename $bundlescript)
+- echo "---> Making bundle: $bundle"
+- mkdir -p bundles/$VERSION/$bundle
+- source $bundlescript $(pwd)/bundles/$VERSION/$bundle
+-}
+-
+-main() {
+-
+- # We want this to fail if the bundles already exist.
+- # This is to avoid mixing bundles from different versions of the code.
+- mkdir -p bundles
+- if [ -e "bundles/$VERSION" ]; then
+- echo "bundles/$VERSION already exists. Removing."
+- rm -fr bundles/$VERSION && mkdir bundles/$VERSION || exit 1
+- fi
+- SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+- if [ $# -lt 1 ]; then
+- bundles=($DEFAULT_BUNDLES)
+- else
+- bundles=($@)
+- fi
+- for bundle in ${bundles[@]}; do
+- bundle $SCRIPTDIR/make/$bundle
+- done
+- cat <<EOF
+-###############################################################################
+-Now run the resulting image, making sure that you set AWS_S3_BUCKET,
+-AWS_ACCESS_KEY, and AWS_SECRET_KEY environment variables:
+-
+-docker run -e AWS_S3_BUCKET=get-staging.docker.io \\
+- AWS_ACCESS_KEY=AKI1234... \\
+- AWS_SECRET_KEY=sEs3mE... \\
+- GPG_PASSPHRASE=sesame... \\
+- image_id_or_name
+-###############################################################################
+-EOF
+-}
+-
+-main "$@"
+diff -uNr docker-0.6.2/hack/PACKAGERS.md docker-devmapper/hack/PACKAGERS.md
+--- docker-0.6.2/hack/PACKAGERS.md 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/hack/PACKAGERS.md 1969-12-31 18:00:00.000000000 -0600
+@@ -1,137 +0,0 @@
+-Dear packager.
+-
+-If you are looking to make docker available on your favorite software distribution,
+-this document is for you. It summarizes the requirements for building and running
+-docker.
+-
+-## Getting started
+-
+-We really want to help you package Docker successfully. Before anything, a good first step
+-is to introduce yourself on the [docker-dev mailing list](https://groups.google.com/forum/?fromgroups#!forum/docker-dev)
+-, explain what you''re trying to achieve, and tell us how we can help. Don''t worry, we don''t bite!
+-There might even be someone already working on packaging for the same distro!
+-
+-You can also join the IRC channel - #docker and #docker-dev on Freenode are both active and friendly.
+-
+-## Package name
+-
+-If possible, your package should be called "docker". If that name is already taken, a second
+-choice is "lxc-docker".
+-
+-## Official build vs distro build
+-
+-The Docker project maintains its own build and release toolchain. It is pretty neat and entirely
+-based on Docker (surprise!). This toolchain is the canonical way to build Docker, and the only
+-method supported by the development team. We encourage you to give it a try, and if the circumstances
+-allow you to use it, we recommend that you do.
+-
+-You might not be able to use the official build toolchain - usually because your distribution has a
+-toolchain and packaging policy of its own. We get it! Your house, your rules. The rest of this document
+-should give you the information you need to package Docker your way, without denaturing it in
+-the process.
+-
+-## System build dependencies
+-
+-To build docker, you will need the following system dependencies
+-
+-* An amd64 machine
+-* A recent version of git and mercurial
+-* Go version 1.1.2
+-* A clean checkout of the source must be added to a valid Go [workspace](http://golang.org/doc/code.html#Workspaces)
+-under the path *src/github.com/dotcloud/docker*. See
+-
+-
+-## Go dependencies
+-
+-All Go dependencies are vendored under ./vendor. They are used by the official build,
+-so the source of truth for the current version is whatever is in ./vendor.
+-
+-To use the vendored dependencies, simply make sure the path to ./vendor is included in $GOPATH.
+-
+-If you would rather package these dependencies yourself, take a look at ./hack/vendor.sh for an
+-easy-to-parse list of the exact version for each.
+-
+-NOTE: if you''re not able to package the exact version (to the exact commit) of a given dependency,
+-please get in touch so we can remediate! Who knows what discrepancies can be caused by even the
+-slightest deviation. We promise to do our best to make everybody happy.
+-
+-
+-## Disabling CGO
+-
+-Make sure to disable CGO on your system, and then recompile the standard library on the build
+-machine:
+-
+-```bash
+-export CGO_ENABLED=0
+-cd /tmp && echo 'package main' > t.go && go test -a -i -v
+-```
+-
+-## Building Docker
+-
+-To build the docker binary, run the following command with the source checkout as the
+-working directory:
+-
+-```
+-./hack/make.sh binary
+-```
+-
+-This will create a static binary under *./bundles/$VERSION/binary/docker-$VERSION*, where
+-*$VERSION* is the contents of the file *./VERSION*.
+-
+-You are encouraged to use ./hack/make.sh without modification. If you must absolutely write
+-your own script (are you really, really sure you need to? make.sh is really not that complicated),
+-then please take care the respect the following:
+-
+-* In *./hack/make.sh*: $LDFLAGS, $VERSION and $GITCOMMIT
+-* In *./hack/make/binary*: the exact build command to run
+-
+-You may be tempted to tweak these settings. In particular, being a rigorous maintainer, you may want
+-to disable static linking. Please don''t! Docker *needs* to be statically linked to function properly.
+-You would do the users of your distro a disservice and "void the docker warranty" by changing the flags.
+-
+-A good comparison is Busybox: all distros package it as a statically linked binary, because it just
+-makes sense. Docker is the same way.
+-
+-## Testing Docker
+-
+-Before releasing your binary, make sure to run the tests! Run the following command with the source
+-checkout as the working directory:
+-
+-```bash
+-./hack/make.sh test
+-```
+-
+-The test suite includes both live integration tests and unit tests, so you will need all runtime
+-dependencies to be installed (see below).
+-
+-The test suite will also download a small test container, so you will need internet connectivity.
+-
+-
+-## Runtime dependencies
+-
+-To run properly, docker needs the following software to be installed at runtime:
+-
+-* GNU Tar version 1.26 or later
+-* iproute2 version 3.5 or later (build after 2012-05-21), and specifically the "ip" utility.
+-* iptables version 1.4 or later
+-* The lxc utility scripts (http://lxc.sourceforge.net) version 0.8 or later.
+-* Git version 1.7 or later
+-
+-## Kernel dependencies
+-
+-Docker in daemon mode has specific kernel requirements. For details, see
+-http://docs.docker.io/en/latest/installation/kernel/
+-
+-Note that Docker also has a client mode, which can run on virtually any linux kernel (it even builds
+-on OSX!).
+-
+-## Init script
+-
+-Docker expects to run as a daemon at machine startup. Your package will need to include a script
+-for your distro''s process supervisor of choice.
+-
+-Docker should be run as root, with the following arguments:
+-
+-```
+-docker -d
+-```
+diff -uNr docker-0.6.2/hack/release/make.sh docker-devmapper/hack/release/make.sh
+--- docker-0.6.2/hack/release/make.sh 1969-12-31 18:00:00.000000000 -0600
++++ docker-devmapper/hack/release/make.sh 2013-09-23 10:37:39.518304619 -0500
+@@ -0,0 +1,179 @@
++#!/bin/sh
++
++# This script builds various binary artifacts from a checkout of the docker
++# source code.
++#
++# Requirements:
++# - The current directory should be a checkout of the docker source code
++# (http://github.com/dotcloud/docker). Whatever version is checked out
++# will be built.
++# - The VERSION file, at the root of the repository, should exist, and
++# will be used as Docker binary version and package version.
++# - The hash of the git commit will also be included in the Docker binary,
++# with the suffix -dirty if the repository isn't clean.
++# - The script is intented to be run as part of a docker build, as defined
++# in the Dockerfile at the root of the source. In other words:
++# DO NOT CALL THIS SCRIPT DIRECTLY.
++# - The right way to call this script is to invoke "docker build ." from
++# your checkout of the Docker repository.
++#
++
++set -e
++
++# We're a nice, sexy, little shell script, and people might try to run us;
++# but really, they shouldn't. We want to be in a container!
++RESOLVCONF=$(readlink --canonicalize /etc/resolv.conf)
++grep -q "$RESOLVCONF" /proc/mounts || {
++ echo "# I will only run within a container."
++ echo "# Try this instead:"
++ echo "docker build ."
++ exit 1
++}
++
++VERSION=$(cat ./VERSION)
++PKGVERSION="$VERSION"
++GITCOMMIT=$(git rev-parse --short HEAD)
++if test -n "$(git status --porcelain)"
++then
++ GITCOMMIT="$GITCOMMIT-dirty"
++ PKGVERSION="$PKGVERSION-$(date +%Y%m%d%H%M%S)-$GITCOMMIT"
++fi
++
++PACKAGE_ARCHITECTURE="$(dpkg-architecture -qDEB_HOST_ARCH)"
++PACKAGE_URL="http://www.docker.io/"
++PACKAGE_MAINTAINER="docker at dotcloud.com"
++PACKAGE_DESCRIPTION="lxc-docker is a Linux container runtime
++Docker complements LXC with a high-level API which operates at the process
++level. It runs unix processes with strong guarantees of isolation and
++repeatability across servers.
++Docker is a great building block for automating distributed systems:
++large-scale web deployments, database clusters, continuous deployment systems,
++private PaaS, service-oriented architectures, etc."
++
++UPSTART_SCRIPT='description "Docker daemon"
++
++start on filesystem and started lxc-net
++stop on runlevel [!2345]
++
++respawn
++
++script
++ /usr/bin/docker -d
++end script
++'
++
++# Each "bundle" is a different type of build artefact: static binary, Ubuntu
++# package, etc.
++
++# Build Docker as a static binary file
++bundle_binary() {
++ mkdir -p bundles/$VERSION/binary
++ go build -o bundles/$VERSION/binary/docker-$VERSION \
++ -ldflags "-X main.GITCOMMIT $GITCOMMIT -X main.VERSION $VERSION -d -w" \
++ ./docker
++}
++
++
++# Build Docker's test suite as a collection of binary files (one per
++# sub-package to test)
++bundle_test() {
++ mkdir -p bundles/$VERSION/test
++ for test_dir in $(find_test_dirs); do
++ test_binary=$(
++ cd $test_dir
++ go test -c -v -ldflags "-X main.GITCOMMIT $GITCOMMIT -X main.VERSION $VERSION -d -w" >&2
++ find . -maxdepth 1 -type f -name '*.test' -executable
++ )
++ cp $test_dir/$test_binary bundles/$VERSION/test/
++ done
++}
++
++# Build docker as an ubuntu package using FPM and REPREPRO (sue me).
++# bundle_binary must be called first.
++bundle_ubuntu() {
++ mkdir -p bundles/$VERSION/ubuntu
++
++ DIR=$(pwd)/bundles/$VERSION/ubuntu/build
++
++ # Generate an upstart config file (ubuntu-specific)
++ mkdir -p $DIR/etc/init
++ echo "$UPSTART_SCRIPT" > $DIR/etc/init/docker.conf
++
++ # Copy the binary
++ mkdir -p $DIR/usr/bin
++ cp bundles/$VERSION/binary/docker-$VERSION $DIR/usr/bin/docker
++
++ # Generate postinstall/prerm scripts
++ cat >/tmp/postinstall <<EOF
++#!/bin/sh
++/sbin/stop docker || true
++/sbin/start docker
++EOF
++ cat >/tmp/prerm <<EOF
++#!/bin/sh
++/sbin/stop docker || true
++EOF
++ chmod +x /tmp/postinstall /tmp/prerm
++
++ (
++ cd bundles/$VERSION/ubuntu
++ fpm -s dir -C $DIR \
++ --name lxc-docker-$VERSION --version $PKGVERSION \
++ --after-install /tmp/postinstall \
++ --before-remove /tmp/prerm \
++ --architecture "$PACKAGE_ARCHITECTURE" \
++ --prefix / \
++ --depends lxc --depends aufs-tools \
++ --description "$PACKAGE_DESCRIPTION" \
++ --maintainer "$PACKAGE_MAINTAINER" \
++ --conflicts lxc-docker-virtual-package \
++ --provides lxc-docker \
++ --provides lxc-docker-virtual-package \
++ --replaces lxc-docker \
++ --replaces lxc-docker-virtual-package \
++ --url "$PACKAGE_URL" \
++ --vendor "$PACKAGE_VENDOR" \
++ -t deb .
++ mkdir empty
++ fpm -s dir -C empty \
++ --name lxc-docker --version $PKGVERSION \
++ --architecture "$PACKAGE_ARCHITECTURE" \
++ --depends lxc-docker-$VERSION \
++ --description "$PACKAGE_DESCRIPTION" \
++ --maintainer "$PACKAGE_MAINTAINER" \
++ --url "$PACKAGE_URL" \
++ --vendor "$PACKAGE_VENDOR" \
++ -t deb .
++ )
++}
++
++
++# This helper function walks the current directory looking for directories
++# holding Go test files, and prints their paths on standard output, one per
++# line.
++find_test_dirs() {
++ find . -name '*_test.go' |
++ { while read f; do dirname $f; done; } |
++ sort -u
++}
++
++
++main() {
++ bundle_binary
++ bundle_ubuntu
++ #bundle_test
++ cat <<EOF
++###############################################################################
++Now run the resulting image, making sure that you set AWS_S3_BUCKET,
++AWS_ACCESS_KEY, and AWS_SECRET_KEY environment variables:
++
++docker run -e AWS_S3_BUCKET=get-staging.docker.io \\
++ AWS_ACCESS_KEY=AKI1234... \\
++ AWS_SECRET_KEY=sEs3mE... \\
++ GPG_PASSPHRASE=sesame... \\
++ image_id_or_name
++###############################################################################
++EOF
++}
++
++main
+diff -uNr docker-0.6.2/hack/release/README.md docker-devmapper/hack/release/README.md
+--- docker-0.6.2/hack/release/README.md 1969-12-31 18:00:00.000000000 -0600
++++ docker-devmapper/hack/release/README.md 2013-09-23 10:37:39.525304600 -0500
+@@ -0,0 +1,106 @@
++## A maintainer's guide to releasing Docker
++
++So you're in charge of a Docker release? Cool. Here's what to do.
++
++If your experience deviates from this document, please document the changes
++to keep it up-to-date.
++
++
++### 1. Pull from master and create a release branch
++
++```bash
++git checkout master
++git pull
++git checkout -b bump_$VERSION
++```
++
++### 2. Update CHANGELOG.md
++
++You can run this command for reference:
++
++```bash
++LAST_VERSION=$(git tag | grep -E "v[0-9\.]+$" | sort -nr | head -n 1)
++git log $LAST_VERSION..HEAD
++```
++
++Each change should be formatted as ```BULLET CATEGORY: DESCRIPTION```
++
++* BULLET is either ```-```, ```+``` or ```*```, to indicate a bugfix,
++ new feature or upgrade, respectively.
++
++* CATEGORY should describe which part of the project is affected.
++ Valid categories are:
++ * Builder
++ * Documentation
++ * Hack
++ * Packaging
++ * Remote API
++ * Runtime
++
++* DESCRIPTION: a concise description of the change that is relevant to the
++ end-user, using the present tense. Changes should be described in terms
++ of how they affect the user, for example "new feature X which allows Y",
++ "fixed bug which caused X", "increased performance of Y".
++
++EXAMPLES:
++
++```
+++ Builder: 'docker build -t FOO' applies the tag FOO to the newly built
++ container.
++* Runtime: improve detection of kernel version
++- Remote API: fix a bug in the optional unix socket transport
++```
++
++### 3. Change the contents of the VERSION file
++
++### 4. Run all tests
++
++```bash
++go test
++```
++
++### 5. Commit and create a pull request
++
++```bash
++git add CHANGELOG.md
++git commit -m "Bump version to $VERSION"
++git push origin bump_$VERSION
++```
++
++### 6. Get 2 other maintainers to validate the pull request
++
++### 7. Merge the pull request and apply tags
++
++```bash
++git checkout master
++git merge bump_$VERSION
++git tag -a v$VERSION # Don't forget the v!
++git tag -f -a latest
++git push
++git push --tags
++```
++
++### 8. Publish binaries
++
++To run this you will need access to the release credentials.
++Get them from [the infrastructure maintainers](
++https://github.com/dotcloud/docker/blob/master/hack/infrastructure/MAINTAINERS).
++
++```bash
++docker build -t releasedocker .
++docker run \
++ -e AWS_S3_BUCKET=get-nightly.docker.io \
++ -e AWS_ACCESS_KEY=$(cat ~/.aws/access_key) \
++ -e AWS_SECRET_KEY=$(cat ~/.aws/secret_key) \
++ -e GPG_PASSPHRASE=supersecretsesame \
++ releasedocker
++```
++
++It will build and upload the binaries on the specified bucket (you should
++use get-nightly.docker.io for general testing, and once everything is fine,
++switch to get.docker.io).
++
++
++### 9. Rejoice!
++
++Congratulations! You're done.
+diff -uNr docker-0.6.2/hack/release/release.sh docker-devmapper/hack/release/release.sh
+--- docker-0.6.2/hack/release/release.sh 1969-12-31 18:00:00.000000000 -0600
++++ docker-devmapper/hack/release/release.sh 2013-09-23 10:37:39.527304594 -0500
+@@ -0,0 +1,175 @@
++#!/bin/sh
++
++# This script looks for bundles built by make.sh, and releases them on a
++# public S3 bucket.
++#
++# Bundles should be available for the VERSION string passed as argument.
++#
++# The correct way to call this script is inside a container built by the
++# official Dockerfile at the root of the Docker source code. The Dockerfile,
++# make.sh and release.sh should all be from the same source code revision.
++
++set -e
++
++# Print a usage message and exit.
++usage() {
++ cat <<EOF
++To run, I need:
++- to be in a container generated by the Dockerfile at the top of the Docker
++ repository;
++- to be provided with the name of an S3 bucket, in environment variable
++ AWS_S3_BUCKET;
++- to be provided with AWS credentials for this S3 bucket, in environment
++ variables AWS_ACCESS_KEY and AWS_SECRET_KEY;
++- the passphrase to unlock the GPG key which will sign the deb packages
++ (passed as environment variable GPG_PASSPHRASE);
++- a generous amount of good will and nice manners.
++The canonical way to run me is to run the image produced by the Dockerfile: e.g.:"
++
++docker run -e AWS_S3_BUCKET=get-staging.docker.io \\
++ AWS_ACCESS_KEY=AKI1234... \\
++ AWS_SECRET_KEY=sEs4mE... \\
++ GPG_PASSPHRASE=m0resEs4mE... \\
++ f0058411
++EOF
++ exit 1
++}
++
++[ "$AWS_S3_BUCKET" ] || usage
++[ "$AWS_ACCESS_KEY" ] || usage
++[ "$AWS_SECRET_KEY" ] || usage
++[ "$GPG_PASSPHRASE" ] || usage
++[ -d /go/src/github.com/dotcloud/docker/ ] || usage
++cd /go/src/github.com/dotcloud/docker/
++
++VERSION=$(cat VERSION)
++BUCKET=$AWS_S3_BUCKET
++
++setup_s3() {
++ # Try creating the bucket. Ignore errors (it might already exist).
++ s3cmd mb s3://$BUCKET 2>/dev/null || true
++ # Check access to the bucket.
++ # s3cmd has no useful exit status, so we cannot check that.
++ # Instead, we check if it outputs anything on standard output.
++ # (When there are problems, it uses standard error instead.)
++ s3cmd info s3://$BUCKET | grep -q .
++ # Make the bucket accessible through website endpoints.
++ s3cmd ws-create --ws-index index --ws-error error s3://$BUCKET
++}
++
++# write_to_s3 uploads the contents of standard input to the specified S3 url.
++write_to_s3() {
++ DEST=$1
++ F=`mktemp`
++ cat > $F
++ s3cmd --acl-public put $F $DEST
++ rm -f $F
++}
++
++s3_url() {
++ echo "http://$BUCKET.s3.amazonaws.com"
++}
++
++# Upload the 'ubuntu' bundle to S3:
++# 1. A full APT repository is published at $BUCKET/ubuntu/
++# 2. Instructions for using the APT repository are uploaded at $BUCKET/ubuntu/info
++release_ubuntu() {
++ # Make sure that we have our keys
++ mkdir -p /.gnupg/
++ s3cmd sync s3://$BUCKET/ubuntu/.gnupg/ /.gnupg/ || true
++ gpg --list-keys releasedocker >/dev/null || {
++ gpg --gen-key --batch <<EOF
++Key-Type: RSA
++Key-Length: 2048
++Passphrase: $GPG_PASSPHRASE
++Name-Real: Docker Release Tool
++Name-Email: docker at dotcloud.com
++Name-Comment: releasedocker
++Expire-Date: 0
++%commit
++EOF
++ }
++
++ # Sign our packages
++ dpkg-sig -g "--passphrase $GPG_PASSPHRASE" -k releasedocker \
++ --sign builder bundles/$VERSION/ubuntu/*.deb
++
++ # Setup the APT repo
++ APTDIR=bundles/$VERSION/ubuntu/apt
++ mkdir -p $APTDIR/conf $APTDIR/db
++ s3cmd sync s3://$BUCKET/ubuntu/db/ $APTDIR/db/ || true
++ cat > $APTDIR/conf/distributions <<EOF
++Codename: docker
++Components: main
++Architectures: amd64 i386
++EOF
++
++ # Add the DEB package to the APT repo
++ DEBFILE=bundles/$VERSION/ubuntu/lxc-docker*.deb
++ reprepro -b $APTDIR includedeb docker $DEBFILE
++
++ # Sign
++ for F in $(find $APTDIR -name Release)
++ do
++ gpg -u releasedocker --passphrase $GPG_PASSPHRASE \
++ --armor --sign --detach-sign \
++ --output $F.gpg $F
++ done
++
++ # Upload keys
++ s3cmd sync /.gnupg/ s3://$BUCKET/ubuntu/.gnupg/
++ gpg --armor --export releasedocker > bundles/$VERSION/ubuntu/gpg
++ s3cmd --acl-public put bundles/$VERSION/ubuntu/gpg s3://$BUCKET/gpg
++
++ # Upload repo
++ s3cmd --acl-public sync $APTDIR/ s3://$BUCKET/ubuntu/
++ cat <<EOF | write_to_s3 s3://$BUCKET/ubuntu/info
++# Add the repository to your APT sources
++echo deb $(s3_url $BUCKET)/ubuntu docker main > /etc/apt/sources.list.d/docker.list
++# Then import the repository key
++curl $(s3_url $BUCKET)/gpg | apt-key add -
++# Install docker
++apt-get update ; apt-get install -y lxc-docker
++EOF
++ echo "APT repository uploaded. Instructions available at $(s3_url $BUCKET)/ubuntu/info"
++}
++
++# Upload a static binary to S3
++release_binary() {
++ [ -e bundles/$VERSION ]
++ S3DIR=s3://$BUCKET/builds/Linux/x86_64
++ s3cmd --acl-public put bundles/$VERSION/binary/docker-$VERSION $S3DIR/docker-$VERSION
++ cat <<EOF | write_to_s3 s3://$BUCKET/builds/info
++# To install, run the following command as root:
++curl -O http://$BUCKET.s3.amazonaws.com/builds/Linux/x86_64/docker-$VERSION && chmod +x docker-$VERSION && sudo mv docker-$VERSION /usr/local/bin/docker
++# Then start docker in daemon mode:
++sudo /usr/local/bin/docker -d
++EOF
++ if [ -z "$NOLATEST" ]; then
++ echo "Copying docker-$VERSION to docker-latest"
++ s3cmd --acl-public cp $S3DIR/docker-$VERSION $S3DIR/docker-latest
++ echo "Advertising $VERSION on $BUCKET as most recent version"
++ echo $VERSION | write_to_s3 s3://$BUCKET/latest
++ fi
++}
++
++# Upload the index script
++release_index() {
++ (
++ if [ "$BUCKET" != "get.docker.io" ]
++ then
++ sed s,https://get.docker.io/,http://$BUCKET.s3.amazonaws.com/, contrib/install.sh
++ else
++ cat contrib/install.sh
++ fi
++ ) | write_to_s3 s3://$BUCKET/index
++}
++
++main() {
++ setup_s3
++ release_binary
++ release_ubuntu
++ release_index
++}
++
++main
+diff -uNr docker-0.6.2/hack/RELEASE-CHECKLIST.md docker-devmapper/hack/RELEASE-CHECKLIST.md
+--- docker-0.6.2/hack/RELEASE-CHECKLIST.md 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/hack/RELEASE-CHECKLIST.md 1969-12-31 18:00:00.000000000 -0600
+@@ -1,106 +0,0 @@
+-## A maintainer's guide to releasing Docker
+-
+-So you're in charge of a Docker release? Cool. Here's what to do.
+-
+-If your experience deviates from this document, please document the changes
+-to keep it up-to-date.
+-
+-
+-### 1. Pull from master and create a release branch
+-
+-```bash
+-git checkout master
+-git pull
+-git checkout -b bump_$VERSION
+-```
+-
+-### 2. Update CHANGELOG.md
+-
+-You can run this command for reference:
+-
+-```bash
+-LAST_VERSION=$(git tag | grep -E "v[0-9\.]+$" | sort -nr | head -n 1)
+-git log $LAST_VERSION..HEAD
+-```
+-
+-Each change should be formatted as ```BULLET CATEGORY: DESCRIPTION```
+-
+-* BULLET is either ```-```, ```+``` or ```*```, to indicate a bugfix,
+- new feature or upgrade, respectively.
+-
+-* CATEGORY should describe which part of the project is affected.
+- Valid categories are:
+- * Builder
+- * Documentation
+- * Hack
+- * Packaging
+- * Remote API
+- * Runtime
+-
+-* DESCRIPTION: a concise description of the change that is relevant to the
+- end-user, using the present tense. Changes should be described in terms
+- of how they affect the user, for example "new feature X which allows Y",
+- "fixed bug which caused X", "increased performance of Y".
+-
+-EXAMPLES:
+-
+-```
+-+ Builder: 'docker build -t FOO' applies the tag FOO to the newly built
+- container.
+-* Runtime: improve detection of kernel version
+-- Remote API: fix a bug in the optional unix socket transport
+-```
+-
+-### 3. Change the contents of the VERSION file
+-
+-### 4. Run all tests
+-
+-```bash
+-go test
+-```
+-
+-### 5. Commit and create a pull request
+-
+-```bash
+-git add CHANGELOG.md
+-git commit -m "Bump version to $VERSION"
+-git push origin bump_$VERSION
+-```
+-
+-### 6. Get 2 other maintainers to validate the pull request
+-
+-### 7. Merge the pull request and apply tags
+-
+-```bash
+-git checkout master
+-git merge bump_$VERSION
+-git tag -a v$VERSION # Don't forget the v!
+-git tag -f -a latest
+-git push
+-git push --tags
+-```
+-
+-### 8. Publish binaries
+-
+-To run this you will need access to the release credentials.
+-Get them from [the infrastructure maintainers](
+-https://github.com/dotcloud/docker/blob/master/hack/infrastructure/MAINTAINERS).
+-
+-```bash
+-docker build -t releasedocker .
+-docker run \
+- -e AWS_S3_BUCKET=get-nightly.docker.io \
+- -e AWS_ACCESS_KEY=$(cat ~/.aws/access_key) \
+- -e AWS_SECRET_KEY=$(cat ~/.aws/secret_key) \
+- -e GPG_PASSPHRASE=supersecretsesame \
+- releasedocker
+-```
+-
+-It will build and upload the binaries on the specified bucket (you should
+-use get-nightly.docker.io for general testing, and once everything is fine,
+-switch to get.docker.io).
+-
+-
+-### 9. Rejoice!
+-
+-Congratulations! You're done.
+diff -uNr docker-0.6.2/hack/release.sh docker-devmapper/hack/release.sh
+--- docker-0.6.2/hack/release.sh 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/hack/release.sh 1969-12-31 18:00:00.000000000 -0600
+@@ -1,182 +0,0 @@
+-#!/bin/sh
+-
+-# This script looks for bundles built by make.sh, and releases them on a
+-# public S3 bucket.
+-#
+-# Bundles should be available for the VERSION string passed as argument.
+-#
+-# The correct way to call this script is inside a container built by the
+-# official Dockerfile at the root of the Docker source code. The Dockerfile,
+-# make.sh and release.sh should all be from the same source code revision.
+-
+-set -e
+-
+-# Print a usage message and exit.
+-usage() {
+- cat <<EOF
+-To run, I need:
+-- to be in a container generated by the Dockerfile at the top of the Docker
+- repository;
+-- to be provided with the name of an S3 bucket, in environment variable
+- AWS_S3_BUCKET;
+-- to be provided with AWS credentials for this S3 bucket, in environment
+- variables AWS_ACCESS_KEY and AWS_SECRET_KEY;
+-- the passphrase to unlock the GPG key which will sign the deb packages
+- (passed as environment variable GPG_PASSPHRASE);
+-- a generous amount of good will and nice manners.
+-The canonical way to run me is to run the image produced by the Dockerfile: e.g.:"
+-
+-docker run -e AWS_S3_BUCKET=get-staging.docker.io \\
+- AWS_ACCESS_KEY=AKI1234... \\
+- AWS_SECRET_KEY=sEs4mE... \\
+- GPG_PASSPHRASE=m0resEs4mE... \\
+- f0058411
+-EOF
+- exit 1
+-}
+-
+-[ "$AWS_S3_BUCKET" ] || usage
+-[ "$AWS_ACCESS_KEY" ] || usage
+-[ "$AWS_SECRET_KEY" ] || usage
+-[ "$GPG_PASSPHRASE" ] || usage
+-[ -d /go/src/github.com/dotcloud/docker/ ] || usage
+-cd /go/src/github.com/dotcloud/docker/
+-
+-VERSION=$(cat VERSION)
+-BUCKET=$AWS_S3_BUCKET
+-
+-setup_s3() {
+- # Try creating the bucket. Ignore errors (it might already exist).
+- s3cmd mb s3://$BUCKET 2>/dev/null || true
+- # Check access to the bucket.
+- # s3cmd has no useful exit status, so we cannot check that.
+- # Instead, we check if it outputs anything on standard output.
+- # (When there are problems, it uses standard error instead.)
+- s3cmd info s3://$BUCKET | grep -q .
+- # Make the bucket accessible through website endpoints.
+- s3cmd ws-create --ws-index index --ws-error error s3://$BUCKET
+-}
+-
+-# write_to_s3 uploads the contents of standard input to the specified S3 url.
+-write_to_s3() {
+- DEST=$1
+- F=`mktemp`
+- cat > $F
+- s3cmd --acl-public put $F $DEST
+- rm -f $F
+-}
+-
+-s3_url() {
+- echo "http://$BUCKET.s3.amazonaws.com"
+-}
+-
+-# Upload the 'ubuntu' bundle to S3:
+-# 1. A full APT repository is published at $BUCKET/ubuntu/
+-# 2. Instructions for using the APT repository are uploaded at $BUCKET/ubuntu/info
+-release_ubuntu() {
+- # Make sure that we have our keys
+- mkdir -p /.gnupg/
+- s3cmd sync s3://$BUCKET/ubuntu/.gnupg/ /.gnupg/ || true
+- gpg --list-keys releasedocker >/dev/null || {
+- gpg --gen-key --batch <<EOF
+-Key-Type: RSA
+-Key-Length: 2048
+-Passphrase: $GPG_PASSPHRASE
+-Name-Real: Docker Release Tool
+-Name-Email: docker at dotcloud.com
+-Name-Comment: releasedocker
+-Expire-Date: 0
+-%commit
+-EOF
+- }
+-
+- # Sign our packages
+- dpkg-sig -g "--passphrase $GPG_PASSPHRASE" -k releasedocker \
+- --sign builder bundles/$VERSION/ubuntu/*.deb
+-
+- # Setup the APT repo
+- APTDIR=bundles/$VERSION/ubuntu/apt
+- mkdir -p $APTDIR/conf $APTDIR/db
+- s3cmd sync s3://$BUCKET/ubuntu/db/ $APTDIR/db/ || true
+- cat > $APTDIR/conf/distributions <<EOF
+-Codename: docker
+-Components: main
+-Architectures: amd64 i386
+-EOF
+-
+- # Add the DEB package to the APT repo
+- DEBFILE=bundles/$VERSION/ubuntu/lxc-docker*.deb
+- reprepro -b $APTDIR includedeb docker $DEBFILE
+-
+- # Sign
+- for F in $(find $APTDIR -name Release)
+- do
+- gpg -u releasedocker --passphrase $GPG_PASSPHRASE \
+- --armor --sign --detach-sign \
+- --output $F.gpg $F
+- done
+-
+- # Upload keys
+- s3cmd sync /.gnupg/ s3://$BUCKET/ubuntu/.gnupg/
+- gpg --armor --export releasedocker > bundles/$VERSION/ubuntu/gpg
+- s3cmd --acl-public put bundles/$VERSION/ubuntu/gpg s3://$BUCKET/gpg
+-
+- # Upload repo
+- s3cmd --acl-public sync $APTDIR/ s3://$BUCKET/ubuntu/
+- cat <<EOF | write_to_s3 s3://$BUCKET/ubuntu/info
+-# Add the repository to your APT sources
+-echo deb $(s3_url $BUCKET)/ubuntu docker main > /etc/apt/sources.list.d/docker.list
+-# Then import the repository key
+-curl $(s3_url $BUCKET)/gpg | apt-key add -
+-# Install docker
+-apt-get update ; apt-get install -y lxc-docker
+-EOF
+- echo "APT repository uploaded. Instructions available at $(s3_url $BUCKET)/ubuntu/info"
+-}
+-
+-# Upload a static binary to S3
+-release_binary() {
+- [ -e bundles/$VERSION ]
+- S3DIR=s3://$BUCKET/builds/Linux/x86_64
+- s3cmd --acl-public put bundles/$VERSION/binary/docker-$VERSION $S3DIR/docker-$VERSION
+- cat <<EOF | write_to_s3 s3://$BUCKET/builds/info
+-# To install, run the following command as root:
+-curl -O http://$BUCKET.s3.amazonaws.com/builds/Linux/x86_64/docker-$VERSION && chmod +x docker-$VERSION && sudo mv docker-$VERSION /usr/local/bin/docker
+-# Then start docker in daemon mode:
+-sudo /usr/local/bin/docker -d
+-EOF
+- if [ -z "$NOLATEST" ]; then
+- echo "Copying docker-$VERSION to docker-latest"
+- s3cmd --acl-public cp $S3DIR/docker-$VERSION $S3DIR/docker-latest
+- echo "Advertising $VERSION on $BUCKET as most recent version"
+- echo $VERSION | write_to_s3 s3://$BUCKET/latest
+- fi
+-}
+-
+-# Upload the index script
+-release_index() {
+- (
+- if [ "$BUCKET" != "get.docker.io" ]
+- then
+- sed s,https://get.docker.io/,http://$BUCKET.s3.amazonaws.com/, contrib/install.sh
+- else
+- cat contrib/install.sh
+- fi
+- ) | write_to_s3 s3://$BUCKET/index
+-}
+-
+-release_test() {
+- if [ -e "bundles/$VERSION/test" ]; then
+- s3cmd --acl-public sync bundles/$VERSION/test/ s3://$BUCKET/test/
+- fi
+-}
+-
+-main() {
+- setup_s3
+- release_binary
+- release_ubuntu
+- release_index
+- release_test
+-}
+-
+-main
+diff -uNr docker-0.6.2/hack/vendor.sh docker-devmapper/hack/vendor.sh
+--- docker-0.6.2/hack/vendor.sh 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/hack/vendor.sh 1969-12-31 18:00:00.000000000 -0600
+@@ -1,41 +0,0 @@
+-#!/bin/bash
+-
+-# Downloads dependencies into vendor/ directory
+-if [[ ! -d vendor ]]; then
+- mkdir vendor
+-fi
+-vendor_dir=${PWD}/vendor
+-
+-git_clone () {
+- PKG=$1
+- REV=$2
+- (
+- set -e
+- cd $vendor_dir
+- if [[ -d src/$PKG ]]; then
+- echo "src/$PKG already exists. Removing."
+- rm -fr src/$PKG
+- fi
+- cd $vendor_dir && git clone http://$PKG src/$PKG
+- cd src/$PKG && git checkout -f $REV && rm -fr .git
+- )
+-}
+-
+-git_clone github.com/kr/pty 27435c699
+-
+-git_clone github.com/gorilla/context/ 708054d61e5
+-
+-git_clone github.com/gorilla/mux/ 9b36453141c
+-
+-git_clone github.com/dotcloud/tar/ d06045a6d9
+-
+-# Docker requires code.google.com/p/go.net/websocket
+-PKG=code.google.com/p/go.net REV=84a4013f96e0
+-(
+- set -e
+- cd $vendor_dir
+- if [[ ! -d src/$PKG ]]; then
+- hg clone https://$PKG src/$PKG
+- fi
+- cd src/$PKG && hg checkout -r $REV
+-)
+diff -uNr docker-0.6.2/image.go docker-devmapper/image.go
+--- docker-0.6.2/image.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/image.go 2013-09-23 10:37:38.706306877 -0500
+@@ -15,6 +15,7 @@
+ "path/filepath"
+ "strconv"
+ "strings"
++ "syscall"
+ "time"
+ )
+
+@@ -136,6 +137,10 @@
+ return path.Join(root, "json")
+ }
+
++func mountPath(root string) string {
++ return path.Join(root, "mount")
++}
++
+ func MountAUFS(ro []string, rw string, target string) error {
+ // FIXME: Now mount the layers
+ rwBranch := fmt.Sprintf("%v=rw", rw)
+@@ -170,37 +175,513 @@
+ return Tar(layerPath, compression)
+ }
+
+-func (image *Image) Mount(root, rw string) error {
+- if mounted, err := Mounted(root); err != nil {
++type TimeUpdate struct {
++ path string
++ time []syscall.Timeval
++}
++
++func (image *Image) applyLayer(layer, target string) error {
++ var updateTimes []TimeUpdate
++ oldmask := syscall.Umask(0)
++ defer syscall.Umask(oldmask)
++ err := filepath.Walk(layer, func(srcPath string, f os.FileInfo, err error) error {
++ if err != nil {
++ return err
++ }
++
++ // Skip root
++ if srcPath == layer {
++ return nil
++ }
++
++ var srcStat syscall.Stat_t
++ err = syscall.Lstat(srcPath, &srcStat)
++ if err != nil {
++ return err
++ }
++
++ relPath, err := filepath.Rel(layer, srcPath)
++ if err != nil {
++ return err
++ }
++
++ targetPath := filepath.Join(target, relPath)
++
++ // Skip AUFS metadata
++ if matched, err := filepath.Match(".wh..wh.*", relPath); err != nil || matched {
++ if err != nil || !f.IsDir() {
++ return err
++ }
++ return filepath.SkipDir
++ }
++
++ // Find out what kind of modification happened
++ file := filepath.Base(srcPath)
++
++ // If there is a whiteout, then the file was removed
++ if strings.HasPrefix(file, ".wh.") {
++ originalFile := file[len(".wh."):]
++ deletePath := filepath.Join(filepath.Dir(targetPath), originalFile)
++
++ err = os.RemoveAll(deletePath)
++ if err != nil {
++ return err
++ }
++ } else {
++ var targetStat = &syscall.Stat_t{}
++ err := syscall.Lstat(targetPath, targetStat)
++ if err != nil {
++ if !os.IsNotExist(err) {
++ return err
++ }
++ targetStat = nil
++ }
++
++ if targetStat != nil && !(targetStat.Mode&syscall.S_IFDIR == syscall.S_IFDIR && srcStat.Mode&syscall.S_IFDIR == syscall.S_IFDIR) {
++ // Unless both src and dest are directories we remove the target and recreate it
++ // This is a bit wasteful in the case of only a mode change, but that is unlikely
++ // to matter much
++ err = os.RemoveAll(targetPath)
++ if err != nil {
++ return err
++ }
++ targetStat = nil
++ }
++
++ if f.IsDir() {
++ // Source is a directory
++ if targetStat == nil {
++ err = syscall.Mkdir(targetPath, srcStat.Mode&07777)
++ if err != nil {
++ return err
++ }
++ }
++ } else if srcStat.Mode&syscall.S_IFLNK == syscall.S_IFLNK {
++ // Source is symlink
++ link, err := os.Readlink(srcPath)
++ if err != nil {
++ return err
++ }
++
++ err = os.Symlink(link, targetPath)
++ if err != nil {
++ return err
++ }
++ } else if srcStat.Mode&syscall.S_IFBLK == syscall.S_IFBLK ||
++ srcStat.Mode&syscall.S_IFCHR == syscall.S_IFCHR ||
++ srcStat.Mode&syscall.S_IFIFO == syscall.S_IFIFO ||
++ srcStat.Mode&syscall.S_IFSOCK == syscall.S_IFSOCK {
++ // Source is special file
++ err = syscall.Mknod(targetPath, srcStat.Mode, int(srcStat.Rdev))
++ if err != nil {
++ return err
++ }
++ } else if srcStat.Mode&syscall.S_IFREG == syscall.S_IFREG {
++ // Source is regular file
++ fd, err := syscall.Open(targetPath, syscall.O_CREAT|syscall.O_WRONLY, srcStat.Mode&07777)
++ if err != nil {
++ return err
++ }
++ dstFile := os.NewFile(uintptr(fd), targetPath)
++ srcFile, err := os.Open(srcPath)
++ if err != nil {
++ _ = dstFile.Close()
++ return err
++ }
++ err = CopyFile(dstFile, srcFile)
++ _ = dstFile.Close()
++ _ = srcFile.Close()
++ if err != nil {
++ return err
++ }
++ } else {
++ return fmt.Errorf("Unknown type for file %s", srcPath)
++ }
++
++ err = syscall.Lchown(targetPath, int(srcStat.Uid), int(srcStat.Gid))
++ if err != nil {
++ return err
++ }
++
++ if srcStat.Mode&syscall.S_IFLNK != syscall.S_IFLNK {
++ err = syscall.Chmod(targetPath, srcStat.Mode&07777)
++ if err != nil {
++ return err
++ }
++ }
++
++ ts := []syscall.Timeval{
++ syscall.NsecToTimeval(srcStat.Atim.Nano()),
++ syscall.NsecToTimeval(srcStat.Mtim.Nano()),
++ }
++
++ u := TimeUpdate {
++ path: targetPath,
++ time: ts,
++ }
++
++ // Delay time updates until all other changes done, or it is
++ // overwritten for directories (by child changes)
++ updateTimes = append(updateTimes, u)
++ }
++ return nil
++ })
++ if err != nil {
+ return err
+- } else if mounted {
+- return fmt.Errorf("%s is already mounted", root)
+ }
+- layers, err := image.layers()
++
++ // We do this in reverse order so that children are updated before parents
++ for i := len(updateTimes) - 1; i >= 0; i-- {
++ update := updateTimes[i]
++
++ O_PATH := 010000000 // Not in syscall yet
++ fd, err := syscall.Open(update.path, syscall.O_RDWR | O_PATH | syscall.O_NOFOLLOW, 0600)
++ if err == syscall.EISDIR || err == syscall.ELOOP {
++ // O_PATH not supported, use Utimes except on symlinks where Utimes doesn't work
++ if err != syscall.ELOOP {
++ err = syscall.Utimes(update.path, update.time)
++ if err != nil {
++ return err
++ }
++ }
++ } else {
++ if err != nil {
++ return err
++ }
++ syscall.Futimes(fd, update.time)
++ _ = syscall.Close(fd)
++ }
++ }
++
++ return nil
++}
++
++func (image *Image) ensureImageDevice(devices DeviceSet) error {
++ if devices.HasInitializedDevice(image.ID) {
++ return nil
++ }
++
++ if image.Parent != "" && !devices.HasInitializedDevice(image.Parent) {
++ parentImg, err := image.GetParent()
++ if err != nil {
++ return fmt.Errorf("Error while getting parent image: %v", err)
++ }
++ err = parentImg.ensureImageDevice(devices)
++ if err != nil {
++ return err
++ }
++ }
++
++ root, err := image.root()
+ if err != nil {
+ return err
+ }
+- // Create the target directories if they don't exist
+- if err := os.Mkdir(root, 0755); err != nil && !os.IsExist(err) {
++
++ mountDir := mountPath(root)
++ if err := os.Mkdir(mountDir, 0600); err != nil && !os.IsExist(err) {
+ return err
+ }
+- if err := os.Mkdir(rw, 0755); err != nil && !os.IsExist(err) {
++
++ mounted, err := Mounted(mountDir)
++ if err == nil && mounted {
++ utils.Debugf("Image %s is unexpectedly mounted, unmounting...", image.ID)
++ err = syscall.Unmount(mountDir, 0)
++ if err != nil {
++ return err
++ }
++ }
++
++ if devices.HasDevice(image.ID) {
++ utils.Debugf("Found non-initialized demove-mapper device for image %s, removing", image.ID)
++ err = devices.RemoveDevice(image.ID)
++ if err != nil {
++ return err
++ }
++ }
++
++ utils.Debugf("Creating device-mapper device for image id %s", image.ID)
++ err = devices.AddDevice(image.ID, image.Parent)
++ if err != nil {
+ return err
+ }
+- if err := MountAUFS(layers, rw, root); err != nil {
++
++ err = devices.MountDevice(image.ID, mountDir)
++ if err != nil {
++ _ = devices.RemoveDevice(image.ID)
++ return err
++ }
++
++
++ err = ioutil.WriteFile(path.Join(mountDir, ".docker-id"), []byte(image.ID), 0600)
++ if err != nil {
++ _ = devices.UnmountDevice(image.ID, mountDir)
++ _ = devices.RemoveDevice(image.ID)
+ return err
+ }
++
++ err = image.applyLayer(layerPath(root), mountDir)
++ if err != nil {
++ _ = devices.UnmountDevice(image.ID, mountDir)
++ _ = devices.RemoveDevice(image.ID)
++ return err
++ }
++
++ // The docker init layer is conceptually above all other layers, so we apply
++ // it for every image. This is safe because the layer directory is the
++ // definition of the image, and the device-mapper device is just a cache
++ // of it instantiated. Diffs/commit compare the container device with the
++ // image device, which will then *not* pick up the init layer changes as
++ // part of the container changes
++ dockerinitLayer, err := image.getDockerInitLayer()
++ if err != nil {
++ _ = devices.UnmountDevice(image.ID, mountDir)
++ _ = devices.RemoveDevice(image.ID)
++ return err
++ }
++ err = image.applyLayer(dockerinitLayer, mountDir)
++ if err != nil {
++ _ = devices.UnmountDevice(image.ID, mountDir)
++ _ = devices.RemoveDevice(image.ID)
++ return err
++ }
++
++ err = devices.UnmountDevice(image.ID, mountDir)
++ if err != nil {
++ _ = devices.RemoveDevice(image.ID)
++ return err
++ }
++
++ devices.SetInitialized(image.ID)
++
++ // No need to the device-mapper device to hang around once we've written
++ // the image, it can be enabled on-demand when needed
++ devices.DeactivateDevice(image.ID)
++
+ return nil
+ }
+
+-func (image *Image) Changes(rw string) ([]Change, error) {
+- layers, err := image.layers()
+- if err != nil {
+- return nil, err
++func (image *Image) Mounted(runtime *Runtime, root, rw string) (bool, error) {
++ method := runtime.GetMountMethod()
++ if method == MountMethodFilesystem {
++ if _, err := os.Stat(rw); err != nil {
++ if os.IsNotExist(err) {
++ err = nil
++ }
++ return false, err
++ }
++ mountedPath := path.Join(rw, ".fs-mounted")
++ if _, err := os.Stat(mountedPath); err != nil {
++ if os.IsNotExist(err) {
++ err = nil
++ }
++ return false, err
++ }
++ return true, nil
++ } else {
++ return Mounted(root)
++ }
++}
++
++func (image *Image) Mount(runtime *Runtime, root, rw string, id string) error {
++ if mounted, _ := image.Mounted(runtime, root, rw); mounted {
++ return fmt.Errorf("%s is already mounted", root)
++ }
++
++ // Create the target directories if they don't exist
++ if err := os.Mkdir(root, 0755); err != nil && !os.IsExist(err) {
++ return err
++ }
++
++ switch runtime.GetMountMethod() {
++ case MountMethodNone:
++ return fmt.Errorf("No supported Mount implementation")
++
++ case MountMethodAUFS:
++ if err := os.Mkdir(rw, 0755); err != nil && !os.IsExist(err) {
++ return err
++ }
++ layers, err := image.layers()
++ if err != nil {
++ return err
++ }
++ if err := MountAUFS(layers, rw, root); err != nil {
++ return err
++ }
++
++ case MountMethodDeviceMapper:
++ devices, err := runtime.GetDeviceSet()
++ if err != nil {
++ return err
++ }
++ err = image.ensureImageDevice(devices)
++ if err != nil {
++ return err
++ }
++
++ createdDevice := false
++ if !devices.HasDevice(id) {
++ utils.Debugf("Creating device %s for container based on image %s", id, image.ID)
++ err = devices.AddDevice(id, image.ID)
++ if err != nil {
++ return err
++ }
++ createdDevice = true
++ }
++
++ utils.Debugf("Mounting container %s at %s for container", id, root)
++ err = devices.MountDevice(id, root)
++ if err != nil {
++ return err
++ }
++
++ if createdDevice {
++ err = ioutil.WriteFile(path.Join(root, ".docker-id"), []byte(id), 0600)
++ if err != nil {
++ _ = devices.RemoveDevice(image.ID)
++ return err
++ }
++ }
++
++ case MountMethodFilesystem:
++ if err := os.Mkdir(rw, 0755); err != nil && !os.IsExist(err) {
++ return err
++ }
++
++ layers, err := image.layers()
++ if err != nil {
++ return err
++ }
++
++ for i := len(layers)-1; i >= 0; i-- {
++ layer := layers[i]
++ if err = image.applyLayer(layer, root); err != nil {
++ return err
++ }
++ }
++
++ mountedPath := path.Join(rw, ".fs-mounted")
++ fo, err := os.Create(mountedPath)
++ if err != nil {
++ return err
++ }
++ fo.Close()
++ }
++ return nil
++}
++
++func (image *Image) Unmount(runtime *Runtime, root string, id string) error {
++ switch runtime.GetMountMethod() {
++ case MountMethodNone:
++ return fmt.Errorf("No supported Unmount implementation")
++
++ case MountMethodAUFS:
++ return Unmount(root)
++
++ case MountMethodDeviceMapper:
++ // Try to deactivate the device as generally there is no use for it anymore
++ devices, err := runtime.GetDeviceSet()
++ if err != nil {
++ return err;
++ }
++
++ err = devices.UnmountDevice(id, root)
++ if err != nil {
++ return err
++ }
++
++ return devices.DeactivateDevice(id)
++
++ case MountMethodFilesystem:
++ return nil
+ }
+- return Changes(layers, rw)
++
++ return nil
+ }
+
++func (image *Image) Changes(runtime *Runtime, root, rw, id string) ([]Change, error) {
++ switch runtime.GetMountMethod() {
++ case MountMethodAUFS:
++ layers, err := image.layers()
++ if err != nil {
++ return nil, err
++ }
++ return ChangesAUFS(layers, rw)
++
++ case MountMethodDeviceMapper:
++ devices, err := runtime.GetDeviceSet()
++ if err != nil {
++ return nil, err
++ }
++
++ if err := os.Mkdir(rw, 0755); err != nil && !os.IsExist(err) {
++ return nil, err
++ }
++
++ wasActivated := devices.HasActivatedDevice(image.ID)
++
++ // We re-use rw for the temporary mount of the base image as its
++ // not used by device-mapper otherwise
++ err = devices.MountDevice(image.ID, rw)
++ if err != nil {
++ return nil, err
++ }
++
++ changes, err := ChangesDirs(root, rw)
++ _ = devices.UnmountDevice(image.ID, rw)
++ if !wasActivated {
++ _ = devices.DeactivateDevice(image.ID)
++ }
++ if err != nil {
++ return nil, err
++ }
++ return changes, nil
++
++ case MountMethodFilesystem:
++ layers, err := image.layers()
++ if err != nil {
++ return nil, err
++ }
++ changes, err := ChangesLayers(root, layers)
++ if err != nil {
++ return nil, err
++ }
++ return changes, nil
++ }
++
++ return nil, fmt.Errorf("No supported Changes implementation")
++}
++
++func (image *Image) ExportChanges(runtime *Runtime, root, rw, id string) (Archive, error) {
++ switch runtime.GetMountMethod() {
++ case MountMethodAUFS:
++ return Tar(rw, Uncompressed)
++
++ case MountMethodFilesystem, MountMethodDeviceMapper:
++ changes, err := image.Changes(runtime, root, rw, id)
++ if err != nil {
++ return nil, err
++ }
++
++ files := make([]string, 0)
++ deletions := make([]string, 0)
++ for _, change := range changes {
++ if change.Kind == ChangeModify || change.Kind == ChangeAdd {
++ files = append(files, change.Path)
++ }
++ if change.Kind == ChangeDelete {
++ base := filepath.Base(change.Path)
++ dir := filepath.Dir(change.Path)
++ deletions = append(deletions, filepath.Join(dir, ".wh."+base))
++ }
++ }
++
++ return TarFilter(root, Uncompressed, files, false, deletions)
++ }
++
++ return nil, fmt.Errorf("No supported Changes implementation")
++}
++
++
+ func (image *Image) ShortID() string {
+ return utils.TruncateID(image.ID)
+ }
+diff -uNr docker-0.6.2/lxc_template.go docker-devmapper/lxc_template.go
+--- docker-0.6.2/lxc_template.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/lxc_template.go 2013-09-23 10:37:39.544304547 -0500
+@@ -30,11 +30,9 @@
+ {{$ROOTFS := .RootfsPath}}
+ lxc.rootfs = {{$ROOTFS}}
+
+-{{if and .HostnamePath .HostsPath}}
+ # enable domain name support
+ lxc.mount.entry = {{.HostnamePath}} {{$ROOTFS}}/etc/hostname none bind,ro 0 0
+ lxc.mount.entry = {{.HostsPath}} {{$ROOTFS}}/etc/hosts none bind,ro 0 0
+-{{end}}
+
+ # use a dedicated pts for the container (and limit the number of pseudo terminal
+ # available)
+diff -uNr docker-0.6.2/registry/registry.go docker-devmapper/registry/registry.go
+--- docker-0.6.2/registry/registry.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/registry/registry.go 2013-09-23 10:37:39.222305442 -0500
+@@ -161,10 +161,10 @@
+ req.Header.Set("Authorization", "Token "+strings.Join(token, ", "))
+ res, err := doWithCookies(r.client, req)
+ if err != nil || res.StatusCode != 200 {
++ if res.StatusCode == 401 {
++ return nil, ErrLoginRequired
++ }
+ if res != nil {
+- if res.StatusCode == 401 {
+- return nil, ErrLoginRequired
+- }
+ return nil, utils.NewHTTPRequestError(fmt.Sprintf("Internal server error: %d trying to fetch remote history for %s", res.StatusCode, imgID), res)
+ }
+ return nil, err
+diff -uNr docker-0.6.2/runtime.go docker-devmapper/runtime.go
+--- docker-0.6.2/runtime.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/runtime.go 2013-09-23 10:37:39.262305331 -0500
+@@ -10,12 +10,21 @@
+ "os"
+ "os/exec"
+ "path"
++ "path/filepath"
+ "sort"
+ "strings"
+ "time"
+ )
+
+ var defaultDns = []string{"8.8.8.8", "8.8.4.4"}
++type MountMethod int
++
++const (
++ MountMethodNone MountMethod = iota
++ MountMethodAUFS
++ MountMethodDeviceMapper
++ MountMethodFilesystem
++)
+
+ type Capabilities struct {
+ MemoryLimit bool
+@@ -37,12 +46,29 @@
+ volumes *Graph
+ srv *Server
+ Dns []string
++ deviceSet DeviceSet
++ mountMethod MountMethod
+ }
+
+ var sysInitPath string
+
+ func init() {
+- sysInitPath = utils.SelfPath()
++ env := os.Getenv("_DOCKER_INIT_PATH")
++ if env != "" {
++ sysInitPath = env
++ } else {
++ selfPath := utils.SelfPath()
++
++ // If we have a separate docker-init, use that, otherwise use the
++ // main docker binary
++ dir := filepath.Dir(selfPath)
++ dockerInitPath := filepath.Join(dir, "docker-init")
++ if _, err := os.Stat(dockerInitPath); err != nil {
++ sysInitPath = selfPath
++ } else {
++ sysInitPath = dockerInitPath
++ }
++ }
+ }
+
+ // List returns an array of all containers registered in the runtime.
+@@ -64,6 +90,53 @@
+ return nil
+ }
+
++func hasFilesystemSupport(fstype string) bool {
++ content, err := ioutil.ReadFile("/proc/filesystems")
++ if err != nil {
++ log.Printf("WARNING: Unable to read /proc/filesystems, assuming fs %s is not supported.", fstype)
++ return false
++ }
++ lines := strings.Split(string(content), "\n")
++ for _, line := range lines {
++ if strings.HasPrefix(line, "nodev") {
++ line = line[5:]
++ }
++ line = strings.TrimSpace(line)
++ if line == fstype {
++ return true
++ }
++ }
++ return false
++}
++
++func (runtime *Runtime) GetMountMethod() MountMethod {
++ if runtime.mountMethod == MountMethodNone {
++ // Try to automatically pick a method
++ if hasFilesystemSupport("aufs") {
++ utils.Debugf("Using AUFS backend.")
++ runtime.mountMethod = MountMethodAUFS
++ } else {
++ _ = exec.Command("modprobe", "aufs").Run()
++ if hasFilesystemSupport("aufs") {
++ utils.Debugf("Using AUFS backend.")
++ runtime.mountMethod = MountMethodAUFS
++ } else {
++ utils.Debugf("Using device-mapper backend.")
++ runtime.mountMethod = MountMethodDeviceMapper
++ }
++ }
++ }
++
++ return runtime.mountMethod
++}
++
++func (runtime *Runtime) GetDeviceSet() (DeviceSet, error) {
++ if runtime.deviceSet == nil {
++ return nil, fmt.Errorf("No device set available")
++ }
++ return runtime.deviceSet, nil
++}
++
+ // Get looks for a container by the specified ID or name, and returns it.
+ // If the container is not found, or if an error occurs, nil is returned.
+ func (runtime *Runtime) Get(name string) *Container {
+@@ -215,6 +288,24 @@
+ if err := os.RemoveAll(container.root); err != nil {
+ return fmt.Errorf("Unable to remove filesystem for %v: %v", container.ID, err)
+ }
++ if runtime.GetMountMethod() == MountMethodDeviceMapper && runtime.deviceSet.HasDevice(container.ID) {
++ if err := runtime.deviceSet.RemoveDevice(container.ID); err != nil {
++ return fmt.Errorf("Unable to remove device for %v: %v", container.ID, err)
++ }
++ }
++ return nil
++}
++
++func (runtime *Runtime) DeleteImage(id string) error {
++ err := runtime.graph.Delete(id)
++ if err != nil {
++ return err
++ }
++ if runtime.GetMountMethod() == MountMethodDeviceMapper && runtime.deviceSet.HasDevice(id) {
++ if err := runtime.deviceSet.RemoveDevice(id); err != nil {
++ return fmt.Errorf("Unable to remove device for %v: %v", id, err)
++ }
++ }
+ return nil
+ }
+
+@@ -427,8 +518,8 @@
+ }
+
+ // FIXME: harmonize with NewGraph()
+-func NewRuntime(flGraphPath string, autoRestart bool, dns []string) (*Runtime, error) {
+- runtime, err := NewRuntimeFromDirectory(flGraphPath, autoRestart)
++func NewRuntime(flGraphPath string, deviceSet DeviceSet, autoRestart bool, dns []string) (*Runtime, error) {
++ runtime, err := NewRuntimeFromDirectory(flGraphPath, deviceSet, autoRestart)
+ if err != nil {
+ return nil, err
+ }
+@@ -446,7 +537,7 @@
+ return runtime, nil
+ }
+
+-func NewRuntimeFromDirectory(root string, autoRestart bool) (*Runtime, error) {
++func NewRuntimeFromDirectory(root string, deviceSet DeviceSet, autoRestart bool) (*Runtime, error) {
+ runtimeRepo := path.Join(root, "containers")
+
+ if err := os.MkdirAll(runtimeRepo, 0700); err != nil && !os.IsExist(err) {
+@@ -483,6 +574,7 @@
+ capabilities: &Capabilities{},
+ autoRestart: autoRestart,
+ volumes: volumes,
++ deviceSet: deviceSet,
+ }
+
+ if err := runtime.restore(); err != nil {
+diff -uNr docker-0.6.2/runtime_test.go docker-devmapper/runtime_test.go
+--- docker-0.6.2/runtime_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/runtime_test.go 2013-09-23 10:37:39.278305287 -0500
+@@ -4,7 +4,9 @@
+ "bytes"
+ "fmt"
+ "github.com/dotcloud/docker/utils"
++ "github.com/dotcloud/docker/devmapper"
+ "io"
++ "io/ioutil"
+ "log"
+ "net"
+ "os"
+@@ -22,6 +24,7 @@
+ unitTestImageID = "83599e29c455eb719f77d799bc7c51521b9551972f5a850d7ad265bc1b5292f6" // 1.0
+ unitTestNetworkBridge = "testdockbr0"
+ unitTestStoreBase = "/var/lib/docker/unit-tests"
++ unitTestStoreDevicesBase = "/var/lib/docker/unit-tests-devices"
+ testDaemonAddr = "127.0.0.1:4270"
+ testDaemonProto = "tcp"
+ )
+@@ -42,6 +45,10 @@
+ }(container)
+ }
+ wg.Wait()
++
++ for _, container := range runtime.List() {
++ container.EnsureUnmounted()
++ }
+ return os.RemoveAll(runtime.root)
+ }
+
+@@ -56,12 +63,19 @@
+ }
+ for _, image := range images {
+ if image.ID != unitTestImageID {
+- runtime.graph.Delete(image.ID)
++ runtime.DeleteImage(image.ID)
+ }
+ }
+ return nil
+ }
+
++func cleanupLast(runtime *Runtime) error {
++ cleanup(runtime)
++ runtime.deviceSet.Shutdown()
++ return nil
++}
++
++
+ func layerArchive(tarfile string) (io.Reader, error) {
+ // FIXME: need to close f somewhere
+ f, err := os.Open(tarfile)
+@@ -71,6 +85,32 @@
+ return f, nil
+ }
+
++// Remove any leftover device mapper devices from earlier runs of the unit tests
++func cleanupDevMapper() {
++ infos, _ := ioutil.ReadDir("/dev/mapper")
++ if infos != nil {
++ hasPool := false
++ for _, info := range infos {
++ name := info.Name()
++ if strings.HasPrefix(name, "docker-unit-tests-devices-") {
++ if name == "docker-unit-tests-devices-pool" {
++ hasPool = true
++ } else {
++ if err := devmapper.RemoveDevice(name); err != nil {
++ panic(fmt.Errorf("Unable to remove existing device %s: %s", name, err))
++ }
++ }
++ }
++ // We need to remove the pool last as the other devices block it
++ if hasPool {
++ if err := devmapper.RemoveDevice("docker-unit-tests-devices-pool"); err != nil {
++ panic(fmt.Errorf("Unable to remove existing device docker-unit-tests-devices-pool: %s", name, err))
++ }
++ }
++ }
++ }
++}
++
+ func init() {
+ os.Setenv("TEST", "1")
+
+@@ -86,8 +126,16 @@
+
+ NetworkBridgeIface = unitTestNetworkBridge
+
++ cleanupDevMapper()
++
++ // Always start from a clean set of loopback mounts
++ err := os.RemoveAll(unitTestStoreDevicesBase)
++ if err != nil {
++ panic(err)
++ }
++
+ // Make it our Store root
+- if runtime, err := NewRuntimeFromDirectory(unitTestStoreBase, false); err != nil {
++ if runtime, err := NewRuntimeFromDirectory(unitTestStoreBase, devmapper.NewDeviceSetDM(unitTestStoreDevicesBase), false); err != nil {
+ panic(err)
+ } else {
+ globalRuntime = runtime
+@@ -456,7 +504,7 @@
+
+ // Here are are simulating a docker restart - that is, reloading all containers
+ // from scratch
+- runtime2, err := NewRuntimeFromDirectory(runtime1.root, false)
++ runtime2, err := NewRuntimeFromDirectory(runtime1.root, runtime1.deviceSet, false)
+ if err != nil {
+ t.Fatal(err)
+ }
+diff -uNr docker-0.6.2/server.go docker-devmapper/server.go
+--- docker-0.6.2/server.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/server.go 2013-09-23 10:37:39.261305334 -0500
+@@ -772,9 +772,7 @@
+ } else {
+ elem.Checksum = checksum
+ }
+- if err := pushTags(); err != nil {
+- return err
+- }
++ return pushTags()
+ }
+ }
+ }
+@@ -1025,7 +1023,7 @@
+ if err := srv.runtime.repositories.DeleteAll(id); err != nil {
+ return err
+ }
+- err := srv.runtime.graph.Delete(id)
++ err := srv.runtime.DeleteImage(id)
+ if err != nil {
+ return err
+ }
+@@ -1099,7 +1097,7 @@
+ return nil, fmt.Errorf("No such image: %s", name)
+ }
+ if !autoPrune {
+- if err := srv.runtime.graph.Delete(img.ID); err != nil {
++ if err := srv.runtime.DeleteImage(img.ID); err != nil {
+ return nil, fmt.Errorf("Error deleting image %s: %s", name, err)
+ }
+ return nil, nil
+@@ -1294,11 +1292,11 @@
+
+ }
+
+-func NewServer(flGraphPath string, autoRestart, enableCors bool, dns ListOpts) (*Server, error) {
++func NewServer(flGraphPath string, deviceSet DeviceSet, autoRestart, enableCors bool, dns ListOpts) (*Server, error) {
+ if runtime.GOARCH != "amd64" {
+ log.Fatalf("The docker runtime currently only supports amd64 (not %s). This will change in the future. Aborting.", runtime.GOARCH)
+ }
+- runtime, err := NewRuntime(flGraphPath, autoRestart, dns)
++ runtime, err := NewRuntime(flGraphPath, deviceSet, autoRestart, dns)
+ if err != nil {
+ return nil, err
+ }
+diff -uNr docker-0.6.2/utils/utils.go docker-devmapper/utils/utils.go
+--- docker-0.6.2/utils/utils.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/utils/utils.go 2013-09-23 10:37:39.107305762 -0500
+@@ -1021,3 +1021,36 @@
+ func (e *StatusError) Error() string {
+ return fmt.Sprintf("Status: %d", e.Status)
+ }
++
++func quote(word string, buf *bytes.Buffer) {
++ // Bail out early for "simple" strings
++ if word != "" && !strings.ContainsAny(word, "\\'\"`${[|&;<>()~*?! \t\n") {
++ buf.WriteString(word)
++ return
++ }
++
++ buf.WriteString("'")
++
++ for i := 0; i < len(word); i++ {
++ b := word[i]
++ if b == '\'' {
++ // Replace literal ' with a close ', a \', and a open '
++ buf.WriteString("'\\''")
++ } else {
++ buf.WriteByte(b)
++ }
++ }
++
++ buf.WriteString("'")
++}
++
++func ShellQuoteArguments(args []string) string {
++ var buf bytes.Buffer
++ for i, arg := range args {
++ if i != 0 {
++ buf.WriteByte(' ')
++ }
++ quote(arg, &buf)
++ }
++ return buf.String()
++}
+diff -uNr docker-0.6.2/utils/utils_test.go docker-devmapper/utils/utils_test.go
+--- docker-0.6.2/utils/utils_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/utils/utils_test.go 2013-09-23 10:37:39.117305734 -0500
+@@ -366,6 +366,7 @@
+ assertParseRelease(t, "3.8.0-19-generic", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "19-generic"}, 0)
+ }
+
++
+ func TestDependencyGraphCircular(t *testing.T) {
+ g1 := NewDependencyGraph()
+ a := g1.NewNode("a")
+@@ -420,4 +421,4 @@
+ if len(res[2]) != 1 || res[2][0] != "d" {
+ t.Fatalf("Expected [d], found %v instead", res[2])
+ }
+-}
++}
+\ No newline at end of file
+diff -uNr docker-0.6.2/utils.go docker-devmapper/utils.go
+--- docker-0.6.2/utils.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/utils.go 2013-09-23 10:37:39.151305640 -0500
+@@ -1,8 +1,33 @@
+ package docker
+
++/*
++#include <sys/ioctl.h>
++#include <linux/fs.h>
++#include <errno.h>
++
++// See linux.git/fs/btrfs/ioctl.h
++#define BTRFS_IOCTL_MAGIC 0x94
++#define BTRFS_IOC_CLONE _IOW(BTRFS_IOCTL_MAGIC, 9, int)
++
++int
++btrfs_reflink(int fd_out, int fd_in)
++{
++ int res;
++ res = ioctl(fd_out, BTRFS_IOC_CLONE, fd_in);
++ if (res < 0)
++ return errno;
++ return 0;
++}
++
++*/
++import "C"
+ import (
+ "fmt"
++ "io"
++ "io/ioutil"
++ "os"
+ "strings"
++ "syscall"
+ )
+
+ // Compare two Config struct. Do not compare the "Image" nor "Hostname" fields
+@@ -167,3 +192,36 @@
+ }
+ return strings.TrimSpace(parts[0]), strings.TrimSpace(parts[1]), nil
+ }
++
++func RootIsShared() bool {
++ if data, err := ioutil.ReadFile("/proc/self/mountinfo"); err == nil {
++ for _, line := range strings.Split(string(data), "\n") {
++ cols := strings.Split(line, " ")
++ if len(cols) >= 6 && cols[3] == "/" && cols[4] == "/" {
++ return strings.HasPrefix(cols[6], "shared")
++ }
++ }
++ }
++
++ // No idea, probably safe to assume so
++ return true
++}
++
++func BtrfsReflink(fd_out, fd_in uintptr) error {
++ res := C.btrfs_reflink(C.int(fd_out), C.int(fd_in))
++ if res != 0 {
++ return syscall.Errno(res)
++ }
++ return nil
++}
++
++func CopyFile(dstFile, srcFile *os.File) error {
++ err := BtrfsReflink(dstFile.Fd(), srcFile.Fd())
++ if err == nil {
++ return nil
++ }
++
++ // Fall back to normal copy
++ _, err = io.Copy(dstFile, srcFile)
++ return err
++}
+diff -uNr docker-0.6.2/utils_test.go docker-devmapper/utils_test.go
+--- docker-0.6.2/utils_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/utils_test.go 2013-09-23 10:37:39.237305401 -0500
+@@ -2,6 +2,7 @@
+
+ import (
+ "github.com/dotcloud/docker/utils"
++ "path/filepath"
+ "io"
+ "io/ioutil"
+ "os"
+@@ -42,7 +43,7 @@
+ return nil, err
+ }
+
+- runtime, err := NewRuntimeFromDirectory(root, false)
++ runtime, err := NewRuntimeFromDirectory(root, NewDeviceSetWrapper (globalRuntime.deviceSet, filepath.Base(root)), false)
+ if err != nil {
+ return nil, err
+ }
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/AUTHORS docker-devmapper/vendor/src/code.google.com/p/go.net/AUTHORS
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/AUTHORS 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/AUTHORS 1969-12-31 18:00:00.000000000 -0600
+@@ -1,3 +0,0 @@
+-# This source code refers to The Go Authors for copyright purposes.
+-# The master list of authors is in the main Go distribution,
+-# visible at http://tip.golang.org/AUTHORS.
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/codereview.cfg docker-devmapper/vendor/src/code.google.com/p/go.net/codereview.cfg
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/codereview.cfg 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/codereview.cfg 1969-12-31 18:00:00.000000000 -0600
+@@ -1,2 +0,0 @@
+-defaultcc: golang-dev at googlegroups.com
+-contributors: http://go.googlecode.com/hg/CONTRIBUTORS
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/CONTRIBUTORS docker-devmapper/vendor/src/code.google.com/p/go.net/CONTRIBUTORS
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/CONTRIBUTORS 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/CONTRIBUTORS 1969-12-31 18:00:00.000000000 -0600
+@@ -1,3 +0,0 @@
+-# This source code was written by the Go contributors.
+-# The master list of contributors is in the main Go distribution,
+-# visible at http://tip.golang.org/CONTRIBUTORS.
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/dict/dict.go docker-devmapper/vendor/src/code.google.com/p/go.net/dict/dict.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/dict/dict.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/dict/dict.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,210 +0,0 @@
+-// Copyright 2010 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 dict implements the Dictionary Server Protocol
+-// as defined in RFC 2229.
+-package dict
+-
+-import (
+- "net/textproto"
+- "strconv"
+- "strings"
+-)
+-
+-// A Client represents a client connection to a dictionary server.
+-type Client struct {
+- text *textproto.Conn
+-}
+-
+-// Dial returns a new client connected to a dictionary server at
+-// addr on the given network.
+-func Dial(network, addr string) (*Client, error) {
+- text, err := textproto.Dial(network, addr)
+- if err != nil {
+- return nil, err
+- }
+- _, _, err = text.ReadCodeLine(220)
+- if err != nil {
+- text.Close()
+- return nil, err
+- }
+- return &Client{text: text}, nil
+-}
+-
+-// Close closes the connection to the dictionary server.
+-func (c *Client) Close() error {
+- return c.text.Close()
+-}
+-
+-// A Dict represents a dictionary available on the server.
+-type Dict struct {
+- Name string // short name of dictionary
+- Desc string // long description
+-}
+-
+-// Dicts returns a list of the dictionaries available on the server.
+-func (c *Client) Dicts() ([]Dict, error) {
+- id, err := c.text.Cmd("SHOW DB")
+- if err != nil {
+- return nil, err
+- }
+-
+- c.text.StartResponse(id)
+- defer c.text.EndResponse(id)
+-
+- _, _, err = c.text.ReadCodeLine(110)
+- if err != nil {
+- return nil, err
+- }
+- lines, err := c.text.ReadDotLines()
+- if err != nil {
+- return nil, err
+- }
+- _, _, err = c.text.ReadCodeLine(250)
+-
+- dicts := make([]Dict, len(lines))
+- for i := range dicts {
+- d := &dicts[i]
+- a, _ := fields(lines[i])
+- if len(a) < 2 {
+- return nil, textproto.ProtocolError("invalid dictionary: " + lines[i])
+- }
+- d.Name = a[0]
+- d.Desc = a[1]
+- }
+- return dicts, err
+-}
+-
+-// A Defn represents a definition.
+-type Defn struct {
+- Dict Dict // Dict where definition was found
+- Word string // Word being defined
+- Text []byte // Definition text, typically multiple lines
+-}
+-
+-// Define requests the definition of the given word.
+-// The argument dict names the dictionary to use,
+-// the Name field of a Dict returned by Dicts.
+-//
+-// The special dictionary name "*" means to look in all the
+-// server's dictionaries.
+-// The special dictionary name "!" means to look in all the
+-// server's dictionaries in turn, stopping after finding the word
+-// in one of them.
+-func (c *Client) Define(dict, word string) ([]*Defn, error) {
+- id, err := c.text.Cmd("DEFINE %s %q", dict, word)
+- if err != nil {
+- return nil, err
+- }
+-
+- c.text.StartResponse(id)
+- defer c.text.EndResponse(id)
+-
+- _, line, err := c.text.ReadCodeLine(150)
+- if err != nil {
+- return nil, err
+- }
+- a, _ := fields(line)
+- if len(a) < 1 {
+- return nil, textproto.ProtocolError("malformed response: " + line)
+- }
+- n, err := strconv.Atoi(a[0])
+- if err != nil {
+- return nil, textproto.ProtocolError("invalid definition count: " + a[0])
+- }
+- def := make([]*Defn, n)
+- for i := 0; i < n; i++ {
+- _, line, err = c.text.ReadCodeLine(151)
+- if err != nil {
+- return nil, err
+- }
+- a, _ := fields(line)
+- if len(a) < 3 {
+- // skip it, to keep protocol in sync
+- i--
+- n--
+- def = def[0:n]
+- continue
+- }
+- d := &Defn{Word: a[0], Dict: Dict{a[1], a[2]}}
+- d.Text, err = c.text.ReadDotBytes()
+- if err != nil {
+- return nil, err
+- }
+- def[i] = d
+- }
+- _, _, err = c.text.ReadCodeLine(250)
+- return def, err
+-}
+-
+-// Fields returns the fields in s.
+-// Fields are space separated unquoted words
+-// or quoted with single or double quote.
+-func fields(s string) ([]string, error) {
+- var v []string
+- i := 0
+- for {
+- for i < len(s) && (s[i] == ' ' || s[i] == '\t') {
+- i++
+- }
+- if i >= len(s) {
+- break
+- }
+- if s[i] == '"' || s[i] == '\'' {
+- q := s[i]
+- // quoted string
+- var j int
+- for j = i + 1; ; j++ {
+- if j >= len(s) {
+- return nil, textproto.ProtocolError("malformed quoted string")
+- }
+- if s[j] == '\\' {
+- j++
+- continue
+- }
+- if s[j] == q {
+- j++
+- break
+- }
+- }
+- v = append(v, unquote(s[i+1:j-1]))
+- i = j
+- } else {
+- // atom
+- var j int
+- for j = i; j < len(s); j++ {
+- if s[j] == ' ' || s[j] == '\t' || s[j] == '\\' || s[j] == '"' || s[j] == '\'' {
+- break
+- }
+- }
+- v = append(v, s[i:j])
+- i = j
+- }
+- if i < len(s) {
+- c := s[i]
+- if c != ' ' && c != '\t' {
+- return nil, textproto.ProtocolError("quotes not on word boundaries")
+- }
+- }
+- }
+- return v, nil
+-}
+-
+-func unquote(s string) string {
+- if strings.Index(s, "\\") < 0 {
+- return s
+- }
+- b := []byte(s)
+- w := 0
+- for r := 0; r < len(b); r++ {
+- c := b[r]
+- if c == '\\' {
+- r++
+- c = b[r]
+- }
+- b[w] = c
+- w++
+- }
+- return string(b[0:w])
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/.hgignore docker-devmapper/vendor/src/code.google.com/p/go.net/.hgignore
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/.hgignore 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/.hgignore 1969-12-31 18:00:00.000000000 -0600
+@@ -1,2 +0,0 @@
+-syntax:glob
+-last-change
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/atom/atom.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/atom/atom.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/atom/atom.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/atom/atom.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,78 +0,0 @@
+-// Copyright 2012 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 atom provides integer codes (also known as atoms) for a fixed set of
+-// frequently occurring HTML strings: tag names and attribute keys such as "p"
+-// and "id".
+-//
+-// Sharing an atom's name between all elements with the same tag can result in
+-// fewer string allocations when tokenizing and parsing HTML. Integer
+-// comparisons are also generally faster than string comparisons.
+-//
+-// The value of an atom's particular code is not guaranteed to stay the same
+-// between versions of this package. Neither is any ordering guaranteed:
+-// whether atom.H1 < atom.H2 may also change. The codes are not guaranteed to
+-// be dense. The only guarantees are that e.g. looking up "div" will yield
+-// atom.Div, calling atom.Div.String will return "div", and atom.Div != 0.
+-package atom
+-
+-// Atom is an integer code for a string. The zero value maps to "".
+-type Atom uint32
+-
+-// String returns the atom's name.
+-func (a Atom) String() string {
+- start := uint32(a >> 8)
+- n := uint32(a & 0xff)
+- if start+n > uint32(len(atomText)) {
+- return ""
+- }
+- return atomText[start : start+n]
+-}
+-
+-func (a Atom) string() string {
+- return atomText[a>>8 : a>>8+a&0xff]
+-}
+-
+-// fnv computes the FNV hash with an arbitrary starting value h.
+-func fnv(h uint32, s []byte) uint32 {
+- for i := range s {
+- h ^= uint32(s[i])
+- h *= 16777619
+- }
+- return h
+-}
+-
+-func match(s string, t []byte) bool {
+- for i, c := range t {
+- if s[i] != c {
+- return false
+- }
+- }
+- return true
+-}
+-
+-// Lookup returns the atom whose name is s. It returns zero if there is no
+-// such atom. The lookup is case sensitive.
+-func Lookup(s []byte) Atom {
+- if len(s) == 0 || len(s) > maxAtomLen {
+- return 0
+- }
+- h := fnv(hash0, s)
+- if a := table[h&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {
+- return a
+- }
+- if a := table[(h>>16)&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {
+- return a
+- }
+- return 0
+-}
+-
+-// String returns a string whose contents are equal to s. In that sense, it is
+-// equivalent to string(s) but may be more efficient.
+-func String(s []byte) string {
+- if a := Lookup(s); a != 0 {
+- return a.String()
+- }
+- return string(s)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/atom/atom_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/atom/atom_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/atom/atom_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/atom/atom_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,109 +0,0 @@
+-// Copyright 2012 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 atom
+-
+-import (
+- "sort"
+- "testing"
+-)
+-
+-func TestKnown(t *testing.T) {
+- for _, s := range testAtomList {
+- if atom := Lookup([]byte(s)); atom.String() != s {
+- t.Errorf("Lookup(%q) = %#x (%q)", s, uint32(atom), atom.String())
+- }
+- }
+-}
+-
+-func TestHits(t *testing.T) {
+- for _, a := range table {
+- if a == 0 {
+- continue
+- }
+- got := Lookup([]byte(a.String()))
+- if got != a {
+- t.Errorf("Lookup(%q) = %#x, want %#x", a.String(), uint32(got), uint32(a))
+- }
+- }
+-}
+-
+-func TestMisses(t *testing.T) {
+- testCases := []string{
+- "",
+- "\x00",
+- "\xff",
+- "A",
+- "DIV",
+- "Div",
+- "dIV",
+- "aa",
+- "a\x00",
+- "ab",
+- "abb",
+- "abbr0",
+- "abbr ",
+- " abbr",
+- " a",
+- "acceptcharset",
+- "acceptCharset",
+- "accept_charset",
+- "h0",
+- "h1h2",
+- "h7",
+- "onClick",
+- "λ",
+- // The following string has the same hash (0xa1d7fab7) as "onmouseover".
+- "\x00\x00\x00\x00\x00\x50\x18\xae\x38\xd0\xb7",
+- }
+- for _, tc := range testCases {
+- got := Lookup([]byte(tc))
+- if got != 0 {
+- t.Errorf("Lookup(%q): got %d, want 0", tc, got)
+- }
+- }
+-}
+-
+-func TestForeignObject(t *testing.T) {
+- const (
+- afo = Foreignobject
+- afO = ForeignObject
+- sfo = "foreignobject"
+- sfO = "foreignObject"
+- )
+- if got := Lookup([]byte(sfo)); got != afo {
+- t.Errorf("Lookup(%q): got %#v, want %#v", sfo, got, afo)
+- }
+- if got := Lookup([]byte(sfO)); got != afO {
+- t.Errorf("Lookup(%q): got %#v, want %#v", sfO, got, afO)
+- }
+- if got := afo.String(); got != sfo {
+- t.Errorf("Atom(%#v).String(): got %q, want %q", afo, got, sfo)
+- }
+- if got := afO.String(); got != sfO {
+- t.Errorf("Atom(%#v).String(): got %q, want %q", afO, got, sfO)
+- }
+-}
+-
+-func BenchmarkLookup(b *testing.B) {
+- sortedTable := make([]string, 0, len(table))
+- for _, a := range table {
+- if a != 0 {
+- sortedTable = append(sortedTable, a.String())
+- }
+- }
+- sort.Strings(sortedTable)
+-
+- x := make([][]byte, 1000)
+- for i := range x {
+- x[i] = []byte(sortedTable[i%len(sortedTable)])
+- }
+-
+- b.ResetTimer()
+- for i := 0; i < b.N; i++ {
+- for _, s := range x {
+- Lookup(s)
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/atom/gen.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/atom/gen.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/atom/gen.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/atom/gen.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,636 +0,0 @@
+-// Copyright 2012 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
+-
+-// This program generates table.go and table_test.go.
+-// Invoke as
+-//
+-// go run gen.go |gofmt >table.go
+-// go run gen.go -test |gofmt >table_test.go
+-
+-import (
+- "flag"
+- "fmt"
+- "math/rand"
+- "os"
+- "sort"
+- "strings"
+-)
+-
+-// identifier converts s to a Go exported identifier.
+-// It converts "div" to "Div" and "accept-charset" to "AcceptCharset".
+-func identifier(s string) string {
+- b := make([]byte, 0, len(s))
+- cap := true
+- for _, c := range s {
+- if c == '-' {
+- cap = true
+- continue
+- }
+- if cap && 'a' <= c && c <= 'z' {
+- c -= 'a' - 'A'
+- }
+- cap = false
+- b = append(b, byte(c))
+- }
+- return string(b)
+-}
+-
+-var test = flag.Bool("test", false, "generate table_test.go")
+-
+-func main() {
+- flag.Parse()
+-
+- var all []string
+- all = append(all, elements...)
+- all = append(all, attributes...)
+- all = append(all, eventHandlers...)
+- all = append(all, extra...)
+- sort.Strings(all)
+-
+- if *test {
+- fmt.Printf("// generated by go run gen.go -test; DO NOT EDIT\n\n")
+- fmt.Printf("package atom\n\n")
+- fmt.Printf("var testAtomList = []string{\n")
+- for _, s := range all {
+- fmt.Printf("\t%q,\n", s)
+- }
+- fmt.Printf("}\n")
+- return
+- }
+-
+- // uniq - lists have dups
+- // compute max len too
+- maxLen := 0
+- w := 0
+- for _, s := range all {
+- if w == 0 || all[w-1] != s {
+- if maxLen < len(s) {
+- maxLen = len(s)
+- }
+- all[w] = s
+- w++
+- }
+- }
+- all = all[:w]
+-
+- // Find hash that minimizes table size.
+- var best *table
+- for i := 0; i < 1000000; i++ {
+- if best != nil && 1<<(best.k-1) < len(all) {
+- break
+- }
+- h := rand.Uint32()
+- for k := uint(0); k <= 16; k++ {
+- if best != nil && k >= best.k {
+- break
+- }
+- var t table
+- if t.init(h, k, all) {
+- best = &t
+- break
+- }
+- }
+- }
+- if best == nil {
+- fmt.Fprintf(os.Stderr, "failed to construct string table\n")
+- os.Exit(1)
+- }
+-
+- // Lay out strings, using overlaps when possible.
+- layout := append([]string{}, all...)
+-
+- // Remove strings that are substrings of other strings
+- for changed := true; changed; {
+- changed = false
+- for i, s := range layout {
+- if s == "" {
+- continue
+- }
+- for j, t := range layout {
+- if i != j && t != "" && strings.Contains(s, t) {
+- changed = true
+- layout[j] = ""
+- }
+- }
+- }
+- }
+-
+- // Join strings where one suffix matches another prefix.
+- for {
+- // Find best i, j, k such that layout[i][len-k:] == layout[j][:k],
+- // maximizing overlap length k.
+- besti := -1
+- bestj := -1
+- bestk := 0
+- for i, s := range layout {
+- if s == "" {
+- continue
+- }
+- for j, t := range layout {
+- if i == j {
+- continue
+- }
+- for k := bestk + 1; k <= len(s) && k <= len(t); k++ {
+- if s[len(s)-k:] == t[:k] {
+- besti = i
+- bestj = j
+- bestk = k
+- }
+- }
+- }
+- }
+- if bestk > 0 {
+- layout[besti] += layout[bestj][bestk:]
+- layout[bestj] = ""
+- continue
+- }
+- break
+- }
+-
+- text := strings.Join(layout, "")
+-
+- atom := map[string]uint32{}
+- for _, s := range all {
+- off := strings.Index(text, s)
+- if off < 0 {
+- panic("lost string " + s)
+- }
+- atom[s] = uint32(off<<8 | len(s))
+- }
+-
+- // Generate the Go code.
+- fmt.Printf("// generated by go run gen.go; DO NOT EDIT\n\n")
+- fmt.Printf("package atom\n\nconst (\n")
+- for _, s := range all {
+- fmt.Printf("\t%s Atom = %#x\n", identifier(s), atom[s])
+- }
+- fmt.Printf(")\n\n")
+-
+- fmt.Printf("const hash0 = %#x\n\n", best.h0)
+- fmt.Printf("const maxAtomLen = %d\n\n", maxLen)
+-
+- fmt.Printf("var table = [1<<%d]Atom{\n", best.k)
+- for i, s := range best.tab {
+- if s == "" {
+- continue
+- }
+- fmt.Printf("\t%#x: %#x, // %s\n", i, atom[s], s)
+- }
+- fmt.Printf("}\n")
+- datasize := (1 << best.k) * 4
+-
+- fmt.Printf("const atomText =\n")
+- textsize := len(text)
+- for len(text) > 60 {
+- fmt.Printf("\t%q +\n", text[:60])
+- text = text[60:]
+- }
+- fmt.Printf("\t%q\n\n", text)
+-
+- fmt.Fprintf(os.Stderr, "%d atoms; %d string bytes + %d tables = %d total data\n", len(all), textsize, datasize, textsize+datasize)
+-}
+-
+-type byLen []string
+-
+-func (x byLen) Less(i, j int) bool { return len(x[i]) > len(x[j]) }
+-func (x byLen) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
+-func (x byLen) Len() int { return len(x) }
+-
+-// fnv computes the FNV hash with an arbitrary starting value h.
+-func fnv(h uint32, s string) uint32 {
+- for i := 0; i < len(s); i++ {
+- h ^= uint32(s[i])
+- h *= 16777619
+- }
+- return h
+-}
+-
+-// A table represents an attempt at constructing the lookup table.
+-// The lookup table uses cuckoo hashing, meaning that each string
+-// can be found in one of two positions.
+-type table struct {
+- h0 uint32
+- k uint
+- mask uint32
+- tab []string
+-}
+-
+-// hash returns the two hashes for s.
+-func (t *table) hash(s string) (h1, h2 uint32) {
+- h := fnv(t.h0, s)
+- h1 = h & t.mask
+- h2 = (h >> 16) & t.mask
+- return
+-}
+-
+-// init initializes the table with the given parameters.
+-// h0 is the initial hash value,
+-// k is the number of bits of hash value to use, and
+-// x is the list of strings to store in the table.
+-// init returns false if the table cannot be constructed.
+-func (t *table) init(h0 uint32, k uint, x []string) bool {
+- t.h0 = h0
+- t.k = k
+- t.tab = make([]string, 1<<k)
+- t.mask = 1<<k - 1
+- for _, s := range x {
+- if !t.insert(s) {
+- return false
+- }
+- }
+- return true
+-}
+-
+-// insert inserts s in the table.
+-func (t *table) insert(s string) bool {
+- h1, h2 := t.hash(s)
+- if t.tab[h1] == "" {
+- t.tab[h1] = s
+- return true
+- }
+- if t.tab[h2] == "" {
+- t.tab[h2] = s
+- return true
+- }
+- if t.push(h1, 0) {
+- t.tab[h1] = s
+- return true
+- }
+- if t.push(h2, 0) {
+- t.tab[h2] = s
+- return true
+- }
+- return false
+-}
+-
+-// push attempts to push aside the entry in slot i.
+-func (t *table) push(i uint32, depth int) bool {
+- if depth > len(t.tab) {
+- return false
+- }
+- s := t.tab[i]
+- h1, h2 := t.hash(s)
+- j := h1 + h2 - i
+- if t.tab[j] != "" && !t.push(j, depth+1) {
+- return false
+- }
+- t.tab[j] = s
+- return true
+-}
+-
+-// The lists of element names and attribute keys were taken from
+-// http://www.whatwg.org/specs/web-apps/current-work/multipage/section-index.html
+-// as of the "HTML Living Standard - Last Updated 30 May 2012" version.
+-
+-var elements = []string{
+- "a",
+- "abbr",
+- "address",
+- "area",
+- "article",
+- "aside",
+- "audio",
+- "b",
+- "base",
+- "bdi",
+- "bdo",
+- "blockquote",
+- "body",
+- "br",
+- "button",
+- "canvas",
+- "caption",
+- "cite",
+- "code",
+- "col",
+- "colgroup",
+- "command",
+- "data",
+- "datalist",
+- "dd",
+- "del",
+- "details",
+- "dfn",
+- "dialog",
+- "div",
+- "dl",
+- "dt",
+- "em",
+- "embed",
+- "fieldset",
+- "figcaption",
+- "figure",
+- "footer",
+- "form",
+- "h1",
+- "h2",
+- "h3",
+- "h4",
+- "h5",
+- "h6",
+- "head",
+- "header",
+- "hgroup",
+- "hr",
+- "html",
+- "i",
+- "iframe",
+- "img",
+- "input",
+- "ins",
+- "kbd",
+- "keygen",
+- "label",
+- "legend",
+- "li",
+- "link",
+- "map",
+- "mark",
+- "menu",
+- "meta",
+- "meter",
+- "nav",
+- "noscript",
+- "object",
+- "ol",
+- "optgroup",
+- "option",
+- "output",
+- "p",
+- "param",
+- "pre",
+- "progress",
+- "q",
+- "rp",
+- "rt",
+- "ruby",
+- "s",
+- "samp",
+- "script",
+- "section",
+- "select",
+- "small",
+- "source",
+- "span",
+- "strong",
+- "style",
+- "sub",
+- "summary",
+- "sup",
+- "table",
+- "tbody",
+- "td",
+- "textarea",
+- "tfoot",
+- "th",
+- "thead",
+- "time",
+- "title",
+- "tr",
+- "track",
+- "u",
+- "ul",
+- "var",
+- "video",
+- "wbr",
+-}
+-
+-var attributes = []string{
+- "accept",
+- "accept-charset",
+- "accesskey",
+- "action",
+- "alt",
+- "async",
+- "autocomplete",
+- "autofocus",
+- "autoplay",
+- "border",
+- "challenge",
+- "charset",
+- "checked",
+- "cite",
+- "class",
+- "cols",
+- "colspan",
+- "command",
+- "content",
+- "contenteditable",
+- "contextmenu",
+- "controls",
+- "coords",
+- "crossorigin",
+- "data",
+- "datetime",
+- "default",
+- "defer",
+- "dir",
+- "dirname",
+- "disabled",
+- "download",
+- "draggable",
+- "dropzone",
+- "enctype",
+- "for",
+- "form",
+- "formaction",
+- "formenctype",
+- "formmethod",
+- "formnovalidate",
+- "formtarget",
+- "headers",
+- "height",
+- "hidden",
+- "high",
+- "href",
+- "hreflang",
+- "http-equiv",
+- "icon",
+- "id",
+- "inert",
+- "ismap",
+- "itemid",
+- "itemprop",
+- "itemref",
+- "itemscope",
+- "itemtype",
+- "keytype",
+- "kind",
+- "label",
+- "lang",
+- "list",
+- "loop",
+- "low",
+- "manifest",
+- "max",
+- "maxlength",
+- "media",
+- "mediagroup",
+- "method",
+- "min",
+- "multiple",
+- "muted",
+- "name",
+- "novalidate",
+- "open",
+- "optimum",
+- "pattern",
+- "ping",
+- "placeholder",
+- "poster",
+- "preload",
+- "radiogroup",
+- "readonly",
+- "rel",
+- "required",
+- "reversed",
+- "rows",
+- "rowspan",
+- "sandbox",
+- "spellcheck",
+- "scope",
+- "scoped",
+- "seamless",
+- "selected",
+- "shape",
+- "size",
+- "sizes",
+- "span",
+- "src",
+- "srcdoc",
+- "srclang",
+- "start",
+- "step",
+- "style",
+- "tabindex",
+- "target",
+- "title",
+- "translate",
+- "type",
+- "typemustmatch",
+- "usemap",
+- "value",
+- "width",
+- "wrap",
+-}
+-
+-var eventHandlers = []string{
+- "onabort",
+- "onafterprint",
+- "onbeforeprint",
+- "onbeforeunload",
+- "onblur",
+- "oncancel",
+- "oncanplay",
+- "oncanplaythrough",
+- "onchange",
+- "onclick",
+- "onclose",
+- "oncontextmenu",
+- "oncuechange",
+- "ondblclick",
+- "ondrag",
+- "ondragend",
+- "ondragenter",
+- "ondragleave",
+- "ondragover",
+- "ondragstart",
+- "ondrop",
+- "ondurationchange",
+- "onemptied",
+- "onended",
+- "onerror",
+- "onfocus",
+- "onhashchange",
+- "oninput",
+- "oninvalid",
+- "onkeydown",
+- "onkeypress",
+- "onkeyup",
+- "onload",
+- "onloadeddata",
+- "onloadedmetadata",
+- "onloadstart",
+- "onmessage",
+- "onmousedown",
+- "onmousemove",
+- "onmouseout",
+- "onmouseover",
+- "onmouseup",
+- "onmousewheel",
+- "onoffline",
+- "ononline",
+- "onpagehide",
+- "onpageshow",
+- "onpause",
+- "onplay",
+- "onplaying",
+- "onpopstate",
+- "onprogress",
+- "onratechange",
+- "onreset",
+- "onresize",
+- "onscroll",
+- "onseeked",
+- "onseeking",
+- "onselect",
+- "onshow",
+- "onstalled",
+- "onstorage",
+- "onsubmit",
+- "onsuspend",
+- "ontimeupdate",
+- "onunload",
+- "onvolumechange",
+- "onwaiting",
+-}
+-
+-// extra are ad-hoc values not covered by any of the lists above.
+-var extra = []string{
+- "align",
+- "annotation",
+- "annotation-xml",
+- "applet",
+- "basefont",
+- "bgsound",
+- "big",
+- "blink",
+- "center",
+- "color",
+- "desc",
+- "face",
+- "font",
+- "foreignObject", // HTML is case-insensitive, but SVG-embedded-in-HTML is case-sensitive.
+- "foreignobject",
+- "frame",
+- "frameset",
+- "image",
+- "isindex",
+- "listing",
+- "malignmark",
+- "marquee",
+- "math",
+- "mglyph",
+- "mi",
+- "mn",
+- "mo",
+- "ms",
+- "mtext",
+- "nobr",
+- "noembed",
+- "noframes",
+- "plaintext",
+- "prompt",
+- "public",
+- "spacer",
+- "strike",
+- "svg",
+- "system",
+- "tt",
+- "xmp",
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/atom/table.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/atom/table.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/atom/table.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/atom/table.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,694 +0,0 @@
+-// generated by go run gen.go; DO NOT EDIT
+-
+-package atom
+-
+-const (
+- A Atom = 0x1
+- Abbr Atom = 0x4
+- Accept Atom = 0x2106
+- AcceptCharset Atom = 0x210e
+- Accesskey Atom = 0x3309
+- Action Atom = 0x21b06
+- Address Atom = 0x5d507
+- Align Atom = 0x1105
+- Alt Atom = 0x4503
+- Annotation Atom = 0x18d0a
+- AnnotationXml Atom = 0x18d0e
+- Applet Atom = 0x2d106
+- Area Atom = 0x31804
+- Article Atom = 0x39907
+- Aside Atom = 0x4f05
+- Async Atom = 0x9305
+- Audio Atom = 0xaf05
+- Autocomplete Atom = 0xd50c
+- Autofocus Atom = 0xe109
+- Autoplay Atom = 0x10c08
+- B Atom = 0x101
+- Base Atom = 0x11404
+- Basefont Atom = 0x11408
+- Bdi Atom = 0x1a03
+- Bdo Atom = 0x12503
+- Bgsound Atom = 0x13807
+- Big Atom = 0x14403
+- Blink Atom = 0x14705
+- Blockquote Atom = 0x14c0a
+- Body Atom = 0x2f04
+- Border Atom = 0x15606
+- Br Atom = 0x202
+- Button Atom = 0x15c06
+- Canvas Atom = 0x4b06
+- Caption Atom = 0x1e007
+- Center Atom = 0x2df06
+- Challenge Atom = 0x23e09
+- Charset Atom = 0x2807
+- Checked Atom = 0x33f07
+- Cite Atom = 0x9704
+- Class Atom = 0x3d905
+- Code Atom = 0x16f04
+- Col Atom = 0x17603
+- Colgroup Atom = 0x17608
+- Color Atom = 0x18305
+- Cols Atom = 0x18804
+- Colspan Atom = 0x18807
+- Command Atom = 0x19b07
+- Content Atom = 0x42c07
+- Contenteditable Atom = 0x42c0f
+- Contextmenu Atom = 0x3480b
+- Controls Atom = 0x1ae08
+- Coords Atom = 0x1ba06
+- Crossorigin Atom = 0x1c40b
+- Data Atom = 0x44304
+- Datalist Atom = 0x44308
+- Datetime Atom = 0x25b08
+- Dd Atom = 0x28802
+- Default Atom = 0x5207
+- Defer Atom = 0x17105
+- Del Atom = 0x4d603
+- Desc Atom = 0x4804
+- Details Atom = 0x6507
+- Dfn Atom = 0x8303
+- Dialog Atom = 0x1b06
+- Dir Atom = 0x9d03
+- Dirname Atom = 0x9d07
+- Disabled Atom = 0x10008
+- Div Atom = 0x10703
+- Dl Atom = 0x13e02
+- Download Atom = 0x40908
+- Draggable Atom = 0x1a109
+- Dropzone Atom = 0x3a208
+- Dt Atom = 0x4e402
+- Em Atom = 0x7f02
+- Embed Atom = 0x7f05
+- Enctype Atom = 0x23007
+- Face Atom = 0x2dd04
+- Fieldset Atom = 0x1d508
+- Figcaption Atom = 0x1dd0a
+- Figure Atom = 0x1f106
+- Font Atom = 0x11804
+- Footer Atom = 0x5906
+- For Atom = 0x1fd03
+- ForeignObject Atom = 0x1fd0d
+- Foreignobject Atom = 0x20a0d
+- Form Atom = 0x21704
+- Formaction Atom = 0x2170a
+- Formenctype Atom = 0x22c0b
+- Formmethod Atom = 0x2470a
+- Formnovalidate Atom = 0x2510e
+- Formtarget Atom = 0x2660a
+- Frame Atom = 0x8705
+- Frameset Atom = 0x8708
+- H1 Atom = 0x13602
+- H2 Atom = 0x29602
+- H3 Atom = 0x2c502
+- H4 Atom = 0x30e02
+- H5 Atom = 0x4e602
+- H6 Atom = 0x27002
+- Head Atom = 0x2fa04
+- Header Atom = 0x2fa06
+- Headers Atom = 0x2fa07
+- Height Atom = 0x27206
+- Hgroup Atom = 0x27a06
+- Hidden Atom = 0x28606
+- High Atom = 0x29304
+- Hr Atom = 0x13102
+- Href Atom = 0x29804
+- Hreflang Atom = 0x29808
+- Html Atom = 0x27604
+- HttpEquiv Atom = 0x2a00a
+- I Atom = 0x601
+- Icon Atom = 0x42b04
+- Id Atom = 0x5102
+- Iframe Atom = 0x2b406
+- Image Atom = 0x2ba05
+- Img Atom = 0x2bf03
+- Inert Atom = 0x4c105
+- Input Atom = 0x3f605
+- Ins Atom = 0x1cd03
+- Isindex Atom = 0x2c707
+- Ismap Atom = 0x2ce05
+- Itemid Atom = 0x9806
+- Itemprop Atom = 0x57e08
+- Itemref Atom = 0x2d707
+- Itemscope Atom = 0x2e509
+- Itemtype Atom = 0x2ef08
+- Kbd Atom = 0x1903
+- Keygen Atom = 0x3906
+- Keytype Atom = 0x51207
+- Kind Atom = 0xfd04
+- Label Atom = 0xba05
+- Lang Atom = 0x29c04
+- Legend Atom = 0x1a806
+- Li Atom = 0x1202
+- Link Atom = 0x14804
+- List Atom = 0x44704
+- Listing Atom = 0x44707
+- Loop Atom = 0xbe04
+- Low Atom = 0x13f03
+- Malignmark Atom = 0x100a
+- Manifest Atom = 0x5b608
+- Map Atom = 0x2d003
+- Mark Atom = 0x1604
+- Marquee Atom = 0x5f207
+- Math Atom = 0x2f704
+- Max Atom = 0x30603
+- Maxlength Atom = 0x30609
+- Media Atom = 0xa205
+- Mediagroup Atom = 0xa20a
+- Menu Atom = 0x34f04
+- Meta Atom = 0x45604
+- Meter Atom = 0x26105
+- Method Atom = 0x24b06
+- Mglyph Atom = 0x2c006
+- Mi Atom = 0x9b02
+- Min Atom = 0x31003
+- Mn Atom = 0x25402
+- Mo Atom = 0x47a02
+- Ms Atom = 0x2e802
+- Mtext Atom = 0x31305
+- Multiple Atom = 0x32108
+- Muted Atom = 0x32905
+- Name Atom = 0xa004
+- Nav Atom = 0x3e03
+- Nobr Atom = 0x7404
+- Noembed Atom = 0x7d07
+- Noframes Atom = 0x8508
+- Noscript Atom = 0x28b08
+- Novalidate Atom = 0x2550a
+- Object Atom = 0x21106
+- Ol Atom = 0xcd02
+- Onabort Atom = 0x16007
+- Onafterprint Atom = 0x1e50c
+- Onbeforeprint Atom = 0x21f0d
+- Onbeforeunload Atom = 0x5c90e
+- Onblur Atom = 0x3e206
+- Oncancel Atom = 0xb308
+- Oncanplay Atom = 0x12709
+- Oncanplaythrough Atom = 0x12710
+- Onchange Atom = 0x3b808
+- Onclick Atom = 0x2ad07
+- Onclose Atom = 0x32e07
+- Oncontextmenu Atom = 0x3460d
+- Oncuechange Atom = 0x3530b
+- Ondblclick Atom = 0x35e0a
+- Ondrag Atom = 0x36806
+- Ondragend Atom = 0x36809
+- Ondragenter Atom = 0x3710b
+- Ondragleave Atom = 0x37c0b
+- Ondragover Atom = 0x3870a
+- Ondragstart Atom = 0x3910b
+- Ondrop Atom = 0x3a006
+- Ondurationchange Atom = 0x3b010
+- Onemptied Atom = 0x3a709
+- Onended Atom = 0x3c007
+- Onerror Atom = 0x3c707
+- Onfocus Atom = 0x3ce07
+- Onhashchange Atom = 0x3e80c
+- Oninput Atom = 0x3f407
+- Oninvalid Atom = 0x3fb09
+- Onkeydown Atom = 0x40409
+- Onkeypress Atom = 0x4110a
+- Onkeyup Atom = 0x42107
+- Onload Atom = 0x43b06
+- Onloadeddata Atom = 0x43b0c
+- Onloadedmetadata Atom = 0x44e10
+- Onloadstart Atom = 0x4640b
+- Onmessage Atom = 0x46f09
+- Onmousedown Atom = 0x4780b
+- Onmousemove Atom = 0x4830b
+- Onmouseout Atom = 0x48e0a
+- Onmouseover Atom = 0x49b0b
+- Onmouseup Atom = 0x4a609
+- Onmousewheel Atom = 0x4af0c
+- Onoffline Atom = 0x4bb09
+- Ononline Atom = 0x4c608
+- Onpagehide Atom = 0x4ce0a
+- Onpageshow Atom = 0x4d90a
+- Onpause Atom = 0x4e807
+- Onplay Atom = 0x4f206
+- Onplaying Atom = 0x4f209
+- Onpopstate Atom = 0x4fb0a
+- Onprogress Atom = 0x5050a
+- Onratechange Atom = 0x5190c
+- Onreset Atom = 0x52507
+- Onresize Atom = 0x52c08
+- Onscroll Atom = 0x53a08
+- Onseeked Atom = 0x54208
+- Onseeking Atom = 0x54a09
+- Onselect Atom = 0x55308
+- Onshow Atom = 0x55d06
+- Onstalled Atom = 0x56609
+- Onstorage Atom = 0x56f09
+- Onsubmit Atom = 0x57808
+- Onsuspend Atom = 0x58809
+- Ontimeupdate Atom = 0x1190c
+- Onunload Atom = 0x59108
+- Onvolumechange Atom = 0x5990e
+- Onwaiting Atom = 0x5a709
+- Open Atom = 0x58404
+- Optgroup Atom = 0xc008
+- Optimum Atom = 0x5b007
+- Option Atom = 0x5c506
+- Output Atom = 0x49506
+- P Atom = 0xc01
+- Param Atom = 0xc05
+- Pattern Atom = 0x6e07
+- Ping Atom = 0xab04
+- Placeholder Atom = 0xc70b
+- Plaintext Atom = 0xf109
+- Poster Atom = 0x17d06
+- Pre Atom = 0x27f03
+- Preload Atom = 0x27f07
+- Progress Atom = 0x50708
+- Prompt Atom = 0x5bf06
+- Public Atom = 0x42706
+- Q Atom = 0x15101
+- Radiogroup Atom = 0x30a
+- Readonly Atom = 0x31908
+- Rel Atom = 0x28003
+- Required Atom = 0x1f508
+- Reversed Atom = 0x5e08
+- Rows Atom = 0x7704
+- Rowspan Atom = 0x7707
+- Rp Atom = 0x1eb02
+- Rt Atom = 0x16502
+- Ruby Atom = 0xd104
+- S Atom = 0x2c01
+- Samp Atom = 0x6b04
+- Sandbox Atom = 0xe907
+- Scope Atom = 0x2e905
+- Scoped Atom = 0x2e906
+- Script Atom = 0x28d06
+- Seamless Atom = 0x33308
+- Section Atom = 0x3dd07
+- Select Atom = 0x55506
+- Selected Atom = 0x55508
+- Shape Atom = 0x1b505
+- Size Atom = 0x53004
+- Sizes Atom = 0x53005
+- Small Atom = 0x1bf05
+- Source Atom = 0x1cf06
+- Spacer Atom = 0x30006
+- Span Atom = 0x7a04
+- Spellcheck Atom = 0x33a0a
+- Src Atom = 0x3d403
+- Srcdoc Atom = 0x3d406
+- Srclang Atom = 0x41a07
+- Start Atom = 0x39705
+- Step Atom = 0x5bc04
+- Strike Atom = 0x50e06
+- Strong Atom = 0x53406
+- Style Atom = 0x5db05
+- Sub Atom = 0x57a03
+- Summary Atom = 0x5e007
+- Sup Atom = 0x5e703
+- Svg Atom = 0x5ea03
+- System Atom = 0x5ed06
+- Tabindex Atom = 0x45c08
+- Table Atom = 0x43605
+- Target Atom = 0x26a06
+- Tbody Atom = 0x2e05
+- Td Atom = 0x4702
+- Textarea Atom = 0x31408
+- Tfoot Atom = 0x5805
+- Th Atom = 0x13002
+- Thead Atom = 0x2f905
+- Time Atom = 0x11b04
+- Title Atom = 0x8e05
+- Tr Atom = 0xf902
+- Track Atom = 0xf905
+- Translate Atom = 0x16609
+- Tt Atom = 0x7002
+- Type Atom = 0x23304
+- Typemustmatch Atom = 0x2330d
+- U Atom = 0xb01
+- Ul Atom = 0x5602
+- Usemap Atom = 0x4ec06
+- Value Atom = 0x4005
+- Var Atom = 0x10903
+- Video Atom = 0x2a905
+- Wbr Atom = 0x14103
+- Width Atom = 0x4e205
+- Wrap Atom = 0x56204
+- Xmp Atom = 0xef03
+-)
+-
+-const hash0 = 0xc17da63e
+-
+-const maxAtomLen = 16
+-
+-var table = [1 << 9]Atom{
+- 0x1: 0x4830b, // onmousemove
+- 0x2: 0x5a709, // onwaiting
+- 0x4: 0x5bf06, // prompt
+- 0x7: 0x5b007, // optimum
+- 0x8: 0x1604, // mark
+- 0xa: 0x2d707, // itemref
+- 0xb: 0x4d90a, // onpageshow
+- 0xc: 0x55506, // select
+- 0xd: 0x1a109, // draggable
+- 0xe: 0x3e03, // nav
+- 0xf: 0x19b07, // command
+- 0x11: 0xb01, // u
+- 0x14: 0x2fa07, // headers
+- 0x15: 0x44308, // datalist
+- 0x17: 0x6b04, // samp
+- 0x1a: 0x40409, // onkeydown
+- 0x1b: 0x53a08, // onscroll
+- 0x1c: 0x17603, // col
+- 0x20: 0x57e08, // itemprop
+- 0x21: 0x2a00a, // http-equiv
+- 0x22: 0x5e703, // sup
+- 0x24: 0x1f508, // required
+- 0x2b: 0x27f07, // preload
+- 0x2c: 0x21f0d, // onbeforeprint
+- 0x2d: 0x3710b, // ondragenter
+- 0x2e: 0x4e402, // dt
+- 0x2f: 0x57808, // onsubmit
+- 0x30: 0x13102, // hr
+- 0x31: 0x3460d, // oncontextmenu
+- 0x33: 0x2ba05, // image
+- 0x34: 0x4e807, // onpause
+- 0x35: 0x27a06, // hgroup
+- 0x36: 0xab04, // ping
+- 0x37: 0x55308, // onselect
+- 0x3a: 0x10703, // div
+- 0x40: 0x9b02, // mi
+- 0x41: 0x33308, // seamless
+- 0x42: 0x2807, // charset
+- 0x43: 0x5102, // id
+- 0x44: 0x4fb0a, // onpopstate
+- 0x45: 0x4d603, // del
+- 0x46: 0x5f207, // marquee
+- 0x47: 0x3309, // accesskey
+- 0x49: 0x5906, // footer
+- 0x4a: 0x2d106, // applet
+- 0x4b: 0x2ce05, // ismap
+- 0x51: 0x34f04, // menu
+- 0x52: 0x2f04, // body
+- 0x55: 0x8708, // frameset
+- 0x56: 0x52507, // onreset
+- 0x57: 0x14705, // blink
+- 0x58: 0x8e05, // title
+- 0x59: 0x39907, // article
+- 0x5b: 0x13002, // th
+- 0x5d: 0x15101, // q
+- 0x5e: 0x58404, // open
+- 0x5f: 0x31804, // area
+- 0x61: 0x43b06, // onload
+- 0x62: 0x3f605, // input
+- 0x63: 0x11404, // base
+- 0x64: 0x18807, // colspan
+- 0x65: 0x51207, // keytype
+- 0x66: 0x13e02, // dl
+- 0x68: 0x1d508, // fieldset
+- 0x6a: 0x31003, // min
+- 0x6b: 0x10903, // var
+- 0x6f: 0x2fa06, // header
+- 0x70: 0x16502, // rt
+- 0x71: 0x17608, // colgroup
+- 0x72: 0x25402, // mn
+- 0x74: 0x16007, // onabort
+- 0x75: 0x3906, // keygen
+- 0x76: 0x4bb09, // onoffline
+- 0x77: 0x23e09, // challenge
+- 0x78: 0x2d003, // map
+- 0x7a: 0x30e02, // h4
+- 0x7b: 0x3c707, // onerror
+- 0x7c: 0x30609, // maxlength
+- 0x7d: 0x31305, // mtext
+- 0x7e: 0x5805, // tfoot
+- 0x7f: 0x11804, // font
+- 0x80: 0x100a, // malignmark
+- 0x81: 0x45604, // meta
+- 0x82: 0x9305, // async
+- 0x83: 0x2c502, // h3
+- 0x84: 0x28802, // dd
+- 0x85: 0x29804, // href
+- 0x86: 0xa20a, // mediagroup
+- 0x87: 0x1ba06, // coords
+- 0x88: 0x41a07, // srclang
+- 0x89: 0x35e0a, // ondblclick
+- 0x8a: 0x4005, // value
+- 0x8c: 0xb308, // oncancel
+- 0x8e: 0x33a0a, // spellcheck
+- 0x8f: 0x8705, // frame
+- 0x91: 0x14403, // big
+- 0x94: 0x21b06, // action
+- 0x95: 0x9d03, // dir
+- 0x97: 0x31908, // readonly
+- 0x99: 0x43605, // table
+- 0x9a: 0x5e007, // summary
+- 0x9b: 0x14103, // wbr
+- 0x9c: 0x30a, // radiogroup
+- 0x9d: 0xa004, // name
+- 0x9f: 0x5ed06, // system
+- 0xa1: 0x18305, // color
+- 0xa2: 0x4b06, // canvas
+- 0xa3: 0x27604, // html
+- 0xa5: 0x54a09, // onseeking
+- 0xac: 0x1b505, // shape
+- 0xad: 0x28003, // rel
+- 0xae: 0x12710, // oncanplaythrough
+- 0xaf: 0x3870a, // ondragover
+- 0xb1: 0x1fd0d, // foreignObject
+- 0xb3: 0x7704, // rows
+- 0xb6: 0x44707, // listing
+- 0xb7: 0x49506, // output
+- 0xb9: 0x3480b, // contextmenu
+- 0xbb: 0x13f03, // low
+- 0xbc: 0x1eb02, // rp
+- 0xbd: 0x58809, // onsuspend
+- 0xbe: 0x15c06, // button
+- 0xbf: 0x4804, // desc
+- 0xc1: 0x3dd07, // section
+- 0xc2: 0x5050a, // onprogress
+- 0xc3: 0x56f09, // onstorage
+- 0xc4: 0x2f704, // math
+- 0xc5: 0x4f206, // onplay
+- 0xc7: 0x5602, // ul
+- 0xc8: 0x6e07, // pattern
+- 0xc9: 0x4af0c, // onmousewheel
+- 0xca: 0x36809, // ondragend
+- 0xcb: 0xd104, // ruby
+- 0xcc: 0xc01, // p
+- 0xcd: 0x32e07, // onclose
+- 0xce: 0x26105, // meter
+- 0xcf: 0x13807, // bgsound
+- 0xd2: 0x27206, // height
+- 0xd4: 0x101, // b
+- 0xd5: 0x2ef08, // itemtype
+- 0xd8: 0x1e007, // caption
+- 0xd9: 0x10008, // disabled
+- 0xdc: 0x5ea03, // svg
+- 0xdd: 0x1bf05, // small
+- 0xde: 0x44304, // data
+- 0xe0: 0x4c608, // ononline
+- 0xe1: 0x2c006, // mglyph
+- 0xe3: 0x7f05, // embed
+- 0xe4: 0xf902, // tr
+- 0xe5: 0x4640b, // onloadstart
+- 0xe7: 0x3b010, // ondurationchange
+- 0xed: 0x12503, // bdo
+- 0xee: 0x4702, // td
+- 0xef: 0x4f05, // aside
+- 0xf0: 0x29602, // h2
+- 0xf1: 0x50708, // progress
+- 0xf2: 0x14c0a, // blockquote
+- 0xf4: 0xba05, // label
+- 0xf5: 0x601, // i
+- 0xf7: 0x7707, // rowspan
+- 0xfb: 0x4f209, // onplaying
+- 0xfd: 0x2bf03, // img
+- 0xfe: 0xc008, // optgroup
+- 0xff: 0x42c07, // content
+- 0x101: 0x5190c, // onratechange
+- 0x103: 0x3e80c, // onhashchange
+- 0x104: 0x6507, // details
+- 0x106: 0x40908, // download
+- 0x109: 0xe907, // sandbox
+- 0x10b: 0x42c0f, // contenteditable
+- 0x10d: 0x37c0b, // ondragleave
+- 0x10e: 0x2106, // accept
+- 0x10f: 0x55508, // selected
+- 0x112: 0x2170a, // formaction
+- 0x113: 0x2df06, // center
+- 0x115: 0x44e10, // onloadedmetadata
+- 0x116: 0x14804, // link
+- 0x117: 0x11b04, // time
+- 0x118: 0x1c40b, // crossorigin
+- 0x119: 0x3ce07, // onfocus
+- 0x11a: 0x56204, // wrap
+- 0x11b: 0x42b04, // icon
+- 0x11d: 0x2a905, // video
+- 0x11e: 0x3d905, // class
+- 0x121: 0x5990e, // onvolumechange
+- 0x122: 0x3e206, // onblur
+- 0x123: 0x2e509, // itemscope
+- 0x124: 0x5db05, // style
+- 0x127: 0x42706, // public
+- 0x129: 0x2510e, // formnovalidate
+- 0x12a: 0x55d06, // onshow
+- 0x12c: 0x16609, // translate
+- 0x12d: 0x9704, // cite
+- 0x12e: 0x2e802, // ms
+- 0x12f: 0x1190c, // ontimeupdate
+- 0x130: 0xfd04, // kind
+- 0x131: 0x2660a, // formtarget
+- 0x135: 0x3c007, // onended
+- 0x136: 0x28606, // hidden
+- 0x137: 0x2c01, // s
+- 0x139: 0x2470a, // formmethod
+- 0x13a: 0x44704, // list
+- 0x13c: 0x27002, // h6
+- 0x13d: 0xcd02, // ol
+- 0x13e: 0x3530b, // oncuechange
+- 0x13f: 0x20a0d, // foreignobject
+- 0x143: 0x5c90e, // onbeforeunload
+- 0x145: 0x3a709, // onemptied
+- 0x146: 0x17105, // defer
+- 0x147: 0xef03, // xmp
+- 0x148: 0xaf05, // audio
+- 0x149: 0x1903, // kbd
+- 0x14c: 0x46f09, // onmessage
+- 0x14d: 0x5c506, // option
+- 0x14e: 0x4503, // alt
+- 0x14f: 0x33f07, // checked
+- 0x150: 0x10c08, // autoplay
+- 0x152: 0x202, // br
+- 0x153: 0x2550a, // novalidate
+- 0x156: 0x7d07, // noembed
+- 0x159: 0x2ad07, // onclick
+- 0x15a: 0x4780b, // onmousedown
+- 0x15b: 0x3b808, // onchange
+- 0x15e: 0x3fb09, // oninvalid
+- 0x15f: 0x2e906, // scoped
+- 0x160: 0x1ae08, // controls
+- 0x161: 0x32905, // muted
+- 0x163: 0x4ec06, // usemap
+- 0x164: 0x1dd0a, // figcaption
+- 0x165: 0x36806, // ondrag
+- 0x166: 0x29304, // high
+- 0x168: 0x3d403, // src
+- 0x169: 0x17d06, // poster
+- 0x16b: 0x18d0e, // annotation-xml
+- 0x16c: 0x5bc04, // step
+- 0x16d: 0x4, // abbr
+- 0x16e: 0x1b06, // dialog
+- 0x170: 0x1202, // li
+- 0x172: 0x47a02, // mo
+- 0x175: 0x1fd03, // for
+- 0x176: 0x1cd03, // ins
+- 0x178: 0x53004, // size
+- 0x17a: 0x5207, // default
+- 0x17b: 0x1a03, // bdi
+- 0x17c: 0x4ce0a, // onpagehide
+- 0x17d: 0x9d07, // dirname
+- 0x17e: 0x23304, // type
+- 0x17f: 0x21704, // form
+- 0x180: 0x4c105, // inert
+- 0x181: 0x12709, // oncanplay
+- 0x182: 0x8303, // dfn
+- 0x183: 0x45c08, // tabindex
+- 0x186: 0x7f02, // em
+- 0x187: 0x29c04, // lang
+- 0x189: 0x3a208, // dropzone
+- 0x18a: 0x4110a, // onkeypress
+- 0x18b: 0x25b08, // datetime
+- 0x18c: 0x18804, // cols
+- 0x18d: 0x1, // a
+- 0x18e: 0x43b0c, // onloadeddata
+- 0x191: 0x15606, // border
+- 0x192: 0x2e05, // tbody
+- 0x193: 0x24b06, // method
+- 0x195: 0xbe04, // loop
+- 0x196: 0x2b406, // iframe
+- 0x198: 0x2fa04, // head
+- 0x19e: 0x5b608, // manifest
+- 0x19f: 0xe109, // autofocus
+- 0x1a0: 0x16f04, // code
+- 0x1a1: 0x53406, // strong
+- 0x1a2: 0x32108, // multiple
+- 0x1a3: 0xc05, // param
+- 0x1a6: 0x23007, // enctype
+- 0x1a7: 0x2dd04, // face
+- 0x1a8: 0xf109, // plaintext
+- 0x1a9: 0x13602, // h1
+- 0x1aa: 0x56609, // onstalled
+- 0x1ad: 0x28d06, // script
+- 0x1ae: 0x30006, // spacer
+- 0x1af: 0x52c08, // onresize
+- 0x1b0: 0x49b0b, // onmouseover
+- 0x1b1: 0x59108, // onunload
+- 0x1b2: 0x54208, // onseeked
+- 0x1b4: 0x2330d, // typemustmatch
+- 0x1b5: 0x1f106, // figure
+- 0x1b6: 0x48e0a, // onmouseout
+- 0x1b7: 0x27f03, // pre
+- 0x1b8: 0x4e205, // width
+- 0x1bb: 0x7404, // nobr
+- 0x1be: 0x7002, // tt
+- 0x1bf: 0x1105, // align
+- 0x1c0: 0x3f407, // oninput
+- 0x1c3: 0x42107, // onkeyup
+- 0x1c6: 0x1e50c, // onafterprint
+- 0x1c7: 0x210e, // accept-charset
+- 0x1c8: 0x9806, // itemid
+- 0x1cb: 0x50e06, // strike
+- 0x1cc: 0x57a03, // sub
+- 0x1cd: 0xf905, // track
+- 0x1ce: 0x39705, // start
+- 0x1d0: 0x11408, // basefont
+- 0x1d6: 0x1cf06, // source
+- 0x1d7: 0x1a806, // legend
+- 0x1d8: 0x2f905, // thead
+- 0x1da: 0x2e905, // scope
+- 0x1dd: 0x21106, // object
+- 0x1de: 0xa205, // media
+- 0x1df: 0x18d0a, // annotation
+- 0x1e0: 0x22c0b, // formenctype
+- 0x1e2: 0x28b08, // noscript
+- 0x1e4: 0x53005, // sizes
+- 0x1e5: 0xd50c, // autocomplete
+- 0x1e6: 0x7a04, // span
+- 0x1e7: 0x8508, // noframes
+- 0x1e8: 0x26a06, // target
+- 0x1e9: 0x3a006, // ondrop
+- 0x1ea: 0x3d406, // srcdoc
+- 0x1ec: 0x5e08, // reversed
+- 0x1f0: 0x2c707, // isindex
+- 0x1f3: 0x29808, // hreflang
+- 0x1f5: 0x4e602, // h5
+- 0x1f6: 0x5d507, // address
+- 0x1fa: 0x30603, // max
+- 0x1fb: 0xc70b, // placeholder
+- 0x1fc: 0x31408, // textarea
+- 0x1fe: 0x4a609, // onmouseup
+- 0x1ff: 0x3910b, // ondragstart
+-}
+-
+-const atomText = "abbradiogrouparamalignmarkbdialogaccept-charsetbodyaccesskey" +
+- "genavaluealtdescanvasidefaultfootereversedetailsampatternobr" +
+- "owspanoembedfnoframesetitleasyncitemidirnamediagroupingaudio" +
+- "ncancelabelooptgrouplaceholderubyautocompleteautofocusandbox" +
+- "mplaintextrackindisabledivarautoplaybasefontimeupdatebdoncan" +
+- "playthrough1bgsoundlowbrbigblinkblockquoteborderbuttonabortr" +
+- "anslatecodefercolgroupostercolorcolspannotation-xmlcommandra" +
+- "ggablegendcontrolshapecoordsmallcrossoriginsourcefieldsetfig" +
+- "captionafterprintfigurequiredforeignObjectforeignobjectforma" +
+- "ctionbeforeprintformenctypemustmatchallengeformmethodformnov" +
+- "alidatetimeterformtargeth6heightmlhgroupreloadhiddenoscripth" +
+- "igh2hreflanghttp-equivideonclickiframeimageimglyph3isindexis" +
+- "mappletitemrefacenteritemscopeditemtypematheaderspacermaxlen" +
+- "gth4minmtextareadonlymultiplemutedoncloseamlesspellcheckedon" +
+- "contextmenuoncuechangeondblclickondragendondragenterondragle" +
+- "aveondragoverondragstarticleondropzonemptiedondurationchange" +
+- "onendedonerroronfocusrcdoclassectionbluronhashchangeoninputo" +
+- "ninvalidonkeydownloadonkeypressrclangonkeyupublicontentedita" +
+- "bleonloadeddatalistingonloadedmetadatabindexonloadstartonmes" +
+- "sageonmousedownonmousemoveonmouseoutputonmouseoveronmouseupo" +
+- "nmousewheelonofflinertononlineonpagehidelonpageshowidth5onpa" +
+- "usemaponplayingonpopstateonprogresstrikeytypeonratechangeonr" +
+- "esetonresizestrongonscrollonseekedonseekingonselectedonshowr" +
+- "aponstalledonstorageonsubmitempropenonsuspendonunloadonvolum" +
+- "echangeonwaitingoptimumanifestepromptoptionbeforeunloaddress" +
+- "tylesummarysupsvgsystemarquee"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/atom/table_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/atom/table_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/atom/table_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/atom/table_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,341 +0,0 @@
+-// generated by go run gen.go -test; DO NOT EDIT
+-
+-package atom
+-
+-var testAtomList = []string{
+- "a",
+- "abbr",
+- "accept",
+- "accept-charset",
+- "accesskey",
+- "action",
+- "address",
+- "align",
+- "alt",
+- "annotation",
+- "annotation-xml",
+- "applet",
+- "area",
+- "article",
+- "aside",
+- "async",
+- "audio",
+- "autocomplete",
+- "autofocus",
+- "autoplay",
+- "b",
+- "base",
+- "basefont",
+- "bdi",
+- "bdo",
+- "bgsound",
+- "big",
+- "blink",
+- "blockquote",
+- "body",
+- "border",
+- "br",
+- "button",
+- "canvas",
+- "caption",
+- "center",
+- "challenge",
+- "charset",
+- "checked",
+- "cite",
+- "cite",
+- "class",
+- "code",
+- "col",
+- "colgroup",
+- "color",
+- "cols",
+- "colspan",
+- "command",
+- "command",
+- "content",
+- "contenteditable",
+- "contextmenu",
+- "controls",
+- "coords",
+- "crossorigin",
+- "data",
+- "data",
+- "datalist",
+- "datetime",
+- "dd",
+- "default",
+- "defer",
+- "del",
+- "desc",
+- "details",
+- "dfn",
+- "dialog",
+- "dir",
+- "dirname",
+- "disabled",
+- "div",
+- "dl",
+- "download",
+- "draggable",
+- "dropzone",
+- "dt",
+- "em",
+- "embed",
+- "enctype",
+- "face",
+- "fieldset",
+- "figcaption",
+- "figure",
+- "font",
+- "footer",
+- "for",
+- "foreignObject",
+- "foreignobject",
+- "form",
+- "form",
+- "formaction",
+- "formenctype",
+- "formmethod",
+- "formnovalidate",
+- "formtarget",
+- "frame",
+- "frameset",
+- "h1",
+- "h2",
+- "h3",
+- "h4",
+- "h5",
+- "h6",
+- "head",
+- "header",
+- "headers",
+- "height",
+- "hgroup",
+- "hidden",
+- "high",
+- "hr",
+- "href",
+- "hreflang",
+- "html",
+- "http-equiv",
+- "i",
+- "icon",
+- "id",
+- "iframe",
+- "image",
+- "img",
+- "inert",
+- "input",
+- "ins",
+- "isindex",
+- "ismap",
+- "itemid",
+- "itemprop",
+- "itemref",
+- "itemscope",
+- "itemtype",
+- "kbd",
+- "keygen",
+- "keytype",
+- "kind",
+- "label",
+- "label",
+- "lang",
+- "legend",
+- "li",
+- "link",
+- "list",
+- "listing",
+- "loop",
+- "low",
+- "malignmark",
+- "manifest",
+- "map",
+- "mark",
+- "marquee",
+- "math",
+- "max",
+- "maxlength",
+- "media",
+- "mediagroup",
+- "menu",
+- "meta",
+- "meter",
+- "method",
+- "mglyph",
+- "mi",
+- "min",
+- "mn",
+- "mo",
+- "ms",
+- "mtext",
+- "multiple",
+- "muted",
+- "name",
+- "nav",
+- "nobr",
+- "noembed",
+- "noframes",
+- "noscript",
+- "novalidate",
+- "object",
+- "ol",
+- "onabort",
+- "onafterprint",
+- "onbeforeprint",
+- "onbeforeunload",
+- "onblur",
+- "oncancel",
+- "oncanplay",
+- "oncanplaythrough",
+- "onchange",
+- "onclick",
+- "onclose",
+- "oncontextmenu",
+- "oncuechange",
+- "ondblclick",
+- "ondrag",
+- "ondragend",
+- "ondragenter",
+- "ondragleave",
+- "ondragover",
+- "ondragstart",
+- "ondrop",
+- "ondurationchange",
+- "onemptied",
+- "onended",
+- "onerror",
+- "onfocus",
+- "onhashchange",
+- "oninput",
+- "oninvalid",
+- "onkeydown",
+- "onkeypress",
+- "onkeyup",
+- "onload",
+- "onloadeddata",
+- "onloadedmetadata",
+- "onloadstart",
+- "onmessage",
+- "onmousedown",
+- "onmousemove",
+- "onmouseout",
+- "onmouseover",
+- "onmouseup",
+- "onmousewheel",
+- "onoffline",
+- "ononline",
+- "onpagehide",
+- "onpageshow",
+- "onpause",
+- "onplay",
+- "onplaying",
+- "onpopstate",
+- "onprogress",
+- "onratechange",
+- "onreset",
+- "onresize",
+- "onscroll",
+- "onseeked",
+- "onseeking",
+- "onselect",
+- "onshow",
+- "onstalled",
+- "onstorage",
+- "onsubmit",
+- "onsuspend",
+- "ontimeupdate",
+- "onunload",
+- "onvolumechange",
+- "onwaiting",
+- "open",
+- "optgroup",
+- "optimum",
+- "option",
+- "output",
+- "p",
+- "param",
+- "pattern",
+- "ping",
+- "placeholder",
+- "plaintext",
+- "poster",
+- "pre",
+- "preload",
+- "progress",
+- "prompt",
+- "public",
+- "q",
+- "radiogroup",
+- "readonly",
+- "rel",
+- "required",
+- "reversed",
+- "rows",
+- "rowspan",
+- "rp",
+- "rt",
+- "ruby",
+- "s",
+- "samp",
+- "sandbox",
+- "scope",
+- "scoped",
+- "script",
+- "seamless",
+- "section",
+- "select",
+- "selected",
+- "shape",
+- "size",
+- "sizes",
+- "small",
+- "source",
+- "spacer",
+- "span",
+- "span",
+- "spellcheck",
+- "src",
+- "srcdoc",
+- "srclang",
+- "start",
+- "step",
+- "strike",
+- "strong",
+- "style",
+- "style",
+- "sub",
+- "summary",
+- "sup",
+- "svg",
+- "system",
+- "tabindex",
+- "table",
+- "target",
+- "tbody",
+- "td",
+- "textarea",
+- "tfoot",
+- "th",
+- "thead",
+- "time",
+- "title",
+- "title",
+- "tr",
+- "track",
+- "translate",
+- "tt",
+- "type",
+- "typemustmatch",
+- "u",
+- "ul",
+- "usemap",
+- "value",
+- "var",
+- "video",
+- "wbr",
+- "width",
+- "wrap",
+- "xmp",
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/const.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/const.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/const.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/const.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,100 +0,0 @@
+-// Copyright 2011 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 html
+-
+-// Section 12.2.3.2 of the HTML5 specification says "The following elements
+-// have varying levels of special parsing rules".
+-// http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#the-stack-of-open-elements
+-var isSpecialElementMap = map[string]bool{
+- "address": true,
+- "applet": true,
+- "area": true,
+- "article": true,
+- "aside": true,
+- "base": true,
+- "basefont": true,
+- "bgsound": true,
+- "blockquote": true,
+- "body": true,
+- "br": true,
+- "button": true,
+- "caption": true,
+- "center": true,
+- "col": true,
+- "colgroup": true,
+- "command": true,
+- "dd": true,
+- "details": true,
+- "dir": true,
+- "div": true,
+- "dl": true,
+- "dt": true,
+- "embed": true,
+- "fieldset": true,
+- "figcaption": true,
+- "figure": true,
+- "footer": true,
+- "form": true,
+- "frame": true,
+- "frameset": true,
+- "h1": true,
+- "h2": true,
+- "h3": true,
+- "h4": true,
+- "h5": true,
+- "h6": true,
+- "head": true,
+- "header": true,
+- "hgroup": true,
+- "hr": true,
+- "html": true,
+- "iframe": true,
+- "img": true,
+- "input": true,
+- "isindex": true,
+- "li": true,
+- "link": true,
+- "listing": true,
+- "marquee": true,
+- "menu": true,
+- "meta": true,
+- "nav": true,
+- "noembed": true,
+- "noframes": true,
+- "noscript": true,
+- "object": true,
+- "ol": true,
+- "p": true,
+- "param": true,
+- "plaintext": true,
+- "pre": true,
+- "script": true,
+- "section": true,
+- "select": true,
+- "style": true,
+- "summary": true,
+- "table": true,
+- "tbody": true,
+- "td": true,
+- "textarea": true,
+- "tfoot": true,
+- "th": true,
+- "thead": true,
+- "title": true,
+- "tr": true,
+- "ul": true,
+- "wbr": true,
+- "xmp": true,
+-}
+-
+-func isSpecialElement(element *Node) bool {
+- switch element.Namespace {
+- case "", "html":
+- return isSpecialElementMap[element.Data]
+- case "svg":
+- return element.Data == "foreignObject"
+- }
+- return false
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/doc.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/doc.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/doc.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/doc.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,106 +0,0 @@
+-// Copyright 2010 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 html implements an HTML5-compliant tokenizer and parser.
+-
+-Tokenization is done by creating a Tokenizer for an io.Reader r. It is the
+-caller's responsibility to ensure that r provides UTF-8 encoded HTML.
+-
+- z := html.NewTokenizer(r)
+-
+-Given a Tokenizer z, the HTML is tokenized by repeatedly calling z.Next(),
+-which parses the next token and returns its type, or an error:
+-
+- for {
+- tt := z.Next()
+- if tt == html.ErrorToken {
+- // ...
+- return ...
+- }
+- // Process the current token.
+- }
+-
+-There are two APIs for retrieving the current token. The high-level API is to
+-call Token; the low-level API is to call Text or TagName / TagAttr. Both APIs
+-allow optionally calling Raw after Next but before Token, Text, TagName, or
+-TagAttr. In EBNF notation, the valid call sequence per token is:
+-
+- Next {Raw} [ Token | Text | TagName {TagAttr} ]
+-
+-Token returns an independent data structure that completely describes a token.
+-Entities (such as "<") are unescaped, tag names and attribute keys are
+-lower-cased, and attributes are collected into a []Attribute. For example:
+-
+- for {
+- if z.Next() == html.ErrorToken {
+- // Returning io.EOF indicates success.
+- return z.Err()
+- }
+- emitToken(z.Token())
+- }
+-
+-The low-level API performs fewer allocations and copies, but the contents of
+-the []byte values returned by Text, TagName and TagAttr may change on the next
+-call to Next. For example, to extract an HTML page's anchor text:
+-
+- depth := 0
+- for {
+- tt := z.Next()
+- switch tt {
+- case ErrorToken:
+- return z.Err()
+- case TextToken:
+- if depth > 0 {
+- // emitBytes should copy the []byte it receives,
+- // if it doesn't process it immediately.
+- emitBytes(z.Text())
+- }
+- case StartTagToken, EndTagToken:
+- tn, _ := z.TagName()
+- if len(tn) == 1 && tn[0] == 'a' {
+- if tt == StartTagToken {
+- depth++
+- } else {
+- depth--
+- }
+- }
+- }
+- }
+-
+-Parsing is done by calling Parse with an io.Reader, which returns the root of
+-the parse tree (the document element) as a *Node. It is the caller's
+-responsibility to ensure that the Reader provides UTF-8 encoded HTML. For
+-example, to process each anchor node in depth-first order:
+-
+- doc, err := html.Parse(r)
+- if err != nil {
+- // ...
+- }
+- var f func(*html.Node)
+- f = func(n *html.Node) {
+- if n.Type == html.ElementNode && n.Data == "a" {
+- // Do something with n...
+- }
+- for c := n.FirstChild; c != nil; c = c.NextSibling {
+- f(c)
+- }
+- }
+- f(doc)
+-
+-The relevant specifications include:
+-http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html and
+-http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html
+-*/
+-package html
+-
+-// The tokenization algorithm implemented by this package is not a line-by-line
+-// transliteration of the relatively verbose state-machine in the WHATWG
+-// specification. A more direct approach is used instead, where the program
+-// counter implies the state, such as whether it is tokenizing a tag or a text
+-// node. Specification compliance is verified by checking expected and actual
+-// outputs over a test suite rather than aiming for algorithmic fidelity.
+-
+-// TODO(nigeltao): Does a DOM API belong in this package or a separate one?
+-// TODO(nigeltao): How does parsing interact with a JavaScript engine?
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/doctype.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/doctype.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/doctype.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/doctype.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,156 +0,0 @@
+-// Copyright 2011 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 html
+-
+-import (
+- "strings"
+-)
+-
+-// parseDoctype parses the data from a DoctypeToken into a name,
+-// public identifier, and system identifier. It returns a Node whose Type
+-// is DoctypeNode, whose Data is the name, and which has attributes
+-// named "system" and "public" for the two identifiers if they were present.
+-// quirks is whether the document should be parsed in "quirks mode".
+-func parseDoctype(s string) (n *Node, quirks bool) {
+- n = &Node{Type: DoctypeNode}
+-
+- // Find the name.
+- space := strings.IndexAny(s, whitespace)
+- if space == -1 {
+- space = len(s)
+- }
+- n.Data = s[:space]
+- // The comparison to "html" is case-sensitive.
+- if n.Data != "html" {
+- quirks = true
+- }
+- n.Data = strings.ToLower(n.Data)
+- s = strings.TrimLeft(s[space:], whitespace)
+-
+- if len(s) < 6 {
+- // It can't start with "PUBLIC" or "SYSTEM".
+- // Ignore the rest of the string.
+- return n, quirks || s != ""
+- }
+-
+- key := strings.ToLower(s[:6])
+- s = s[6:]
+- for key == "public" || key == "system" {
+- s = strings.TrimLeft(s, whitespace)
+- if s == "" {
+- break
+- }
+- quote := s[0]
+- if quote != '"' && quote != '\'' {
+- break
+- }
+- s = s[1:]
+- q := strings.IndexRune(s, rune(quote))
+- var id string
+- if q == -1 {
+- id = s
+- s = ""
+- } else {
+- id = s[:q]
+- s = s[q+1:]
+- }
+- n.Attr = append(n.Attr, Attribute{Key: key, Val: id})
+- if key == "public" {
+- key = "system"
+- } else {
+- key = ""
+- }
+- }
+-
+- if key != "" || s != "" {
+- quirks = true
+- } else if len(n.Attr) > 0 {
+- if n.Attr[0].Key == "public" {
+- public := strings.ToLower(n.Attr[0].Val)
+- switch public {
+- case "-//w3o//dtd w3 html strict 3.0//en//", "-/w3d/dtd html 4.0 transitional/en", "html":
+- quirks = true
+- default:
+- for _, q := range quirkyIDs {
+- if strings.HasPrefix(public, q) {
+- quirks = true
+- break
+- }
+- }
+- }
+- // The following two public IDs only cause quirks mode if there is no system ID.
+- if len(n.Attr) == 1 && (strings.HasPrefix(public, "-//w3c//dtd html 4.01 frameset//") ||
+- strings.HasPrefix(public, "-//w3c//dtd html 4.01 transitional//")) {
+- quirks = true
+- }
+- }
+- if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" &&
+- strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" {
+- quirks = true
+- }
+- }
+-
+- return n, quirks
+-}
+-
+-// quirkyIDs is a list of public doctype identifiers that cause a document
+-// to be interpreted in quirks mode. The identifiers should be in lower case.
+-var quirkyIDs = []string{
+- "+//silmaril//dtd html pro v0r11 19970101//",
+- "-//advasoft ltd//dtd html 3.0 aswedit + extensions//",
+- "-//as//dtd html 3.0 aswedit + extensions//",
+- "-//ietf//dtd html 2.0 level 1//",
+- "-//ietf//dtd html 2.0 level 2//",
+- "-//ietf//dtd html 2.0 strict level 1//",
+- "-//ietf//dtd html 2.0 strict level 2//",
+- "-//ietf//dtd html 2.0 strict//",
+- "-//ietf//dtd html 2.0//",
+- "-//ietf//dtd html 2.1e//",
+- "-//ietf//dtd html 3.0//",
+- "-//ietf//dtd html 3.2 final//",
+- "-//ietf//dtd html 3.2//",
+- "-//ietf//dtd html 3//",
+- "-//ietf//dtd html level 0//",
+- "-//ietf//dtd html level 1//",
+- "-//ietf//dtd html level 2//",
+- "-//ietf//dtd html level 3//",
+- "-//ietf//dtd html strict level 0//",
+- "-//ietf//dtd html strict level 1//",
+- "-//ietf//dtd html strict level 2//",
+- "-//ietf//dtd html strict level 3//",
+- "-//ietf//dtd html strict//",
+- "-//ietf//dtd html//",
+- "-//metrius//dtd metrius presentational//",
+- "-//microsoft//dtd internet explorer 2.0 html strict//",
+- "-//microsoft//dtd internet explorer 2.0 html//",
+- "-//microsoft//dtd internet explorer 2.0 tables//",
+- "-//microsoft//dtd internet explorer 3.0 html strict//",
+- "-//microsoft//dtd internet explorer 3.0 html//",
+- "-//microsoft//dtd internet explorer 3.0 tables//",
+- "-//netscape comm. corp.//dtd html//",
+- "-//netscape comm. corp.//dtd strict html//",
+- "-//o'reilly and associates//dtd html 2.0//",
+- "-//o'reilly and associates//dtd html extended 1.0//",
+- "-//o'reilly and associates//dtd html extended relaxed 1.0//",
+- "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//",
+- "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//",
+- "-//spyglass//dtd html 2.0 extended//",
+- "-//sq//dtd html 2.0 hotmetal + extensions//",
+- "-//sun microsystems corp.//dtd hotjava html//",
+- "-//sun microsystems corp.//dtd hotjava strict html//",
+- "-//w3c//dtd html 3 1995-03-24//",
+- "-//w3c//dtd html 3.2 draft//",
+- "-//w3c//dtd html 3.2 final//",
+- "-//w3c//dtd html 3.2//",
+- "-//w3c//dtd html 3.2s draft//",
+- "-//w3c//dtd html 4.0 frameset//",
+- "-//w3c//dtd html 4.0 transitional//",
+- "-//w3c//dtd html experimental 19960712//",
+- "-//w3c//dtd html experimental 970421//",
+- "-//w3c//dtd w3 html//",
+- "-//w3o//dtd w3 html 3.0//",
+- "-//webtechs//dtd mozilla html 2.0//",
+- "-//webtechs//dtd mozilla html//",
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/entity.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/entity.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/entity.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/entity.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,2253 +0,0 @@
+-// Copyright 2010 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 html
+-
+-// All entities that do not end with ';' are 6 or fewer bytes long.
+-const longestEntityWithoutSemicolon = 6
+-
+-// entity is a map from HTML entity names to their values. The semicolon matters:
+-// http://www.whatwg.org/specs/web-apps/current-work/multipage/named-character-references.html
+-// lists both "amp" and "amp;" as two separate entries.
+-//
+-// Note that the HTML5 list is larger than the HTML4 list at
+-// http://www.w3.org/TR/html4/sgml/entities.html
+-var entity = map[string]rune{
+- "AElig;": '\U000000C6',
+- "AMP;": '\U00000026',
+- "Aacute;": '\U000000C1',
+- "Abreve;": '\U00000102',
+- "Acirc;": '\U000000C2',
+- "Acy;": '\U00000410',
+- "Afr;": '\U0001D504',
+- "Agrave;": '\U000000C0',
+- "Alpha;": '\U00000391',
+- "Amacr;": '\U00000100',
+- "And;": '\U00002A53',
+- "Aogon;": '\U00000104',
+- "Aopf;": '\U0001D538',
+- "ApplyFunction;": '\U00002061',
+- "Aring;": '\U000000C5',
+- "Ascr;": '\U0001D49C',
+- "Assign;": '\U00002254',
+- "Atilde;": '\U000000C3',
+- "Auml;": '\U000000C4',
+- "Backslash;": '\U00002216',
+- "Barv;": '\U00002AE7',
+- "Barwed;": '\U00002306',
+- "Bcy;": '\U00000411',
+- "Because;": '\U00002235',
+- "Bernoullis;": '\U0000212C',
+- "Beta;": '\U00000392',
+- "Bfr;": '\U0001D505',
+- "Bopf;": '\U0001D539',
+- "Breve;": '\U000002D8',
+- "Bscr;": '\U0000212C',
+- "Bumpeq;": '\U0000224E',
+- "CHcy;": '\U00000427',
+- "COPY;": '\U000000A9',
+- "Cacute;": '\U00000106',
+- "Cap;": '\U000022D2',
+- "CapitalDifferentialD;": '\U00002145',
+- "Cayleys;": '\U0000212D',
+- "Ccaron;": '\U0000010C',
+- "Ccedil;": '\U000000C7',
+- "Ccirc;": '\U00000108',
+- "Cconint;": '\U00002230',
+- "Cdot;": '\U0000010A',
+- "Cedilla;": '\U000000B8',
+- "CenterDot;": '\U000000B7',
+- "Cfr;": '\U0000212D',
+- "Chi;": '\U000003A7',
+- "CircleDot;": '\U00002299',
+- "CircleMinus;": '\U00002296',
+- "CirclePlus;": '\U00002295',
+- "CircleTimes;": '\U00002297',
+- "ClockwiseContourIntegral;": '\U00002232',
+- "CloseCurlyDoubleQuote;": '\U0000201D',
+- "CloseCurlyQuote;": '\U00002019',
+- "Colon;": '\U00002237',
+- "Colone;": '\U00002A74',
+- "Congruent;": '\U00002261',
+- "Conint;": '\U0000222F',
+- "ContourIntegral;": '\U0000222E',
+- "Copf;": '\U00002102',
+- "Coproduct;": '\U00002210',
+- "CounterClockwiseContourIntegral;": '\U00002233',
+- "Cross;": '\U00002A2F',
+- "Cscr;": '\U0001D49E',
+- "Cup;": '\U000022D3',
+- "CupCap;": '\U0000224D',
+- "DD;": '\U00002145',
+- "DDotrahd;": '\U00002911',
+- "DJcy;": '\U00000402',
+- "DScy;": '\U00000405',
+- "DZcy;": '\U0000040F',
+- "Dagger;": '\U00002021',
+- "Darr;": '\U000021A1',
+- "Dashv;": '\U00002AE4',
+- "Dcaron;": '\U0000010E',
+- "Dcy;": '\U00000414',
+- "Del;": '\U00002207',
+- "Delta;": '\U00000394',
+- "Dfr;": '\U0001D507',
+- "DiacriticalAcute;": '\U000000B4',
+- "DiacriticalDot;": '\U000002D9',
+- "DiacriticalDoubleAcute;": '\U000002DD',
+- "DiacriticalGrave;": '\U00000060',
+- "DiacriticalTilde;": '\U000002DC',
+- "Diamond;": '\U000022C4',
+- "DifferentialD;": '\U00002146',
+- "Dopf;": '\U0001D53B',
+- "Dot;": '\U000000A8',
+- "DotDot;": '\U000020DC',
+- "DotEqual;": '\U00002250',
+- "DoubleContourIntegral;": '\U0000222F',
+- "DoubleDot;": '\U000000A8',
+- "DoubleDownArrow;": '\U000021D3',
+- "DoubleLeftArrow;": '\U000021D0',
+- "DoubleLeftRightArrow;": '\U000021D4',
+- "DoubleLeftTee;": '\U00002AE4',
+- "DoubleLongLeftArrow;": '\U000027F8',
+- "DoubleLongLeftRightArrow;": '\U000027FA',
+- "DoubleLongRightArrow;": '\U000027F9',
+- "DoubleRightArrow;": '\U000021D2',
+- "DoubleRightTee;": '\U000022A8',
+- "DoubleUpArrow;": '\U000021D1',
+- "DoubleUpDownArrow;": '\U000021D5',
+- "DoubleVerticalBar;": '\U00002225',
+- "DownArrow;": '\U00002193',
+- "DownArrowBar;": '\U00002913',
+- "DownArrowUpArrow;": '\U000021F5',
+- "DownBreve;": '\U00000311',
+- "DownLeftRightVector;": '\U00002950',
+- "DownLeftTeeVector;": '\U0000295E',
+- "DownLeftVector;": '\U000021BD',
+- "DownLeftVectorBar;": '\U00002956',
+- "DownRightTeeVector;": '\U0000295F',
+- "DownRightVector;": '\U000021C1',
+- "DownRightVectorBar;": '\U00002957',
+- "DownTee;": '\U000022A4',
+- "DownTeeArrow;": '\U000021A7',
+- "Downarrow;": '\U000021D3',
+- "Dscr;": '\U0001D49F',
+- "Dstrok;": '\U00000110',
+- "ENG;": '\U0000014A',
+- "ETH;": '\U000000D0',
+- "Eacute;": '\U000000C9',
+- "Ecaron;": '\U0000011A',
+- "Ecirc;": '\U000000CA',
+- "Ecy;": '\U0000042D',
+- "Edot;": '\U00000116',
+- "Efr;": '\U0001D508',
+- "Egrave;": '\U000000C8',
+- "Element;": '\U00002208',
+- "Emacr;": '\U00000112',
+- "EmptySmallSquare;": '\U000025FB',
+- "EmptyVerySmallSquare;": '\U000025AB',
+- "Eogon;": '\U00000118',
+- "Eopf;": '\U0001D53C',
+- "Epsilon;": '\U00000395',
+- "Equal;": '\U00002A75',
+- "EqualTilde;": '\U00002242',
+- "Equilibrium;": '\U000021CC',
+- "Escr;": '\U00002130',
+- "Esim;": '\U00002A73',
+- "Eta;": '\U00000397',
+- "Euml;": '\U000000CB',
+- "Exists;": '\U00002203',
+- "ExponentialE;": '\U00002147',
+- "Fcy;": '\U00000424',
+- "Ffr;": '\U0001D509',
+- "FilledSmallSquare;": '\U000025FC',
+- "FilledVerySmallSquare;": '\U000025AA',
+- "Fopf;": '\U0001D53D',
+- "ForAll;": '\U00002200',
+- "Fouriertrf;": '\U00002131',
+- "Fscr;": '\U00002131',
+- "GJcy;": '\U00000403',
+- "GT;": '\U0000003E',
+- "Gamma;": '\U00000393',
+- "Gammad;": '\U000003DC',
+- "Gbreve;": '\U0000011E',
+- "Gcedil;": '\U00000122',
+- "Gcirc;": '\U0000011C',
+- "Gcy;": '\U00000413',
+- "Gdot;": '\U00000120',
+- "Gfr;": '\U0001D50A',
+- "Gg;": '\U000022D9',
+- "Gopf;": '\U0001D53E',
+- "GreaterEqual;": '\U00002265',
+- "GreaterEqualLess;": '\U000022DB',
+- "GreaterFullEqual;": '\U00002267',
+- "GreaterGreater;": '\U00002AA2',
+- "GreaterLess;": '\U00002277',
+- "GreaterSlantEqual;": '\U00002A7E',
+- "GreaterTilde;": '\U00002273',
+- "Gscr;": '\U0001D4A2',
+- "Gt;": '\U0000226B',
+- "HARDcy;": '\U0000042A',
+- "Hacek;": '\U000002C7',
+- "Hat;": '\U0000005E',
+- "Hcirc;": '\U00000124',
+- "Hfr;": '\U0000210C',
+- "HilbertSpace;": '\U0000210B',
+- "Hopf;": '\U0000210D',
+- "HorizontalLine;": '\U00002500',
+- "Hscr;": '\U0000210B',
+- "Hstrok;": '\U00000126',
+- "HumpDownHump;": '\U0000224E',
+- "HumpEqual;": '\U0000224F',
+- "IEcy;": '\U00000415',
+- "IJlig;": '\U00000132',
+- "IOcy;": '\U00000401',
+- "Iacute;": '\U000000CD',
+- "Icirc;": '\U000000CE',
+- "Icy;": '\U00000418',
+- "Idot;": '\U00000130',
+- "Ifr;": '\U00002111',
+- "Igrave;": '\U000000CC',
+- "Im;": '\U00002111',
+- "Imacr;": '\U0000012A',
+- "ImaginaryI;": '\U00002148',
+- "Implies;": '\U000021D2',
+- "Int;": '\U0000222C',
+- "Integral;": '\U0000222B',
+- "Intersection;": '\U000022C2',
+- "InvisibleComma;": '\U00002063',
+- "InvisibleTimes;": '\U00002062',
+- "Iogon;": '\U0000012E',
+- "Iopf;": '\U0001D540',
+- "Iota;": '\U00000399',
+- "Iscr;": '\U00002110',
+- "Itilde;": '\U00000128',
+- "Iukcy;": '\U00000406',
+- "Iuml;": '\U000000CF',
+- "Jcirc;": '\U00000134',
+- "Jcy;": '\U00000419',
+- "Jfr;": '\U0001D50D',
+- "Jopf;": '\U0001D541',
+- "Jscr;": '\U0001D4A5',
+- "Jsercy;": '\U00000408',
+- "Jukcy;": '\U00000404',
+- "KHcy;": '\U00000425',
+- "KJcy;": '\U0000040C',
+- "Kappa;": '\U0000039A',
+- "Kcedil;": '\U00000136',
+- "Kcy;": '\U0000041A',
+- "Kfr;": '\U0001D50E',
+- "Kopf;": '\U0001D542',
+- "Kscr;": '\U0001D4A6',
+- "LJcy;": '\U00000409',
+- "LT;": '\U0000003C',
+- "Lacute;": '\U00000139',
+- "Lambda;": '\U0000039B',
+- "Lang;": '\U000027EA',
+- "Laplacetrf;": '\U00002112',
+- "Larr;": '\U0000219E',
+- "Lcaron;": '\U0000013D',
+- "Lcedil;": '\U0000013B',
+- "Lcy;": '\U0000041B',
+- "LeftAngleBracket;": '\U000027E8',
+- "LeftArrow;": '\U00002190',
+- "LeftArrowBar;": '\U000021E4',
+- "LeftArrowRightArrow;": '\U000021C6',
+- "LeftCeiling;": '\U00002308',
+- "LeftDoubleBracket;": '\U000027E6',
+- "LeftDownTeeVector;": '\U00002961',
+- "LeftDownVector;": '\U000021C3',
+- "LeftDownVectorBar;": '\U00002959',
+- "LeftFloor;": '\U0000230A',
+- "LeftRightArrow;": '\U00002194',
+- "LeftRightVector;": '\U0000294E',
+- "LeftTee;": '\U000022A3',
+- "LeftTeeArrow;": '\U000021A4',
+- "LeftTeeVector;": '\U0000295A',
+- "LeftTriangle;": '\U000022B2',
+- "LeftTriangleBar;": '\U000029CF',
+- "LeftTriangleEqual;": '\U000022B4',
+- "LeftUpDownVector;": '\U00002951',
+- "LeftUpTeeVector;": '\U00002960',
+- "LeftUpVector;": '\U000021BF',
+- "LeftUpVectorBar;": '\U00002958',
+- "LeftVector;": '\U000021BC',
+- "LeftVectorBar;": '\U00002952',
+- "Leftarrow;": '\U000021D0',
+- "Leftrightarrow;": '\U000021D4',
+- "LessEqualGreater;": '\U000022DA',
+- "LessFullEqual;": '\U00002266',
+- "LessGreater;": '\U00002276',
+- "LessLess;": '\U00002AA1',
+- "LessSlantEqual;": '\U00002A7D',
+- "LessTilde;": '\U00002272',
+- "Lfr;": '\U0001D50F',
+- "Ll;": '\U000022D8',
+- "Lleftarrow;": '\U000021DA',
+- "Lmidot;": '\U0000013F',
+- "LongLeftArrow;": '\U000027F5',
+- "LongLeftRightArrow;": '\U000027F7',
+- "LongRightArrow;": '\U000027F6',
+- "Longleftarrow;": '\U000027F8',
+- "Longleftrightarrow;": '\U000027FA',
+- "Longrightarrow;": '\U000027F9',
+- "Lopf;": '\U0001D543',
+- "LowerLeftArrow;": '\U00002199',
+- "LowerRightArrow;": '\U00002198',
+- "Lscr;": '\U00002112',
+- "Lsh;": '\U000021B0',
+- "Lstrok;": '\U00000141',
+- "Lt;": '\U0000226A',
+- "Map;": '\U00002905',
+- "Mcy;": '\U0000041C',
+- "MediumSpace;": '\U0000205F',
+- "Mellintrf;": '\U00002133',
+- "Mfr;": '\U0001D510',
+- "MinusPlus;": '\U00002213',
+- "Mopf;": '\U0001D544',
+- "Mscr;": '\U00002133',
+- "Mu;": '\U0000039C',
+- "NJcy;": '\U0000040A',
+- "Nacute;": '\U00000143',
+- "Ncaron;": '\U00000147',
+- "Ncedil;": '\U00000145',
+- "Ncy;": '\U0000041D',
+- "NegativeMediumSpace;": '\U0000200B',
+- "NegativeThickSpace;": '\U0000200B',
+- "NegativeThinSpace;": '\U0000200B',
+- "NegativeVeryThinSpace;": '\U0000200B',
+- "NestedGreaterGreater;": '\U0000226B',
+- "NestedLessLess;": '\U0000226A',
+- "NewLine;": '\U0000000A',
+- "Nfr;": '\U0001D511',
+- "NoBreak;": '\U00002060',
+- "NonBreakingSpace;": '\U000000A0',
+- "Nopf;": '\U00002115',
+- "Not;": '\U00002AEC',
+- "NotCongruent;": '\U00002262',
+- "NotCupCap;": '\U0000226D',
+- "NotDoubleVerticalBar;": '\U00002226',
+- "NotElement;": '\U00002209',
+- "NotEqual;": '\U00002260',
+- "NotExists;": '\U00002204',
+- "NotGreater;": '\U0000226F',
+- "NotGreaterEqual;": '\U00002271',
+- "NotGreaterLess;": '\U00002279',
+- "NotGreaterTilde;": '\U00002275',
+- "NotLeftTriangle;": '\U000022EA',
+- "NotLeftTriangleEqual;": '\U000022EC',
+- "NotLess;": '\U0000226E',
+- "NotLessEqual;": '\U00002270',
+- "NotLessGreater;": '\U00002278',
+- "NotLessTilde;": '\U00002274',
+- "NotPrecedes;": '\U00002280',
+- "NotPrecedesSlantEqual;": '\U000022E0',
+- "NotReverseElement;": '\U0000220C',
+- "NotRightTriangle;": '\U000022EB',
+- "NotRightTriangleEqual;": '\U000022ED',
+- "NotSquareSubsetEqual;": '\U000022E2',
+- "NotSquareSupersetEqual;": '\U000022E3',
+- "NotSubsetEqual;": '\U00002288',
+- "NotSucceeds;": '\U00002281',
+- "NotSucceedsSlantEqual;": '\U000022E1',
+- "NotSupersetEqual;": '\U00002289',
+- "NotTilde;": '\U00002241',
+- "NotTildeEqual;": '\U00002244',
+- "NotTildeFullEqual;": '\U00002247',
+- "NotTildeTilde;": '\U00002249',
+- "NotVerticalBar;": '\U00002224',
+- "Nscr;": '\U0001D4A9',
+- "Ntilde;": '\U000000D1',
+- "Nu;": '\U0000039D',
+- "OElig;": '\U00000152',
+- "Oacute;": '\U000000D3',
+- "Ocirc;": '\U000000D4',
+- "Ocy;": '\U0000041E',
+- "Odblac;": '\U00000150',
+- "Ofr;": '\U0001D512',
+- "Ograve;": '\U000000D2',
+- "Omacr;": '\U0000014C',
+- "Omega;": '\U000003A9',
+- "Omicron;": '\U0000039F',
+- "Oopf;": '\U0001D546',
+- "OpenCurlyDoubleQuote;": '\U0000201C',
+- "OpenCurlyQuote;": '\U00002018',
+- "Or;": '\U00002A54',
+- "Oscr;": '\U0001D4AA',
+- "Oslash;": '\U000000D8',
+- "Otilde;": '\U000000D5',
+- "Otimes;": '\U00002A37',
+- "Ouml;": '\U000000D6',
+- "OverBar;": '\U0000203E',
+- "OverBrace;": '\U000023DE',
+- "OverBracket;": '\U000023B4',
+- "OverParenthesis;": '\U000023DC',
+- "PartialD;": '\U00002202',
+- "Pcy;": '\U0000041F',
+- "Pfr;": '\U0001D513',
+- "Phi;": '\U000003A6',
+- "Pi;": '\U000003A0',
+- "PlusMinus;": '\U000000B1',
+- "Poincareplane;": '\U0000210C',
+- "Popf;": '\U00002119',
+- "Pr;": '\U00002ABB',
+- "Precedes;": '\U0000227A',
+- "PrecedesEqual;": '\U00002AAF',
+- "PrecedesSlantEqual;": '\U0000227C',
+- "PrecedesTilde;": '\U0000227E',
+- "Prime;": '\U00002033',
+- "Product;": '\U0000220F',
+- "Proportion;": '\U00002237',
+- "Proportional;": '\U0000221D',
+- "Pscr;": '\U0001D4AB',
+- "Psi;": '\U000003A8',
+- "QUOT;": '\U00000022',
+- "Qfr;": '\U0001D514',
+- "Qopf;": '\U0000211A',
+- "Qscr;": '\U0001D4AC',
+- "RBarr;": '\U00002910',
+- "REG;": '\U000000AE',
+- "Racute;": '\U00000154',
+- "Rang;": '\U000027EB',
+- "Rarr;": '\U000021A0',
+- "Rarrtl;": '\U00002916',
+- "Rcaron;": '\U00000158',
+- "Rcedil;": '\U00000156',
+- "Rcy;": '\U00000420',
+- "Re;": '\U0000211C',
+- "ReverseElement;": '\U0000220B',
+- "ReverseEquilibrium;": '\U000021CB',
+- "ReverseUpEquilibrium;": '\U0000296F',
+- "Rfr;": '\U0000211C',
+- "Rho;": '\U000003A1',
+- "RightAngleBracket;": '\U000027E9',
+- "RightArrow;": '\U00002192',
+- "RightArrowBar;": '\U000021E5',
+- "RightArrowLeftArrow;": '\U000021C4',
+- "RightCeiling;": '\U00002309',
+- "RightDoubleBracket;": '\U000027E7',
+- "RightDownTeeVector;": '\U0000295D',
+- "RightDownVector;": '\U000021C2',
+- "RightDownVectorBar;": '\U00002955',
+- "RightFloor;": '\U0000230B',
+- "RightTee;": '\U000022A2',
+- "RightTeeArrow;": '\U000021A6',
+- "RightTeeVector;": '\U0000295B',
+- "RightTriangle;": '\U000022B3',
+- "RightTriangleBar;": '\U000029D0',
+- "RightTriangleEqual;": '\U000022B5',
+- "RightUpDownVector;": '\U0000294F',
+- "RightUpTeeVector;": '\U0000295C',
+- "RightUpVector;": '\U000021BE',
+- "RightUpVectorBar;": '\U00002954',
+- "RightVector;": '\U000021C0',
+- "RightVectorBar;": '\U00002953',
+- "Rightarrow;": '\U000021D2',
+- "Ropf;": '\U0000211D',
+- "RoundImplies;": '\U00002970',
+- "Rrightarrow;": '\U000021DB',
+- "Rscr;": '\U0000211B',
+- "Rsh;": '\U000021B1',
+- "RuleDelayed;": '\U000029F4',
+- "SHCHcy;": '\U00000429',
+- "SHcy;": '\U00000428',
+- "SOFTcy;": '\U0000042C',
+- "Sacute;": '\U0000015A',
+- "Sc;": '\U00002ABC',
+- "Scaron;": '\U00000160',
+- "Scedil;": '\U0000015E',
+- "Scirc;": '\U0000015C',
+- "Scy;": '\U00000421',
+- "Sfr;": '\U0001D516',
+- "ShortDownArrow;": '\U00002193',
+- "ShortLeftArrow;": '\U00002190',
+- "ShortRightArrow;": '\U00002192',
+- "ShortUpArrow;": '\U00002191',
+- "Sigma;": '\U000003A3',
+- "SmallCircle;": '\U00002218',
+- "Sopf;": '\U0001D54A',
+- "Sqrt;": '\U0000221A',
+- "Square;": '\U000025A1',
+- "SquareIntersection;": '\U00002293',
+- "SquareSubset;": '\U0000228F',
+- "SquareSubsetEqual;": '\U00002291',
+- "SquareSuperset;": '\U00002290',
+- "SquareSupersetEqual;": '\U00002292',
+- "SquareUnion;": '\U00002294',
+- "Sscr;": '\U0001D4AE',
+- "Star;": '\U000022C6',
+- "Sub;": '\U000022D0',
+- "Subset;": '\U000022D0',
+- "SubsetEqual;": '\U00002286',
+- "Succeeds;": '\U0000227B',
+- "SucceedsEqual;": '\U00002AB0',
+- "SucceedsSlantEqual;": '\U0000227D',
+- "SucceedsTilde;": '\U0000227F',
+- "SuchThat;": '\U0000220B',
+- "Sum;": '\U00002211',
+- "Sup;": '\U000022D1',
+- "Superset;": '\U00002283',
+- "SupersetEqual;": '\U00002287',
+- "Supset;": '\U000022D1',
+- "THORN;": '\U000000DE',
+- "TRADE;": '\U00002122',
+- "TSHcy;": '\U0000040B',
+- "TScy;": '\U00000426',
+- "Tab;": '\U00000009',
+- "Tau;": '\U000003A4',
+- "Tcaron;": '\U00000164',
+- "Tcedil;": '\U00000162',
+- "Tcy;": '\U00000422',
+- "Tfr;": '\U0001D517',
+- "Therefore;": '\U00002234',
+- "Theta;": '\U00000398',
+- "ThinSpace;": '\U00002009',
+- "Tilde;": '\U0000223C',
+- "TildeEqual;": '\U00002243',
+- "TildeFullEqual;": '\U00002245',
+- "TildeTilde;": '\U00002248',
+- "Topf;": '\U0001D54B',
+- "TripleDot;": '\U000020DB',
+- "Tscr;": '\U0001D4AF',
+- "Tstrok;": '\U00000166',
+- "Uacute;": '\U000000DA',
+- "Uarr;": '\U0000219F',
+- "Uarrocir;": '\U00002949',
+- "Ubrcy;": '\U0000040E',
+- "Ubreve;": '\U0000016C',
+- "Ucirc;": '\U000000DB',
+- "Ucy;": '\U00000423',
+- "Udblac;": '\U00000170',
+- "Ufr;": '\U0001D518',
+- "Ugrave;": '\U000000D9',
+- "Umacr;": '\U0000016A',
+- "UnderBar;": '\U0000005F',
+- "UnderBrace;": '\U000023DF',
+- "UnderBracket;": '\U000023B5',
+- "UnderParenthesis;": '\U000023DD',
+- "Union;": '\U000022C3',
+- "UnionPlus;": '\U0000228E',
+- "Uogon;": '\U00000172',
+- "Uopf;": '\U0001D54C',
+- "UpArrow;": '\U00002191',
+- "UpArrowBar;": '\U00002912',
+- "UpArrowDownArrow;": '\U000021C5',
+- "UpDownArrow;": '\U00002195',
+- "UpEquilibrium;": '\U0000296E',
+- "UpTee;": '\U000022A5',
+- "UpTeeArrow;": '\U000021A5',
+- "Uparrow;": '\U000021D1',
+- "Updownarrow;": '\U000021D5',
+- "UpperLeftArrow;": '\U00002196',
+- "UpperRightArrow;": '\U00002197',
+- "Upsi;": '\U000003D2',
+- "Upsilon;": '\U000003A5',
+- "Uring;": '\U0000016E',
+- "Uscr;": '\U0001D4B0',
+- "Utilde;": '\U00000168',
+- "Uuml;": '\U000000DC',
+- "VDash;": '\U000022AB',
+- "Vbar;": '\U00002AEB',
+- "Vcy;": '\U00000412',
+- "Vdash;": '\U000022A9',
+- "Vdashl;": '\U00002AE6',
+- "Vee;": '\U000022C1',
+- "Verbar;": '\U00002016',
+- "Vert;": '\U00002016',
+- "VerticalBar;": '\U00002223',
+- "VerticalLine;": '\U0000007C',
+- "VerticalSeparator;": '\U00002758',
+- "VerticalTilde;": '\U00002240',
+- "VeryThinSpace;": '\U0000200A',
+- "Vfr;": '\U0001D519',
+- "Vopf;": '\U0001D54D',
+- "Vscr;": '\U0001D4B1',
+- "Vvdash;": '\U000022AA',
+- "Wcirc;": '\U00000174',
+- "Wedge;": '\U000022C0',
+- "Wfr;": '\U0001D51A',
+- "Wopf;": '\U0001D54E',
+- "Wscr;": '\U0001D4B2',
+- "Xfr;": '\U0001D51B',
+- "Xi;": '\U0000039E',
+- "Xopf;": '\U0001D54F',
+- "Xscr;": '\U0001D4B3',
+- "YAcy;": '\U0000042F',
+- "YIcy;": '\U00000407',
+- "YUcy;": '\U0000042E',
+- "Yacute;": '\U000000DD',
+- "Ycirc;": '\U00000176',
+- "Ycy;": '\U0000042B',
+- "Yfr;": '\U0001D51C',
+- "Yopf;": '\U0001D550',
+- "Yscr;": '\U0001D4B4',
+- "Yuml;": '\U00000178',
+- "ZHcy;": '\U00000416',
+- "Zacute;": '\U00000179',
+- "Zcaron;": '\U0000017D',
+- "Zcy;": '\U00000417',
+- "Zdot;": '\U0000017B',
+- "ZeroWidthSpace;": '\U0000200B',
+- "Zeta;": '\U00000396',
+- "Zfr;": '\U00002128',
+- "Zopf;": '\U00002124',
+- "Zscr;": '\U0001D4B5',
+- "aacute;": '\U000000E1',
+- "abreve;": '\U00000103',
+- "ac;": '\U0000223E',
+- "acd;": '\U0000223F',
+- "acirc;": '\U000000E2',
+- "acute;": '\U000000B4',
+- "acy;": '\U00000430',
+- "aelig;": '\U000000E6',
+- "af;": '\U00002061',
+- "afr;": '\U0001D51E',
+- "agrave;": '\U000000E0',
+- "alefsym;": '\U00002135',
+- "aleph;": '\U00002135',
+- "alpha;": '\U000003B1',
+- "amacr;": '\U00000101',
+- "amalg;": '\U00002A3F',
+- "amp;": '\U00000026',
+- "and;": '\U00002227',
+- "andand;": '\U00002A55',
+- "andd;": '\U00002A5C',
+- "andslope;": '\U00002A58',
+- "andv;": '\U00002A5A',
+- "ang;": '\U00002220',
+- "ange;": '\U000029A4',
+- "angle;": '\U00002220',
+- "angmsd;": '\U00002221',
+- "angmsdaa;": '\U000029A8',
+- "angmsdab;": '\U000029A9',
+- "angmsdac;": '\U000029AA',
+- "angmsdad;": '\U000029AB',
+- "angmsdae;": '\U000029AC',
+- "angmsdaf;": '\U000029AD',
+- "angmsdag;": '\U000029AE',
+- "angmsdah;": '\U000029AF',
+- "angrt;": '\U0000221F',
+- "angrtvb;": '\U000022BE',
+- "angrtvbd;": '\U0000299D',
+- "angsph;": '\U00002222',
+- "angst;": '\U000000C5',
+- "angzarr;": '\U0000237C',
+- "aogon;": '\U00000105',
+- "aopf;": '\U0001D552',
+- "ap;": '\U00002248',
+- "apE;": '\U00002A70',
+- "apacir;": '\U00002A6F',
+- "ape;": '\U0000224A',
+- "apid;": '\U0000224B',
+- "apos;": '\U00000027',
+- "approx;": '\U00002248',
+- "approxeq;": '\U0000224A',
+- "aring;": '\U000000E5',
+- "ascr;": '\U0001D4B6',
+- "ast;": '\U0000002A',
+- "asymp;": '\U00002248',
+- "asympeq;": '\U0000224D',
+- "atilde;": '\U000000E3',
+- "auml;": '\U000000E4',
+- "awconint;": '\U00002233',
+- "awint;": '\U00002A11',
+- "bNot;": '\U00002AED',
+- "backcong;": '\U0000224C',
+- "backepsilon;": '\U000003F6',
+- "backprime;": '\U00002035',
+- "backsim;": '\U0000223D',
+- "backsimeq;": '\U000022CD',
+- "barvee;": '\U000022BD',
+- "barwed;": '\U00002305',
+- "barwedge;": '\U00002305',
+- "bbrk;": '\U000023B5',
+- "bbrktbrk;": '\U000023B6',
+- "bcong;": '\U0000224C',
+- "bcy;": '\U00000431',
+- "bdquo;": '\U0000201E',
+- "becaus;": '\U00002235',
+- "because;": '\U00002235',
+- "bemptyv;": '\U000029B0',
+- "bepsi;": '\U000003F6',
+- "bernou;": '\U0000212C',
+- "beta;": '\U000003B2',
+- "beth;": '\U00002136',
+- "between;": '\U0000226C',
+- "bfr;": '\U0001D51F',
+- "bigcap;": '\U000022C2',
+- "bigcirc;": '\U000025EF',
+- "bigcup;": '\U000022C3',
+- "bigodot;": '\U00002A00',
+- "bigoplus;": '\U00002A01',
+- "bigotimes;": '\U00002A02',
+- "bigsqcup;": '\U00002A06',
+- "bigstar;": '\U00002605',
+- "bigtriangledown;": '\U000025BD',
+- "bigtriangleup;": '\U000025B3',
+- "biguplus;": '\U00002A04',
+- "bigvee;": '\U000022C1',
+- "bigwedge;": '\U000022C0',
+- "bkarow;": '\U0000290D',
+- "blacklozenge;": '\U000029EB',
+- "blacksquare;": '\U000025AA',
+- "blacktriangle;": '\U000025B4',
+- "blacktriangledown;": '\U000025BE',
+- "blacktriangleleft;": '\U000025C2',
+- "blacktriangleright;": '\U000025B8',
+- "blank;": '\U00002423',
+- "blk12;": '\U00002592',
+- "blk14;": '\U00002591',
+- "blk34;": '\U00002593',
+- "block;": '\U00002588',
+- "bnot;": '\U00002310',
+- "bopf;": '\U0001D553',
+- "bot;": '\U000022A5',
+- "bottom;": '\U000022A5',
+- "bowtie;": '\U000022C8',
+- "boxDL;": '\U00002557',
+- "boxDR;": '\U00002554',
+- "boxDl;": '\U00002556',
+- "boxDr;": '\U00002553',
+- "boxH;": '\U00002550',
+- "boxHD;": '\U00002566',
+- "boxHU;": '\U00002569',
+- "boxHd;": '\U00002564',
+- "boxHu;": '\U00002567',
+- "boxUL;": '\U0000255D',
+- "boxUR;": '\U0000255A',
+- "boxUl;": '\U0000255C',
+- "boxUr;": '\U00002559',
+- "boxV;": '\U00002551',
+- "boxVH;": '\U0000256C',
+- "boxVL;": '\U00002563',
+- "boxVR;": '\U00002560',
+- "boxVh;": '\U0000256B',
+- "boxVl;": '\U00002562',
+- "boxVr;": '\U0000255F',
+- "boxbox;": '\U000029C9',
+- "boxdL;": '\U00002555',
+- "boxdR;": '\U00002552',
+- "boxdl;": '\U00002510',
+- "boxdr;": '\U0000250C',
+- "boxh;": '\U00002500',
+- "boxhD;": '\U00002565',
+- "boxhU;": '\U00002568',
+- "boxhd;": '\U0000252C',
+- "boxhu;": '\U00002534',
+- "boxminus;": '\U0000229F',
+- "boxplus;": '\U0000229E',
+- "boxtimes;": '\U000022A0',
+- "boxuL;": '\U0000255B',
+- "boxuR;": '\U00002558',
+- "boxul;": '\U00002518',
+- "boxur;": '\U00002514',
+- "boxv;": '\U00002502',
+- "boxvH;": '\U0000256A',
+- "boxvL;": '\U00002561',
+- "boxvR;": '\U0000255E',
+- "boxvh;": '\U0000253C',
+- "boxvl;": '\U00002524',
+- "boxvr;": '\U0000251C',
+- "bprime;": '\U00002035',
+- "breve;": '\U000002D8',
+- "brvbar;": '\U000000A6',
+- "bscr;": '\U0001D4B7',
+- "bsemi;": '\U0000204F',
+- "bsim;": '\U0000223D',
+- "bsime;": '\U000022CD',
+- "bsol;": '\U0000005C',
+- "bsolb;": '\U000029C5',
+- "bsolhsub;": '\U000027C8',
+- "bull;": '\U00002022',
+- "bullet;": '\U00002022',
+- "bump;": '\U0000224E',
+- "bumpE;": '\U00002AAE',
+- "bumpe;": '\U0000224F',
+- "bumpeq;": '\U0000224F',
+- "cacute;": '\U00000107',
+- "cap;": '\U00002229',
+- "capand;": '\U00002A44',
+- "capbrcup;": '\U00002A49',
+- "capcap;": '\U00002A4B',
+- "capcup;": '\U00002A47',
+- "capdot;": '\U00002A40',
+- "caret;": '\U00002041',
+- "caron;": '\U000002C7',
+- "ccaps;": '\U00002A4D',
+- "ccaron;": '\U0000010D',
+- "ccedil;": '\U000000E7',
+- "ccirc;": '\U00000109',
+- "ccups;": '\U00002A4C',
+- "ccupssm;": '\U00002A50',
+- "cdot;": '\U0000010B',
+- "cedil;": '\U000000B8',
+- "cemptyv;": '\U000029B2',
+- "cent;": '\U000000A2',
+- "centerdot;": '\U000000B7',
+- "cfr;": '\U0001D520',
+- "chcy;": '\U00000447',
+- "check;": '\U00002713',
+- "checkmark;": '\U00002713',
+- "chi;": '\U000003C7',
+- "cir;": '\U000025CB',
+- "cirE;": '\U000029C3',
+- "circ;": '\U000002C6',
+- "circeq;": '\U00002257',
+- "circlearrowleft;": '\U000021BA',
+- "circlearrowright;": '\U000021BB',
+- "circledR;": '\U000000AE',
+- "circledS;": '\U000024C8',
+- "circledast;": '\U0000229B',
+- "circledcirc;": '\U0000229A',
+- "circleddash;": '\U0000229D',
+- "cire;": '\U00002257',
+- "cirfnint;": '\U00002A10',
+- "cirmid;": '\U00002AEF',
+- "cirscir;": '\U000029C2',
+- "clubs;": '\U00002663',
+- "clubsuit;": '\U00002663',
+- "colon;": '\U0000003A',
+- "colone;": '\U00002254',
+- "coloneq;": '\U00002254',
+- "comma;": '\U0000002C',
+- "commat;": '\U00000040',
+- "comp;": '\U00002201',
+- "compfn;": '\U00002218',
+- "complement;": '\U00002201',
+- "complexes;": '\U00002102',
+- "cong;": '\U00002245',
+- "congdot;": '\U00002A6D',
+- "conint;": '\U0000222E',
+- "copf;": '\U0001D554',
+- "coprod;": '\U00002210',
+- "copy;": '\U000000A9',
+- "copysr;": '\U00002117',
+- "crarr;": '\U000021B5',
+- "cross;": '\U00002717',
+- "cscr;": '\U0001D4B8',
+- "csub;": '\U00002ACF',
+- "csube;": '\U00002AD1',
+- "csup;": '\U00002AD0',
+- "csupe;": '\U00002AD2',
+- "ctdot;": '\U000022EF',
+- "cudarrl;": '\U00002938',
+- "cudarrr;": '\U00002935',
+- "cuepr;": '\U000022DE',
+- "cuesc;": '\U000022DF',
+- "cularr;": '\U000021B6',
+- "cularrp;": '\U0000293D',
+- "cup;": '\U0000222A',
+- "cupbrcap;": '\U00002A48',
+- "cupcap;": '\U00002A46',
+- "cupcup;": '\U00002A4A',
+- "cupdot;": '\U0000228D',
+- "cupor;": '\U00002A45',
+- "curarr;": '\U000021B7',
+- "curarrm;": '\U0000293C',
+- "curlyeqprec;": '\U000022DE',
+- "curlyeqsucc;": '\U000022DF',
+- "curlyvee;": '\U000022CE',
+- "curlywedge;": '\U000022CF',
+- "curren;": '\U000000A4',
+- "curvearrowleft;": '\U000021B6',
+- "curvearrowright;": '\U000021B7',
+- "cuvee;": '\U000022CE',
+- "cuwed;": '\U000022CF',
+- "cwconint;": '\U00002232',
+- "cwint;": '\U00002231',
+- "cylcty;": '\U0000232D',
+- "dArr;": '\U000021D3',
+- "dHar;": '\U00002965',
+- "dagger;": '\U00002020',
+- "daleth;": '\U00002138',
+- "darr;": '\U00002193',
+- "dash;": '\U00002010',
+- "dashv;": '\U000022A3',
+- "dbkarow;": '\U0000290F',
+- "dblac;": '\U000002DD',
+- "dcaron;": '\U0000010F',
+- "dcy;": '\U00000434',
+- "dd;": '\U00002146',
+- "ddagger;": '\U00002021',
+- "ddarr;": '\U000021CA',
+- "ddotseq;": '\U00002A77',
+- "deg;": '\U000000B0',
+- "delta;": '\U000003B4',
+- "demptyv;": '\U000029B1',
+- "dfisht;": '\U0000297F',
+- "dfr;": '\U0001D521',
+- "dharl;": '\U000021C3',
+- "dharr;": '\U000021C2',
+- "diam;": '\U000022C4',
+- "diamond;": '\U000022C4',
+- "diamondsuit;": '\U00002666',
+- "diams;": '\U00002666',
+- "die;": '\U000000A8',
+- "digamma;": '\U000003DD',
+- "disin;": '\U000022F2',
+- "div;": '\U000000F7',
+- "divide;": '\U000000F7',
+- "divideontimes;": '\U000022C7',
+- "divonx;": '\U000022C7',
+- "djcy;": '\U00000452',
+- "dlcorn;": '\U0000231E',
+- "dlcrop;": '\U0000230D',
+- "dollar;": '\U00000024',
+- "dopf;": '\U0001D555',
+- "dot;": '\U000002D9',
+- "doteq;": '\U00002250',
+- "doteqdot;": '\U00002251',
+- "dotminus;": '\U00002238',
+- "dotplus;": '\U00002214',
+- "dotsquare;": '\U000022A1',
+- "doublebarwedge;": '\U00002306',
+- "downarrow;": '\U00002193',
+- "downdownarrows;": '\U000021CA',
+- "downharpoonleft;": '\U000021C3',
+- "downharpoonright;": '\U000021C2',
+- "drbkarow;": '\U00002910',
+- "drcorn;": '\U0000231F',
+- "drcrop;": '\U0000230C',
+- "dscr;": '\U0001D4B9',
+- "dscy;": '\U00000455',
+- "dsol;": '\U000029F6',
+- "dstrok;": '\U00000111',
+- "dtdot;": '\U000022F1',
+- "dtri;": '\U000025BF',
+- "dtrif;": '\U000025BE',
+- "duarr;": '\U000021F5',
+- "duhar;": '\U0000296F',
+- "dwangle;": '\U000029A6',
+- "dzcy;": '\U0000045F',
+- "dzigrarr;": '\U000027FF',
+- "eDDot;": '\U00002A77',
+- "eDot;": '\U00002251',
+- "eacute;": '\U000000E9',
+- "easter;": '\U00002A6E',
+- "ecaron;": '\U0000011B',
+- "ecir;": '\U00002256',
+- "ecirc;": '\U000000EA',
+- "ecolon;": '\U00002255',
+- "ecy;": '\U0000044D',
+- "edot;": '\U00000117',
+- "ee;": '\U00002147',
+- "efDot;": '\U00002252',
+- "efr;": '\U0001D522',
+- "eg;": '\U00002A9A',
+- "egrave;": '\U000000E8',
+- "egs;": '\U00002A96',
+- "egsdot;": '\U00002A98',
+- "el;": '\U00002A99',
+- "elinters;": '\U000023E7',
+- "ell;": '\U00002113',
+- "els;": '\U00002A95',
+- "elsdot;": '\U00002A97',
+- "emacr;": '\U00000113',
+- "empty;": '\U00002205',
+- "emptyset;": '\U00002205',
+- "emptyv;": '\U00002205',
+- "emsp;": '\U00002003',
+- "emsp13;": '\U00002004',
+- "emsp14;": '\U00002005',
+- "eng;": '\U0000014B',
+- "ensp;": '\U00002002',
+- "eogon;": '\U00000119',
+- "eopf;": '\U0001D556',
+- "epar;": '\U000022D5',
+- "eparsl;": '\U000029E3',
+- "eplus;": '\U00002A71',
+- "epsi;": '\U000003B5',
+- "epsilon;": '\U000003B5',
+- "epsiv;": '\U000003F5',
+- "eqcirc;": '\U00002256',
+- "eqcolon;": '\U00002255',
+- "eqsim;": '\U00002242',
+- "eqslantgtr;": '\U00002A96',
+- "eqslantless;": '\U00002A95',
+- "equals;": '\U0000003D',
+- "equest;": '\U0000225F',
+- "equiv;": '\U00002261',
+- "equivDD;": '\U00002A78',
+- "eqvparsl;": '\U000029E5',
+- "erDot;": '\U00002253',
+- "erarr;": '\U00002971',
+- "escr;": '\U0000212F',
+- "esdot;": '\U00002250',
+- "esim;": '\U00002242',
+- "eta;": '\U000003B7',
+- "eth;": '\U000000F0',
+- "euml;": '\U000000EB',
+- "euro;": '\U000020AC',
+- "excl;": '\U00000021',
+- "exist;": '\U00002203',
+- "expectation;": '\U00002130',
+- "exponentiale;": '\U00002147',
+- "fallingdotseq;": '\U00002252',
+- "fcy;": '\U00000444',
+- "female;": '\U00002640',
+- "ffilig;": '\U0000FB03',
+- "fflig;": '\U0000FB00',
+- "ffllig;": '\U0000FB04',
+- "ffr;": '\U0001D523',
+- "filig;": '\U0000FB01',
+- "flat;": '\U0000266D',
+- "fllig;": '\U0000FB02',
+- "fltns;": '\U000025B1',
+- "fnof;": '\U00000192',
+- "fopf;": '\U0001D557',
+- "forall;": '\U00002200',
+- "fork;": '\U000022D4',
+- "forkv;": '\U00002AD9',
+- "fpartint;": '\U00002A0D',
+- "frac12;": '\U000000BD',
+- "frac13;": '\U00002153',
+- "frac14;": '\U000000BC',
+- "frac15;": '\U00002155',
+- "frac16;": '\U00002159',
+- "frac18;": '\U0000215B',
+- "frac23;": '\U00002154',
+- "frac25;": '\U00002156',
+- "frac34;": '\U000000BE',
+- "frac35;": '\U00002157',
+- "frac38;": '\U0000215C',
+- "frac45;": '\U00002158',
+- "frac56;": '\U0000215A',
+- "frac58;": '\U0000215D',
+- "frac78;": '\U0000215E',
+- "frasl;": '\U00002044',
+- "frown;": '\U00002322',
+- "fscr;": '\U0001D4BB',
+- "gE;": '\U00002267',
+- "gEl;": '\U00002A8C',
+- "gacute;": '\U000001F5',
+- "gamma;": '\U000003B3',
+- "gammad;": '\U000003DD',
+- "gap;": '\U00002A86',
+- "gbreve;": '\U0000011F',
+- "gcirc;": '\U0000011D',
+- "gcy;": '\U00000433',
+- "gdot;": '\U00000121',
+- "ge;": '\U00002265',
+- "gel;": '\U000022DB',
+- "geq;": '\U00002265',
+- "geqq;": '\U00002267',
+- "geqslant;": '\U00002A7E',
+- "ges;": '\U00002A7E',
+- "gescc;": '\U00002AA9',
+- "gesdot;": '\U00002A80',
+- "gesdoto;": '\U00002A82',
+- "gesdotol;": '\U00002A84',
+- "gesles;": '\U00002A94',
+- "gfr;": '\U0001D524',
+- "gg;": '\U0000226B',
+- "ggg;": '\U000022D9',
+- "gimel;": '\U00002137',
+- "gjcy;": '\U00000453',
+- "gl;": '\U00002277',
+- "glE;": '\U00002A92',
+- "gla;": '\U00002AA5',
+- "glj;": '\U00002AA4',
+- "gnE;": '\U00002269',
+- "gnap;": '\U00002A8A',
+- "gnapprox;": '\U00002A8A',
+- "gne;": '\U00002A88',
+- "gneq;": '\U00002A88',
+- "gneqq;": '\U00002269',
+- "gnsim;": '\U000022E7',
+- "gopf;": '\U0001D558',
+- "grave;": '\U00000060',
+- "gscr;": '\U0000210A',
+- "gsim;": '\U00002273',
+- "gsime;": '\U00002A8E',
+- "gsiml;": '\U00002A90',
+- "gt;": '\U0000003E',
+- "gtcc;": '\U00002AA7',
+- "gtcir;": '\U00002A7A',
+- "gtdot;": '\U000022D7',
+- "gtlPar;": '\U00002995',
+- "gtquest;": '\U00002A7C',
+- "gtrapprox;": '\U00002A86',
+- "gtrarr;": '\U00002978',
+- "gtrdot;": '\U000022D7',
+- "gtreqless;": '\U000022DB',
+- "gtreqqless;": '\U00002A8C',
+- "gtrless;": '\U00002277',
+- "gtrsim;": '\U00002273',
+- "hArr;": '\U000021D4',
+- "hairsp;": '\U0000200A',
+- "half;": '\U000000BD',
+- "hamilt;": '\U0000210B',
+- "hardcy;": '\U0000044A',
+- "harr;": '\U00002194',
+- "harrcir;": '\U00002948',
+- "harrw;": '\U000021AD',
+- "hbar;": '\U0000210F',
+- "hcirc;": '\U00000125',
+- "hearts;": '\U00002665',
+- "heartsuit;": '\U00002665',
+- "hellip;": '\U00002026',
+- "hercon;": '\U000022B9',
+- "hfr;": '\U0001D525',
+- "hksearow;": '\U00002925',
+- "hkswarow;": '\U00002926',
+- "hoarr;": '\U000021FF',
+- "homtht;": '\U0000223B',
+- "hookleftarrow;": '\U000021A9',
+- "hookrightarrow;": '\U000021AA',
+- "hopf;": '\U0001D559',
+- "horbar;": '\U00002015',
+- "hscr;": '\U0001D4BD',
+- "hslash;": '\U0000210F',
+- "hstrok;": '\U00000127',
+- "hybull;": '\U00002043',
+- "hyphen;": '\U00002010',
+- "iacute;": '\U000000ED',
+- "ic;": '\U00002063',
+- "icirc;": '\U000000EE',
+- "icy;": '\U00000438',
+- "iecy;": '\U00000435',
+- "iexcl;": '\U000000A1',
+- "iff;": '\U000021D4',
+- "ifr;": '\U0001D526',
+- "igrave;": '\U000000EC',
+- "ii;": '\U00002148',
+- "iiiint;": '\U00002A0C',
+- "iiint;": '\U0000222D',
+- "iinfin;": '\U000029DC',
+- "iiota;": '\U00002129',
+- "ijlig;": '\U00000133',
+- "imacr;": '\U0000012B',
+- "image;": '\U00002111',
+- "imagline;": '\U00002110',
+- "imagpart;": '\U00002111',
+- "imath;": '\U00000131',
+- "imof;": '\U000022B7',
+- "imped;": '\U000001B5',
+- "in;": '\U00002208',
+- "incare;": '\U00002105',
+- "infin;": '\U0000221E',
+- "infintie;": '\U000029DD',
+- "inodot;": '\U00000131',
+- "int;": '\U0000222B',
+- "intcal;": '\U000022BA',
+- "integers;": '\U00002124',
+- "intercal;": '\U000022BA',
+- "intlarhk;": '\U00002A17',
+- "intprod;": '\U00002A3C',
+- "iocy;": '\U00000451',
+- "iogon;": '\U0000012F',
+- "iopf;": '\U0001D55A',
+- "iota;": '\U000003B9',
+- "iprod;": '\U00002A3C',
+- "iquest;": '\U000000BF',
+- "iscr;": '\U0001D4BE',
+- "isin;": '\U00002208',
+- "isinE;": '\U000022F9',
+- "isindot;": '\U000022F5',
+- "isins;": '\U000022F4',
+- "isinsv;": '\U000022F3',
+- "isinv;": '\U00002208',
+- "it;": '\U00002062',
+- "itilde;": '\U00000129',
+- "iukcy;": '\U00000456',
+- "iuml;": '\U000000EF',
+- "jcirc;": '\U00000135',
+- "jcy;": '\U00000439',
+- "jfr;": '\U0001D527',
+- "jmath;": '\U00000237',
+- "jopf;": '\U0001D55B',
+- "jscr;": '\U0001D4BF',
+- "jsercy;": '\U00000458',
+- "jukcy;": '\U00000454',
+- "kappa;": '\U000003BA',
+- "kappav;": '\U000003F0',
+- "kcedil;": '\U00000137',
+- "kcy;": '\U0000043A',
+- "kfr;": '\U0001D528',
+- "kgreen;": '\U00000138',
+- "khcy;": '\U00000445',
+- "kjcy;": '\U0000045C',
+- "kopf;": '\U0001D55C',
+- "kscr;": '\U0001D4C0',
+- "lAarr;": '\U000021DA',
+- "lArr;": '\U000021D0',
+- "lAtail;": '\U0000291B',
+- "lBarr;": '\U0000290E',
+- "lE;": '\U00002266',
+- "lEg;": '\U00002A8B',
+- "lHar;": '\U00002962',
+- "lacute;": '\U0000013A',
+- "laemptyv;": '\U000029B4',
+- "lagran;": '\U00002112',
+- "lambda;": '\U000003BB',
+- "lang;": '\U000027E8',
+- "langd;": '\U00002991',
+- "langle;": '\U000027E8',
+- "lap;": '\U00002A85',
+- "laquo;": '\U000000AB',
+- "larr;": '\U00002190',
+- "larrb;": '\U000021E4',
+- "larrbfs;": '\U0000291F',
+- "larrfs;": '\U0000291D',
+- "larrhk;": '\U000021A9',
+- "larrlp;": '\U000021AB',
+- "larrpl;": '\U00002939',
+- "larrsim;": '\U00002973',
+- "larrtl;": '\U000021A2',
+- "lat;": '\U00002AAB',
+- "latail;": '\U00002919',
+- "late;": '\U00002AAD',
+- "lbarr;": '\U0000290C',
+- "lbbrk;": '\U00002772',
+- "lbrace;": '\U0000007B',
+- "lbrack;": '\U0000005B',
+- "lbrke;": '\U0000298B',
+- "lbrksld;": '\U0000298F',
+- "lbrkslu;": '\U0000298D',
+- "lcaron;": '\U0000013E',
+- "lcedil;": '\U0000013C',
+- "lceil;": '\U00002308',
+- "lcub;": '\U0000007B',
+- "lcy;": '\U0000043B',
+- "ldca;": '\U00002936',
+- "ldquo;": '\U0000201C',
+- "ldquor;": '\U0000201E',
+- "ldrdhar;": '\U00002967',
+- "ldrushar;": '\U0000294B',
+- "ldsh;": '\U000021B2',
+- "le;": '\U00002264',
+- "leftarrow;": '\U00002190',
+- "leftarrowtail;": '\U000021A2',
+- "leftharpoondown;": '\U000021BD',
+- "leftharpoonup;": '\U000021BC',
+- "leftleftarrows;": '\U000021C7',
+- "leftrightarrow;": '\U00002194',
+- "leftrightarrows;": '\U000021C6',
+- "leftrightharpoons;": '\U000021CB',
+- "leftrightsquigarrow;": '\U000021AD',
+- "leftthreetimes;": '\U000022CB',
+- "leg;": '\U000022DA',
+- "leq;": '\U00002264',
+- "leqq;": '\U00002266',
+- "leqslant;": '\U00002A7D',
+- "les;": '\U00002A7D',
+- "lescc;": '\U00002AA8',
+- "lesdot;": '\U00002A7F',
+- "lesdoto;": '\U00002A81',
+- "lesdotor;": '\U00002A83',
+- "lesges;": '\U00002A93',
+- "lessapprox;": '\U00002A85',
+- "lessdot;": '\U000022D6',
+- "lesseqgtr;": '\U000022DA',
+- "lesseqqgtr;": '\U00002A8B',
+- "lessgtr;": '\U00002276',
+- "lesssim;": '\U00002272',
+- "lfisht;": '\U0000297C',
+- "lfloor;": '\U0000230A',
+- "lfr;": '\U0001D529',
+- "lg;": '\U00002276',
+- "lgE;": '\U00002A91',
+- "lhard;": '\U000021BD',
+- "lharu;": '\U000021BC',
+- "lharul;": '\U0000296A',
+- "lhblk;": '\U00002584',
+- "ljcy;": '\U00000459',
+- "ll;": '\U0000226A',
+- "llarr;": '\U000021C7',
+- "llcorner;": '\U0000231E',
+- "llhard;": '\U0000296B',
+- "lltri;": '\U000025FA',
+- "lmidot;": '\U00000140',
+- "lmoust;": '\U000023B0',
+- "lmoustache;": '\U000023B0',
+- "lnE;": '\U00002268',
+- "lnap;": '\U00002A89',
+- "lnapprox;": '\U00002A89',
+- "lne;": '\U00002A87',
+- "lneq;": '\U00002A87',
+- "lneqq;": '\U00002268',
+- "lnsim;": '\U000022E6',
+- "loang;": '\U000027EC',
+- "loarr;": '\U000021FD',
+- "lobrk;": '\U000027E6',
+- "longleftarrow;": '\U000027F5',
+- "longleftrightarrow;": '\U000027F7',
+- "longmapsto;": '\U000027FC',
+- "longrightarrow;": '\U000027F6',
+- "looparrowleft;": '\U000021AB',
+- "looparrowright;": '\U000021AC',
+- "lopar;": '\U00002985',
+- "lopf;": '\U0001D55D',
+- "loplus;": '\U00002A2D',
+- "lotimes;": '\U00002A34',
+- "lowast;": '\U00002217',
+- "lowbar;": '\U0000005F',
+- "loz;": '\U000025CA',
+- "lozenge;": '\U000025CA',
+- "lozf;": '\U000029EB',
+- "lpar;": '\U00000028',
+- "lparlt;": '\U00002993',
+- "lrarr;": '\U000021C6',
+- "lrcorner;": '\U0000231F',
+- "lrhar;": '\U000021CB',
+- "lrhard;": '\U0000296D',
+- "lrm;": '\U0000200E',
+- "lrtri;": '\U000022BF',
+- "lsaquo;": '\U00002039',
+- "lscr;": '\U0001D4C1',
+- "lsh;": '\U000021B0',
+- "lsim;": '\U00002272',
+- "lsime;": '\U00002A8D',
+- "lsimg;": '\U00002A8F',
+- "lsqb;": '\U0000005B',
+- "lsquo;": '\U00002018',
+- "lsquor;": '\U0000201A',
+- "lstrok;": '\U00000142',
+- "lt;": '\U0000003C',
+- "ltcc;": '\U00002AA6',
+- "ltcir;": '\U00002A79',
+- "ltdot;": '\U000022D6',
+- "lthree;": '\U000022CB',
+- "ltimes;": '\U000022C9',
+- "ltlarr;": '\U00002976',
+- "ltquest;": '\U00002A7B',
+- "ltrPar;": '\U00002996',
+- "ltri;": '\U000025C3',
+- "ltrie;": '\U000022B4',
+- "ltrif;": '\U000025C2',
+- "lurdshar;": '\U0000294A',
+- "luruhar;": '\U00002966',
+- "mDDot;": '\U0000223A',
+- "macr;": '\U000000AF',
+- "male;": '\U00002642',
+- "malt;": '\U00002720',
+- "maltese;": '\U00002720',
+- "map;": '\U000021A6',
+- "mapsto;": '\U000021A6',
+- "mapstodown;": '\U000021A7',
+- "mapstoleft;": '\U000021A4',
+- "mapstoup;": '\U000021A5',
+- "marker;": '\U000025AE',
+- "mcomma;": '\U00002A29',
+- "mcy;": '\U0000043C',
+- "mdash;": '\U00002014',
+- "measuredangle;": '\U00002221',
+- "mfr;": '\U0001D52A',
+- "mho;": '\U00002127',
+- "micro;": '\U000000B5',
+- "mid;": '\U00002223',
+- "midast;": '\U0000002A',
+- "midcir;": '\U00002AF0',
+- "middot;": '\U000000B7',
+- "minus;": '\U00002212',
+- "minusb;": '\U0000229F',
+- "minusd;": '\U00002238',
+- "minusdu;": '\U00002A2A',
+- "mlcp;": '\U00002ADB',
+- "mldr;": '\U00002026',
+- "mnplus;": '\U00002213',
+- "models;": '\U000022A7',
+- "mopf;": '\U0001D55E',
+- "mp;": '\U00002213',
+- "mscr;": '\U0001D4C2',
+- "mstpos;": '\U0000223E',
+- "mu;": '\U000003BC',
+- "multimap;": '\U000022B8',
+- "mumap;": '\U000022B8',
+- "nLeftarrow;": '\U000021CD',
+- "nLeftrightarrow;": '\U000021CE',
+- "nRightarrow;": '\U000021CF',
+- "nVDash;": '\U000022AF',
+- "nVdash;": '\U000022AE',
+- "nabla;": '\U00002207',
+- "nacute;": '\U00000144',
+- "nap;": '\U00002249',
+- "napos;": '\U00000149',
+- "napprox;": '\U00002249',
+- "natur;": '\U0000266E',
+- "natural;": '\U0000266E',
+- "naturals;": '\U00002115',
+- "nbsp;": '\U000000A0',
+- "ncap;": '\U00002A43',
+- "ncaron;": '\U00000148',
+- "ncedil;": '\U00000146',
+- "ncong;": '\U00002247',
+- "ncup;": '\U00002A42',
+- "ncy;": '\U0000043D',
+- "ndash;": '\U00002013',
+- "ne;": '\U00002260',
+- "neArr;": '\U000021D7',
+- "nearhk;": '\U00002924',
+- "nearr;": '\U00002197',
+- "nearrow;": '\U00002197',
+- "nequiv;": '\U00002262',
+- "nesear;": '\U00002928',
+- "nexist;": '\U00002204',
+- "nexists;": '\U00002204',
+- "nfr;": '\U0001D52B',
+- "nge;": '\U00002271',
+- "ngeq;": '\U00002271',
+- "ngsim;": '\U00002275',
+- "ngt;": '\U0000226F',
+- "ngtr;": '\U0000226F',
+- "nhArr;": '\U000021CE',
+- "nharr;": '\U000021AE',
+- "nhpar;": '\U00002AF2',
+- "ni;": '\U0000220B',
+- "nis;": '\U000022FC',
+- "nisd;": '\U000022FA',
+- "niv;": '\U0000220B',
+- "njcy;": '\U0000045A',
+- "nlArr;": '\U000021CD',
+- "nlarr;": '\U0000219A',
+- "nldr;": '\U00002025',
+- "nle;": '\U00002270',
+- "nleftarrow;": '\U0000219A',
+- "nleftrightarrow;": '\U000021AE',
+- "nleq;": '\U00002270',
+- "nless;": '\U0000226E',
+- "nlsim;": '\U00002274',
+- "nlt;": '\U0000226E',
+- "nltri;": '\U000022EA',
+- "nltrie;": '\U000022EC',
+- "nmid;": '\U00002224',
+- "nopf;": '\U0001D55F',
+- "not;": '\U000000AC',
+- "notin;": '\U00002209',
+- "notinva;": '\U00002209',
+- "notinvb;": '\U000022F7',
+- "notinvc;": '\U000022F6',
+- "notni;": '\U0000220C',
+- "notniva;": '\U0000220C',
+- "notnivb;": '\U000022FE',
+- "notnivc;": '\U000022FD',
+- "npar;": '\U00002226',
+- "nparallel;": '\U00002226',
+- "npolint;": '\U00002A14',
+- "npr;": '\U00002280',
+- "nprcue;": '\U000022E0',
+- "nprec;": '\U00002280',
+- "nrArr;": '\U000021CF',
+- "nrarr;": '\U0000219B',
+- "nrightarrow;": '\U0000219B',
+- "nrtri;": '\U000022EB',
+- "nrtrie;": '\U000022ED',
+- "nsc;": '\U00002281',
+- "nsccue;": '\U000022E1',
+- "nscr;": '\U0001D4C3',
+- "nshortmid;": '\U00002224',
+- "nshortparallel;": '\U00002226',
+- "nsim;": '\U00002241',
+- "nsime;": '\U00002244',
+- "nsimeq;": '\U00002244',
+- "nsmid;": '\U00002224',
+- "nspar;": '\U00002226',
+- "nsqsube;": '\U000022E2',
+- "nsqsupe;": '\U000022E3',
+- "nsub;": '\U00002284',
+- "nsube;": '\U00002288',
+- "nsubseteq;": '\U00002288',
+- "nsucc;": '\U00002281',
+- "nsup;": '\U00002285',
+- "nsupe;": '\U00002289',
+- "nsupseteq;": '\U00002289',
+- "ntgl;": '\U00002279',
+- "ntilde;": '\U000000F1',
+- "ntlg;": '\U00002278',
+- "ntriangleleft;": '\U000022EA',
+- "ntrianglelefteq;": '\U000022EC',
+- "ntriangleright;": '\U000022EB',
+- "ntrianglerighteq;": '\U000022ED',
+- "nu;": '\U000003BD',
+- "num;": '\U00000023',
+- "numero;": '\U00002116',
+- "numsp;": '\U00002007',
+- "nvDash;": '\U000022AD',
+- "nvHarr;": '\U00002904',
+- "nvdash;": '\U000022AC',
+- "nvinfin;": '\U000029DE',
+- "nvlArr;": '\U00002902',
+- "nvrArr;": '\U00002903',
+- "nwArr;": '\U000021D6',
+- "nwarhk;": '\U00002923',
+- "nwarr;": '\U00002196',
+- "nwarrow;": '\U00002196',
+- "nwnear;": '\U00002927',
+- "oS;": '\U000024C8',
+- "oacute;": '\U000000F3',
+- "oast;": '\U0000229B',
+- "ocir;": '\U0000229A',
+- "ocirc;": '\U000000F4',
+- "ocy;": '\U0000043E',
+- "odash;": '\U0000229D',
+- "odblac;": '\U00000151',
+- "odiv;": '\U00002A38',
+- "odot;": '\U00002299',
+- "odsold;": '\U000029BC',
+- "oelig;": '\U00000153',
+- "ofcir;": '\U000029BF',
+- "ofr;": '\U0001D52C',
+- "ogon;": '\U000002DB',
+- "ograve;": '\U000000F2',
+- "ogt;": '\U000029C1',
+- "ohbar;": '\U000029B5',
+- "ohm;": '\U000003A9',
+- "oint;": '\U0000222E',
+- "olarr;": '\U000021BA',
+- "olcir;": '\U000029BE',
+- "olcross;": '\U000029BB',
+- "oline;": '\U0000203E',
+- "olt;": '\U000029C0',
+- "omacr;": '\U0000014D',
+- "omega;": '\U000003C9',
+- "omicron;": '\U000003BF',
+- "omid;": '\U000029B6',
+- "ominus;": '\U00002296',
+- "oopf;": '\U0001D560',
+- "opar;": '\U000029B7',
+- "operp;": '\U000029B9',
+- "oplus;": '\U00002295',
+- "or;": '\U00002228',
+- "orarr;": '\U000021BB',
+- "ord;": '\U00002A5D',
+- "order;": '\U00002134',
+- "orderof;": '\U00002134',
+- "ordf;": '\U000000AA',
+- "ordm;": '\U000000BA',
+- "origof;": '\U000022B6',
+- "oror;": '\U00002A56',
+- "orslope;": '\U00002A57',
+- "orv;": '\U00002A5B',
+- "oscr;": '\U00002134',
+- "oslash;": '\U000000F8',
+- "osol;": '\U00002298',
+- "otilde;": '\U000000F5',
+- "otimes;": '\U00002297',
+- "otimesas;": '\U00002A36',
+- "ouml;": '\U000000F6',
+- "ovbar;": '\U0000233D',
+- "par;": '\U00002225',
+- "para;": '\U000000B6',
+- "parallel;": '\U00002225',
+- "parsim;": '\U00002AF3',
+- "parsl;": '\U00002AFD',
+- "part;": '\U00002202',
+- "pcy;": '\U0000043F',
+- "percnt;": '\U00000025',
+- "period;": '\U0000002E',
+- "permil;": '\U00002030',
+- "perp;": '\U000022A5',
+- "pertenk;": '\U00002031',
+- "pfr;": '\U0001D52D',
+- "phi;": '\U000003C6',
+- "phiv;": '\U000003D5',
+- "phmmat;": '\U00002133',
+- "phone;": '\U0000260E',
+- "pi;": '\U000003C0',
+- "pitchfork;": '\U000022D4',
+- "piv;": '\U000003D6',
+- "planck;": '\U0000210F',
+- "planckh;": '\U0000210E',
+- "plankv;": '\U0000210F',
+- "plus;": '\U0000002B',
+- "plusacir;": '\U00002A23',
+- "plusb;": '\U0000229E',
+- "pluscir;": '\U00002A22',
+- "plusdo;": '\U00002214',
+- "plusdu;": '\U00002A25',
+- "pluse;": '\U00002A72',
+- "plusmn;": '\U000000B1',
+- "plussim;": '\U00002A26',
+- "plustwo;": '\U00002A27',
+- "pm;": '\U000000B1',
+- "pointint;": '\U00002A15',
+- "popf;": '\U0001D561',
+- "pound;": '\U000000A3',
+- "pr;": '\U0000227A',
+- "prE;": '\U00002AB3',
+- "prap;": '\U00002AB7',
+- "prcue;": '\U0000227C',
+- "pre;": '\U00002AAF',
+- "prec;": '\U0000227A',
+- "precapprox;": '\U00002AB7',
+- "preccurlyeq;": '\U0000227C',
+- "preceq;": '\U00002AAF',
+- "precnapprox;": '\U00002AB9',
+- "precneqq;": '\U00002AB5',
+- "precnsim;": '\U000022E8',
+- "precsim;": '\U0000227E',
+- "prime;": '\U00002032',
+- "primes;": '\U00002119',
+- "prnE;": '\U00002AB5',
+- "prnap;": '\U00002AB9',
+- "prnsim;": '\U000022E8',
+- "prod;": '\U0000220F',
+- "profalar;": '\U0000232E',
+- "profline;": '\U00002312',
+- "profsurf;": '\U00002313',
+- "prop;": '\U0000221D',
+- "propto;": '\U0000221D',
+- "prsim;": '\U0000227E',
+- "prurel;": '\U000022B0',
+- "pscr;": '\U0001D4C5',
+- "psi;": '\U000003C8',
+- "puncsp;": '\U00002008',
+- "qfr;": '\U0001D52E',
+- "qint;": '\U00002A0C',
+- "qopf;": '\U0001D562',
+- "qprime;": '\U00002057',
+- "qscr;": '\U0001D4C6',
+- "quaternions;": '\U0000210D',
+- "quatint;": '\U00002A16',
+- "quest;": '\U0000003F',
+- "questeq;": '\U0000225F',
+- "quot;": '\U00000022',
+- "rAarr;": '\U000021DB',
+- "rArr;": '\U000021D2',
+- "rAtail;": '\U0000291C',
+- "rBarr;": '\U0000290F',
+- "rHar;": '\U00002964',
+- "racute;": '\U00000155',
+- "radic;": '\U0000221A',
+- "raemptyv;": '\U000029B3',
+- "rang;": '\U000027E9',
+- "rangd;": '\U00002992',
+- "range;": '\U000029A5',
+- "rangle;": '\U000027E9',
+- "raquo;": '\U000000BB',
+- "rarr;": '\U00002192',
+- "rarrap;": '\U00002975',
+- "rarrb;": '\U000021E5',
+- "rarrbfs;": '\U00002920',
+- "rarrc;": '\U00002933',
+- "rarrfs;": '\U0000291E',
+- "rarrhk;": '\U000021AA',
+- "rarrlp;": '\U000021AC',
+- "rarrpl;": '\U00002945',
+- "rarrsim;": '\U00002974',
+- "rarrtl;": '\U000021A3',
+- "rarrw;": '\U0000219D',
+- "ratail;": '\U0000291A',
+- "ratio;": '\U00002236',
+- "rationals;": '\U0000211A',
+- "rbarr;": '\U0000290D',
+- "rbbrk;": '\U00002773',
+- "rbrace;": '\U0000007D',
+- "rbrack;": '\U0000005D',
+- "rbrke;": '\U0000298C',
+- "rbrksld;": '\U0000298E',
+- "rbrkslu;": '\U00002990',
+- "rcaron;": '\U00000159',
+- "rcedil;": '\U00000157',
+- "rceil;": '\U00002309',
+- "rcub;": '\U0000007D',
+- "rcy;": '\U00000440',
+- "rdca;": '\U00002937',
+- "rdldhar;": '\U00002969',
+- "rdquo;": '\U0000201D',
+- "rdquor;": '\U0000201D',
+- "rdsh;": '\U000021B3',
+- "real;": '\U0000211C',
+- "realine;": '\U0000211B',
+- "realpart;": '\U0000211C',
+- "reals;": '\U0000211D',
+- "rect;": '\U000025AD',
+- "reg;": '\U000000AE',
+- "rfisht;": '\U0000297D',
+- "rfloor;": '\U0000230B',
+- "rfr;": '\U0001D52F',
+- "rhard;": '\U000021C1',
+- "rharu;": '\U000021C0',
+- "rharul;": '\U0000296C',
+- "rho;": '\U000003C1',
+- "rhov;": '\U000003F1',
+- "rightarrow;": '\U00002192',
+- "rightarrowtail;": '\U000021A3',
+- "rightharpoondown;": '\U000021C1',
+- "rightharpoonup;": '\U000021C0',
+- "rightleftarrows;": '\U000021C4',
+- "rightleftharpoons;": '\U000021CC',
+- "rightrightarrows;": '\U000021C9',
+- "rightsquigarrow;": '\U0000219D',
+- "rightthreetimes;": '\U000022CC',
+- "ring;": '\U000002DA',
+- "risingdotseq;": '\U00002253',
+- "rlarr;": '\U000021C4',
+- "rlhar;": '\U000021CC',
+- "rlm;": '\U0000200F',
+- "rmoust;": '\U000023B1',
+- "rmoustache;": '\U000023B1',
+- "rnmid;": '\U00002AEE',
+- "roang;": '\U000027ED',
+- "roarr;": '\U000021FE',
+- "robrk;": '\U000027E7',
+- "ropar;": '\U00002986',
+- "ropf;": '\U0001D563',
+- "roplus;": '\U00002A2E',
+- "rotimes;": '\U00002A35',
+- "rpar;": '\U00000029',
+- "rpargt;": '\U00002994',
+- "rppolint;": '\U00002A12',
+- "rrarr;": '\U000021C9',
+- "rsaquo;": '\U0000203A',
+- "rscr;": '\U0001D4C7',
+- "rsh;": '\U000021B1',
+- "rsqb;": '\U0000005D',
+- "rsquo;": '\U00002019',
+- "rsquor;": '\U00002019',
+- "rthree;": '\U000022CC',
+- "rtimes;": '\U000022CA',
+- "rtri;": '\U000025B9',
+- "rtrie;": '\U000022B5',
+- "rtrif;": '\U000025B8',
+- "rtriltri;": '\U000029CE',
+- "ruluhar;": '\U00002968',
+- "rx;": '\U0000211E',
+- "sacute;": '\U0000015B',
+- "sbquo;": '\U0000201A',
+- "sc;": '\U0000227B',
+- "scE;": '\U00002AB4',
+- "scap;": '\U00002AB8',
+- "scaron;": '\U00000161',
+- "sccue;": '\U0000227D',
+- "sce;": '\U00002AB0',
+- "scedil;": '\U0000015F',
+- "scirc;": '\U0000015D',
+- "scnE;": '\U00002AB6',
+- "scnap;": '\U00002ABA',
+- "scnsim;": '\U000022E9',
+- "scpolint;": '\U00002A13',
+- "scsim;": '\U0000227F',
+- "scy;": '\U00000441',
+- "sdot;": '\U000022C5',
+- "sdotb;": '\U000022A1',
+- "sdote;": '\U00002A66',
+- "seArr;": '\U000021D8',
+- "searhk;": '\U00002925',
+- "searr;": '\U00002198',
+- "searrow;": '\U00002198',
+- "sect;": '\U000000A7',
+- "semi;": '\U0000003B',
+- "seswar;": '\U00002929',
+- "setminus;": '\U00002216',
+- "setmn;": '\U00002216',
+- "sext;": '\U00002736',
+- "sfr;": '\U0001D530',
+- "sfrown;": '\U00002322',
+- "sharp;": '\U0000266F',
+- "shchcy;": '\U00000449',
+- "shcy;": '\U00000448',
+- "shortmid;": '\U00002223',
+- "shortparallel;": '\U00002225',
+- "shy;": '\U000000AD',
+- "sigma;": '\U000003C3',
+- "sigmaf;": '\U000003C2',
+- "sigmav;": '\U000003C2',
+- "sim;": '\U0000223C',
+- "simdot;": '\U00002A6A',
+- "sime;": '\U00002243',
+- "simeq;": '\U00002243',
+- "simg;": '\U00002A9E',
+- "simgE;": '\U00002AA0',
+- "siml;": '\U00002A9D',
+- "simlE;": '\U00002A9F',
+- "simne;": '\U00002246',
+- "simplus;": '\U00002A24',
+- "simrarr;": '\U00002972',
+- "slarr;": '\U00002190',
+- "smallsetminus;": '\U00002216',
+- "smashp;": '\U00002A33',
+- "smeparsl;": '\U000029E4',
+- "smid;": '\U00002223',
+- "smile;": '\U00002323',
+- "smt;": '\U00002AAA',
+- "smte;": '\U00002AAC',
+- "softcy;": '\U0000044C',
+- "sol;": '\U0000002F',
+- "solb;": '\U000029C4',
+- "solbar;": '\U0000233F',
+- "sopf;": '\U0001D564',
+- "spades;": '\U00002660',
+- "spadesuit;": '\U00002660',
+- "spar;": '\U00002225',
+- "sqcap;": '\U00002293',
+- "sqcup;": '\U00002294',
+- "sqsub;": '\U0000228F',
+- "sqsube;": '\U00002291',
+- "sqsubset;": '\U0000228F',
+- "sqsubseteq;": '\U00002291',
+- "sqsup;": '\U00002290',
+- "sqsupe;": '\U00002292',
+- "sqsupset;": '\U00002290',
+- "sqsupseteq;": '\U00002292',
+- "squ;": '\U000025A1',
+- "square;": '\U000025A1',
+- "squarf;": '\U000025AA',
+- "squf;": '\U000025AA',
+- "srarr;": '\U00002192',
+- "sscr;": '\U0001D4C8',
+- "ssetmn;": '\U00002216',
+- "ssmile;": '\U00002323',
+- "sstarf;": '\U000022C6',
+- "star;": '\U00002606',
+- "starf;": '\U00002605',
+- "straightepsilon;": '\U000003F5',
+- "straightphi;": '\U000003D5',
+- "strns;": '\U000000AF',
+- "sub;": '\U00002282',
+- "subE;": '\U00002AC5',
+- "subdot;": '\U00002ABD',
+- "sube;": '\U00002286',
+- "subedot;": '\U00002AC3',
+- "submult;": '\U00002AC1',
+- "subnE;": '\U00002ACB',
+- "subne;": '\U0000228A',
+- "subplus;": '\U00002ABF',
+- "subrarr;": '\U00002979',
+- "subset;": '\U00002282',
+- "subseteq;": '\U00002286',
+- "subseteqq;": '\U00002AC5',
+- "subsetneq;": '\U0000228A',
+- "subsetneqq;": '\U00002ACB',
+- "subsim;": '\U00002AC7',
+- "subsub;": '\U00002AD5',
+- "subsup;": '\U00002AD3',
+- "succ;": '\U0000227B',
+- "succapprox;": '\U00002AB8',
+- "succcurlyeq;": '\U0000227D',
+- "succeq;": '\U00002AB0',
+- "succnapprox;": '\U00002ABA',
+- "succneqq;": '\U00002AB6',
+- "succnsim;": '\U000022E9',
+- "succsim;": '\U0000227F',
+- "sum;": '\U00002211',
+- "sung;": '\U0000266A',
+- "sup;": '\U00002283',
+- "sup1;": '\U000000B9',
+- "sup2;": '\U000000B2',
+- "sup3;": '\U000000B3',
+- "supE;": '\U00002AC6',
+- "supdot;": '\U00002ABE',
+- "supdsub;": '\U00002AD8',
+- "supe;": '\U00002287',
+- "supedot;": '\U00002AC4',
+- "suphsol;": '\U000027C9',
+- "suphsub;": '\U00002AD7',
+- "suplarr;": '\U0000297B',
+- "supmult;": '\U00002AC2',
+- "supnE;": '\U00002ACC',
+- "supne;": '\U0000228B',
+- "supplus;": '\U00002AC0',
+- "supset;": '\U00002283',
+- "supseteq;": '\U00002287',
+- "supseteqq;": '\U00002AC6',
+- "supsetneq;": '\U0000228B',
+- "supsetneqq;": '\U00002ACC',
+- "supsim;": '\U00002AC8',
+- "supsub;": '\U00002AD4',
+- "supsup;": '\U00002AD6',
+- "swArr;": '\U000021D9',
+- "swarhk;": '\U00002926',
+- "swarr;": '\U00002199',
+- "swarrow;": '\U00002199',
+- "swnwar;": '\U0000292A',
+- "szlig;": '\U000000DF',
+- "target;": '\U00002316',
+- "tau;": '\U000003C4',
+- "tbrk;": '\U000023B4',
+- "tcaron;": '\U00000165',
+- "tcedil;": '\U00000163',
+- "tcy;": '\U00000442',
+- "tdot;": '\U000020DB',
+- "telrec;": '\U00002315',
+- "tfr;": '\U0001D531',
+- "there4;": '\U00002234',
+- "therefore;": '\U00002234',
+- "theta;": '\U000003B8',
+- "thetasym;": '\U000003D1',
+- "thetav;": '\U000003D1',
+- "thickapprox;": '\U00002248',
+- "thicksim;": '\U0000223C',
+- "thinsp;": '\U00002009',
+- "thkap;": '\U00002248',
+- "thksim;": '\U0000223C',
+- "thorn;": '\U000000FE',
+- "tilde;": '\U000002DC',
+- "times;": '\U000000D7',
+- "timesb;": '\U000022A0',
+- "timesbar;": '\U00002A31',
+- "timesd;": '\U00002A30',
+- "tint;": '\U0000222D',
+- "toea;": '\U00002928',
+- "top;": '\U000022A4',
+- "topbot;": '\U00002336',
+- "topcir;": '\U00002AF1',
+- "topf;": '\U0001D565',
+- "topfork;": '\U00002ADA',
+- "tosa;": '\U00002929',
+- "tprime;": '\U00002034',
+- "trade;": '\U00002122',
+- "triangle;": '\U000025B5',
+- "triangledown;": '\U000025BF',
+- "triangleleft;": '\U000025C3',
+- "trianglelefteq;": '\U000022B4',
+- "triangleq;": '\U0000225C',
+- "triangleright;": '\U000025B9',
+- "trianglerighteq;": '\U000022B5',
+- "tridot;": '\U000025EC',
+- "trie;": '\U0000225C',
+- "triminus;": '\U00002A3A',
+- "triplus;": '\U00002A39',
+- "trisb;": '\U000029CD',
+- "tritime;": '\U00002A3B',
+- "trpezium;": '\U000023E2',
+- "tscr;": '\U0001D4C9',
+- "tscy;": '\U00000446',
+- "tshcy;": '\U0000045B',
+- "tstrok;": '\U00000167',
+- "twixt;": '\U0000226C',
+- "twoheadleftarrow;": '\U0000219E',
+- "twoheadrightarrow;": '\U000021A0',
+- "uArr;": '\U000021D1',
+- "uHar;": '\U00002963',
+- "uacute;": '\U000000FA',
+- "uarr;": '\U00002191',
+- "ubrcy;": '\U0000045E',
+- "ubreve;": '\U0000016D',
+- "ucirc;": '\U000000FB',
+- "ucy;": '\U00000443',
+- "udarr;": '\U000021C5',
+- "udblac;": '\U00000171',
+- "udhar;": '\U0000296E',
+- "ufisht;": '\U0000297E',
+- "ufr;": '\U0001D532',
+- "ugrave;": '\U000000F9',
+- "uharl;": '\U000021BF',
+- "uharr;": '\U000021BE',
+- "uhblk;": '\U00002580',
+- "ulcorn;": '\U0000231C',
+- "ulcorner;": '\U0000231C',
+- "ulcrop;": '\U0000230F',
+- "ultri;": '\U000025F8',
+- "umacr;": '\U0000016B',
+- "uml;": '\U000000A8',
+- "uogon;": '\U00000173',
+- "uopf;": '\U0001D566',
+- "uparrow;": '\U00002191',
+- "updownarrow;": '\U00002195',
+- "upharpoonleft;": '\U000021BF',
+- "upharpoonright;": '\U000021BE',
+- "uplus;": '\U0000228E',
+- "upsi;": '\U000003C5',
+- "upsih;": '\U000003D2',
+- "upsilon;": '\U000003C5',
+- "upuparrows;": '\U000021C8',
+- "urcorn;": '\U0000231D',
+- "urcorner;": '\U0000231D',
+- "urcrop;": '\U0000230E',
+- "uring;": '\U0000016F',
+- "urtri;": '\U000025F9',
+- "uscr;": '\U0001D4CA',
+- "utdot;": '\U000022F0',
+- "utilde;": '\U00000169',
+- "utri;": '\U000025B5',
+- "utrif;": '\U000025B4',
+- "uuarr;": '\U000021C8',
+- "uuml;": '\U000000FC',
+- "uwangle;": '\U000029A7',
+- "vArr;": '\U000021D5',
+- "vBar;": '\U00002AE8',
+- "vBarv;": '\U00002AE9',
+- "vDash;": '\U000022A8',
+- "vangrt;": '\U0000299C',
+- "varepsilon;": '\U000003F5',
+- "varkappa;": '\U000003F0',
+- "varnothing;": '\U00002205',
+- "varphi;": '\U000003D5',
+- "varpi;": '\U000003D6',
+- "varpropto;": '\U0000221D',
+- "varr;": '\U00002195',
+- "varrho;": '\U000003F1',
+- "varsigma;": '\U000003C2',
+- "vartheta;": '\U000003D1',
+- "vartriangleleft;": '\U000022B2',
+- "vartriangleright;": '\U000022B3',
+- "vcy;": '\U00000432',
+- "vdash;": '\U000022A2',
+- "vee;": '\U00002228',
+- "veebar;": '\U000022BB',
+- "veeeq;": '\U0000225A',
+- "vellip;": '\U000022EE',
+- "verbar;": '\U0000007C',
+- "vert;": '\U0000007C',
+- "vfr;": '\U0001D533',
+- "vltri;": '\U000022B2',
+- "vopf;": '\U0001D567',
+- "vprop;": '\U0000221D',
+- "vrtri;": '\U000022B3',
+- "vscr;": '\U0001D4CB',
+- "vzigzag;": '\U0000299A',
+- "wcirc;": '\U00000175',
+- "wedbar;": '\U00002A5F',
+- "wedge;": '\U00002227',
+- "wedgeq;": '\U00002259',
+- "weierp;": '\U00002118',
+- "wfr;": '\U0001D534',
+- "wopf;": '\U0001D568',
+- "wp;": '\U00002118',
+- "wr;": '\U00002240',
+- "wreath;": '\U00002240',
+- "wscr;": '\U0001D4CC',
+- "xcap;": '\U000022C2',
+- "xcirc;": '\U000025EF',
+- "xcup;": '\U000022C3',
+- "xdtri;": '\U000025BD',
+- "xfr;": '\U0001D535',
+- "xhArr;": '\U000027FA',
+- "xharr;": '\U000027F7',
+- "xi;": '\U000003BE',
+- "xlArr;": '\U000027F8',
+- "xlarr;": '\U000027F5',
+- "xmap;": '\U000027FC',
+- "xnis;": '\U000022FB',
+- "xodot;": '\U00002A00',
+- "xopf;": '\U0001D569',
+- "xoplus;": '\U00002A01',
+- "xotime;": '\U00002A02',
+- "xrArr;": '\U000027F9',
+- "xrarr;": '\U000027F6',
+- "xscr;": '\U0001D4CD',
+- "xsqcup;": '\U00002A06',
+- "xuplus;": '\U00002A04',
+- "xutri;": '\U000025B3',
+- "xvee;": '\U000022C1',
+- "xwedge;": '\U000022C0',
+- "yacute;": '\U000000FD',
+- "yacy;": '\U0000044F',
+- "ycirc;": '\U00000177',
+- "ycy;": '\U0000044B',
+- "yen;": '\U000000A5',
+- "yfr;": '\U0001D536',
+- "yicy;": '\U00000457',
+- "yopf;": '\U0001D56A',
+- "yscr;": '\U0001D4CE',
+- "yucy;": '\U0000044E',
+- "yuml;": '\U000000FF',
+- "zacute;": '\U0000017A',
+- "zcaron;": '\U0000017E',
+- "zcy;": '\U00000437',
+- "zdot;": '\U0000017C',
+- "zeetrf;": '\U00002128',
+- "zeta;": '\U000003B6',
+- "zfr;": '\U0001D537',
+- "zhcy;": '\U00000436',
+- "zigrarr;": '\U000021DD',
+- "zopf;": '\U0001D56B',
+- "zscr;": '\U0001D4CF',
+- "zwj;": '\U0000200D',
+- "zwnj;": '\U0000200C',
+- "AElig": '\U000000C6',
+- "AMP": '\U00000026',
+- "Aacute": '\U000000C1',
+- "Acirc": '\U000000C2',
+- "Agrave": '\U000000C0',
+- "Aring": '\U000000C5',
+- "Atilde": '\U000000C3',
+- "Auml": '\U000000C4',
+- "COPY": '\U000000A9',
+- "Ccedil": '\U000000C7',
+- "ETH": '\U000000D0',
+- "Eacute": '\U000000C9',
+- "Ecirc": '\U000000CA',
+- "Egrave": '\U000000C8',
+- "Euml": '\U000000CB',
+- "GT": '\U0000003E',
+- "Iacute": '\U000000CD',
+- "Icirc": '\U000000CE',
+- "Igrave": '\U000000CC',
+- "Iuml": '\U000000CF',
+- "LT": '\U0000003C',
+- "Ntilde": '\U000000D1',
+- "Oacute": '\U000000D3',
+- "Ocirc": '\U000000D4',
+- "Ograve": '\U000000D2',
+- "Oslash": '\U000000D8',
+- "Otilde": '\U000000D5',
+- "Ouml": '\U000000D6',
+- "QUOT": '\U00000022',
+- "REG": '\U000000AE',
+- "THORN": '\U000000DE',
+- "Uacute": '\U000000DA',
+- "Ucirc": '\U000000DB',
+- "Ugrave": '\U000000D9',
+- "Uuml": '\U000000DC',
+- "Yacute": '\U000000DD',
+- "aacute": '\U000000E1',
+- "acirc": '\U000000E2',
+- "acute": '\U000000B4',
+- "aelig": '\U000000E6',
+- "agrave": '\U000000E0',
+- "amp": '\U00000026',
+- "aring": '\U000000E5',
+- "atilde": '\U000000E3',
+- "auml": '\U000000E4',
+- "brvbar": '\U000000A6',
+- "ccedil": '\U000000E7',
+- "cedil": '\U000000B8',
+- "cent": '\U000000A2',
+- "copy": '\U000000A9',
+- "curren": '\U000000A4',
+- "deg": '\U000000B0',
+- "divide": '\U000000F7',
+- "eacute": '\U000000E9',
+- "ecirc": '\U000000EA',
+- "egrave": '\U000000E8',
+- "eth": '\U000000F0',
+- "euml": '\U000000EB',
+- "frac12": '\U000000BD',
+- "frac14": '\U000000BC',
+- "frac34": '\U000000BE',
+- "gt": '\U0000003E',
+- "iacute": '\U000000ED',
+- "icirc": '\U000000EE',
+- "iexcl": '\U000000A1',
+- "igrave": '\U000000EC',
+- "iquest": '\U000000BF',
+- "iuml": '\U000000EF',
+- "laquo": '\U000000AB',
+- "lt": '\U0000003C',
+- "macr": '\U000000AF',
+- "micro": '\U000000B5',
+- "middot": '\U000000B7',
+- "nbsp": '\U000000A0',
+- "not": '\U000000AC',
+- "ntilde": '\U000000F1',
+- "oacute": '\U000000F3',
+- "ocirc": '\U000000F4',
+- "ograve": '\U000000F2',
+- "ordf": '\U000000AA',
+- "ordm": '\U000000BA',
+- "oslash": '\U000000F8',
+- "otilde": '\U000000F5',
+- "ouml": '\U000000F6',
+- "para": '\U000000B6',
+- "plusmn": '\U000000B1',
+- "pound": '\U000000A3',
+- "quot": '\U00000022',
+- "raquo": '\U000000BB',
+- "reg": '\U000000AE',
+- "sect": '\U000000A7',
+- "shy": '\U000000AD',
+- "sup1": '\U000000B9',
+- "sup2": '\U000000B2',
+- "sup3": '\U000000B3',
+- "szlig": '\U000000DF',
+- "thorn": '\U000000FE',
+- "times": '\U000000D7',
+- "uacute": '\U000000FA',
+- "ucirc": '\U000000FB',
+- "ugrave": '\U000000F9',
+- "uml": '\U000000A8',
+- "uuml": '\U000000FC',
+- "yacute": '\U000000FD',
+- "yen": '\U000000A5',
+- "yuml": '\U000000FF',
+-}
+-
+-// HTML entities that are two unicode codepoints.
+-var entity2 = map[string][2]rune{
+- // TODO(nigeltao): Handle replacements that are wider than their names.
+- // "nLt;": {'\u226A', '\u20D2'},
+- // "nGt;": {'\u226B', '\u20D2'},
+- "NotEqualTilde;": {'\u2242', '\u0338'},
+- "NotGreaterFullEqual;": {'\u2267', '\u0338'},
+- "NotGreaterGreater;": {'\u226B', '\u0338'},
+- "NotGreaterSlantEqual;": {'\u2A7E', '\u0338'},
+- "NotHumpDownHump;": {'\u224E', '\u0338'},
+- "NotHumpEqual;": {'\u224F', '\u0338'},
+- "NotLeftTriangleBar;": {'\u29CF', '\u0338'},
+- "NotLessLess;": {'\u226A', '\u0338'},
+- "NotLessSlantEqual;": {'\u2A7D', '\u0338'},
+- "NotNestedGreaterGreater;": {'\u2AA2', '\u0338'},
+- "NotNestedLessLess;": {'\u2AA1', '\u0338'},
+- "NotPrecedesEqual;": {'\u2AAF', '\u0338'},
+- "NotRightTriangleBar;": {'\u29D0', '\u0338'},
+- "NotSquareSubset;": {'\u228F', '\u0338'},
+- "NotSquareSuperset;": {'\u2290', '\u0338'},
+- "NotSubset;": {'\u2282', '\u20D2'},
+- "NotSucceedsEqual;": {'\u2AB0', '\u0338'},
+- "NotSucceedsTilde;": {'\u227F', '\u0338'},
+- "NotSuperset;": {'\u2283', '\u20D2'},
+- "ThickSpace;": {'\u205F', '\u200A'},
+- "acE;": {'\u223E', '\u0333'},
+- "bne;": {'\u003D', '\u20E5'},
+- "bnequiv;": {'\u2261', '\u20E5'},
+- "caps;": {'\u2229', '\uFE00'},
+- "cups;": {'\u222A', '\uFE00'},
+- "fjlig;": {'\u0066', '\u006A'},
+- "gesl;": {'\u22DB', '\uFE00'},
+- "gvertneqq;": {'\u2269', '\uFE00'},
+- "gvnE;": {'\u2269', '\uFE00'},
+- "lates;": {'\u2AAD', '\uFE00'},
+- "lesg;": {'\u22DA', '\uFE00'},
+- "lvertneqq;": {'\u2268', '\uFE00'},
+- "lvnE;": {'\u2268', '\uFE00'},
+- "nGg;": {'\u22D9', '\u0338'},
+- "nGtv;": {'\u226B', '\u0338'},
+- "nLl;": {'\u22D8', '\u0338'},
+- "nLtv;": {'\u226A', '\u0338'},
+- "nang;": {'\u2220', '\u20D2'},
+- "napE;": {'\u2A70', '\u0338'},
+- "napid;": {'\u224B', '\u0338'},
+- "nbump;": {'\u224E', '\u0338'},
+- "nbumpe;": {'\u224F', '\u0338'},
+- "ncongdot;": {'\u2A6D', '\u0338'},
+- "nedot;": {'\u2250', '\u0338'},
+- "nesim;": {'\u2242', '\u0338'},
+- "ngE;": {'\u2267', '\u0338'},
+- "ngeqq;": {'\u2267', '\u0338'},
+- "ngeqslant;": {'\u2A7E', '\u0338'},
+- "nges;": {'\u2A7E', '\u0338'},
+- "nlE;": {'\u2266', '\u0338'},
+- "nleqq;": {'\u2266', '\u0338'},
+- "nleqslant;": {'\u2A7D', '\u0338'},
+- "nles;": {'\u2A7D', '\u0338'},
+- "notinE;": {'\u22F9', '\u0338'},
+- "notindot;": {'\u22F5', '\u0338'},
+- "nparsl;": {'\u2AFD', '\u20E5'},
+- "npart;": {'\u2202', '\u0338'},
+- "npre;": {'\u2AAF', '\u0338'},
+- "npreceq;": {'\u2AAF', '\u0338'},
+- "nrarrc;": {'\u2933', '\u0338'},
+- "nrarrw;": {'\u219D', '\u0338'},
+- "nsce;": {'\u2AB0', '\u0338'},
+- "nsubE;": {'\u2AC5', '\u0338'},
+- "nsubset;": {'\u2282', '\u20D2'},
+- "nsubseteqq;": {'\u2AC5', '\u0338'},
+- "nsucceq;": {'\u2AB0', '\u0338'},
+- "nsupE;": {'\u2AC6', '\u0338'},
+- "nsupset;": {'\u2283', '\u20D2'},
+- "nsupseteqq;": {'\u2AC6', '\u0338'},
+- "nvap;": {'\u224D', '\u20D2'},
+- "nvge;": {'\u2265', '\u20D2'},
+- "nvgt;": {'\u003E', '\u20D2'},
+- "nvle;": {'\u2264', '\u20D2'},
+- "nvlt;": {'\u003C', '\u20D2'},
+- "nvltrie;": {'\u22B4', '\u20D2'},
+- "nvrtrie;": {'\u22B5', '\u20D2'},
+- "nvsim;": {'\u223C', '\u20D2'},
+- "race;": {'\u223D', '\u0331'},
+- "smtes;": {'\u2AAC', '\uFE00'},
+- "sqcaps;": {'\u2293', '\uFE00'},
+- "sqcups;": {'\u2294', '\uFE00'},
+- "varsubsetneq;": {'\u228A', '\uFE00'},
+- "varsubsetneqq;": {'\u2ACB', '\uFE00'},
+- "varsupsetneq;": {'\u228B', '\uFE00'},
+- "varsupsetneqq;": {'\u2ACC', '\uFE00'},
+- "vnsub;": {'\u2282', '\u20D2'},
+- "vnsup;": {'\u2283', '\u20D2'},
+- "vsubnE;": {'\u2ACB', '\uFE00'},
+- "vsubne;": {'\u228A', '\uFE00'},
+- "vsupnE;": {'\u2ACC', '\uFE00'},
+- "vsupne;": {'\u228B', '\uFE00'},
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/entity_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/entity_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/entity_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/entity_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,29 +0,0 @@
+-// Copyright 2010 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 html
+-
+-import (
+- "testing"
+- "unicode/utf8"
+-)
+-
+-func TestEntityLength(t *testing.T) {
+- // We verify that the length of UTF-8 encoding of each value is <= 1 + len(key).
+- // The +1 comes from the leading "&". This property implies that the length of
+- // unescaped text is <= the length of escaped text.
+- for k, v := range entity {
+- if 1+len(k) < utf8.RuneLen(v) {
+- t.Error("escaped entity &" + k + " is shorter than its UTF-8 encoding " + string(v))
+- }
+- if len(k) > longestEntityWithoutSemicolon && k[len(k)-1] != ';' {
+- t.Errorf("entity name %s is %d characters, but longestEntityWithoutSemicolon=%d", k, len(k), longestEntityWithoutSemicolon)
+- }
+- }
+- for k, v := range entity2 {
+- if 1+len(k) < utf8.RuneLen(v[0])+utf8.RuneLen(v[1]) {
+- t.Error("escaped entity &" + k + " is shorter than its UTF-8 encoding " + string(v[0]) + string(v[1]))
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/escape.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/escape.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/escape.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/escape.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,258 +0,0 @@
+-// Copyright 2010 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 html
+-
+-import (
+- "bytes"
+- "strings"
+- "unicode/utf8"
+-)
+-
+-// These replacements permit compatibility with old numeric entities that
+-// assumed Windows-1252 encoding.
+-// http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#consume-a-character-reference
+-var replacementTable = [...]rune{
+- '\u20AC', // First entry is what 0x80 should be replaced with.
+- '\u0081',
+- '\u201A',
+- '\u0192',
+- '\u201E',
+- '\u2026',
+- '\u2020',
+- '\u2021',
+- '\u02C6',
+- '\u2030',
+- '\u0160',
+- '\u2039',
+- '\u0152',
+- '\u008D',
+- '\u017D',
+- '\u008F',
+- '\u0090',
+- '\u2018',
+- '\u2019',
+- '\u201C',
+- '\u201D',
+- '\u2022',
+- '\u2013',
+- '\u2014',
+- '\u02DC',
+- '\u2122',
+- '\u0161',
+- '\u203A',
+- '\u0153',
+- '\u009D',
+- '\u017E',
+- '\u0178', // Last entry is 0x9F.
+- // 0x00->'\uFFFD' is handled programmatically.
+- // 0x0D->'\u000D' is a no-op.
+-}
+-
+-// unescapeEntity reads an entity like "<" from b[src:] and writes the
+-// corresponding "<" to b[dst:], returning the incremented dst and src cursors.
+-// Precondition: b[src] == '&' && dst <= src.
+-// attribute should be true if parsing an attribute value.
+-func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) {
+- // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#consume-a-character-reference
+-
+- // i starts at 1 because we already know that s[0] == '&'.
+- i, s := 1, b[src:]
+-
+- if len(s) <= 1 {
+- b[dst] = b[src]
+- return dst + 1, src + 1
+- }
+-
+- if s[i] == '#' {
+- if len(s) <= 3 { // We need to have at least "&#.".
+- b[dst] = b[src]
+- return dst + 1, src + 1
+- }
+- i++
+- c := s[i]
+- hex := false
+- if c == 'x' || c == 'X' {
+- hex = true
+- i++
+- }
+-
+- x := '\x00'
+- for i < len(s) {
+- c = s[i]
+- i++
+- if hex {
+- if '0' <= c && c <= '9' {
+- x = 16*x + rune(c) - '0'
+- continue
+- } else if 'a' <= c && c <= 'f' {
+- x = 16*x + rune(c) - 'a' + 10
+- continue
+- } else if 'A' <= c && c <= 'F' {
+- x = 16*x + rune(c) - 'A' + 10
+- continue
+- }
+- } else if '0' <= c && c <= '9' {
+- x = 10*x + rune(c) - '0'
+- continue
+- }
+- if c != ';' {
+- i--
+- }
+- break
+- }
+-
+- if i <= 3 { // No characters matched.
+- b[dst] = b[src]
+- return dst + 1, src + 1
+- }
+-
+- if 0x80 <= x && x <= 0x9F {
+- // Replace characters from Windows-1252 with UTF-8 equivalents.
+- x = replacementTable[x-0x80]
+- } else if x == 0 || (0xD800 <= x && x <= 0xDFFF) || x > 0x10FFFF {
+- // Replace invalid characters with the replacement character.
+- x = '\uFFFD'
+- }
+-
+- return dst + utf8.EncodeRune(b[dst:], x), src + i
+- }
+-
+- // Consume the maximum number of characters possible, with the
+- // consumed characters matching one of the named references.
+-
+- for i < len(s) {
+- c := s[i]
+- i++
+- // Lower-cased characters are more common in entities, so we check for them first.
+- if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' {
+- continue
+- }
+- if c != ';' {
+- i--
+- }
+- break
+- }
+-
+- entityName := string(s[1:i])
+- if entityName == "" {
+- // No-op.
+- } else if attribute && entityName[len(entityName)-1] != ';' && len(s) > i && s[i] == '=' {
+- // No-op.
+- } else if x := entity[entityName]; x != 0 {
+- return dst + utf8.EncodeRune(b[dst:], x), src + i
+- } else if x := entity2[entityName]; x[0] != 0 {
+- dst1 := dst + utf8.EncodeRune(b[dst:], x[0])
+- return dst1 + utf8.EncodeRune(b[dst1:], x[1]), src + i
+- } else if !attribute {
+- maxLen := len(entityName) - 1
+- if maxLen > longestEntityWithoutSemicolon {
+- maxLen = longestEntityWithoutSemicolon
+- }
+- for j := maxLen; j > 1; j-- {
+- if x := entity[entityName[:j]]; x != 0 {
+- return dst + utf8.EncodeRune(b[dst:], x), src + j + 1
+- }
+- }
+- }
+-
+- dst1, src1 = dst+i, src+i
+- copy(b[dst:dst1], b[src:src1])
+- return dst1, src1
+-}
+-
+-// unescape unescapes b's entities in-place, so that "a<b" becomes "a<b".
+-// attribute should be true if parsing an attribute value.
+-func unescape(b []byte, attribute bool) []byte {
+- for i, c := range b {
+- if c == '&' {
+- dst, src := unescapeEntity(b, i, i, attribute)
+- for src < len(b) {
+- c := b[src]
+- if c == '&' {
+- dst, src = unescapeEntity(b, dst, src, attribute)
+- } else {
+- b[dst] = c
+- dst, src = dst+1, src+1
+- }
+- }
+- return b[0:dst]
+- }
+- }
+- return b
+-}
+-
+-// lower lower-cases the A-Z bytes in b in-place, so that "aBc" becomes "abc".
+-func lower(b []byte) []byte {
+- for i, c := range b {
+- if 'A' <= c && c <= 'Z' {
+- b[i] = c + 'a' - 'A'
+- }
+- }
+- return b
+-}
+-
+-const escapedChars = "&'<>\"\r"
+-
+-func escape(w writer, s string) error {
+- i := strings.IndexAny(s, escapedChars)
+- for i != -1 {
+- if _, err := w.WriteString(s[:i]); err != nil {
+- return err
+- }
+- var esc string
+- switch s[i] {
+- case '&':
+- esc = "&"
+- case '\'':
+- // "'" is shorter than "'" and apos was not in HTML until HTML5.
+- esc = "'"
+- case '<':
+- esc = "<"
+- case '>':
+- esc = ">"
+- case '"':
+- // """ is shorter than """.
+- esc = """
+- case '\r':
+- esc = " "
+- default:
+- panic("unrecognized escape character")
+- }
+- s = s[i+1:]
+- if _, err := w.WriteString(esc); err != nil {
+- return err
+- }
+- i = strings.IndexAny(s, escapedChars)
+- }
+- _, err := w.WriteString(s)
+- return err
+-}
+-
+-// EscapeString escapes special characters like "<" to become "<". It
+-// escapes only five such characters: <, >, &, ' and ".
+-// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't
+-// always true.
+-func EscapeString(s string) string {
+- if strings.IndexAny(s, escapedChars) == -1 {
+- return s
+- }
+- var buf bytes.Buffer
+- escape(&buf, s)
+- return buf.String()
+-}
+-
+-// UnescapeString unescapes entities like "<" to become "<". It unescapes a
+-// larger range of entities than EscapeString escapes. For example, "á"
+-// unescapes to "á", as does "á" and "&xE1;".
+-// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't
+-// always true.
+-func UnescapeString(s string) string {
+- for _, c := range s {
+- if c == '&' {
+- return string(unescape([]byte(s), false))
+- }
+- }
+- return s
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/example_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/example_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/example_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/example_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,40 +0,0 @@
+-// Copyright 2012 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.
+-
+-// This example demonstrates parsing HTML data and walking the resulting tree.
+-package html_test
+-
+-import (
+- "fmt"
+- "log"
+- "strings"
+-
+- "code.google.com/p/go.net/html"
+-)
+-
+-func ExampleParse() {
+- s := `<p>Links:</p><ul><li><a href="foo">Foo</a><li><a href="/bar/baz">BarBaz</a></ul>`
+- doc, err := html.Parse(strings.NewReader(s))
+- if err != nil {
+- log.Fatal(err)
+- }
+- var f func(*html.Node)
+- f = func(n *html.Node) {
+- if n.Type == html.ElementNode && n.Data == "a" {
+- for _, a := range n.Attr {
+- if a.Key == "href" {
+- fmt.Println(a.Val)
+- break
+- }
+- }
+- }
+- for c := n.FirstChild; c != nil; c = c.NextSibling {
+- f(c)
+- }
+- }
+- f(doc)
+- // Output:
+- // foo
+- // /bar/baz
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/foreign.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/foreign.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/foreign.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/foreign.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,226 +0,0 @@
+-// Copyright 2011 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 html
+-
+-import (
+- "strings"
+-)
+-
+-func adjustAttributeNames(aa []Attribute, nameMap map[string]string) {
+- for i := range aa {
+- if newName, ok := nameMap[aa[i].Key]; ok {
+- aa[i].Key = newName
+- }
+- }
+-}
+-
+-func adjustForeignAttributes(aa []Attribute) {
+- for i, a := range aa {
+- if a.Key == "" || a.Key[0] != 'x' {
+- continue
+- }
+- switch a.Key {
+- case "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show",
+- "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "xmlns:xlink":
+- j := strings.Index(a.Key, ":")
+- aa[i].Namespace = a.Key[:j]
+- aa[i].Key = a.Key[j+1:]
+- }
+- }
+-}
+-
+-func htmlIntegrationPoint(n *Node) bool {
+- if n.Type != ElementNode {
+- return false
+- }
+- switch n.Namespace {
+- case "math":
+- if n.Data == "annotation-xml" {
+- for _, a := range n.Attr {
+- if a.Key == "encoding" {
+- val := strings.ToLower(a.Val)
+- if val == "text/html" || val == "application/xhtml+xml" {
+- return true
+- }
+- }
+- }
+- }
+- case "svg":
+- switch n.Data {
+- case "desc", "foreignObject", "title":
+- return true
+- }
+- }
+- return false
+-}
+-
+-func mathMLTextIntegrationPoint(n *Node) bool {
+- if n.Namespace != "math" {
+- return false
+- }
+- switch n.Data {
+- case "mi", "mo", "mn", "ms", "mtext":
+- return true
+- }
+- return false
+-}
+-
+-// Section 12.2.5.5.
+-var breakout = map[string]bool{
+- "b": true,
+- "big": true,
+- "blockquote": true,
+- "body": true,
+- "br": true,
+- "center": true,
+- "code": true,
+- "dd": true,
+- "div": true,
+- "dl": true,
+- "dt": true,
+- "em": true,
+- "embed": true,
+- "h1": true,
+- "h2": true,
+- "h3": true,
+- "h4": true,
+- "h5": true,
+- "h6": true,
+- "head": true,
+- "hr": true,
+- "i": true,
+- "img": true,
+- "li": true,
+- "listing": true,
+- "menu": true,
+- "meta": true,
+- "nobr": true,
+- "ol": true,
+- "p": true,
+- "pre": true,
+- "ruby": true,
+- "s": true,
+- "small": true,
+- "span": true,
+- "strong": true,
+- "strike": true,
+- "sub": true,
+- "sup": true,
+- "table": true,
+- "tt": true,
+- "u": true,
+- "ul": true,
+- "var": true,
+-}
+-
+-// Section 12.2.5.5.
+-var svgTagNameAdjustments = map[string]string{
+- "altglyph": "altGlyph",
+- "altglyphdef": "altGlyphDef",
+- "altglyphitem": "altGlyphItem",
+- "animatecolor": "animateColor",
+- "animatemotion": "animateMotion",
+- "animatetransform": "animateTransform",
+- "clippath": "clipPath",
+- "feblend": "feBlend",
+- "fecolormatrix": "feColorMatrix",
+- "fecomponenttransfer": "feComponentTransfer",
+- "fecomposite": "feComposite",
+- "feconvolvematrix": "feConvolveMatrix",
+- "fediffuselighting": "feDiffuseLighting",
+- "fedisplacementmap": "feDisplacementMap",
+- "fedistantlight": "feDistantLight",
+- "feflood": "feFlood",
+- "fefunca": "feFuncA",
+- "fefuncb": "feFuncB",
+- "fefuncg": "feFuncG",
+- "fefuncr": "feFuncR",
+- "fegaussianblur": "feGaussianBlur",
+- "feimage": "feImage",
+- "femerge": "feMerge",
+- "femergenode": "feMergeNode",
+- "femorphology": "feMorphology",
+- "feoffset": "feOffset",
+- "fepointlight": "fePointLight",
+- "fespecularlighting": "feSpecularLighting",
+- "fespotlight": "feSpotLight",
+- "fetile": "feTile",
+- "feturbulence": "feTurbulence",
+- "foreignobject": "foreignObject",
+- "glyphref": "glyphRef",
+- "lineargradient": "linearGradient",
+- "radialgradient": "radialGradient",
+- "textpath": "textPath",
+-}
+-
+-// Section 12.2.5.1
+-var mathMLAttributeAdjustments = map[string]string{
+- "definitionurl": "definitionURL",
+-}
+-
+-var svgAttributeAdjustments = map[string]string{
+- "attributename": "attributeName",
+- "attributetype": "attributeType",
+- "basefrequency": "baseFrequency",
+- "baseprofile": "baseProfile",
+- "calcmode": "calcMode",
+- "clippathunits": "clipPathUnits",
+- "contentscripttype": "contentScriptType",
+- "contentstyletype": "contentStyleType",
+- "diffuseconstant": "diffuseConstant",
+- "edgemode": "edgeMode",
+- "externalresourcesrequired": "externalResourcesRequired",
+- "filterres": "filterRes",
+- "filterunits": "filterUnits",
+- "glyphref": "glyphRef",
+- "gradienttransform": "gradientTransform",
+- "gradientunits": "gradientUnits",
+- "kernelmatrix": "kernelMatrix",
+- "kernelunitlength": "kernelUnitLength",
+- "keypoints": "keyPoints",
+- "keysplines": "keySplines",
+- "keytimes": "keyTimes",
+- "lengthadjust": "lengthAdjust",
+- "limitingconeangle": "limitingConeAngle",
+- "markerheight": "markerHeight",
+- "markerunits": "markerUnits",
+- "markerwidth": "markerWidth",
+- "maskcontentunits": "maskContentUnits",
+- "maskunits": "maskUnits",
+- "numoctaves": "numOctaves",
+- "pathlength": "pathLength",
+- "patterncontentunits": "patternContentUnits",
+- "patterntransform": "patternTransform",
+- "patternunits": "patternUnits",
+- "pointsatx": "pointsAtX",
+- "pointsaty": "pointsAtY",
+- "pointsatz": "pointsAtZ",
+- "preservealpha": "preserveAlpha",
+- "preserveaspectratio": "preserveAspectRatio",
+- "primitiveunits": "primitiveUnits",
+- "refx": "refX",
+- "refy": "refY",
+- "repeatcount": "repeatCount",
+- "repeatdur": "repeatDur",
+- "requiredextensions": "requiredExtensions",
+- "requiredfeatures": "requiredFeatures",
+- "specularconstant": "specularConstant",
+- "specularexponent": "specularExponent",
+- "spreadmethod": "spreadMethod",
+- "startoffset": "startOffset",
+- "stddeviation": "stdDeviation",
+- "stitchtiles": "stitchTiles",
+- "surfacescale": "surfaceScale",
+- "systemlanguage": "systemLanguage",
+- "tablevalues": "tableValues",
+- "targetx": "targetX",
+- "targety": "targetY",
+- "textlength": "textLength",
+- "viewbox": "viewBox",
+- "viewtarget": "viewTarget",
+- "xchannelselector": "xChannelSelector",
+- "ychannelselector": "yChannelSelector",
+- "zoomandpan": "zoomAndPan",
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/node.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/node.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/node.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/node.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,193 +0,0 @@
+-// Copyright 2011 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 html
+-
+-import (
+- "code.google.com/p/go.net/html/atom"
+-)
+-
+-// A NodeType is the type of a Node.
+-type NodeType uint32
+-
+-const (
+- ErrorNode NodeType = iota
+- TextNode
+- DocumentNode
+- ElementNode
+- CommentNode
+- DoctypeNode
+- scopeMarkerNode
+-)
+-
+-// Section 12.2.3.3 says "scope markers are inserted when entering applet
+-// elements, buttons, object elements, marquees, table cells, and table
+-// captions, and are used to prevent formatting from 'leaking'".
+-var scopeMarker = Node{Type: scopeMarkerNode}
+-
+-// A Node consists of a NodeType and some Data (tag name for element nodes,
+-// content for text) and are part of a tree of Nodes. Element nodes may also
+-// have a Namespace and contain a slice of Attributes. Data is unescaped, so
+-// that it looks like "a<b" rather than "a<b". For element nodes, DataAtom
+-// is the atom for Data, or zero if Data is not a known tag name.
+-//
+-// An empty Namespace implies a "http://www.w3.org/1999/xhtml" namespace.
+-// Similarly, "math" is short for "http://www.w3.org/1998/Math/MathML", and
+-// "svg" is short for "http://www.w3.org/2000/svg".
+-type Node struct {
+- Parent, FirstChild, LastChild, PrevSibling, NextSibling *Node
+-
+- Type NodeType
+- DataAtom atom.Atom
+- Data string
+- Namespace string
+- Attr []Attribute
+-}
+-
+-// InsertBefore inserts newChild as a child of n, immediately before oldChild
+-// in the sequence of n's children. oldChild may be nil, in which case newChild
+-// is appended to the end of n's children.
+-//
+-// It will panic if newChild already has a parent or siblings.
+-func (n *Node) InsertBefore(newChild, oldChild *Node) {
+- if newChild.Parent != nil || newChild.PrevSibling != nil || newChild.NextSibling != nil {
+- panic("html: InsertBefore called for an attached child Node")
+- }
+- var prev, next *Node
+- if oldChild != nil {
+- prev, next = oldChild.PrevSibling, oldChild
+- } else {
+- prev = n.LastChild
+- }
+- if prev != nil {
+- prev.NextSibling = newChild
+- } else {
+- n.FirstChild = newChild
+- }
+- if next != nil {
+- next.PrevSibling = newChild
+- } else {
+- n.LastChild = newChild
+- }
+- newChild.Parent = n
+- newChild.PrevSibling = prev
+- newChild.NextSibling = next
+-}
+-
+-// AppendChild adds a node c as a child of n.
+-//
+-// It will panic if c already has a parent or siblings.
+-func (n *Node) AppendChild(c *Node) {
+- if c.Parent != nil || c.PrevSibling != nil || c.NextSibling != nil {
+- panic("html: AppendChild called for an attached child Node")
+- }
+- last := n.LastChild
+- if last != nil {
+- last.NextSibling = c
+- } else {
+- n.FirstChild = c
+- }
+- n.LastChild = c
+- c.Parent = n
+- c.PrevSibling = last
+-}
+-
+-// RemoveChild removes a node c that is a child of n. Afterwards, c will have
+-// no parent and no siblings.
+-//
+-// It will panic if c's parent is not n.
+-func (n *Node) RemoveChild(c *Node) {
+- if c.Parent != n {
+- panic("html: RemoveChild called for a non-child Node")
+- }
+- if n.FirstChild == c {
+- n.FirstChild = c.NextSibling
+- }
+- if c.NextSibling != nil {
+- c.NextSibling.PrevSibling = c.PrevSibling
+- }
+- if n.LastChild == c {
+- n.LastChild = c.PrevSibling
+- }
+- if c.PrevSibling != nil {
+- c.PrevSibling.NextSibling = c.NextSibling
+- }
+- c.Parent = nil
+- c.PrevSibling = nil
+- c.NextSibling = nil
+-}
+-
+-// reparentChildren reparents all of src's child nodes to dst.
+-func reparentChildren(dst, src *Node) {
+- for {
+- child := src.FirstChild
+- if child == nil {
+- break
+- }
+- src.RemoveChild(child)
+- dst.AppendChild(child)
+- }
+-}
+-
+-// clone returns a new node with the same type, data and attributes.
+-// The clone has no parent, no siblings and no children.
+-func (n *Node) clone() *Node {
+- m := &Node{
+- Type: n.Type,
+- DataAtom: n.DataAtom,
+- Data: n.Data,
+- Attr: make([]Attribute, len(n.Attr)),
+- }
+- copy(m.Attr, n.Attr)
+- return m
+-}
+-
+-// nodeStack is a stack of nodes.
+-type nodeStack []*Node
+-
+-// pop pops the stack. It will panic if s is empty.
+-func (s *nodeStack) pop() *Node {
+- i := len(*s)
+- n := (*s)[i-1]
+- *s = (*s)[:i-1]
+- return n
+-}
+-
+-// top returns the most recently pushed node, or nil if s is empty.
+-func (s *nodeStack) top() *Node {
+- if i := len(*s); i > 0 {
+- return (*s)[i-1]
+- }
+- return nil
+-}
+-
+-// index returns the index of the top-most occurrence of n in the stack, or -1
+-// if n is not present.
+-func (s *nodeStack) index(n *Node) int {
+- for i := len(*s) - 1; i >= 0; i-- {
+- if (*s)[i] == n {
+- return i
+- }
+- }
+- return -1
+-}
+-
+-// insert inserts a node at the given index.
+-func (s *nodeStack) insert(i int, n *Node) {
+- (*s) = append(*s, nil)
+- copy((*s)[i+1:], (*s)[i:])
+- (*s)[i] = n
+-}
+-
+-// remove removes a node from the stack. It is a no-op if n is not present.
+-func (s *nodeStack) remove(n *Node) {
+- i := s.index(n)
+- if i == -1 {
+- return
+- }
+- copy((*s)[i:], (*s)[i+1:])
+- j := len(*s) - 1
+- (*s)[j] = nil
+- *s = (*s)[:j]
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/node_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/node_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/node_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/node_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,146 +0,0 @@
+-// Copyright 2010 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 html
+-
+-import (
+- "fmt"
+-)
+-
+-// checkTreeConsistency checks that a node and its descendants are all
+-// consistent in their parent/child/sibling relationships.
+-func checkTreeConsistency(n *Node) error {
+- return checkTreeConsistency1(n, 0)
+-}
+-
+-func checkTreeConsistency1(n *Node, depth int) error {
+- if depth == 1e4 {
+- return fmt.Errorf("html: tree looks like it contains a cycle")
+- }
+- if err := checkNodeConsistency(n); err != nil {
+- return err
+- }
+- for c := n.FirstChild; c != nil; c = c.NextSibling {
+- if err := checkTreeConsistency1(c, depth+1); err != nil {
+- return err
+- }
+- }
+- return nil
+-}
+-
+-// checkNodeConsistency checks that a node's parent/child/sibling relationships
+-// are consistent.
+-func checkNodeConsistency(n *Node) error {
+- if n == nil {
+- return nil
+- }
+-
+- nParent := 0
+- for p := n.Parent; p != nil; p = p.Parent {
+- nParent++
+- if nParent == 1e4 {
+- return fmt.Errorf("html: parent list looks like an infinite loop")
+- }
+- }
+-
+- nForward := 0
+- for c := n.FirstChild; c != nil; c = c.NextSibling {
+- nForward++
+- if nForward == 1e6 {
+- return fmt.Errorf("html: forward list of children looks like an infinite loop")
+- }
+- if c.Parent != n {
+- return fmt.Errorf("html: inconsistent child/parent relationship")
+- }
+- }
+-
+- nBackward := 0
+- for c := n.LastChild; c != nil; c = c.PrevSibling {
+- nBackward++
+- if nBackward == 1e6 {
+- return fmt.Errorf("html: backward list of children looks like an infinite loop")
+- }
+- if c.Parent != n {
+- return fmt.Errorf("html: inconsistent child/parent relationship")
+- }
+- }
+-
+- if n.Parent != nil {
+- if n.Parent == n {
+- return fmt.Errorf("html: inconsistent parent relationship")
+- }
+- if n.Parent == n.FirstChild {
+- return fmt.Errorf("html: inconsistent parent/first relationship")
+- }
+- if n.Parent == n.LastChild {
+- return fmt.Errorf("html: inconsistent parent/last relationship")
+- }
+- if n.Parent == n.PrevSibling {
+- return fmt.Errorf("html: inconsistent parent/prev relationship")
+- }
+- if n.Parent == n.NextSibling {
+- return fmt.Errorf("html: inconsistent parent/next relationship")
+- }
+-
+- parentHasNAsAChild := false
+- for c := n.Parent.FirstChild; c != nil; c = c.NextSibling {
+- if c == n {
+- parentHasNAsAChild = true
+- break
+- }
+- }
+- if !parentHasNAsAChild {
+- return fmt.Errorf("html: inconsistent parent/child relationship")
+- }
+- }
+-
+- if n.PrevSibling != nil && n.PrevSibling.NextSibling != n {
+- return fmt.Errorf("html: inconsistent prev/next relationship")
+- }
+- if n.NextSibling != nil && n.NextSibling.PrevSibling != n {
+- return fmt.Errorf("html: inconsistent next/prev relationship")
+- }
+-
+- if (n.FirstChild == nil) != (n.LastChild == nil) {
+- return fmt.Errorf("html: inconsistent first/last relationship")
+- }
+- if n.FirstChild != nil && n.FirstChild == n.LastChild {
+- // We have a sole child.
+- if n.FirstChild.PrevSibling != nil || n.FirstChild.NextSibling != nil {
+- return fmt.Errorf("html: inconsistent sole child's sibling relationship")
+- }
+- }
+-
+- seen := map[*Node]bool{}
+-
+- var last *Node
+- for c := n.FirstChild; c != nil; c = c.NextSibling {
+- if seen[c] {
+- return fmt.Errorf("html: inconsistent repeated child")
+- }
+- seen[c] = true
+- last = c
+- }
+- if last != n.LastChild {
+- return fmt.Errorf("html: inconsistent last relationship")
+- }
+-
+- var first *Node
+- for c := n.LastChild; c != nil; c = c.PrevSibling {
+- if !seen[c] {
+- return fmt.Errorf("html: inconsistent missing child")
+- }
+- delete(seen, c)
+- first = c
+- }
+- if first != n.FirstChild {
+- return fmt.Errorf("html: inconsistent first relationship")
+- }
+-
+- if len(seen) != 0 {
+- return fmt.Errorf("html: inconsistent forwards/backwards child list")
+- }
+-
+- return nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/parse.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/parse.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/parse.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/parse.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,2092 +0,0 @@
+-// Copyright 2010 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 html
+-
+-import (
+- "errors"
+- "fmt"
+- "io"
+- "strings"
+-
+- a "code.google.com/p/go.net/html/atom"
+-)
+-
+-// A parser implements the HTML5 parsing algorithm:
+-// http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#tree-construction
+-type parser struct {
+- // tokenizer provides the tokens for the parser.
+- tokenizer *Tokenizer
+- // tok is the most recently read token.
+- tok Token
+- // Self-closing tags like <hr/> are treated as start tags, except that
+- // hasSelfClosingToken is set while they are being processed.
+- hasSelfClosingToken bool
+- // doc is the document root element.
+- doc *Node
+- // The stack of open elements (section 12.2.3.2) and active formatting
+- // elements (section 12.2.3.3).
+- oe, afe nodeStack
+- // Element pointers (section 12.2.3.4).
+- head, form *Node
+- // Other parsing state flags (section 12.2.3.5).
+- scripting, framesetOK bool
+- // im is the current insertion mode.
+- im insertionMode
+- // originalIM is the insertion mode to go back to after completing a text
+- // or inTableText insertion mode.
+- originalIM insertionMode
+- // fosterParenting is whether new elements should be inserted according to
+- // the foster parenting rules (section 12.2.5.3).
+- fosterParenting bool
+- // quirks is whether the parser is operating in "quirks mode."
+- quirks bool
+- // fragment is whether the parser is parsing an HTML fragment.
+- fragment bool
+- // context is the context element when parsing an HTML fragment
+- // (section 12.4).
+- context *Node
+-}
+-
+-func (p *parser) top() *Node {
+- if n := p.oe.top(); n != nil {
+- return n
+- }
+- return p.doc
+-}
+-
+-// Stop tags for use in popUntil. These come from section 12.2.3.2.
+-var (
+- defaultScopeStopTags = map[string][]a.Atom{
+- "": {a.Applet, a.Caption, a.Html, a.Table, a.Td, a.Th, a.Marquee, a.Object},
+- "math": {a.AnnotationXml, a.Mi, a.Mn, a.Mo, a.Ms, a.Mtext},
+- "svg": {a.Desc, a.ForeignObject, a.Title},
+- }
+-)
+-
+-type scope int
+-
+-const (
+- defaultScope scope = iota
+- listItemScope
+- buttonScope
+- tableScope
+- tableRowScope
+- tableBodyScope
+- selectScope
+-)
+-
+-// popUntil pops the stack of open elements at the highest element whose tag
+-// is in matchTags, provided there is no higher element in the scope's stop
+-// tags (as defined in section 12.2.3.2). It returns whether or not there was
+-// such an element. If there was not, popUntil leaves the stack unchanged.
+-//
+-// For example, the set of stop tags for table scope is: "html", "table". If
+-// the stack was:
+-// ["html", "body", "font", "table", "b", "i", "u"]
+-// then popUntil(tableScope, "font") would return false, but
+-// popUntil(tableScope, "i") would return true and the stack would become:
+-// ["html", "body", "font", "table", "b"]
+-//
+-// If an element's tag is in both the stop tags and matchTags, then the stack
+-// will be popped and the function returns true (provided, of course, there was
+-// no higher element in the stack that was also in the stop tags). For example,
+-// popUntil(tableScope, "table") returns true and leaves:
+-// ["html", "body", "font"]
+-func (p *parser) popUntil(s scope, matchTags ...a.Atom) bool {
+- if i := p.indexOfElementInScope(s, matchTags...); i != -1 {
+- p.oe = p.oe[:i]
+- return true
+- }
+- return false
+-}
+-
+-// indexOfElementInScope returns the index in p.oe of the highest element whose
+-// tag is in matchTags that is in scope. If no matching element is in scope, it
+-// returns -1.
+-func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int {
+- for i := len(p.oe) - 1; i >= 0; i-- {
+- tagAtom := p.oe[i].DataAtom
+- if p.oe[i].Namespace == "" {
+- for _, t := range matchTags {
+- if t == tagAtom {
+- return i
+- }
+- }
+- switch s {
+- case defaultScope:
+- // No-op.
+- case listItemScope:
+- if tagAtom == a.Ol || tagAtom == a.Ul {
+- return -1
+- }
+- case buttonScope:
+- if tagAtom == a.Button {
+- return -1
+- }
+- case tableScope:
+- if tagAtom == a.Html || tagAtom == a.Table {
+- return -1
+- }
+- case selectScope:
+- if tagAtom != a.Optgroup && tagAtom != a.Option {
+- return -1
+- }
+- default:
+- panic("unreachable")
+- }
+- }
+- switch s {
+- case defaultScope, listItemScope, buttonScope:
+- for _, t := range defaultScopeStopTags[p.oe[i].Namespace] {
+- if t == tagAtom {
+- return -1
+- }
+- }
+- }
+- }
+- return -1
+-}
+-
+-// elementInScope is like popUntil, except that it doesn't modify the stack of
+-// open elements.
+-func (p *parser) elementInScope(s scope, matchTags ...a.Atom) bool {
+- return p.indexOfElementInScope(s, matchTags...) != -1
+-}
+-
+-// clearStackToContext pops elements off the stack of open elements until a
+-// scope-defined element is found.
+-func (p *parser) clearStackToContext(s scope) {
+- for i := len(p.oe) - 1; i >= 0; i-- {
+- tagAtom := p.oe[i].DataAtom
+- switch s {
+- case tableScope:
+- if tagAtom == a.Html || tagAtom == a.Table {
+- p.oe = p.oe[:i+1]
+- return
+- }
+- case tableRowScope:
+- if tagAtom == a.Html || tagAtom == a.Tr {
+- p.oe = p.oe[:i+1]
+- return
+- }
+- case tableBodyScope:
+- if tagAtom == a.Html || tagAtom == a.Tbody || tagAtom == a.Tfoot || tagAtom == a.Thead {
+- p.oe = p.oe[:i+1]
+- return
+- }
+- default:
+- panic("unreachable")
+- }
+- }
+-}
+-
+-// generateImpliedEndTags pops nodes off the stack of open elements as long as
+-// the top node has a tag name of dd, dt, li, option, optgroup, p, rp, or rt.
+-// If exceptions are specified, nodes with that name will not be popped off.
+-func (p *parser) generateImpliedEndTags(exceptions ...string) {
+- var i int
+-loop:
+- for i = len(p.oe) - 1; i >= 0; i-- {
+- n := p.oe[i]
+- if n.Type == ElementNode {
+- switch n.DataAtom {
+- case a.Dd, a.Dt, a.Li, a.Option, a.Optgroup, a.P, a.Rp, a.Rt:
+- for _, except := range exceptions {
+- if n.Data == except {
+- break loop
+- }
+- }
+- continue
+- }
+- }
+- break
+- }
+-
+- p.oe = p.oe[:i+1]
+-}
+-
+-// addChild adds a child node n to the top element, and pushes n onto the stack
+-// of open elements if it is an element node.
+-func (p *parser) addChild(n *Node) {
+- if p.shouldFosterParent() {
+- p.fosterParent(n)
+- } else {
+- p.top().AppendChild(n)
+- }
+-
+- if n.Type == ElementNode {
+- p.oe = append(p.oe, n)
+- }
+-}
+-
+-// shouldFosterParent returns whether the next node to be added should be
+-// foster parented.
+-func (p *parser) shouldFosterParent() bool {
+- if p.fosterParenting {
+- switch p.top().DataAtom {
+- case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+- return true
+- }
+- }
+- return false
+-}
+-
+-// fosterParent adds a child node according to the foster parenting rules.
+-// Section 12.2.5.3, "foster parenting".
+-func (p *parser) fosterParent(n *Node) {
+- var table, parent, prev *Node
+- var i int
+- for i = len(p.oe) - 1; i >= 0; i-- {
+- if p.oe[i].DataAtom == a.Table {
+- table = p.oe[i]
+- break
+- }
+- }
+-
+- if table == nil {
+- // The foster parent is the html element.
+- parent = p.oe[0]
+- } else {
+- parent = table.Parent
+- }
+- if parent == nil {
+- parent = p.oe[i-1]
+- }
+-
+- if table != nil {
+- prev = table.PrevSibling
+- } else {
+- prev = parent.LastChild
+- }
+- if prev != nil && prev.Type == TextNode && n.Type == TextNode {
+- prev.Data += n.Data
+- return
+- }
+-
+- parent.InsertBefore(n, table)
+-}
+-
+-// addText adds text to the preceding node if it is a text node, or else it
+-// calls addChild with a new text node.
+-func (p *parser) addText(text string) {
+- if text == "" {
+- return
+- }
+-
+- if p.shouldFosterParent() {
+- p.fosterParent(&Node{
+- Type: TextNode,
+- Data: text,
+- })
+- return
+- }
+-
+- t := p.top()
+- if n := t.LastChild; n != nil && n.Type == TextNode {
+- n.Data += text
+- return
+- }
+- p.addChild(&Node{
+- Type: TextNode,
+- Data: text,
+- })
+-}
+-
+-// addElement adds a child element based on the current token.
+-func (p *parser) addElement() {
+- p.addChild(&Node{
+- Type: ElementNode,
+- DataAtom: p.tok.DataAtom,
+- Data: p.tok.Data,
+- Attr: p.tok.Attr,
+- })
+-}
+-
+-// Section 12.2.3.3.
+-func (p *parser) addFormattingElement() {
+- tagAtom, attr := p.tok.DataAtom, p.tok.Attr
+- p.addElement()
+-
+- // Implement the Noah's Ark clause, but with three per family instead of two.
+- identicalElements := 0
+-findIdenticalElements:
+- for i := len(p.afe) - 1; i >= 0; i-- {
+- n := p.afe[i]
+- if n.Type == scopeMarkerNode {
+- break
+- }
+- if n.Type != ElementNode {
+- continue
+- }
+- if n.Namespace != "" {
+- continue
+- }
+- if n.DataAtom != tagAtom {
+- continue
+- }
+- if len(n.Attr) != len(attr) {
+- continue
+- }
+- compareAttributes:
+- for _, t0 := range n.Attr {
+- for _, t1 := range attr {
+- if t0.Key == t1.Key && t0.Namespace == t1.Namespace && t0.Val == t1.Val {
+- // Found a match for this attribute, continue with the next attribute.
+- continue compareAttributes
+- }
+- }
+- // If we get here, there is no attribute that matches a.
+- // Therefore the element is not identical to the new one.
+- continue findIdenticalElements
+- }
+-
+- identicalElements++
+- if identicalElements >= 3 {
+- p.afe.remove(n)
+- }
+- }
+-
+- p.afe = append(p.afe, p.top())
+-}
+-
+-// Section 12.2.3.3.
+-func (p *parser) clearActiveFormattingElements() {
+- for {
+- n := p.afe.pop()
+- if len(p.afe) == 0 || n.Type == scopeMarkerNode {
+- return
+- }
+- }
+-}
+-
+-// Section 12.2.3.3.
+-func (p *parser) reconstructActiveFormattingElements() {
+- n := p.afe.top()
+- if n == nil {
+- return
+- }
+- if n.Type == scopeMarkerNode || p.oe.index(n) != -1 {
+- return
+- }
+- i := len(p.afe) - 1
+- for n.Type != scopeMarkerNode && p.oe.index(n) == -1 {
+- if i == 0 {
+- i = -1
+- break
+- }
+- i--
+- n = p.afe[i]
+- }
+- for {
+- i++
+- clone := p.afe[i].clone()
+- p.addChild(clone)
+- p.afe[i] = clone
+- if i == len(p.afe)-1 {
+- break
+- }
+- }
+-}
+-
+-// Section 12.2.4.
+-func (p *parser) acknowledgeSelfClosingTag() {
+- p.hasSelfClosingToken = false
+-}
+-
+-// An insertion mode (section 12.2.3.1) is the state transition function from
+-// a particular state in the HTML5 parser's state machine. It updates the
+-// parser's fields depending on parser.tok (where ErrorToken means EOF).
+-// It returns whether the token was consumed.
+-type insertionMode func(*parser) bool
+-
+-// setOriginalIM sets the insertion mode to return to after completing a text or
+-// inTableText insertion mode.
+-// Section 12.2.3.1, "using the rules for".
+-func (p *parser) setOriginalIM() {
+- if p.originalIM != nil {
+- panic("html: bad parser state: originalIM was set twice")
+- }
+- p.originalIM = p.im
+-}
+-
+-// Section 12.2.3.1, "reset the insertion mode".
+-func (p *parser) resetInsertionMode() {
+- for i := len(p.oe) - 1; i >= 0; i-- {
+- n := p.oe[i]
+- if i == 0 && p.context != nil {
+- n = p.context
+- }
+-
+- switch n.DataAtom {
+- case a.Select:
+- p.im = inSelectIM
+- case a.Td, a.Th:
+- p.im = inCellIM
+- case a.Tr:
+- p.im = inRowIM
+- case a.Tbody, a.Thead, a.Tfoot:
+- p.im = inTableBodyIM
+- case a.Caption:
+- p.im = inCaptionIM
+- case a.Colgroup:
+- p.im = inColumnGroupIM
+- case a.Table:
+- p.im = inTableIM
+- case a.Head:
+- p.im = inBodyIM
+- case a.Body:
+- p.im = inBodyIM
+- case a.Frameset:
+- p.im = inFramesetIM
+- case a.Html:
+- p.im = beforeHeadIM
+- default:
+- continue
+- }
+- return
+- }
+- p.im = inBodyIM
+-}
+-
+-const whitespace = " \t\r\n\f"
+-
+-// Section 12.2.5.4.1.
+-func initialIM(p *parser) bool {
+- switch p.tok.Type {
+- case TextToken:
+- p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace)
+- if len(p.tok.Data) == 0 {
+- // It was all whitespace, so ignore it.
+- return true
+- }
+- case CommentToken:
+- p.doc.AppendChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- return true
+- case DoctypeToken:
+- n, quirks := parseDoctype(p.tok.Data)
+- p.doc.AppendChild(n)
+- p.quirks = quirks
+- p.im = beforeHTMLIM
+- return true
+- }
+- p.quirks = true
+- p.im = beforeHTMLIM
+- return false
+-}
+-
+-// Section 12.2.5.4.2.
+-func beforeHTMLIM(p *parser) bool {
+- switch p.tok.Type {
+- case DoctypeToken:
+- // Ignore the token.
+- return true
+- case TextToken:
+- p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace)
+- if len(p.tok.Data) == 0 {
+- // It was all whitespace, so ignore it.
+- return true
+- }
+- case StartTagToken:
+- if p.tok.DataAtom == a.Html {
+- p.addElement()
+- p.im = beforeHeadIM
+- return true
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Head, a.Body, a.Html, a.Br:
+- p.parseImpliedToken(StartTagToken, a.Html, a.Html.String())
+- return false
+- default:
+- // Ignore the token.
+- return true
+- }
+- case CommentToken:
+- p.doc.AppendChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- return true
+- }
+- p.parseImpliedToken(StartTagToken, a.Html, a.Html.String())
+- return false
+-}
+-
+-// Section 12.2.5.4.3.
+-func beforeHeadIM(p *parser) bool {
+- switch p.tok.Type {
+- case TextToken:
+- p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace)
+- if len(p.tok.Data) == 0 {
+- // It was all whitespace, so ignore it.
+- return true
+- }
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Head:
+- p.addElement()
+- p.head = p.top()
+- p.im = inHeadIM
+- return true
+- case a.Html:
+- return inBodyIM(p)
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Head, a.Body, a.Html, a.Br:
+- p.parseImpliedToken(StartTagToken, a.Head, a.Head.String())
+- return false
+- default:
+- // Ignore the token.
+- return true
+- }
+- case CommentToken:
+- p.addChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- return true
+- case DoctypeToken:
+- // Ignore the token.
+- return true
+- }
+-
+- p.parseImpliedToken(StartTagToken, a.Head, a.Head.String())
+- return false
+-}
+-
+-// Section 12.2.5.4.4.
+-func inHeadIM(p *parser) bool {
+- switch p.tok.Type {
+- case TextToken:
+- s := strings.TrimLeft(p.tok.Data, whitespace)
+- if len(s) < len(p.tok.Data) {
+- // Add the initial whitespace to the current node.
+- p.addText(p.tok.Data[:len(p.tok.Data)-len(s)])
+- if s == "" {
+- return true
+- }
+- p.tok.Data = s
+- }
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Html:
+- return inBodyIM(p)
+- case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta:
+- p.addElement()
+- p.oe.pop()
+- p.acknowledgeSelfClosingTag()
+- return true
+- case a.Script, a.Title, a.Noscript, a.Noframes, a.Style:
+- p.addElement()
+- p.setOriginalIM()
+- p.im = textIM
+- return true
+- case a.Head:
+- // Ignore the token.
+- return true
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Head:
+- n := p.oe.pop()
+- if n.DataAtom != a.Head {
+- panic("html: bad parser state: <head> element not found, in the in-head insertion mode")
+- }
+- p.im = afterHeadIM
+- return true
+- case a.Body, a.Html, a.Br:
+- p.parseImpliedToken(EndTagToken, a.Head, a.Head.String())
+- return false
+- default:
+- // Ignore the token.
+- return true
+- }
+- case CommentToken:
+- p.addChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- return true
+- case DoctypeToken:
+- // Ignore the token.
+- return true
+- }
+-
+- p.parseImpliedToken(EndTagToken, a.Head, a.Head.String())
+- return false
+-}
+-
+-// Section 12.2.5.4.6.
+-func afterHeadIM(p *parser) bool {
+- switch p.tok.Type {
+- case TextToken:
+- s := strings.TrimLeft(p.tok.Data, whitespace)
+- if len(s) < len(p.tok.Data) {
+- // Add the initial whitespace to the current node.
+- p.addText(p.tok.Data[:len(p.tok.Data)-len(s)])
+- if s == "" {
+- return true
+- }
+- p.tok.Data = s
+- }
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Html:
+- return inBodyIM(p)
+- case a.Body:
+- p.addElement()
+- p.framesetOK = false
+- p.im = inBodyIM
+- return true
+- case a.Frameset:
+- p.addElement()
+- p.im = inFramesetIM
+- return true
+- case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Title:
+- p.oe = append(p.oe, p.head)
+- defer p.oe.remove(p.head)
+- return inHeadIM(p)
+- case a.Head:
+- // Ignore the token.
+- return true
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Body, a.Html, a.Br:
+- // Drop down to creating an implied <body> tag.
+- default:
+- // Ignore the token.
+- return true
+- }
+- case CommentToken:
+- p.addChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- return true
+- case DoctypeToken:
+- // Ignore the token.
+- return true
+- }
+-
+- p.parseImpliedToken(StartTagToken, a.Body, a.Body.String())
+- p.framesetOK = true
+- return false
+-}
+-
+-// copyAttributes copies attributes of src not found on dst to dst.
+-func copyAttributes(dst *Node, src Token) {
+- if len(src.Attr) == 0 {
+- return
+- }
+- attr := map[string]string{}
+- for _, t := range dst.Attr {
+- attr[t.Key] = t.Val
+- }
+- for _, t := range src.Attr {
+- if _, ok := attr[t.Key]; !ok {
+- dst.Attr = append(dst.Attr, t)
+- attr[t.Key] = t.Val
+- }
+- }
+-}
+-
+-// Section 12.2.5.4.7.
+-func inBodyIM(p *parser) bool {
+- switch p.tok.Type {
+- case TextToken:
+- d := p.tok.Data
+- switch n := p.oe.top(); n.DataAtom {
+- case a.Pre, a.Listing:
+- if n.FirstChild == nil {
+- // Ignore a newline at the start of a <pre> block.
+- if d != "" && d[0] == '\r' {
+- d = d[1:]
+- }
+- if d != "" && d[0] == '\n' {
+- d = d[1:]
+- }
+- }
+- }
+- d = strings.Replace(d, "\x00", "", -1)
+- if d == "" {
+- return true
+- }
+- p.reconstructActiveFormattingElements()
+- p.addText(d)
+- if p.framesetOK && strings.TrimLeft(d, whitespace) != "" {
+- // There were non-whitespace characters inserted.
+- p.framesetOK = false
+- }
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Html:
+- copyAttributes(p.oe[0], p.tok)
+- case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Title:
+- return inHeadIM(p)
+- case a.Body:
+- if len(p.oe) >= 2 {
+- body := p.oe[1]
+- if body.Type == ElementNode && body.DataAtom == a.Body {
+- p.framesetOK = false
+- copyAttributes(body, p.tok)
+- }
+- }
+- case a.Frameset:
+- if !p.framesetOK || len(p.oe) < 2 || p.oe[1].DataAtom != a.Body {
+- // Ignore the token.
+- return true
+- }
+- body := p.oe[1]
+- if body.Parent != nil {
+- body.Parent.RemoveChild(body)
+- }
+- p.oe = p.oe[:1]
+- p.addElement()
+- p.im = inFramesetIM
+- return true
+- case a.Address, a.Article, a.Aside, a.Blockquote, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Menu, a.Nav, a.Ol, a.P, a.Section, a.Summary, a.Ul:
+- p.popUntil(buttonScope, a.P)
+- p.addElement()
+- case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
+- p.popUntil(buttonScope, a.P)
+- switch n := p.top(); n.DataAtom {
+- case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
+- p.oe.pop()
+- }
+- p.addElement()
+- case a.Pre, a.Listing:
+- p.popUntil(buttonScope, a.P)
+- p.addElement()
+- // The newline, if any, will be dealt with by the TextToken case.
+- p.framesetOK = false
+- case a.Form:
+- if p.form == nil {
+- p.popUntil(buttonScope, a.P)
+- p.addElement()
+- p.form = p.top()
+- }
+- case a.Li:
+- p.framesetOK = false
+- for i := len(p.oe) - 1; i >= 0; i-- {
+- node := p.oe[i]
+- switch node.DataAtom {
+- case a.Li:
+- p.oe = p.oe[:i]
+- case a.Address, a.Div, a.P:
+- continue
+- default:
+- if !isSpecialElement(node) {
+- continue
+- }
+- }
+- break
+- }
+- p.popUntil(buttonScope, a.P)
+- p.addElement()
+- case a.Dd, a.Dt:
+- p.framesetOK = false
+- for i := len(p.oe) - 1; i >= 0; i-- {
+- node := p.oe[i]
+- switch node.DataAtom {
+- case a.Dd, a.Dt:
+- p.oe = p.oe[:i]
+- case a.Address, a.Div, a.P:
+- continue
+- default:
+- if !isSpecialElement(node) {
+- continue
+- }
+- }
+- break
+- }
+- p.popUntil(buttonScope, a.P)
+- p.addElement()
+- case a.Plaintext:
+- p.popUntil(buttonScope, a.P)
+- p.addElement()
+- case a.Button:
+- p.popUntil(defaultScope, a.Button)
+- p.reconstructActiveFormattingElements()
+- p.addElement()
+- p.framesetOK = false
+- case a.A:
+- for i := len(p.afe) - 1; i >= 0 && p.afe[i].Type != scopeMarkerNode; i-- {
+- if n := p.afe[i]; n.Type == ElementNode && n.DataAtom == a.A {
+- p.inBodyEndTagFormatting(a.A)
+- p.oe.remove(n)
+- p.afe.remove(n)
+- break
+- }
+- }
+- p.reconstructActiveFormattingElements()
+- p.addFormattingElement()
+- case a.B, a.Big, a.Code, a.Em, a.Font, a.I, a.S, a.Small, a.Strike, a.Strong, a.Tt, a.U:
+- p.reconstructActiveFormattingElements()
+- p.addFormattingElement()
+- case a.Nobr:
+- p.reconstructActiveFormattingElements()
+- if p.elementInScope(defaultScope, a.Nobr) {
+- p.inBodyEndTagFormatting(a.Nobr)
+- p.reconstructActiveFormattingElements()
+- }
+- p.addFormattingElement()
+- case a.Applet, a.Marquee, a.Object:
+- p.reconstructActiveFormattingElements()
+- p.addElement()
+- p.afe = append(p.afe, &scopeMarker)
+- p.framesetOK = false
+- case a.Table:
+- if !p.quirks {
+- p.popUntil(buttonScope, a.P)
+- }
+- p.addElement()
+- p.framesetOK = false
+- p.im = inTableIM
+- return true
+- case a.Area, a.Br, a.Embed, a.Img, a.Input, a.Keygen, a.Wbr:
+- p.reconstructActiveFormattingElements()
+- p.addElement()
+- p.oe.pop()
+- p.acknowledgeSelfClosingTag()
+- if p.tok.DataAtom == a.Input {
+- for _, t := range p.tok.Attr {
+- if t.Key == "type" {
+- if strings.ToLower(t.Val) == "hidden" {
+- // Skip setting framesetOK = false
+- return true
+- }
+- }
+- }
+- }
+- p.framesetOK = false
+- case a.Param, a.Source, a.Track:
+- p.addElement()
+- p.oe.pop()
+- p.acknowledgeSelfClosingTag()
+- case a.Hr:
+- p.popUntil(buttonScope, a.P)
+- p.addElement()
+- p.oe.pop()
+- p.acknowledgeSelfClosingTag()
+- p.framesetOK = false
+- case a.Image:
+- p.tok.DataAtom = a.Img
+- p.tok.Data = a.Img.String()
+- return false
+- case a.Isindex:
+- if p.form != nil {
+- // Ignore the token.
+- return true
+- }
+- action := ""
+- prompt := "This is a searchable index. Enter search keywords: "
+- attr := []Attribute{{Key: "name", Val: "isindex"}}
+- for _, t := range p.tok.Attr {
+- switch t.Key {
+- case "action":
+- action = t.Val
+- case "name":
+- // Ignore the attribute.
+- case "prompt":
+- prompt = t.Val
+- default:
+- attr = append(attr, t)
+- }
+- }
+- p.acknowledgeSelfClosingTag()
+- p.popUntil(buttonScope, a.P)
+- p.parseImpliedToken(StartTagToken, a.Form, a.Form.String())
+- if action != "" {
+- p.form.Attr = []Attribute{{Key: "action", Val: action}}
+- }
+- p.parseImpliedToken(StartTagToken, a.Hr, a.Hr.String())
+- p.parseImpliedToken(StartTagToken, a.Label, a.Label.String())
+- p.addText(prompt)
+- p.addChild(&Node{
+- Type: ElementNode,
+- DataAtom: a.Input,
+- Data: a.Input.String(),
+- Attr: attr,
+- })
+- p.oe.pop()
+- p.parseImpliedToken(EndTagToken, a.Label, a.Label.String())
+- p.parseImpliedToken(StartTagToken, a.Hr, a.Hr.String())
+- p.parseImpliedToken(EndTagToken, a.Form, a.Form.String())
+- case a.Textarea:
+- p.addElement()
+- p.setOriginalIM()
+- p.framesetOK = false
+- p.im = textIM
+- case a.Xmp:
+- p.popUntil(buttonScope, a.P)
+- p.reconstructActiveFormattingElements()
+- p.framesetOK = false
+- p.addElement()
+- p.setOriginalIM()
+- p.im = textIM
+- case a.Iframe:
+- p.framesetOK = false
+- p.addElement()
+- p.setOriginalIM()
+- p.im = textIM
+- case a.Noembed, a.Noscript:
+- p.addElement()
+- p.setOriginalIM()
+- p.im = textIM
+- case a.Select:
+- p.reconstructActiveFormattingElements()
+- p.addElement()
+- p.framesetOK = false
+- p.im = inSelectIM
+- return true
+- case a.Optgroup, a.Option:
+- if p.top().DataAtom == a.Option {
+- p.oe.pop()
+- }
+- p.reconstructActiveFormattingElements()
+- p.addElement()
+- case a.Rp, a.Rt:
+- if p.elementInScope(defaultScope, a.Ruby) {
+- p.generateImpliedEndTags()
+- }
+- p.addElement()
+- case a.Math, a.Svg:
+- p.reconstructActiveFormattingElements()
+- if p.tok.DataAtom == a.Math {
+- adjustAttributeNames(p.tok.Attr, mathMLAttributeAdjustments)
+- } else {
+- adjustAttributeNames(p.tok.Attr, svgAttributeAdjustments)
+- }
+- adjustForeignAttributes(p.tok.Attr)
+- p.addElement()
+- p.top().Namespace = p.tok.Data
+- if p.hasSelfClosingToken {
+- p.oe.pop()
+- p.acknowledgeSelfClosingTag()
+- }
+- return true
+- case a.Caption, a.Col, a.Colgroup, a.Frame, a.Head, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
+- // Ignore the token.
+- default:
+- p.reconstructActiveFormattingElements()
+- p.addElement()
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Body:
+- if p.elementInScope(defaultScope, a.Body) {
+- p.im = afterBodyIM
+- }
+- case a.Html:
+- if p.elementInScope(defaultScope, a.Body) {
+- p.parseImpliedToken(EndTagToken, a.Body, a.Body.String())
+- return false
+- }
+- return true
+- case a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Menu, a.Nav, a.Ol, a.Pre, a.Section, a.Summary, a.Ul:
+- p.popUntil(defaultScope, p.tok.DataAtom)
+- case a.Form:
+- node := p.form
+- p.form = nil
+- i := p.indexOfElementInScope(defaultScope, a.Form)
+- if node == nil || i == -1 || p.oe[i] != node {
+- // Ignore the token.
+- return true
+- }
+- p.generateImpliedEndTags()
+- p.oe.remove(node)
+- case a.P:
+- if !p.elementInScope(buttonScope, a.P) {
+- p.parseImpliedToken(StartTagToken, a.P, a.P.String())
+- }
+- p.popUntil(buttonScope, a.P)
+- case a.Li:
+- p.popUntil(listItemScope, a.Li)
+- case a.Dd, a.Dt:
+- p.popUntil(defaultScope, p.tok.DataAtom)
+- case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
+- p.popUntil(defaultScope, a.H1, a.H2, a.H3, a.H4, a.H5, a.H6)
+- case a.A, a.B, a.Big, a.Code, a.Em, a.Font, a.I, a.Nobr, a.S, a.Small, a.Strike, a.Strong, a.Tt, a.U:
+- p.inBodyEndTagFormatting(p.tok.DataAtom)
+- case a.Applet, a.Marquee, a.Object:
+- if p.popUntil(defaultScope, p.tok.DataAtom) {
+- p.clearActiveFormattingElements()
+- }
+- case a.Br:
+- p.tok.Type = StartTagToken
+- return false
+- default:
+- p.inBodyEndTagOther(p.tok.DataAtom)
+- }
+- case CommentToken:
+- p.addChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- }
+-
+- return true
+-}
+-
+-func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom) {
+- // This is the "adoption agency" algorithm, described at
+- // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#adoptionAgency
+-
+- // TODO: this is a fairly literal line-by-line translation of that algorithm.
+- // Once the code successfully parses the comprehensive test suite, we should
+- // refactor this code to be more idiomatic.
+-
+- // Steps 1-3. The outer loop.
+- for i := 0; i < 8; i++ {
+- // Step 4. Find the formatting element.
+- var formattingElement *Node
+- for j := len(p.afe) - 1; j >= 0; j-- {
+- if p.afe[j].Type == scopeMarkerNode {
+- break
+- }
+- if p.afe[j].DataAtom == tagAtom {
+- formattingElement = p.afe[j]
+- break
+- }
+- }
+- if formattingElement == nil {
+- p.inBodyEndTagOther(tagAtom)
+- return
+- }
+- feIndex := p.oe.index(formattingElement)
+- if feIndex == -1 {
+- p.afe.remove(formattingElement)
+- return
+- }
+- if !p.elementInScope(defaultScope, tagAtom) {
+- // Ignore the tag.
+- return
+- }
+-
+- // Steps 5-6. Find the furthest block.
+- var furthestBlock *Node
+- for _, e := range p.oe[feIndex:] {
+- if isSpecialElement(e) {
+- furthestBlock = e
+- break
+- }
+- }
+- if furthestBlock == nil {
+- e := p.oe.pop()
+- for e != formattingElement {
+- e = p.oe.pop()
+- }
+- p.afe.remove(e)
+- return
+- }
+-
+- // Steps 7-8. Find the common ancestor and bookmark node.
+- commonAncestor := p.oe[feIndex-1]
+- bookmark := p.afe.index(formattingElement)
+-
+- // Step 9. The inner loop. Find the lastNode to reparent.
+- lastNode := furthestBlock
+- node := furthestBlock
+- x := p.oe.index(node)
+- // Steps 9.1-9.3.
+- for j := 0; j < 3; j++ {
+- // Step 9.4.
+- x--
+- node = p.oe[x]
+- // Step 9.5.
+- if p.afe.index(node) == -1 {
+- p.oe.remove(node)
+- continue
+- }
+- // Step 9.6.
+- if node == formattingElement {
+- break
+- }
+- // Step 9.7.
+- clone := node.clone()
+- p.afe[p.afe.index(node)] = clone
+- p.oe[p.oe.index(node)] = clone
+- node = clone
+- // Step 9.8.
+- if lastNode == furthestBlock {
+- bookmark = p.afe.index(node) + 1
+- }
+- // Step 9.9.
+- if lastNode.Parent != nil {
+- lastNode.Parent.RemoveChild(lastNode)
+- }
+- node.AppendChild(lastNode)
+- // Step 9.10.
+- lastNode = node
+- }
+-
+- // Step 10. Reparent lastNode to the common ancestor,
+- // or for misnested table nodes, to the foster parent.
+- if lastNode.Parent != nil {
+- lastNode.Parent.RemoveChild(lastNode)
+- }
+- switch commonAncestor.DataAtom {
+- case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+- p.fosterParent(lastNode)
+- default:
+- commonAncestor.AppendChild(lastNode)
+- }
+-
+- // Steps 11-13. Reparent nodes from the furthest block's children
+- // to a clone of the formatting element.
+- clone := formattingElement.clone()
+- reparentChildren(clone, furthestBlock)
+- furthestBlock.AppendChild(clone)
+-
+- // Step 14. Fix up the list of active formatting elements.
+- if oldLoc := p.afe.index(formattingElement); oldLoc != -1 && oldLoc < bookmark {
+- // Move the bookmark with the rest of the list.
+- bookmark--
+- }
+- p.afe.remove(formattingElement)
+- p.afe.insert(bookmark, clone)
+-
+- // Step 15. Fix up the stack of open elements.
+- p.oe.remove(formattingElement)
+- p.oe.insert(p.oe.index(furthestBlock)+1, clone)
+- }
+-}
+-
+-// inBodyEndTagOther performs the "any other end tag" algorithm for inBodyIM.
+-func (p *parser) inBodyEndTagOther(tagAtom a.Atom) {
+- for i := len(p.oe) - 1; i >= 0; i-- {
+- if p.oe[i].DataAtom == tagAtom {
+- p.oe = p.oe[:i]
+- break
+- }
+- if isSpecialElement(p.oe[i]) {
+- break
+- }
+- }
+-}
+-
+-// Section 12.2.5.4.8.
+-func textIM(p *parser) bool {
+- switch p.tok.Type {
+- case ErrorToken:
+- p.oe.pop()
+- case TextToken:
+- d := p.tok.Data
+- if n := p.oe.top(); n.DataAtom == a.Textarea && n.FirstChild == nil {
+- // Ignore a newline at the start of a <textarea> block.
+- if d != "" && d[0] == '\r' {
+- d = d[1:]
+- }
+- if d != "" && d[0] == '\n' {
+- d = d[1:]
+- }
+- }
+- if d == "" {
+- return true
+- }
+- p.addText(d)
+- return true
+- case EndTagToken:
+- p.oe.pop()
+- }
+- p.im = p.originalIM
+- p.originalIM = nil
+- return p.tok.Type == EndTagToken
+-}
+-
+-// Section 12.2.5.4.9.
+-func inTableIM(p *parser) bool {
+- switch p.tok.Type {
+- case ErrorToken:
+- // Stop parsing.
+- return true
+- case TextToken:
+- p.tok.Data = strings.Replace(p.tok.Data, "\x00", "", -1)
+- switch p.oe.top().DataAtom {
+- case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+- if strings.Trim(p.tok.Data, whitespace) == "" {
+- p.addText(p.tok.Data)
+- return true
+- }
+- }
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Caption:
+- p.clearStackToContext(tableScope)
+- p.afe = append(p.afe, &scopeMarker)
+- p.addElement()
+- p.im = inCaptionIM
+- return true
+- case a.Colgroup:
+- p.clearStackToContext(tableScope)
+- p.addElement()
+- p.im = inColumnGroupIM
+- return true
+- case a.Col:
+- p.parseImpliedToken(StartTagToken, a.Colgroup, a.Colgroup.String())
+- return false
+- case a.Tbody, a.Tfoot, a.Thead:
+- p.clearStackToContext(tableScope)
+- p.addElement()
+- p.im = inTableBodyIM
+- return true
+- case a.Td, a.Th, a.Tr:
+- p.parseImpliedToken(StartTagToken, a.Tbody, a.Tbody.String())
+- return false
+- case a.Table:
+- if p.popUntil(tableScope, a.Table) {
+- p.resetInsertionMode()
+- return false
+- }
+- // Ignore the token.
+- return true
+- case a.Style, a.Script:
+- return inHeadIM(p)
+- case a.Input:
+- for _, t := range p.tok.Attr {
+- if t.Key == "type" && strings.ToLower(t.Val) == "hidden" {
+- p.addElement()
+- p.oe.pop()
+- return true
+- }
+- }
+- // Otherwise drop down to the default action.
+- case a.Form:
+- if p.form != nil {
+- // Ignore the token.
+- return true
+- }
+- p.addElement()
+- p.form = p.oe.pop()
+- case a.Select:
+- p.reconstructActiveFormattingElements()
+- switch p.top().DataAtom {
+- case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+- p.fosterParenting = true
+- }
+- p.addElement()
+- p.fosterParenting = false
+- p.framesetOK = false
+- p.im = inSelectInTableIM
+- return true
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Table:
+- if p.popUntil(tableScope, a.Table) {
+- p.resetInsertionMode()
+- return true
+- }
+- // Ignore the token.
+- return true
+- case a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
+- // Ignore the token.
+- return true
+- }
+- case CommentToken:
+- p.addChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- return true
+- case DoctypeToken:
+- // Ignore the token.
+- return true
+- }
+-
+- p.fosterParenting = true
+- defer func() { p.fosterParenting = false }()
+-
+- return inBodyIM(p)
+-}
+-
+-// Section 12.2.5.4.11.
+-func inCaptionIM(p *parser) bool {
+- switch p.tok.Type {
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Td, a.Tfoot, a.Thead, a.Tr:
+- if p.popUntil(tableScope, a.Caption) {
+- p.clearActiveFormattingElements()
+- p.im = inTableIM
+- return false
+- } else {
+- // Ignore the token.
+- return true
+- }
+- case a.Select:
+- p.reconstructActiveFormattingElements()
+- p.addElement()
+- p.framesetOK = false
+- p.im = inSelectInTableIM
+- return true
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Caption:
+- if p.popUntil(tableScope, a.Caption) {
+- p.clearActiveFormattingElements()
+- p.im = inTableIM
+- }
+- return true
+- case a.Table:
+- if p.popUntil(tableScope, a.Caption) {
+- p.clearActiveFormattingElements()
+- p.im = inTableIM
+- return false
+- } else {
+- // Ignore the token.
+- return true
+- }
+- case a.Body, a.Col, a.Colgroup, a.Html, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
+- // Ignore the token.
+- return true
+- }
+- }
+- return inBodyIM(p)
+-}
+-
+-// Section 12.2.5.4.12.
+-func inColumnGroupIM(p *parser) bool {
+- switch p.tok.Type {
+- case TextToken:
+- s := strings.TrimLeft(p.tok.Data, whitespace)
+- if len(s) < len(p.tok.Data) {
+- // Add the initial whitespace to the current node.
+- p.addText(p.tok.Data[:len(p.tok.Data)-len(s)])
+- if s == "" {
+- return true
+- }
+- p.tok.Data = s
+- }
+- case CommentToken:
+- p.addChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- return true
+- case DoctypeToken:
+- // Ignore the token.
+- return true
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Html:
+- return inBodyIM(p)
+- case a.Col:
+- p.addElement()
+- p.oe.pop()
+- p.acknowledgeSelfClosingTag()
+- return true
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Colgroup:
+- if p.oe.top().DataAtom != a.Html {
+- p.oe.pop()
+- p.im = inTableIM
+- }
+- return true
+- case a.Col:
+- // Ignore the token.
+- return true
+- }
+- }
+- if p.oe.top().DataAtom != a.Html {
+- p.oe.pop()
+- p.im = inTableIM
+- return false
+- }
+- return true
+-}
+-
+-// Section 12.2.5.4.13.
+-func inTableBodyIM(p *parser) bool {
+- switch p.tok.Type {
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Tr:
+- p.clearStackToContext(tableBodyScope)
+- p.addElement()
+- p.im = inRowIM
+- return true
+- case a.Td, a.Th:
+- p.parseImpliedToken(StartTagToken, a.Tr, a.Tr.String())
+- return false
+- case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead:
+- if p.popUntil(tableScope, a.Tbody, a.Thead, a.Tfoot) {
+- p.im = inTableIM
+- return false
+- }
+- // Ignore the token.
+- return true
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Tbody, a.Tfoot, a.Thead:
+- if p.elementInScope(tableScope, p.tok.DataAtom) {
+- p.clearStackToContext(tableBodyScope)
+- p.oe.pop()
+- p.im = inTableIM
+- }
+- return true
+- case a.Table:
+- if p.popUntil(tableScope, a.Tbody, a.Thead, a.Tfoot) {
+- p.im = inTableIM
+- return false
+- }
+- // Ignore the token.
+- return true
+- case a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Td, a.Th, a.Tr:
+- // Ignore the token.
+- return true
+- }
+- case CommentToken:
+- p.addChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- return true
+- }
+-
+- return inTableIM(p)
+-}
+-
+-// Section 12.2.5.4.14.
+-func inRowIM(p *parser) bool {
+- switch p.tok.Type {
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Td, a.Th:
+- p.clearStackToContext(tableRowScope)
+- p.addElement()
+- p.afe = append(p.afe, &scopeMarker)
+- p.im = inCellIM
+- return true
+- case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+- if p.popUntil(tableScope, a.Tr) {
+- p.im = inTableBodyIM
+- return false
+- }
+- // Ignore the token.
+- return true
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Tr:
+- if p.popUntil(tableScope, a.Tr) {
+- p.im = inTableBodyIM
+- return true
+- }
+- // Ignore the token.
+- return true
+- case a.Table:
+- if p.popUntil(tableScope, a.Tr) {
+- p.im = inTableBodyIM
+- return false
+- }
+- // Ignore the token.
+- return true
+- case a.Tbody, a.Tfoot, a.Thead:
+- if p.elementInScope(tableScope, p.tok.DataAtom) {
+- p.parseImpliedToken(EndTagToken, a.Tr, a.Tr.String())
+- return false
+- }
+- // Ignore the token.
+- return true
+- case a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Td, a.Th:
+- // Ignore the token.
+- return true
+- }
+- }
+-
+- return inTableIM(p)
+-}
+-
+-// Section 12.2.5.4.15.
+-func inCellIM(p *parser) bool {
+- switch p.tok.Type {
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
+- if p.popUntil(tableScope, a.Td, a.Th) {
+- // Close the cell and reprocess.
+- p.clearActiveFormattingElements()
+- p.im = inRowIM
+- return false
+- }
+- // Ignore the token.
+- return true
+- case a.Select:
+- p.reconstructActiveFormattingElements()
+- p.addElement()
+- p.framesetOK = false
+- p.im = inSelectInTableIM
+- return true
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Td, a.Th:
+- if !p.popUntil(tableScope, p.tok.DataAtom) {
+- // Ignore the token.
+- return true
+- }
+- p.clearActiveFormattingElements()
+- p.im = inRowIM
+- return true
+- case a.Body, a.Caption, a.Col, a.Colgroup, a.Html:
+- // Ignore the token.
+- return true
+- case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+- if !p.elementInScope(tableScope, p.tok.DataAtom) {
+- // Ignore the token.
+- return true
+- }
+- // Close the cell and reprocess.
+- p.popUntil(tableScope, a.Td, a.Th)
+- p.clearActiveFormattingElements()
+- p.im = inRowIM
+- return false
+- }
+- }
+- return inBodyIM(p)
+-}
+-
+-// Section 12.2.5.4.16.
+-func inSelectIM(p *parser) bool {
+- switch p.tok.Type {
+- case ErrorToken:
+- // Stop parsing.
+- return true
+- case TextToken:
+- p.addText(strings.Replace(p.tok.Data, "\x00", "", -1))
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Html:
+- return inBodyIM(p)
+- case a.Option:
+- if p.top().DataAtom == a.Option {
+- p.oe.pop()
+- }
+- p.addElement()
+- case a.Optgroup:
+- if p.top().DataAtom == a.Option {
+- p.oe.pop()
+- }
+- if p.top().DataAtom == a.Optgroup {
+- p.oe.pop()
+- }
+- p.addElement()
+- case a.Select:
+- p.tok.Type = EndTagToken
+- return false
+- case a.Input, a.Keygen, a.Textarea:
+- if p.elementInScope(selectScope, a.Select) {
+- p.parseImpliedToken(EndTagToken, a.Select, a.Select.String())
+- return false
+- }
+- // In order to properly ignore <textarea>, we need to change the tokenizer mode.
+- p.tokenizer.NextIsNotRawText()
+- // Ignore the token.
+- return true
+- case a.Script:
+- return inHeadIM(p)
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Option:
+- if p.top().DataAtom == a.Option {
+- p.oe.pop()
+- }
+- case a.Optgroup:
+- i := len(p.oe) - 1
+- if p.oe[i].DataAtom == a.Option {
+- i--
+- }
+- if p.oe[i].DataAtom == a.Optgroup {
+- p.oe = p.oe[:i]
+- }
+- case a.Select:
+- if p.popUntil(selectScope, a.Select) {
+- p.resetInsertionMode()
+- }
+- }
+- case CommentToken:
+- p.doc.AppendChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- case DoctypeToken:
+- // Ignore the token.
+- return true
+- }
+-
+- return true
+-}
+-
+-// Section 12.2.5.4.17.
+-func inSelectInTableIM(p *parser) bool {
+- switch p.tok.Type {
+- case StartTagToken, EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Caption, a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr, a.Td, a.Th:
+- if p.tok.Type == StartTagToken || p.elementInScope(tableScope, p.tok.DataAtom) {
+- p.parseImpliedToken(EndTagToken, a.Select, a.Select.String())
+- return false
+- } else {
+- // Ignore the token.
+- return true
+- }
+- }
+- }
+- return inSelectIM(p)
+-}
+-
+-// Section 12.2.5.4.18.
+-func afterBodyIM(p *parser) bool {
+- switch p.tok.Type {
+- case ErrorToken:
+- // Stop parsing.
+- return true
+- case TextToken:
+- s := strings.TrimLeft(p.tok.Data, whitespace)
+- if len(s) == 0 {
+- // It was all whitespace.
+- return inBodyIM(p)
+- }
+- case StartTagToken:
+- if p.tok.DataAtom == a.Html {
+- return inBodyIM(p)
+- }
+- case EndTagToken:
+- if p.tok.DataAtom == a.Html {
+- if !p.fragment {
+- p.im = afterAfterBodyIM
+- }
+- return true
+- }
+- case CommentToken:
+- // The comment is attached to the <html> element.
+- if len(p.oe) < 1 || p.oe[0].DataAtom != a.Html {
+- panic("html: bad parser state: <html> element not found, in the after-body insertion mode")
+- }
+- p.oe[0].AppendChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- return true
+- }
+- p.im = inBodyIM
+- return false
+-}
+-
+-// Section 12.2.5.4.19.
+-func inFramesetIM(p *parser) bool {
+- switch p.tok.Type {
+- case CommentToken:
+- p.addChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- case TextToken:
+- // Ignore all text but whitespace.
+- s := strings.Map(func(c rune) rune {
+- switch c {
+- case ' ', '\t', '\n', '\f', '\r':
+- return c
+- }
+- return -1
+- }, p.tok.Data)
+- if s != "" {
+- p.addText(s)
+- }
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Html:
+- return inBodyIM(p)
+- case a.Frameset:
+- p.addElement()
+- case a.Frame:
+- p.addElement()
+- p.oe.pop()
+- p.acknowledgeSelfClosingTag()
+- case a.Noframes:
+- return inHeadIM(p)
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Frameset:
+- if p.oe.top().DataAtom != a.Html {
+- p.oe.pop()
+- if p.oe.top().DataAtom != a.Frameset {
+- p.im = afterFramesetIM
+- return true
+- }
+- }
+- }
+- default:
+- // Ignore the token.
+- }
+- return true
+-}
+-
+-// Section 12.2.5.4.20.
+-func afterFramesetIM(p *parser) bool {
+- switch p.tok.Type {
+- case CommentToken:
+- p.addChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- case TextToken:
+- // Ignore all text but whitespace.
+- s := strings.Map(func(c rune) rune {
+- switch c {
+- case ' ', '\t', '\n', '\f', '\r':
+- return c
+- }
+- return -1
+- }, p.tok.Data)
+- if s != "" {
+- p.addText(s)
+- }
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Html:
+- return inBodyIM(p)
+- case a.Noframes:
+- return inHeadIM(p)
+- }
+- case EndTagToken:
+- switch p.tok.DataAtom {
+- case a.Html:
+- p.im = afterAfterFramesetIM
+- return true
+- }
+- default:
+- // Ignore the token.
+- }
+- return true
+-}
+-
+-// Section 12.2.5.4.21.
+-func afterAfterBodyIM(p *parser) bool {
+- switch p.tok.Type {
+- case ErrorToken:
+- // Stop parsing.
+- return true
+- case TextToken:
+- s := strings.TrimLeft(p.tok.Data, whitespace)
+- if len(s) == 0 {
+- // It was all whitespace.
+- return inBodyIM(p)
+- }
+- case StartTagToken:
+- if p.tok.DataAtom == a.Html {
+- return inBodyIM(p)
+- }
+- case CommentToken:
+- p.doc.AppendChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- return true
+- case DoctypeToken:
+- return inBodyIM(p)
+- }
+- p.im = inBodyIM
+- return false
+-}
+-
+-// Section 12.2.5.4.22.
+-func afterAfterFramesetIM(p *parser) bool {
+- switch p.tok.Type {
+- case CommentToken:
+- p.doc.AppendChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- case TextToken:
+- // Ignore all text but whitespace.
+- s := strings.Map(func(c rune) rune {
+- switch c {
+- case ' ', '\t', '\n', '\f', '\r':
+- return c
+- }
+- return -1
+- }, p.tok.Data)
+- if s != "" {
+- p.tok.Data = s
+- return inBodyIM(p)
+- }
+- case StartTagToken:
+- switch p.tok.DataAtom {
+- case a.Html:
+- return inBodyIM(p)
+- case a.Noframes:
+- return inHeadIM(p)
+- }
+- case DoctypeToken:
+- return inBodyIM(p)
+- default:
+- // Ignore the token.
+- }
+- return true
+-}
+-
+-const whitespaceOrNUL = whitespace + "\x00"
+-
+-// Section 12.2.5.5.
+-func parseForeignContent(p *parser) bool {
+- switch p.tok.Type {
+- case TextToken:
+- if p.framesetOK {
+- p.framesetOK = strings.TrimLeft(p.tok.Data, whitespaceOrNUL) == ""
+- }
+- p.tok.Data = strings.Replace(p.tok.Data, "\x00", "\ufffd", -1)
+- p.addText(p.tok.Data)
+- case CommentToken:
+- p.addChild(&Node{
+- Type: CommentNode,
+- Data: p.tok.Data,
+- })
+- case StartTagToken:
+- b := breakout[p.tok.Data]
+- if p.tok.DataAtom == a.Font {
+- loop:
+- for _, attr := range p.tok.Attr {
+- switch attr.Key {
+- case "color", "face", "size":
+- b = true
+- break loop
+- }
+- }
+- }
+- if b {
+- for i := len(p.oe) - 1; i >= 0; i-- {
+- n := p.oe[i]
+- if n.Namespace == "" || htmlIntegrationPoint(n) || mathMLTextIntegrationPoint(n) {
+- p.oe = p.oe[:i+1]
+- break
+- }
+- }
+- return false
+- }
+- switch p.top().Namespace {
+- case "math":
+- adjustAttributeNames(p.tok.Attr, mathMLAttributeAdjustments)
+- case "svg":
+- // Adjust SVG tag names. The tokenizer lower-cases tag names, but
+- // SVG wants e.g. "foreignObject" with a capital second "O".
+- if x := svgTagNameAdjustments[p.tok.Data]; x != "" {
+- p.tok.DataAtom = a.Lookup([]byte(x))
+- p.tok.Data = x
+- }
+- adjustAttributeNames(p.tok.Attr, svgAttributeAdjustments)
+- default:
+- panic("html: bad parser state: unexpected namespace")
+- }
+- adjustForeignAttributes(p.tok.Attr)
+- namespace := p.top().Namespace
+- p.addElement()
+- p.top().Namespace = namespace
+- if namespace != "" {
+- // Don't let the tokenizer go into raw text mode in foreign content
+- // (e.g. in an SVG <title> tag).
+- p.tokenizer.NextIsNotRawText()
+- }
+- if p.hasSelfClosingToken {
+- p.oe.pop()
+- p.acknowledgeSelfClosingTag()
+- }
+- case EndTagToken:
+- for i := len(p.oe) - 1; i >= 0; i-- {
+- if p.oe[i].Namespace == "" {
+- return p.im(p)
+- }
+- if strings.EqualFold(p.oe[i].Data, p.tok.Data) {
+- p.oe = p.oe[:i]
+- break
+- }
+- }
+- return true
+- default:
+- // Ignore the token.
+- }
+- return true
+-}
+-
+-// Section 12.2.5.
+-func (p *parser) inForeignContent() bool {
+- if len(p.oe) == 0 {
+- return false
+- }
+- n := p.oe[len(p.oe)-1]
+- if n.Namespace == "" {
+- return false
+- }
+- if mathMLTextIntegrationPoint(n) {
+- if p.tok.Type == StartTagToken && p.tok.DataAtom != a.Mglyph && p.tok.DataAtom != a.Malignmark {
+- return false
+- }
+- if p.tok.Type == TextToken {
+- return false
+- }
+- }
+- if n.Namespace == "math" && n.DataAtom == a.AnnotationXml && p.tok.Type == StartTagToken && p.tok.DataAtom == a.Svg {
+- return false
+- }
+- if htmlIntegrationPoint(n) && (p.tok.Type == StartTagToken || p.tok.Type == TextToken) {
+- return false
+- }
+- if p.tok.Type == ErrorToken {
+- return false
+- }
+- return true
+-}
+-
+-// parseImpliedToken parses a token as though it had appeared in the parser's
+-// input.
+-func (p *parser) parseImpliedToken(t TokenType, dataAtom a.Atom, data string) {
+- realToken, selfClosing := p.tok, p.hasSelfClosingToken
+- p.tok = Token{
+- Type: t,
+- DataAtom: dataAtom,
+- Data: data,
+- }
+- p.hasSelfClosingToken = false
+- p.parseCurrentToken()
+- p.tok, p.hasSelfClosingToken = realToken, selfClosing
+-}
+-
+-// parseCurrentToken runs the current token through the parsing routines
+-// until it is consumed.
+-func (p *parser) parseCurrentToken() {
+- if p.tok.Type == SelfClosingTagToken {
+- p.hasSelfClosingToken = true
+- p.tok.Type = StartTagToken
+- }
+-
+- consumed := false
+- for !consumed {
+- if p.inForeignContent() {
+- consumed = parseForeignContent(p)
+- } else {
+- consumed = p.im(p)
+- }
+- }
+-
+- if p.hasSelfClosingToken {
+- // This is a parse error, but ignore it.
+- p.hasSelfClosingToken = false
+- }
+-}
+-
+-func (p *parser) parse() error {
+- // Iterate until EOF. Any other error will cause an early return.
+- var err error
+- for err != io.EOF {
+- // CDATA sections are allowed only in foreign content.
+- n := p.oe.top()
+- p.tokenizer.AllowCDATA(n != nil && n.Namespace != "")
+- // Read and parse the next token.
+- p.tokenizer.Next()
+- p.tok = p.tokenizer.Token()
+- if p.tok.Type == ErrorToken {
+- err = p.tokenizer.Err()
+- if err != nil && err != io.EOF {
+- return err
+- }
+- }
+- p.parseCurrentToken()
+- }
+- return nil
+-}
+-
+-// Parse returns the parse tree for the HTML from the given Reader.
+-// The input is assumed to be UTF-8 encoded.
+-func Parse(r io.Reader) (*Node, error) {
+- p := &parser{
+- tokenizer: NewTokenizer(r),
+- doc: &Node{
+- Type: DocumentNode,
+- },
+- scripting: true,
+- framesetOK: true,
+- im: initialIM,
+- }
+- err := p.parse()
+- if err != nil {
+- return nil, err
+- }
+- return p.doc, nil
+-}
+-
+-// ParseFragment parses a fragment of HTML and returns the nodes that were
+-// found. If the fragment is the InnerHTML for an existing element, pass that
+-// element in context.
+-func ParseFragment(r io.Reader, context *Node) ([]*Node, error) {
+- contextTag := ""
+- if context != nil {
+- if context.Type != ElementNode {
+- return nil, errors.New("html: ParseFragment of non-element Node")
+- }
+- // The next check isn't just context.DataAtom.String() == context.Data because
+- // it is valid to pass an element whose tag isn't a known atom. For example,
+- // DataAtom == 0 and Data = "tagfromthefuture" is perfectly consistent.
+- if context.DataAtom != a.Lookup([]byte(context.Data)) {
+- return nil, fmt.Errorf("html: inconsistent Node: DataAtom=%q, Data=%q", context.DataAtom, context.Data)
+- }
+- contextTag = context.DataAtom.String()
+- }
+- p := &parser{
+- tokenizer: NewTokenizerFragment(r, contextTag),
+- doc: &Node{
+- Type: DocumentNode,
+- },
+- scripting: true,
+- fragment: true,
+- context: context,
+- }
+-
+- root := &Node{
+- Type: ElementNode,
+- DataAtom: a.Html,
+- Data: a.Html.String(),
+- }
+- p.doc.AppendChild(root)
+- p.oe = nodeStack{root}
+- p.resetInsertionMode()
+-
+- for n := context; n != nil; n = n.Parent {
+- if n.Type == ElementNode && n.DataAtom == a.Form {
+- p.form = n
+- break
+- }
+- }
+-
+- err := p.parse()
+- if err != nil {
+- return nil, err
+- }
+-
+- parent := p.doc
+- if context != nil {
+- parent = root
+- }
+-
+- var result []*Node
+- for c := parent.FirstChild; c != nil; {
+- next := c.NextSibling
+- parent.RemoveChild(c)
+- result = append(result, c)
+- c = next
+- }
+- return result, nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/parse_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/parse_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/parse_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/parse_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,388 +0,0 @@
+-// Copyright 2010 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 html
+-
+-import (
+- "bufio"
+- "bytes"
+- "errors"
+- "fmt"
+- "io"
+- "io/ioutil"
+- "os"
+- "path/filepath"
+- "runtime"
+- "sort"
+- "strings"
+- "testing"
+-
+- "code.google.com/p/go.net/html/atom"
+-)
+-
+-// readParseTest reads a single test case from r.
+-func readParseTest(r *bufio.Reader) (text, want, context string, err error) {
+- line, err := r.ReadSlice('\n')
+- if err != nil {
+- return "", "", "", err
+- }
+- var b []byte
+-
+- // Read the HTML.
+- if string(line) != "#data\n" {
+- return "", "", "", fmt.Errorf(`got %q want "#data\n"`, line)
+- }
+- for {
+- line, err = r.ReadSlice('\n')
+- if err != nil {
+- return "", "", "", err
+- }
+- if line[0] == '#' {
+- break
+- }
+- b = append(b, line...)
+- }
+- text = strings.TrimSuffix(string(b), "\n")
+- b = b[:0]
+-
+- // Skip the error list.
+- if string(line) != "#errors\n" {
+- return "", "", "", fmt.Errorf(`got %q want "#errors\n"`, line)
+- }
+- for {
+- line, err = r.ReadSlice('\n')
+- if err != nil {
+- return "", "", "", err
+- }
+- if line[0] == '#' {
+- break
+- }
+- }
+-
+- if string(line) == "#document-fragment\n" {
+- line, err = r.ReadSlice('\n')
+- if err != nil {
+- return "", "", "", err
+- }
+- context = strings.TrimSpace(string(line))
+- line, err = r.ReadSlice('\n')
+- if err != nil {
+- return "", "", "", err
+- }
+- }
+-
+- // Read the dump of what the parse tree should be.
+- if string(line) != "#document\n" {
+- return "", "", "", fmt.Errorf(`got %q want "#document\n"`, line)
+- }
+- inQuote := false
+- for {
+- line, err = r.ReadSlice('\n')
+- if err != nil && err != io.EOF {
+- return "", "", "", err
+- }
+- trimmed := bytes.Trim(line, "| \n")
+- if len(trimmed) > 0 {
+- if line[0] == '|' && trimmed[0] == '"' {
+- inQuote = true
+- }
+- if trimmed[len(trimmed)-1] == '"' && !(line[0] == '|' && len(trimmed) == 1) {
+- inQuote = false
+- }
+- }
+- if len(line) == 0 || len(line) == 1 && line[0] == '\n' && !inQuote {
+- break
+- }
+- b = append(b, line...)
+- }
+- return text, string(b), context, nil
+-}
+-
+-func dumpIndent(w io.Writer, level int) {
+- io.WriteString(w, "| ")
+- for i := 0; i < level; i++ {
+- io.WriteString(w, " ")
+- }
+-}
+-
+-type sortedAttributes []Attribute
+-
+-func (a sortedAttributes) Len() int {
+- return len(a)
+-}
+-
+-func (a sortedAttributes) Less(i, j int) bool {
+- if a[i].Namespace != a[j].Namespace {
+- return a[i].Namespace < a[j].Namespace
+- }
+- return a[i].Key < a[j].Key
+-}
+-
+-func (a sortedAttributes) Swap(i, j int) {
+- a[i], a[j] = a[j], a[i]
+-}
+-
+-func dumpLevel(w io.Writer, n *Node, level int) error {
+- dumpIndent(w, level)
+- switch n.Type {
+- case ErrorNode:
+- return errors.New("unexpected ErrorNode")
+- case DocumentNode:
+- return errors.New("unexpected DocumentNode")
+- case ElementNode:
+- if n.Namespace != "" {
+- fmt.Fprintf(w, "<%s %s>", n.Namespace, n.Data)
+- } else {
+- fmt.Fprintf(w, "<%s>", n.Data)
+- }
+- attr := sortedAttributes(n.Attr)
+- sort.Sort(attr)
+- for _, a := range attr {
+- io.WriteString(w, "\n")
+- dumpIndent(w, level+1)
+- if a.Namespace != "" {
+- fmt.Fprintf(w, `%s %s="%s"`, a.Namespace, a.Key, a.Val)
+- } else {
+- fmt.Fprintf(w, `%s="%s"`, a.Key, a.Val)
+- }
+- }
+- case TextNode:
+- fmt.Fprintf(w, `"%s"`, n.Data)
+- case CommentNode:
+- fmt.Fprintf(w, "<!-- %s -->", n.Data)
+- case DoctypeNode:
+- fmt.Fprintf(w, "<!DOCTYPE %s", n.Data)
+- if n.Attr != nil {
+- var p, s string
+- for _, a := range n.Attr {
+- switch a.Key {
+- case "public":
+- p = a.Val
+- case "system":
+- s = a.Val
+- }
+- }
+- if p != "" || s != "" {
+- fmt.Fprintf(w, ` "%s"`, p)
+- fmt.Fprintf(w, ` "%s"`, s)
+- }
+- }
+- io.WriteString(w, ">")
+- case scopeMarkerNode:
+- return errors.New("unexpected scopeMarkerNode")
+- default:
+- return errors.New("unknown node type")
+- }
+- io.WriteString(w, "\n")
+- for c := n.FirstChild; c != nil; c = c.NextSibling {
+- if err := dumpLevel(w, c, level+1); err != nil {
+- return err
+- }
+- }
+- return nil
+-}
+-
+-func dump(n *Node) (string, error) {
+- if n == nil || n.FirstChild == nil {
+- return "", nil
+- }
+- var b bytes.Buffer
+- for c := n.FirstChild; c != nil; c = c.NextSibling {
+- if err := dumpLevel(&b, c, 0); err != nil {
+- return "", err
+- }
+- }
+- return b.String(), nil
+-}
+-
+-const testDataDir = "testdata/webkit/"
+-
+-func TestParser(t *testing.T) {
+- testFiles, err := filepath.Glob(testDataDir + "*.dat")
+- if err != nil {
+- t.Fatal(err)
+- }
+- for _, tf := range testFiles {
+- f, err := os.Open(tf)
+- if err != nil {
+- t.Fatal(err)
+- }
+- defer f.Close()
+- r := bufio.NewReader(f)
+-
+- for i := 0; ; i++ {
+- text, want, context, err := readParseTest(r)
+- if err == io.EOF {
+- break
+- }
+- if err != nil {
+- t.Fatal(err)
+- }
+-
+- err = testParseCase(text, want, context)
+-
+- if err != nil {
+- t.Errorf("%s test #%d %q, %s", tf, i, text, err)
+- }
+- }
+- }
+-}
+-
+-// testParseCase tests one test case from the test files. If the test does not
+-// pass, it returns an error that explains the failure.
+-// text is the HTML to be parsed, want is a dump of the correct parse tree,
+-// and context is the name of the context node, if any.
+-func testParseCase(text, want, context string) (err error) {
+- defer func() {
+- if x := recover(); x != nil {
+- switch e := x.(type) {
+- case error:
+- err = e
+- default:
+- err = fmt.Errorf("%v", e)
+- }
+- }
+- }()
+-
+- var doc *Node
+- if context == "" {
+- doc, err = Parse(strings.NewReader(text))
+- if err != nil {
+- return err
+- }
+- } else {
+- contextNode := &Node{
+- Type: ElementNode,
+- DataAtom: atom.Lookup([]byte(context)),
+- Data: context,
+- }
+- nodes, err := ParseFragment(strings.NewReader(text), contextNode)
+- if err != nil {
+- return err
+- }
+- doc = &Node{
+- Type: DocumentNode,
+- }
+- for _, n := range nodes {
+- doc.AppendChild(n)
+- }
+- }
+-
+- if err := checkTreeConsistency(doc); err != nil {
+- return err
+- }
+-
+- got, err := dump(doc)
+- if err != nil {
+- return err
+- }
+- // Compare the parsed tree to the #document section.
+- if got != want {
+- return fmt.Errorf("got vs want:\n----\n%s----\n%s----", got, want)
+- }
+-
+- if renderTestBlacklist[text] || context != "" {
+- return nil
+- }
+-
+- // Check that rendering and re-parsing results in an identical tree.
+- pr, pw := io.Pipe()
+- go func() {
+- pw.CloseWithError(Render(pw, doc))
+- }()
+- doc1, err := Parse(pr)
+- if err != nil {
+- return err
+- }
+- got1, err := dump(doc1)
+- if err != nil {
+- return err
+- }
+- if got != got1 {
+- return fmt.Errorf("got vs got1:\n----\n%s----\n%s----", got, got1)
+- }
+-
+- return nil
+-}
+-
+-// Some test input result in parse trees are not 'well-formed' despite
+-// following the HTML5 recovery algorithms. Rendering and re-parsing such a
+-// tree will not result in an exact clone of that tree. We blacklist such
+-// inputs from the render test.
+-var renderTestBlacklist = map[string]bool{
+- // The second <a> will be reparented to the first <table>'s parent. This
+- // results in an <a> whose parent is an <a>, which is not 'well-formed'.
+- `<a><table><td><a><table></table><a></tr><a></table><b>X</b>C<a>Y`: true,
+- // The same thing with a <p>:
+- `<p><table></p>`: true,
+- // More cases of <a> being reparented:
+- `<a href="blah">aba<table><a href="foo">br<tr><td></td></tr>x</table>aoe`: true,
+- `<a><table><a></table><p><a><div><a>`: true,
+- `<a><table><td><a><table></table><a></tr><a></table><a>`: true,
+- // A similar reparenting situation involving <nobr>:
+- `<!DOCTYPE html><body><b><nobr>1<table><nobr></b><i><nobr>2<nobr></i>3`: true,
+- // A <plaintext> element is reparented, putting it before a table.
+- // A <plaintext> element can't have anything after it in HTML.
+- `<table><plaintext><td>`: true,
+- `<!doctype html><table><plaintext></plaintext>`: true,
+- `<!doctype html><table><tbody><plaintext></plaintext>`: true,
+- `<!doctype html><table><tbody><tr><plaintext></plaintext>`: true,
+- // A form inside a table inside a form doesn't work either.
+- `<!doctype html><form><table></form><form></table></form>`: true,
+- // A script that ends at EOF may escape its own closing tag when rendered.
+- `<!doctype html><script><!--<script `: true,
+- `<!doctype html><script><!--<script <`: true,
+- `<!doctype html><script><!--<script <a`: true,
+- `<!doctype html><script><!--<script </`: true,
+- `<!doctype html><script><!--<script </s`: true,
+- `<!doctype html><script><!--<script </script`: true,
+- `<!doctype html><script><!--<script </scripta`: true,
+- `<!doctype html><script><!--<script -`: true,
+- `<!doctype html><script><!--<script -a`: true,
+- `<!doctype html><script><!--<script -<`: true,
+- `<!doctype html><script><!--<script --`: true,
+- `<!doctype html><script><!--<script --a`: true,
+- `<!doctype html><script><!--<script --<`: true,
+- `<script><!--<script `: true,
+- `<script><!--<script <a`: true,
+- `<script><!--<script </script`: true,
+- `<script><!--<script </scripta`: true,
+- `<script><!--<script -`: true,
+- `<script><!--<script -a`: true,
+- `<script><!--<script --`: true,
+- `<script><!--<script --a`: true,
+- `<script><!--<script <`: true,
+- `<script><!--<script </`: true,
+- `<script><!--<script </s`: true,
+- // Reconstructing the active formatting elements results in a <plaintext>
+- // element that contains an <a> element.
+- `<!doctype html><p><a><plaintext>b`: true,
+-}
+-
+-func TestNodeConsistency(t *testing.T) {
+- // inconsistentNode is a Node whose DataAtom and Data do not agree.
+- inconsistentNode := &Node{
+- Type: ElementNode,
+- DataAtom: atom.Frameset,
+- Data: "table",
+- }
+- _, err := ParseFragment(strings.NewReader("<p>hello</p>"), inconsistentNode)
+- if err == nil {
+- t.Errorf("got nil error, want non-nil")
+- }
+-}
+-
+-func BenchmarkParser(b *testing.B) {
+- buf, err := ioutil.ReadFile("testdata/go1.html")
+- if err != nil {
+- b.Fatalf("could not read testdata/go1.html: %v", err)
+- }
+- b.SetBytes(int64(len(buf)))
+- runtime.GC()
+- b.ReportAllocs()
+- b.ResetTimer()
+- for i := 0; i < b.N; i++ {
+- Parse(bytes.NewBuffer(buf))
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/render.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/render.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/render.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/render.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,271 +0,0 @@
+-// Copyright 2011 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 html
+-
+-import (
+- "bufio"
+- "errors"
+- "fmt"
+- "io"
+- "strings"
+-)
+-
+-type writer interface {
+- io.Writer
+- WriteByte(c byte) error // in Go 1.1, use io.ByteWriter
+- WriteString(string) (int, error)
+-}
+-
+-// Render renders the parse tree n to the given writer.
+-//
+-// Rendering is done on a 'best effort' basis: calling Parse on the output of
+-// Render will always result in something similar to the original tree, but it
+-// is not necessarily an exact clone unless the original tree was 'well-formed'.
+-// 'Well-formed' is not easily specified; the HTML5 specification is
+-// complicated.
+-//
+-// Calling Parse on arbitrary input typically results in a 'well-formed' parse
+-// tree. However, it is possible for Parse to yield a 'badly-formed' parse tree.
+-// For example, in a 'well-formed' parse tree, no <a> element is a child of
+-// another <a> element: parsing "<a><a>" results in two sibling elements.
+-// Similarly, in a 'well-formed' parse tree, no <a> element is a child of a
+-// <table> element: parsing "<p><table><a>" results in a <p> with two sibling
+-// children; the <a> is reparented to the <table>'s parent. However, calling
+-// Parse on "<a><table><a>" does not return an error, but the result has an <a>
+-// element with an <a> child, and is therefore not 'well-formed'.
+-//
+-// Programmatically constructed trees are typically also 'well-formed', but it
+-// is possible to construct a tree that looks innocuous but, when rendered and
+-// re-parsed, results in a different tree. A simple example is that a solitary
+-// text node would become a tree containing <html>, <head> and <body> elements.
+-// Another example is that the programmatic equivalent of "a<head>b</head>c"
+-// becomes "<html><head><head/><body>abc</body></html>".
+-func Render(w io.Writer, n *Node) error {
+- if x, ok := w.(writer); ok {
+- return render(x, n)
+- }
+- buf := bufio.NewWriter(w)
+- if err := render(buf, n); err != nil {
+- return err
+- }
+- return buf.Flush()
+-}
+-
+-// plaintextAbort is returned from render1 when a <plaintext> element
+-// has been rendered. No more end tags should be rendered after that.
+-var plaintextAbort = errors.New("html: internal error (plaintext abort)")
+-
+-func render(w writer, n *Node) error {
+- err := render1(w, n)
+- if err == plaintextAbort {
+- err = nil
+- }
+- return err
+-}
+-
+-func render1(w writer, n *Node) error {
+- // Render non-element nodes; these are the easy cases.
+- switch n.Type {
+- case ErrorNode:
+- return errors.New("html: cannot render an ErrorNode node")
+- case TextNode:
+- return escape(w, n.Data)
+- case DocumentNode:
+- for c := n.FirstChild; c != nil; c = c.NextSibling {
+- if err := render1(w, c); err != nil {
+- return err
+- }
+- }
+- return nil
+- case ElementNode:
+- // No-op.
+- case CommentNode:
+- if _, err := w.WriteString("<!--"); err != nil {
+- return err
+- }
+- if _, err := w.WriteString(n.Data); err != nil {
+- return err
+- }
+- if _, err := w.WriteString("-->"); err != nil {
+- return err
+- }
+- return nil
+- case DoctypeNode:
+- if _, err := w.WriteString("<!DOCTYPE "); err != nil {
+- return err
+- }
+- if _, err := w.WriteString(n.Data); err != nil {
+- return err
+- }
+- if n.Attr != nil {
+- var p, s string
+- for _, a := range n.Attr {
+- switch a.Key {
+- case "public":
+- p = a.Val
+- case "system":
+- s = a.Val
+- }
+- }
+- if p != "" {
+- if _, err := w.WriteString(" PUBLIC "); err != nil {
+- return err
+- }
+- if err := writeQuoted(w, p); err != nil {
+- return err
+- }
+- if s != "" {
+- if err := w.WriteByte(' '); err != nil {
+- return err
+- }
+- if err := writeQuoted(w, s); err != nil {
+- return err
+- }
+- }
+- } else if s != "" {
+- if _, err := w.WriteString(" SYSTEM "); err != nil {
+- return err
+- }
+- if err := writeQuoted(w, s); err != nil {
+- return err
+- }
+- }
+- }
+- return w.WriteByte('>')
+- default:
+- return errors.New("html: unknown node type")
+- }
+-
+- // Render the <xxx> opening tag.
+- if err := w.WriteByte('<'); err != nil {
+- return err
+- }
+- if _, err := w.WriteString(n.Data); err != nil {
+- return err
+- }
+- for _, a := range n.Attr {
+- if err := w.WriteByte(' '); err != nil {
+- return err
+- }
+- if a.Namespace != "" {
+- if _, err := w.WriteString(a.Namespace); err != nil {
+- return err
+- }
+- if err := w.WriteByte(':'); err != nil {
+- return err
+- }
+- }
+- if _, err := w.WriteString(a.Key); err != nil {
+- return err
+- }
+- if _, err := w.WriteString(`="`); err != nil {
+- return err
+- }
+- if err := escape(w, a.Val); err != nil {
+- return err
+- }
+- if err := w.WriteByte('"'); err != nil {
+- return err
+- }
+- }
+- if voidElements[n.Data] {
+- if n.FirstChild != nil {
+- return fmt.Errorf("html: void element <%s> has child nodes", n.Data)
+- }
+- _, err := w.WriteString("/>")
+- return err
+- }
+- if err := w.WriteByte('>'); err != nil {
+- return err
+- }
+-
+- // Add initial newline where there is danger of a newline beging ignored.
+- if c := n.FirstChild; c != nil && c.Type == TextNode && strings.HasPrefix(c.Data, "\n") {
+- switch n.Data {
+- case "pre", "listing", "textarea":
+- if err := w.WriteByte('\n'); err != nil {
+- return err
+- }
+- }
+- }
+-
+- // Render any child nodes.
+- switch n.Data {
+- case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "xmp":
+- for c := n.FirstChild; c != nil; c = c.NextSibling {
+- if c.Type == TextNode {
+- if _, err := w.WriteString(c.Data); err != nil {
+- return err
+- }
+- } else {
+- if err := render1(w, c); err != nil {
+- return err
+- }
+- }
+- }
+- if n.Data == "plaintext" {
+- // Don't render anything else. <plaintext> must be the
+- // last element in the file, with no closing tag.
+- return plaintextAbort
+- }
+- default:
+- for c := n.FirstChild; c != nil; c = c.NextSibling {
+- if err := render1(w, c); err != nil {
+- return err
+- }
+- }
+- }
+-
+- // Render the </xxx> closing tag.
+- if _, err := w.WriteString("</"); err != nil {
+- return err
+- }
+- if _, err := w.WriteString(n.Data); err != nil {
+- return err
+- }
+- return w.WriteByte('>')
+-}
+-
+-// writeQuoted writes s to w surrounded by quotes. Normally it will use double
+-// quotes, but if s contains a double quote, it will use single quotes.
+-// It is used for writing the identifiers in a doctype declaration.
+-// In valid HTML, they can't contain both types of quotes.
+-func writeQuoted(w writer, s string) error {
+- var q byte = '"'
+- if strings.Contains(s, `"`) {
+- q = '\''
+- }
+- if err := w.WriteByte(q); err != nil {
+- return err
+- }
+- if _, err := w.WriteString(s); err != nil {
+- return err
+- }
+- if err := w.WriteByte(q); err != nil {
+- return err
+- }
+- return nil
+-}
+-
+-// Section 12.1.2, "Elements", gives this list of void elements. Void elements
+-// are those that can't have any contents.
+-var voidElements = map[string]bool{
+- "area": true,
+- "base": true,
+- "br": true,
+- "col": true,
+- "command": true,
+- "embed": true,
+- "hr": true,
+- "img": true,
+- "input": true,
+- "keygen": true,
+- "link": true,
+- "meta": true,
+- "param": true,
+- "source": true,
+- "track": true,
+- "wbr": true,
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/render_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/render_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/render_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/render_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,156 +0,0 @@
+-// Copyright 2010 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 html
+-
+-import (
+- "bytes"
+- "testing"
+-)
+-
+-func TestRenderer(t *testing.T) {
+- nodes := [...]*Node{
+- 0: {
+- Type: ElementNode,
+- Data: "html",
+- },
+- 1: {
+- Type: ElementNode,
+- Data: "head",
+- },
+- 2: {
+- Type: ElementNode,
+- Data: "body",
+- },
+- 3: {
+- Type: TextNode,
+- Data: "0<1",
+- },
+- 4: {
+- Type: ElementNode,
+- Data: "p",
+- Attr: []Attribute{
+- {
+- Key: "id",
+- Val: "A",
+- },
+- {
+- Key: "foo",
+- Val: `abc"def`,
+- },
+- },
+- },
+- 5: {
+- Type: TextNode,
+- Data: "2",
+- },
+- 6: {
+- Type: ElementNode,
+- Data: "b",
+- Attr: []Attribute{
+- {
+- Key: "empty",
+- Val: "",
+- },
+- },
+- },
+- 7: {
+- Type: TextNode,
+- Data: "3",
+- },
+- 8: {
+- Type: ElementNode,
+- Data: "i",
+- Attr: []Attribute{
+- {
+- Key: "backslash",
+- Val: `\`,
+- },
+- },
+- },
+- 9: {
+- Type: TextNode,
+- Data: "&4",
+- },
+- 10: {
+- Type: TextNode,
+- Data: "5",
+- },
+- 11: {
+- Type: ElementNode,
+- Data: "blockquote",
+- },
+- 12: {
+- Type: ElementNode,
+- Data: "br",
+- },
+- 13: {
+- Type: TextNode,
+- Data: "6",
+- },
+- }
+-
+- // Build a tree out of those nodes, based on a textual representation.
+- // Only the ".\t"s are significant. The trailing HTML-like text is
+- // just commentary. The "0:" prefixes are for easy cross-reference with
+- // the nodes array.
+- treeAsText := [...]string{
+- 0: `<html>`,
+- 1: `. <head>`,
+- 2: `. <body>`,
+- 3: `. . "0<1"`,
+- 4: `. . <p id="A" foo="abc"def">`,
+- 5: `. . . "2"`,
+- 6: `. . . <b empty="">`,
+- 7: `. . . . "3"`,
+- 8: `. . . <i backslash="\">`,
+- 9: `. . . . "&4"`,
+- 10: `. . "5"`,
+- 11: `. . <blockquote>`,
+- 12: `. . <br>`,
+- 13: `. . "6"`,
+- }
+- if len(nodes) != len(treeAsText) {
+- t.Fatal("len(nodes) != len(treeAsText)")
+- }
+- var stack [8]*Node
+- for i, line := range treeAsText {
+- level := 0
+- for line[0] == '.' {
+- // Strip a leading ".\t".
+- line = line[2:]
+- level++
+- }
+- n := nodes[i]
+- if level == 0 {
+- if stack[0] != nil {
+- t.Fatal("multiple root nodes")
+- }
+- stack[0] = n
+- } else {
+- stack[level-1].AppendChild(n)
+- stack[level] = n
+- for i := level + 1; i < len(stack); i++ {
+- stack[i] = nil
+- }
+- }
+- // At each stage of tree construction, we check all nodes for consistency.
+- for j, m := range nodes {
+- if err := checkNodeConsistency(m); err != nil {
+- t.Fatalf("i=%d, j=%d: %v", i, j, err)
+- }
+- }
+- }
+-
+- want := `<html><head></head><body>0<1<p id="A" foo="abc"def">` +
+- `2<b empty="">3</b><i backslash="\">&4</i></p>` +
+- `5<blockquote></blockquote><br/>6</body></html>`
+- b := new(bytes.Buffer)
+- if err := Render(b, nodes[0]); err != nil {
+- t.Fatal(err)
+- }
+- if got := b.String(); got != want {
+- t.Errorf("got vs want:\n%s\n%s\n", got, want)
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/go1.html docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/go1.html
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/go1.html 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/go1.html 1969-12-31 18:00:00.000000000 -0600
+@@ -1,2237 +0,0 @@
+-<!DOCTYPE html>
+-<html>
+-<head>
+-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+-
+- <title>Go 1 Release Notes - The Go Programming Language</title>
+-
+-<link type="text/css" rel="stylesheet" href="/doc/style.css">
+-<script type="text/javascript" src="/doc/godocs.js"></script>
+-
+-<link rel="search" type="application/opensearchdescription+xml" title="godoc" href="/opensearch.xml" />
+-
+-<script type="text/javascript">
+-var _gaq = _gaq || [];
+-_gaq.push(["_setAccount", "UA-11222381-2"]);
+-_gaq.push(["_trackPageview"]);
+-</script>
+-</head>
+-<body>
+-
+-<div id="topbar"><div class="container wide">
+-
+-<form method="GET" action="/search">
+-<div id="menu">
+-<a href="/doc/">Documents</a>
+-<a href="/ref/">References</a>
+-<a href="/pkg/">Packages</a>
+-<a href="/project/">The Project</a>
+-<a href="/help/">Help</a>
+-<input type="text" id="search" name="q" class="inactive" value="Search">
+-</div>
+-<div id="heading"><a href="/">The Go Programming Language</a></div>
+-</form>
+-
+-</div></div>
+-
+-<div id="page" class="wide">
+-
+-
+- <div id="plusone"><g:plusone size="small" annotation="none"></g:plusone></div>
+- <h1>Go 1 Release Notes</h1>
+-
+-
+-
+-
+-<div id="nav"></div>
+-
+-
+-
+-
+-<h2 id="introduction">Introduction to Go 1</h2>
+-
+-<p>
+-Go version 1, Go 1 for short, defines a language and a set of core libraries
+-that provide a stable foundation for creating reliable products, projects, and
+-publications.
+-</p>
+-
+-<p>
+-The driving motivation for Go 1 is stability for its users. People should be able to
+-write Go programs and expect that they will continue to compile and run without
+-change, on a time scale of years, including in production environments such as
+-Google App Engine. Similarly, people should be able to write books about Go, be
+-able to say which version of Go the book is describing, and have that version
+-number still be meaningful much later.
+-</p>
+-
+-<p>
+-Code that compiles in Go 1 should, with few exceptions, continue to compile and
+-run throughout the lifetime of that version, even as we issue updates and bug
+-fixes such as Go version 1.1, 1.2, and so on. Other than critical fixes, changes
+-made to the language and library for subsequent releases of Go 1 may
+-add functionality but will not break existing Go 1 programs.
+-<a href="go1compat.html">The Go 1 compatibility document</a>
+-explains the compatibility guidelines in more detail.
+-</p>
+-
+-<p>
+-Go 1 is a representation of Go as it used today, not a wholesale rethinking of
+-the language. We avoided designing new features and instead focused on cleaning
+-up problems and inconsistencies and improving portability. There are a number
+-changes to the Go language and packages that we had considered for some time and
+-prototyped but not released primarily because they are significant and
+-backwards-incompatible. Go 1 was an opportunity to get them out, which is
+-helpful for the long term, but also means that Go 1 introduces incompatibilities
+-for old programs. Fortunately, the <code>go</code> <code>fix</code> tool can
+-automate much of the work needed to bring programs up to the Go 1 standard.
+-</p>
+-
+-<p>
+-This document outlines the major changes in Go 1 that will affect programmers
+-updating existing code; its reference point is the prior release, r60 (tagged as
+-r60.3). It also explains how to update code from r60 to run under Go 1.
+-</p>
+-
+-<h2 id="language">Changes to the language</h2>
+-
+-<h3 id="append">Append</h3>
+-
+-<p>
+-The <code>append</code> predeclared variadic function makes it easy to grow a slice
+-by adding elements to the end.
+-A common use is to add bytes to the end of a byte slice when generating output.
+-However, <code>append</code> did not provide a way to append a string to a <code>[]byte</code>,
+-which is another common case.
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/greeting := ..byte/` `/append.*hello/`}}
+---> greeting := []byte{}
+- greeting = append(greeting, []byte("hello ")...)</pre>
+-
+-<p>
+-By analogy with the similar property of <code>copy</code>, Go 1
+-permits a string to be appended (byte-wise) directly to a byte
+-slice, reducing the friction between strings and byte slices.
+-The conversion is no longer necessary:
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/append.*world/`}}
+---> greeting = append(greeting, "world"...)</pre>
+-
+-<p>
+-<em>Updating</em>:
+-This is a new feature, so existing code needs no changes.
+-</p>
+-
+-<h3 id="close">Close</h3>
+-
+-<p>
+-The <code>close</code> predeclared function provides a mechanism
+-for a sender to signal that no more values will be sent.
+-It is important to the implementation of <code>for</code> <code>range</code>
+-loops over channels and is helpful in other situations.
+-Partly by design and partly because of race conditions that can occur otherwise,
+-it is intended for use only by the goroutine sending on the channel,
+-not by the goroutine receiving data.
+-However, before Go 1 there was no compile-time checking that <code>close</code>
+-was being used correctly.
+-</p>
+-
+-<p>
+-To close this gap, at least in part, Go 1 disallows <code>close</code> on receive-only channels.
+-Attempting to close such a channel is a compile-time error.
+-</p>
+-
+-<pre>
+- var c chan int
+- var csend chan<- int = c
+- var crecv <-chan int = c
+- close(c) // legal
+- close(csend) // legal
+- close(crecv) // illegal
+-</pre>
+-
+-<p>
+-<em>Updating</em>:
+-Existing code that attempts to close a receive-only channel was
+-erroneous even before Go 1 and should be fixed. The compiler will
+-now reject such code.
+-</p>
+-
+-<h3 id="literals">Composite literals</h3>
+-
+-<p>
+-In Go 1, a composite literal of array, slice, or map type can elide the
+-type specification for the elements' initializers if they are of pointer type.
+-All four of the initializations in this example are legal; the last one was illegal before Go 1.
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/type Date struct/` `/STOP/`}}
+---> type Date struct {
+- month string
+- day int
+- }
+- <span class="comment">// Struct values, fully qualified; always legal.</span>
+- holiday1 := []Date{
+- Date{"Feb", 14},
+- Date{"Nov", 11},
+- Date{"Dec", 25},
+- }
+- <span class="comment">// Struct values, type name elided; always legal.</span>
+- holiday2 := []Date{
+- {"Feb", 14},
+- {"Nov", 11},
+- {"Dec", 25},
+- }
+- <span class="comment">// Pointers, fully qualified, always legal.</span>
+- holiday3 := []*Date{
+- &Date{"Feb", 14},
+- &Date{"Nov", 11},
+- &Date{"Dec", 25},
+- }
+- <span class="comment">// Pointers, type name elided; legal in Go 1.</span>
+- holiday4 := []*Date{
+- {"Feb", 14},
+- {"Nov", 11},
+- {"Dec", 25},
+- }</pre>
+-
+-<p>
+-<em>Updating</em>:
+-This change has no effect on existing code, but the command
+-<code>gofmt</code> <code>-s</code> applied to existing source
+-will, among other things, elide explicit element types wherever permitted.
+-</p>
+-
+-
+-<h3 id="init">Goroutines during init</h3>
+-
+-<p>
+-The old language defined that <code>go</code> statements executed during initialization created goroutines but that they did not begin to run until initialization of the entire program was complete.
+-This introduced clumsiness in many places and, in effect, limited the utility
+-of the <code>init</code> construct:
+-if it was possible for another package to use the library during initialization, the library
+-was forced to avoid goroutines.
+-This design was done for reasons of simplicity and safety but,
+-as our confidence in the language grew, it seemed unnecessary.
+-Running goroutines during initialization is no more complex or unsafe than running them during normal execution.
+-</p>
+-
+-<p>
+-In Go 1, code that uses goroutines can be called from
+-<code>init</code> routines and global initialization expressions
+-without introducing a deadlock.
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/PackageGlobal/` `/^}/`}}
+--->var PackageGlobal int
+-
+-func init() {
+- c := make(chan int)
+- go initializationFunction(c)
+- PackageGlobal = <-c
+-}</pre>
+-
+-<p>
+-<em>Updating</em>:
+-This is a new feature, so existing code needs no changes,
+-although it's possible that code that depends on goroutines not starting before <code>main</code> will break.
+-There was no such code in the standard repository.
+-</p>
+-
+-<h3 id="rune">The rune type</h3>
+-
+-<p>
+-The language spec allows the <code>int</code> type to be 32 or 64 bits wide, but current implementations set <code>int</code> to 32 bits even on 64-bit platforms.
+-It would be preferable to have <code>int</code> be 64 bits on 64-bit platforms.
+-(There are important consequences for indexing large slices.)
+-However, this change would waste space when processing Unicode characters with
+-the old language because the <code>int</code> type was also used to hold Unicode code points: each code point would waste an extra 32 bits of storage if <code>int</code> grew from 32 bits to 64.
+-</p>
+-
+-<p>
+-To make changing to 64-bit <code>int</code> feasible,
+-Go 1 introduces a new basic type, <code>rune</code>, to represent
+-individual Unicode code points.
+-It is an alias for <code>int32</code>, analogous to <code>byte</code>
+-as an alias for <code>uint8</code>.
+-</p>
+-
+-<p>
+-Character literals such as <code>'a'</code>, <code>'語'</code>, and <code>'\u0345'</code>
+-now have default type <code>rune</code>,
+-analogous to <code>1.0</code> having default type <code>float64</code>.
+-A variable initialized to a character constant will therefore
+-have type <code>rune</code> unless otherwise specified.
+-</p>
+-
+-<p>
+-Libraries have been updated to use <code>rune</code> rather than <code>int</code>
+-when appropriate. For instance, the functions <code>unicode.ToLower</code> and
+-relatives now take and return a <code>rune</code>.
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/STARTRUNE/` `/ENDRUNE/`}}
+---> delta := 'δ' <span class="comment">// delta has type rune.</span>
+- var DELTA rune
+- DELTA = unicode.ToUpper(delta)
+- epsilon := unicode.ToLower(DELTA + 1)
+- if epsilon != 'δ'+1 {
+- log.Fatal("inconsistent casing for Greek")
+- }</pre>
+-
+-<p>
+-<em>Updating</em>:
+-Most source code will be unaffected by this because the type inference from
+-<code>:=</code> initializers introduces the new type silently, and it propagates
+-from there.
+-Some code may get type errors that a trivial conversion will resolve.
+-</p>
+-
+-<h3 id="error">The error type</h3>
+-
+-<p>
+-Go 1 introduces a new built-in type, <code>error</code>, which has the following definition:
+-</p>
+-
+-<pre>
+- type error interface {
+- Error() string
+- }
+-</pre>
+-
+-<p>
+-Since the consequences of this type are all in the package library,
+-it is discussed <a href="#errors">below</a>.
+-</p>
+-
+-<h3 id="delete">Deleting from maps</h3>
+-
+-<p>
+-In the old language, to delete the entry with key <code>k</code> from map <code>m</code>, one wrote the statement,
+-</p>
+-
+-<pre>
+- m[k] = value, false
+-</pre>
+-
+-<p>
+-This syntax was a peculiar special case, the only two-to-one assignment.
+-It required passing a value (usually ignored) that is evaluated but discarded,
+-plus a boolean that was nearly always the constant <code>false</code>.
+-It did the job but was odd and a point of contention.
+-</p>
+-
+-<p>
+-In Go 1, that syntax has gone; instead there is a new built-in
+-function, <code>delete</code>. The call
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/delete\(m, k\)/`}}
+---> delete(m, k)</pre>
+-
+-<p>
+-will delete the map entry retrieved by the expression <code>m[k]</code>.
+-There is no return value. Deleting a non-existent entry is a no-op.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will convert expressions of the form <code>m[k] = value,
+-false</code> into <code>delete(m, k)</code> when it is clear that
+-the ignored value can be safely discarded from the program and
+-<code>false</code> refers to the predefined boolean constant.
+-The fix tool
+-will flag other uses of the syntax for inspection by the programmer.
+-</p>
+-
+-<h3 id="iteration">Iterating in maps</h3>
+-
+-<p>
+-The old language specification did not define the order of iteration for maps,
+-and in practice it differed across hardware platforms.
+-This caused tests that iterated over maps to be fragile and non-portable, with the
+-unpleasant property that a test might always pass on one machine but break on another.
+-</p>
+-
+-<p>
+-In Go 1, the order in which elements are visited when iterating
+-over a map using a <code>for</code> <code>range</code> statement
+-is defined to be unpredictable, even if the same loop is run multiple
+-times with the same map.
+-Code should not assume that the elements are visited in any particular order.
+-</p>
+-
+-<p>
+-This change means that code that depends on iteration order is very likely to break early and be fixed long before it becomes a problem.
+-Just as important, it allows the map implementation to ensure better map balancing even when programs are using range loops to select an element from a map.
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/Sunday/` `/^ }/`}}
+---> m := map[string]int{"Sunday": 0, "Monday": 1}
+- for name, value := range m {
+- <span class="comment">// This loop should not assume Sunday will be visited first.</span>
+- f(name, value)
+- }</pre>
+-
+-<p>
+-<em>Updating</em>:
+-This is one change where tools cannot help. Most existing code
+-will be unaffected, but some programs may break or misbehave; we
+-recommend manual checking of all range statements over maps to
+-verify they do not depend on iteration order. There were a few such
+-examples in the standard repository; they have been fixed.
+-Note that it was already incorrect to depend on the iteration order, which
+-was unspecified. This change codifies the unpredictability.
+-</p>
+-
+-<h3 id="multiple_assignment">Multiple assignment</h3>
+-
+-<p>
+-The language specification has long guaranteed that in assignments
+-the right-hand-side expressions are all evaluated before any left-hand-side expressions are assigned.
+-To guarantee predictable behavior,
+-Go 1 refines the specification further.
+-</p>
+-
+-<p>
+-If the left-hand side of the assignment
+-statement contains expressions that require evaluation, such as
+-function calls or array indexing operations, these will all be done
+-using the usual left-to-right rule before any variables are assigned
+-their value. Once everything is evaluated, the actual assignments
+-proceed in left-to-right order.
+-</p>
+-
+-<p>
+-These examples illustrate the behavior.
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/sa :=/` `/then sc.0. = 2/`}}
+---> sa := []int{1, 2, 3}
+- i := 0
+- i, sa[i] = 1, 2 <span class="comment">// sets i = 1, sa[0] = 2</span>
+-
+- sb := []int{1, 2, 3}
+- j := 0
+- sb[j], j = 2, 1 <span class="comment">// sets sb[0] = 2, j = 1</span>
+-
+- sc := []int{1, 2, 3}
+- sc[0], sc[0] = 1, 2 <span class="comment">// sets sc[0] = 1, then sc[0] = 2 (so sc[0] = 2 at end)</span></pre>
+-
+-<p>
+-<em>Updating</em>:
+-This is one change where tools cannot help, but breakage is unlikely.
+-No code in the standard repository was broken by this change, and code
+-that depended on the previous unspecified behavior was already incorrect.
+-</p>
+-
+-<h3 id="shadowing">Returns and shadowed variables</h3>
+-
+-<p>
+-A common mistake is to use <code>return</code> (without arguments) after an assignment to a variable that has the same name as a result variable but is not the same variable.
+-This situation is called <em>shadowing</em>: the result variable has been shadowed by another variable with the same name declared in an inner scope.
+-</p>
+-
+-<p>
+-In functions with named return values,
+-the Go 1 compilers disallow return statements without arguments if any of the named return values is shadowed at the point of the return statement.
+-(It isn't part of the specification, because this is one area we are still exploring;
+-the situation is analogous to the compilers rejecting functions that do not end with an explicit return statement.)
+-</p>
+-
+-<p>
+-This function implicitly returns a shadowed return value and will be rejected by the compiler:
+-</p>
+-
+-<pre>
+- func Bug() (i, j, k int) {
+- for i = 0; i < 5; i++ {
+- for j := 0; j < 5; j++ { // Redeclares j.
+- k += i*j
+- if k > 100 {
+- return // Rejected: j is shadowed here.
+- }
+- }
+- }
+- return // OK: j is not shadowed here.
+- }
+-</pre>
+-
+-<p>
+-<em>Updating</em>:
+-Code that shadows return values in this way will be rejected by the compiler and will need to be fixed by hand.
+-The few cases that arose in the standard repository were mostly bugs.
+-</p>
+-
+-<h3 id="unexported">Copying structs with unexported fields</h3>
+-
+-<p>
+-The old language did not allow a package to make a copy of a struct value containing unexported fields belonging to a different package.
+-There was, however, a required exception for a method receiver;
+-also, the implementations of <code>copy</code> and <code>append</code> have never honored the restriction.
+-</p>
+-
+-<p>
+-Go 1 will allow packages to copy struct values containing unexported fields from other packages.
+-Besides resolving the inconsistency,
+-this change admits a new kind of API: a package can return an opaque value without resorting to a pointer or interface.
+-The new implementations of <code>time.Time</code> and
+-<code>reflect.Value</code> are examples of types taking advantage of this new property.
+-</p>
+-
+-<p>
+-As an example, if package <code>p</code> includes the definitions,
+-</p>
+-
+-<pre>
+- type Struct struct {
+- Public int
+- secret int
+- }
+- func NewStruct(a int) Struct { // Note: not a pointer.
+- return Struct{a, f(a)}
+- }
+- func (s Struct) String() string {
+- return fmt.Sprintf("{%d (secret %d)}", s.Public, s.secret)
+- }
+-</pre>
+-
+-<p>
+-a package that imports <code>p</code> can assign and copy values of type
+-<code>p.Struct</code> at will.
+-Behind the scenes the unexported fields will be assigned and copied just
+-as if they were exported,
+-but the client code will never be aware of them. The code
+-</p>
+-
+-<pre>
+- import "p"
+-
+- myStruct := p.NewStruct(23)
+- copyOfMyStruct := myStruct
+- fmt.Println(myStruct, copyOfMyStruct)
+-</pre>
+-
+-<p>
+-will show that the secret field of the struct has been copied to the new value.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-This is a new feature, so existing code needs no changes.
+-</p>
+-
+-<h3 id="equality">Equality</h3>
+-
+-<p>
+-Before Go 1, the language did not define equality on struct and array values.
+-This meant,
+-among other things, that structs and arrays could not be used as map keys.
+-On the other hand, Go did define equality on function and map values.
+-Function equality was problematic in the presence of closures
+-(when are two closures equal?)
+-while map equality compared pointers, not the maps' content, which was usually
+-not what the user would want.
+-</p>
+-
+-<p>
+-Go 1 addressed these issues.
+-First, structs and arrays can be compared for equality and inequality
+-(<code>==</code> and <code>!=</code>),
+-and therefore be used as map keys,
+-provided they are composed from elements for which equality is also defined,
+-using element-wise comparison.
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/type Day struct/` `/Printf/`}}
+---> type Day struct {
+- long string
+- short string
+- }
+- Christmas := Day{"Christmas", "XMas"}
+- Thanksgiving := Day{"Thanksgiving", "Turkey"}
+- holiday := map[Day]bool{
+- Christmas: true,
+- Thanksgiving: true,
+- }
+- fmt.Printf("Christmas is a holiday: %t\n", holiday[Christmas])</pre>
+-
+-<p>
+-Second, Go 1 removes the definition of equality for function values,
+-except for comparison with <code>nil</code>.
+-Finally, map equality is gone too, also except for comparison with <code>nil</code>.
+-</p>
+-
+-<p>
+-Note that equality is still undefined for slices, for which the
+-calculation is in general infeasible. Also note that the ordered
+-comparison operators (<code><</code> <code><=</code>
+-<code>></code> <code>>=</code>) are still undefined for
+-structs and arrays.
+-
+-<p>
+-<em>Updating</em>:
+-Struct and array equality is a new feature, so existing code needs no changes.
+-Existing code that depends on function or map equality will be
+-rejected by the compiler and will need to be fixed by hand.
+-Few programs will be affected, but the fix may require some
+-redesign.
+-</p>
+-
+-<h2 id="packages">The package hierarchy</h2>
+-
+-<p>
+-Go 1 addresses many deficiencies in the old standard library and
+-cleans up a number of packages, making them more internally consistent
+-and portable.
+-</p>
+-
+-<p>
+-This section describes how the packages have been rearranged in Go 1.
+-Some have moved, some have been renamed, some have been deleted.
+-New packages are described in later sections.
+-</p>
+-
+-<h3 id="hierarchy">The package hierarchy</h3>
+-
+-<p>
+-Go 1 has a rearranged package hierarchy that groups related items
+-into subdirectories. For instance, <code>utf8</code> and
+-<code>utf16</code> now occupy subdirectories of <code>unicode</code>.
+-Also, <a href="#subrepo">some packages</a> have moved into
+-subrepositories of
+-<a href="http://code.google.com/p/go"><code>code.google.com/p/go</code></a>
+-while <a href="#deleted">others</a> have been deleted outright.
+-</p>
+-
+-<table class="codetable" frame="border" summary="Moved packages">
+-<colgroup align="left" width="60%"></colgroup>
+-<colgroup align="left" width="40%"></colgroup>
+-<tr>
+-<th align="left">Old path</th>
+-<th align="left">New path</th>
+-</tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>asn1</td> <td>encoding/asn1</td></tr>
+-<tr><td>csv</td> <td>encoding/csv</td></tr>
+-<tr><td>gob</td> <td>encoding/gob</td></tr>
+-<tr><td>json</td> <td>encoding/json</td></tr>
+-<tr><td>xml</td> <td>encoding/xml</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>exp/template/html</td> <td>html/template</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>big</td> <td>math/big</td></tr>
+-<tr><td>cmath</td> <td>math/cmplx</td></tr>
+-<tr><td>rand</td> <td>math/rand</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>http</td> <td>net/http</td></tr>
+-<tr><td>http/cgi</td> <td>net/http/cgi</td></tr>
+-<tr><td>http/fcgi</td> <td>net/http/fcgi</td></tr>
+-<tr><td>http/httptest</td> <td>net/http/httptest</td></tr>
+-<tr><td>http/pprof</td> <td>net/http/pprof</td></tr>
+-<tr><td>mail</td> <td>net/mail</td></tr>
+-<tr><td>rpc</td> <td>net/rpc</td></tr>
+-<tr><td>rpc/jsonrpc</td> <td>net/rpc/jsonrpc</td></tr>
+-<tr><td>smtp</td> <td>net/smtp</td></tr>
+-<tr><td>url</td> <td>net/url</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>exec</td> <td>os/exec</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>scanner</td> <td>text/scanner</td></tr>
+-<tr><td>tabwriter</td> <td>text/tabwriter</td></tr>
+-<tr><td>template</td> <td>text/template</td></tr>
+-<tr><td>template/parse</td> <td>text/template/parse</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>utf8</td> <td>unicode/utf8</td></tr>
+-<tr><td>utf16</td> <td>unicode/utf16</td></tr>
+-</table>
+-
+-<p>
+-Note that the package names for the old <code>cmath</code> and
+-<code>exp/template/html</code> packages have changed to <code>cmplx</code>
+-and <code>template</code>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will update all imports and package renames for packages that
+-remain inside the standard repository. Programs that import packages
+-that are no longer in the standard repository will need to be edited
+-by hand.
+-</p>
+-
+-<h3 id="exp">The package tree exp</h3>
+-
+-<p>
+-Because they are not standardized, the packages under the <code>exp</code> directory will not be available in the
+-standard Go 1 release distributions, although they will be available in source code form
+-in <a href="http://code.google.com/p/go/">the repository</a> for
+-developers who wish to use them.
+-</p>
+-
+-<p>
+-Several packages have moved under <code>exp</code> at the time of Go 1's release:
+-</p>
+-
+-<ul>
+-<li><code>ebnf</code></li>
+-<li><code>html</code><sup>†</sup></li>
+-<li><code>go/types</code></li>
+-</ul>
+-
+-<p>
+-(<sup>†</sup>The <code>EscapeString</code> and <code>UnescapeString</code> types remain
+-in package <code>html</code>.)
+-</p>
+-
+-<p>
+-All these packages are available under the same names, with the prefix <code>exp/</code>: <code>exp/ebnf</code> etc.
+-</p>
+-
+-<p>
+-Also, the <code>utf8.String</code> type has been moved to its own package, <code>exp/utf8string</code>.
+-</p>
+-
+-<p>
+-Finally, the <code>gotype</code> command now resides in <code>exp/gotype</code>, while
+-<code>ebnflint</code> is now in <code>exp/ebnflint</code>.
+-If they are installed, they now reside in <code>$GOROOT/bin/tool</code>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Code that uses packages in <code>exp</code> will need to be updated by hand,
+-or else compiled from an installation that has <code>exp</code> available.
+-The <code>go</code> <code>fix</code> tool or the compiler will complain about such uses.
+-</p>
+-
+-<h3 id="old">The package tree old</h3>
+-
+-<p>
+-Because they are deprecated, the packages under the <code>old</code> directory will not be available in the
+-standard Go 1 release distributions, although they will be available in source code form for
+-developers who wish to use them.
+-</p>
+-
+-<p>
+-The packages in their new locations are:
+-</p>
+-
+-<ul>
+-<li><code>old/netchan</code></li>
+-<li><code>old/regexp</code></li>
+-<li><code>old/template</code></li>
+-</ul>
+-
+-<p>
+-<em>Updating</em>:
+-Code that uses packages now in <code>old</code> will need to be updated by hand,
+-or else compiled from an installation that has <code>old</code> available.
+-The <code>go</code> <code>fix</code> tool will warn about such uses.
+-</p>
+-
+-<h3 id="deleted">Deleted packages</h3>
+-
+-<p>
+-Go 1 deletes several packages outright:
+-</p>
+-
+-<ul>
+-<li><code>container/vector</code></li>
+-<li><code>exp/datafmt</code></li>
+-<li><code>go/typechecker</code></li>
+-<li><code>try</code></li>
+-</ul>
+-
+-<p>
+-and also the command <code>gotry</code>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Code that uses <code>container/vector</code> should be updated to use
+-slices directly. See
+-<a href="http://code.google.com/p/go-wiki/wiki/SliceTricks">the Go
+-Language Community Wiki</a> for some suggestions.
+-Code that uses the other packages (there should be almost zero) will need to be rethought.
+-</p>
+-
+-<h3 id="subrepo">Packages moving to subrepositories</h3>
+-
+-<p>
+-Go 1 has moved a number of packages into other repositories, usually sub-repositories of
+-<a href="http://code.google.com/p/go/">the main Go repository</a>.
+-This table lists the old and new import paths:
+-
+-<table class="codetable" frame="border" summary="Sub-repositories">
+-<colgroup align="left" width="40%"></colgroup>
+-<colgroup align="left" width="60%"></colgroup>
+-<tr>
+-<th align="left">Old</th>
+-<th align="left">New</th>
+-</tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>crypto/bcrypt</td> <td>code.google.com/p/go.crypto/bcrypt</tr>
+-<tr><td>crypto/blowfish</td> <td>code.google.com/p/go.crypto/blowfish</tr>
+-<tr><td>crypto/cast5</td> <td>code.google.com/p/go.crypto/cast5</tr>
+-<tr><td>crypto/md4</td> <td>code.google.com/p/go.crypto/md4</tr>
+-<tr><td>crypto/ocsp</td> <td>code.google.com/p/go.crypto/ocsp</tr>
+-<tr><td>crypto/openpgp</td> <td>code.google.com/p/go.crypto/openpgp</tr>
+-<tr><td>crypto/openpgp/armor</td> <td>code.google.com/p/go.crypto/openpgp/armor</tr>
+-<tr><td>crypto/openpgp/elgamal</td> <td>code.google.com/p/go.crypto/openpgp/elgamal</tr>
+-<tr><td>crypto/openpgp/errors</td> <td>code.google.com/p/go.crypto/openpgp/errors</tr>
+-<tr><td>crypto/openpgp/packet</td> <td>code.google.com/p/go.crypto/openpgp/packet</tr>
+-<tr><td>crypto/openpgp/s2k</td> <td>code.google.com/p/go.crypto/openpgp/s2k</tr>
+-<tr><td>crypto/ripemd160</td> <td>code.google.com/p/go.crypto/ripemd160</tr>
+-<tr><td>crypto/twofish</td> <td>code.google.com/p/go.crypto/twofish</tr>
+-<tr><td>crypto/xtea</td> <td>code.google.com/p/go.crypto/xtea</tr>
+-<tr><td>exp/ssh</td> <td>code.google.com/p/go.crypto/ssh</tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>image/bmp</td> <td>code.google.com/p/go.image/bmp</tr>
+-<tr><td>image/tiff</td> <td>code.google.com/p/go.image/tiff</tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>net/dict</td> <td>code.google.com/p/go.net/dict</tr>
+-<tr><td>net/websocket</td> <td>code.google.com/p/go.net/websocket</tr>
+-<tr><td>exp/spdy</td> <td>code.google.com/p/go.net/spdy</tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>encoding/git85</td> <td>code.google.com/p/go.codereview/git85</tr>
+-<tr><td>patch</td> <td>code.google.com/p/go.codereview/patch</tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>exp/wingui</td> <td>code.google.com/p/gowingui</tr>
+-</table>
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will update imports of these packages to use the new import paths.
+-Installations that depend on these packages will need to install them using
+-a <code>go get</code> command.
+-</p>
+-
+-<h2 id="major">Major changes to the library</h2>
+-
+-<p>
+-This section describes significant changes to the core libraries, the ones that
+-affect the most programs.
+-</p>
+-
+-<h3 id="errors">The error type and errors package</h3>
+-
+-<p>
+-The placement of <code>os.Error</code> in package <code>os</code> is mostly historical: errors first came up when implementing package <code>os</code>, and they seemed system-related at the time.
+-Since then it has become clear that errors are more fundamental than the operating system. For example, it would be nice to use <code>Errors</code> in packages that <code>os</code> depends on, like <code>syscall</code>.
+-Also, having <code>Error</code> in <code>os</code> introduces many dependencies on <code>os</code> that would otherwise not exist.
+-</p>
+-
+-<p>
+-Go 1 solves these problems by introducing a built-in <code>error</code> interface type and a separate <code>errors</code> package (analogous to <code>bytes</code> and <code>strings</code>) that contains utility functions.
+-It replaces <code>os.NewError</code> with
+-<a href="/pkg/errors/#New"><code>errors.New</code></a>,
+-giving errors a more central place in the environment.
+-</p>
+-
+-<p>
+-So the widely-used <code>String</code> method does not cause accidental satisfaction
+-of the <code>error</code> interface, the <code>error</code> interface uses instead
+-the name <code>Error</code> for that method:
+-</p>
+-
+-<pre>
+- type error interface {
+- Error() string
+- }
+-</pre>
+-
+-<p>
+-The <code>fmt</code> library automatically invokes <code>Error</code>, as it already
+-does for <code>String</code>, for easy printing of error values.
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/START ERROR EXAMPLE/` `/END ERROR EXAMPLE/`}}
+--->type SyntaxError struct {
+- File string
+- Line int
+- Message string
+-}
+-
+-func (se *SyntaxError) Error() string {
+- return fmt.Sprintf("%s:%d: %s", se.File, se.Line, se.Message)
+-}</pre>
+-
+-<p>
+-All standard packages have been updated to use the new interface; the old <code>os.Error</code> is gone.
+-</p>
+-
+-<p>
+-A new package, <a href="/pkg/errors/"><code>errors</code></a>, contains the function
+-</p>
+-
+-<pre>
+-func New(text string) error
+-</pre>
+-
+-<p>
+-to turn a string into an error. It replaces the old <code>os.NewError</code>.
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/ErrSyntax/`}}
+---> var ErrSyntax = errors.New("syntax error")</pre>
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will update almost all code affected by the change.
+-Code that defines error types with a <code>String</code> method will need to be updated
+-by hand to rename the methods to <code>Error</code>.
+-</p>
+-
+-<h3 id="errno">System call errors</h3>
+-
+-<p>
+-The old <code>syscall</code> package, which predated <code>os.Error</code>
+-(and just about everything else),
+-returned errors as <code>int</code> values.
+-In turn, the <code>os</code> package forwarded many of these errors, such
+-as <code>EINVAL</code>, but using a different set of errors on each platform.
+-This behavior was unpleasant and unportable.
+-</p>
+-
+-<p>
+-In Go 1, the
+-<a href="/pkg/syscall/"><code>syscall</code></a>
+-package instead returns an <code>error</code> for system call errors.
+-On Unix, the implementation is done by a
+-<a href="/pkg/syscall/#Errno"><code>syscall.Errno</code></a> type
+-that satisfies <code>error</code> and replaces the old <code>os.Errno</code>.
+-</p>
+-
+-<p>
+-The changes affecting <code>os.EINVAL</code> and relatives are
+-described <a href="#os">elsewhere</a>.
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will update almost all code affected by the change.
+-Regardless, most code should use the <code>os</code> package
+-rather than <code>syscall</code> and so will be unaffected.
+-</p>
+-
+-<h3 id="time">Time</h3>
+-
+-<p>
+-Time is always a challenge to support well in a programming language.
+-The old Go <code>time</code> package had <code>int64</code> units, no
+-real type safety,
+-and no distinction between absolute times and durations.
+-</p>
+-
+-<p>
+-One of the most sweeping changes in the Go 1 library is therefore a
+-complete redesign of the
+-<a href="/pkg/time/"><code>time</code></a> package.
+-Instead of an integer number of nanoseconds as an <code>int64</code>,
+-and a separate <code>*time.Time</code> type to deal with human
+-units such as hours and years,
+-there are now two fundamental types:
+-<a href="/pkg/time/#Time"><code>time.Time</code></a>
+-(a value, so the <code>*</code> is gone), which represents a moment in time;
+-and <a href="/pkg/time/#Duration"><code>time.Duration</code></a>,
+-which represents an interval.
+-Both have nanosecond resolution.
+-A <code>Time</code> can represent any time into the ancient
+-past and remote future, while a <code>Duration</code> can
+-span plus or minus only about 290 years.
+-There are methods on these types, plus a number of helpful
+-predefined constant durations such as <code>time.Second</code>.
+-</p>
+-
+-<p>
+-Among the new methods are things like
+-<a href="/pkg/time/#Time.Add"><code>Time.Add</code></a>,
+-which adds a <code>Duration</code> to a <code>Time</code>, and
+-<a href="/pkg/time/#Time.Sub"><code>Time.Sub</code></a>,
+-which subtracts two <code>Times</code> to yield a <code>Duration</code>.
+-</p>
+-
+-<p>
+-The most important semantic change is that the Unix epoch (Jan 1, 1970) is now
+-relevant only for those functions and methods that mention Unix:
+-<a href="/pkg/time/#Unix"><code>time.Unix</code></a>
+-and the <a href="/pkg/time/#Time.Unix"><code>Unix</code></a>
+-and <a href="/pkg/time/#Time.UnixNano"><code>UnixNano</code></a> methods
+-of the <code>Time</code> type.
+-In particular,
+-<a href="/pkg/time/#Now"><code>time.Now</code></a>
+-returns a <code>time.Time</code> value rather than, in the old
+-API, an integer nanosecond count since the Unix epoch.
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/sleepUntil/` `/^}/`}}
+---><span class="comment">// sleepUntil sleeps until the specified time. It returns immediately if it's too late.</span>
+-func sleepUntil(wakeup time.Time) {
+- now := time.Now() <span class="comment">// A Time.</span>
+- if !wakeup.After(now) {
+- return
+- }
+- delta := wakeup.Sub(now) <span class="comment">// A Duration.</span>
+- fmt.Printf("Sleeping for %.3fs\n", delta.Seconds())
+- time.Sleep(delta)
+-}</pre>
+-
+-<p>
+-The new types, methods, and constants have been propagated through
+-all the standard packages that use time, such as <code>os</code> and
+-its representation of file time stamps.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-The <code>go</code> <code>fix</code> tool will update many uses of the old <code>time</code> package to use the new
+-types and methods, although it does not replace values such as <code>1e9</code>
+-representing nanoseconds per second.
+-Also, because of type changes in some of the values that arise,
+-some of the expressions rewritten by the fix tool may require
+-further hand editing; in such cases the rewrite will include
+-the correct function or method for the old functionality, but
+-may have the wrong type or require further analysis.
+-</p>
+-
+-<h2 id="minor">Minor changes to the library</h2>
+-
+-<p>
+-This section describes smaller changes, such as those to less commonly
+-used packages or that affect
+-few programs beyond the need to run <code>go</code> <code>fix</code>.
+-This category includes packages that are new in Go 1.
+-Collectively they improve portability, regularize behavior, and
+-make the interfaces more modern and Go-like.
+-</p>
+-
+-<h3 id="archive_zip">The archive/zip package</h3>
+-
+-<p>
+-In Go 1, <a href="/pkg/archive/zip/#Writer"><code>*zip.Writer</code></a> no
+-longer has a <code>Write</code> method. Its presence was a mistake.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-What little code is affected will be caught by the compiler and must be updated by hand.
+-</p>
+-
+-<h3 id="bufio">The bufio package</h3>
+-
+-<p>
+-In Go 1, <a href="/pkg/bufio/#NewReaderSize"><code>bufio.NewReaderSize</code></a>
+-and
+-<a href="/pkg/bufio/#NewWriterSize"><code>bufio.NewWriterSize</code></a>
+-functions no longer return an error for invalid sizes.
+-If the argument size is too small or invalid, it is adjusted.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will update calls that assign the error to _.
+-Calls that aren't fixed will be caught by the compiler and must be updated by hand.
+-</p>
+-
+-<h3 id="compress">The compress/flate, compress/gzip and compress/zlib packages</h3>
+-
+-<p>
+-In Go 1, the <code>NewWriterXxx</code> functions in
+-<a href="/pkg/compress/flate"><code>compress/flate</code></a>,
+-<a href="/pkg/compress/gzip"><code>compress/gzip</code></a> and
+-<a href="/pkg/compress/zlib"><code>compress/zlib</code></a>
+-all return <code>(*Writer, error)</code> if they take a compression level,
+-and <code>*Writer</code> otherwise. Package <code>gzip</code>'s
+-<code>Compressor</code> and <code>Decompressor</code> types have been renamed
+-to <code>Writer</code> and <code>Reader</code>. Package <code>flate</code>'s
+-<code>WrongValueError</code> type has been removed.
+-</p>
+-
+-<p>
+-<em>Updating</em>
+-Running <code>go</code> <code>fix</code> will update old names and calls that assign the error to _.
+-Calls that aren't fixed will be caught by the compiler and must be updated by hand.
+-</p>
+-
+-<h3 id="crypto_aes_des">The crypto/aes and crypto/des packages</h3>
+-
+-<p>
+-In Go 1, the <code>Reset</code> method has been removed. Go does not guarantee
+-that memory is not copied and therefore this method was misleading.
+-</p>
+-
+-<p>
+-The cipher-specific types <code>*aes.Cipher</code>, <code>*des.Cipher</code>,
+-and <code>*des.TripleDESCipher</code> have been removed in favor of
+-<code>cipher.Block</code>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Remove the calls to Reset. Replace uses of the specific cipher types with
+-cipher.Block.
+-</p>
+-
+-<h3 id="crypto_elliptic">The crypto/elliptic package</h3>
+-
+-<p>
+-In Go 1, <a href="/pkg/crypto/elliptic/#Curve"><code>elliptic.Curve</code></a>
+-has been made an interface to permit alternative implementations. The curve
+-parameters have been moved to the
+-<a href="/pkg/crypto/elliptic/#CurveParams"><code>elliptic.CurveParams</code></a>
+-structure.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Existing users of <code>*elliptic.Curve</code> will need to change to
+-simply <code>elliptic.Curve</code>. Calls to <code>Marshal</code>,
+-<code>Unmarshal</code> and <code>GenerateKey</code> are now functions
+-in <code>crypto/elliptic</code> that take an <code>elliptic.Curve</code>
+-as their first argument.
+-</p>
+-
+-<h3 id="crypto_hmac">The crypto/hmac package</h3>
+-
+-<p>
+-In Go 1, the hash-specific functions, such as <code>hmac.NewMD5</code>, have
+-been removed from <code>crypto/hmac</code>. Instead, <code>hmac.New</code> takes
+-a function that returns a <code>hash.Hash</code>, such as <code>md5.New</code>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will perform the needed changes.
+-</p>
+-
+-<h3 id="crypto_x509">The crypto/x509 package</h3>
+-
+-<p>
+-In Go 1, the
+-<a href="/pkg/crypto/x509/#CreateCertificate"><code>CreateCertificate</code></a>
+-and
+-<a href="/pkg/crypto/x509/#CreateCRL"><code>CreateCRL</code></a>
+-functions in <code>crypto/x509</code> have been altered to take an
+-<code>interface{}</code> where they previously took a <code>*rsa.PublicKey</code>
+-or <code>*rsa.PrivateKey</code>. This will allow other public key algorithms
+-to be implemented in the future.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-No changes will be needed.
+-</p>
+-
+-<h3 id="encoding_binary">The encoding/binary package</h3>
+-
+-<p>
+-In Go 1, the <code>binary.TotalSize</code> function has been replaced by
+-<a href="/pkg/encoding/binary/#Size"><code>Size</code></a>,
+-which takes an <code>interface{}</code> argument rather than
+-a <code>reflect.Value</code>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-What little code is affected will be caught by the compiler and must be updated by hand.
+-</p>
+-
+-<h3 id="encoding_xml">The encoding/xml package</h3>
+-
+-<p>
+-In Go 1, the <a href="/pkg/encoding/xml/"><code>xml</code></a> package
+-has been brought closer in design to the other marshaling packages such
+-as <a href="/pkg/encoding/gob/"><code>encoding/gob</code></a>.
+-</p>
+-
+-<p>
+-The old <code>Parser</code> type is renamed
+-<a href="/pkg/encoding/xml/#Decoder"><code>Decoder</code></a> and has a new
+-<a href="/pkg/encoding/xml/#Decoder.Decode"><code>Decode</code></a> method. An
+-<a href="/pkg/encoding/xml/#Encoder"><code>Encoder</code></a> type was also introduced.
+-</p>
+-
+-<p>
+-The functions <a href="/pkg/encoding/xml/#Marshal"><code>Marshal</code></a>
+-and <a href="/pkg/encoding/xml/#Unmarshal"><code>Unmarshal</code></a>
+-work with <code>[]byte</code> values now. To work with streams,
+-use the new <a href="/pkg/encoding/xml/#Encoder"><code>Encoder</code></a>
+-and <a href="/pkg/encoding/xml/#Decoder"><code>Decoder</code></a> types.
+-</p>
+-
+-<p>
+-When marshaling or unmarshaling values, the format of supported flags in
+-field tags has changed to be closer to the
+-<a href="/pkg/encoding/json"><code>json</code></a> package
+-(<code>`xml:"name,flag"`</code>). The matching done between field tags, field
+-names, and the XML attribute and element names is now case-sensitive.
+-The <code>XMLName</code> field tag, if present, must also match the name
+-of the XML element being marshaled.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will update most uses of the package except for some calls to
+-<code>Unmarshal</code>. Special care must be taken with field tags,
+-since the fix tool will not update them and if not fixed by hand they will
+-misbehave silently in some cases. For example, the old
+-<code>"attr"</code> is now written <code>",attr"</code> while plain
+-<code>"attr"</code> remains valid but with a different meaning.
+-</p>
+-
+-<h3 id="expvar">The expvar package</h3>
+-
+-<p>
+-In Go 1, the <code>RemoveAll</code> function has been removed.
+-The <code>Iter</code> function and Iter method on <code>*Map</code> have
+-been replaced by
+-<a href="/pkg/expvar/#Do"><code>Do</code></a>
+-and
+-<a href="/pkg/expvar/#Map.Do"><code>(*Map).Do</code></a>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Most code using <code>expvar</code> will not need changing. The rare code that used
+-<code>Iter</code> can be updated to pass a closure to <code>Do</code> to achieve the same effect.
+-</p>
+-
+-<h3 id="flag">The flag package</h3>
+-
+-<p>
+-In Go 1, the interface <a href="/pkg/flag/#Value"><code>flag.Value</code></a> has changed slightly.
+-The <code>Set</code> method now returns an <code>error</code> instead of
+-a <code>bool</code> to indicate success or failure.
+-</p>
+-
+-<p>
+-There is also a new kind of flag, <code>Duration</code>, to support argument
+-values specifying time intervals.
+-Values for such flags must be given units, just as <code>time.Duration</code>
+-formats them: <code>10s</code>, <code>1h30m</code>, etc.
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/timeout/`}}
+--->var timeout = flag.Duration("timeout", 30*time.Second, "how long to wait for completion")</pre>
+-
+-<p>
+-<em>Updating</em>:
+-Programs that implement their own flags will need minor manual fixes to update their
+-<code>Set</code> methods.
+-The <code>Duration</code> flag is new and affects no existing code.
+-</p>
+-
+-
+-<h3 id="go">The go/* packages</h3>
+-
+-<p>
+-Several packages under <code>go</code> have slightly revised APIs.
+-</p>
+-
+-<p>
+-A concrete <code>Mode</code> type was introduced for configuration mode flags
+-in the packages
+-<a href="/pkg/go/scanner/"><code>go/scanner</code></a>,
+-<a href="/pkg/go/parser/"><code>go/parser</code></a>,
+-<a href="/pkg/go/printer/"><code>go/printer</code></a>, and
+-<a href="/pkg/go/doc/"><code>go/doc</code></a>.
+-</p>
+-
+-<p>
+-The modes <code>AllowIllegalChars</code> and <code>InsertSemis</code> have been removed
+-from the <a href="/pkg/go/scanner/"><code>go/scanner</code></a> package. They were mostly
+-useful for scanning text other then Go source files. Instead, the
+-<a href="/pkg/text/scanner/"><code>text/scanner</code></a> package should be used
+-for that purpose.
+-</p>
+-
+-<p>
+-The <a href="/pkg/go/scanner/#ErrorHandler"><code>ErrorHandler</code></a> provided
+-to the scanner's <a href="/pkg/go/scanner/#Scanner.Init"><code>Init</code></a> method is
+-now simply a function rather than an interface. The <code>ErrorVector</code> type has
+-been removed in favor of the (existing) <a href="/pkg/go/scanner/#ErrorList"><code>ErrorList</code></a>
+-type, and the <code>ErrorVector</code> methods have been migrated. Instead of embedding
+-an <code>ErrorVector</code> in a client of the scanner, now a client should maintain
+-an <code>ErrorList</code>.
+-</p>
+-
+-<p>
+-The set of parse functions provided by the <a href="/pkg/go/parser/"><code>go/parser</code></a>
+-package has been reduced to the primary parse function
+-<a href="/pkg/go/parser/#ParseFile"><code>ParseFile</code></a>, and a couple of
+-convenience functions <a href="/pkg/go/parser/#ParseDir"><code>ParseDir</code></a>
+-and <a href="/pkg/go/parser/#ParseExpr"><code>ParseExpr</code></a>.
+-</p>
+-
+-<p>
+-The <a href="/pkg/go/printer/"><code>go/printer</code></a> package supports an additional
+-configuration mode <a href="/pkg/go/printer/#Mode"><code>SourcePos</code></a>;
+-if set, the printer will emit <code>//line</code> comments such that the generated
+-output contains the original source code position information. The new type
+-<a href="/pkg/go/printer/#CommentedNode"><code>CommentedNode</code></a> can be
+-used to provide comments associated with an arbitrary
+-<a href="/pkg/go/ast/#Node"><code>ast.Node</code></a> (until now only
+-<a href="/pkg/go/ast/#File"><code>ast.File</code></a> carried comment information).
+-</p>
+-
+-<p>
+-The type names of the <a href="/pkg/go/doc/"><code>go/doc</code></a> package have been
+-streamlined by removing the <code>Doc</code> suffix: <code>PackageDoc</code>
+-is now <code>Package</code>, <code>ValueDoc</code> is <code>Value</code>, etc.
+-Also, all types now consistently have a <code>Name</code> field (or <code>Names</code>,
+-in the case of type <code>Value</code>) and <code>Type.Factories</code> has become
+-<code>Type.Funcs</code>.
+-Instead of calling <code>doc.NewPackageDoc(pkg, importpath)</code>,
+-documentation for a package is created with:
+-</p>
+-
+-<pre>
+- doc.New(pkg, importpath, mode)
+-</pre>
+-
+-<p>
+-where the new <code>mode</code> parameter specifies the operation mode:
+-if set to <a href="/pkg/go/doc/#AllDecls"><code>AllDecls</code></a>, all declarations
+-(not just exported ones) are considered.
+-The function <code>NewFileDoc</code> was removed, and the function
+-<code>CommentText</code> has become the method
+-<a href="/pkg/go/ast/#Text"><code>Text</code></a> of
+-<a href="/pkg/go/ast/#CommentGroup"><code>ast.CommentGroup</code></a>.
+-</p>
+-
+-<p>
+-In package <a href="/pkg/go/token/"><code>go/token</code></a>, the
+-<a href="/pkg/go/token/#FileSet"><code>token.FileSet</code></a> method <code>Files</code>
+-(which originally returned a channel of <code>*token.File</code>s) has been replaced
+-with the iterator <a href="/pkg/go/token/#FileSet.Iterate"><code>Iterate</code></a> that
+-accepts a function argument instead.
+-</p>
+-
+-<p>
+-In package <a href="/pkg/go/build/"><code>go/build</code></a>, the API
+-has been nearly completely replaced.
+-The package still computes Go package information
+-but it does not run the build: the <code>Cmd</code> and <code>Script</code>
+-types are gone.
+-(To build code, use the new
+-<a href="/cmd/go/"><code>go</code></a> command instead.)
+-The <code>DirInfo</code> type is now named
+-<a href="/pkg/go/build/#Package"><code>Package</code></a>.
+-<code>FindTree</code> and <code>ScanDir</code> are replaced by
+-<a href="/pkg/go/build/#Import"><code>Import</code></a>
+-and
+-<a href="/pkg/go/build/#ImportDir"><code>ImportDir</code></a>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Code that uses packages in <code>go</code> will have to be updated by hand; the
+-compiler will reject incorrect uses. Templates used in conjunction with any of the
+-<code>go/doc</code> types may need manual fixes; the renamed fields will lead
+-to run-time errors.
+-</p>
+-
+-<h3 id="hash">The hash package</h3>
+-
+-<p>
+-In Go 1, the definition of <a href="/pkg/hash/#Hash"><code>hash.Hash</code></a> includes
+-a new method, <code>BlockSize</code>. This new method is used primarily in the
+-cryptographic libraries.
+-</p>
+-
+-<p>
+-The <code>Sum</code> method of the
+-<a href="/pkg/hash/#Hash"><code>hash.Hash</code></a> interface now takes a
+-<code>[]byte</code> argument, to which the hash value will be appended.
+-The previous behavior can be recreated by adding a <code>nil</code> argument to the call.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Existing implementations of <code>hash.Hash</code> will need to add a
+-<code>BlockSize</code> method. Hashes that process the input one byte at
+-a time can implement <code>BlockSize</code> to return 1.
+-Running <code>go</code> <code>fix</code> will update calls to the <code>Sum</code> methods of the various
+-implementations of <code>hash.Hash</code>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Since the package's functionality is new, no updating is necessary.
+-</p>
+-
+-<h3 id="http">The http package</h3>
+-
+-<p>
+-In Go 1 the <a href="/pkg/net/http/"><code>http</code></a> package is refactored,
+-putting some of the utilities into a
+-<a href="/pkg/net/http/httputil/"><code>httputil</code></a> subdirectory.
+-These pieces are only rarely needed by HTTP clients.
+-The affected items are:
+-</p>
+-
+-<ul>
+-<li>ClientConn</li>
+-<li>DumpRequest</li>
+-<li>DumpRequestOut</li>
+-<li>DumpResponse</li>
+-<li>NewChunkedReader</li>
+-<li>NewChunkedWriter</li>
+-<li>NewClientConn</li>
+-<li>NewProxyClientConn</li>
+-<li>NewServerConn</li>
+-<li>NewSingleHostReverseProxy</li>
+-<li>ReverseProxy</li>
+-<li>ServerConn</li>
+-</ul>
+-
+-<p>
+-The <code>Request.RawURL</code> field has been removed; it was a
+-historical artifact.
+-</p>
+-
+-<p>
+-The <code>Handle</code> and <code>HandleFunc</code>
+-functions, and the similarly-named methods of <code>ServeMux</code>,
+-now panic if an attempt is made to register the same pattern twice.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will update the few programs that are affected except for
+-uses of <code>RawURL</code>, which must be fixed by hand.
+-</p>
+-
+-<h3 id="image">The image package</h3>
+-
+-<p>
+-The <a href="/pkg/image/"><code>image</code></a> package has had a number of
+-minor changes, rearrangements and renamings.
+-</p>
+-
+-<p>
+-Most of the color handling code has been moved into its own package,
+-<a href="/pkg/image/color/"><code>image/color</code></a>.
+-For the elements that moved, a symmetry arises; for instance,
+-each pixel of an
+-<a href="/pkg/image/#RGBA"><code>image.RGBA</code></a>
+-is a
+-<a href="/pkg/image/color/#RGBA"><code>color.RGBA</code></a>.
+-</p>
+-
+-<p>
+-The old <code>image/ycbcr</code> package has been folded, with some
+-renamings, into the
+-<a href="/pkg/image/"><code>image</code></a>
+-and
+-<a href="/pkg/image/color/"><code>image/color</code></a>
+-packages.
+-</p>
+-
+-<p>
+-The old <code>image.ColorImage</code> type is still in the <code>image</code>
+-package but has been renamed
+-<a href="/pkg/image/#Uniform"><code>image.Uniform</code></a>,
+-while <code>image.Tiled</code> has been removed.
+-</p>
+-
+-<p>
+-This table lists the renamings.
+-</p>
+-
+-<table class="codetable" frame="border" summary="image renames">
+-<colgroup align="left" width="50%"></colgroup>
+-<colgroup align="left" width="50%"></colgroup>
+-<tr>
+-<th align="left">Old</th>
+-<th align="left">New</th>
+-</tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>image.Color</td> <td>color.Color</td></tr>
+-<tr><td>image.ColorModel</td> <td>color.Model</td></tr>
+-<tr><td>image.ColorModelFunc</td> <td>color.ModelFunc</td></tr>
+-<tr><td>image.PalettedColorModel</td> <td>color.Palette</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>image.RGBAColor</td> <td>color.RGBA</td></tr>
+-<tr><td>image.RGBA64Color</td> <td>color.RGBA64</td></tr>
+-<tr><td>image.NRGBAColor</td> <td>color.NRGBA</td></tr>
+-<tr><td>image.NRGBA64Color</td> <td>color.NRGBA64</td></tr>
+-<tr><td>image.AlphaColor</td> <td>color.Alpha</td></tr>
+-<tr><td>image.Alpha16Color</td> <td>color.Alpha16</td></tr>
+-<tr><td>image.GrayColor</td> <td>color.Gray</td></tr>
+-<tr><td>image.Gray16Color</td> <td>color.Gray16</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>image.RGBAColorModel</td> <td>color.RGBAModel</td></tr>
+-<tr><td>image.RGBA64ColorModel</td> <td>color.RGBA64Model</td></tr>
+-<tr><td>image.NRGBAColorModel</td> <td>color.NRGBAModel</td></tr>
+-<tr><td>image.NRGBA64ColorModel</td> <td>color.NRGBA64Model</td></tr>
+-<tr><td>image.AlphaColorModel</td> <td>color.AlphaModel</td></tr>
+-<tr><td>image.Alpha16ColorModel</td> <td>color.Alpha16Model</td></tr>
+-<tr><td>image.GrayColorModel</td> <td>color.GrayModel</td></tr>
+-<tr><td>image.Gray16ColorModel</td> <td>color.Gray16Model</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>ycbcr.RGBToYCbCr</td> <td>color.RGBToYCbCr</td></tr>
+-<tr><td>ycbcr.YCbCrToRGB</td> <td>color.YCbCrToRGB</td></tr>
+-<tr><td>ycbcr.YCbCrColorModel</td> <td>color.YCbCrModel</td></tr>
+-<tr><td>ycbcr.YCbCrColor</td> <td>color.YCbCr</td></tr>
+-<tr><td>ycbcr.YCbCr</td> <td>image.YCbCr</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>ycbcr.SubsampleRatio444</td> <td>image.YCbCrSubsampleRatio444</td></tr>
+-<tr><td>ycbcr.SubsampleRatio422</td> <td>image.YCbCrSubsampleRatio422</td></tr>
+-<tr><td>ycbcr.SubsampleRatio420</td> <td>image.YCbCrSubsampleRatio420</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>image.ColorImage</td> <td>image.Uniform</td></tr>
+-</table>
+-
+-<p>
+-The image package's <code>New</code> functions
+-(<a href="/pkg/image/#NewRGBA"><code>NewRGBA</code></a>,
+-<a href="/pkg/image/#NewRGBA64"><code>NewRGBA64</code></a>, etc.)
+-take an <a href="/pkg/image/#Rectangle"><code>image.Rectangle</code></a> as an argument
+-instead of four integers.
+-</p>
+-
+-<p>
+-Finally, there are new predefined <code>color.Color</code> variables
+-<a href="/pkg/image/color/#Black"><code>color.Black</code></a>,
+-<a href="/pkg/image/color/#White"><code>color.White</code></a>,
+-<a href="/pkg/image/color/#Opaque"><code>color.Opaque</code></a>
+-and
+-<a href="/pkg/image/color/#Transparent"><code>color.Transparent</code></a>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will update almost all code affected by the change.
+-</p>
+-
+-<h3 id="log_syslog">The log/syslog package</h3>
+-
+-<p>
+-In Go 1, the <a href="/pkg/log/syslog/#NewLogger"><code>syslog.NewLogger</code></a>
+-function returns an error as well as a <code>log.Logger</code>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-What little code is affected will be caught by the compiler and must be updated by hand.
+-</p>
+-
+-<h3 id="mime">The mime package</h3>
+-
+-<p>
+-In Go 1, the <a href="/pkg/mime/#FormatMediaType"><code>FormatMediaType</code></a> function
+-of the <code>mime</code> package has been simplified to make it
+-consistent with
+-<a href="/pkg/mime/#ParseMediaType"><code>ParseMediaType</code></a>.
+-It now takes <code>"text/html"</code> rather than <code>"text"</code> and <code>"html"</code>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-What little code is affected will be caught by the compiler and must be updated by hand.
+-</p>
+-
+-<h3 id="net">The net package</h3>
+-
+-<p>
+-In Go 1, the various <code>SetTimeout</code>,
+-<code>SetReadTimeout</code>, and <code>SetWriteTimeout</code> methods
+-have been replaced with
+-<a href="/pkg/net/#IPConn.SetDeadline"><code>SetDeadline</code></a>,
+-<a href="/pkg/net/#IPConn.SetReadDeadline"><code>SetReadDeadline</code></a>, and
+-<a href="/pkg/net/#IPConn.SetWriteDeadline"><code>SetWriteDeadline</code></a>,
+-respectively. Rather than taking a timeout value in nanoseconds that
+-apply to any activity on the connection, the new methods set an
+-absolute deadline (as a <code>time.Time</code> value) after which
+-reads and writes will time out and no longer block.
+-</p>
+-
+-<p>
+-There are also new functions
+-<a href="/pkg/net/#DialTimeout"><code>net.DialTimeout</code></a>
+-to simplify timing out dialing a network address and
+-<a href="/pkg/net/#ListenMulticastUDP"><code>net.ListenMulticastUDP</code></a>
+-to allow multicast UDP to listen concurrently across multiple listeners.
+-The <code>net.ListenMulticastUDP</code> function replaces the old
+-<code>JoinGroup</code> and <code>LeaveGroup</code> methods.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Code that uses the old methods will fail to compile and must be updated by hand.
+-The semantic change makes it difficult for the fix tool to update automatically.
+-</p>
+-
+-<h3 id="os">The os package</h3>
+-
+-<p>
+-The <code>Time</code> function has been removed; callers should use
+-the <a href="/pkg/time/#Time"><code>Time</code></a> type from the
+-<code>time</code> package.
+-</p>
+-
+-<p>
+-The <code>Exec</code> function has been removed; callers should use
+-<code>Exec</code> from the <code>syscall</code> package, where available.
+-</p>
+-
+-<p>
+-The <code>ShellExpand</code> function has been renamed to <a
+-href="/pkg/os/#ExpandEnv"><code>ExpandEnv</code></a>.
+-</p>
+-
+-<p>
+-The <a href="/pkg/os/#NewFile"><code>NewFile</code></a> function
+-now takes a <code>uintptr</code> fd, instead of an <code>int</code>.
+-The <a href="/pkg/os/#File.Fd"><code>Fd</code></a> method on files now
+-also returns a <code>uintptr</code>.
+-</p>
+-
+-<p>
+-There are no longer error constants such as <code>EINVAL</code>
+-in the <code>os</code> package, since the set of values varied with
+-the underlying operating system. There are new portable functions like
+-<a href="/pkg/os/#IsPermission"><code>IsPermission</code></a>
+-to test common error properties, plus a few new error values
+-with more Go-like names, such as
+-<a href="/pkg/os/#ErrPermission"><code>ErrPermission</code></a>
+-and
+-<a href="/pkg/os/#ErrNoEnv"><code>ErrNoEnv</code></a>.
+-</p>
+-
+-<p>
+-The <code>Getenverror</code> function has been removed. To distinguish
+-between a non-existent environment variable and an empty string,
+-use <a href="/pkg/os/#Environ"><code>os.Environ</code></a> or
+-<a href="/pkg/syscall/#Getenv"><code>syscall.Getenv</code></a>.
+-</p>
+-
+-
+-<p>
+-The <a href="/pkg/os/#Process.Wait"><code>Process.Wait</code></a> method has
+-dropped its option argument and the associated constants are gone
+-from the package.
+-Also, the function <code>Wait</code> is gone; only the method of
+-the <code>Process</code> type persists.
+-</p>
+-
+-<p>
+-The <code>Waitmsg</code> type returned by
+-<a href="/pkg/os/#Process.Wait"><code>Process.Wait</code></a>
+-has been replaced with a more portable
+-<a href="/pkg/os/#ProcessState"><code>ProcessState</code></a>
+-type with accessor methods to recover information about the
+-process.
+-Because of changes to <code>Wait</code>, the <code>ProcessState</code>
+-value always describes an exited process.
+-Portability concerns simplified the interface in other ways, but the values returned by the
+-<a href="/pkg/os/#ProcessState.Sys"><code>ProcessState.Sys</code></a> and
+-<a href="/pkg/os/#ProcessState.SysUsage"><code>ProcessState.SysUsage</code></a>
+-methods can be type-asserted to underlying system-specific data structures such as
+-<a href="/pkg/syscall/#WaitStatus"><code>syscall.WaitStatus</code></a> and
+-<a href="/pkg/syscall/#Rusage"><code>syscall.Rusage</code></a> on Unix.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will drop a zero argument to <code>Process.Wait</code>.
+-All other changes will be caught by the compiler and must be updated by hand.
+-</p>
+-
+-<h4 id="os_fileinfo">The os.FileInfo type</h4>
+-
+-<p>
+-Go 1 redefines the <a href="/pkg/os/#FileInfo"><code>os.FileInfo</code></a> type,
+-changing it from a struct to an interface:
+-</p>
+-
+-<pre>
+- type FileInfo interface {
+- Name() string // base name of the file
+- Size() int64 // length in bytes
+- Mode() FileMode // file mode bits
+- ModTime() time.Time // modification time
+- IsDir() bool // abbreviation for Mode().IsDir()
+- Sys() interface{} // underlying data source (can return nil)
+- }
+-</pre>
+-
+-<p>
+-The file mode information has been moved into a subtype called
+-<a href="/pkg/os/#FileMode"><code>os.FileMode</code></a>,
+-a simple integer type with <code>IsDir</code>, <code>Perm</code>, and <code>String</code>
+-methods.
+-</p>
+-
+-<p>
+-The system-specific details of file modes and properties such as (on Unix)
+-i-number have been removed from <code>FileInfo</code> altogether.
+-Instead, each operating system's <code>os</code> package provides an
+-implementation of the <code>FileInfo</code> interface, which
+-has a <code>Sys</code> method that returns the
+-system-specific representation of file metadata.
+-For instance, to discover the i-number of a file on a Unix system, unpack
+-the <code>FileInfo</code> like this:
+-</p>
+-
+-<pre>
+- fi, err := os.Stat("hello.go")
+- if err != nil {
+- log.Fatal(err)
+- }
+- // Check that it's a Unix file.
+- unixStat, ok := fi.Sys().(*syscall.Stat_t)
+- if !ok {
+- log.Fatal("hello.go: not a Unix file")
+- }
+- fmt.Printf("file i-number: %d\n", unixStat.Ino)
+-</pre>
+-
+-<p>
+-Assuming (which is unwise) that <code>"hello.go"</code> is a Unix file,
+-the i-number expression could be contracted to
+-</p>
+-
+-<pre>
+- fi.Sys().(*syscall.Stat_t).Ino
+-</pre>
+-
+-<p>
+-The vast majority of uses of <code>FileInfo</code> need only the methods
+-of the standard interface.
+-</p>
+-
+-<p>
+-The <code>os</code> package no longer contains wrappers for the POSIX errors
+-such as <code>ENOENT</code>.
+-For the few programs that need to verify particular error conditions, there are
+-now the boolean functions
+-<a href="/pkg/os/#IsExist"><code>IsExist</code></a>,
+-<a href="/pkg/os/#IsNotExist"><code>IsNotExist</code></a>
+-and
+-<a href="/pkg/os/#IsPermission"><code>IsPermission</code></a>.
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/os\.Open/` `/}/`}}
+---> f, err := os.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600)
+- if os.IsExist(err) {
+- log.Printf("%s already exists", name)
+- }</pre>
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will update code that uses the old equivalent of the current <code>os.FileInfo</code>
+-and <code>os.FileMode</code> API.
+-Code that needs system-specific file details will need to be updated by hand.
+-Code that uses the old POSIX error values from the <code>os</code> package
+-will fail to compile and will also need to be updated by hand.
+-</p>
+-
+-<h3 id="os_signal">The os/signal package</h3>
+-
+-<p>
+-The <code>os/signal</code> package in Go 1 replaces the
+-<code>Incoming</code> function, which returned a channel
+-that received all incoming signals,
+-with the selective <code>Notify</code> function, which asks
+-for delivery of specific signals on an existing channel.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Code must be updated by hand.
+-A literal translation of
+-</p>
+-<pre>
+-c := signal.Incoming()
+-</pre>
+-<p>
+-is
+-</p>
+-<pre>
+-c := make(chan os.Signal)
+-signal.Notify(c) // ask for all signals
+-</pre>
+-<p>
+-but most code should list the specific signals it wants to handle instead:
+-</p>
+-<pre>
+-c := make(chan os.Signal)
+-signal.Notify(c, syscall.SIGHUP, syscall.SIGQUIT)
+-</pre>
+-
+-<h3 id="path_filepath">The path/filepath package</h3>
+-
+-<p>
+-In Go 1, the <a href="/pkg/path/filepath/#Walk"><code>Walk</code></a> function of the
+-<code>path/filepath</code> package
+-has been changed to take a function value of type
+-<a href="/pkg/path/filepath/#WalkFunc"><code>WalkFunc</code></a>
+-instead of a <code>Visitor</code> interface value.
+-<code>WalkFunc</code> unifies the handling of both files and directories.
+-</p>
+-
+-<pre>
+- type WalkFunc func(path string, info os.FileInfo, err error) error
+-</pre>
+-
+-<p>
+-The <code>WalkFunc</code> function will be called even for files or directories that could not be opened;
+-in such cases the error argument will describe the failure.
+-If a directory's contents are to be skipped,
+-the function should return the value <a href="/pkg/path/filepath/#variables"><code>filepath.SkipDir</code></a>
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/STARTWALK/` `/ENDWALK/`}}
+---> markFn := func(path string, info os.FileInfo, err error) error {
+- if path == "pictures" { <span class="comment">// Will skip walking of directory pictures and its contents.</span>
+- return filepath.SkipDir
+- }
+- if err != nil {
+- return err
+- }
+- log.Println(path)
+- return nil
+- }
+- err := filepath.Walk(".", markFn)
+- if err != nil {
+- log.Fatal(err)
+- }</pre>
+-
+-<p>
+-<em>Updating</em>:
+-The change simplifies most code but has subtle consequences, so affected programs
+-will need to be updated by hand.
+-The compiler will catch code using the old interface.
+-</p>
+-
+-<h3 id="regexp">The regexp package</h3>
+-
+-<p>
+-The <a href="/pkg/regexp/"><code>regexp</code></a> package has been rewritten.
+-It has the same interface but the specification of the regular expressions
+-it supports has changed from the old "egrep" form to that of
+-<a href="http://code.google.com/p/re2/">RE2</a>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Code that uses the package should have its regular expressions checked by hand.
+-</p>
+-
+-<h3 id="runtime">The runtime package</h3>
+-
+-<p>
+-In Go 1, much of the API exported by package
+-<code>runtime</code> has been removed in favor of
+-functionality provided by other packages.
+-Code using the <code>runtime.Type</code> interface
+-or its specific concrete type implementations should
+-now use package <a href="/pkg/reflect/"><code>reflect</code></a>.
+-Code using <code>runtime.Semacquire</code> or <code>runtime.Semrelease</code>
+-should use channels or the abstractions in package <a href="/pkg/sync/"><code>sync</code></a>.
+-The <code>runtime.Alloc</code>, <code>runtime.Free</code>,
+-and <code>runtime.Lookup</code> functions, an unsafe API created for
+-debugging the memory allocator, have no replacement.
+-</p>
+-
+-<p>
+-Before, <code>runtime.MemStats</code> was a global variable holding
+-statistics about memory allocation, and calls to <code>runtime.UpdateMemStats</code>
+-ensured that it was up to date.
+-In Go 1, <code>runtime.MemStats</code> is a struct type, and code should use
+-<a href="/pkg/runtime/#ReadMemStats"><code>runtime.ReadMemStats</code></a>
+-to obtain the current statistics.
+-</p>
+-
+-<p>
+-The package adds a new function,
+-<a href="/pkg/runtime/#NumCPU"><code>runtime.NumCPU</code></a>, that returns the number of CPUs available
+-for parallel execution, as reported by the operating system kernel.
+-Its value can inform the setting of <code>GOMAXPROCS</code>.
+-The <code>runtime.Cgocalls</code> and <code>runtime.Goroutines</code> functions
+-have been renamed to <code>runtime.NumCgoCall</code> and <code>runtime.NumGoroutine</code>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will update code for the function renamings.
+-Other code will need to be updated by hand.
+-</p>
+-
+-<h3 id="strconv">The strconv package</h3>
+-
+-<p>
+-In Go 1, the
+-<a href="/pkg/strconv/"><code>strconv</code></a>
+-package has been significantly reworked to make it more Go-like and less C-like,
+-although <code>Atoi</code> lives on (it's similar to
+-<code>int(ParseInt(x, 10, 0))</code>, as does
+-<code>Itoa(x)</code> (<code>FormatInt(int64(x), 10)</code>).
+-There are also new variants of some of the functions that append to byte slices rather than
+-return strings, to allow control over allocation.
+-</p>
+-
+-<p>
+-This table summarizes the renamings; see the
+-<a href="/pkg/strconv/">package documentation</a>
+-for full details.
+-</p>
+-
+-<table class="codetable" frame="border" summary="strconv renames">
+-<colgroup align="left" width="50%"></colgroup>
+-<colgroup align="left" width="50%"></colgroup>
+-<tr>
+-<th align="left">Old call</th>
+-<th align="left">New call</th>
+-</tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>Atob(x)</td> <td>ParseBool(x)</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>Atof32(x)</td> <td>ParseFloat(x, 32)§</td></tr>
+-<tr><td>Atof64(x)</td> <td>ParseFloat(x, 64)</td></tr>
+-<tr><td>AtofN(x, n)</td> <td>ParseFloat(x, n)</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>Atoi(x)</td> <td>Atoi(x)</td></tr>
+-<tr><td>Atoi(x)</td> <td>ParseInt(x, 10, 0)§</td></tr>
+-<tr><td>Atoi64(x)</td> <td>ParseInt(x, 10, 64)</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>Atoui(x)</td> <td>ParseUint(x, 10, 0)§</td></tr>
+-<tr><td>Atoui64(x)</td> <td>ParseUint(x, 10, 64)</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>Btoi64(x, b)</td> <td>ParseInt(x, b, 64)</td></tr>
+-<tr><td>Btoui64(x, b)</td> <td>ParseUint(x, b, 64)</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>Btoa(x)</td> <td>FormatBool(x)</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>Ftoa32(x, f, p)</td> <td>FormatFloat(float64(x), f, p, 32)</td></tr>
+-<tr><td>Ftoa64(x, f, p)</td> <td>FormatFloat(x, f, p, 64)</td></tr>
+-<tr><td>FtoaN(x, f, p, n)</td> <td>FormatFloat(x, f, p, n)</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>Itoa(x)</td> <td>Itoa(x)</td></tr>
+-<tr><td>Itoa(x)</td> <td>FormatInt(int64(x), 10)</td></tr>
+-<tr><td>Itoa64(x)</td> <td>FormatInt(x, 10)</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>Itob(x, b)</td> <td>FormatInt(int64(x), b)</td></tr>
+-<tr><td>Itob64(x, b)</td> <td>FormatInt(x, b)</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>Uitoa(x)</td> <td>FormatUint(uint64(x), 10)</td></tr>
+-<tr><td>Uitoa64(x)</td> <td>FormatUint(x, 10)</td></tr>
+-<tr>
+-<td colspan="2"><hr></td>
+-</tr>
+-<tr><td>Uitob(x, b)</td> <td>FormatUint(uint64(x), b)</td></tr>
+-<tr><td>Uitob64(x, b)</td> <td>FormatUint(x, b)</td></tr>
+-</table>
+-
+-<p>
+-<em>Updating</em>:
+-Running <code>go</code> <code>fix</code> will update almost all code affected by the change.
+-<br>
+-§ <code>Atoi</code> persists but <code>Atoui</code> and <code>Atof32</code> do not, so
+-they may require
+-a cast that must be added by hand; the <code>go</code> <code>fix</code> tool will warn about it.
+-</p>
+-
+-
+-<h3 id="templates">The template packages</h3>
+-
+-<p>
+-The <code>template</code> and <code>exp/template/html</code> packages have moved to
+-<a href="/pkg/text/template/"><code>text/template</code></a> and
+-<a href="/pkg/html/template/"><code>html/template</code></a>.
+-More significant, the interface to these packages has been simplified.
+-The template language is the same, but the concept of "template set" is gone
+-and the functions and methods of the packages have changed accordingly,
+-often by elimination.
+-</p>
+-
+-<p>
+-Instead of sets, a <code>Template</code> object
+-may contain multiple named template definitions,
+-in effect constructing
+-name spaces for template invocation.
+-A template can invoke any other template associated with it, but only those
+-templates associated with it.
+-The simplest way to associate templates is to parse them together, something
+-made easier with the new structure of the packages.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-The imports will be updated by fix tool.
+-Single-template uses will be otherwise be largely unaffected.
+-Code that uses multiple templates in concert will need to be updated by hand.
+-The <a href="/pkg/text/template/#examples">examples</a> in
+-the documentation for <code>text/template</code> can provide guidance.
+-</p>
+-
+-<h3 id="testing">The testing package</h3>
+-
+-<p>
+-The testing package has a type, <code>B</code>, passed as an argument to benchmark functions.
+-In Go 1, <code>B</code> has new methods, analogous to those of <code>T</code>, enabling
+-logging and failure reporting.
+-</p>
+-
+-<pre><!--{{code "/doc/progs/go1.go" `/func.*Benchmark/` `/^}/`}}
+--->func BenchmarkSprintf(b *testing.B) {
+- <span class="comment">// Verify correctness before running benchmark.</span>
+- b.StopTimer()
+- got := fmt.Sprintf("%x", 23)
+- const expect = "17"
+- if expect != got {
+- b.Fatalf("expected %q; got %q", expect, got)
+- }
+- b.StartTimer()
+- for i := 0; i < b.N; i++ {
+- fmt.Sprintf("%x", 23)
+- }
+-}</pre>
+-
+-<p>
+-<em>Updating</em>:
+-Existing code is unaffected, although benchmarks that use <code>println</code>
+-or <code>panic</code> should be updated to use the new methods.
+-</p>
+-
+-<h3 id="testing_script">The testing/script package</h3>
+-
+-<p>
+-The testing/script package has been deleted. It was a dreg.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-No code is likely to be affected.
+-</p>
+-
+-<h3 id="unsafe">The unsafe package</h3>
+-
+-<p>
+-In Go 1, the functions
+-<code>unsafe.Typeof</code>, <code>unsafe.Reflect</code>,
+-<code>unsafe.Unreflect</code>, <code>unsafe.New</code>, and
+-<code>unsafe.NewArray</code> have been removed;
+-they duplicated safer functionality provided by
+-package <a href="/pkg/reflect/"><code>reflect</code></a>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Code using these functions must be rewritten to use
+-package <a href="/pkg/reflect/"><code>reflect</code></a>.
+-The changes to <a href="http://code.google.com/p/go/source/detail?r=2646dc956207">encoding/gob</a> and the <a href="http://code.google.com/p/goprotobuf/source/detail?r=5340ad310031">protocol buffer library</a>
+-may be helpful as examples.
+-</p>
+-
+-<h3 id="url">The url package</h3>
+-
+-<p>
+-In Go 1 several fields from the <a href="/pkg/net/url/#URL"><code>url.URL</code></a> type
+-were removed or replaced.
+-</p>
+-
+-<p>
+-The <a href="/pkg/net/url/#URL.String"><code>String</code></a> method now
+-predictably rebuilds an encoded URL string using all of <code>URL</code>'s
+-fields as necessary. The resulting string will also no longer have
+-passwords escaped.
+-</p>
+-
+-<p>
+-The <code>Raw</code> field has been removed. In most cases the <code>String</code>
+-method may be used in its place.
+-</p>
+-
+-<p>
+-The old <code>RawUserinfo</code> field is replaced by the <code>User</code>
+-field, of type <a href="/pkg/net/url/#Userinfo"><code>*net.Userinfo</code></a>.
+-Values of this type may be created using the new <a href="/pkg/net/url/#User"><code>net.User</code></a>
+-and <a href="/pkg/net/url/#UserPassword"><code>net.UserPassword</code></a>
+-functions. The <code>EscapeUserinfo</code> and <code>UnescapeUserinfo</code>
+-functions are also gone.
+-</p>
+-
+-<p>
+-The <code>RawAuthority</code> field has been removed. The same information is
+-available in the <code>Host</code> and <code>User</code> fields.
+-</p>
+-
+-<p>
+-The <code>RawPath</code> field and the <code>EncodedPath</code> method have
+-been removed. The path information in rooted URLs (with a slash following the
+-schema) is now available only in decoded form in the <code>Path</code> field.
+-Occasionally, the encoded data may be required to obtain information that
+-was lost in the decoding process. These cases must be handled by accessing
+-the data the URL was built from.
+-</p>
+-
+-<p>
+-URLs with non-rooted paths, such as <code>"mailto:dev at golang.org?subject=Hi"</code>,
+-are also handled differently. The <code>OpaquePath</code> boolean field has been
+-removed and a new <code>Opaque</code> string field introduced to hold the encoded
+-path for such URLs. In Go 1, the cited URL parses as:
+-</p>
+-
+-<pre>
+- URL{
+- Scheme: "mailto",
+- Opaque: "dev at golang.org",
+- RawQuery: "subject=Hi",
+- }
+-</pre>
+-
+-<p>
+-A new <a href="/pkg/net/url/#URL.RequestURI"><code>RequestURI</code></a> method was
+-added to <code>URL</code>.
+-</p>
+-
+-<p>
+-The <code>ParseWithReference</code> function has been renamed to <code>ParseWithFragment</code>.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Code that uses the old fields will fail to compile and must be updated by hand.
+-The semantic changes make it difficult for the fix tool to update automatically.
+-</p>
+-
+-<h2 id="cmd_go">The go command</h2>
+-
+-<p>
+-Go 1 introduces the <a href="/cmd/go/">go command</a>, a tool for fetching,
+-building, and installing Go packages and commands. The <code>go</code> command
+-does away with makefiles, instead using Go source code to find dependencies and
+-determine build conditions. Most existing Go programs will no longer require
+-makefiles to be built.
+-</p>
+-
+-<p>
+-See <a href="/doc/code.html">How to Write Go Code</a> for a primer on the
+-<code>go</code> command and the <a href="/cmd/go/">go command documentation</a>
+-for the full details.
+-</p>
+-
+-<p>
+-<em>Updating</em>:
+-Projects that depend on the Go project's old makefile-based build
+-infrastructure (<code>Make.pkg</code>, <code>Make.cmd</code>, and so on) should
+-switch to using the <code>go</code> command for building Go code and, if
+-necessary, rewrite their makefiles to perform any auxiliary build tasks.
+-</p>
+-
+-<h2 id="cmd_cgo">The cgo command</h2>
+-
+-<p>
+-In Go 1, the <a href="/cmd/cgo">cgo command</a>
+-uses a different <code>_cgo_export.h</code>
+-file, which is generated for packages containing <code>//export</code> lines.
+-The <code>_cgo_export.h</code> file now begins with the C preamble comment,
+-so that exported function definitions can use types defined there.
+-This has the effect of compiling the preamble multiple times, so a
+-package using <code>//export</code> must not put function definitions
+-or variable initializations in the C preamble.
+-</p>
+-
+-<h2 id="releases">Packaged releases</h2>
+-
+-<p>
+-One of the most significant changes associated with Go 1 is the availability
+-of prepackaged, downloadable distributions.
+-They are available for many combinations of architecture and operating system
+-(including Windows) and the list will grow.
+-Installation details are described on the
+-<a href="/doc/install">Getting Started</a> page, while
+-the distributions themselves are listed on the
+-<a href="http://code.google.com/p/go/downloads/list">downloads page</a>.
+-
+-
+-</div>
+-
+-<div id="footer">
+-Build version go1.0.1.<br>
+-Except as <a href="http://code.google.com/policies.html#restrictions">noted</a>,
+-the content of this page is licensed under the
+-Creative Commons Attribution 3.0 License,
+-and code is licensed under a <a href="/LICENSE">BSD license</a>.<br>
+-<a href="/doc/tos.html">Terms of Service</a> |
+-<a href="http://www.google.com/intl/en/privacy/privacy-policy.html">Privacy Policy</a>
+-</div>
+-
+-<script type="text/javascript">
+-(function() {
+- var ga = document.createElement("script"); ga.type = "text/javascript"; ga.async = true;
+- ga.src = ("https:" == document.location.protocol ? "https://ssl" : "http://www") + ".google-analytics.com/ga.js";
+- var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ga, s);
+-})();
+-</script>
+-</body>
+-<script type="text/javascript">
+- (function() {
+- var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
+- po.src = 'https://apis.google.com/js/plusone.js';
+- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
+- })();
+-</script>
+-</html>
+-
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/adoption01.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/adoption01.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/adoption01.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/adoption01.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,194 +0,0 @@
+-#data
+-<a><p></a></p>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <p>
+-| <a>
+-
+-#data
+-<a>1<p>2</a>3</p>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| "1"
+-| <p>
+-| <a>
+-| "2"
+-| "3"
+-
+-#data
+-<a>1<button>2</a>3</button>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| "1"
+-| <button>
+-| <a>
+-| "2"
+-| "3"
+-
+-#data
+-<a>1<b>2</a>3</b>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| "1"
+-| <b>
+-| "2"
+-| <b>
+-| "3"
+-
+-#data
+-<a>1<div>2<div>3</a>4</div>5</div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| "1"
+-| <div>
+-| <a>
+-| "2"
+-| <div>
+-| <a>
+-| "3"
+-| "4"
+-| "5"
+-
+-#data
+-<table><a>1<p>2</a>3</p>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| "1"
+-| <p>
+-| <a>
+-| "2"
+-| "3"
+-| <table>
+-
+-#data
+-<b><b><a><p></a>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <b>
+-| <a>
+-| <p>
+-| <a>
+-
+-#data
+-<b><a><b><p></a>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <a>
+-| <b>
+-| <b>
+-| <p>
+-| <a>
+-
+-#data
+-<a><b><b><p></a>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <b>
+-| <b>
+-| <b>
+-| <b>
+-| <p>
+-| <a>
+-
+-#data
+-<p>1<s id="A">2<b id="B">3</p>4</s>5</b>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| "1"
+-| <s>
+-| id="A"
+-| "2"
+-| <b>
+-| id="B"
+-| "3"
+-| <s>
+-| id="A"
+-| <b>
+-| id="B"
+-| "4"
+-| <b>
+-| id="B"
+-| "5"
+-
+-#data
+-<table><a>1<td>2</td>3</table>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| "1"
+-| <a>
+-| "3"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| "2"
+-
+-#data
+-<table>A<td>B</td>C</table>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "AC"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| "B"
+-
+-#data
+-<a><svg><tr><input></a>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <svg svg>
+-| <svg tr>
+-| <svg input>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/adoption02.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/adoption02.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/adoption02.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/adoption02.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,31 +0,0 @@
+-#data
+-<b>1<i>2<p>3</b>4
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| "1"
+-| <i>
+-| "2"
+-| <i>
+-| <p>
+-| <b>
+-| "3"
+-| "4"
+-
+-#data
+-<a><div><style></style><address><a>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <div>
+-| <a>
+-| <style>
+-| <address>
+-| <a>
+-| <a>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/comments01.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/comments01.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/comments01.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/comments01.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,135 +0,0 @@
+-#data
+-FOO<!-- BAR -->BAZ
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <!-- BAR -->
+-| "BAZ"
+-
+-#data
+-FOO<!-- BAR --!>BAZ
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <!-- BAR -->
+-| "BAZ"
+-
+-#data
+-FOO<!-- BAR -- >BAZ
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <!-- BAR -- >BAZ -->
+-
+-#data
+-FOO<!-- BAR -- <QUX> -- MUX -->BAZ
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <!-- BAR -- <QUX> -- MUX -->
+-| "BAZ"
+-
+-#data
+-FOO<!-- BAR -- <QUX> -- MUX --!>BAZ
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <!-- BAR -- <QUX> -- MUX -->
+-| "BAZ"
+-
+-#data
+-FOO<!-- BAR -- <QUX> -- MUX -- >BAZ
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <!-- BAR -- <QUX> -- MUX -- >BAZ -->
+-
+-#data
+-FOO<!---->BAZ
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <!-- -->
+-| "BAZ"
+-
+-#data
+-FOO<!--->BAZ
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <!-- -->
+-| "BAZ"
+-
+-#data
+-FOO<!-->BAZ
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <!-- -->
+-| "BAZ"
+-
+-#data
+-<?xml version="1.0">Hi
+-#errors
+-#document
+-| <!-- ?xml version="1.0" -->
+-| <html>
+-| <head>
+-| <body>
+-| "Hi"
+-
+-#data
+-<?xml version="1.0">
+-#errors
+-#document
+-| <!-- ?xml version="1.0" -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<?xml version
+-#errors
+-#document
+-| <!-- ?xml version -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-FOO<!----->BAZ
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <!-- - -->
+-| "BAZ"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/doctype01.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/doctype01.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/doctype01.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/doctype01.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,370 +0,0 @@
+-#data
+-<!DOCTYPE html>Hello
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!dOctYpE HtMl>Hello
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPEhtml>Hello
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE>Hello
+-#errors
+-#document
+-| <!DOCTYPE >
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE >Hello
+-#errors
+-#document
+-| <!DOCTYPE >
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato>Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato >Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato taco>Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato taco "ddd>Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato sYstEM>Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato sYstEM >Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato sYstEM ggg>Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato SYSTEM taco >Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato SYSTEM 'taco"'>Hello
+-#errors
+-#document
+-| <!DOCTYPE potato "" "taco"">
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato SYSTEM "taco">Hello
+-#errors
+-#document
+-| <!DOCTYPE potato "" "taco">
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato SYSTEM "tai'co">Hello
+-#errors
+-#document
+-| <!DOCTYPE potato "" "tai'co">
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato SYSTEMtaco "ddd">Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato grass SYSTEM taco>Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato pUbLIc>Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato pUbLIc >Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato pUbLIcgoof>Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato PUBLIC goof>Hello
+-#errors
+-#document
+-| <!DOCTYPE potato>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato PUBLIC "go'of">Hello
+-#errors
+-#document
+-| <!DOCTYPE potato "go'of" "">
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato PUBLIC 'go'of'>Hello
+-#errors
+-#document
+-| <!DOCTYPE potato "go" "">
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato PUBLIC 'go:hh of' >Hello
+-#errors
+-#document
+-| <!DOCTYPE potato "go:hh of" "">
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE potato PUBLIC "W3C-//dfdf" SYSTEM ggg>Hello
+-#errors
+-#document
+-| <!DOCTYPE potato "W3C-//dfdf" "">
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+- "http://www.w3.org/TR/html4/strict.dtd">Hello
+-#errors
+-#document
+-| <!DOCTYPE html "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE ...>Hello
+-#errors
+-#document
+-| <!DOCTYPE ...>
+-| <html>
+-| <head>
+-| <body>
+-| "Hello"
+-
+-#data
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+-#errors
+-#document
+-| <!DOCTYPE html "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
+-#errors
+-#document
+-| <!DOCTYPE html "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE root-element [SYSTEM OR PUBLIC FPI] "uri" [
+-<!-- internal declarations -->
+-]>
+-#errors
+-#document
+-| <!DOCTYPE root-element>
+-| <html>
+-| <head>
+-| <body>
+-| "]>"
+-
+-#data
+-<!DOCTYPE html PUBLIC
+- "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"
+- "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
+-#errors
+-#document
+-| <!DOCTYPE html "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE HTML SYSTEM "http://www.w3.org/DTD/HTML4-strict.dtd"><body><b>Mine!</b></body>
+-#errors
+-#document
+-| <!DOCTYPE html "" "http://www.w3.org/DTD/HTML4-strict.dtd">
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| "Mine!"
+-
+-#data
+-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
+-#errors
+-#document
+-| <!DOCTYPE html "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"'http://www.w3.org/TR/html4/strict.dtd'>
+-#errors
+-#document
+-| <!DOCTYPE html "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01//EN"'http://www.w3.org/TR/html4/strict.dtd'>
+-#errors
+-#document
+-| <!DOCTYPE html "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE HTML PUBLIC'-//W3C//DTD HTML 4.01//EN''http://www.w3.org/TR/html4/strict.dtd'>
+-#errors
+-#document
+-| <!DOCTYPE html "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+-| <html>
+-| <head>
+-| <body>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/entities01.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/entities01.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/entities01.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/entities01.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,603 +0,0 @@
+-#data
+-FOO>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO>BAR"
+-
+-#data
+-FOO>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO>BAR"
+-
+-#data
+-FOO> BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO> BAR"
+-
+-#data
+-FOO>;;BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO>;;BAR"
+-
+-#data
+-I'm ¬it; I tell you
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "I'm ¬it; I tell you"
+-
+-#data
+-I'm ∉ I tell you
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "I'm ∉ I tell you"
+-
+-#data
+-FOO& BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO& BAR"
+-
+-#data
+-FOO&<BAR>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO&"
+-| <bar>
+-
+-#data
+-FOO&&&>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO&&&>BAR"
+-
+-#data
+-FOO)BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO)BAR"
+-
+-#data
+-FOOABAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOABAR"
+-
+-#data
+-FOOABAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOABAR"
+-
+-#data
+-FOO&#BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO&#BAR"
+-
+-#data
+-FOO&#ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO&#ZOO"
+-
+-#data
+-FOOºR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOºR"
+-
+-#data
+-FOO&#xZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO&#xZOO"
+-
+-#data
+-FOO&#XZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO&#XZOO"
+-
+-#data
+-FOO)BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO)BAR"
+-
+-#data
+-FOO䆺R
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO䆺R"
+-
+-#data
+-FOOAZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOAZOO"
+-
+-#data
+-FOO�ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO�ZOO"
+-
+-#data
+-FOOxZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOxZOO"
+-
+-#data
+-FOOyZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOyZOO"
+-
+-#data
+-FOO€ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO€ZOO"
+-
+-#data
+-FOOZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOZOO"
+-
+-#data
+-FOO‚ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO‚ZOO"
+-
+-#data
+-FOOƒZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOƒZOO"
+-
+-#data
+-FOO„ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO„ZOO"
+-
+-#data
+-FOO…ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO…ZOO"
+-
+-#data
+-FOO†ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO†ZOO"
+-
+-#data
+-FOO‡ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO‡ZOO"
+-
+-#data
+-FOOˆZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOˆZOO"
+-
+-#data
+-FOO‰ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO‰ZOO"
+-
+-#data
+-FOOŠZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOŠZOO"
+-
+-#data
+-FOO‹ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO‹ZOO"
+-
+-#data
+-FOOŒZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOŒZOO"
+-
+-#data
+-FOOZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOZOO"
+-
+-#data
+-FOOŽZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOŽZOO"
+-
+-#data
+-FOOZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOZOO"
+-
+-#data
+-FOOZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOZOO"
+-
+-#data
+-FOO‘ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO‘ZOO"
+-
+-#data
+-FOO’ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO’ZOO"
+-
+-#data
+-FOO“ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO“ZOO"
+-
+-#data
+-FOO”ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO”ZOO"
+-
+-#data
+-FOO•ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO•ZOO"
+-
+-#data
+-FOO–ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO–ZOO"
+-
+-#data
+-FOO—ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO—ZOO"
+-
+-#data
+-FOO˜ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO˜ZOO"
+-
+-#data
+-FOO™ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO™ZOO"
+-
+-#data
+-FOOšZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOšZOO"
+-
+-#data
+-FOO›ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO›ZOO"
+-
+-#data
+-FOOœZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOœZOO"
+-
+-#data
+-FOOZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOZOO"
+-
+-#data
+-FOOžZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOžZOO"
+-
+-#data
+-FOOŸZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOŸZOO"
+-
+-#data
+-FOO ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO ZOO"
+-
+-#data
+-FOO퟿ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOZOO"
+-
+-#data
+-FOO�ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO�ZOO"
+-
+-#data
+-FOO�ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO�ZOO"
+-
+-#data
+-FOO�ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO�ZOO"
+-
+-#data
+-FOO�ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO�ZOO"
+-
+-#data
+-FOOZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOZOO"
+-
+-#data
+-FOOZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOZOO"
+-
+-#data
+-FOO􈟔ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOZOO"
+-
+-#data
+-FOOZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOOZOO"
+-
+-#data
+-FOO�ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO�ZOO"
+-
+-#data
+-FOO�ZOO
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO�ZOO"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/entities02.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/entities02.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/entities02.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/entities02.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,249 +0,0 @@
+-#data
+-<div bar="ZZ>YY"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ>YY"
+-
+-#data
+-<div bar="ZZ&"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ&"
+-
+-#data
+-<div bar='ZZ&'></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ&"
+-
+-#data
+-<div bar=ZZ&></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ&"
+-
+-#data
+-<div bar="ZZ>=YY"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ>=YY"
+-
+-#data
+-<div bar="ZZ>0YY"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ>0YY"
+-
+-#data
+-<div bar="ZZ>9YY"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ>9YY"
+-
+-#data
+-<div bar="ZZ>aYY"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ>aYY"
+-
+-#data
+-<div bar="ZZ>ZYY"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ>ZYY"
+-
+-#data
+-<div bar="ZZ> YY"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ> YY"
+-
+-#data
+-<div bar="ZZ>"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ>"
+-
+-#data
+-<div bar='ZZ>'></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ>"
+-
+-#data
+-<div bar=ZZ>></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ>"
+-
+-#data
+-<div bar="ZZ£_id=23"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ£_id=23"
+-
+-#data
+-<div bar="ZZ&prod_id=23"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ&prod_id=23"
+-
+-#data
+-<div bar="ZZ£_id=23"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ£_id=23"
+-
+-#data
+-<div bar="ZZ∏_id=23"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ∏_id=23"
+-
+-#data
+-<div bar="ZZ£=23"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ£=23"
+-
+-#data
+-<div bar="ZZ&prod=23"></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| bar="ZZ&prod=23"
+-
+-#data
+-<div>ZZ£_id=23</div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "ZZ£_id=23"
+-
+-#data
+-<div>ZZ&prod_id=23</div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "ZZ&prod_id=23"
+-
+-#data
+-<div>ZZ£_id=23</div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "ZZ£_id=23"
+-
+-#data
+-<div>ZZ∏_id=23</div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "ZZ∏_id=23"
+-
+-#data
+-<div>ZZ£=23</div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "ZZ£=23"
+-
+-#data
+-<div>ZZ&prod=23</div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "ZZ&prod=23"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/html5test-com.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/html5test-com.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/html5test-com.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/html5test-com.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,246 +0,0 @@
+-#data
+-<div<div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div<div>
+-
+-#data
+-<div foo<bar=''>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| foo<bar=""
+-
+-#data
+-<div foo=`bar`>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| foo="`bar`"
+-
+-#data
+-<div \"foo=''>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| \"foo=""
+-
+-#data
+-<a href='\nbar'></a>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| href="\nbar"
+-
+-#data
+-<!DOCTYPE html>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-⟨⟩
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "⟨⟩"
+-
+-#data
+-'
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "'"
+-
+-#data
+-ⅈ
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "ⅈ"
+-
+-#data
+-𝕂
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "𝕂"
+-
+-#data
+-∉
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "∉"
+-
+-#data
+-<?import namespace="foo" implementation="#bar">
+-#errors
+-#document
+-| <!-- ?import namespace="foo" implementation="#bar" -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!--foo--bar-->
+-#errors
+-#document
+-| <!-- foo--bar -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<![CDATA[x]]>
+-#errors
+-#document
+-| <!-- [CDATA[x]] -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<textarea><!--</textarea>--></textarea>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| "<!--"
+-| "-->"
+-
+-#data
+-<textarea><!--</textarea>-->
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| "<!--"
+-| "-->"
+-
+-#data
+-<style><!--</style>--></style>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| "<!--"
+-| <body>
+-| "-->"
+-
+-#data
+-<style><!--</style>-->
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| "<!--"
+-| <body>
+-| "-->"
+-
+-#data
+-<ul><li>A </li> <li>B</li></ul>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <ul>
+-| <li>
+-| "A "
+-| " "
+-| <li>
+-| "B"
+-
+-#data
+-<table><form><input type=hidden><input></form><div></div></table>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <input>
+-| <div>
+-| <table>
+-| <form>
+-| <input>
+-| type="hidden"
+-
+-#data
+-<i>A<b>B<p></i>C</b>D
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <i>
+-| "A"
+-| <b>
+-| "B"
+-| <b>
+-| <p>
+-| <b>
+-| <i>
+-| "C"
+-| "D"
+-
+-#data
+-<div></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-
+-#data
+-<svg></svg>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-
+-#data
+-<math></math>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/inbody01.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/inbody01.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/inbody01.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/inbody01.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,43 +0,0 @@
+-#data
+-<button>1</foo>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <button>
+-| "1"
+-
+-#data
+-<foo>1<p>2</foo>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <foo>
+-| "1"
+-| <p>
+-| "2"
+-
+-#data
+-<dd>1</foo>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <dd>
+-| "1"
+-
+-#data
+-<foo>1<dd>2</foo>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <foo>
+-| "1"
+-| <dd>
+-| "2"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/isindex.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/isindex.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/isindex.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/isindex.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,40 +0,0 @@
+-#data
+-<isindex>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <form>
+-| <hr>
+-| <label>
+-| "This is a searchable index. Enter search keywords: "
+-| <input>
+-| name="isindex"
+-| <hr>
+-
+-#data
+-<isindex name="A" action="B" prompt="C" foo="D">
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <form>
+-| action="B"
+-| <hr>
+-| <label>
+-| "C"
+-| <input>
+-| foo="D"
+-| name="isindex"
+-| <hr>
+-
+-#data
+-<form><isindex>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <form>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/pending-spec-changes.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/pending-spec-changes.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/pending-spec-changes.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/pending-spec-changes.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,52 +0,0 @@
+-#data
+-<input type="hidden"><frameset>
+-#errors
+-21: Start tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”.
+-31: “frameset” start tag seen.
+-31: End of file seen and there were open elements.
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<!DOCTYPE html><table><caption><svg>foo</table>bar
+-#errors
+-47: End tag “table” did not match the name of the current open element (“svg”).
+-47: “table” closed but “caption” was still open.
+-47: End tag “table” seen, but there were open elements.
+-36: Unclosed element “svg”.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <svg svg>
+-| "foo"
+-| "bar"
+-
+-#data
+-<table><tr><td><svg><desc><td></desc><circle>
+-#errors
+-7: Start tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”.
+-30: A table cell was implicitly closed, but there were open elements.
+-26: Unclosed element “desc”.
+-20: Unclosed element “svg”.
+-37: Stray end tag “desc”.
+-45: End of file seen and there were open elements.
+-45: Unclosed element “circle”.
+-7: Unclosed element “table”.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <svg svg>
+-| <svg desc>
+-| <td>
+-| <circle>
+Binary files docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/pending-spec-changes-plain-text-unsafe.dat and docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/pending-spec-changes-plain-text-unsafe.dat differ
+Binary files docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/plain-text-unsafe.dat and docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/plain-text-unsafe.dat differ
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/README docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/README
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/README 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/README 1969-12-31 18:00:00.000000000 -0600
+@@ -1,28 +0,0 @@
+-The *.dat files in this directory are copied from The WebKit Open Source
+-Project, specifically $WEBKITROOT/LayoutTests/html5lib/resources.
+-WebKit is licensed under a BSD style license.
+-http://webkit.org/coding/bsd-license.html says:
+-
+-Copyright (C) 2009 Apple Inc. All rights reserved.
+-
+-Redistribution and use in source and binary forms, with or without
+-modification, are permitted provided that the following conditions are met:
+-
+-1. Redistributions of source code must retain the above copyright notice,
+-this list of conditions and the following disclaimer.
+-
+-2. Redistributions in binary form must reproduce the above copyright notice,
+-this list of conditions and the following disclaimer in the documentation
+-and/or other materials provided with the distribution.
+-
+-THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY
+-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+-DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/scriptdata01.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/scriptdata01.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/scriptdata01.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/scriptdata01.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,308 +0,0 @@
+-#data
+-FOO<script>'Hello'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "'Hello'"
+-| "BAR"
+-
+-#data
+-FOO<script></script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "BAR"
+-
+-#data
+-FOO<script></script >BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "BAR"
+-
+-#data
+-FOO<script></script/>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "BAR"
+-
+-#data
+-FOO<script></script/ >BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "BAR"
+-
+-#data
+-FOO<script type="text/plain"></scriptx>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| type="text/plain"
+-| "</scriptx>BAR"
+-
+-#data
+-FOO<script></script foo=">" dd>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "BAR"
+-
+-#data
+-FOO<script>'<'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "'<'"
+-| "BAR"
+-
+-#data
+-FOO<script>'<!'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "'<!'"
+-| "BAR"
+-
+-#data
+-FOO<script>'<!-'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "'<!-'"
+-| "BAR"
+-
+-#data
+-FOO<script>'<!--'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "'<!--'"
+-| "BAR"
+-
+-#data
+-FOO<script>'<!---'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "'<!---'"
+-| "BAR"
+-
+-#data
+-FOO<script>'<!-->'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "'<!-->'"
+-| "BAR"
+-
+-#data
+-FOO<script>'<!-->'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "'<!-->'"
+-| "BAR"
+-
+-#data
+-FOO<script>'<!-- potato'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "'<!-- potato'"
+-| "BAR"
+-
+-#data
+-FOO<script>'<!-- <sCrIpt'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "'<!-- <sCrIpt'"
+-| "BAR"
+-
+-#data
+-FOO<script type="text/plain">'<!-- <sCrIpt>'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| type="text/plain"
+-| "'<!-- <sCrIpt>'</script>BAR"
+-
+-#data
+-FOO<script type="text/plain">'<!-- <sCrIpt> -'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| type="text/plain"
+-| "'<!-- <sCrIpt> -'</script>BAR"
+-
+-#data
+-FOO<script type="text/plain">'<!-- <sCrIpt> --'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| type="text/plain"
+-| "'<!-- <sCrIpt> --'</script>BAR"
+-
+-#data
+-FOO<script>'<!-- <sCrIpt> -->'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| "'<!-- <sCrIpt> -->'"
+-| "BAR"
+-
+-#data
+-FOO<script type="text/plain">'<!-- <sCrIpt> --!>'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| type="text/plain"
+-| "'<!-- <sCrIpt> --!>'</script>BAR"
+-
+-#data
+-FOO<script type="text/plain">'<!-- <sCrIpt> -- >'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| type="text/plain"
+-| "'<!-- <sCrIpt> -- >'</script>BAR"
+-
+-#data
+-FOO<script type="text/plain">'<!-- <sCrIpt '</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| type="text/plain"
+-| "'<!-- <sCrIpt '</script>BAR"
+-
+-#data
+-FOO<script type="text/plain">'<!-- <sCrIpt/'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| type="text/plain"
+-| "'<!-- <sCrIpt/'</script>BAR"
+-
+-#data
+-FOO<script type="text/plain">'<!-- <sCrIpt\'</script>BAR
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| type="text/plain"
+-| "'<!-- <sCrIpt\'"
+-| "BAR"
+-
+-#data
+-FOO<script type="text/plain">'<!-- <sCrIpt/'</script>BAR</script>QUX
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "FOO"
+-| <script>
+-| type="text/plain"
+-| "'<!-- <sCrIpt/'</script>BAR"
+-| "QUX"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/scripted/adoption01.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/scripted/adoption01.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/scripted/adoption01.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/scripted/adoption01.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,15 +0,0 @@
+-#data
+-<p><b id="A"><script>document.getElementById("A").id = "B"</script></p>TEXT</b>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <b>
+-| id="B"
+-| <script>
+-| "document.getElementById("A").id = "B""
+-| <b>
+-| id="A"
+-| "TEXT"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/scripted/webkit01.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/scripted/webkit01.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/scripted/webkit01.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/scripted/webkit01.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,28 +0,0 @@
+-#data
+-1<script>document.write("2")</script>3
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "1"
+-| <script>
+-| "document.write("2")"
+-| "23"
+-
+-#data
+-1<script>document.write("<script>document.write('2')</scr"+ "ipt><script>document.write('3')</scr" + "ipt>")</script>4
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "1"
+-| <script>
+-| "document.write("<script>document.write('2')</scr"+ "ipt><script>document.write('3')</scr" + "ipt>")"
+-| <script>
+-| "document.write('2')"
+-| "2"
+-| <script>
+-| "document.write('3')"
+-| "34"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tables01.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tables01.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tables01.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tables01.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,212 +0,0 @@
+-#data
+-<table><th>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <th>
+-
+-#data
+-<table><td>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-
+-#data
+-<table><col foo='bar'>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <colgroup>
+-| <col>
+-| foo="bar"
+-
+-#data
+-<table><colgroup></html>foo
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "foo"
+-| <table>
+-| <colgroup>
+-
+-#data
+-<table></table><p>foo
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <p>
+-| "foo"
+-
+-#data
+-<table></body></caption></col></colgroup></html></tbody></td></tfoot></th></thead></tr><td>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-
+-#data
+-<table><select><option>3</select></table>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <option>
+-| "3"
+-| <table>
+-
+-#data
+-<table><select><table></table></select></table>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <table>
+-| <table>
+-
+-#data
+-<table><select></table>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <table>
+-
+-#data
+-<table><select><option>A<tr><td>B</td></tr></table>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <option>
+-| "A"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| "B"
+-
+-#data
+-<table><td></body></caption></col></colgroup></html>foo
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| "foo"
+-
+-#data
+-<table><td>A</table>B
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| "A"
+-| "B"
+-
+-#data
+-<table><tr><caption>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <caption>
+-
+-#data
+-<table><tr></body></caption></col></colgroup></html></td></th><td>foo
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| "foo"
+-
+-#data
+-<table><td><tr>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <tr>
+-
+-#data
+-<table><td><button><td>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <button>
+-| <td>
+-
+-#data
+-<table><tr><td><svg><desc><td>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <svg svg>
+-| <svg desc>
+-| <td>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests10.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests10.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests10.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests10.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,799 +0,0 @@
+-#data
+-<!DOCTYPE html><svg></svg>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-
+-#data
+-<!DOCTYPE html><svg></svg><![CDATA[a]]>
+-#errors
+-29: Bogus comment
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <!-- [CDATA[a]] -->
+-
+-#data
+-<!DOCTYPE html><body><svg></svg>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-
+-#data
+-<!DOCTYPE html><body><select><svg></svg></select>
+-#errors
+-35: Stray “svg” start tag.
+-42: Stray end tag “svg”
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-
+-#data
+-<!DOCTYPE html><body><select><option><svg></svg></option></select>
+-#errors
+-43: Stray “svg” start tag.
+-50: Stray end tag “svg”
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <option>
+-
+-#data
+-<!DOCTYPE html><body><table><svg></svg></table>
+-#errors
+-34: Start tag “svg” seen in “table”.
+-41: Stray end tag “svg”.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <table>
+-
+-#data
+-<!DOCTYPE html><body><table><svg><g>foo</g></svg></table>
+-#errors
+-34: Start tag “svg” seen in “table”.
+-46: Stray end tag “g”.
+-53: Stray end tag “svg”.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg g>
+-| "foo"
+-| <table>
+-
+-#data
+-<!DOCTYPE html><body><table><svg><g>foo</g><g>bar</g></svg></table>
+-#errors
+-34: Start tag “svg” seen in “table”.
+-46: Stray end tag “g”.
+-58: Stray end tag “g”.
+-65: Stray end tag “svg”.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg g>
+-| "foo"
+-| <svg g>
+-| "bar"
+-| <table>
+-
+-#data
+-<!DOCTYPE html><body><table><tbody><svg><g>foo</g><g>bar</g></svg></tbody></table>
+-#errors
+-41: Start tag “svg” seen in “table”.
+-53: Stray end tag “g”.
+-65: Stray end tag “g”.
+-72: Stray end tag “svg”.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg g>
+-| "foo"
+-| <svg g>
+-| "bar"
+-| <table>
+-| <tbody>
+-
+-#data
+-<!DOCTYPE html><body><table><tbody><tr><svg><g>foo</g><g>bar</g></svg></tr></tbody></table>
+-#errors
+-45: Start tag “svg” seen in “table”.
+-57: Stray end tag “g”.
+-69: Stray end tag “g”.
+-76: Stray end tag “svg”.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg g>
+-| "foo"
+-| <svg g>
+-| "bar"
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<!DOCTYPE html><body><table><tbody><tr><td><svg><g>foo</g><g>bar</g></svg></td></tr></tbody></table>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <svg svg>
+-| <svg g>
+-| "foo"
+-| <svg g>
+-| "bar"
+-
+-#data
+-<!DOCTYPE html><body><table><tbody><tr><td><svg><g>foo</g><g>bar</g></svg><p>baz</td></tr></tbody></table>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <svg svg>
+-| <svg g>
+-| "foo"
+-| <svg g>
+-| "bar"
+-| <p>
+-| "baz"
+-
+-#data
+-<!DOCTYPE html><body><table><caption><svg><g>foo</g><g>bar</g></svg><p>baz</caption></table>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <svg svg>
+-| <svg g>
+-| "foo"
+-| <svg g>
+-| "bar"
+-| <p>
+-| "baz"
+-
+-#data
+-<!DOCTYPE html><body><table><caption><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
+-#errors
+-70: HTML start tag “p” in a foreign namespace context.
+-81: “table” closed but “caption” was still open.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <svg svg>
+-| <svg g>
+-| "foo"
+-| <svg g>
+-| "bar"
+-| <p>
+-| "baz"
+-| <p>
+-| "quux"
+-
+-#data
+-<!DOCTYPE html><body><table><caption><svg><g>foo</g><g>bar</g>baz</table><p>quux
+-#errors
+-78: “table” closed but “caption” was still open.
+-78: Unclosed elements on stack.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <svg svg>
+-| <svg g>
+-| "foo"
+-| <svg g>
+-| "bar"
+-| "baz"
+-| <p>
+-| "quux"
+-
+-#data
+-<!DOCTYPE html><body><table><colgroup><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
+-#errors
+-44: Start tag “svg” seen in “table”.
+-56: Stray end tag “g”.
+-68: Stray end tag “g”.
+-71: HTML start tag “p” in a foreign namespace context.
+-71: Start tag “p” seen in “table”.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg g>
+-| "foo"
+-| <svg g>
+-| "bar"
+-| <p>
+-| "baz"
+-| <table>
+-| <colgroup>
+-| <p>
+-| "quux"
+-
+-#data
+-<!DOCTYPE html><body><table><tr><td><select><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
+-#errors
+-50: Stray “svg” start tag.
+-54: Stray “g” start tag.
+-62: Stray end tag “g”
+-66: Stray “g” start tag.
+-74: Stray end tag “g”
+-77: Stray “p” start tag.
+-88: “table” end tag with “select” open.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <select>
+-| "foobarbaz"
+-| <p>
+-| "quux"
+-
+-#data
+-<!DOCTYPE html><body><table><select><svg><g>foo</g><g>bar</g><p>baz</table><p>quux
+-#errors
+-36: Start tag “select” seen in “table”.
+-42: Stray “svg” start tag.
+-46: Stray “g” start tag.
+-54: Stray end tag “g”
+-58: Stray “g” start tag.
+-66: Stray end tag “g”
+-69: Stray “p” start tag.
+-80: “table” end tag with “select” open.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| "foobarbaz"
+-| <table>
+-| <p>
+-| "quux"
+-
+-#data
+-<!DOCTYPE html><body></body></html><svg><g>foo</g><g>bar</g><p>baz
+-#errors
+-41: Stray “svg” start tag.
+-68: HTML start tag “p” in a foreign namespace context.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg g>
+-| "foo"
+-| <svg g>
+-| "bar"
+-| <p>
+-| "baz"
+-
+-#data
+-<!DOCTYPE html><body></body><svg><g>foo</g><g>bar</g><p>baz
+-#errors
+-34: Stray “svg” start tag.
+-61: HTML start tag “p” in a foreign namespace context.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg g>
+-| "foo"
+-| <svg g>
+-| "bar"
+-| <p>
+-| "baz"
+-
+-#data
+-<!DOCTYPE html><frameset><svg><g></g><g></g><p><span>
+-#errors
+-31: Stray “svg” start tag.
+-35: Stray “g” start tag.
+-40: Stray end tag “g”
+-44: Stray “g” start tag.
+-49: Stray end tag “g”
+-52: Stray “p” start tag.
+-58: Stray “span” start tag.
+-58: End of file seen and there were open elements.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<!DOCTYPE html><frameset></frameset><svg><g></g><g></g><p><span>
+-#errors
+-42: Stray “svg” start tag.
+-46: Stray “g” start tag.
+-51: Stray end tag “g”
+-55: Stray “g” start tag.
+-60: Stray end tag “g”
+-63: Stray “p” start tag.
+-69: Stray “span” start tag.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<!DOCTYPE html><body xlink:href=foo><svg xlink:href=foo></svg>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| xlink:href="foo"
+-| <svg svg>
+-| xlink href="foo"
+-
+-#data
+-<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo></g></svg>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| xlink:href="foo"
+-| xml:lang="en"
+-| <svg svg>
+-| <svg g>
+-| xlink href="foo"
+-| xml lang="en"
+-
+-#data
+-<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo /></svg>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| xlink:href="foo"
+-| xml:lang="en"
+-| <svg svg>
+-| <svg g>
+-| xlink href="foo"
+-| xml lang="en"
+-
+-#data
+-<!DOCTYPE html><body xlink:href=foo xml:lang=en><svg><g xml:lang=en xlink:href=foo />bar</svg>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| xlink:href="foo"
+-| xml:lang="en"
+-| <svg svg>
+-| <svg g>
+-| xlink href="foo"
+-| xml lang="en"
+-| "bar"
+-
+-#data
+-<svg></path>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-
+-#data
+-<div><svg></div>a
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <svg svg>
+-| "a"
+-
+-#data
+-<div><svg><path></div>a
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <svg svg>
+-| <svg path>
+-| "a"
+-
+-#data
+-<div><svg><path></svg><path>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <svg svg>
+-| <svg path>
+-| <path>
+-
+-#data
+-<div><svg><path><foreignObject><math></div>a
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <svg svg>
+-| <svg path>
+-| <svg foreignObject>
+-| <math math>
+-| "a"
+-
+-#data
+-<div><svg><path><foreignObject><p></div>a
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <svg svg>
+-| <svg path>
+-| <svg foreignObject>
+-| <p>
+-| "a"
+-
+-#data
+-<!DOCTYPE html><svg><desc><div><svg><ul>a
+-#errors
+-40: HTML start tag “ul” in a foreign namespace context.
+-41: End of file in a foreign namespace context.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg desc>
+-| <div>
+-| <svg svg>
+-| <ul>
+-| "a"
+-
+-#data
+-<!DOCTYPE html><svg><desc><svg><ul>a
+-#errors
+-35: HTML start tag “ul” in a foreign namespace context.
+-36: End of file in a foreign namespace context.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg desc>
+-| <svg svg>
+-| <ul>
+-| "a"
+-
+-#data
+-<!DOCTYPE html><p><svg><desc><p>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <svg svg>
+-| <svg desc>
+-| <p>
+-
+-#data
+-<!DOCTYPE html><p><svg><title><p>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <svg svg>
+-| <svg title>
+-| <p>
+-
+-#data
+-<div><svg><path><foreignObject><p></foreignObject><p>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <svg svg>
+-| <svg path>
+-| <svg foreignObject>
+-| <p>
+-| <p>
+-
+-#data
+-<math><mi><div><object><div><span></span></div></object></div></mi><mi>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mi>
+-| <div>
+-| <object>
+-| <div>
+-| <span>
+-| <math mi>
+-
+-#data
+-<math><mi><svg><foreignObject><div><div></div></div></foreignObject></svg></mi><mi>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mi>
+-| <svg svg>
+-| <svg foreignObject>
+-| <div>
+-| <div>
+-| <math mi>
+-
+-#data
+-<svg><script></script><path>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg script>
+-| <svg path>
+-
+-#data
+-<table><svg></svg><tr>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<math><mi><mglyph>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mi>
+-| <math mglyph>
+-
+-#data
+-<math><mi><malignmark>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mi>
+-| <math malignmark>
+-
+-#data
+-<math><mo><mglyph>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mo>
+-| <math mglyph>
+-
+-#data
+-<math><mo><malignmark>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mo>
+-| <math malignmark>
+-
+-#data
+-<math><mn><mglyph>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mn>
+-| <math mglyph>
+-
+-#data
+-<math><mn><malignmark>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mn>
+-| <math malignmark>
+-
+-#data
+-<math><ms><mglyph>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math ms>
+-| <math mglyph>
+-
+-#data
+-<math><ms><malignmark>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math ms>
+-| <math malignmark>
+-
+-#data
+-<math><mtext><mglyph>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mtext>
+-| <math mglyph>
+-
+-#data
+-<math><mtext><malignmark>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mtext>
+-| <math malignmark>
+-
+-#data
+-<math><annotation-xml><svg></svg></annotation-xml><mi>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math annotation-xml>
+-| <svg svg>
+-| <math mi>
+-
+-#data
+-<math><annotation-xml><svg><foreignObject><div><math><mi></mi></math><span></span></div></foreignObject><path></path></svg></annotation-xml><mi>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math annotation-xml>
+-| <svg svg>
+-| <svg foreignObject>
+-| <div>
+-| <math math>
+-| <math mi>
+-| <span>
+-| <svg path>
+-| <math mi>
+-
+-#data
+-<math><annotation-xml><svg><foreignObject><math><mi><svg></svg></mi><mo></mo></math><span></span></foreignObject><path></path></svg></annotation-xml><mi>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math annotation-xml>
+-| <svg svg>
+-| <svg foreignObject>
+-| <math math>
+-| <math mi>
+-| <svg svg>
+-| <math mo>
+-| <span>
+-| <svg path>
+-| <math mi>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests11.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests11.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests11.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests11.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,482 +0,0 @@
+-#data
+-<!DOCTYPE html><body><svg attributeName='' attributeType='' baseFrequency='' baseProfile='' calcMode='' clipPathUnits='' contentScriptType='' contentStyleType='' diffuseConstant='' edgeMode='' externalResourcesRequired='' filterRes='' filterUnits='' glyphRef='' gradientTransform='' gradientUnits='' kernelMatrix='' kernelUnitLength='' keyPoints='' keySplines='' keyTimes='' lengthAdjust='' limitingConeAngle='' markerHeight='' markerUnits='' markerWidth='' maskContentUnits='' maskUnits='' numOctaves='' pathLength='' patternContentUnits='' patternTransform='' patternUnits='' pointsAtX='' pointsAtY='' pointsAtZ='' preserveAlpha='' preserveAspectRatio='' primitiveUnits='' refX='' refY='' repeatCount='' repeatDur='' requiredExtensions='' requiredFeatures='' specularConstant='' specularExponent='' spreadMethod='' startOffset='' stdDeviation='' stitchTiles='' surfaceScale='' systemLanguage='' tableValues='' targetX='' targetY='' textLength='' viewBox='' viewTarget='' xChannelSelecto
r='' yChannelSelector='' zoomAndPan=''></svg>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| attributeName=""
+-| attributeType=""
+-| baseFrequency=""
+-| baseProfile=""
+-| calcMode=""
+-| clipPathUnits=""
+-| contentScriptType=""
+-| contentStyleType=""
+-| diffuseConstant=""
+-| edgeMode=""
+-| externalResourcesRequired=""
+-| filterRes=""
+-| filterUnits=""
+-| glyphRef=""
+-| gradientTransform=""
+-| gradientUnits=""
+-| kernelMatrix=""
+-| kernelUnitLength=""
+-| keyPoints=""
+-| keySplines=""
+-| keyTimes=""
+-| lengthAdjust=""
+-| limitingConeAngle=""
+-| markerHeight=""
+-| markerUnits=""
+-| markerWidth=""
+-| maskContentUnits=""
+-| maskUnits=""
+-| numOctaves=""
+-| pathLength=""
+-| patternContentUnits=""
+-| patternTransform=""
+-| patternUnits=""
+-| pointsAtX=""
+-| pointsAtY=""
+-| pointsAtZ=""
+-| preserveAlpha=""
+-| preserveAspectRatio=""
+-| primitiveUnits=""
+-| refX=""
+-| refY=""
+-| repeatCount=""
+-| repeatDur=""
+-| requiredExtensions=""
+-| requiredFeatures=""
+-| specularConstant=""
+-| specularExponent=""
+-| spreadMethod=""
+-| startOffset=""
+-| stdDeviation=""
+-| stitchTiles=""
+-| surfaceScale=""
+-| systemLanguage=""
+-| tableValues=""
+-| targetX=""
+-| targetY=""
+-| textLength=""
+-| viewBox=""
+-| viewTarget=""
+-| xChannelSelector=""
+-| yChannelSelector=""
+-| zoomAndPan=""
+-
+-#data
+-<!DOCTYPE html><BODY><SVG ATTRIBUTENAME='' ATTRIBUTETYPE='' BASEFREQUENCY='' BASEPROFILE='' CALCMODE='' CLIPPATHUNITS='' CONTENTSCRIPTTYPE='' CONTENTSTYLETYPE='' DIFFUSECONSTANT='' EDGEMODE='' EXTERNALRESOURCESREQUIRED='' FILTERRES='' FILTERUNITS='' GLYPHREF='' GRADIENTTRANSFORM='' GRADIENTUNITS='' KERNELMATRIX='' KERNELUNITLENGTH='' KEYPOINTS='' KEYSPLINES='' KEYTIMES='' LENGTHADJUST='' LIMITINGCONEANGLE='' MARKERHEIGHT='' MARKERUNITS='' MARKERWIDTH='' MASKCONTENTUNITS='' MASKUNITS='' NUMOCTAVES='' PATHLENGTH='' PATTERNCONTENTUNITS='' PATTERNTRANSFORM='' PATTERNUNITS='' POINTSATX='' POINTSATY='' POINTSATZ='' PRESERVEALPHA='' PRESERVEASPECTRATIO='' PRIMITIVEUNITS='' REFX='' REFY='' REPEATCOUNT='' REPEATDUR='' REQUIREDEXTENSIONS='' REQUIREDFEATURES='' SPECULARCONSTANT='' SPECULAREXPONENT='' SPREADMETHOD='' STARTOFFSET='' STDDEVIATION='' STITCHTILES='' SURFACESCALE='' SYSTEMLANGUAGE='' TABLEVALUES='' TARGETX='' TARGETY='' TEXTLENGTH='' VIEWBOX='' VIEWTARGET='' XCHANNELSELECTO
R='' YCHANNELSELECTOR='' ZOOMANDPAN=''></SVG>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| attributeName=""
+-| attributeType=""
+-| baseFrequency=""
+-| baseProfile=""
+-| calcMode=""
+-| clipPathUnits=""
+-| contentScriptType=""
+-| contentStyleType=""
+-| diffuseConstant=""
+-| edgeMode=""
+-| externalResourcesRequired=""
+-| filterRes=""
+-| filterUnits=""
+-| glyphRef=""
+-| gradientTransform=""
+-| gradientUnits=""
+-| kernelMatrix=""
+-| kernelUnitLength=""
+-| keyPoints=""
+-| keySplines=""
+-| keyTimes=""
+-| lengthAdjust=""
+-| limitingConeAngle=""
+-| markerHeight=""
+-| markerUnits=""
+-| markerWidth=""
+-| maskContentUnits=""
+-| maskUnits=""
+-| numOctaves=""
+-| pathLength=""
+-| patternContentUnits=""
+-| patternTransform=""
+-| patternUnits=""
+-| pointsAtX=""
+-| pointsAtY=""
+-| pointsAtZ=""
+-| preserveAlpha=""
+-| preserveAspectRatio=""
+-| primitiveUnits=""
+-| refX=""
+-| refY=""
+-| repeatCount=""
+-| repeatDur=""
+-| requiredExtensions=""
+-| requiredFeatures=""
+-| specularConstant=""
+-| specularExponent=""
+-| spreadMethod=""
+-| startOffset=""
+-| stdDeviation=""
+-| stitchTiles=""
+-| surfaceScale=""
+-| systemLanguage=""
+-| tableValues=""
+-| targetX=""
+-| targetY=""
+-| textLength=""
+-| viewBox=""
+-| viewTarget=""
+-| xChannelSelector=""
+-| yChannelSelector=""
+-| zoomAndPan=""
+-
+-#data
+-<!DOCTYPE html><body><svg attributename='' attributetype='' basefrequency='' baseprofile='' calcmode='' clippathunits='' contentscripttype='' contentstyletype='' diffuseconstant='' edgemode='' externalresourcesrequired='' filterres='' filterunits='' glyphref='' gradienttransform='' gradientunits='' kernelmatrix='' kernelunitlength='' keypoints='' keysplines='' keytimes='' lengthadjust='' limitingconeangle='' markerheight='' markerunits='' markerwidth='' maskcontentunits='' maskunits='' numoctaves='' pathlength='' patterncontentunits='' patterntransform='' patternunits='' pointsatx='' pointsaty='' pointsatz='' preservealpha='' preserveaspectratio='' primitiveunits='' refx='' refy='' repeatcount='' repeatdur='' requiredextensions='' requiredfeatures='' specularconstant='' specularexponent='' spreadmethod='' startoffset='' stddeviation='' stitchtiles='' surfacescale='' systemlanguage='' tablevalues='' targetx='' targety='' textlength='' viewbox='' viewtarget='' xchannelselecto
r='' ychannelselector='' zoomandpan=''></svg>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| attributeName=""
+-| attributeType=""
+-| baseFrequency=""
+-| baseProfile=""
+-| calcMode=""
+-| clipPathUnits=""
+-| contentScriptType=""
+-| contentStyleType=""
+-| diffuseConstant=""
+-| edgeMode=""
+-| externalResourcesRequired=""
+-| filterRes=""
+-| filterUnits=""
+-| glyphRef=""
+-| gradientTransform=""
+-| gradientUnits=""
+-| kernelMatrix=""
+-| kernelUnitLength=""
+-| keyPoints=""
+-| keySplines=""
+-| keyTimes=""
+-| lengthAdjust=""
+-| limitingConeAngle=""
+-| markerHeight=""
+-| markerUnits=""
+-| markerWidth=""
+-| maskContentUnits=""
+-| maskUnits=""
+-| numOctaves=""
+-| pathLength=""
+-| patternContentUnits=""
+-| patternTransform=""
+-| patternUnits=""
+-| pointsAtX=""
+-| pointsAtY=""
+-| pointsAtZ=""
+-| preserveAlpha=""
+-| preserveAspectRatio=""
+-| primitiveUnits=""
+-| refX=""
+-| refY=""
+-| repeatCount=""
+-| repeatDur=""
+-| requiredExtensions=""
+-| requiredFeatures=""
+-| specularConstant=""
+-| specularExponent=""
+-| spreadMethod=""
+-| startOffset=""
+-| stdDeviation=""
+-| stitchTiles=""
+-| surfaceScale=""
+-| systemLanguage=""
+-| tableValues=""
+-| targetX=""
+-| targetY=""
+-| textLength=""
+-| viewBox=""
+-| viewTarget=""
+-| xChannelSelector=""
+-| yChannelSelector=""
+-| zoomAndPan=""
+-
+-#data
+-<!DOCTYPE html><body><math attributeName='' attributeType='' baseFrequency='' baseProfile='' calcMode='' clipPathUnits='' contentScriptType='' contentStyleType='' diffuseConstant='' edgeMode='' externalResourcesRequired='' filterRes='' filterUnits='' glyphRef='' gradientTransform='' gradientUnits='' kernelMatrix='' kernelUnitLength='' keyPoints='' keySplines='' keyTimes='' lengthAdjust='' limitingConeAngle='' markerHeight='' markerUnits='' markerWidth='' maskContentUnits='' maskUnits='' numOctaves='' pathLength='' patternContentUnits='' patternTransform='' patternUnits='' pointsAtX='' pointsAtY='' pointsAtZ='' preserveAlpha='' preserveAspectRatio='' primitiveUnits='' refX='' refY='' repeatCount='' repeatDur='' requiredExtensions='' requiredFeatures='' specularConstant='' specularExponent='' spreadMethod='' startOffset='' stdDeviation='' stitchTiles='' surfaceScale='' systemLanguage='' tableValues='' targetX='' targetY='' textLength='' viewBox='' viewTarget='' xChannelSelect
or='' yChannelSelector='' zoomAndPan=''></math>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| attributename=""
+-| attributetype=""
+-| basefrequency=""
+-| baseprofile=""
+-| calcmode=""
+-| clippathunits=""
+-| contentscripttype=""
+-| contentstyletype=""
+-| diffuseconstant=""
+-| edgemode=""
+-| externalresourcesrequired=""
+-| filterres=""
+-| filterunits=""
+-| glyphref=""
+-| gradienttransform=""
+-| gradientunits=""
+-| kernelmatrix=""
+-| kernelunitlength=""
+-| keypoints=""
+-| keysplines=""
+-| keytimes=""
+-| lengthadjust=""
+-| limitingconeangle=""
+-| markerheight=""
+-| markerunits=""
+-| markerwidth=""
+-| maskcontentunits=""
+-| maskunits=""
+-| numoctaves=""
+-| pathlength=""
+-| patterncontentunits=""
+-| patterntransform=""
+-| patternunits=""
+-| pointsatx=""
+-| pointsaty=""
+-| pointsatz=""
+-| preservealpha=""
+-| preserveaspectratio=""
+-| primitiveunits=""
+-| refx=""
+-| refy=""
+-| repeatcount=""
+-| repeatdur=""
+-| requiredextensions=""
+-| requiredfeatures=""
+-| specularconstant=""
+-| specularexponent=""
+-| spreadmethod=""
+-| startoffset=""
+-| stddeviation=""
+-| stitchtiles=""
+-| surfacescale=""
+-| systemlanguage=""
+-| tablevalues=""
+-| targetx=""
+-| targety=""
+-| textlength=""
+-| viewbox=""
+-| viewtarget=""
+-| xchannelselector=""
+-| ychannelselector=""
+-| zoomandpan=""
+-
+-#data
+-<!DOCTYPE html><body><svg><altGlyph /><altGlyphDef /><altGlyphItem /><animateColor /><animateMotion /><animateTransform /><clipPath /><feBlend /><feColorMatrix /><feComponentTransfer /><feComposite /><feConvolveMatrix /><feDiffuseLighting /><feDisplacementMap /><feDistantLight /><feFlood /><feFuncA /><feFuncB /><feFuncG /><feFuncR /><feGaussianBlur /><feImage /><feMerge /><feMergeNode /><feMorphology /><feOffset /><fePointLight /><feSpecularLighting /><feSpotLight /><feTile /><feTurbulence /><foreignObject /><glyphRef /><linearGradient /><radialGradient /><textPath /></svg>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg altGlyph>
+-| <svg altGlyphDef>
+-| <svg altGlyphItem>
+-| <svg animateColor>
+-| <svg animateMotion>
+-| <svg animateTransform>
+-| <svg clipPath>
+-| <svg feBlend>
+-| <svg feColorMatrix>
+-| <svg feComponentTransfer>
+-| <svg feComposite>
+-| <svg feConvolveMatrix>
+-| <svg feDiffuseLighting>
+-| <svg feDisplacementMap>
+-| <svg feDistantLight>
+-| <svg feFlood>
+-| <svg feFuncA>
+-| <svg feFuncB>
+-| <svg feFuncG>
+-| <svg feFuncR>
+-| <svg feGaussianBlur>
+-| <svg feImage>
+-| <svg feMerge>
+-| <svg feMergeNode>
+-| <svg feMorphology>
+-| <svg feOffset>
+-| <svg fePointLight>
+-| <svg feSpecularLighting>
+-| <svg feSpotLight>
+-| <svg feTile>
+-| <svg feTurbulence>
+-| <svg foreignObject>
+-| <svg glyphRef>
+-| <svg linearGradient>
+-| <svg radialGradient>
+-| <svg textPath>
+-
+-#data
+-<!DOCTYPE html><body><svg><altglyph /><altglyphdef /><altglyphitem /><animatecolor /><animatemotion /><animatetransform /><clippath /><feblend /><fecolormatrix /><fecomponenttransfer /><fecomposite /><feconvolvematrix /><fediffuselighting /><fedisplacementmap /><fedistantlight /><feflood /><fefunca /><fefuncb /><fefuncg /><fefuncr /><fegaussianblur /><feimage /><femerge /><femergenode /><femorphology /><feoffset /><fepointlight /><fespecularlighting /><fespotlight /><fetile /><feturbulence /><foreignobject /><glyphref /><lineargradient /><radialgradient /><textpath /></svg>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg altGlyph>
+-| <svg altGlyphDef>
+-| <svg altGlyphItem>
+-| <svg animateColor>
+-| <svg animateMotion>
+-| <svg animateTransform>
+-| <svg clipPath>
+-| <svg feBlend>
+-| <svg feColorMatrix>
+-| <svg feComponentTransfer>
+-| <svg feComposite>
+-| <svg feConvolveMatrix>
+-| <svg feDiffuseLighting>
+-| <svg feDisplacementMap>
+-| <svg feDistantLight>
+-| <svg feFlood>
+-| <svg feFuncA>
+-| <svg feFuncB>
+-| <svg feFuncG>
+-| <svg feFuncR>
+-| <svg feGaussianBlur>
+-| <svg feImage>
+-| <svg feMerge>
+-| <svg feMergeNode>
+-| <svg feMorphology>
+-| <svg feOffset>
+-| <svg fePointLight>
+-| <svg feSpecularLighting>
+-| <svg feSpotLight>
+-| <svg feTile>
+-| <svg feTurbulence>
+-| <svg foreignObject>
+-| <svg glyphRef>
+-| <svg linearGradient>
+-| <svg radialGradient>
+-| <svg textPath>
+-
+-#data
+-<!DOCTYPE html><BODY><SVG><ALTGLYPH /><ALTGLYPHDEF /><ALTGLYPHITEM /><ANIMATECOLOR /><ANIMATEMOTION /><ANIMATETRANSFORM /><CLIPPATH /><FEBLEND /><FECOLORMATRIX /><FECOMPONENTTRANSFER /><FECOMPOSITE /><FECONVOLVEMATRIX /><FEDIFFUSELIGHTING /><FEDISPLACEMENTMAP /><FEDISTANTLIGHT /><FEFLOOD /><FEFUNCA /><FEFUNCB /><FEFUNCG /><FEFUNCR /><FEGAUSSIANBLUR /><FEIMAGE /><FEMERGE /><FEMERGENODE /><FEMORPHOLOGY /><FEOFFSET /><FEPOINTLIGHT /><FESPECULARLIGHTING /><FESPOTLIGHT /><FETILE /><FETURBULENCE /><FOREIGNOBJECT /><GLYPHREF /><LINEARGRADIENT /><RADIALGRADIENT /><TEXTPATH /></SVG>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg altGlyph>
+-| <svg altGlyphDef>
+-| <svg altGlyphItem>
+-| <svg animateColor>
+-| <svg animateMotion>
+-| <svg animateTransform>
+-| <svg clipPath>
+-| <svg feBlend>
+-| <svg feColorMatrix>
+-| <svg feComponentTransfer>
+-| <svg feComposite>
+-| <svg feConvolveMatrix>
+-| <svg feDiffuseLighting>
+-| <svg feDisplacementMap>
+-| <svg feDistantLight>
+-| <svg feFlood>
+-| <svg feFuncA>
+-| <svg feFuncB>
+-| <svg feFuncG>
+-| <svg feFuncR>
+-| <svg feGaussianBlur>
+-| <svg feImage>
+-| <svg feMerge>
+-| <svg feMergeNode>
+-| <svg feMorphology>
+-| <svg feOffset>
+-| <svg fePointLight>
+-| <svg feSpecularLighting>
+-| <svg feSpotLight>
+-| <svg feTile>
+-| <svg feTurbulence>
+-| <svg foreignObject>
+-| <svg glyphRef>
+-| <svg linearGradient>
+-| <svg radialGradient>
+-| <svg textPath>
+-
+-#data
+-<!DOCTYPE html><body><math><altGlyph /><altGlyphDef /><altGlyphItem /><animateColor /><animateMotion /><animateTransform /><clipPath /><feBlend /><feColorMatrix /><feComponentTransfer /><feComposite /><feConvolveMatrix /><feDiffuseLighting /><feDisplacementMap /><feDistantLight /><feFlood /><feFuncA /><feFuncB /><feFuncG /><feFuncR /><feGaussianBlur /><feImage /><feMerge /><feMergeNode /><feMorphology /><feOffset /><fePointLight /><feSpecularLighting /><feSpotLight /><feTile /><feTurbulence /><foreignObject /><glyphRef /><linearGradient /><radialGradient /><textPath /></math>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math altglyph>
+-| <math altglyphdef>
+-| <math altglyphitem>
+-| <math animatecolor>
+-| <math animatemotion>
+-| <math animatetransform>
+-| <math clippath>
+-| <math feblend>
+-| <math fecolormatrix>
+-| <math fecomponenttransfer>
+-| <math fecomposite>
+-| <math feconvolvematrix>
+-| <math fediffuselighting>
+-| <math fedisplacementmap>
+-| <math fedistantlight>
+-| <math feflood>
+-| <math fefunca>
+-| <math fefuncb>
+-| <math fefuncg>
+-| <math fefuncr>
+-| <math fegaussianblur>
+-| <math feimage>
+-| <math femerge>
+-| <math femergenode>
+-| <math femorphology>
+-| <math feoffset>
+-| <math fepointlight>
+-| <math fespecularlighting>
+-| <math fespotlight>
+-| <math fetile>
+-| <math feturbulence>
+-| <math foreignobject>
+-| <math glyphref>
+-| <math lineargradient>
+-| <math radialgradient>
+-| <math textpath>
+-
+-#data
+-<!DOCTYPE html><body><svg><solidColor /></svg>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg solidcolor>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests12.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests12.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests12.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests12.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,62 +0,0 @@
+-#data
+-<!DOCTYPE html><body><p>foo<math><mtext><i>baz</i></mtext><annotation-xml><svg><desc><b>eggs</b></desc><g><foreignObject><P>spam<TABLE><tr><td><img></td></table></foreignObject></g><g>quux</g></svg></annotation-xml></math>bar
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| "foo"
+-| <math math>
+-| <math mtext>
+-| <i>
+-| "baz"
+-| <math annotation-xml>
+-| <svg svg>
+-| <svg desc>
+-| <b>
+-| "eggs"
+-| <svg g>
+-| <svg foreignObject>
+-| <p>
+-| "spam"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <img>
+-| <svg g>
+-| "quux"
+-| "bar"
+-
+-#data
+-<!DOCTYPE html><body>foo<math><mtext><i>baz</i></mtext><annotation-xml><svg><desc><b>eggs</b></desc><g><foreignObject><P>spam<TABLE><tr><td><img></td></table></foreignObject></g><g>quux</g></svg></annotation-xml></math>bar
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "foo"
+-| <math math>
+-| <math mtext>
+-| <i>
+-| "baz"
+-| <math annotation-xml>
+-| <svg svg>
+-| <svg desc>
+-| <b>
+-| "eggs"
+-| <svg g>
+-| <svg foreignObject>
+-| <p>
+-| "spam"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <img>
+-| <svg g>
+-| "quux"
+-| "bar"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests14.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests14.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests14.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests14.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,74 +0,0 @@
+-#data
+-<!DOCTYPE html><html><body><xyz:abc></xyz:abc>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <xyz:abc>
+-
+-#data
+-<!DOCTYPE html><html><body><xyz:abc></xyz:abc><span></span>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <xyz:abc>
+-| <span>
+-
+-#data
+-<!DOCTYPE html><html><html abc:def=gh><xyz:abc></xyz:abc>
+-#errors
+-15: Unexpected start tag html
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| abc:def="gh"
+-| <head>
+-| <body>
+-| <xyz:abc>
+-
+-#data
+-<!DOCTYPE html><html xml:lang=bar><html xml:lang=foo>
+-#errors
+-15: Unexpected start tag html
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| xml:lang="bar"
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html><html 123=456>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| 123="456"
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html><html 123=456><html 789=012>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| 123="456"
+-| 789="012"
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html><html><body 789=012>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| 789="012"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests15.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests15.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests15.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests15.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,208 +0,0 @@
+-#data
+-<!DOCTYPE html><p><b><i><u></p> <p>X
+-#errors
+-Line: 1 Col: 31 Unexpected end tag (p). Ignored.
+-Line: 1 Col: 36 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <b>
+-| <i>
+-| <u>
+-| <b>
+-| <i>
+-| <u>
+-| " "
+-| <p>
+-| "X"
+-
+-#data
+-<p><b><i><u></p>
+-<p>X
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (p). Expected DOCTYPE.
+-Line: 1 Col: 16 Unexpected end tag (p). Ignored.
+-Line: 2 Col: 4 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <b>
+-| <i>
+-| <u>
+-| <b>
+-| <i>
+-| <u>
+-| "
+-"
+-| <p>
+-| "X"
+-
+-#data
+-<!doctype html></html> <head>
+-#errors
+-Line: 1 Col: 22 Unexpected end tag (html) after the (implied) root element.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| " "
+-
+-#data
+-<!doctype html></body><meta>
+-#errors
+-Line: 1 Col: 22 Unexpected end tag (body) after the (implied) root element.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <meta>
+-
+-#data
+-<html></html><!-- foo -->
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE.
+-Line: 1 Col: 13 Unexpected end tag (html) after the (implied) root element.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <!-- foo -->
+-
+-#data
+-<!doctype html></body><title>X</title>
+-#errors
+-Line: 1 Col: 22 Unexpected end tag (body) after the (implied) root element.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <title>
+-| "X"
+-
+-#data
+-<!doctype html><table> X<meta></table>
+-#errors
+-Line: 1 Col: 24 Unexpected non-space characters in table context caused voodoo mode.
+-Line: 1 Col: 30 Unexpected start tag (meta) in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| " X"
+-| <meta>
+-| <table>
+-
+-#data
+-<!doctype html><table> x</table>
+-#errors
+-Line: 1 Col: 24 Unexpected non-space characters in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| " x"
+-| <table>
+-
+-#data
+-<!doctype html><table> x </table>
+-#errors
+-Line: 1 Col: 25 Unexpected non-space characters in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| " x "
+-| <table>
+-
+-#data
+-<!doctype html><table><tr> x</table>
+-#errors
+-Line: 1 Col: 28 Unexpected non-space characters in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| " x"
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<!doctype html><table>X<style> <tr>x </style> </table>
+-#errors
+-Line: 1 Col: 23 Unexpected non-space characters in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "X"
+-| <table>
+-| <style>
+-| " <tr>x "
+-| " "
+-
+-#data
+-<!doctype html><div><table><a>foo</a> <tr><td>bar</td> </tr></table></div>
+-#errors
+-Line: 1 Col: 30 Unexpected start tag (a) in table context caused voodoo mode.
+-Line: 1 Col: 37 Unexpected end tag (a) in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <a>
+-| "foo"
+-| <table>
+-| " "
+-| <tbody>
+-| <tr>
+-| <td>
+-| "bar"
+-| " "
+-
+-#data
+-<frame></frame></frame><frameset><frame><frameset><frame></frameset><noframes></frameset><noframes>
+-#errors
+-6: Start tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”.
+-13: Stray start tag “frame”.
+-21: Stray end tag “frame”.
+-29: Stray end tag “frame”.
+-39: “frameset” start tag after “body” already open.
+-105: End of file seen inside an [R]CDATA element.
+-105: End of file seen and there were open elements.
+-XXX: These errors are wrong, please fix me!
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-| <frame>
+-| <frameset>
+-| <frame>
+-| <noframes>
+-| "</frameset><noframes>"
+-
+-#data
+-<!DOCTYPE html><object></html>
+-#errors
+-1: Expected closing tag. Unexpected end of file
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <object>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests16.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests16.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests16.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests16.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,2299 +0,0 @@
+-#data
+-<!doctype html><script>
+-#errors
+-Line: 1 Col: 23 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| <body>
+-
+-#data
+-<!doctype html><script>a
+-#errors
+-Line: 1 Col: 24 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "a"
+-| <body>
+-
+-#data
+-<!doctype html><script><
+-#errors
+-Line: 1 Col: 24 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<"
+-| <body>
+-
+-#data
+-<!doctype html><script></
+-#errors
+-Line: 1 Col: 25 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "</"
+-| <body>
+-
+-#data
+-<!doctype html><script></S
+-#errors
+-Line: 1 Col: 26 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "</S"
+-| <body>
+-
+-#data
+-<!doctype html><script></SC
+-#errors
+-Line: 1 Col: 27 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "</SC"
+-| <body>
+-
+-#data
+-<!doctype html><script></SCR
+-#errors
+-Line: 1 Col: 28 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "</SCR"
+-| <body>
+-
+-#data
+-<!doctype html><script></SCRI
+-#errors
+-Line: 1 Col: 29 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "</SCRI"
+-| <body>
+-
+-#data
+-<!doctype html><script></SCRIP
+-#errors
+-Line: 1 Col: 30 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "</SCRIP"
+-| <body>
+-
+-#data
+-<!doctype html><script></SCRIPT
+-#errors
+-Line: 1 Col: 31 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "</SCRIPT"
+-| <body>
+-
+-#data
+-<!doctype html><script></SCRIPT
+-#errors
+-Line: 1 Col: 32 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| <body>
+-
+-#data
+-<!doctype html><script></s
+-#errors
+-Line: 1 Col: 26 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "</s"
+-| <body>
+-
+-#data
+-<!doctype html><script></sc
+-#errors
+-Line: 1 Col: 27 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "</sc"
+-| <body>
+-
+-#data
+-<!doctype html><script></scr
+-#errors
+-Line: 1 Col: 28 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "</scr"
+-| <body>
+-
+-#data
+-<!doctype html><script></scri
+-#errors
+-Line: 1 Col: 29 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "</scri"
+-| <body>
+-
+-#data
+-<!doctype html><script></scrip
+-#errors
+-Line: 1 Col: 30 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "</scrip"
+-| <body>
+-
+-#data
+-<!doctype html><script></script
+-#errors
+-Line: 1 Col: 31 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "</script"
+-| <body>
+-
+-#data
+-<!doctype html><script></script
+-#errors
+-Line: 1 Col: 32 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| <body>
+-
+-#data
+-<!doctype html><script><!
+-#errors
+-Line: 1 Col: 25 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!"
+-| <body>
+-
+-#data
+-<!doctype html><script><!a
+-#errors
+-Line: 1 Col: 26 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!a"
+-| <body>
+-
+-#data
+-<!doctype html><script><!-
+-#errors
+-Line: 1 Col: 26 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!-"
+-| <body>
+-
+-#data
+-<!doctype html><script><!-a
+-#errors
+-Line: 1 Col: 27 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!-a"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--
+-#errors
+-Line: 1 Col: 27 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--a
+-#errors
+-Line: 1 Col: 28 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--a"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<
+-#errors
+-Line: 1 Col: 28 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<a
+-#errors
+-Line: 1 Col: 29 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<a"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--</
+-#errors
+-Line: 1 Col: 27 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--</"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--</script
+-#errors
+-Line: 1 Col: 35 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--</script"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--</script
+-#errors
+-Line: 1 Col: 36 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<s
+-#errors
+-Line: 1 Col: 29 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<s"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script
+-#errors
+-Line: 1 Col: 34 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script
+-#errors
+-Line: 1 Col: 35 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script "
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script <
+-#errors
+-Line: 1 Col: 36 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script <"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script <a
+-#errors
+-Line: 1 Col: 37 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script <a"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </
+-#errors
+-Line: 1 Col: 37 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </s
+-#errors
+-Line: 1 Col: 38 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </s"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </script
+-#errors
+-Line: 1 Col: 43 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </scripta
+-#errors
+-Line: 1 Col: 44 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </scripta"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </script
+-#errors
+-Line: 1 Col: 44 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script "
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </script>
+-#errors
+-Line: 1 Col: 44 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script>"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </script/
+-#errors
+-Line: 1 Col: 44 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script/"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </script <
+-#errors
+-Line: 1 Col: 45 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script <"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </script <a
+-#errors
+-Line: 1 Col: 46 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script <a"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </script </
+-#errors
+-Line: 1 Col: 46 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script </"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </script </script
+-#errors
+-Line: 1 Col: 52 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script </script"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </script </script
+-#errors
+-Line: 1 Col: 53 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script "
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </script </script/
+-#errors
+-Line: 1 Col: 53 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script "
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script </script </script>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script "
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script -
+-#errors
+-Line: 1 Col: 36 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script -"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script -a
+-#errors
+-Line: 1 Col: 37 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script -a"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script -<
+-#errors
+-Line: 1 Col: 37 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script -<"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script --
+-#errors
+-Line: 1 Col: 37 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script --"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script --a
+-#errors
+-Line: 1 Col: 38 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script --a"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script --<
+-#errors
+-Line: 1 Col: 38 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script --<"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script -->
+-#errors
+-Line: 1 Col: 38 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script -->"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script --><
+-#errors
+-Line: 1 Col: 39 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script --><"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script --></
+-#errors
+-Line: 1 Col: 40 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script --></"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script --></script
+-#errors
+-Line: 1 Col: 46 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script --></script"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script --></script
+-#errors
+-Line: 1 Col: 47 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script -->"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script --></script/
+-#errors
+-Line: 1 Col: 47 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script -->"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script --></script>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script -->"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script><\/script>--></script>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script><\/script>-->"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script></scr'+'ipt>--></script>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></scr'+'ipt>-->"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script></script><script></script></script>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></script><script></script>"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script></script><script></script>--><!--</script>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></script><script></script>--><!--"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script></script><script></script>-- ></script>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></script><script></script>-- >"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script></script><script></script>- -></script>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></script><script></script>- ->"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script></script><script></script>- - ></script>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></script><script></script>- - >"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script></script><script></script>-></script>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></script><script></script>->"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<script>--!></script>X
+-#errors
+-Line: 1 Col: 49 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script>--!></script>X"
+-| <body>
+-
+-#data
+-<!doctype html><script><!--<scr'+'ipt></script>--></script>
+-#errors
+-Line: 1 Col: 59 Unexpected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<scr'+'ipt>"
+-| <body>
+-| "-->"
+-
+-#data
+-<!doctype html><script><!--<script></scr'+'ipt></script>X
+-#errors
+-Line: 1 Col: 57 Unexpected end of file. Expected end tag (script).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></scr'+'ipt></script>X"
+-| <body>
+-
+-#data
+-<!doctype html><style><!--<style></style>--></style>
+-#errors
+-Line: 1 Col: 52 Unexpected end tag (style).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <style>
+-| "<!--<style>"
+-| <body>
+-| "-->"
+-
+-#data
+-<!doctype html><style><!--</style>X
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <style>
+-| "<!--"
+-| <body>
+-| "X"
+-
+-#data
+-<!doctype html><style><!--...</style>...--></style>
+-#errors
+-Line: 1 Col: 51 Unexpected end tag (style).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <style>
+-| "<!--..."
+-| <body>
+-| "...-->"
+-
+-#data
+-<!doctype html><style><!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style></style>X
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <style>
+-| "<!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style>"
+-| <body>
+-| "X"
+-
+-#data
+-<!doctype html><style><!--...<style><!--...--!></style>--></style>
+-#errors
+-Line: 1 Col: 66 Unexpected end tag (style).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <style>
+-| "<!--...<style><!--...--!>"
+-| <body>
+-| "-->"
+-
+-#data
+-<!doctype html><style><!--...</style><!-- --><style>@import ...</style>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <style>
+-| "<!--..."
+-| <!-- -->
+-| <style>
+-| "@import ..."
+-| <body>
+-
+-#data
+-<!doctype html><style>...<style><!--...</style><!-- --></style>
+-#errors
+-Line: 1 Col: 63 Unexpected end tag (style).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <style>
+-| "...<style><!--..."
+-| <!-- -->
+-| <body>
+-
+-#data
+-<!doctype html><style>...<!--[if IE]><style>...</style>X
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <style>
+-| "...<!--[if IE]><style>..."
+-| <body>
+-| "X"
+-
+-#data
+-<!doctype html><title><!--<title></title>--></title>
+-#errors
+-Line: 1 Col: 52 Unexpected end tag (title).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <title>
+-| "<!--<title>"
+-| <body>
+-| "-->"
+-
+-#data
+-<!doctype html><title></title></title>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <title>
+-| "</title>"
+-| <body>
+-
+-#data
+-<!doctype html><title>foo/title><link></head><body>X
+-#errors
+-Line: 1 Col: 52 Unexpected end of file. Expected end tag (title).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <title>
+-| "foo/title><link></head><body>X"
+-| <body>
+-
+-#data
+-<!doctype html><noscript><!--<noscript></noscript>--></noscript>
+-#errors
+-Line: 1 Col: 64 Unexpected end tag (noscript).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <noscript>
+-| "<!--<noscript>"
+-| <body>
+-| "-->"
+-
+-#data
+-<!doctype html><noscript><!--</noscript>X<noscript>--></noscript>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <noscript>
+-| "<!--"
+-| <body>
+-| "X"
+-| <noscript>
+-| "-->"
+-
+-#data
+-<!doctype html><noscript><iframe></noscript>X
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <noscript>
+-| "<iframe>"
+-| <body>
+-| "X"
+-
+-#data
+-<!doctype html><noframes><!--<noframes></noframes>--></noframes>
+-#errors
+-Line: 1 Col: 64 Unexpected end tag (noframes).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <noframes>
+-| "<!--<noframes>"
+-| <body>
+-| "-->"
+-
+-#data
+-<!doctype html><noframes><body><script><!--...</script></body></noframes></html>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <noframes>
+-| "<body><script><!--...</script></body>"
+-| <body>
+-
+-#data
+-<!doctype html><textarea><!--<textarea></textarea>--></textarea>
+-#errors
+-Line: 1 Col: 64 Unexpected end tag (textarea).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| "<!--<textarea>"
+-| "-->"
+-
+-#data
+-<!doctype html><textarea></textarea></textarea>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| "</textarea>"
+-
+-#data
+-<!doctype html><textarea><</textarea>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| "<"
+-
+-#data
+-<!doctype html><textarea>a<b</textarea>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| "a<b"
+-
+-#data
+-<!doctype html><iframe><!--<iframe></iframe>--></iframe>
+-#errors
+-Line: 1 Col: 56 Unexpected end tag (iframe).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <iframe>
+-| "<!--<iframe>"
+-| "-->"
+-
+-#data
+-<!doctype html><iframe>...<!--X->...<!--/X->...</iframe>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <iframe>
+-| "...<!--X->...<!--/X->..."
+-
+-#data
+-<!doctype html><xmp><!--<xmp></xmp>--></xmp>
+-#errors
+-Line: 1 Col: 44 Unexpected end tag (xmp).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <xmp>
+-| "<!--<xmp>"
+-| "-->"
+-
+-#data
+-<!doctype html><noembed><!--<noembed></noembed>--></noembed>
+-#errors
+-Line: 1 Col: 60 Unexpected end tag (noembed).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <noembed>
+-| "<!--<noembed>"
+-| "-->"
+-
+-#data
+-<script>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 8 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| <body>
+-
+-#data
+-<script>a
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 9 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "a"
+-| <body>
+-
+-#data
+-<script><
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 9 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<"
+-| <body>
+-
+-#data
+-<script></
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 10 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</"
+-| <body>
+-
+-#data
+-<script></S
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 11 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</S"
+-| <body>
+-
+-#data
+-<script></SC
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 12 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</SC"
+-| <body>
+-
+-#data
+-<script></SCR
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 13 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</SCR"
+-| <body>
+-
+-#data
+-<script></SCRI
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 14 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</SCRI"
+-| <body>
+-
+-#data
+-<script></SCRIP
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 15 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</SCRIP"
+-| <body>
+-
+-#data
+-<script></SCRIPT
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 16 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</SCRIPT"
+-| <body>
+-
+-#data
+-<script></SCRIPT
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 17 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| <body>
+-
+-#data
+-<script></s
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 11 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</s"
+-| <body>
+-
+-#data
+-<script></sc
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 12 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</sc"
+-| <body>
+-
+-#data
+-<script></scr
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 13 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</scr"
+-| <body>
+-
+-#data
+-<script></scri
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 14 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</scri"
+-| <body>
+-
+-#data
+-<script></scrip
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 15 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</scrip"
+-| <body>
+-
+-#data
+-<script></script
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 16 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</script"
+-| <body>
+-
+-#data
+-<script></script
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 17 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| <body>
+-
+-#data
+-<script><!
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 10 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!"
+-| <body>
+-
+-#data
+-<script><!a
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 11 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!a"
+-| <body>
+-
+-#data
+-<script><!-
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 11 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!-"
+-| <body>
+-
+-#data
+-<script><!-a
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 12 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!-a"
+-| <body>
+-
+-#data
+-<script><!--
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 12 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--"
+-| <body>
+-
+-#data
+-<script><!--a
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 13 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--a"
+-| <body>
+-
+-#data
+-<script><!--<
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 13 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<"
+-| <body>
+-
+-#data
+-<script><!--<a
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 14 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<a"
+-| <body>
+-
+-#data
+-<script><!--</
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 14 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--</"
+-| <body>
+-
+-#data
+-<script><!--</script
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 20 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--</script"
+-| <body>
+-
+-#data
+-<script><!--</script
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 21 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--"
+-| <body>
+-
+-#data
+-<script><!--<s
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 14 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<s"
+-| <body>
+-
+-#data
+-<script><!--<script
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 19 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script"
+-| <body>
+-
+-#data
+-<script><!--<script
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 20 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script "
+-| <body>
+-
+-#data
+-<script><!--<script <
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 21 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script <"
+-| <body>
+-
+-#data
+-<script><!--<script <a
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 22 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script <a"
+-| <body>
+-
+-#data
+-<script><!--<script </
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 22 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </"
+-| <body>
+-
+-#data
+-<script><!--<script </s
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 23 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </s"
+-| <body>
+-
+-#data
+-<script><!--<script </script
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 28 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script"
+-| <body>
+-
+-#data
+-<script><!--<script </scripta
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 29 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </scripta"
+-| <body>
+-
+-#data
+-<script><!--<script </script
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 29 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script "
+-| <body>
+-
+-#data
+-<script><!--<script </script>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 29 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script>"
+-| <body>
+-
+-#data
+-<script><!--<script </script/
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 29 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script/"
+-| <body>
+-
+-#data
+-<script><!--<script </script <
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 30 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script <"
+-| <body>
+-
+-#data
+-<script><!--<script </script <a
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 31 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script <a"
+-| <body>
+-
+-#data
+-<script><!--<script </script </
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 31 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script </"
+-| <body>
+-
+-#data
+-<script><!--<script </script </script
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 38 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script </script"
+-| <body>
+-
+-#data
+-<script><!--<script </script </script
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 38 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script "
+-| <body>
+-
+-#data
+-<script><!--<script </script </script/
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 38 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script "
+-| <body>
+-
+-#data
+-<script><!--<script </script </script>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script </script "
+-| <body>
+-
+-#data
+-<script><!--<script -
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 21 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script -"
+-| <body>
+-
+-#data
+-<script><!--<script -a
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 22 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script -a"
+-| <body>
+-
+-#data
+-<script><!--<script --
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 22 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script --"
+-| <body>
+-
+-#data
+-<script><!--<script --a
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 23 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script --a"
+-| <body>
+-
+-#data
+-<script><!--<script -->
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 23 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script -->"
+-| <body>
+-
+-#data
+-<script><!--<script --><
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 24 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script --><"
+-| <body>
+-
+-#data
+-<script><!--<script --></
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 25 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script --></"
+-| <body>
+-
+-#data
+-<script><!--<script --></script
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 31 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script --></script"
+-| <body>
+-
+-#data
+-<script><!--<script --></script
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 32 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script -->"
+-| <body>
+-
+-#data
+-<script><!--<script --></script/
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 32 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script -->"
+-| <body>
+-
+-#data
+-<script><!--<script --></script>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script -->"
+-| <body>
+-
+-#data
+-<script><!--<script><\/script>--></script>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script><\/script>-->"
+-| <body>
+-
+-#data
+-<script><!--<script></scr'+'ipt>--></script>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></scr'+'ipt>-->"
+-| <body>
+-
+-#data
+-<script><!--<script></script><script></script></script>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></script><script></script>"
+-| <body>
+-
+-#data
+-<script><!--<script></script><script></script>--><!--</script>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></script><script></script>--><!--"
+-| <body>
+-
+-#data
+-<script><!--<script></script><script></script>-- ></script>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></script><script></script>-- >"
+-| <body>
+-
+-#data
+-<script><!--<script></script><script></script>- -></script>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></script><script></script>- ->"
+-| <body>
+-
+-#data
+-<script><!--<script></script><script></script>- - ></script>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></script><script></script>- - >"
+-| <body>
+-
+-#data
+-<script><!--<script></script><script></script>-></script>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></script><script></script>->"
+-| <body>
+-
+-#data
+-<script><!--<script>--!></script>X
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 34 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script>--!></script>X"
+-| <body>
+-
+-#data
+-<script><!--<scr'+'ipt></script>--></script>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 44 Unexpected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<scr'+'ipt>"
+-| <body>
+-| "-->"
+-
+-#data
+-<script><!--<script></scr'+'ipt></script>X
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 42 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<!--<script></scr'+'ipt></script>X"
+-| <body>
+-
+-#data
+-<style><!--<style></style>--></style>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-Line: 1 Col: 37 Unexpected end tag (style).
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| "<!--<style>"
+-| <body>
+-| "-->"
+-
+-#data
+-<style><!--</style>X
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| "<!--"
+-| <body>
+-| "X"
+-
+-#data
+-<style><!--...</style>...--></style>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-Line: 1 Col: 36 Unexpected end tag (style).
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| "<!--..."
+-| <body>
+-| "...-->"
+-
+-#data
+-<style><!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style></style>X
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| "<!--<br><html xmlns:v="urn:schemas-microsoft-com:vml"><!--[if !mso]><style>"
+-| <body>
+-| "X"
+-
+-#data
+-<style><!--...<style><!--...--!></style>--></style>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-Line: 1 Col: 51 Unexpected end tag (style).
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| "<!--...<style><!--...--!>"
+-| <body>
+-| "-->"
+-
+-#data
+-<style><!--...</style><!-- --><style>@import ...</style>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| "<!--..."
+-| <!-- -->
+-| <style>
+-| "@import ..."
+-| <body>
+-
+-#data
+-<style>...<style><!--...</style><!-- --></style>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-Line: 1 Col: 48 Unexpected end tag (style).
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| "...<style><!--..."
+-| <!-- -->
+-| <body>
+-
+-#data
+-<style>...<!--[if IE]><style>...</style>X
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| "...<!--[if IE]><style>..."
+-| <body>
+-| "X"
+-
+-#data
+-<title><!--<title></title>--></title>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
+-Line: 1 Col: 37 Unexpected end tag (title).
+-#document
+-| <html>
+-| <head>
+-| <title>
+-| "<!--<title>"
+-| <body>
+-| "-->"
+-
+-#data
+-<title></title></title>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <title>
+-| "</title>"
+-| <body>
+-
+-#data
+-<title>foo/title><link></head><body>X
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
+-Line: 1 Col: 37 Unexpected end of file. Expected end tag (title).
+-#document
+-| <html>
+-| <head>
+-| <title>
+-| "foo/title><link></head><body>X"
+-| <body>
+-
+-#data
+-<noscript><!--<noscript></noscript>--></noscript>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (noscript). Expected DOCTYPE.
+-Line: 1 Col: 49 Unexpected end tag (noscript).
+-#document
+-| <html>
+-| <head>
+-| <noscript>
+-| "<!--<noscript>"
+-| <body>
+-| "-->"
+-
+-#data
+-<noscript><!--</noscript>X<noscript>--></noscript>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (noscript). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <noscript>
+-| "<!--"
+-| <body>
+-| "X"
+-| <noscript>
+-| "-->"
+-
+-#data
+-<noscript><iframe></noscript>X
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (noscript). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <noscript>
+-| "<iframe>"
+-| <body>
+-| "X"
+-
+-#data
+-<noframes><!--<noframes></noframes>--></noframes>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (noframes). Expected DOCTYPE.
+-Line: 1 Col: 49 Unexpected end tag (noframes).
+-#document
+-| <html>
+-| <head>
+-| <noframes>
+-| "<!--<noframes>"
+-| <body>
+-| "-->"
+-
+-#data
+-<noframes><body><script><!--...</script></body></noframes></html>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (noframes). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <noframes>
+-| "<body><script><!--...</script></body>"
+-| <body>
+-
+-#data
+-<textarea><!--<textarea></textarea>--></textarea>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE.
+-Line: 1 Col: 49 Unexpected end tag (textarea).
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| "<!--<textarea>"
+-| "-->"
+-
+-#data
+-<textarea></textarea></textarea>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| "</textarea>"
+-
+-#data
+-<iframe><!--<iframe></iframe>--></iframe>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (iframe). Expected DOCTYPE.
+-Line: 1 Col: 41 Unexpected end tag (iframe).
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <iframe>
+-| "<!--<iframe>"
+-| "-->"
+-
+-#data
+-<iframe>...<!--X->...<!--/X->...</iframe>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (iframe). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <iframe>
+-| "...<!--X->...<!--/X->..."
+-
+-#data
+-<xmp><!--<xmp></xmp>--></xmp>
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (xmp). Expected DOCTYPE.
+-Line: 1 Col: 29 Unexpected end tag (xmp).
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <xmp>
+-| "<!--<xmp>"
+-| "-->"
+-
+-#data
+-<noembed><!--<noembed></noembed>--></noembed>
+-#errors
+-Line: 1 Col: 9 Unexpected start tag (noembed). Expected DOCTYPE.
+-Line: 1 Col: 45 Unexpected end tag (noembed).
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <noembed>
+-| "<!--<noembed>"
+-| "-->"
+-
+-#data
+-<!doctype html><table>
+-
+-#errors
+-Line 2 Col 0 Unexpected end of file. Expected table content.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| "
+-"
+-
+-#data
+-<!doctype html><table><td><span><font></span><span>
+-#errors
+-Line 1 Col 26 Unexpected table cell start tag (td) in the table body phase.
+-Line 1 Col 45 Unexpected end tag (span).
+-Line 1 Col 51 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <span>
+-| <font>
+-| <font>
+-| <span>
+-
+-#data
+-<!doctype html><form><table></form><form></table></form>
+-#errors
+-35: Stray end tag “form”.
+-41: Start tag “form” seen in “table”.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <form>
+-| <table>
+-| <form>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests17.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests17.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests17.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests17.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,153 +0,0 @@
+-#data
+-<!doctype html><table><tbody><select><tr>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<!doctype html><table><tr><select><td>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-
+-#data
+-<!doctype html><table><tr><td><select><td>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <select>
+-| <td>
+-
+-#data
+-<!doctype html><table><tr><th><select><td>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <th>
+-| <select>
+-| <td>
+-
+-#data
+-<!doctype html><table><caption><select><tr>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <select>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<!doctype html><select><tr>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-
+-#data
+-<!doctype html><select><td>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-
+-#data
+-<!doctype html><select><th>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-
+-#data
+-<!doctype html><select><tbody>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-
+-#data
+-<!doctype html><select><thead>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-
+-#data
+-<!doctype html><select><tfoot>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-
+-#data
+-<!doctype html><select><caption>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-
+-#data
+-<!doctype html><table><tr></table>a
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| "a"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests18.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests18.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests18.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests18.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,269 +0,0 @@
+-#data
+-<!doctype html><plaintext></plaintext>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <plaintext>
+-| "</plaintext>"
+-
+-#data
+-<!doctype html><table><plaintext></plaintext>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <plaintext>
+-| "</plaintext>"
+-| <table>
+-
+-#data
+-<!doctype html><table><tbody><plaintext></plaintext>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <plaintext>
+-| "</plaintext>"
+-| <table>
+-| <tbody>
+-
+-#data
+-<!doctype html><table><tbody><tr><plaintext></plaintext>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <plaintext>
+-| "</plaintext>"
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<!doctype html><table><tbody><tr><plaintext></plaintext>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <plaintext>
+-| "</plaintext>"
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<!doctype html><table><td><plaintext></plaintext>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <plaintext>
+-| "</plaintext>"
+-
+-#data
+-<!doctype html><table><caption><plaintext></plaintext>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <plaintext>
+-| "</plaintext>"
+-
+-#data
+-<!doctype html><table><tr><style></script></style>abc
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "abc"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <style>
+-| "</script>"
+-
+-#data
+-<!doctype html><table><tr><script></style></script>abc
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "abc"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <script>
+-| "</style>"
+-
+-#data
+-<!doctype html><table><caption><style></script></style>abc
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <style>
+-| "</script>"
+-| "abc"
+-
+-#data
+-<!doctype html><table><td><style></script></style>abc
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <style>
+-| "</script>"
+-| "abc"
+-
+-#data
+-<!doctype html><select><script></style></script>abc
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <script>
+-| "</style>"
+-| "abc"
+-
+-#data
+-<!doctype html><table><select><script></style></script>abc
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <script>
+-| "</style>"
+-| "abc"
+-| <table>
+-
+-#data
+-<!doctype html><table><tr><select><script></style></script>abc
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <script>
+-| "</style>"
+-| "abc"
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<!doctype html><frameset></frameset><noframes>abc
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-| <noframes>
+-| "abc"
+-
+-#data
+-<!doctype html><frameset></frameset><noframes>abc</noframes><!--abc-->
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-| <noframes>
+-| "abc"
+-| <!-- abc -->
+-
+-#data
+-<!doctype html><frameset></frameset></html><noframes>abc
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-| <noframes>
+-| "abc"
+-
+-#data
+-<!doctype html><frameset></frameset></html><noframes>abc</noframes><!--abc-->
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-| <noframes>
+-| "abc"
+-| <!-- abc -->
+-
+-#data
+-<!doctype html><table><tr></tbody><tfoot>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <tfoot>
+-
+-#data
+-<!doctype html><table><td><svg></svg>abc<td>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <svg svg>
+-| "abc"
+-| <td>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests19.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests19.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests19.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests19.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,1237 +0,0 @@
+-#data
+-<!doctype html><math><mn DefinitionUrl="foo">
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mn>
+-| definitionURL="foo"
+-
+-#data
+-<!doctype html><html></p><!--foo-->
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <!-- foo -->
+-| <head>
+-| <body>
+-
+-#data
+-<!doctype html><head></head></p><!--foo-->
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <!-- foo -->
+-| <body>
+-
+-#data
+-<!doctype html><body><p><pre>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <pre>
+-
+-#data
+-<!doctype html><body><p><listing>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <listing>
+-
+-#data
+-<!doctype html><p><plaintext>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <plaintext>
+-
+-#data
+-<!doctype html><p><h1>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <h1>
+-
+-#data
+-<!doctype html><form><isindex>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <form>
+-
+-#data
+-<!doctype html><isindex action="POST">
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <form>
+-| action="POST"
+-| <hr>
+-| <label>
+-| "This is a searchable index. Enter search keywords: "
+-| <input>
+-| name="isindex"
+-| <hr>
+-
+-#data
+-<!doctype html><isindex prompt="this is isindex">
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <form>
+-| <hr>
+-| <label>
+-| "this is isindex"
+-| <input>
+-| name="isindex"
+-| <hr>
+-
+-#data
+-<!doctype html><isindex type="hidden">
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <form>
+-| <hr>
+-| <label>
+-| "This is a searchable index. Enter search keywords: "
+-| <input>
+-| name="isindex"
+-| type="hidden"
+-| <hr>
+-
+-#data
+-<!doctype html><isindex name="foo">
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <form>
+-| <hr>
+-| <label>
+-| "This is a searchable index. Enter search keywords: "
+-| <input>
+-| name="isindex"
+-| <hr>
+-
+-#data
+-<!doctype html><ruby><p><rp>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <ruby>
+-| <p>
+-| <rp>
+-
+-#data
+-<!doctype html><ruby><div><span><rp>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <ruby>
+-| <div>
+-| <span>
+-| <rp>
+-
+-#data
+-<!doctype html><ruby><div><p><rp>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <ruby>
+-| <div>
+-| <p>
+-| <rp>
+-
+-#data
+-<!doctype html><ruby><p><rt>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <ruby>
+-| <p>
+-| <rt>
+-
+-#data
+-<!doctype html><ruby><div><span><rt>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <ruby>
+-| <div>
+-| <span>
+-| <rt>
+-
+-#data
+-<!doctype html><ruby><div><p><rt>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <ruby>
+-| <div>
+-| <p>
+-| <rt>
+-
+-#data
+-<!doctype html><math/><foo>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <foo>
+-
+-#data
+-<!doctype html><svg/><foo>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <foo>
+-
+-#data
+-<!doctype html><div></body><!--foo-->
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <!-- foo -->
+-
+-#data
+-<!doctype html><h1><div><h3><span></h1>foo
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <h1>
+-| <div>
+-| <h3>
+-| <span>
+-| "foo"
+-
+-#data
+-<!doctype html><p></h3>foo
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| "foo"
+-
+-#data
+-<!doctype html><h3><li>abc</h2>foo
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <h3>
+-| <li>
+-| "abc"
+-| "foo"
+-
+-#data
+-<!doctype html><table>abc<!--foo-->
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "abc"
+-| <table>
+-| <!-- foo -->
+-
+-#data
+-<!doctype html><table> <!--foo-->
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| " "
+-| <!-- foo -->
+-
+-#data
+-<!doctype html><table> b <!--foo-->
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| " b "
+-| <table>
+-| <!-- foo -->
+-
+-#data
+-<!doctype html><select><option><option>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <option>
+-| <option>
+-
+-#data
+-<!doctype html><select><option></optgroup>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <option>
+-
+-#data
+-<!doctype html><select><option></optgroup>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <option>
+-
+-#data
+-<!doctype html><p><math><mi><p><h1>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <math math>
+-| <math mi>
+-| <p>
+-| <h1>
+-
+-#data
+-<!doctype html><p><math><mo><p><h1>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <math math>
+-| <math mo>
+-| <p>
+-| <h1>
+-
+-#data
+-<!doctype html><p><math><mn><p><h1>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <math math>
+-| <math mn>
+-| <p>
+-| <h1>
+-
+-#data
+-<!doctype html><p><math><ms><p><h1>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <math math>
+-| <math ms>
+-| <p>
+-| <h1>
+-
+-#data
+-<!doctype html><p><math><mtext><p><h1>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <math math>
+-| <math mtext>
+-| <p>
+-| <h1>
+-
+-#data
+-<!doctype html><frameset></noframes>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<!doctype html><html c=d><body></html><html a=b>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| a="b"
+-| c="d"
+-| <head>
+-| <body>
+-
+-#data
+-<!doctype html><html c=d><frameset></frameset></html><html a=b>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| a="b"
+-| c="d"
+-| <head>
+-| <frameset>
+-
+-#data
+-<!doctype html><html><frameset></frameset></html><!--foo-->
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-| <!-- foo -->
+-
+-#data
+-<!doctype html><html><frameset></frameset></html>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-| " "
+-
+-#data
+-<!doctype html><html><frameset></frameset></html>abc
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<!doctype html><html><frameset></frameset></html><p>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<!doctype html><html><frameset></frameset></html></p>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<html><frameset></frameset></html><!doctype html>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<!doctype html><body><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!doctype html><p><frameset><frame>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-| <frame>
+-
+-#data
+-<!doctype html><p>a<frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| "a"
+-
+-#data
+-<!doctype html><p> <frameset><frame>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-| <frame>
+-
+-#data
+-<!doctype html><pre><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <pre>
+-
+-#data
+-<!doctype html><listing><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <listing>
+-
+-#data
+-<!doctype html><li><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <li>
+-
+-#data
+-<!doctype html><dd><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <dd>
+-
+-#data
+-<!doctype html><dt><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <dt>
+-
+-#data
+-<!doctype html><button><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <button>
+-
+-#data
+-<!doctype html><applet><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <applet>
+-
+-#data
+-<!doctype html><marquee><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <marquee>
+-
+-#data
+-<!doctype html><object><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <object>
+-
+-#data
+-<!doctype html><table><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-
+-#data
+-<!doctype html><area><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <area>
+-
+-#data
+-<!doctype html><basefont><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <basefont>
+-| <frameset>
+-
+-#data
+-<!doctype html><bgsound><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <bgsound>
+-| <frameset>
+-
+-#data
+-<!doctype html><br><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <br>
+-
+-#data
+-<!doctype html><embed><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <embed>
+-
+-#data
+-<!doctype html><img><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <img>
+-
+-#data
+-<!doctype html><input><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <input>
+-
+-#data
+-<!doctype html><keygen><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <keygen>
+-
+-#data
+-<!doctype html><wbr><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <wbr>
+-
+-#data
+-<!doctype html><hr><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <hr>
+-
+-#data
+-<!doctype html><textarea></textarea><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-
+-#data
+-<!doctype html><xmp></xmp><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <xmp>
+-
+-#data
+-<!doctype html><iframe></iframe><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <iframe>
+-
+-#data
+-<!doctype html><select></select><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-
+-#data
+-<!doctype html><svg></svg><frameset><frame>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-| <frame>
+-
+-#data
+-<!doctype html><math></math><frameset><frame>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-| <frame>
+-
+-#data
+-<!doctype html><svg><foreignObject><div> <frameset><frame>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-| <frame>
+-
+-#data
+-<!doctype html><svg>a</svg><frameset><frame>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "a"
+-
+-#data
+-<!doctype html><svg> </svg><frameset><frame>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-| <frame>
+-
+-#data
+-<html>aaa<frameset></frameset>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "aaa"
+-
+-#data
+-<html> a <frameset></frameset>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "a "
+-
+-#data
+-<!doctype html><div><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<!doctype html><div><body><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-
+-#data
+-<!doctype html><p><math></p>a
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <math math>
+-| "a"
+-
+-#data
+-<!doctype html><p><math><mn><span></p>a
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <math math>
+-| <math mn>
+-| <span>
+-| <p>
+-| "a"
+-
+-#data
+-<!doctype html><math></html>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-
+-#data
+-<!doctype html><meta charset="ascii">
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <meta>
+-| charset="ascii"
+-| <body>
+-
+-#data
+-<!doctype html><meta http-equiv="content-type" content="text/html;charset=ascii">
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <meta>
+-| content="text/html;charset=ascii"
+-| http-equiv="content-type"
+-| <body>
+-
+-#data
+-<!doctype html><head><!--aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa--><meta charset="utf8">
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <!-- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -->
+-| <meta>
+-| charset="utf8"
+-| <body>
+-
+-#data
+-<!doctype html><html a=b><head></head><html c=d>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| a="b"
+-| c="d"
+-| <head>
+-| <body>
+-
+-#data
+-<!doctype html><image/>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <img>
+-
+-#data
+-<!doctype html>a<i>b<table>c<b>d</i>e</b>f
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "a"
+-| <i>
+-| "bc"
+-| <b>
+-| "de"
+-| "f"
+-| <table>
+-
+-#data
+-<!doctype html><table><i>a<b>b<div>c<a>d</i>e</b>f
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <i>
+-| "a"
+-| <b>
+-| "b"
+-| <b>
+-| <div>
+-| <b>
+-| <i>
+-| "c"
+-| <a>
+-| "d"
+-| <a>
+-| "e"
+-| <a>
+-| "f"
+-| <table>
+-
+-#data
+-<!doctype html><i>a<b>b<div>c<a>d</i>e</b>f
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <i>
+-| "a"
+-| <b>
+-| "b"
+-| <b>
+-| <div>
+-| <b>
+-| <i>
+-| "c"
+-| <a>
+-| "d"
+-| <a>
+-| "e"
+-| <a>
+-| "f"
+-
+-#data
+-<!doctype html><table><i>a<b>b<div>c</i>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <i>
+-| "a"
+-| <b>
+-| "b"
+-| <b>
+-| <div>
+-| <i>
+-| "c"
+-| <table>
+-
+-#data
+-<!doctype html><table><i>a<b>b<div>c<a>d</i>e</b>f
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <i>
+-| "a"
+-| <b>
+-| "b"
+-| <b>
+-| <div>
+-| <b>
+-| <i>
+-| "c"
+-| <a>
+-| "d"
+-| <a>
+-| "e"
+-| <a>
+-| "f"
+-| <table>
+-
+-#data
+-<!doctype html><table><i>a<div>b<tr>c<b>d</i>e
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <i>
+-| "a"
+-| <div>
+-| "b"
+-| <i>
+-| "c"
+-| <b>
+-| "d"
+-| <b>
+-| "e"
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<!doctype html><table><td><table><i>a<div>b<b>c</i>d
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <i>
+-| "a"
+-| <div>
+-| <i>
+-| "b"
+-| <b>
+-| "c"
+-| <b>
+-| "d"
+-| <table>
+-
+-#data
+-<!doctype html><body><bgsound>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <bgsound>
+-
+-#data
+-<!doctype html><body><basefont>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <basefont>
+-
+-#data
+-<!doctype html><a><b></a><basefont>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <b>
+-| <basefont>
+-
+-#data
+-<!doctype html><a><b></a><bgsound>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <b>
+-| <bgsound>
+-
+-#data
+-<!doctype html><figcaption><article></figcaption>a
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <figcaption>
+-| <article>
+-| "a"
+-
+-#data
+-<!doctype html><summary><article></summary>a
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <summary>
+-| <article>
+-| "a"
+-
+-#data
+-<!doctype html><p><a><plaintext>b
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <a>
+-| <plaintext>
+-| <a>
+-| "b"
+-
+-#data
+-<!DOCTYPE html><div>a<a></div>b<p>c</p>d
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "a"
+-| <a>
+-| <a>
+-| "b"
+-| <p>
+-| "c"
+-| "d"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests1.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests1.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests1.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests1.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,1952 +0,0 @@
+-#data
+-Test
+-#errors
+-Line: 1 Col: 4 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "Test"
+-
+-#data
+-<p>One<p>Two
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (p). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| "One"
+-| <p>
+-| "Two"
+-
+-#data
+-Line1<br>Line2<br>Line3<br>Line4
+-#errors
+-Line: 1 Col: 5 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "Line1"
+-| <br>
+-| "Line2"
+-| <br>
+-| "Line3"
+-| <br>
+-| "Line4"
+-
+-#data
+-<html>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<head>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<body>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (body). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<html><head>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<html><head></head>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<html><head></head><body>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<html><head></head><body></body>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<html><head><body></body></html>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<html><head></body></html>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE.
+-Line: 1 Col: 19 Unexpected end tag (body).
+-Line: 1 Col: 26 Unexpected end tag (html).
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<html><head><body></html>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<html><body></html>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<body></html>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (body). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<head></html>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+-Line: 1 Col: 13 Unexpected end tag (html). Ignored.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-</head>
+-#errors
+-Line: 1 Col: 7 Unexpected end tag (head). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-</body>
+-#errors
+-Line: 1 Col: 7 Unexpected end tag (body). Expected DOCTYPE.
+-Line: 1 Col: 7 Unexpected end tag (body) after the (implied) root element.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-</html>
+-#errors
+-Line: 1 Col: 7 Unexpected end tag (html). Expected DOCTYPE.
+-Line: 1 Col: 7 Unexpected end tag (html) after the (implied) root element.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<b><table><td><i></table>
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (b). Expected DOCTYPE.
+-Line: 1 Col: 14 Unexpected table cell start tag (td) in the table body phase.
+-Line: 1 Col: 25 Got table cell end tag (td) while required end tags are missing.
+-Line: 1 Col: 25 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <i>
+-
+-#data
+-<b><table><td></b><i></table>X
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (b). Expected DOCTYPE.
+-Line: 1 Col: 14 Unexpected table cell start tag (td) in the table body phase.
+-Line: 1 Col: 18 End tag (b) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 29 Got table cell end tag (td) while required end tags are missing.
+-Line: 1 Col: 30 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <i>
+-| "X"
+-
+-#data
+-<h1>Hello<h2>World
+-#errors
+-4: Start tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”.
+-13: Heading cannot be a child of another heading.
+-18: End of file seen and there were open elements.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <h1>
+-| "Hello"
+-| <h2>
+-| "World"
+-
+-#data
+-<a><p>X<a>Y</a>Z</p></a>
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (a). Expected DOCTYPE.
+-Line: 1 Col: 10 Unexpected start tag (a) implies end tag (a).
+-Line: 1 Col: 10 End tag (a) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 24 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <p>
+-| <a>
+-| "X"
+-| <a>
+-| "Y"
+-| "Z"
+-
+-#data
+-<b><button>foo</b>bar
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (b). Expected DOCTYPE.
+-Line: 1 Col: 15 End tag (b) violates step 1, paragraph 1 of the adoption agency algorithm.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <button>
+-| <b>
+-| "foo"
+-| "bar"
+-
+-#data
+-<!DOCTYPE html><span><button>foo</span>bar
+-#errors
+-39: End tag “span” seen but there were unclosed elements.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <span>
+-| <button>
+-| "foobar"
+-
+-#data
+-<p><b><div><marquee></p></b></div>X
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (p). Expected DOCTYPE.
+-Line: 1 Col: 11 Unexpected end tag (p). Ignored.
+-Line: 1 Col: 24 Unexpected end tag (p). Ignored.
+-Line: 1 Col: 28 End tag (b) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 34 End tag (div) seen too early. Expected other end tag.
+-Line: 1 Col: 35 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <b>
+-| <div>
+-| <b>
+-| <marquee>
+-| <p>
+-| "X"
+-
+-#data
+-<script><div></script></div><title><p></title><p><p>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 28 Unexpected end tag (div). Ignored.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "<div>"
+-| <title>
+-| "<p>"
+-| <body>
+-| <p>
+-| <p>
+-
+-#data
+-<!--><div>--<!-->
+-#errors
+-Line: 1 Col: 5 Incorrect comment.
+-Line: 1 Col: 10 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 17 Incorrect comment.
+-Line: 1 Col: 17 Expected closing tag. Unexpected end of file.
+-#document
+-| <!-- -->
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "--"
+-| <!-- -->
+-
+-#data
+-<p><hr></p>
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (p). Expected DOCTYPE.
+-Line: 1 Col: 11 Unexpected end tag (p). Ignored.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <hr>
+-| <p>
+-
+-#data
+-<select><b><option><select><option></b></select>X
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (select). Expected DOCTYPE.
+-Line: 1 Col: 11 Unexpected start tag token (b) in the select phase. Ignored.
+-Line: 1 Col: 27 Unexpected select start tag in the select phase treated as select end tag.
+-Line: 1 Col: 39 End tag (b) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 48 Unexpected end tag (select). Ignored.
+-Line: 1 Col: 49 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <option>
+-| <option>
+-| "X"
+-
+-#data
+-<a><table><td><a><table></table><a></tr><a></table><b>X</b>C<a>Y
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (a). Expected DOCTYPE.
+-Line: 1 Col: 14 Unexpected table cell start tag (td) in the table body phase.
+-Line: 1 Col: 35 Unexpected start tag (a) implies end tag (a).
+-Line: 1 Col: 40 Got table cell end tag (td) while required end tags are missing.
+-Line: 1 Col: 43 Unexpected start tag (a) in table context caused voodoo mode.
+-Line: 1 Col: 43 Unexpected start tag (a) implies end tag (a).
+-Line: 1 Col: 43 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 51 Unexpected implied end tag (a) in the table phase.
+-Line: 1 Col: 63 Unexpected start tag (a) implies end tag (a).
+-Line: 1 Col: 64 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <a>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <a>
+-| <table>
+-| <a>
+-| <a>
+-| <b>
+-| "X"
+-| "C"
+-| <a>
+-| "Y"
+-
+-#data
+-<a X>0<b>1<a Y>2
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (a). Expected DOCTYPE.
+-Line: 1 Col: 15 Unexpected start tag (a) implies end tag (a).
+-Line: 1 Col: 15 End tag (a) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 16 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| x=""
+-| "0"
+-| <b>
+-| "1"
+-| <b>
+-| <a>
+-| y=""
+-| "2"
+-
+-#data
+-<!-----><font><div>hello<table>excite!<b>me!<th><i>please!</tr><!--X-->
+-#errors
+-Line: 1 Col: 7 Unexpected '-' after '--' found in comment.
+-Line: 1 Col: 14 Unexpected start tag (font). Expected DOCTYPE.
+-Line: 1 Col: 38 Unexpected non-space characters in table context caused voodoo mode.
+-Line: 1 Col: 41 Unexpected start tag (b) in table context caused voodoo mode.
+-Line: 1 Col: 48 Unexpected implied end tag (b) in the table phase.
+-Line: 1 Col: 48 Unexpected table cell start tag (th) in the table body phase.
+-Line: 1 Col: 63 Got table cell end tag (th) while required end tags are missing.
+-Line: 1 Col: 71 Unexpected end of file. Expected table content.
+-#document
+-| <!-- - -->
+-| <html>
+-| <head>
+-| <body>
+-| <font>
+-| <div>
+-| "helloexcite!"
+-| <b>
+-| "me!"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <th>
+-| <i>
+-| "please!"
+-| <!-- X -->
+-
+-#data
+-<!DOCTYPE html><li>hello<li>world<ul>how<li>do</ul>you</body><!--do-->
+-#errors
+-Line: 1 Col: 61 Unexpected end tag (li). Missing end tag (body).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <li>
+-| "hello"
+-| <li>
+-| "world"
+-| <ul>
+-| "how"
+-| <li>
+-| "do"
+-| "you"
+-| <!-- do -->
+-
+-#data
+-<!DOCTYPE html>A<option>B<optgroup>C<select>D</option>E
+-#errors
+-Line: 1 Col: 54 Unexpected end tag (option) in the select phase. Ignored.
+-Line: 1 Col: 55 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "A"
+-| <option>
+-| "B"
+-| <optgroup>
+-| "C"
+-| <select>
+-| "DE"
+-
+-#data
+-<
+-#errors
+-Line: 1 Col: 1 Expected tag name. Got something else instead
+-Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "<"
+-
+-#data
+-<#
+-#errors
+-Line: 1 Col: 1 Expected tag name. Got something else instead
+-Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "<#"
+-
+-#data
+-</
+-#errors
+-Line: 1 Col: 2 Expected closing tag. Unexpected end of file.
+-Line: 1 Col: 2 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "</"
+-
+-#data
+-</#
+-#errors
+-Line: 1 Col: 2 Expected closing tag. Unexpected character '#' found.
+-Line: 1 Col: 3 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <!-- # -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<?
+-#errors
+-Line: 1 Col: 1 Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)
+-Line: 1 Col: 2 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <!-- ? -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<?#
+-#errors
+-Line: 1 Col: 1 Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)
+-Line: 1 Col: 3 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <!-- ?# -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!
+-#errors
+-Line: 1 Col: 2 Expected '--' or 'DOCTYPE'. Not found.
+-Line: 1 Col: 2 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <!-- -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!#
+-#errors
+-Line: 1 Col: 3 Expected '--' or 'DOCTYPE'. Not found.
+-Line: 1 Col: 3 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <!-- # -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<?COMMENT?>
+-#errors
+-Line: 1 Col: 1 Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)
+-Line: 1 Col: 11 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <!-- ?COMMENT? -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!COMMENT>
+-#errors
+-Line: 1 Col: 2 Expected '--' or 'DOCTYPE'. Not found.
+-Line: 1 Col: 10 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <!-- COMMENT -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-</ COMMENT >
+-#errors
+-Line: 1 Col: 2 Expected closing tag. Unexpected character ' ' found.
+-Line: 1 Col: 12 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <!-- COMMENT -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<?COM--MENT?>
+-#errors
+-Line: 1 Col: 1 Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)
+-Line: 1 Col: 13 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <!-- ?COM--MENT? -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!COM--MENT>
+-#errors
+-Line: 1 Col: 2 Expected '--' or 'DOCTYPE'. Not found.
+-Line: 1 Col: 12 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <!-- COM--MENT -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-</ COM--MENT >
+-#errors
+-Line: 1 Col: 2 Expected closing tag. Unexpected character ' ' found.
+-Line: 1 Col: 14 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <!-- COM--MENT -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html><style> EOF
+-#errors
+-Line: 1 Col: 26 Unexpected end of file. Expected end tag (style).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <style>
+-| " EOF"
+-| <body>
+-
+-#data
+-<!DOCTYPE html><script> <!-- </script> --> </script> EOF
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| " <!-- "
+-| " "
+-| <body>
+-| "--> EOF"
+-
+-#data
+-<b><p></b>TEST
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (b). Expected DOCTYPE.
+-Line: 1 Col: 10 End tag (b) violates step 1, paragraph 3 of the adoption agency algorithm.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <p>
+-| <b>
+-| "TEST"
+-
+-#data
+-<p id=a><b><p id=b></b>TEST
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (p). Expected DOCTYPE.
+-Line: 1 Col: 19 Unexpected end tag (p). Ignored.
+-Line: 1 Col: 23 End tag (b) violates step 1, paragraph 2 of the adoption agency algorithm.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| id="a"
+-| <b>
+-| <p>
+-| id="b"
+-| "TEST"
+-
+-#data
+-<b id=a><p><b id=b></p></b>TEST
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (b). Expected DOCTYPE.
+-Line: 1 Col: 23 Unexpected end tag (p). Ignored.
+-Line: 1 Col: 27 End tag (b) violates step 1, paragraph 2 of the adoption agency algorithm.
+-Line: 1 Col: 31 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| id="a"
+-| <p>
+-| <b>
+-| id="b"
+-| "TEST"
+-
+-#data
+-<!DOCTYPE html><title>U-test</title><body><div><p>Test<u></p></div></body>
+-#errors
+-Line: 1 Col: 61 Unexpected end tag (p). Ignored.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <title>
+-| "U-test"
+-| <body>
+-| <div>
+-| <p>
+-| "Test"
+-| <u>
+-
+-#data
+-<!DOCTYPE html><font><table></font></table></font>
+-#errors
+-Line: 1 Col: 35 Unexpected end tag (font) in table context caused voodoo mode.
+-Line: 1 Col: 35 End tag (font) violates step 1, paragraph 1 of the adoption agency algorithm.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <font>
+-| <table>
+-
+-#data
+-<font><p>hello<b>cruel</font>world
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (font). Expected DOCTYPE.
+-Line: 1 Col: 29 End tag (font) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 29 End tag (font) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 34 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <font>
+-| <p>
+-| <font>
+-| "hello"
+-| <b>
+-| "cruel"
+-| <b>
+-| "world"
+-
+-#data
+-<b>Test</i>Test
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (b). Expected DOCTYPE.
+-Line: 1 Col: 11 End tag (i) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 15 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| "TestTest"
+-
+-#data
+-<b>A<cite>B<div>C
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (b). Expected DOCTYPE.
+-Line: 1 Col: 17 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| "A"
+-| <cite>
+-| "B"
+-| <div>
+-| "C"
+-
+-#data
+-<b>A<cite>B<div>C</cite>D
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (b). Expected DOCTYPE.
+-Line: 1 Col: 24 Unexpected end tag (cite). Ignored.
+-Line: 1 Col: 25 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| "A"
+-| <cite>
+-| "B"
+-| <div>
+-| "CD"
+-
+-#data
+-<b>A<cite>B<div>C</b>D
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (b). Expected DOCTYPE.
+-Line: 1 Col: 21 End tag (b) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 22 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| "A"
+-| <cite>
+-| "B"
+-| <div>
+-| <b>
+-| "C"
+-| "D"
+-
+-#data
+-
+-#errors
+-Line: 1 Col: 0 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<DIV>
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 5 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-
+-#data
+-<DIV> abc
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 9 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| " abc"
+-
+-#data
+-<DIV> abc <B>
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 13 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| " abc "
+-| <b>
+-
+-#data
+-<DIV> abc <B> def
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 17 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| " abc "
+-| <b>
+-| " def"
+-
+-#data
+-<DIV> abc <B> def <I>
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 21 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| " abc "
+-| <b>
+-| " def "
+-| <i>
+-
+-#data
+-<DIV> abc <B> def <I> ghi
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 25 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| " abc "
+-| <b>
+-| " def "
+-| <i>
+-| " ghi"
+-
+-#data
+-<DIV> abc <B> def <I> ghi <P>
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 29 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| " abc "
+-| <b>
+-| " def "
+-| <i>
+-| " ghi "
+-| <p>
+-
+-#data
+-<DIV> abc <B> def <I> ghi <P> jkl
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 33 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| " abc "
+-| <b>
+-| " def "
+-| <i>
+-| " ghi "
+-| <p>
+-| " jkl"
+-
+-#data
+-<DIV> abc <B> def <I> ghi <P> jkl </B>
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 38 End tag (b) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 38 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| " abc "
+-| <b>
+-| " def "
+-| <i>
+-| " ghi "
+-| <i>
+-| <p>
+-| <b>
+-| " jkl "
+-
+-#data
+-<DIV> abc <B> def <I> ghi <P> jkl </B> mno
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 38 End tag (b) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 42 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| " abc "
+-| <b>
+-| " def "
+-| <i>
+-| " ghi "
+-| <i>
+-| <p>
+-| <b>
+-| " jkl "
+-| " mno"
+-
+-#data
+-<DIV> abc <B> def <I> ghi <P> jkl </B> mno </I>
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 38 End tag (b) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 47 End tag (i) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 47 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| " abc "
+-| <b>
+-| " def "
+-| <i>
+-| " ghi "
+-| <i>
+-| <p>
+-| <i>
+-| <b>
+-| " jkl "
+-| " mno "
+-
+-#data
+-<DIV> abc <B> def <I> ghi <P> jkl </B> mno </I> pqr
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 38 End tag (b) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 47 End tag (i) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 51 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| " abc "
+-| <b>
+-| " def "
+-| <i>
+-| " ghi "
+-| <i>
+-| <p>
+-| <i>
+-| <b>
+-| " jkl "
+-| " mno "
+-| " pqr"
+-
+-#data
+-<DIV> abc <B> def <I> ghi <P> jkl </B> mno </I> pqr </P>
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 38 End tag (b) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 47 End tag (i) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 56 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| " abc "
+-| <b>
+-| " def "
+-| <i>
+-| " ghi "
+-| <i>
+-| <p>
+-| <i>
+-| <b>
+-| " jkl "
+-| " mno "
+-| " pqr "
+-
+-#data
+-<DIV> abc <B> def <I> ghi <P> jkl </B> mno </I> pqr </P> stu
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 38 End tag (b) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 47 End tag (i) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 60 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| " abc "
+-| <b>
+-| " def "
+-| <i>
+-| " ghi "
+-| <i>
+-| <p>
+-| <i>
+-| <b>
+-| " jkl "
+-| " mno "
+-| " pqr "
+-| " stu"
+-
+-#data
+-<test attribute-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------->
+-#errors
+-Line: 1 Col: 1040 Unexpected start tag (test). Expected DOCTYPE.
+-Line: 1 Col: 1040 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <test>
+-| attribute-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------=""
+-
+-#data
+-<a href="blah">aba<table><a href="foo">br<tr><td></td></tr>x</table>aoe
+-#errors
+-Line: 1 Col: 15 Unexpected start tag (a). Expected DOCTYPE.
+-Line: 1 Col: 39 Unexpected start tag (a) in table context caused voodoo mode.
+-Line: 1 Col: 39 Unexpected start tag (a) implies end tag (a).
+-Line: 1 Col: 39 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 45 Unexpected implied end tag (a) in the table phase.
+-Line: 1 Col: 68 Unexpected implied end tag (a) in the table phase.
+-Line: 1 Col: 71 Expected closing tag. Unexpected end of file.
+-
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| href="blah"
+-| "aba"
+-| <a>
+-| href="foo"
+-| "br"
+-| <a>
+-| href="foo"
+-| "x"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <a>
+-| href="foo"
+-| "aoe"
+-
+-#data
+-<a href="blah">aba<table><tr><td><a href="foo">br</td></tr>x</table>aoe
+-#errors
+-Line: 1 Col: 15 Unexpected start tag (a). Expected DOCTYPE.
+-Line: 1 Col: 54 Got table cell end tag (td) while required end tags are missing.
+-Line: 1 Col: 60 Unexpected non-space characters in table context caused voodoo mode.
+-Line: 1 Col: 71 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| href="blah"
+-| "abax"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <a>
+-| href="foo"
+-| "br"
+-| "aoe"
+-
+-#data
+-<table><a href="blah">aba<tr><td><a href="foo">br</td></tr>x</table>aoe
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 22 Unexpected start tag (a) in table context caused voodoo mode.
+-Line: 1 Col: 29 Unexpected implied end tag (a) in the table phase.
+-Line: 1 Col: 54 Got table cell end tag (td) while required end tags are missing.
+-Line: 1 Col: 68 Unexpected implied end tag (a) in the table phase.
+-Line: 1 Col: 71 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| href="blah"
+-| "aba"
+-| <a>
+-| href="blah"
+-| "x"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <a>
+-| href="foo"
+-| "br"
+-| <a>
+-| href="blah"
+-| "aoe"
+-
+-#data
+-<a href=a>aa<marquee>aa<a href=b>bb</marquee>aa
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (a). Expected DOCTYPE.
+-Line: 1 Col: 45 End tag (marquee) seen too early. Expected other end tag.
+-Line: 1 Col: 47 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| href="a"
+-| "aa"
+-| <marquee>
+-| "aa"
+-| <a>
+-| href="b"
+-| "bb"
+-| "aa"
+-
+-#data
+-<wbr><strike><code></strike><code><strike></code>
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (wbr). Expected DOCTYPE.
+-Line: 1 Col: 28 End tag (strike) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 49 Unexpected end tag (code). Ignored.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <wbr>
+-| <strike>
+-| <code>
+-| <code>
+-| <code>
+-| <strike>
+-
+-#data
+-<!DOCTYPE html><spacer>foo
+-#errors
+-26: End of file seen and there were open elements.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <spacer>
+-| "foo"
+-
+-#data
+-<title><meta></title><link><title><meta></title>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <title>
+-| "<meta>"
+-| <link>
+-| <title>
+-| "<meta>"
+-| <body>
+-
+-#data
+-<style><!--</style><meta><script>--><link></script>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-Line: 1 Col: 51 Unexpected end of file. Expected end tag (style).
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| "<!--"
+-| <meta>
+-| <script>
+-| "--><link>"
+-| <body>
+-
+-#data
+-<head><meta></head><link>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+-Line: 1 Col: 25 Unexpected start tag (link) that can be in head. Moved.
+-#document
+-| <html>
+-| <head>
+-| <meta>
+-| <link>
+-| <body>
+-
+-#data
+-<table><tr><tr><td><td><span><th><span>X</table>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 33 Got table cell end tag (td) while required end tags are missing.
+-Line: 1 Col: 48 Got table cell end tag (th) while required end tags are missing.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <tr>
+-| <td>
+-| <td>
+-| <span>
+-| <th>
+-| <span>
+-| "X"
+-
+-#data
+-<body><body><base><link><meta><title><p></title><body><p></body>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (body). Expected DOCTYPE.
+-Line: 1 Col: 12 Unexpected start tag (body).
+-Line: 1 Col: 54 Unexpected start tag (body).
+-Line: 1 Col: 64 Unexpected end tag (p). Missing end tag (body).
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <base>
+-| <link>
+-| <meta>
+-| <title>
+-| "<p>"
+-| <p>
+-
+-#data
+-<textarea><p></textarea>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| "<p>"
+-
+-#data
+-<p><image></p>
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (p). Expected DOCTYPE.
+-Line: 1 Col: 10 Unexpected start tag (image). Treated as img.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <img>
+-
+-#data
+-<a><table><a></table><p><a><div><a>
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (a). Expected DOCTYPE.
+-Line: 1 Col: 13 Unexpected start tag (a) in table context caused voodoo mode.
+-Line: 1 Col: 13 Unexpected start tag (a) implies end tag (a).
+-Line: 1 Col: 13 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 21 Unexpected end tag (table). Expected end tag (a).
+-Line: 1 Col: 27 Unexpected start tag (a) implies end tag (a).
+-Line: 1 Col: 27 End tag (a) violates step 1, paragraph 2 of the adoption agency algorithm.
+-Line: 1 Col: 32 Unexpected end tag (p). Ignored.
+-Line: 1 Col: 35 Unexpected start tag (a) implies end tag (a).
+-Line: 1 Col: 35 End tag (a) violates step 1, paragraph 2 of the adoption agency algorithm.
+-Line: 1 Col: 35 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <a>
+-| <table>
+-| <p>
+-| <a>
+-| <div>
+-| <a>
+-
+-#data
+-<head></p><meta><p>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+-Line: 1 Col: 10 Unexpected end tag (p). Ignored.
+-#document
+-| <html>
+-| <head>
+-| <meta>
+-| <body>
+-| <p>
+-
+-#data
+-<head></html><meta><p>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+-Line: 1 Col: 19 Unexpected start tag (meta).
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <meta>
+-| <p>
+-
+-#data
+-<b><table><td><i></table>
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (b). Expected DOCTYPE.
+-Line: 1 Col: 14 Unexpected table cell start tag (td) in the table body phase.
+-Line: 1 Col: 25 Got table cell end tag (td) while required end tags are missing.
+-Line: 1 Col: 25 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <i>
+-
+-#data
+-<b><table><td></b><i></table>
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (b). Expected DOCTYPE.
+-Line: 1 Col: 14 Unexpected table cell start tag (td) in the table body phase.
+-Line: 1 Col: 18 End tag (b) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 29 Got table cell end tag (td) while required end tags are missing.
+-Line: 1 Col: 29 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <i>
+-
+-#data
+-<h1><h2>
+-#errors
+-4: Start tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”.
+-8: Heading cannot be a child of another heading.
+-8: End of file seen and there were open elements.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <h1>
+-| <h2>
+-
+-#data
+-<a><p><a></a></p></a>
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (a). Expected DOCTYPE.
+-Line: 1 Col: 9 Unexpected start tag (a) implies end tag (a).
+-Line: 1 Col: 9 End tag (a) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 21 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <p>
+-| <a>
+-| <a>
+-
+-#data
+-<b><button></b></button></b>
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (b). Expected DOCTYPE.
+-Line: 1 Col: 15 End tag (b) violates step 1, paragraph 1 of the adoption agency algorithm.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <button>
+-| <b>
+-
+-#data
+-<p><b><div><marquee></p></b></div>
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (p). Expected DOCTYPE.
+-Line: 1 Col: 11 Unexpected end tag (p). Ignored.
+-Line: 1 Col: 24 Unexpected end tag (p). Ignored.
+-Line: 1 Col: 28 End tag (b) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 34 End tag (div) seen too early. Expected other end tag.
+-Line: 1 Col: 34 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <b>
+-| <div>
+-| <b>
+-| <marquee>
+-| <p>
+-
+-#data
+-<script></script></div><title></title><p><p>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 23 Unexpected end tag (div). Ignored.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| <title>
+-| <body>
+-| <p>
+-| <p>
+-
+-#data
+-<p><hr></p>
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (p). Expected DOCTYPE.
+-Line: 1 Col: 11 Unexpected end tag (p). Ignored.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <hr>
+-| <p>
+-
+-#data
+-<select><b><option><select><option></b></select>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (select). Expected DOCTYPE.
+-Line: 1 Col: 11 Unexpected start tag token (b) in the select phase. Ignored.
+-Line: 1 Col: 27 Unexpected select start tag in the select phase treated as select end tag.
+-Line: 1 Col: 39 End tag (b) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 48 Unexpected end tag (select). Ignored.
+-Line: 1 Col: 48 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <option>
+-| <option>
+-
+-#data
+-<html><head><title></title><body></body></html>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <title>
+-| <body>
+-
+-#data
+-<a><table><td><a><table></table><a></tr><a></table><a>
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (a). Expected DOCTYPE.
+-Line: 1 Col: 14 Unexpected table cell start tag (td) in the table body phase.
+-Line: 1 Col: 35 Unexpected start tag (a) implies end tag (a).
+-Line: 1 Col: 40 Got table cell end tag (td) while required end tags are missing.
+-Line: 1 Col: 43 Unexpected start tag (a) in table context caused voodoo mode.
+-Line: 1 Col: 43 Unexpected start tag (a) implies end tag (a).
+-Line: 1 Col: 43 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 51 Unexpected implied end tag (a) in the table phase.
+-Line: 1 Col: 54 Unexpected start tag (a) implies end tag (a).
+-Line: 1 Col: 54 End tag (a) violates step 1, paragraph 2 of the adoption agency algorithm.
+-Line: 1 Col: 54 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <a>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <a>
+-| <table>
+-| <a>
+-| <a>
+-
+-#data
+-<ul><li></li><div><li></div><li><li><div><li><address><li><b><em></b><li></ul>
+-#errors
+-Line: 1 Col: 4 Unexpected start tag (ul). Expected DOCTYPE.
+-Line: 1 Col: 45 Missing end tag (div, li).
+-Line: 1 Col: 58 Missing end tag (address, li).
+-Line: 1 Col: 69 End tag (b) violates step 1, paragraph 3 of the adoption agency algorithm.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <ul>
+-| <li>
+-| <div>
+-| <li>
+-| <li>
+-| <li>
+-| <div>
+-| <li>
+-| <address>
+-| <li>
+-| <b>
+-| <em>
+-| <li>
+-
+-#data
+-<ul><li><ul></li><li>a</li></ul></li></ul>
+-#errors
+-XXX: fix me
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <ul>
+-| <li>
+-| <ul>
+-| <li>
+-| "a"
+-
+-#data
+-<frameset><frame><frameset><frame></frameset><noframes></noframes></frameset>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-| <frame>
+-| <frameset>
+-| <frame>
+-| <noframes>
+-
+-#data
+-<h1><table><td><h3></table><h3></h1>
+-#errors
+-4: Start tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”.
+-15: “td” start tag in table body.
+-27: Unclosed elements.
+-31: Heading cannot be a child of another heading.
+-36: End tag “h1” seen but there were unclosed elements.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <h1>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <h3>
+-| <h3>
+-
+-#data
+-<table><colgroup><col><colgroup><col><col><col><colgroup><col><col><thead><tr><td></table>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <colgroup>
+-| <col>
+-| <colgroup>
+-| <col>
+-| <col>
+-| <col>
+-| <colgroup>
+-| <col>
+-| <col>
+-| <thead>
+-| <tr>
+-| <td>
+-
+-#data
+-<table><col><tbody><col><tr><col><td><col></table><col>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 37 Unexpected table cell start tag (td) in the table body phase.
+-Line: 1 Col: 55 Unexpected start tag col. Ignored.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <colgroup>
+-| <col>
+-| <tbody>
+-| <colgroup>
+-| <col>
+-| <tbody>
+-| <tr>
+-| <colgroup>
+-| <col>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <colgroup>
+-| <col>
+-
+-#data
+-<table><colgroup><tbody><colgroup><tr><colgroup><td><colgroup></table><colgroup>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 52 Unexpected table cell start tag (td) in the table body phase.
+-Line: 1 Col: 80 Unexpected start tag colgroup. Ignored.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <colgroup>
+-| <tbody>
+-| <colgroup>
+-| <tbody>
+-| <tr>
+-| <colgroup>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <colgroup>
+-
+-#data
+-</strong></b></em></i></u></strike></s></blink></tt></pre></big></small></font></select></h1></h2></h3></h4></h5></h6></body></br></a></img></title></span></style></script></table></th></td></tr></frame></area></link></param></hr></input></col></base></meta></basefont></bgsound></embed></spacer></p></dd></dt></caption></colgroup></tbody></tfoot></thead></address></blockquote></center></dir></div></dl></fieldset></listing></menu></ol></ul></li></nobr></wbr></form></button></marquee></object></html></frameset></head></iframe></image></isindex></noembed></noframes></noscript></optgroup></option></plaintext></textarea>
+-#errors
+-Line: 1 Col: 9 Unexpected end tag (strong). Expected DOCTYPE.
+-Line: 1 Col: 9 Unexpected end tag (strong) after the (implied) root element.
+-Line: 1 Col: 13 Unexpected end tag (b) after the (implied) root element.
+-Line: 1 Col: 18 Unexpected end tag (em) after the (implied) root element.
+-Line: 1 Col: 22 Unexpected end tag (i) after the (implied) root element.
+-Line: 1 Col: 26 Unexpected end tag (u) after the (implied) root element.
+-Line: 1 Col: 35 Unexpected end tag (strike) after the (implied) root element.
+-Line: 1 Col: 39 Unexpected end tag (s) after the (implied) root element.
+-Line: 1 Col: 47 Unexpected end tag (blink) after the (implied) root element.
+-Line: 1 Col: 52 Unexpected end tag (tt) after the (implied) root element.
+-Line: 1 Col: 58 Unexpected end tag (pre) after the (implied) root element.
+-Line: 1 Col: 64 Unexpected end tag (big) after the (implied) root element.
+-Line: 1 Col: 72 Unexpected end tag (small) after the (implied) root element.
+-Line: 1 Col: 79 Unexpected end tag (font) after the (implied) root element.
+-Line: 1 Col: 88 Unexpected end tag (select) after the (implied) root element.
+-Line: 1 Col: 93 Unexpected end tag (h1) after the (implied) root element.
+-Line: 1 Col: 98 Unexpected end tag (h2) after the (implied) root element.
+-Line: 1 Col: 103 Unexpected end tag (h3) after the (implied) root element.
+-Line: 1 Col: 108 Unexpected end tag (h4) after the (implied) root element.
+-Line: 1 Col: 113 Unexpected end tag (h5) after the (implied) root element.
+-Line: 1 Col: 118 Unexpected end tag (h6) after the (implied) root element.
+-Line: 1 Col: 125 Unexpected end tag (body) after the (implied) root element.
+-Line: 1 Col: 130 Unexpected end tag (br). Treated as br element.
+-Line: 1 Col: 134 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 140 This element (img) has no end tag.
+-Line: 1 Col: 148 Unexpected end tag (title). Ignored.
+-Line: 1 Col: 155 Unexpected end tag (span). Ignored.
+-Line: 1 Col: 163 Unexpected end tag (style). Ignored.
+-Line: 1 Col: 172 Unexpected end tag (script). Ignored.
+-Line: 1 Col: 180 Unexpected end tag (table). Ignored.
+-Line: 1 Col: 185 Unexpected end tag (th). Ignored.
+-Line: 1 Col: 190 Unexpected end tag (td). Ignored.
+-Line: 1 Col: 195 Unexpected end tag (tr). Ignored.
+-Line: 1 Col: 203 This element (frame) has no end tag.
+-Line: 1 Col: 210 This element (area) has no end tag.
+-Line: 1 Col: 217 Unexpected end tag (link). Ignored.
+-Line: 1 Col: 225 This element (param) has no end tag.
+-Line: 1 Col: 230 This element (hr) has no end tag.
+-Line: 1 Col: 238 This element (input) has no end tag.
+-Line: 1 Col: 244 Unexpected end tag (col). Ignored.
+-Line: 1 Col: 251 Unexpected end tag (base). Ignored.
+-Line: 1 Col: 258 Unexpected end tag (meta). Ignored.
+-Line: 1 Col: 269 This element (basefont) has no end tag.
+-Line: 1 Col: 279 This element (bgsound) has no end tag.
+-Line: 1 Col: 287 This element (embed) has no end tag.
+-Line: 1 Col: 296 This element (spacer) has no end tag.
+-Line: 1 Col: 300 Unexpected end tag (p). Ignored.
+-Line: 1 Col: 305 End tag (dd) seen too early. Expected other end tag.
+-Line: 1 Col: 310 End tag (dt) seen too early. Expected other end tag.
+-Line: 1 Col: 320 Unexpected end tag (caption). Ignored.
+-Line: 1 Col: 331 Unexpected end tag (colgroup). Ignored.
+-Line: 1 Col: 339 Unexpected end tag (tbody). Ignored.
+-Line: 1 Col: 347 Unexpected end tag (tfoot). Ignored.
+-Line: 1 Col: 355 Unexpected end tag (thead). Ignored.
+-Line: 1 Col: 365 End tag (address) seen too early. Expected other end tag.
+-Line: 1 Col: 378 End tag (blockquote) seen too early. Expected other end tag.
+-Line: 1 Col: 387 End tag (center) seen too early. Expected other end tag.
+-Line: 1 Col: 393 Unexpected end tag (dir). Ignored.
+-Line: 1 Col: 399 End tag (div) seen too early. Expected other end tag.
+-Line: 1 Col: 404 End tag (dl) seen too early. Expected other end tag.
+-Line: 1 Col: 415 End tag (fieldset) seen too early. Expected other end tag.
+-Line: 1 Col: 425 End tag (listing) seen too early. Expected other end tag.
+-Line: 1 Col: 432 End tag (menu) seen too early. Expected other end tag.
+-Line: 1 Col: 437 End tag (ol) seen too early. Expected other end tag.
+-Line: 1 Col: 442 End tag (ul) seen too early. Expected other end tag.
+-Line: 1 Col: 447 End tag (li) seen too early. Expected other end tag.
+-Line: 1 Col: 454 End tag (nobr) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 460 This element (wbr) has no end tag.
+-Line: 1 Col: 476 End tag (button) seen too early. Expected other end tag.
+-Line: 1 Col: 486 End tag (marquee) seen too early. Expected other end tag.
+-Line: 1 Col: 495 End tag (object) seen too early. Expected other end tag.
+-Line: 1 Col: 513 Unexpected end tag (html). Ignored.
+-Line: 1 Col: 513 Unexpected end tag (frameset). Ignored.
+-Line: 1 Col: 520 Unexpected end tag (head). Ignored.
+-Line: 1 Col: 529 Unexpected end tag (iframe). Ignored.
+-Line: 1 Col: 537 This element (image) has no end tag.
+-Line: 1 Col: 547 This element (isindex) has no end tag.
+-Line: 1 Col: 557 Unexpected end tag (noembed). Ignored.
+-Line: 1 Col: 568 Unexpected end tag (noframes). Ignored.
+-Line: 1 Col: 579 Unexpected end tag (noscript). Ignored.
+-Line: 1 Col: 590 Unexpected end tag (optgroup). Ignored.
+-Line: 1 Col: 599 Unexpected end tag (option). Ignored.
+-Line: 1 Col: 611 Unexpected end tag (plaintext). Ignored.
+-Line: 1 Col: 622 Unexpected end tag (textarea). Ignored.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <br>
+-| <p>
+-
+-#data
+-<table><tr></strong></b></em></i></u></strike></s></blink></tt></pre></big></small></font></select></h1></h2></h3></h4></h5></h6></body></br></a></img></title></span></style></script></table></th></td></tr></frame></area></link></param></hr></input></col></base></meta></basefont></bgsound></embed></spacer></p></dd></dt></caption></colgroup></tbody></tfoot></thead></address></blockquote></center></dir></div></dl></fieldset></listing></menu></ol></ul></li></nobr></wbr></form></button></marquee></object></html></frameset></head></iframe></image></isindex></noembed></noframes></noscript></optgroup></option></plaintext></textarea>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 20 Unexpected end tag (strong) in table context caused voodoo mode.
+-Line: 1 Col: 20 End tag (strong) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 24 Unexpected end tag (b) in table context caused voodoo mode.
+-Line: 1 Col: 24 End tag (b) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 29 Unexpected end tag (em) in table context caused voodoo mode.
+-Line: 1 Col: 29 End tag (em) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 33 Unexpected end tag (i) in table context caused voodoo mode.
+-Line: 1 Col: 33 End tag (i) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 37 Unexpected end tag (u) in table context caused voodoo mode.
+-Line: 1 Col: 37 End tag (u) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 46 Unexpected end tag (strike) in table context caused voodoo mode.
+-Line: 1 Col: 46 End tag (strike) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 50 Unexpected end tag (s) in table context caused voodoo mode.
+-Line: 1 Col: 50 End tag (s) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 58 Unexpected end tag (blink) in table context caused voodoo mode.
+-Line: 1 Col: 58 Unexpected end tag (blink). Ignored.
+-Line: 1 Col: 63 Unexpected end tag (tt) in table context caused voodoo mode.
+-Line: 1 Col: 63 End tag (tt) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 69 Unexpected end tag (pre) in table context caused voodoo mode.
+-Line: 1 Col: 69 End tag (pre) seen too early. Expected other end tag.
+-Line: 1 Col: 75 Unexpected end tag (big) in table context caused voodoo mode.
+-Line: 1 Col: 75 End tag (big) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 83 Unexpected end tag (small) in table context caused voodoo mode.
+-Line: 1 Col: 83 End tag (small) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 90 Unexpected end tag (font) in table context caused voodoo mode.
+-Line: 1 Col: 90 End tag (font) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 99 Unexpected end tag (select) in table context caused voodoo mode.
+-Line: 1 Col: 99 Unexpected end tag (select). Ignored.
+-Line: 1 Col: 104 Unexpected end tag (h1) in table context caused voodoo mode.
+-Line: 1 Col: 104 End tag (h1) seen too early. Expected other end tag.
+-Line: 1 Col: 109 Unexpected end tag (h2) in table context caused voodoo mode.
+-Line: 1 Col: 109 End tag (h2) seen too early. Expected other end tag.
+-Line: 1 Col: 114 Unexpected end tag (h3) in table context caused voodoo mode.
+-Line: 1 Col: 114 End tag (h3) seen too early. Expected other end tag.
+-Line: 1 Col: 119 Unexpected end tag (h4) in table context caused voodoo mode.
+-Line: 1 Col: 119 End tag (h4) seen too early. Expected other end tag.
+-Line: 1 Col: 124 Unexpected end tag (h5) in table context caused voodoo mode.
+-Line: 1 Col: 124 End tag (h5) seen too early. Expected other end tag.
+-Line: 1 Col: 129 Unexpected end tag (h6) in table context caused voodoo mode.
+-Line: 1 Col: 129 End tag (h6) seen too early. Expected other end tag.
+-Line: 1 Col: 136 Unexpected end tag (body) in the table row phase. Ignored.
+-Line: 1 Col: 141 Unexpected end tag (br) in table context caused voodoo mode.
+-Line: 1 Col: 141 Unexpected end tag (br). Treated as br element.
+-Line: 1 Col: 145 Unexpected end tag (a) in table context caused voodoo mode.
+-Line: 1 Col: 145 End tag (a) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 151 Unexpected end tag (img) in table context caused voodoo mode.
+-Line: 1 Col: 151 This element (img) has no end tag.
+-Line: 1 Col: 159 Unexpected end tag (title) in table context caused voodoo mode.
+-Line: 1 Col: 159 Unexpected end tag (title). Ignored.
+-Line: 1 Col: 166 Unexpected end tag (span) in table context caused voodoo mode.
+-Line: 1 Col: 166 Unexpected end tag (span). Ignored.
+-Line: 1 Col: 174 Unexpected end tag (style) in table context caused voodoo mode.
+-Line: 1 Col: 174 Unexpected end tag (style). Ignored.
+-Line: 1 Col: 183 Unexpected end tag (script) in table context caused voodoo mode.
+-Line: 1 Col: 183 Unexpected end tag (script). Ignored.
+-Line: 1 Col: 196 Unexpected end tag (th). Ignored.
+-Line: 1 Col: 201 Unexpected end tag (td). Ignored.
+-Line: 1 Col: 206 Unexpected end tag (tr). Ignored.
+-Line: 1 Col: 214 This element (frame) has no end tag.
+-Line: 1 Col: 221 This element (area) has no end tag.
+-Line: 1 Col: 228 Unexpected end tag (link). Ignored.
+-Line: 1 Col: 236 This element (param) has no end tag.
+-Line: 1 Col: 241 This element (hr) has no end tag.
+-Line: 1 Col: 249 This element (input) has no end tag.
+-Line: 1 Col: 255 Unexpected end tag (col). Ignored.
+-Line: 1 Col: 262 Unexpected end tag (base). Ignored.
+-Line: 1 Col: 269 Unexpected end tag (meta). Ignored.
+-Line: 1 Col: 280 This element (basefont) has no end tag.
+-Line: 1 Col: 290 This element (bgsound) has no end tag.
+-Line: 1 Col: 298 This element (embed) has no end tag.
+-Line: 1 Col: 307 This element (spacer) has no end tag.
+-Line: 1 Col: 311 Unexpected end tag (p). Ignored.
+-Line: 1 Col: 316 End tag (dd) seen too early. Expected other end tag.
+-Line: 1 Col: 321 End tag (dt) seen too early. Expected other end tag.
+-Line: 1 Col: 331 Unexpected end tag (caption). Ignored.
+-Line: 1 Col: 342 Unexpected end tag (colgroup). Ignored.
+-Line: 1 Col: 350 Unexpected end tag (tbody). Ignored.
+-Line: 1 Col: 358 Unexpected end tag (tfoot). Ignored.
+-Line: 1 Col: 366 Unexpected end tag (thead). Ignored.
+-Line: 1 Col: 376 End tag (address) seen too early. Expected other end tag.
+-Line: 1 Col: 389 End tag (blockquote) seen too early. Expected other end tag.
+-Line: 1 Col: 398 End tag (center) seen too early. Expected other end tag.
+-Line: 1 Col: 404 Unexpected end tag (dir). Ignored.
+-Line: 1 Col: 410 End tag (div) seen too early. Expected other end tag.
+-Line: 1 Col: 415 End tag (dl) seen too early. Expected other end tag.
+-Line: 1 Col: 426 End tag (fieldset) seen too early. Expected other end tag.
+-Line: 1 Col: 436 End tag (listing) seen too early. Expected other end tag.
+-Line: 1 Col: 443 End tag (menu) seen too early. Expected other end tag.
+-Line: 1 Col: 448 End tag (ol) seen too early. Expected other end tag.
+-Line: 1 Col: 453 End tag (ul) seen too early. Expected other end tag.
+-Line: 1 Col: 458 End tag (li) seen too early. Expected other end tag.
+-Line: 1 Col: 465 End tag (nobr) violates step 1, paragraph 1 of the adoption agency algorithm.
+-Line: 1 Col: 471 This element (wbr) has no end tag.
+-Line: 1 Col: 487 End tag (button) seen too early. Expected other end tag.
+-Line: 1 Col: 497 End tag (marquee) seen too early. Expected other end tag.
+-Line: 1 Col: 506 End tag (object) seen too early. Expected other end tag.
+-Line: 1 Col: 524 Unexpected end tag (html). Ignored.
+-Line: 1 Col: 524 Unexpected end tag (frameset). Ignored.
+-Line: 1 Col: 531 Unexpected end tag (head). Ignored.
+-Line: 1 Col: 540 Unexpected end tag (iframe). Ignored.
+-Line: 1 Col: 548 This element (image) has no end tag.
+-Line: 1 Col: 558 This element (isindex) has no end tag.
+-Line: 1 Col: 568 Unexpected end tag (noembed). Ignored.
+-Line: 1 Col: 579 Unexpected end tag (noframes). Ignored.
+-Line: 1 Col: 590 Unexpected end tag (noscript). Ignored.
+-Line: 1 Col: 601 Unexpected end tag (optgroup). Ignored.
+-Line: 1 Col: 610 Unexpected end tag (option). Ignored.
+-Line: 1 Col: 622 Unexpected end tag (plaintext). Ignored.
+-Line: 1 Col: 633 Unexpected end tag (textarea). Ignored.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <br>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <p>
+-
+-#data
+-<frameset>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
+-Line: 1 Col: 10 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests20.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests20.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests20.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests20.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,455 +0,0 @@
+-#data
+-<!doctype html><p><button><button>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <button>
+-
+-#data
+-<!doctype html><p><button><address>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <address>
+-
+-#data
+-<!doctype html><p><button><blockquote>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <blockquote>
+-
+-#data
+-<!doctype html><p><button><menu>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <menu>
+-
+-#data
+-<!doctype html><p><button><p>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <p>
+-
+-#data
+-<!doctype html><p><button><ul>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <ul>
+-
+-#data
+-<!doctype html><p><button><h1>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <h1>
+-
+-#data
+-<!doctype html><p><button><h6>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <h6>
+-
+-#data
+-<!doctype html><p><button><listing>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <listing>
+-
+-#data
+-<!doctype html><p><button><pre>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <pre>
+-
+-#data
+-<!doctype html><p><button><form>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <form>
+-
+-#data
+-<!doctype html><p><button><li>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <li>
+-
+-#data
+-<!doctype html><p><button><dd>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <dd>
+-
+-#data
+-<!doctype html><p><button><dt>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <dt>
+-
+-#data
+-<!doctype html><p><button><plaintext>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <plaintext>
+-
+-#data
+-<!doctype html><p><button><table>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <table>
+-
+-#data
+-<!doctype html><p><button><hr>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <hr>
+-
+-#data
+-<!doctype html><p><button><xmp>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <xmp>
+-
+-#data
+-<!doctype html><p><button></p>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <button>
+-| <p>
+-
+-#data
+-<!doctype html><address><button></address>a
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <address>
+-| <button>
+-| "a"
+-
+-#data
+-<!doctype html><address><button></address>a
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <address>
+-| <button>
+-| "a"
+-
+-#data
+-<p><table></p>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <p>
+-| <table>
+-
+-#data
+-<!doctype html><svg>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-
+-#data
+-<!doctype html><p><figcaption>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <figcaption>
+-
+-#data
+-<!doctype html><p><summary>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <summary>
+-
+-#data
+-<!doctype html><form><table><form>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <form>
+-| <table>
+-
+-#data
+-<!doctype html><table><form><form>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <form>
+-
+-#data
+-<!doctype html><table><form></table><form>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <form>
+-
+-#data
+-<!doctype html><svg><foreignObject><p>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg foreignObject>
+-| <p>
+-
+-#data
+-<!doctype html><svg><title>abc
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg title>
+-| "abc"
+-
+-#data
+-<option><span><option>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <option>
+-| <span>
+-| <option>
+-
+-#data
+-<option><option>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <option>
+-| <option>
+-
+-#data
+-<math><annotation-xml><div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math annotation-xml>
+-| <div>
+-
+-#data
+-<math><annotation-xml encoding="application/svg+xml"><div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math annotation-xml>
+-| encoding="application/svg+xml"
+-| <div>
+-
+-#data
+-<math><annotation-xml encoding="application/xhtml+xml"><div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math annotation-xml>
+-| encoding="application/xhtml+xml"
+-| <div>
+-
+-#data
+-<math><annotation-xml encoding="aPPlication/xhtmL+xMl"><div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math annotation-xml>
+-| encoding="aPPlication/xhtmL+xMl"
+-| <div>
+-
+-#data
+-<math><annotation-xml encoding="text/html"><div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math annotation-xml>
+-| encoding="text/html"
+-| <div>
+-
+-#data
+-<math><annotation-xml encoding="Text/htmL"><div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math annotation-xml>
+-| encoding="Text/htmL"
+-| <div>
+-
+-#data
+-<math><annotation-xml encoding=" text/html "><div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math annotation-xml>
+-| encoding=" text/html "
+-| <div>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests21.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests21.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests21.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests21.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,221 +0,0 @@
+-#data
+-<svg><![CDATA[foo]]>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "foo"
+-
+-#data
+-<math><![CDATA[foo]]>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| "foo"
+-
+-#data
+-<div><![CDATA[foo]]>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <!-- [CDATA[foo]] -->
+-
+-#data
+-<svg><![CDATA[foo
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "foo"
+-
+-#data
+-<svg><![CDATA[foo
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "foo"
+-
+-#data
+-<svg><![CDATA[
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-
+-#data
+-<svg><![CDATA[]]>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-
+-#data
+-<svg><![CDATA[]] >]]>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "]] >"
+-
+-#data
+-<svg><![CDATA[]] >]]>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "]] >"
+-
+-#data
+-<svg><![CDATA[]]
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "]]"
+-
+-#data
+-<svg><![CDATA[]
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "]"
+-
+-#data
+-<svg><![CDATA[]>a
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "]>a"
+-
+-#data
+-<svg><foreignObject><div><![CDATA[foo]]>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg foreignObject>
+-| <div>
+-| <!-- [CDATA[foo]] -->
+-
+-#data
+-<svg><![CDATA[<svg>]]>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "<svg>"
+-
+-#data
+-<svg><![CDATA[</svg>a]]>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "</svg>a"
+-
+-#data
+-<svg><![CDATA[<svg>a
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "<svg>a"
+-
+-#data
+-<svg><![CDATA[</svg>a
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "</svg>a"
+-
+-#data
+-<svg><![CDATA[<svg>]]><path>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "<svg>"
+-| <svg path>
+-
+-#data
+-<svg><![CDATA[<svg>]]></path>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "<svg>"
+-
+-#data
+-<svg><![CDATA[<svg>]]><!--path-->
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "<svg>"
+-| <!-- path -->
+-
+-#data
+-<svg><![CDATA[<svg>]]>path
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "<svg>path"
+-
+-#data
+-<svg><![CDATA[<!--svg-->]]>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| "<!--svg-->"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests22.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests22.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests22.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests22.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,157 +0,0 @@
+-#data
+-<a><b><big><em><strong><div>X</a>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <b>
+-| <big>
+-| <em>
+-| <strong>
+-| <big>
+-| <em>
+-| <strong>
+-| <div>
+-| <a>
+-| "X"
+-
+-#data
+-<a><b><div id=1><div id=2><div id=3><div id=4><div id=5><div id=6><div id=7><div id=8>A</a>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <b>
+-| <b>
+-| <div>
+-| id="1"
+-| <a>
+-| <div>
+-| id="2"
+-| <a>
+-| <div>
+-| id="3"
+-| <a>
+-| <div>
+-| id="4"
+-| <a>
+-| <div>
+-| id="5"
+-| <a>
+-| <div>
+-| id="6"
+-| <a>
+-| <div>
+-| id="7"
+-| <a>
+-| <div>
+-| id="8"
+-| <a>
+-| "A"
+-
+-#data
+-<a><b><div id=1><div id=2><div id=3><div id=4><div id=5><div id=6><div id=7><div id=8><div id=9>A</a>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <b>
+-| <b>
+-| <div>
+-| id="1"
+-| <a>
+-| <div>
+-| id="2"
+-| <a>
+-| <div>
+-| id="3"
+-| <a>
+-| <div>
+-| id="4"
+-| <a>
+-| <div>
+-| id="5"
+-| <a>
+-| <div>
+-| id="6"
+-| <a>
+-| <div>
+-| id="7"
+-| <a>
+-| <div>
+-| id="8"
+-| <a>
+-| <div>
+-| id="9"
+-| "A"
+-
+-#data
+-<a><b><div id=1><div id=2><div id=3><div id=4><div id=5><div id=6><div id=7><div id=8><div id=9><div id=10>A</a>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <b>
+-| <b>
+-| <div>
+-| id="1"
+-| <a>
+-| <div>
+-| id="2"
+-| <a>
+-| <div>
+-| id="3"
+-| <a>
+-| <div>
+-| id="4"
+-| <a>
+-| <div>
+-| id="5"
+-| <a>
+-| <div>
+-| id="6"
+-| <a>
+-| <div>
+-| id="7"
+-| <a>
+-| <div>
+-| id="8"
+-| <a>
+-| <div>
+-| id="9"
+-| <div>
+-| id="10"
+-| "A"
+-
+-#data
+-<cite><b><cite><i><cite><i><cite><i><div>X</b>TEST
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (cite). Expected DOCTYPE.
+-Line: 1 Col: 46 End tag (b) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 50 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <cite>
+-| <b>
+-| <cite>
+-| <i>
+-| <cite>
+-| <i>
+-| <cite>
+-| <i>
+-| <i>
+-| <i>
+-| <div>
+-| <b>
+-| "X"
+-| "TEST"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests23.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests23.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests23.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests23.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,155 +0,0 @@
+-#data
+-<p><font size=4><font color=red><font size=4><font size=4><font size=4><font size=4><font size=4><font color=red><p>X
+-#errors
+-3: Start tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”.
+-116: Unclosed elements.
+-117: End of file seen and there were open elements.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <font>
+-| size="4"
+-| <font>
+-| color="red"
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| color="red"
+-| <p>
+-| <font>
+-| color="red"
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| color="red"
+-| "X"
+-
+-#data
+-<p><font size=4><font size=4><font size=4><font size=4><p>X
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <p>
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| "X"
+-
+-#data
+-<p><font size=4><font size=4><font size=4><font size="5"><font size=4><p>X
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| size="5"
+-| <font>
+-| size="4"
+-| <p>
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| size="5"
+-| <font>
+-| size="4"
+-| "X"
+-
+-#data
+-<p><font size=4 id=a><font size=4 id=b><font size=4><font size=4><p>X
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <font>
+-| id="a"
+-| size="4"
+-| <font>
+-| id="b"
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| <p>
+-| <font>
+-| id="a"
+-| size="4"
+-| <font>
+-| id="b"
+-| size="4"
+-| <font>
+-| size="4"
+-| <font>
+-| size="4"
+-| "X"
+-
+-#data
+-<p><b id=a><b id=a><b id=a><b><object><b id=a><b id=a>X</object><p>Y
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <b>
+-| id="a"
+-| <b>
+-| id="a"
+-| <b>
+-| id="a"
+-| <b>
+-| <object>
+-| <b>
+-| id="a"
+-| <b>
+-| id="a"
+-| "X"
+-| <p>
+-| <b>
+-| id="a"
+-| <b>
+-| id="a"
+-| <b>
+-| id="a"
+-| <b>
+-| "Y"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests24.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests24.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests24.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests24.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,79 +0,0 @@
+-#data
+-<!DOCTYPE html>≂̸
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "≂̸"
+-
+-#data
+-<!DOCTYPE html>≂̸A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "≂̸A"
+-
+-#data
+-<!DOCTYPE html>  
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| " "
+-
+-#data
+-<!DOCTYPE html>  A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| " A"
+-
+-#data
+-<!DOCTYPE html>⊂⃒
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "⊂⃒"
+-
+-#data
+-<!DOCTYPE html>⊂⃒A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "⊂⃒A"
+-
+-#data
+-<!DOCTYPE html>𝔾
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "𝔾"
+-
+-#data
+-<!DOCTYPE html>𝔾A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "𝔾A"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests25.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests25.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests25.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests25.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,219 +0,0 @@
+-#data
+-<!DOCTYPE html><body><foo>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <foo>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><area>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <area>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><base>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <base>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><basefont>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <basefont>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><bgsound>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <bgsound>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><br>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <br>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><col>A
+-#errors
+-26: Stray start tag “col”.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><command>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <command>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><embed>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <embed>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><frame>A
+-#errors
+-26: Stray start tag “frame”.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><hr>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <hr>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><img>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <img>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><input>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <input>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><keygen>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <keygen>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><link>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <link>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><meta>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <meta>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><param>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <param>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><source>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <source>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><track>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <track>
+-| "A"
+-
+-#data
+-<!DOCTYPE html><body><wbr>A
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <wbr>
+-| "A"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests26.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests26.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests26.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests26.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,313 +0,0 @@
+-#data
+-<!DOCTYPE html><body><a href='#1'><nobr>1<nobr></a><br><a href='#2'><nobr>2<nobr></a><br><a href='#3'><nobr>3<nobr></a>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| href="#1"
+-| <nobr>
+-| "1"
+-| <nobr>
+-| <nobr>
+-| <br>
+-| <a>
+-| href="#2"
+-| <a>
+-| href="#2"
+-| <nobr>
+-| "2"
+-| <nobr>
+-| <nobr>
+-| <br>
+-| <a>
+-| href="#3"
+-| <a>
+-| href="#3"
+-| <nobr>
+-| "3"
+-| <nobr>
+-
+-#data
+-<!DOCTYPE html><body><b><nobr>1<nobr></b><i><nobr>2<nobr></i>3
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <nobr>
+-| "1"
+-| <nobr>
+-| <nobr>
+-| <i>
+-| <i>
+-| <nobr>
+-| "2"
+-| <nobr>
+-| <nobr>
+-| "3"
+-
+-#data
+-<!DOCTYPE html><body><b><nobr>1<table><nobr></b><i><nobr>2<nobr></i>3
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <nobr>
+-| "1"
+-| <nobr>
+-| <i>
+-| <i>
+-| <nobr>
+-| "2"
+-| <nobr>
+-| <nobr>
+-| "3"
+-| <table>
+-
+-#data
+-<!DOCTYPE html><body><b><nobr>1<table><tr><td><nobr></b><i><nobr>2<nobr></i>3
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <nobr>
+-| "1"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <nobr>
+-| <i>
+-| <i>
+-| <nobr>
+-| "2"
+-| <nobr>
+-| <nobr>
+-| "3"
+-
+-#data
+-<!DOCTYPE html><body><b><nobr>1<div><nobr></b><i><nobr>2<nobr></i>3
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <nobr>
+-| "1"
+-| <div>
+-| <b>
+-| <nobr>
+-| <nobr>
+-| <nobr>
+-| <i>
+-| <i>
+-| <nobr>
+-| "2"
+-| <nobr>
+-| <nobr>
+-| "3"
+-
+-#data
+-<!DOCTYPE html><body><b><nobr>1<nobr></b><div><i><nobr>2<nobr></i>3
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <nobr>
+-| "1"
+-| <nobr>
+-| <div>
+-| <nobr>
+-| <i>
+-| <i>
+-| <nobr>
+-| "2"
+-| <nobr>
+-| <nobr>
+-| "3"
+-
+-#data
+-<!DOCTYPE html><body><b><nobr>1<nobr><ins></b><i><nobr>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <nobr>
+-| "1"
+-| <nobr>
+-| <ins>
+-| <nobr>
+-| <i>
+-| <i>
+-| <nobr>
+-
+-#data
+-<!DOCTYPE html><body><b><nobr>1<ins><nobr></b><i>2
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <nobr>
+-| "1"
+-| <ins>
+-| <nobr>
+-| <nobr>
+-| <i>
+-| "2"
+-
+-#data
+-<!DOCTYPE html><body><b>1<nobr></b><i><nobr>2</i>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| "1"
+-| <nobr>
+-| <nobr>
+-| <i>
+-| <i>
+-| <nobr>
+-| "2"
+-
+-#data
+-<p><code x</code></p>
+-
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <code>
+-| code=""
+-| x<=""
+-| <code>
+-| code=""
+-| x<=""
+-| "
+-"
+-
+-#data
+-<!DOCTYPE html><svg><foreignObject><p><i></p>a
+-#errors
+-45: End tag “p” seen, but there were open elements.
+-41: Unclosed element “i”.
+-46: End of file seen and there were open elements.
+-35: Unclosed element “foreignObject”.
+-20: Unclosed element “svg”.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg foreignObject>
+-| <p>
+-| <i>
+-| <i>
+-| "a"
+-
+-#data
+-<!DOCTYPE html><table><tr><td><svg><foreignObject><p><i></p>a
+-#errors
+-56: End tag “p” seen, but there were open elements.
+-52: Unclosed element “i”.
+-57: End of file seen and there were open elements.
+-46: Unclosed element “foreignObject”.
+-31: Unclosed element “svg”.
+-22: Unclosed element “table”.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <svg svg>
+-| <svg foreignObject>
+-| <p>
+-| <i>
+-| <i>
+-| "a"
+-
+-#data
+-<!DOCTYPE html><math><mtext><p><i></p>a
+-#errors
+-38: End tag “p” seen, but there were open elements.
+-34: Unclosed element “i”.
+-39: End of file in a foreign namespace context.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mtext>
+-| <p>
+-| <i>
+-| <i>
+-| "a"
+-
+-#data
+-<!DOCTYPE html><table><tr><td><math><mtext><p><i></p>a
+-#errors
+-53: End tag “p” seen, but there were open elements.
+-49: Unclosed element “i”.
+-54: End of file in a foreign namespace context.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <math math>
+-| <math mtext>
+-| <p>
+-| <i>
+-| <i>
+-| "a"
+-
+-#data
+-<!DOCTYPE html><body><div><!/div>a
+-#errors
+-29: Bogus comment.
+-34: End of file seen and there were open elements.
+-26: Unclosed element “div”.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <!-- /div -->
+-| "a"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests2.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests2.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests2.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests2.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,763 +0,0 @@
+-#data
+-<!DOCTYPE html>Test
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "Test"
+-
+-#data
+-<textarea>test</div>test
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE.
+-Line: 1 Col: 24 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| "test</div>test"
+-
+-#data
+-<table><td>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 11 Unexpected table cell start tag (td) in the table body phase.
+-Line: 1 Col: 11 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-
+-#data
+-<table><td>test</tbody></table>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 11 Unexpected table cell start tag (td) in the table body phase.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| "test"
+-
+-#data
+-<frame>test
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (frame). Expected DOCTYPE.
+-Line: 1 Col: 7 Unexpected start tag frame. Ignored.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "test"
+-
+-#data
+-<!DOCTYPE html><frameset>test
+-#errors
+-Line: 1 Col: 29 Unepxected characters in the frameset phase. Characters ignored.
+-Line: 1 Col: 29 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<!DOCTYPE html><frameset><!DOCTYPE html>
+-#errors
+-Line: 1 Col: 40 Unexpected DOCTYPE. Ignored.
+-Line: 1 Col: 40 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<!DOCTYPE html><font><p><b>test</font>
+-#errors
+-Line: 1 Col: 38 End tag (font) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 38 End tag (font) violates step 1, paragraph 3 of the adoption agency algorithm.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <font>
+-| <p>
+-| <font>
+-| <b>
+-| "test"
+-
+-#data
+-<!DOCTYPE html><dt><div><dd>
+-#errors
+-Line: 1 Col: 28 Missing end tag (div, dt).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <dt>
+-| <div>
+-| <dd>
+-
+-#data
+-<script></x
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-Line: 1 Col: 11 Unexpected end of file. Expected end tag (script).
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| "</x"
+-| <body>
+-
+-#data
+-<table><plaintext><td>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 18 Unexpected start tag (plaintext) in table context caused voodoo mode.
+-Line: 1 Col: 22 Unexpected end of file. Expected table content.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <plaintext>
+-| "<td>"
+-| <table>
+-
+-#data
+-<plaintext></plaintext>
+-#errors
+-Line: 1 Col: 11 Unexpected start tag (plaintext). Expected DOCTYPE.
+-Line: 1 Col: 23 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <plaintext>
+-| "</plaintext>"
+-
+-#data
+-<!DOCTYPE html><table><tr>TEST
+-#errors
+-Line: 1 Col: 30 Unexpected non-space characters in table context caused voodoo mode.
+-Line: 1 Col: 30 Unexpected end of file. Expected table content.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "TEST"
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<!DOCTYPE html><body t1=1><body t2=2><body t3=3 t4=4>
+-#errors
+-Line: 1 Col: 37 Unexpected start tag (body).
+-Line: 1 Col: 53 Unexpected start tag (body).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| t1="1"
+-| t2="2"
+-| t3="3"
+-| t4="4"
+-
+-#data
+-</b test
+-#errors
+-Line: 1 Col: 8 Unexpected end of file in attribute name.
+-Line: 1 Col: 8 End tag contains unexpected attributes.
+-Line: 1 Col: 8 Unexpected end tag (b). Expected DOCTYPE.
+-Line: 1 Col: 8 Unexpected end tag (b) after the (implied) root element.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html></b test<b &=&>X
+-#errors
+-Line: 1 Col: 32 Named entity didn't end with ';'.
+-Line: 1 Col: 33 End tag contains unexpected attributes.
+-Line: 1 Col: 33 Unexpected end tag (b) after the (implied) root element.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "X"
+-
+-#data
+-<!doctypehtml><scrIPt type=text/x-foobar;baz>X</SCRipt
+-#errors
+-Line: 1 Col: 9 No space after literal string 'DOCTYPE'.
+-Line: 1 Col: 54 Unexpected end of file in the tag name.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| type="text/x-foobar;baz"
+-| "X</SCRipt"
+-| <body>
+-
+-#data
+-&
+-#errors
+-Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "&"
+-
+-#data
+-&#
+-#errors
+-Line: 1 Col: 1 Numeric entity expected. Got end of file instead.
+-Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "&#"
+-
+-#data
+-&#X
+-#errors
+-Line: 1 Col: 3 Numeric entity expected but none found.
+-Line: 1 Col: 3 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "&#X"
+-
+-#data
+-&#x
+-#errors
+-Line: 1 Col: 3 Numeric entity expected but none found.
+-Line: 1 Col: 3 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "&#x"
+-
+-#data
+--
+-#errors
+-Line: 1 Col: 4 Numeric entity didn't end with ';'.
+-Line: 1 Col: 4 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "-"
+-
+-#data
+-&x-test
+-#errors
+-Line: 1 Col: 1 Named entity expected. Got none.
+-Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "&x-test"
+-
+-#data
+-<!doctypehtml><p><li>
+-#errors
+-Line: 1 Col: 9 No space after literal string 'DOCTYPE'.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <li>
+-
+-#data
+-<!doctypehtml><p><dt>
+-#errors
+-Line: 1 Col: 9 No space after literal string 'DOCTYPE'.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <dt>
+-
+-#data
+-<!doctypehtml><p><dd>
+-#errors
+-Line: 1 Col: 9 No space after literal string 'DOCTYPE'.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <dd>
+-
+-#data
+-<!doctypehtml><p><form>
+-#errors
+-Line: 1 Col: 9 No space after literal string 'DOCTYPE'.
+-Line: 1 Col: 23 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <form>
+-
+-#data
+-<!DOCTYPE html><p></P>X
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| "X"
+-
+-#data
+-&
+-#errors
+-Line: 1 Col: 4 Named entity didn't end with ';'.
+-Line: 1 Col: 4 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "&"
+-
+-#data
+-&AMp;
+-#errors
+-Line: 1 Col: 1 Named entity expected. Got none.
+-Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "&AMp;"
+-
+-#data
+-<!DOCTYPE html><html><head></head><body><thisISasillyTESTelementNameToMakeSureCrazyTagNamesArePARSEDcorrectLY>
+-#errors
+-Line: 1 Col: 110 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <thisisasillytestelementnametomakesurecrazytagnamesareparsedcorrectly>
+-
+-#data
+-<!DOCTYPE html>X</body>X
+-#errors
+-Line: 1 Col: 24 Unexpected non-space characters in the after body phase.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "XX"
+-
+-#data
+-<!DOCTYPE html><!-- X
+-#errors
+-Line: 1 Col: 21 Unexpected end of file in comment.
+-#document
+-| <!DOCTYPE html>
+-| <!-- X -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html><table><caption>test TEST</caption><td>test
+-#errors
+-Line: 1 Col: 54 Unexpected table cell start tag (td) in the table body phase.
+-Line: 1 Col: 58 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| "test TEST"
+-| <tbody>
+-| <tr>
+-| <td>
+-| "test"
+-
+-#data
+-<!DOCTYPE html><select><option><optgroup>
+-#errors
+-Line: 1 Col: 41 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <option>
+-| <optgroup>
+-
+-#data
+-<!DOCTYPE html><select><optgroup><option></optgroup><option><select><option>
+-#errors
+-Line: 1 Col: 68 Unexpected select start tag in the select phase treated as select end tag.
+-Line: 1 Col: 76 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <optgroup>
+-| <option>
+-| <option>
+-| <option>
+-
+-#data
+-<!DOCTYPE html><select><optgroup><option><optgroup>
+-#errors
+-Line: 1 Col: 51 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <optgroup>
+-| <option>
+-| <optgroup>
+-
+-#data
+-<!DOCTYPE html><datalist><option>foo</datalist>bar
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <datalist>
+-| <option>
+-| "foo"
+-| "bar"
+-
+-#data
+-<!DOCTYPE html><font><input><input></font>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <font>
+-| <input>
+-| <input>
+-
+-#data
+-<!DOCTYPE html><!-- XXX - XXX -->
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <!-- XXX - XXX -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html><!-- XXX - XXX
+-#errors
+-Line: 1 Col: 29 Unexpected end of file in comment (-)
+-#document
+-| <!DOCTYPE html>
+-| <!-- XXX - XXX -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html><!-- XXX - XXX - XXX -->
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <!-- XXX - XXX - XXX -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<isindex test=x name=x>
+-#errors
+-Line: 1 Col: 23 Unexpected start tag (isindex). Expected DOCTYPE.
+-Line: 1 Col: 23 Unexpected start tag isindex. Don't use it!
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <form>
+-| <hr>
+-| <label>
+-| "This is a searchable index. Enter search keywords: "
+-| <input>
+-| name="isindex"
+-| test="x"
+-| <hr>
+-
+-#data
+-test
+-test
+-#errors
+-Line: 2 Col: 4 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "test
+-test"
+-
+-#data
+-<!DOCTYPE html><body><title>test</body></title>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <title>
+-| "test</body>"
+-
+-#data
+-<!DOCTYPE html><body><title>X</title><meta name=z><link rel=foo><style>
+-x { content:"</style" } </style>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <title>
+-| "X"
+-| <meta>
+-| name="z"
+-| <link>
+-| rel="foo"
+-| <style>
+-| "
+-x { content:"</style" } "
+-
+-#data
+-<!DOCTYPE html><select><optgroup></optgroup></select>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <optgroup>
+-
+-#data
+-
+-
+-#errors
+-Line: 2 Col: 1 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html> <html>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html><script>
+-</script> <title>x</title> </head>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <script>
+-| "
+-"
+-| " "
+-| <title>
+-| "x"
+-| " "
+-| <body>
+-
+-#data
+-<!DOCTYPE html><html><body><html id=x>
+-#errors
+-Line: 1 Col: 38 html needs to be the first start tag.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| id="x"
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html>X</body><html id="x">
+-#errors
+-Line: 1 Col: 36 Unexpected start tag token (html) in the after body phase.
+-Line: 1 Col: 36 html needs to be the first start tag.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| id="x"
+-| <head>
+-| <body>
+-| "X"
+-
+-#data
+-<!DOCTYPE html><head><html id=x>
+-#errors
+-Line: 1 Col: 32 html needs to be the first start tag.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| id="x"
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html>X</html>X
+-#errors
+-Line: 1 Col: 24 Unexpected non-space characters in the after body phase.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "XX"
+-
+-#data
+-<!DOCTYPE html>X</html>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "X "
+-
+-#data
+-<!DOCTYPE html>X</html><p>X
+-#errors
+-Line: 1 Col: 26 Unexpected start tag (p).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "X"
+-| <p>
+-| "X"
+-
+-#data
+-<!DOCTYPE html>X<p/x/y/z>
+-#errors
+-Line: 1 Col: 19 Expected a > after the /.
+-Line: 1 Col: 21 Solidus (/) incorrectly placed in tag.
+-Line: 1 Col: 23 Solidus (/) incorrectly placed in tag.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "X"
+-| <p>
+-| x=""
+-| y=""
+-| z=""
+-
+-#data
+-<!DOCTYPE html><!--x--
+-#errors
+-Line: 1 Col: 22 Unexpected end of file in comment (--).
+-#document
+-| <!DOCTYPE html>
+-| <!-- x -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE html><table><tr><td></p></table>
+-#errors
+-Line: 1 Col: 34 Unexpected end tag (p). Ignored.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <p>
+-
+-#data
+-<!DOCTYPE <!DOCTYPE HTML>><!--<!--x-->-->
+-#errors
+-Line: 1 Col: 20 Expected space or '>'. Got ''
+-Line: 1 Col: 25 Erroneous DOCTYPE.
+-Line: 1 Col: 35 Unexpected character in comment found.
+-#document
+-| <!DOCTYPE <!doctype>
+-| <html>
+-| <head>
+-| <body>
+-| ">"
+-| <!-- <!--x -->
+-| "-->"
+-
+-#data
+-<!doctype html><div><form></form><div></div></div>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <form>
+-| <div>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests3.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests3.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests3.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests3.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,305 +0,0 @@
+-#data
+-<head></head><style></style>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+-Line: 1 Col: 20 Unexpected start tag (style) that can be in head. Moved.
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| <body>
+-
+-#data
+-<head></head><script></script>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+-Line: 1 Col: 21 Unexpected start tag (script) that can be in head. Moved.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| <body>
+-
+-#data
+-<head></head><!-- --><style></style><!-- --><script></script>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+-Line: 1 Col: 28 Unexpected start tag (style) that can be in head. Moved.
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| <script>
+-| <!-- -->
+-| <!-- -->
+-| <body>
+-
+-#data
+-<head></head><!-- -->x<style></style><!-- --><script></script>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (head). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <!-- -->
+-| <body>
+-| "x"
+-| <style>
+-| <!-- -->
+-| <script>
+-
+-#data
+-<!DOCTYPE html><html><head></head><body><pre>
+-</pre></body></html>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <pre>
+-
+-#data
+-<!DOCTYPE html><html><head></head><body><pre>
+-foo</pre></body></html>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <pre>
+-| "foo"
+-
+-#data
+-<!DOCTYPE html><html><head></head><body><pre>
+-
+-foo</pre></body></html>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <pre>
+-| "
+-foo"
+-
+-#data
+-<!DOCTYPE html><html><head></head><body><pre>
+-foo
+-</pre></body></html>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <pre>
+-| "foo
+-"
+-
+-#data
+-<!DOCTYPE html><html><head></head><body><pre>x</pre><span>
+-</span></body></html>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <pre>
+-| "x"
+-| <span>
+-| "
+-"
+-
+-#data
+-<!DOCTYPE html><html><head></head><body><pre>x
+-y</pre></body></html>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <pre>
+-| "x
+-y"
+-
+-#data
+-<!DOCTYPE html><html><head></head><body><pre>x<div>
+-y</pre></body></html>
+-#errors
+-Line: 2 Col: 7 End tag (pre) seen too early. Expected other end tag.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <pre>
+-| "x"
+-| <div>
+-| "
+-y"
+-
+-#data
+-<!DOCTYPE html><pre>

A</pre>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <pre>
+-| "
+-A"
+-
+-#data
+-<!DOCTYPE html><HTML><META><HEAD></HEAD></HTML>
+-#errors
+-Line: 1 Col: 33 Unexpected start tag head in existing head. Ignored.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <meta>
+-| <body>
+-
+-#data
+-<!DOCTYPE html><HTML><HEAD><head></HEAD></HTML>
+-#errors
+-Line: 1 Col: 33 Unexpected start tag head in existing head. Ignored.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<textarea>foo<span>bar</span><i>baz
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE.
+-Line: 1 Col: 35 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| "foo<span>bar</span><i>baz"
+-
+-#data
+-<title>foo<span>bar</em><i>baz
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
+-Line: 1 Col: 30 Unexpected end of file. Expected end tag (title).
+-#document
+-| <html>
+-| <head>
+-| <title>
+-| "foo<span>bar</em><i>baz"
+-| <body>
+-
+-#data
+-<!DOCTYPE html><textarea>
+-</textarea>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-
+-#data
+-<!DOCTYPE html><textarea>
+-foo</textarea>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| "foo"
+-
+-#data
+-<!DOCTYPE html><textarea>
+-
+-foo</textarea>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| "
+-foo"
+-
+-#data
+-<!DOCTYPE html><html><head></head><body><ul><li><div><p><li></ul></body></html>
+-#errors
+-Line: 1 Col: 60 Missing end tag (div, li).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <ul>
+-| <li>
+-| <div>
+-| <p>
+-| <li>
+-
+-#data
+-<!doctype html><nobr><nobr><nobr>
+-#errors
+-Line: 1 Col: 27 Unexpected start tag (nobr) implies end tag (nobr).
+-Line: 1 Col: 33 Unexpected start tag (nobr) implies end tag (nobr).
+-Line: 1 Col: 33 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <nobr>
+-| <nobr>
+-| <nobr>
+-
+-#data
+-<!doctype html><nobr><nobr></nobr><nobr>
+-#errors
+-Line: 1 Col: 27 Unexpected start tag (nobr) implies end tag (nobr).
+-Line: 1 Col: 40 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <nobr>
+-| <nobr>
+-| <nobr>
+-
+-#data
+-<!doctype html><html><body><p><table></table></body></html>
+-#errors
+-Not known
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <table>
+-
+-#data
+-<p><table></table>
+-#errors
+-Not known
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <table>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests4.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests4.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests4.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests4.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,59 +0,0 @@
+-#data
+-direct div content
+-#errors
+-#document-fragment
+-div
+-#document
+-| "direct div content"
+-
+-#data
+-direct textarea content
+-#errors
+-#document-fragment
+-textarea
+-#document
+-| "direct textarea content"
+-
+-#data
+-textarea content with <em>pseudo</em> <foo>markup
+-#errors
+-#document-fragment
+-textarea
+-#document
+-| "textarea content with <em>pseudo</em> <foo>markup"
+-
+-#data
+-this is CDATA inside a <style> element
+-#errors
+-#document-fragment
+-style
+-#document
+-| "this is CDATA inside a <style> element"
+-
+-#data
+-</plaintext>
+-#errors
+-#document-fragment
+-plaintext
+-#document
+-| "</plaintext>"
+-
+-#data
+-setting html's innerHTML
+-#errors
+-Line: 1 Col: 24 Unexpected EOF in inner html mode.
+-#document-fragment
+-html
+-#document
+-| <head>
+-| <body>
+-| "setting html's innerHTML"
+-
+-#data
+-<title>setting head's innerHTML</title>
+-#errors
+-#document-fragment
+-head
+-#document
+-| <title>
+-| "setting head's innerHTML"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests5.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests5.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests5.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests5.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,191 +0,0 @@
+-#data
+-<style> <!-- </style>x
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-Line: 1 Col: 22 Unexpected end of file. Expected end tag (style).
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| " <!-- "
+-| <body>
+-| "x"
+-
+-#data
+-<style> <!-- </style> --> </style>x
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| " <!-- "
+-| " "
+-| <body>
+-| "--> x"
+-
+-#data
+-<style> <!--> </style>x
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| " <!--> "
+-| <body>
+-| "x"
+-
+-#data
+-<style> <!---> </style>x
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| " <!---> "
+-| <body>
+-| "x"
+-
+-#data
+-<iframe> <!---> </iframe>x
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (iframe). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <iframe>
+-| " <!---> "
+-| "x"
+-
+-#data
+-<iframe> <!--- </iframe>->x</iframe> --> </iframe>x
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (iframe). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <iframe>
+-| " <!--- "
+-| "->x --> x"
+-
+-#data
+-<script> <!-- </script> --> </script>x
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (script). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <script>
+-| " <!-- "
+-| " "
+-| <body>
+-| "--> x"
+-
+-#data
+-<title> <!-- </title> --> </title>x
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <title>
+-| " <!-- "
+-| " "
+-| <body>
+-| "--> x"
+-
+-#data
+-<textarea> <!--- </textarea>->x</textarea> --> </textarea>x
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (textarea). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <textarea>
+-| " <!--- "
+-| "->x --> x"
+-
+-#data
+-<style> <!</-- </style>x
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (style). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| " <!</-- "
+-| <body>
+-| "x"
+-
+-#data
+-<p><xmp></xmp>
+-#errors
+-XXX: Unknown
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <xmp>
+-
+-#data
+-<xmp> <!-- > --> </xmp>
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (xmp). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <xmp>
+-| " <!-- > --> "
+-
+-#data
+-<title>&</title>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <title>
+-| "&"
+-| <body>
+-
+-#data
+-<title><!--&--></title>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <title>
+-| "<!--&-->"
+-| <body>
+-
+-#data
+-<title><!--</title>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (title). Expected DOCTYPE.
+-Line: 1 Col: 19 Unexpected end of file. Expected end tag (title).
+-#document
+-| <html>
+-| <head>
+-| <title>
+-| "<!--"
+-| <body>
+-
+-#data
+-<noscript><!--</noscript>--></noscript>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (noscript). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <noscript>
+-| "<!--"
+-| <body>
+-| "-->"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests6.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests6.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests6.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests6.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,663 +0,0 @@
+-#data
+-<!doctype html></head> <head>
+-#errors
+-Line: 1 Col: 29 Unexpected start tag head. Ignored.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| " "
+-| <body>
+-
+-#data
+-<!doctype html><form><div></form><div>
+-#errors
+-33: End tag "form" seen but there were unclosed elements.
+-38: End of file seen and there were open elements.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <form>
+-| <div>
+-| <div>
+-
+-#data
+-<!doctype html><title>&</title>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <title>
+-| "&"
+-| <body>
+-
+-#data
+-<!doctype html><title><!--&--></title>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <title>
+-| "<!--&-->"
+-| <body>
+-
+-#data
+-<!doctype>
+-#errors
+-Line: 1 Col: 9 No space after literal string 'DOCTYPE'.
+-Line: 1 Col: 10 Unexpected > character. Expected DOCTYPE name.
+-Line: 1 Col: 10 Erroneous DOCTYPE.
+-#document
+-| <!DOCTYPE >
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!---x
+-#errors
+-Line: 1 Col: 6 Unexpected end of file in comment.
+-Line: 1 Col: 6 Unexpected End of file. Expected DOCTYPE.
+-#document
+-| <!-- -x -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<body>
+-<div>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (body).
+-Line: 2 Col: 5 Expected closing tag. Unexpected end of file.
+-#document-fragment
+-div
+-#document
+-| "
+-"
+-| <div>
+-
+-#data
+-<frameset></frameset>
+-foo
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
+-Line: 2 Col: 3 Unexpected non-space characters in the after frameset phase. Ignored.
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-| "
+-"
+-
+-#data
+-<frameset></frameset>
+-<noframes>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
+-Line: 2 Col: 10 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-| "
+-"
+-| <noframes>
+-
+-#data
+-<frameset></frameset>
+-<div>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
+-Line: 2 Col: 5 Unexpected start tag (div) in the after frameset phase. Ignored.
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-| "
+-"
+-
+-#data
+-<frameset></frameset>
+-</html>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-| "
+-"
+-
+-#data
+-<frameset></frameset>
+-</div>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
+-Line: 2 Col: 6 Unexpected end tag (div) in the after frameset phase. Ignored.
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-| "
+-"
+-
+-#data
+-<form><form>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (form). Expected DOCTYPE.
+-Line: 1 Col: 12 Unexpected start tag (form).
+-Line: 1 Col: 12 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <form>
+-
+-#data
+-<button><button>
+-#errors
+-Line: 1 Col: 8 Unexpected start tag (button). Expected DOCTYPE.
+-Line: 1 Col: 16 Unexpected start tag (button) implies end tag (button).
+-Line: 1 Col: 16 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <button>
+-| <button>
+-
+-#data
+-<table><tr><td></th>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 20 Unexpected end tag (th). Ignored.
+-Line: 1 Col: 20 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-
+-#data
+-<table><caption><td>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 20 Unexpected end tag (td). Ignored.
+-Line: 1 Col: 20 Unexpected table cell start tag (td) in the table body phase.
+-Line: 1 Col: 20 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <tbody>
+-| <tr>
+-| <td>
+-
+-#data
+-<table><caption><div>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 21 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <div>
+-
+-#data
+-</caption><div>
+-#errors
+-Line: 1 Col: 10 Unexpected end tag (caption). Ignored.
+-Line: 1 Col: 15 Expected closing tag. Unexpected end of file.
+-#document-fragment
+-caption
+-#document
+-| <div>
+-
+-#data
+-<table><caption><div></caption>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 31 Unexpected end tag (caption). Missing end tag (div).
+-Line: 1 Col: 31 Unexpected end of file. Expected table content.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <div>
+-
+-#data
+-<table><caption></table>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 24 Unexpected end table tag in caption. Generates implied end caption.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-
+-#data
+-</table><div>
+-#errors
+-Line: 1 Col: 8 Unexpected end table tag in caption. Generates implied end caption.
+-Line: 1 Col: 8 Unexpected end tag (caption). Ignored.
+-Line: 1 Col: 13 Expected closing tag. Unexpected end of file.
+-#document-fragment
+-caption
+-#document
+-| <div>
+-
+-#data
+-<table><caption></body></col></colgroup></html></tbody></td></tfoot></th></thead></tr>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 23 Unexpected end tag (body). Ignored.
+-Line: 1 Col: 29 Unexpected end tag (col). Ignored.
+-Line: 1 Col: 40 Unexpected end tag (colgroup). Ignored.
+-Line: 1 Col: 47 Unexpected end tag (html). Ignored.
+-Line: 1 Col: 55 Unexpected end tag (tbody). Ignored.
+-Line: 1 Col: 60 Unexpected end tag (td). Ignored.
+-Line: 1 Col: 68 Unexpected end tag (tfoot). Ignored.
+-Line: 1 Col: 73 Unexpected end tag (th). Ignored.
+-Line: 1 Col: 81 Unexpected end tag (thead). Ignored.
+-Line: 1 Col: 86 Unexpected end tag (tr). Ignored.
+-Line: 1 Col: 86 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-
+-#data
+-<table><caption><div></div>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 27 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <div>
+-
+-#data
+-<table><tr><td></body></caption></col></colgroup></html>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 22 Unexpected end tag (body). Ignored.
+-Line: 1 Col: 32 Unexpected end tag (caption). Ignored.
+-Line: 1 Col: 38 Unexpected end tag (col). Ignored.
+-Line: 1 Col: 49 Unexpected end tag (colgroup). Ignored.
+-Line: 1 Col: 56 Unexpected end tag (html). Ignored.
+-Line: 1 Col: 56 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-
+-#data
+-</table></tbody></tfoot></thead></tr><div>
+-#errors
+-Line: 1 Col: 8 Unexpected end tag (table). Ignored.
+-Line: 1 Col: 16 Unexpected end tag (tbody). Ignored.
+-Line: 1 Col: 24 Unexpected end tag (tfoot). Ignored.
+-Line: 1 Col: 32 Unexpected end tag (thead). Ignored.
+-Line: 1 Col: 37 Unexpected end tag (tr). Ignored.
+-Line: 1 Col: 42 Expected closing tag. Unexpected end of file.
+-#document-fragment
+-td
+-#document
+-| <div>
+-
+-#data
+-<table><colgroup>foo
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 20 Unexpected non-space characters in table context caused voodoo mode.
+-Line: 1 Col: 20 Unexpected end of file. Expected table content.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "foo"
+-| <table>
+-| <colgroup>
+-
+-#data
+-foo<col>
+-#errors
+-Line: 1 Col: 3 Unexpected end tag (colgroup). Ignored.
+-#document-fragment
+-colgroup
+-#document
+-| <col>
+-
+-#data
+-<table><colgroup></col>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 23 This element (col) has no end tag.
+-Line: 1 Col: 23 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <colgroup>
+-
+-#data
+-<frameset><div>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
+-Line: 1 Col: 15 Unexpected start tag token (div) in the frameset phase. Ignored.
+-Line: 1 Col: 15 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-</frameset><frame>
+-#errors
+-Line: 1 Col: 11 Unexpected end tag token (frameset) in the frameset phase (innerHTML).
+-#document-fragment
+-frameset
+-#document
+-| <frame>
+-
+-#data
+-<frameset></div>
+-#errors
+-Line: 1 Col: 10 Unexpected start tag (frameset). Expected DOCTYPE.
+-Line: 1 Col: 16 Unexpected end tag token (div) in the frameset phase. Ignored.
+-Line: 1 Col: 16 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-</body><div>
+-#errors
+-Line: 1 Col: 7 Unexpected end tag (body). Ignored.
+-Line: 1 Col: 12 Expected closing tag. Unexpected end of file.
+-#document-fragment
+-body
+-#document
+-| <div>
+-
+-#data
+-<table><tr><div>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 16 Unexpected start tag (div) in table context caused voodoo mode.
+-Line: 1 Col: 16 Unexpected end of file. Expected table content.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-</tr><td>
+-#errors
+-Line: 1 Col: 5 Unexpected end tag (tr). Ignored.
+-#document-fragment
+-tr
+-#document
+-| <td>
+-
+-#data
+-</tbody></tfoot></thead><td>
+-#errors
+-Line: 1 Col: 8 Unexpected end tag (tbody). Ignored.
+-Line: 1 Col: 16 Unexpected end tag (tfoot). Ignored.
+-Line: 1 Col: 24 Unexpected end tag (thead). Ignored.
+-#document-fragment
+-tr
+-#document
+-| <td>
+-
+-#data
+-<table><tr><div><td>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 16 Unexpected start tag (div) in table context caused voodoo mode.
+-Line: 1 Col: 20 Unexpected implied end tag (div) in the table row phase.
+-Line: 1 Col: 20 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-
+-#data
+-<caption><col><colgroup><tbody><tfoot><thead><tr>
+-#errors
+-Line: 1 Col: 9 Unexpected start tag (caption).
+-Line: 1 Col: 14 Unexpected start tag (col).
+-Line: 1 Col: 24 Unexpected start tag (colgroup).
+-Line: 1 Col: 31 Unexpected start tag (tbody).
+-Line: 1 Col: 38 Unexpected start tag (tfoot).
+-Line: 1 Col: 45 Unexpected start tag (thead).
+-Line: 1 Col: 49 Unexpected end of file. Expected table content.
+-#document-fragment
+-tbody
+-#document
+-| <tr>
+-
+-#data
+-<table><tbody></thead>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 22 Unexpected end tag (thead) in the table body phase. Ignored.
+-Line: 1 Col: 22 Unexpected end of file. Expected table content.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-
+-#data
+-</table><tr>
+-#errors
+-Line: 1 Col: 8 Unexpected end tag (table). Ignored.
+-Line: 1 Col: 12 Unexpected end of file. Expected table content.
+-#document-fragment
+-tbody
+-#document
+-| <tr>
+-
+-#data
+-<table><tbody></body></caption></col></colgroup></html></td></th></tr>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 21 Unexpected end tag (body) in the table body phase. Ignored.
+-Line: 1 Col: 31 Unexpected end tag (caption) in the table body phase. Ignored.
+-Line: 1 Col: 37 Unexpected end tag (col) in the table body phase. Ignored.
+-Line: 1 Col: 48 Unexpected end tag (colgroup) in the table body phase. Ignored.
+-Line: 1 Col: 55 Unexpected end tag (html) in the table body phase. Ignored.
+-Line: 1 Col: 60 Unexpected end tag (td) in the table body phase. Ignored.
+-Line: 1 Col: 65 Unexpected end tag (th) in the table body phase. Ignored.
+-Line: 1 Col: 70 Unexpected end tag (tr) in the table body phase. Ignored.
+-Line: 1 Col: 70 Unexpected end of file. Expected table content.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-
+-#data
+-<table><tbody></div>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 20 Unexpected end tag (div) in table context caused voodoo mode.
+-Line: 1 Col: 20 End tag (div) seen too early. Expected other end tag.
+-Line: 1 Col: 20 Unexpected end of file. Expected table content.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-
+-#data
+-<table><table>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 14 Unexpected start tag (table) implies end tag (table).
+-Line: 1 Col: 14 Unexpected end of file. Expected table content.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <table>
+-
+-#data
+-<table></body></caption></col></colgroup></html></tbody></td></tfoot></th></thead></tr>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 14 Unexpected end tag (body). Ignored.
+-Line: 1 Col: 24 Unexpected end tag (caption). Ignored.
+-Line: 1 Col: 30 Unexpected end tag (col). Ignored.
+-Line: 1 Col: 41 Unexpected end tag (colgroup). Ignored.
+-Line: 1 Col: 48 Unexpected end tag (html). Ignored.
+-Line: 1 Col: 56 Unexpected end tag (tbody). Ignored.
+-Line: 1 Col: 61 Unexpected end tag (td). Ignored.
+-Line: 1 Col: 69 Unexpected end tag (tfoot). Ignored.
+-Line: 1 Col: 74 Unexpected end tag (th). Ignored.
+-Line: 1 Col: 82 Unexpected end tag (thead). Ignored.
+-Line: 1 Col: 87 Unexpected end tag (tr). Ignored.
+-Line: 1 Col: 87 Unexpected end of file. Expected table content.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-
+-#data
+-</table><tr>
+-#errors
+-Line: 1 Col: 8 Unexpected end tag (table). Ignored.
+-Line: 1 Col: 12 Unexpected end of file. Expected table content.
+-#document-fragment
+-table
+-#document
+-| <tbody>
+-| <tr>
+-
+-#data
+-<body></body></html>
+-#errors
+-Line: 1 Col: 20 Unexpected html end tag in inner html mode.
+-Line: 1 Col: 20 Unexpected EOF in inner html mode.
+-#document-fragment
+-html
+-#document
+-| <head>
+-| <body>
+-
+-#data
+-<html><frameset></frameset></html>
+-#errors
+-Line: 1 Col: 6 Unexpected start tag (html). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-| " "
+-
+-#data
+-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"><html></html>
+-#errors
+-Line: 1 Col: 50 Erroneous DOCTYPE.
+-Line: 1 Col: 63 Unexpected end tag (html) after the (implied) root element.
+-#document
+-| <!DOCTYPE html "-//W3C//DTD HTML 4.01//EN" "">
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<param><frameset></frameset>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (param). Expected DOCTYPE.
+-Line: 1 Col: 17 Unexpected start tag (frameset).
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<source><frameset></frameset>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (source). Expected DOCTYPE.
+-Line: 1 Col: 17 Unexpected start tag (frameset).
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<track><frameset></frameset>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (track). Expected DOCTYPE.
+-Line: 1 Col: 17 Unexpected start tag (frameset).
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-</html><frameset></frameset>
+-#errors
+-7: End tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”.
+-17: Stray “frameset” start tag.
+-17: “frameset” start tag seen.
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-</body><frameset></frameset>
+-#errors
+-7: End tag seen without seeing a doctype first. Expected “<!DOCTYPE html>”.
+-17: Stray “frameset” start tag.
+-17: “frameset” start tag seen.
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests7.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests7.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests7.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests7.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,390 +0,0 @@
+-#data
+-<!doctype html><body><title>X</title>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <title>
+-| "X"
+-
+-#data
+-<!doctype html><table><title>X</title></table>
+-#errors
+-Line: 1 Col: 29 Unexpected start tag (title) in table context caused voodoo mode.
+-Line: 1 Col: 38 Unexpected end tag (title) in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <title>
+-| "X"
+-| <table>
+-
+-#data
+-<!doctype html><head></head><title>X</title>
+-#errors
+-Line: 1 Col: 35 Unexpected start tag (title) that can be in head. Moved.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <title>
+-| "X"
+-| <body>
+-
+-#data
+-<!doctype html></head><title>X</title>
+-#errors
+-Line: 1 Col: 29 Unexpected start tag (title) that can be in head. Moved.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <title>
+-| "X"
+-| <body>
+-
+-#data
+-<!doctype html><table><meta></table>
+-#errors
+-Line: 1 Col: 28 Unexpected start tag (meta) in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <meta>
+-| <table>
+-
+-#data
+-<!doctype html><table>X<tr><td><table> <meta></table></table>
+-#errors
+-Line: 1 Col: 23 Unexpected non-space characters in table context caused voodoo mode.
+-Line: 1 Col: 45 Unexpected start tag (meta) in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "X"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <meta>
+-| <table>
+-| " "
+-
+-#data
+-<!doctype html><html> <head>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!doctype html> <head>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!doctype html><table><style> <tr>x </style> </table>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <style>
+-| " <tr>x "
+-| " "
+-
+-#data
+-<!doctype html><table><TBODY><script> <tr>x </script> </table>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <script>
+-| " <tr>x "
+-| " "
+-
+-#data
+-<!doctype html><p><applet><p>X</p></applet>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <applet>
+-| <p>
+-| "X"
+-
+-#data
+-<!doctype html><listing>
+-X</listing>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <listing>
+-| "X"
+-
+-#data
+-<!doctype html><select><input>X
+-#errors
+-Line: 1 Col: 30 Unexpected input start tag in the select phase.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <input>
+-| "X"
+-
+-#data
+-<!doctype html><select><select>X
+-#errors
+-Line: 1 Col: 31 Unexpected select start tag in the select phase treated as select end tag.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| "X"
+-
+-#data
+-<!doctype html><table><input type=hidDEN></table>
+-#errors
+-Line: 1 Col: 41 Unexpected input with type hidden in table context.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <input>
+-| type="hidDEN"
+-
+-#data
+-<!doctype html><table>X<input type=hidDEN></table>
+-#errors
+-Line: 1 Col: 23 Unexpected non-space characters in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| "X"
+-| <table>
+-| <input>
+-| type="hidDEN"
+-
+-#data
+-<!doctype html><table> <input type=hidDEN></table>
+-#errors
+-Line: 1 Col: 43 Unexpected input with type hidden in table context.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| " "
+-| <input>
+-| type="hidDEN"
+-
+-#data
+-<!doctype html><table> <input type='hidDEN'></table>
+-#errors
+-Line: 1 Col: 45 Unexpected input with type hidden in table context.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| " "
+-| <input>
+-| type="hidDEN"
+-
+-#data
+-<!doctype html><table><input type=" hidden"><input type=hidDEN></table>
+-#errors
+-Line: 1 Col: 44 Unexpected start tag (input) in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <input>
+-| type=" hidden"
+-| <table>
+-| <input>
+-| type="hidDEN"
+-
+-#data
+-<!doctype html><table><select>X<tr>
+-#errors
+-Line: 1 Col: 30 Unexpected start tag (select) in table context caused voodoo mode.
+-Line: 1 Col: 35 Unexpected table element start tag (trs) in the select in table phase.
+-Line: 1 Col: 35 Unexpected end of file. Expected table content.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| "X"
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<!doctype html><select>X</select>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| "X"
+-
+-#data
+-<!DOCTYPE hTmL><html></html>
+-#errors
+-Line: 1 Col: 28 Unexpected end tag (html) after the (implied) root element.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<!DOCTYPE HTML><html></html>
+-#errors
+-Line: 1 Col: 28 Unexpected end tag (html) after the (implied) root element.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<body>X</body></body>
+-#errors
+-Line: 1 Col: 21 Unexpected end tag token (body) in the after body phase.
+-Line: 1 Col: 21 Unexpected EOF in inner html mode.
+-#document-fragment
+-html
+-#document
+-| <head>
+-| <body>
+-| "X"
+-
+-#data
+-<div><p>a</x> b
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 13 Unexpected end tag (x). Ignored.
+-Line: 1 Col: 15 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <p>
+-| "a b"
+-
+-#data
+-<table><tr><td><code></code> </table>
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <code>
+-| " "
+-
+-#data
+-<table><b><tr><td>aaa</td></tr>bbb</table>ccc
+-#errors
+-XXX: Fix me
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <b>
+-| "bbb"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| "aaa"
+-| <b>
+-| "ccc"
+-
+-#data
+-A<table><tr> B</tr> B</table>
+-#errors
+-XXX: Fix me
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "A B B"
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-A<table><tr> B</tr> </em>C</table>
+-#errors
+-XXX: Fix me
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "A BC"
+-| <table>
+-| <tbody>
+-| <tr>
+-| " "
+-
+-#data
+-<select><keygen>
+-#errors
+-Not known
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <keygen>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests8.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests8.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests8.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests8.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,148 +0,0 @@
+-#data
+-<div>
+-<div></div>
+-</span>x
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 3 Col: 7 Unexpected end tag (span). Ignored.
+-Line: 3 Col: 8 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "
+-"
+-| <div>
+-| "
+-x"
+-
+-#data
+-<div>x<div></div>
+-</span>x
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 2 Col: 7 Unexpected end tag (span). Ignored.
+-Line: 2 Col: 8 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "x"
+-| <div>
+-| "
+-x"
+-
+-#data
+-<div>x<div></div>x</span>x
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 25 Unexpected end tag (span). Ignored.
+-Line: 1 Col: 26 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "x"
+-| <div>
+-| "xx"
+-
+-#data
+-<div>x<div></div>y</span>z
+-#errors
+-Line: 1 Col: 5 Unexpected start tag (div). Expected DOCTYPE.
+-Line: 1 Col: 25 Unexpected end tag (span). Ignored.
+-Line: 1 Col: 26 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "x"
+-| <div>
+-| "yz"
+-
+-#data
+-<table><div>x<div></div>x</span>x
+-#errors
+-Line: 1 Col: 7 Unexpected start tag (table). Expected DOCTYPE.
+-Line: 1 Col: 12 Unexpected start tag (div) in table context caused voodoo mode.
+-Line: 1 Col: 18 Unexpected start tag (div) in table context caused voodoo mode.
+-Line: 1 Col: 24 Unexpected end tag (div) in table context caused voodoo mode.
+-Line: 1 Col: 32 Unexpected end tag (span) in table context caused voodoo mode.
+-Line: 1 Col: 32 Unexpected end tag (span). Ignored.
+-Line: 1 Col: 33 Unexpected end of file. Expected table content.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "x"
+-| <div>
+-| "xx"
+-| <table>
+-
+-#data
+-x<table>x
+-#errors
+-Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
+-Line: 1 Col: 9 Unexpected non-space characters in table context caused voodoo mode.
+-Line: 1 Col: 9 Unexpected end of file. Expected table content.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "xx"
+-| <table>
+-
+-#data
+-x<table><table>x
+-#errors
+-Line: 1 Col: 1 Unexpected non-space characters. Expected DOCTYPE.
+-Line: 1 Col: 15 Unexpected start tag (table) implies end tag (table).
+-Line: 1 Col: 16 Unexpected non-space characters in table context caused voodoo mode.
+-Line: 1 Col: 16 Unexpected end of file. Expected table content.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "x"
+-| <table>
+-| "x"
+-| <table>
+-
+-#data
+-<b>a<div></div><div></b>y
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (b). Expected DOCTYPE.
+-Line: 1 Col: 24 End tag (b) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 25 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| "a"
+-| <div>
+-| <div>
+-| <b>
+-| "y"
+-
+-#data
+-<a><div><p></a>
+-#errors
+-Line: 1 Col: 3 Unexpected start tag (a). Expected DOCTYPE.
+-Line: 1 Col: 15 End tag (a) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 15 End tag (a) violates step 1, paragraph 3 of the adoption agency algorithm.
+-Line: 1 Col: 15 Expected closing tag. Unexpected end of file.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <div>
+-| <a>
+-| <p>
+-| <a>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests9.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests9.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests9.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests9.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,457 +0,0 @@
+-#data
+-<!DOCTYPE html><math></math>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-
+-#data
+-<!DOCTYPE html><body><math></math>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-
+-#data
+-<!DOCTYPE html><math><mi>
+-#errors
+-25: End of file in a foreign namespace context.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mi>
+-
+-#data
+-<!DOCTYPE html><math><annotation-xml><svg><u>
+-#errors
+-45: HTML start tag “u” in a foreign namespace context.
+-45: End of file seen and there were open elements.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math annotation-xml>
+-| <svg svg>
+-| <u>
+-
+-#data
+-<!DOCTYPE html><body><select><math></math></select>
+-#errors
+-Line: 1 Col: 35 Unexpected start tag token (math) in the select phase. Ignored.
+-Line: 1 Col: 42 Unexpected end tag (math) in the select phase. Ignored.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-
+-#data
+-<!DOCTYPE html><body><select><option><math></math></option></select>
+-#errors
+-Line: 1 Col: 43 Unexpected start tag token (math) in the select phase. Ignored.
+-Line: 1 Col: 50 Unexpected end tag (math) in the select phase. Ignored.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <option>
+-
+-#data
+-<!DOCTYPE html><body><table><math></math></table>
+-#errors
+-Line: 1 Col: 34 Unexpected start tag (math) in table context caused voodoo mode.
+-Line: 1 Col: 41 Unexpected end tag (math) in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <table>
+-
+-#data
+-<!DOCTYPE html><body><table><math><mi>foo</mi></math></table>
+-#errors
+-Line: 1 Col: 34 Unexpected start tag (math) in table context caused voodoo mode.
+-Line: 1 Col: 46 Unexpected end tag (mi) in table context caused voodoo mode.
+-Line: 1 Col: 53 Unexpected end tag (math) in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mi>
+-| "foo"
+-| <table>
+-
+-#data
+-<!DOCTYPE html><body><table><math><mi>foo</mi><mi>bar</mi></math></table>
+-#errors
+-Line: 1 Col: 34 Unexpected start tag (math) in table context caused voodoo mode.
+-Line: 1 Col: 46 Unexpected end tag (mi) in table context caused voodoo mode.
+-Line: 1 Col: 58 Unexpected end tag (mi) in table context caused voodoo mode.
+-Line: 1 Col: 65 Unexpected end tag (math) in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mi>
+-| "foo"
+-| <math mi>
+-| "bar"
+-| <table>
+-
+-#data
+-<!DOCTYPE html><body><table><tbody><math><mi>foo</mi><mi>bar</mi></math></tbody></table>
+-#errors
+-Line: 1 Col: 41 Unexpected start tag (math) in table context caused voodoo mode.
+-Line: 1 Col: 53 Unexpected end tag (mi) in table context caused voodoo mode.
+-Line: 1 Col: 65 Unexpected end tag (mi) in table context caused voodoo mode.
+-Line: 1 Col: 72 Unexpected end tag (math) in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mi>
+-| "foo"
+-| <math mi>
+-| "bar"
+-| <table>
+-| <tbody>
+-
+-#data
+-<!DOCTYPE html><body><table><tbody><tr><math><mi>foo</mi><mi>bar</mi></math></tr></tbody></table>
+-#errors
+-Line: 1 Col: 45 Unexpected start tag (math) in table context caused voodoo mode.
+-Line: 1 Col: 57 Unexpected end tag (mi) in table context caused voodoo mode.
+-Line: 1 Col: 69 Unexpected end tag (mi) in table context caused voodoo mode.
+-Line: 1 Col: 76 Unexpected end tag (math) in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mi>
+-| "foo"
+-| <math mi>
+-| "bar"
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<!DOCTYPE html><body><table><tbody><tr><td><math><mi>foo</mi><mi>bar</mi></math></td></tr></tbody></table>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <math math>
+-| <math mi>
+-| "foo"
+-| <math mi>
+-| "bar"
+-
+-#data
+-<!DOCTYPE html><body><table><tbody><tr><td><math><mi>foo</mi><mi>bar</mi></math><p>baz</td></tr></tbody></table>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <math math>
+-| <math mi>
+-| "foo"
+-| <math mi>
+-| "bar"
+-| <p>
+-| "baz"
+-
+-#data
+-<!DOCTYPE html><body><table><caption><math><mi>foo</mi><mi>bar</mi></math><p>baz</caption></table>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <math math>
+-| <math mi>
+-| "foo"
+-| <math mi>
+-| "bar"
+-| <p>
+-| "baz"
+-
+-#data
+-<!DOCTYPE html><body><table><caption><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
+-#errors
+-Line: 1 Col: 70 HTML start tag "p" in a foreign namespace context.
+-Line: 1 Col: 81 Unexpected end table tag in caption. Generates implied end caption.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <math math>
+-| <math mi>
+-| "foo"
+-| <math mi>
+-| "bar"
+-| <p>
+-| "baz"
+-| <p>
+-| "quux"
+-
+-#data
+-<!DOCTYPE html><body><table><caption><math><mi>foo</mi><mi>bar</mi>baz</table><p>quux
+-#errors
+-Line: 1 Col: 78 Unexpected end table tag in caption. Generates implied end caption.
+-Line: 1 Col: 78 Unexpected end tag (caption). Missing end tag (math).
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <caption>
+-| <math math>
+-| <math mi>
+-| "foo"
+-| <math mi>
+-| "bar"
+-| "baz"
+-| <p>
+-| "quux"
+-
+-#data
+-<!DOCTYPE html><body><table><colgroup><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
+-#errors
+-Line: 1 Col: 44 Unexpected start tag (math) in table context caused voodoo mode.
+-Line: 1 Col: 56 Unexpected end tag (mi) in table context caused voodoo mode.
+-Line: 1 Col: 68 Unexpected end tag (mi) in table context caused voodoo mode.
+-Line: 1 Col: 71 HTML start tag "p" in a foreign namespace context.
+-Line: 1 Col: 71 Unexpected start tag (p) in table context caused voodoo mode.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mi>
+-| "foo"
+-| <math mi>
+-| "bar"
+-| <p>
+-| "baz"
+-| <table>
+-| <colgroup>
+-| <p>
+-| "quux"
+-
+-#data
+-<!DOCTYPE html><body><table><tr><td><select><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
+-#errors
+-Line: 1 Col: 50 Unexpected start tag token (math) in the select phase. Ignored.
+-Line: 1 Col: 54 Unexpected start tag token (mi) in the select phase. Ignored.
+-Line: 1 Col: 62 Unexpected end tag (mi) in the select phase. Ignored.
+-Line: 1 Col: 66 Unexpected start tag token (mi) in the select phase. Ignored.
+-Line: 1 Col: 74 Unexpected end tag (mi) in the select phase. Ignored.
+-Line: 1 Col: 77 Unexpected start tag token (p) in the select phase. Ignored.
+-Line: 1 Col: 88 Unexpected table element end tag (tables) in the select in table phase.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <select>
+-| "foobarbaz"
+-| <p>
+-| "quux"
+-
+-#data
+-<!DOCTYPE html><body><table><select><math><mi>foo</mi><mi>bar</mi><p>baz</table><p>quux
+-#errors
+-Line: 1 Col: 36 Unexpected start tag (select) in table context caused voodoo mode.
+-Line: 1 Col: 42 Unexpected start tag token (math) in the select phase. Ignored.
+-Line: 1 Col: 46 Unexpected start tag token (mi) in the select phase. Ignored.
+-Line: 1 Col: 54 Unexpected end tag (mi) in the select phase. Ignored.
+-Line: 1 Col: 58 Unexpected start tag token (mi) in the select phase. Ignored.
+-Line: 1 Col: 66 Unexpected end tag (mi) in the select phase. Ignored.
+-Line: 1 Col: 69 Unexpected start tag token (p) in the select phase. Ignored.
+-Line: 1 Col: 80 Unexpected table element end tag (tables) in the select in table phase.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| "foobarbaz"
+-| <table>
+-| <p>
+-| "quux"
+-
+-#data
+-<!DOCTYPE html><body></body></html><math><mi>foo</mi><mi>bar</mi><p>baz
+-#errors
+-Line: 1 Col: 41 Unexpected start tag (math).
+-Line: 1 Col: 68 HTML start tag "p" in a foreign namespace context.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mi>
+-| "foo"
+-| <math mi>
+-| "bar"
+-| <p>
+-| "baz"
+-
+-#data
+-<!DOCTYPE html><body></body><math><mi>foo</mi><mi>bar</mi><p>baz
+-#errors
+-Line: 1 Col: 34 Unexpected start tag token (math) in the after body phase.
+-Line: 1 Col: 61 HTML start tag "p" in a foreign namespace context.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mi>
+-| "foo"
+-| <math mi>
+-| "bar"
+-| <p>
+-| "baz"
+-
+-#data
+-<!DOCTYPE html><frameset><math><mi></mi><mi></mi><p><span>
+-#errors
+-Line: 1 Col: 31 Unexpected start tag token (math) in the frameset phase. Ignored.
+-Line: 1 Col: 35 Unexpected start tag token (mi) in the frameset phase. Ignored.
+-Line: 1 Col: 40 Unexpected end tag token (mi) in the frameset phase. Ignored.
+-Line: 1 Col: 44 Unexpected start tag token (mi) in the frameset phase. Ignored.
+-Line: 1 Col: 49 Unexpected end tag token (mi) in the frameset phase. Ignored.
+-Line: 1 Col: 52 Unexpected start tag token (p) in the frameset phase. Ignored.
+-Line: 1 Col: 58 Unexpected start tag token (span) in the frameset phase. Ignored.
+-Line: 1 Col: 58 Expected closing tag. Unexpected end of file.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<!DOCTYPE html><frameset></frameset><math><mi></mi><mi></mi><p><span>
+-#errors
+-Line: 1 Col: 42 Unexpected start tag (math) in the after frameset phase. Ignored.
+-Line: 1 Col: 46 Unexpected start tag (mi) in the after frameset phase. Ignored.
+-Line: 1 Col: 51 Unexpected end tag (mi) in the after frameset phase. Ignored.
+-Line: 1 Col: 55 Unexpected start tag (mi) in the after frameset phase. Ignored.
+-Line: 1 Col: 60 Unexpected end tag (mi) in the after frameset phase. Ignored.
+-Line: 1 Col: 63 Unexpected start tag (p) in the after frameset phase. Ignored.
+-Line: 1 Col: 69 Unexpected start tag (span) in the after frameset phase. Ignored.
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<!DOCTYPE html><body xlink:href=foo><math xlink:href=foo></math>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| xlink:href="foo"
+-| <math math>
+-| xlink href="foo"
+-
+-#data
+-<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo></mi></math>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| xlink:href="foo"
+-| xml:lang="en"
+-| <math math>
+-| <math mi>
+-| xlink href="foo"
+-| xml lang="en"
+-
+-#data
+-<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo /></math>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| xlink:href="foo"
+-| xml:lang="en"
+-| <math math>
+-| <math mi>
+-| xlink href="foo"
+-| xml lang="en"
+-
+-#data
+-<!DOCTYPE html><body xlink:href=foo xml:lang=en><math><mi xml:lang=en xlink:href=foo />bar</math>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| xlink:href="foo"
+-| xml:lang="en"
+-| <math math>
+-| <math mi>
+-| xlink href="foo"
+-| xml lang="en"
+-| "bar"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests_innerHTML_1.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests_innerHTML_1.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests_innerHTML_1.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tests_innerHTML_1.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,741 +0,0 @@
+-#data
+-<body><span>
+-#errors
+-#document-fragment
+-body
+-#document
+-| <span>
+-
+-#data
+-<span><body>
+-#errors
+-#document-fragment
+-body
+-#document
+-| <span>
+-
+-#data
+-<span><body>
+-#errors
+-#document-fragment
+-div
+-#document
+-| <span>
+-
+-#data
+-<body><span>
+-#errors
+-#document-fragment
+-html
+-#document
+-| <head>
+-| <body>
+-| <span>
+-
+-#data
+-<frameset><span>
+-#errors
+-#document-fragment
+-body
+-#document
+-| <span>
+-
+-#data
+-<span><frameset>
+-#errors
+-#document-fragment
+-body
+-#document
+-| <span>
+-
+-#data
+-<span><frameset>
+-#errors
+-#document-fragment
+-div
+-#document
+-| <span>
+-
+-#data
+-<frameset><span>
+-#errors
+-#document-fragment
+-html
+-#document
+-| <head>
+-| <frameset>
+-
+-#data
+-<table><tr>
+-#errors
+-#document-fragment
+-table
+-#document
+-| <tbody>
+-| <tr>
+-
+-#data
+-</table><tr>
+-#errors
+-#document-fragment
+-table
+-#document
+-| <tbody>
+-| <tr>
+-
+-#data
+-<a>
+-#errors
+-#document-fragment
+-table
+-#document
+-| <a>
+-
+-#data
+-<a>
+-#errors
+-#document-fragment
+-table
+-#document
+-| <a>
+-
+-#data
+-<a><caption>a
+-#errors
+-#document-fragment
+-table
+-#document
+-| <a>
+-| <caption>
+-| "a"
+-
+-#data
+-<a><colgroup><col>
+-#errors
+-#document-fragment
+-table
+-#document
+-| <a>
+-| <colgroup>
+-| <col>
+-
+-#data
+-<a><tbody><tr>
+-#errors
+-#document-fragment
+-table
+-#document
+-| <a>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<a><tfoot><tr>
+-#errors
+-#document-fragment
+-table
+-#document
+-| <a>
+-| <tfoot>
+-| <tr>
+-
+-#data
+-<a><thead><tr>
+-#errors
+-#document-fragment
+-table
+-#document
+-| <a>
+-| <thead>
+-| <tr>
+-
+-#data
+-<a><tr>
+-#errors
+-#document-fragment
+-table
+-#document
+-| <a>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<a><th>
+-#errors
+-#document-fragment
+-table
+-#document
+-| <a>
+-| <tbody>
+-| <tr>
+-| <th>
+-
+-#data
+-<a><td>
+-#errors
+-#document-fragment
+-table
+-#document
+-| <a>
+-| <tbody>
+-| <tr>
+-| <td>
+-
+-#data
+-<table></table><tbody>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <table>
+-
+-#data
+-</table><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-
+-#data
+-<span></table>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-
+-#data
+-</caption><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-
+-#data
+-<span></caption><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-| <span>
+-
+-#data
+-<span><caption><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-| <span>
+-
+-#data
+-<span><col><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-| <span>
+-
+-#data
+-<span><colgroup><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-| <span>
+-
+-#data
+-<span><html><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-| <span>
+-
+-#data
+-<span><tbody><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-| <span>
+-
+-#data
+-<span><td><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-| <span>
+-
+-#data
+-<span><tfoot><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-| <span>
+-
+-#data
+-<span><thead><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-| <span>
+-
+-#data
+-<span><th><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-| <span>
+-
+-#data
+-<span><tr><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-| <span>
+-
+-#data
+-<span></table><span>
+-#errors
+-#document-fragment
+-caption
+-#document
+-| <span>
+-| <span>
+-
+-#data
+-</colgroup><col>
+-#errors
+-#document-fragment
+-colgroup
+-#document
+-| <col>
+-
+-#data
+-<a><col>
+-#errors
+-#document-fragment
+-colgroup
+-#document
+-| <col>
+-
+-#data
+-<caption><a>
+-#errors
+-#document-fragment
+-tbody
+-#document
+-| <a>
+-
+-#data
+-<col><a>
+-#errors
+-#document-fragment
+-tbody
+-#document
+-| <a>
+-
+-#data
+-<colgroup><a>
+-#errors
+-#document-fragment
+-tbody
+-#document
+-| <a>
+-
+-#data
+-<tbody><a>
+-#errors
+-#document-fragment
+-tbody
+-#document
+-| <a>
+-
+-#data
+-<tfoot><a>
+-#errors
+-#document-fragment
+-tbody
+-#document
+-| <a>
+-
+-#data
+-<thead><a>
+-#errors
+-#document-fragment
+-tbody
+-#document
+-| <a>
+-
+-#data
+-</table><a>
+-#errors
+-#document-fragment
+-tbody
+-#document
+-| <a>
+-
+-#data
+-<a><tr>
+-#errors
+-#document-fragment
+-tbody
+-#document
+-| <a>
+-| <tr>
+-
+-#data
+-<a><td>
+-#errors
+-#document-fragment
+-tbody
+-#document
+-| <a>
+-| <tr>
+-| <td>
+-
+-#data
+-<a><td>
+-#errors
+-#document-fragment
+-tbody
+-#document
+-| <a>
+-| <tr>
+-| <td>
+-
+-#data
+-<a><td>
+-#errors
+-#document-fragment
+-tbody
+-#document
+-| <a>
+-| <tr>
+-| <td>
+-
+-#data
+-<td><table><tbody><a><tr>
+-#errors
+-#document-fragment
+-tbody
+-#document
+-| <tr>
+-| <td>
+-| <a>
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-</tr><td>
+-#errors
+-#document-fragment
+-tr
+-#document
+-| <td>
+-
+-#data
+-<td><table><a><tr></tr><tr>
+-#errors
+-#document-fragment
+-tr
+-#document
+-| <td>
+-| <a>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <tr>
+-
+-#data
+-<caption><td>
+-#errors
+-#document-fragment
+-tr
+-#document
+-| <td>
+-
+-#data
+-<col><td>
+-#errors
+-#document-fragment
+-tr
+-#document
+-| <td>
+-
+-#data
+-<colgroup><td>
+-#errors
+-#document-fragment
+-tr
+-#document
+-| <td>
+-
+-#data
+-<tbody><td>
+-#errors
+-#document-fragment
+-tr
+-#document
+-| <td>
+-
+-#data
+-<tfoot><td>
+-#errors
+-#document-fragment
+-tr
+-#document
+-| <td>
+-
+-#data
+-<thead><td>
+-#errors
+-#document-fragment
+-tr
+-#document
+-| <td>
+-
+-#data
+-<tr><td>
+-#errors
+-#document-fragment
+-tr
+-#document
+-| <td>
+-
+-#data
+-</table><td>
+-#errors
+-#document-fragment
+-tr
+-#document
+-| <td>
+-
+-#data
+-<td><table></table><td>
+-#errors
+-#document-fragment
+-tr
+-#document
+-| <td>
+-| <table>
+-| <td>
+-
+-#data
+-<td><table></table><td>
+-#errors
+-#document-fragment
+-tr
+-#document
+-| <td>
+-| <table>
+-| <td>
+-
+-#data
+-<caption><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-<col><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-<colgroup><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-<tbody><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-<tfoot><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-<th><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-<thead><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-<tr><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-</table><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-</tbody><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-</td><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-</tfoot><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-</thead><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-</th><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-</tr><a>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <a>
+-
+-#data
+-<table><td><td>
+-#errors
+-#document-fragment
+-td
+-#document
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <td>
+-
+-#data
+-</select><option>
+-#errors
+-#document-fragment
+-select
+-#document
+-| <option>
+-
+-#data
+-<input><option>
+-#errors
+-#document-fragment
+-select
+-#document
+-| <option>
+-
+-#data
+-<keygen><option>
+-#errors
+-#document-fragment
+-select
+-#document
+-| <option>
+-
+-#data
+-<textarea><option>
+-#errors
+-#document-fragment
+-select
+-#document
+-| <option>
+-
+-#data
+-</html><!--abc-->
+-#errors
+-#document-fragment
+-html
+-#document
+-| <head>
+-| <body>
+-| <!-- abc -->
+-
+-#data
+-</frameset><frame>
+-#errors
+-#document-fragment
+-frameset
+-#document
+-| <frame>
+-
+-#data
+-#errors
+-#document-fragment
+-html
+-#document
+-| <head>
+-| <body>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tricky01.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tricky01.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tricky01.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/tricky01.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,261 +0,0 @@
+-#data
+-<b><p>Bold </b> Not bold</p>
+-Also not bold.
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <b>
+-| <p>
+-| <b>
+-| "Bold "
+-| " Not bold"
+-| "
+-Also not bold."
+-
+-#data
+-<html>
+-<font color=red><i>Italic and Red<p>Italic and Red </font> Just italic.</p> Italic only.</i> Plain
+-<p>I should not be red. <font color=red>Red. <i>Italic and red.</p>
+-<p>Italic and red. </i> Red.</font> I should not be red.</p>
+-<b>Bold <i>Bold and italic</b> Only Italic </i> Plain
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <font>
+-| color="red"
+-| <i>
+-| "Italic and Red"
+-| <i>
+-| <p>
+-| <font>
+-| color="red"
+-| "Italic and Red "
+-| " Just italic."
+-| " Italic only."
+-| " Plain
+-"
+-| <p>
+-| "I should not be red. "
+-| <font>
+-| color="red"
+-| "Red. "
+-| <i>
+-| "Italic and red."
+-| <font>
+-| color="red"
+-| <i>
+-| "
+-"
+-| <p>
+-| <font>
+-| color="red"
+-| <i>
+-| "Italic and red. "
+-| " Red."
+-| " I should not be red."
+-| "
+-"
+-| <b>
+-| "Bold "
+-| <i>
+-| "Bold and italic"
+-| <i>
+-| " Only Italic "
+-| " Plain"
+-
+-#data
+-<html><body>
+-<p><font size="7">First paragraph.</p>
+-<p>Second paragraph.</p></font>
+-<b><p><i>Bold and Italic</b> Italic</p>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "
+-"
+-| <p>
+-| <font>
+-| size="7"
+-| "First paragraph."
+-| <font>
+-| size="7"
+-| "
+-"
+-| <p>
+-| "Second paragraph."
+-| "
+-"
+-| <b>
+-| <p>
+-| <b>
+-| <i>
+-| "Bold and Italic"
+-| <i>
+-| " Italic"
+-
+-#data
+-<html>
+-<dl>
+-<dt><b>Boo
+-<dd>Goo?
+-</dl>
+-</html>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <dl>
+-| "
+-"
+-| <dt>
+-| <b>
+-| "Boo
+-"
+-| <dd>
+-| <b>
+-| "Goo?
+-"
+-| <b>
+-| "
+-"
+-
+-#data
+-<html><body>
+-<label><a><div>Hello<div>World</div></a></label>
+-</body></html>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "
+-"
+-| <label>
+-| <a>
+-| <div>
+-| <a>
+-| "Hello"
+-| <div>
+-| "World"
+-| "
+-"
+-
+-#data
+-<table><center> <font>a</center> <img> <tr><td> </td> </tr> </table>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <center>
+-| " "
+-| <font>
+-| "a"
+-| <font>
+-| <img>
+-| " "
+-| <table>
+-| " "
+-| <tbody>
+-| <tr>
+-| <td>
+-| " "
+-| " "
+-| " "
+-
+-#data
+-<table><tr><p><a><p>You should see this text.
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| <a>
+-| <p>
+-| <a>
+-| "You should see this text."
+-| <table>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<TABLE>
+-<TR>
+-<CENTER><CENTER><TD></TD></TR><TR>
+-<FONT>
+-<TABLE><tr></tr></TABLE>
+-</P>
+-<a></font><font></a>
+-This page contains an insanely badly-nested tag sequence.
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <center>
+-| <center>
+-| <font>
+-| "
+-"
+-| <table>
+-| "
+-"
+-| <tbody>
+-| <tr>
+-| "
+-"
+-| <td>
+-| <tr>
+-| "
+-"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <font>
+-| "
+-"
+-| <p>
+-| "
+-"
+-| <a>
+-| <a>
+-| <font>
+-| <font>
+-| "
+-This page contains an insanely badly-nested tag sequence."
+-
+-#data
+-<html>
+-<body>
+-<b><nobr><div>This text is in a div inside a nobr</nobr>More text that should not be in the nobr, i.e., the
+-nobr should have closed the div inside it implicitly. </b><pre>A pre tag outside everything else.</pre>
+-</body>
+-</html>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "
+-"
+-| <b>
+-| <nobr>
+-| <div>
+-| <b>
+-| <nobr>
+-| "This text is in a div inside a nobr"
+-| "More text that should not be in the nobr, i.e., the
+-nobr should have closed the div inside it implicitly. "
+-| <pre>
+-| "A pre tag outside everything else."
+-| "
+-
+-"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/webkit01.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/webkit01.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/webkit01.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/webkit01.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,610 +0,0 @@
+-#data
+-Test
+-#errors
+-Line: 1 Col: 4 Unexpected non-space characters. Expected DOCTYPE.
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "Test"
+-
+-#data
+-<div></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-
+-#data
+-<div>Test</div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "Test"
+-
+-#data
+-<di
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<div>Hello</div>
+-<script>
+-console.log("PASS");
+-</script>
+-<div>Bye</div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "Hello"
+-| "
+-"
+-| <script>
+-| "
+-console.log("PASS");
+-"
+-| "
+-"
+-| <div>
+-| "Bye"
+-
+-#data
+-<div foo="bar">Hello</div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| foo="bar"
+-| "Hello"
+-
+-#data
+-<div>Hello</div>
+-<script>
+-console.log("FOO<span>BAR</span>BAZ");
+-</script>
+-<div>Bye</div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| "Hello"
+-| "
+-"
+-| <script>
+-| "
+-console.log("FOO<span>BAR</span>BAZ");
+-"
+-| "
+-"
+-| <div>
+-| "Bye"
+-
+-#data
+-<foo bar="baz"></foo><potato quack="duck"></potato>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <foo>
+-| bar="baz"
+-| <potato>
+-| quack="duck"
+-
+-#data
+-<foo bar="baz"><potato quack="duck"></potato></foo>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <foo>
+-| bar="baz"
+-| <potato>
+-| quack="duck"
+-
+-#data
+-<foo></foo bar="baz"><potato></potato quack="duck">
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <foo>
+-| <potato>
+-
+-#data
+-</ tttt>
+-#errors
+-#document
+-| <!-- tttt -->
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<div FOO ><img><img></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| foo=""
+-| <img>
+-| <img>
+-
+-#data
+-<p>Test</p<p>Test2</p>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| "TestTest2"
+-
+-#data
+-<rdar://problem/6869687>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <rdar:>
+-| 6869687=""
+-| problem=""
+-
+-#data
+-<A>test< /A>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| "test< /A>"
+-
+-#data
+-<
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "<"
+-
+-#data
+-<body foo='bar'><body foo='baz' yo='mama'>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| foo="bar"
+-| yo="mama"
+-
+-#data
+-<body></br foo="bar"></body>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <br>
+-
+-#data
+-<bdy><br foo="bar"></body>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <bdy>
+-| <br>
+-| foo="bar"
+-
+-#data
+-<body></body></br foo="bar">
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <br>
+-
+-#data
+-<bdy></body><br foo="bar">
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <bdy>
+-| <br>
+-| foo="bar"
+-
+-#data
+-<html><body></body></html><!-- Hi there -->
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <!-- Hi there -->
+-
+-#data
+-<html><body></body></html>x<!-- Hi there -->
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "x"
+-| <!-- Hi there -->
+-
+-#data
+-<html><body></body></html>x<!-- Hi there --></html><!-- Again -->
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "x"
+-| <!-- Hi there -->
+-| <!-- Again -->
+-
+-#data
+-<html><body></body></html>x<!-- Hi there --></body></html><!-- Again -->
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "x"
+-| <!-- Hi there -->
+-| <!-- Again -->
+-
+-#data
+-<html><body><ruby><div><rp>xx</rp></div></ruby></body></html>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <ruby>
+-| <div>
+-| <rp>
+-| "xx"
+-
+-#data
+-<html><body><ruby><div><rt>xx</rt></div></ruby></body></html>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <ruby>
+-| <div>
+-| <rt>
+-| "xx"
+-
+-#data
+-<html><frameset><!--1--><noframes>A</noframes><!--2--></frameset><!--3--><noframes>B</noframes><!--4--></html><!--5--><noframes>C</noframes><!--6-->
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <frameset>
+-| <!-- 1 -->
+-| <noframes>
+-| "A"
+-| <!-- 2 -->
+-| <!-- 3 -->
+-| <noframes>
+-| "B"
+-| <!-- 4 -->
+-| <noframes>
+-| "C"
+-| <!-- 5 -->
+-| <!-- 6 -->
+-
+-#data
+-<select><option>A<select><option>B<select><option>C<select><option>D<select><option>E<select><option>F<select><option>G<select>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <select>
+-| <option>
+-| "A"
+-| <option>
+-| "B"
+-| <select>
+-| <option>
+-| "C"
+-| <option>
+-| "D"
+-| <select>
+-| <option>
+-| "E"
+-| <option>
+-| "F"
+-| <select>
+-| <option>
+-| "G"
+-
+-#data
+-<dd><dd><dt><dt><dd><li><li>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <dd>
+-| <dd>
+-| <dt>
+-| <dt>
+-| <dd>
+-| <li>
+-| <li>
+-
+-#data
+-<div><b></div><div><nobr>a<nobr>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <b>
+-| <div>
+-| <b>
+-| <nobr>
+-| "a"
+-| <nobr>
+-
+-#data
+-<head></head>
+-<body></body>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| "
+-"
+-| <body>
+-
+-#data
+-<head></head> <style></style>ddd
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <style>
+-| " "
+-| <body>
+-| "ddd"
+-
+-#data
+-<kbd><table></kbd><col><select><tr>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <kbd>
+-| <select>
+-| <table>
+-| <colgroup>
+-| <col>
+-| <tbody>
+-| <tr>
+-
+-#data
+-<kbd><table></kbd><col><select><tr></table><div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <kbd>
+-| <select>
+-| <table>
+-| <colgroup>
+-| <col>
+-| <tbody>
+-| <tr>
+-| <div>
+-
+-#data
+-<a><li><style></style><title></title></a>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <li>
+-| <a>
+-| <style>
+-| <title>
+-
+-#data
+-<font></p><p><meta><title></title></font>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <font>
+-| <p>
+-| <p>
+-| <font>
+-| <meta>
+-| <title>
+-
+-#data
+-<a><center><title></title><a>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <a>
+-| <center>
+-| <a>
+-| <title>
+-| <a>
+-
+-#data
+-<svg><title><div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg title>
+-| <div>
+-
+-#data
+-<svg><title><rect><div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg title>
+-| <rect>
+-| <div>
+-
+-#data
+-<svg><title><svg><div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg title>
+-| <svg svg>
+-| <div>
+-
+-#data
+-<img <="" FAIL>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <img>
+-| <=""
+-| fail=""
+-
+-#data
+-<ul><li><div id='foo'/>A</li><li>B<div>C</div></li></ul>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <ul>
+-| <li>
+-| <div>
+-| id="foo"
+-| "A"
+-| <li>
+-| "B"
+-| <div>
+-| "C"
+-
+-#data
+-<svg><em><desc></em>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <em>
+-| <desc>
+-
+-#data
+-<table><tr><td><svg><desc><td></desc><circle>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| <svg svg>
+-| <svg desc>
+-| <td>
+-| <circle>
+-
+-#data
+-<svg><tfoot></mi><td>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <svg svg>
+-| <svg tfoot>
+-| <svg td>
+-
+-#data
+-<math><mrow><mrow><mn>1</mn></mrow><mi>a</mi></mrow></math>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <math math>
+-| <math mrow>
+-| <math mrow>
+-| <math mn>
+-| "1"
+-| <math mi>
+-| "a"
+-
+-#data
+-<!doctype html><input type="hidden"><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <frameset>
+-
+-#data
+-<!doctype html><input type="button"><frameset>
+-#errors
+-#document
+-| <!DOCTYPE html>
+-| <html>
+-| <head>
+-| <body>
+-| <input>
+-| type="button"
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/webkit02.dat docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/webkit02.dat
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/testdata/webkit/webkit02.dat 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/testdata/webkit/webkit02.dat 1969-12-31 18:00:00.000000000 -0600
+@@ -1,159 +0,0 @@
+-#data
+-<foo bar=qux/>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <foo>
+-| bar="qux/"
+-
+-#data
+-<p id="status"><noscript><strong>A</strong></noscript><span>B</span></p>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <p>
+-| id="status"
+-| <noscript>
+-| "<strong>A</strong>"
+-| <span>
+-| "B"
+-
+-#data
+-<div><sarcasm><div></div></sarcasm></div>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <div>
+-| <sarcasm>
+-| <div>
+-
+-#data
+-<html><body><img src="" border="0" alt="><div>A</div></body></html>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-
+-#data
+-<table><td></tbody>A
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| "A"
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-
+-#data
+-<table><td></thead>A
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| "A"
+-
+-#data
+-<table><td></tfoot>A
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <tbody>
+-| <tr>
+-| <td>
+-| "A"
+-
+-#data
+-<table><thead><td></tbody>A
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <table>
+-| <thead>
+-| <tr>
+-| <td>
+-| "A"
+-
+-#data
+-<legend>test</legend>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <legend>
+-| "test"
+-
+-#data
+-<table><input>
+-#errors
+-#document
+-| <html>
+-| <head>
+-| <body>
+-| <input>
+-| <table>
+-
+-#data
+-<b><em><dcell><postfield><postfield><postfield><postfield><missing_glyph><missing_glyph><missing_glyph><missing_glyph><hkern><aside></b></em>
+-#errors
+-#document-fragment
+-div
+-#document
+-| <b>
+-| <em>
+-| <dcell>
+-| <postfield>
+-| <postfield>
+-| <postfield>
+-| <postfield>
+-| <missing_glyph>
+-| <missing_glyph>
+-| <missing_glyph>
+-| <missing_glyph>
+-| <hkern>
+-| <aside>
+-| <em>
+-| <b>
+-
+-#data
+-<isindex action="x">
+-#errors
+-#document-fragment
+-table
+-#document
+-| <form>
+-| action="x"
+-| <hr>
+-| <label>
+-| "This is a searchable index. Enter search keywords: "
+-| <input>
+-| name="isindex"
+-| <hr>
+-
+-#data
+-<option><XH<optgroup></optgroup>
+-#errors
+-#document-fragment
+-select
+-#document
+-| <option>
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/token.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/token.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/token.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/token.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,1174 +0,0 @@
+-// Copyright 2010 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 html
+-
+-import (
+- "bytes"
+- "io"
+- "strconv"
+- "strings"
+-
+- "code.google.com/p/go.net/html/atom"
+-)
+-
+-// A TokenType is the type of a Token.
+-type TokenType uint32
+-
+-const (
+- // ErrorToken means that an error occurred during tokenization.
+- ErrorToken TokenType = iota
+- // TextToken means a text node.
+- TextToken
+- // A StartTagToken looks like <a>.
+- StartTagToken
+- // An EndTagToken looks like </a>.
+- EndTagToken
+- // A SelfClosingTagToken tag looks like <br/>.
+- SelfClosingTagToken
+- // A CommentToken looks like <!--x-->.
+- CommentToken
+- // A DoctypeToken looks like <!DOCTYPE x>
+- DoctypeToken
+-)
+-
+-// String returns a string representation of the TokenType.
+-func (t TokenType) String() string {
+- switch t {
+- case ErrorToken:
+- return "Error"
+- case TextToken:
+- return "Text"
+- case StartTagToken:
+- return "StartTag"
+- case EndTagToken:
+- return "EndTag"
+- case SelfClosingTagToken:
+- return "SelfClosingTag"
+- case CommentToken:
+- return "Comment"
+- case DoctypeToken:
+- return "Doctype"
+- }
+- return "Invalid(" + strconv.Itoa(int(t)) + ")"
+-}
+-
+-// An Attribute is an attribute namespace-key-value triple. Namespace is
+-// non-empty for foreign attributes like xlink, Key is alphabetic (and hence
+-// does not contain escapable characters like '&', '<' or '>'), and Val is
+-// unescaped (it looks like "a<b" rather than "a<b").
+-//
+-// Namespace is only used by the parser, not the tokenizer.
+-type Attribute struct {
+- Namespace, Key, Val string
+-}
+-
+-// A Token consists of a TokenType and some Data (tag name for start and end
+-// tags, content for text, comments and doctypes). A tag Token may also contain
+-// a slice of Attributes. Data is unescaped for all Tokens (it looks like "a<b"
+-// rather than "a<b"). For tag Tokens, DataAtom is the atom for Data, or
+-// zero if Data is not a known tag name.
+-type Token struct {
+- Type TokenType
+- DataAtom atom.Atom
+- Data string
+- Attr []Attribute
+-}
+-
+-// tagString returns a string representation of a tag Token's Data and Attr.
+-func (t Token) tagString() string {
+- if len(t.Attr) == 0 {
+- return t.Data
+- }
+- buf := bytes.NewBufferString(t.Data)
+- for _, a := range t.Attr {
+- buf.WriteByte(' ')
+- buf.WriteString(a.Key)
+- buf.WriteString(`="`)
+- escape(buf, a.Val)
+- buf.WriteByte('"')
+- }
+- return buf.String()
+-}
+-
+-// String returns a string representation of the Token.
+-func (t Token) String() string {
+- switch t.Type {
+- case ErrorToken:
+- return ""
+- case TextToken:
+- return EscapeString(t.Data)
+- case StartTagToken:
+- return "<" + t.tagString() + ">"
+- case EndTagToken:
+- return "</" + t.tagString() + ">"
+- case SelfClosingTagToken:
+- return "<" + t.tagString() + "/>"
+- case CommentToken:
+- return "<!--" + t.Data + "-->"
+- case DoctypeToken:
+- return "<!DOCTYPE " + t.Data + ">"
+- }
+- return "Invalid(" + strconv.Itoa(int(t.Type)) + ")"
+-}
+-
+-// span is a range of bytes in a Tokenizer's buffer. The start is inclusive,
+-// the end is exclusive.
+-type span struct {
+- start, end int
+-}
+-
+-// A Tokenizer returns a stream of HTML Tokens.
+-type Tokenizer struct {
+- // r is the source of the HTML text.
+- r io.Reader
+- // tt is the TokenType of the current token.
+- tt TokenType
+- // err is the first error encountered during tokenization. It is possible
+- // for tt != Error && err != nil to hold: this means that Next returned a
+- // valid token but the subsequent Next call will return an error token.
+- // For example, if the HTML text input was just "plain", then the first
+- // Next call would set z.err to io.EOF but return a TextToken, and all
+- // subsequent Next calls would return an ErrorToken.
+- // err is never reset. Once it becomes non-nil, it stays non-nil.
+- err error
+- // buf[raw.start:raw.end] holds the raw bytes of the current token.
+- // buf[raw.end:] is buffered input that will yield future tokens.
+- raw span
+- buf []byte
+- // buf[data.start:data.end] holds the raw bytes of the current token's data:
+- // a text token's text, a tag token's tag name, etc.
+- data span
+- // pendingAttr is the attribute key and value currently being tokenized.
+- // When complete, pendingAttr is pushed onto attr. nAttrReturned is
+- // incremented on each call to TagAttr.
+- pendingAttr [2]span
+- attr [][2]span
+- nAttrReturned int
+- // rawTag is the "script" in "</script>" that closes the next token. If
+- // non-empty, the subsequent call to Next will return a raw or RCDATA text
+- // token: one that treats "<p>" as text instead of an element.
+- // rawTag's contents are lower-cased.
+- rawTag string
+- // textIsRaw is whether the current text token's data is not escaped.
+- textIsRaw bool
+- // convertNUL is whether NUL bytes in the current token's data should
+- // be converted into \ufffd replacement characters.
+- convertNUL bool
+- // allowCDATA is whether CDATA sections are allowed in the current context.
+- allowCDATA bool
+-}
+-
+-// AllowCDATA sets whether or not the tokenizer recognizes <![CDATA[foo]]> as
+-// the text "foo". The default value is false, which means to recognize it as
+-// a bogus comment "<!-- [CDATA[foo]] -->" instead.
+-//
+-// Strictly speaking, an HTML5 compliant tokenizer should allow CDATA if and
+-// only if tokenizing foreign content, such as MathML and SVG. However,
+-// tracking foreign-contentness is difficult to do purely in the tokenizer,
+-// as opposed to the parser, due to HTML integration points: an <svg> element
+-// can contain a <foreignObject> that is foreign-to-SVG but not foreign-to-
+-// HTML. For strict compliance with the HTML5 tokenization algorithm, it is the
+-// responsibility of the user of a tokenizer to call AllowCDATA as appropriate.
+-// In practice, if using the tokenizer without caring whether MathML or SVG
+-// CDATA is text or comments, such as tokenizing HTML to find all the anchor
+-// text, it is acceptable to ignore this responsibility.
+-func (z *Tokenizer) AllowCDATA(allowCDATA bool) {
+- z.allowCDATA = allowCDATA
+-}
+-
+-// NextIsNotRawText instructs the tokenizer that the next token should not be
+-// considered as 'raw text'. Some elements, such as script and title elements,
+-// normally require the next token after the opening tag to be 'raw text' that
+-// has no child elements. For example, tokenizing "<title>a<b>c</b>d</title>"
+-// yields a start tag token for "<title>", a text token for "a<b>c</b>d", and
+-// an end tag token for "</title>". There are no distinct start tag or end tag
+-// tokens for the "<b>" and "</b>".
+-//
+-// This tokenizer implementation will generally look for raw text at the right
+-// times. Strictly speaking, an HTML5 compliant tokenizer should not look for
+-// raw text if in foreign content: <title> generally needs raw text, but a
+-// <title> inside an <svg> does not. Another example is that a <textarea>
+-// generally needs raw text, but a <textarea> is not allowed as an immediate
+-// child of a <select>; in normal parsing, a <textarea> implies </select>, but
+-// one cannot close the implicit element when parsing a <select>'s InnerHTML.
+-// Similarly to AllowCDATA, tracking the correct moment to override raw-text-
+-// ness is difficult to do purely in the tokenizer, as opposed to the parser.
+-// For strict compliance with the HTML5 tokenization algorithm, it is the
+-// responsibility of the user of a tokenizer to call NextIsNotRawText as
+-// appropriate. In practice, like AllowCDATA, it is acceptable to ignore this
+-// responsibility for basic usage.
+-//
+-// Note that this 'raw text' concept is different from the one offered by the
+-// Tokenizer.Raw method.
+-func (z *Tokenizer) NextIsNotRawText() {
+- z.rawTag = ""
+-}
+-
+-// Err returns the error associated with the most recent ErrorToken token.
+-// This is typically io.EOF, meaning the end of tokenization.
+-func (z *Tokenizer) Err() error {
+- if z.tt != ErrorToken {
+- return nil
+- }
+- return z.err
+-}
+-
+-// readByte returns the next byte from the input stream, doing a buffered read
+-// from z.r into z.buf if necessary. z.buf[z.raw.start:z.raw.end] remains a contiguous byte
+-// slice that holds all the bytes read so far for the current token.
+-// It sets z.err if the underlying reader returns an error.
+-// Pre-condition: z.err == nil.
+-func (z *Tokenizer) readByte() byte {
+- if z.raw.end >= len(z.buf) {
+- // Our buffer is exhausted and we have to read from z.r.
+- // We copy z.buf[z.raw.start:z.raw.end] to the beginning of z.buf. If the length
+- // z.raw.end - z.raw.start is more than half the capacity of z.buf, then we
+- // allocate a new buffer before the copy.
+- c := cap(z.buf)
+- d := z.raw.end - z.raw.start
+- var buf1 []byte
+- if 2*d > c {
+- buf1 = make([]byte, d, 2*c)
+- } else {
+- buf1 = z.buf[:d]
+- }
+- copy(buf1, z.buf[z.raw.start:z.raw.end])
+- if x := z.raw.start; x != 0 {
+- // Adjust the data/attr spans to refer to the same contents after the copy.
+- z.data.start -= x
+- z.data.end -= x
+- z.pendingAttr[0].start -= x
+- z.pendingAttr[0].end -= x
+- z.pendingAttr[1].start -= x
+- z.pendingAttr[1].end -= x
+- for i := range z.attr {
+- z.attr[i][0].start -= x
+- z.attr[i][0].end -= x
+- z.attr[i][1].start -= x
+- z.attr[i][1].end -= x
+- }
+- }
+- z.raw.start, z.raw.end, z.buf = 0, d, buf1[:d]
+- // Now that we have copied the live bytes to the start of the buffer,
+- // we read from z.r into the remainder.
+- n, err := z.r.Read(buf1[d:cap(buf1)])
+- if err != nil {
+- z.err = err
+- return 0
+- }
+- z.buf = buf1[:d+n]
+- }
+- x := z.buf[z.raw.end]
+- z.raw.end++
+- return x
+-}
+-
+-// skipWhiteSpace skips past any white space.
+-func (z *Tokenizer) skipWhiteSpace() {
+- if z.err != nil {
+- return
+- }
+- for {
+- c := z.readByte()
+- if z.err != nil {
+- return
+- }
+- switch c {
+- case ' ', '\n', '\r', '\t', '\f':
+- // No-op.
+- default:
+- z.raw.end--
+- return
+- }
+- }
+-}
+-
+-// readRawOrRCDATA reads until the next "</foo>", where "foo" is z.rawTag and
+-// is typically something like "script" or "textarea".
+-func (z *Tokenizer) readRawOrRCDATA() {
+- if z.rawTag == "script" {
+- z.readScript()
+- z.textIsRaw = true
+- z.rawTag = ""
+- return
+- }
+-loop:
+- for {
+- c := z.readByte()
+- if z.err != nil {
+- break loop
+- }
+- if c != '<' {
+- continue loop
+- }
+- c = z.readByte()
+- if z.err != nil {
+- break loop
+- }
+- if c != '/' {
+- continue loop
+- }
+- if z.readRawEndTag() || z.err != nil {
+- break loop
+- }
+- }
+- z.data.end = z.raw.end
+- // A textarea's or title's RCDATA can contain escaped entities.
+- z.textIsRaw = z.rawTag != "textarea" && z.rawTag != "title"
+- z.rawTag = ""
+-}
+-
+-// readRawEndTag attempts to read a tag like "</foo>", where "foo" is z.rawTag.
+-// If it succeeds, it backs up the input position to reconsume the tag and
+-// returns true. Otherwise it returns false. The opening "</" has already been
+-// consumed.
+-func (z *Tokenizer) readRawEndTag() bool {
+- for i := 0; i < len(z.rawTag); i++ {
+- c := z.readByte()
+- if z.err != nil {
+- return false
+- }
+- if c != z.rawTag[i] && c != z.rawTag[i]-('a'-'A') {
+- z.raw.end--
+- return false
+- }
+- }
+- c := z.readByte()
+- if z.err != nil {
+- return false
+- }
+- switch c {
+- case ' ', '\n', '\r', '\t', '\f', '/', '>':
+- // The 3 is 2 for the leading "</" plus 1 for the trailing character c.
+- z.raw.end -= 3 + len(z.rawTag)
+- return true
+- }
+- z.raw.end--
+- return false
+-}
+-
+-// readScript reads until the next </script> tag, following the byzantine
+-// rules for escaping/hiding the closing tag.
+-func (z *Tokenizer) readScript() {
+- defer func() {
+- z.data.end = z.raw.end
+- }()
+- var c byte
+-
+-scriptData:
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- if c == '<' {
+- goto scriptDataLessThanSign
+- }
+- goto scriptData
+-
+-scriptDataLessThanSign:
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- switch c {
+- case '/':
+- goto scriptDataEndTagOpen
+- case '!':
+- goto scriptDataEscapeStart
+- }
+- z.raw.end--
+- goto scriptData
+-
+-scriptDataEndTagOpen:
+- if z.readRawEndTag() || z.err != nil {
+- return
+- }
+- goto scriptData
+-
+-scriptDataEscapeStart:
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- if c == '-' {
+- goto scriptDataEscapeStartDash
+- }
+- z.raw.end--
+- goto scriptData
+-
+-scriptDataEscapeStartDash:
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- if c == '-' {
+- goto scriptDataEscapedDashDash
+- }
+- z.raw.end--
+- goto scriptData
+-
+-scriptDataEscaped:
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- switch c {
+- case '-':
+- goto scriptDataEscapedDash
+- case '<':
+- goto scriptDataEscapedLessThanSign
+- }
+- goto scriptDataEscaped
+-
+-scriptDataEscapedDash:
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- switch c {
+- case '-':
+- goto scriptDataEscapedDashDash
+- case '<':
+- goto scriptDataEscapedLessThanSign
+- }
+- goto scriptDataEscaped
+-
+-scriptDataEscapedDashDash:
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- switch c {
+- case '-':
+- goto scriptDataEscapedDashDash
+- case '<':
+- goto scriptDataEscapedLessThanSign
+- case '>':
+- goto scriptData
+- }
+- goto scriptDataEscaped
+-
+-scriptDataEscapedLessThanSign:
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- if c == '/' {
+- goto scriptDataEscapedEndTagOpen
+- }
+- if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' {
+- goto scriptDataDoubleEscapeStart
+- }
+- z.raw.end--
+- goto scriptData
+-
+-scriptDataEscapedEndTagOpen:
+- if z.readRawEndTag() || z.err != nil {
+- return
+- }
+- goto scriptDataEscaped
+-
+-scriptDataDoubleEscapeStart:
+- z.raw.end--
+- for i := 0; i < len("script"); i++ {
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- if c != "script"[i] && c != "SCRIPT"[i] {
+- z.raw.end--
+- goto scriptDataEscaped
+- }
+- }
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- switch c {
+- case ' ', '\n', '\r', '\t', '\f', '/', '>':
+- goto scriptDataDoubleEscaped
+- }
+- z.raw.end--
+- goto scriptDataEscaped
+-
+-scriptDataDoubleEscaped:
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- switch c {
+- case '-':
+- goto scriptDataDoubleEscapedDash
+- case '<':
+- goto scriptDataDoubleEscapedLessThanSign
+- }
+- goto scriptDataDoubleEscaped
+-
+-scriptDataDoubleEscapedDash:
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- switch c {
+- case '-':
+- goto scriptDataDoubleEscapedDashDash
+- case '<':
+- goto scriptDataDoubleEscapedLessThanSign
+- }
+- goto scriptDataDoubleEscaped
+-
+-scriptDataDoubleEscapedDashDash:
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- switch c {
+- case '-':
+- goto scriptDataDoubleEscapedDashDash
+- case '<':
+- goto scriptDataDoubleEscapedLessThanSign
+- case '>':
+- goto scriptData
+- }
+- goto scriptDataDoubleEscaped
+-
+-scriptDataDoubleEscapedLessThanSign:
+- c = z.readByte()
+- if z.err != nil {
+- return
+- }
+- if c == '/' {
+- goto scriptDataDoubleEscapeEnd
+- }
+- z.raw.end--
+- goto scriptDataDoubleEscaped
+-
+-scriptDataDoubleEscapeEnd:
+- if z.readRawEndTag() {
+- z.raw.end += len("</script>")
+- goto scriptDataEscaped
+- }
+- if z.err != nil {
+- return
+- }
+- goto scriptDataDoubleEscaped
+-}
+-
+-// readComment reads the next comment token starting with "<!--". The opening
+-// "<!--" has already been consumed.
+-func (z *Tokenizer) readComment() {
+- z.data.start = z.raw.end
+- defer func() {
+- if z.data.end < z.data.start {
+- // It's a comment with no data, like <!-->.
+- z.data.end = z.data.start
+- }
+- }()
+- for dashCount := 2; ; {
+- c := z.readByte()
+- if z.err != nil {
+- // Ignore up to two dashes at EOF.
+- if dashCount > 2 {
+- dashCount = 2
+- }
+- z.data.end = z.raw.end - dashCount
+- return
+- }
+- switch c {
+- case '-':
+- dashCount++
+- continue
+- case '>':
+- if dashCount >= 2 {
+- z.data.end = z.raw.end - len("-->")
+- return
+- }
+- case '!':
+- if dashCount >= 2 {
+- c = z.readByte()
+- if z.err != nil {
+- z.data.end = z.raw.end
+- return
+- }
+- if c == '>' {
+- z.data.end = z.raw.end - len("--!>")
+- return
+- }
+- }
+- }
+- dashCount = 0
+- }
+-}
+-
+-// readUntilCloseAngle reads until the next ">".
+-func (z *Tokenizer) readUntilCloseAngle() {
+- z.data.start = z.raw.end
+- for {
+- c := z.readByte()
+- if z.err != nil {
+- z.data.end = z.raw.end
+- return
+- }
+- if c == '>' {
+- z.data.end = z.raw.end - len(">")
+- return
+- }
+- }
+-}
+-
+-// readMarkupDeclaration reads the next token starting with "<!". It might be
+-// a "<!--comment-->", a "<!DOCTYPE foo>", a "<![CDATA[section]]>" or
+-// "<!a bogus comment". The opening "<!" has already been consumed.
+-func (z *Tokenizer) readMarkupDeclaration() TokenType {
+- z.data.start = z.raw.end
+- var c [2]byte
+- for i := 0; i < 2; i++ {
+- c[i] = z.readByte()
+- if z.err != nil {
+- z.data.end = z.raw.end
+- return CommentToken
+- }
+- }
+- if c[0] == '-' && c[1] == '-' {
+- z.readComment()
+- return CommentToken
+- }
+- z.raw.end -= 2
+- if z.readDoctype() {
+- return DoctypeToken
+- }
+- if z.allowCDATA && z.readCDATA() {
+- z.convertNUL = true
+- return TextToken
+- }
+- // It's a bogus comment.
+- z.readUntilCloseAngle()
+- return CommentToken
+-}
+-
+-// readDoctype attempts to read a doctype declaration and returns true if
+-// successful. The opening "<!" has already been consumed.
+-func (z *Tokenizer) readDoctype() bool {
+- const s = "DOCTYPE"
+- for i := 0; i < len(s); i++ {
+- c := z.readByte()
+- if z.err != nil {
+- z.data.end = z.raw.end
+- return false
+- }
+- if c != s[i] && c != s[i]+('a'-'A') {
+- // Back up to read the fragment of "DOCTYPE" again.
+- z.raw.end = z.data.start
+- return false
+- }
+- }
+- if z.skipWhiteSpace(); z.err != nil {
+- z.data.start = z.raw.end
+- z.data.end = z.raw.end
+- return true
+- }
+- z.readUntilCloseAngle()
+- return true
+-}
+-
+-// readCDATA attempts to read a CDATA section and returns true if
+-// successful. The opening "<!" has already been consumed.
+-func (z *Tokenizer) readCDATA() bool {
+- const s = "[CDATA["
+- for i := 0; i < len(s); i++ {
+- c := z.readByte()
+- if z.err != nil {
+- z.data.end = z.raw.end
+- return false
+- }
+- if c != s[i] {
+- // Back up to read the fragment of "[CDATA[" again.
+- z.raw.end = z.data.start
+- return false
+- }
+- }
+- z.data.start = z.raw.end
+- brackets := 0
+- for {
+- c := z.readByte()
+- if z.err != nil {
+- z.data.end = z.raw.end
+- return true
+- }
+- switch c {
+- case ']':
+- brackets++
+- case '>':
+- if brackets >= 2 {
+- z.data.end = z.raw.end - len("]]>")
+- return true
+- }
+- brackets = 0
+- default:
+- brackets = 0
+- }
+- }
+- panic("unreachable")
+-}
+-
+-// startTagIn returns whether the start tag in z.buf[z.data.start:z.data.end]
+-// case-insensitively matches any element of ss.
+-func (z *Tokenizer) startTagIn(ss ...string) bool {
+-loop:
+- for _, s := range ss {
+- if z.data.end-z.data.start != len(s) {
+- continue loop
+- }
+- for i := 0; i < len(s); i++ {
+- c := z.buf[z.data.start+i]
+- if 'A' <= c && c <= 'Z' {
+- c += 'a' - 'A'
+- }
+- if c != s[i] {
+- continue loop
+- }
+- }
+- return true
+- }
+- return false
+-}
+-
+-// readStartTag reads the next start tag token. The opening "<a" has already
+-// been consumed, where 'a' means anything in [A-Za-z].
+-func (z *Tokenizer) readStartTag() TokenType {
+- z.readTag(true)
+- if z.err != nil {
+- return ErrorToken
+- }
+- // Several tags flag the tokenizer's next token as raw.
+- c, raw := z.buf[z.data.start], false
+- if 'A' <= c && c <= 'Z' {
+- c += 'a' - 'A'
+- }
+- switch c {
+- case 'i':
+- raw = z.startTagIn("iframe")
+- case 'n':
+- raw = z.startTagIn("noembed", "noframes", "noscript")
+- case 'p':
+- raw = z.startTagIn("plaintext")
+- case 's':
+- raw = z.startTagIn("script", "style")
+- case 't':
+- raw = z.startTagIn("textarea", "title")
+- case 'x':
+- raw = z.startTagIn("xmp")
+- }
+- if raw {
+- z.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end]))
+- }
+- // Look for a self-closing token like "<br/>".
+- if z.err == nil && z.buf[z.raw.end-2] == '/' {
+- return SelfClosingTagToken
+- }
+- return StartTagToken
+-}
+-
+-// readTag reads the next tag token and its attributes. If saveAttr, those
+-// attributes are saved in z.attr, otherwise z.attr is set to an empty slice.
+-// The opening "<a" or "</a" has already been consumed, where 'a' means anything
+-// in [A-Za-z].
+-func (z *Tokenizer) readTag(saveAttr bool) {
+- z.attr = z.attr[:0]
+- z.nAttrReturned = 0
+- // Read the tag name and attribute key/value pairs.
+- z.readTagName()
+- if z.skipWhiteSpace(); z.err != nil {
+- return
+- }
+- for {
+- c := z.readByte()
+- if z.err != nil || c == '>' {
+- break
+- }
+- z.raw.end--
+- z.readTagAttrKey()
+- z.readTagAttrVal()
+- // Save pendingAttr if saveAttr and that attribute has a non-empty key.
+- if saveAttr && z.pendingAttr[0].start != z.pendingAttr[0].end {
+- z.attr = append(z.attr, z.pendingAttr)
+- }
+- if z.skipWhiteSpace(); z.err != nil {
+- break
+- }
+- }
+-}
+-
+-// readTagName sets z.data to the "div" in "<div k=v>". The reader (z.raw.end)
+-// is positioned such that the first byte of the tag name (the "d" in "<div")
+-// has already been consumed.
+-func (z *Tokenizer) readTagName() {
+- z.data.start = z.raw.end - 1
+- for {
+- c := z.readByte()
+- if z.err != nil {
+- z.data.end = z.raw.end
+- return
+- }
+- switch c {
+- case ' ', '\n', '\r', '\t', '\f':
+- z.data.end = z.raw.end - 1
+- return
+- case '/', '>':
+- z.raw.end--
+- z.data.end = z.raw.end
+- return
+- }
+- }
+-}
+-
+-// readTagAttrKey sets z.pendingAttr[0] to the "k" in "<div k=v>".
+-// Precondition: z.err == nil.
+-func (z *Tokenizer) readTagAttrKey() {
+- z.pendingAttr[0].start = z.raw.end
+- for {
+- c := z.readByte()
+- if z.err != nil {
+- z.pendingAttr[0].end = z.raw.end
+- return
+- }
+- switch c {
+- case ' ', '\n', '\r', '\t', '\f', '/':
+- z.pendingAttr[0].end = z.raw.end - 1
+- return
+- case '=', '>':
+- z.raw.end--
+- z.pendingAttr[0].end = z.raw.end
+- return
+- }
+- }
+-}
+-
+-// readTagAttrVal sets z.pendingAttr[1] to the "v" in "<div k=v>".
+-func (z *Tokenizer) readTagAttrVal() {
+- z.pendingAttr[1].start = z.raw.end
+- z.pendingAttr[1].end = z.raw.end
+- if z.skipWhiteSpace(); z.err != nil {
+- return
+- }
+- c := z.readByte()
+- if z.err != nil {
+- return
+- }
+- if c != '=' {
+- z.raw.end--
+- return
+- }
+- if z.skipWhiteSpace(); z.err != nil {
+- return
+- }
+- quote := z.readByte()
+- if z.err != nil {
+- return
+- }
+- switch quote {
+- case '>':
+- z.raw.end--
+- return
+-
+- case '\'', '"':
+- z.pendingAttr[1].start = z.raw.end
+- for {
+- c := z.readByte()
+- if z.err != nil {
+- z.pendingAttr[1].end = z.raw.end
+- return
+- }
+- if c == quote {
+- z.pendingAttr[1].end = z.raw.end - 1
+- return
+- }
+- }
+-
+- default:
+- z.pendingAttr[1].start = z.raw.end - 1
+- for {
+- c := z.readByte()
+- if z.err != nil {
+- z.pendingAttr[1].end = z.raw.end
+- return
+- }
+- switch c {
+- case ' ', '\n', '\r', '\t', '\f':
+- z.pendingAttr[1].end = z.raw.end - 1
+- return
+- case '>':
+- z.raw.end--
+- z.pendingAttr[1].end = z.raw.end
+- return
+- }
+- }
+- }
+-}
+-
+-// Next scans the next token and returns its type.
+-func (z *Tokenizer) Next() TokenType {
+- if z.err != nil {
+- z.tt = ErrorToken
+- return z.tt
+- }
+- z.raw.start = z.raw.end
+- z.data.start = z.raw.end
+- z.data.end = z.raw.end
+- if z.rawTag != "" {
+- if z.rawTag == "plaintext" {
+- // Read everything up to EOF.
+- for z.err == nil {
+- z.readByte()
+- }
+- z.data.end = z.raw.end
+- z.textIsRaw = true
+- } else {
+- z.readRawOrRCDATA()
+- }
+- if z.data.end > z.data.start {
+- z.tt = TextToken
+- z.convertNUL = true
+- return z.tt
+- }
+- }
+- z.textIsRaw = false
+- z.convertNUL = false
+-
+-loop:
+- for {
+- c := z.readByte()
+- if z.err != nil {
+- break loop
+- }
+- if c != '<' {
+- continue loop
+- }
+-
+- // Check if the '<' we have just read is part of a tag, comment
+- // or doctype. If not, it's part of the accumulated text token.
+- c = z.readByte()
+- if z.err != nil {
+- break loop
+- }
+- var tokenType TokenType
+- switch {
+- case 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z':
+- tokenType = StartTagToken
+- case c == '/':
+- tokenType = EndTagToken
+- case c == '!' || c == '?':
+- // We use CommentToken to mean any of "<!--actual comments-->",
+- // "<!DOCTYPE declarations>" and "<?xml processing instructions?>".
+- tokenType = CommentToken
+- default:
+- continue
+- }
+-
+- // We have a non-text token, but we might have accumulated some text
+- // before that. If so, we return the text first, and return the non-
+- // text token on the subsequent call to Next.
+- if x := z.raw.end - len("<a"); z.raw.start < x {
+- z.raw.end = x
+- z.data.end = x
+- z.tt = TextToken
+- return z.tt
+- }
+- switch tokenType {
+- case StartTagToken:
+- z.tt = z.readStartTag()
+- return z.tt
+- case EndTagToken:
+- c = z.readByte()
+- if z.err != nil {
+- break loop
+- }
+- if c == '>' {
+- // "</>" does not generate a token at all.
+- // Reset the tokenizer state and start again.
+- z.raw.start = z.raw.end
+- z.data.start = z.raw.end
+- z.data.end = z.raw.end
+- continue loop
+- }
+- if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' {
+- z.readTag(false)
+- if z.err != nil {
+- z.tt = ErrorToken
+- } else {
+- z.tt = EndTagToken
+- }
+- return z.tt
+- }
+- z.raw.end--
+- z.readUntilCloseAngle()
+- z.tt = CommentToken
+- return z.tt
+- case CommentToken:
+- if c == '!' {
+- z.tt = z.readMarkupDeclaration()
+- return z.tt
+- }
+- z.raw.end--
+- z.readUntilCloseAngle()
+- z.tt = CommentToken
+- return z.tt
+- }
+- }
+- if z.raw.start < z.raw.end {
+- z.data.end = z.raw.end
+- z.tt = TextToken
+- return z.tt
+- }
+- z.tt = ErrorToken
+- return z.tt
+-}
+-
+-// Raw returns the unmodified text of the current token. Calling Next, Token,
+-// Text, TagName or TagAttr may change the contents of the returned slice.
+-func (z *Tokenizer) Raw() []byte {
+- return z.buf[z.raw.start:z.raw.end]
+-}
+-
+-// convertNewlines converts "\r" and "\r\n" in s to "\n".
+-// The conversion happens in place, but the resulting slice may be shorter.
+-func convertNewlines(s []byte) []byte {
+- for i, c := range s {
+- if c != '\r' {
+- continue
+- }
+-
+- src := i + 1
+- if src >= len(s) || s[src] != '\n' {
+- s[i] = '\n'
+- continue
+- }
+-
+- dst := i
+- for src < len(s) {
+- if s[src] == '\r' {
+- if src+1 < len(s) && s[src+1] == '\n' {
+- src++
+- }
+- s[dst] = '\n'
+- } else {
+- s[dst] = s[src]
+- }
+- src++
+- dst++
+- }
+- return s[:dst]
+- }
+- return s
+-}
+-
+-var (
+- nul = []byte("\x00")
+- replacement = []byte("\ufffd")
+-)
+-
+-// Text returns the unescaped text of a text, comment or doctype token. The
+-// contents of the returned slice may change on the next call to Next.
+-func (z *Tokenizer) Text() []byte {
+- switch z.tt {
+- case TextToken, CommentToken, DoctypeToken:
+- s := z.buf[z.data.start:z.data.end]
+- z.data.start = z.raw.end
+- z.data.end = z.raw.end
+- s = convertNewlines(s)
+- if (z.convertNUL || z.tt == CommentToken) && bytes.Contains(s, nul) {
+- s = bytes.Replace(s, nul, replacement, -1)
+- }
+- if !z.textIsRaw {
+- s = unescape(s, false)
+- }
+- return s
+- }
+- return nil
+-}
+-
+-// TagName returns the lower-cased name of a tag token (the `img` out of
+-// `<IMG SRC="foo">`) and whether the tag has attributes.
+-// The contents of the returned slice may change on the next call to Next.
+-func (z *Tokenizer) TagName() (name []byte, hasAttr bool) {
+- if z.data.start < z.data.end {
+- switch z.tt {
+- case StartTagToken, EndTagToken, SelfClosingTagToken:
+- s := z.buf[z.data.start:z.data.end]
+- z.data.start = z.raw.end
+- z.data.end = z.raw.end
+- return lower(s), z.nAttrReturned < len(z.attr)
+- }
+- }
+- return nil, false
+-}
+-
+-// TagAttr returns the lower-cased key and unescaped value of the next unparsed
+-// attribute for the current tag token and whether there are more attributes.
+-// The contents of the returned slices may change on the next call to Next.
+-func (z *Tokenizer) TagAttr() (key, val []byte, moreAttr bool) {
+- if z.nAttrReturned < len(z.attr) {
+- switch z.tt {
+- case StartTagToken, SelfClosingTagToken:
+- x := z.attr[z.nAttrReturned]
+- z.nAttrReturned++
+- key = z.buf[x[0].start:x[0].end]
+- val = z.buf[x[1].start:x[1].end]
+- return lower(key), unescape(convertNewlines(val), true), z.nAttrReturned < len(z.attr)
+- }
+- }
+- return nil, nil, false
+-}
+-
+-// Token returns the next Token. The result's Data and Attr values remain valid
+-// after subsequent Next calls.
+-func (z *Tokenizer) Token() Token {
+- t := Token{Type: z.tt}
+- switch z.tt {
+- case TextToken, CommentToken, DoctypeToken:
+- t.Data = string(z.Text())
+- case StartTagToken, SelfClosingTagToken, EndTagToken:
+- name, moreAttr := z.TagName()
+- for moreAttr {
+- var key, val []byte
+- key, val, moreAttr = z.TagAttr()
+- t.Attr = append(t.Attr, Attribute{"", atom.String(key), string(val)})
+- }
+- if a := atom.Lookup(name); a != 0 {
+- t.DataAtom, t.Data = a, a.String()
+- } else {
+- t.DataAtom, t.Data = 0, string(name)
+- }
+- }
+- return t
+-}
+-
+-// NewTokenizer returns a new HTML Tokenizer for the given Reader.
+-// The input is assumed to be UTF-8 encoded.
+-func NewTokenizer(r io.Reader) *Tokenizer {
+- return NewTokenizerFragment(r, "")
+-}
+-
+-// NewTokenizerFragment returns a new HTML Tokenizer for the given Reader, for
+-// tokenizing an exisitng element's InnerHTML fragment. contextTag is that
+-// element's tag, such as "div" or "iframe".
+-//
+-// For example, how the InnerHTML "a<b" is tokenized depends on whether it is
+-// for a <p> tag or a <script> tag.
+-//
+-// The input is assumed to be UTF-8 encoded.
+-func NewTokenizerFragment(r io.Reader, contextTag string) *Tokenizer {
+- z := &Tokenizer{
+- r: r,
+- buf: make([]byte, 0, 4096),
+- }
+- if contextTag != "" {
+- switch s := strings.ToLower(contextTag); s {
+- case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "title", "textarea", "xmp":
+- z.rawTag = s
+- }
+- }
+- return z
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/html/token_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/html/token_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/html/token_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/html/token_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,679 +0,0 @@
+-// Copyright 2010 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 html
+-
+-import (
+- "bytes"
+- "io"
+- "io/ioutil"
+- "runtime"
+- "strings"
+- "testing"
+-)
+-
+-type tokenTest struct {
+- // A short description of the test case.
+- desc string
+- // The HTML to parse.
+- html string
+- // The string representations of the expected tokens, joined by '$'.
+- golden string
+-}
+-
+-var tokenTests = []tokenTest{
+- {
+- "empty",
+- "",
+- "",
+- },
+- // A single text node. The tokenizer should not break text nodes on whitespace,
+- // nor should it normalize whitespace within a text node.
+- {
+- "text",
+- "foo bar",
+- "foo bar",
+- },
+- // An entity.
+- {
+- "entity",
+- "one < two",
+- "one < two",
+- },
+- // A start, self-closing and end tag. The tokenizer does not care if the start
+- // and end tokens don't match; that is the job of the parser.
+- {
+- "tags",
+- "<a>b<c/>d</e>",
+- "<a>$b$<c/>$d$</e>",
+- },
+- // Angle brackets that aren't a tag.
+- {
+- "not a tag #0",
+- "<",
+- "<",
+- },
+- {
+- "not a tag #1",
+- "</",
+- "</",
+- },
+- {
+- "not a tag #2",
+- "</>",
+- "",
+- },
+- {
+- "not a tag #3",
+- "a</>b",
+- "a$b",
+- },
+- {
+- "not a tag #4",
+- "</ >",
+- "<!-- -->",
+- },
+- {
+- "not a tag #5",
+- "</.",
+- "<!--.-->",
+- },
+- {
+- "not a tag #6",
+- "</.>",
+- "<!--.-->",
+- },
+- {
+- "not a tag #7",
+- "a < b",
+- "a < b",
+- },
+- {
+- "not a tag #8",
+- "<.>",
+- "<.>",
+- },
+- {
+- "not a tag #9",
+- "a<<<b>>>c",
+- "a<<$<b>$>>c",
+- },
+- {
+- "not a tag #10",
+- "if x<0 and y < 0 then x*y>0",
+- "if x<0 and y < 0 then x*y>0",
+- },
+- // EOF in a tag name.
+- {
+- "tag name eof #0",
+- "<a",
+- "",
+- },
+- {
+- "tag name eof #1",
+- "<a ",
+- "",
+- },
+- {
+- "tag name eof #2",
+- "a<b",
+- "a",
+- },
+- {
+- "tag name eof #3",
+- "<a><b",
+- "<a>",
+- },
+- {
+- "tag name eof #4",
+- `<a x`,
+- ``,
+- },
+- // Some malformed tags that are missing a '>'.
+- {
+- "malformed tag #0",
+- `<p</p>`,
+- `<p< p="">`,
+- },
+- {
+- "malformed tag #1",
+- `<p </p>`,
+- `<p <="" p="">`,
+- },
+- {
+- "malformed tag #2",
+- `<p id`,
+- ``,
+- },
+- {
+- "malformed tag #3",
+- `<p id=`,
+- ``,
+- },
+- {
+- "malformed tag #4",
+- `<p id=>`,
+- `<p id="">`,
+- },
+- {
+- "malformed tag #5",
+- `<p id=0`,
+- ``,
+- },
+- {
+- "malformed tag #6",
+- `<p id=0</p>`,
+- `<p id="0</p">`,
+- },
+- {
+- "malformed tag #7",
+- `<p id="0</p>`,
+- ``,
+- },
+- {
+- "malformed tag #8",
+- `<p id="0"</p>`,
+- `<p id="0" <="" p="">`,
+- },
+- {
+- "malformed tag #9",
+- `<p></p id`,
+- `<p>`,
+- },
+- // Raw text and RCDATA.
+- {
+- "basic raw text",
+- "<script><a></b></script>",
+- "<script>$<a></b>$</script>",
+- },
+- {
+- "unfinished script end tag",
+- "<SCRIPT>a</SCR",
+- "<script>$a</SCR",
+- },
+- {
+- "broken script end tag",
+- "<SCRIPT>a</SCR ipt>",
+- "<script>$a</SCR ipt>",
+- },
+- {
+- "EOF in script end tag",
+- "<SCRIPT>a</SCRipt",
+- "<script>$a</SCRipt",
+- },
+- {
+- "scriptx end tag",
+- "<SCRIPT>a</SCRiptx",
+- "<script>$a</SCRiptx",
+- },
+- {
+- "' ' completes script end tag",
+- "<SCRIPT>a</SCRipt ",
+- "<script>$a",
+- },
+- {
+- "'>' completes script end tag",
+- "<SCRIPT>a</SCRipt>",
+- "<script>$a$</script>",
+- },
+- {
+- "self-closing script end tag",
+- "<SCRIPT>a</SCRipt/>",
+- "<script>$a$</script>",
+- },
+- {
+- "nested script tag",
+- "<SCRIPT>a</SCRipt<script>",
+- "<script>$a</SCRipt<script>",
+- },
+- {
+- "script end tag after unfinished",
+- "<SCRIPT>a</SCRipt</script>",
+- "<script>$a</SCRipt$</script>",
+- },
+- {
+- "script/style mismatched tags",
+- "<script>a</style>",
+- "<script>$a</style>",
+- },
+- {
+- "style element with entity",
+- "<style>'",
+- "<style>$&apos;",
+- },
+- {
+- "textarea with tag",
+- "<textarea><div></textarea>",
+- "<textarea>$<div>$</textarea>",
+- },
+- {
+- "title with tag and entity",
+- "<title><b>K&R C</b></title>",
+- "<title>$<b>K&R C</b>$</title>",
+- },
+- // DOCTYPE tests.
+- {
+- "Proper DOCTYPE",
+- "<!DOCTYPE html>",
+- "<!DOCTYPE html>",
+- },
+- {
+- "DOCTYPE with no space",
+- "<!doctypehtml>",
+- "<!DOCTYPE html>",
+- },
+- {
+- "DOCTYPE with two spaces",
+- "<!doctype html>",
+- "<!DOCTYPE html>",
+- },
+- {
+- "looks like DOCTYPE but isn't",
+- "<!DOCUMENT html>",
+- "<!--DOCUMENT html-->",
+- },
+- {
+- "DOCTYPE at EOF",
+- "<!DOCtype",
+- "<!DOCTYPE >",
+- },
+- // XML processing instructions.
+- {
+- "XML processing instruction",
+- "<?xml?>",
+- "<!--?xml?-->",
+- },
+- // Comments.
+- {
+- "comment0",
+- "abc<b><!-- skipme --></b>def",
+- "abc$<b>$<!-- skipme -->$</b>$def",
+- },
+- {
+- "comment1",
+- "a<!-->z",
+- "a$<!---->$z",
+- },
+- {
+- "comment2",
+- "a<!--->z",
+- "a$<!---->$z",
+- },
+- {
+- "comment3",
+- "a<!--x>-->z",
+- "a$<!--x>-->$z",
+- },
+- {
+- "comment4",
+- "a<!--x->-->z",
+- "a$<!--x->-->$z",
+- },
+- {
+- "comment5",
+- "a<!>z",
+- "a$<!---->$z",
+- },
+- {
+- "comment6",
+- "a<!->z",
+- "a$<!----->$z",
+- },
+- {
+- "comment7",
+- "a<!---<>z",
+- "a$<!---<>z-->",
+- },
+- {
+- "comment8",
+- "a<!--z",
+- "a$<!--z-->",
+- },
+- {
+- "comment9",
+- "a<!--z-",
+- "a$<!--z-->",
+- },
+- {
+- "comment10",
+- "a<!--z--",
+- "a$<!--z-->",
+- },
+- {
+- "comment11",
+- "a<!--z---",
+- "a$<!--z--->",
+- },
+- {
+- "comment12",
+- "a<!--z----",
+- "a$<!--z---->",
+- },
+- {
+- "comment13",
+- "a<!--x--!>z",
+- "a$<!--x-->$z",
+- },
+- // An attribute with a backslash.
+- {
+- "backslash",
+- `<p id="a\"b">`,
+- `<p id="a\" b"="">`,
+- },
+- // Entities, tag name and attribute key lower-casing, and whitespace
+- // normalization within a tag.
+- {
+- "tricky",
+- "<p \t\n iD=\"a"B\" foo=\"bar\"><EM>te<&;xt</em></p>",
+- `<p id="a"B" foo="bar">$<em>$te<&;xt$</em>$</p>`,
+- },
+- // A nonexistent entity. Tokenizing and converting back to a string should
+- // escape the "&" to become "&".
+- {
+- "noSuchEntity",
+- `<a b="c&noSuchEntity;d"><&alsoDoesntExist;&`,
+- `<a b="c&noSuchEntity;d">$<&alsoDoesntExist;&`,
+- },
+- {
+- "entity without semicolon",
+- `¬it;∉<a b="q=z&=5¬ice=hello¬=world">`,
+- `¬it;∉$<a b="q=z&amp=5&notice=hello¬=world">`,
+- },
+- {
+- "entity with digits",
+- "½",
+- "½",
+- },
+- // Attribute tests:
+- // http://dev.w3.org/html5/spec/Overview.html#attributes-0
+- {
+- "Empty attribute",
+- `<input disabled FOO>`,
+- `<input disabled="" foo="">`,
+- },
+- {
+- "Empty attribute, whitespace",
+- `<input disabled FOO >`,
+- `<input disabled="" foo="">`,
+- },
+- {
+- "Unquoted attribute value",
+- `<input value=yes FOO=BAR>`,
+- `<input value="yes" foo="BAR">`,
+- },
+- {
+- "Unquoted attribute value, spaces",
+- `<input value = yes FOO = BAR>`,
+- `<input value="yes" foo="BAR">`,
+- },
+- {
+- "Unquoted attribute value, trailing space",
+- `<input value=yes FOO=BAR >`,
+- `<input value="yes" foo="BAR">`,
+- },
+- {
+- "Single-quoted attribute value",
+- `<input value='yes' FOO='BAR'>`,
+- `<input value="yes" foo="BAR">`,
+- },
+- {
+- "Single-quoted attribute value, trailing space",
+- `<input value='yes' FOO='BAR' >`,
+- `<input value="yes" foo="BAR">`,
+- },
+- {
+- "Double-quoted attribute value",
+- `<input value="I'm an attribute" FOO="BAR">`,
+- `<input value="I'm an attribute" foo="BAR">`,
+- },
+- {
+- "Attribute name characters",
+- `<meta http-equiv="content-type">`,
+- `<meta http-equiv="content-type">`,
+- },
+- {
+- "Mixed attributes",
+- `a<P V="0 1" w='2' X=3 y>z`,
+- `a$<p v="0 1" w="2" x="3" y="">$z`,
+- },
+- {
+- "Attributes with a solitary single quote",
+- `<p id=can't><p id=won't>`,
+- `<p id="can't">$<p id="won't">`,
+- },
+-}
+-
+-func TestTokenizer(t *testing.T) {
+-loop:
+- for _, tt := range tokenTests {
+- z := NewTokenizer(strings.NewReader(tt.html))
+- if tt.golden != "" {
+- for i, s := range strings.Split(tt.golden, "$") {
+- if z.Next() == ErrorToken {
+- t.Errorf("%s token %d: want %q got error %v", tt.desc, i, s, z.Err())
+- continue loop
+- }
+- actual := z.Token().String()
+- if s != actual {
+- t.Errorf("%s token %d: want %q got %q", tt.desc, i, s, actual)
+- continue loop
+- }
+- }
+- }
+- z.Next()
+- if z.Err() != io.EOF {
+- t.Errorf("%s: want EOF got %q", tt.desc, z.Err())
+- }
+- }
+-}
+-
+-type unescapeTest struct {
+- // A short description of the test case.
+- desc string
+- // The HTML text.
+- html string
+- // The unescaped text.
+- unescaped string
+-}
+-
+-var unescapeTests = []unescapeTest{
+- // Handle no entities.
+- {
+- "copy",
+- "A\ttext\nstring",
+- "A\ttext\nstring",
+- },
+- // Handle simple named entities.
+- {
+- "simple",
+- "& > <",
+- "& > <",
+- },
+- // Handle hitting the end of the string.
+- {
+- "stringEnd",
+- "& &",
+- "& &",
+- },
+- // Handle entities with two codepoints.
+- {
+- "multiCodepoint",
+- "text ⋛︀ blah",
+- "text \u22db\ufe00 blah",
+- },
+- // Handle decimal numeric entities.
+- {
+- "decimalEntity",
+- "Delta = Δ ",
+- "Delta = Δ ",
+- },
+- // Handle hexadecimal numeric entities.
+- {
+- "hexadecimalEntity",
+- "Lambda = λ = λ ",
+- "Lambda = λ = λ ",
+- },
+- // Handle numeric early termination.
+- {
+- "numericEnds",
+- "&# &#x €43 © = ©f = ©",
+- "&# &#x €43 © = ©f = ©",
+- },
+- // Handle numeric ISO-8859-1 entity replacements.
+- {
+- "numericReplacements",
+- "Footnote‡",
+- "Footnote‡",
+- },
+-}
+-
+-func TestUnescape(t *testing.T) {
+- for _, tt := range unescapeTests {
+- unescaped := UnescapeString(tt.html)
+- if unescaped != tt.unescaped {
+- t.Errorf("TestUnescape %s: want %q, got %q", tt.desc, tt.unescaped, unescaped)
+- }
+- }
+-}
+-
+-func TestUnescapeEscape(t *testing.T) {
+- ss := []string{
+- ``,
+- `abc def`,
+- `a & b`,
+- `a&b`,
+- `a & b`,
+- `"`,
+- `"`,
+- `"<&>"`,
+- `"<&>"`,
+- `3&5==1 && 0<1, "0<1", a+acute=á`,
+- `The special characters are: <, >, &, ' and "`,
+- }
+- for _, s := range ss {
+- if got := UnescapeString(EscapeString(s)); got != s {
+- t.Errorf("got %q want %q", got, s)
+- }
+- }
+-}
+-
+-func TestBufAPI(t *testing.T) {
+- s := "0<a>1</a>2<b>3<a>4<a>5</a>6</b>7</a>8<a/>9"
+- z := NewTokenizer(bytes.NewBufferString(s))
+- var result bytes.Buffer
+- depth := 0
+-loop:
+- for {
+- tt := z.Next()
+- switch tt {
+- case ErrorToken:
+- if z.Err() != io.EOF {
+- t.Error(z.Err())
+- }
+- break loop
+- case TextToken:
+- if depth > 0 {
+- result.Write(z.Text())
+- }
+- case StartTagToken, EndTagToken:
+- tn, _ := z.TagName()
+- if len(tn) == 1 && tn[0] == 'a' {
+- if tt == StartTagToken {
+- depth++
+- } else {
+- depth--
+- }
+- }
+- }
+- }
+- u := "14567"
+- v := string(result.Bytes())
+- if u != v {
+- t.Errorf("TestBufAPI: want %q got %q", u, v)
+- }
+-}
+-
+-func TestConvertNewlines(t *testing.T) {
+- testCases := map[string]string{
+- "Mac\rDOS\r\nUnix\n": "Mac\nDOS\nUnix\n",
+- "Unix\nMac\rDOS\r\n": "Unix\nMac\nDOS\n",
+- "DOS\r\nDOS\r\nDOS\r\n": "DOS\nDOS\nDOS\n",
+- "": "",
+- "\n": "\n",
+- "\n\r": "\n\n",
+- "\r": "\n",
+- "\r\n": "\n",
+- "\r\n\n": "\n\n",
+- "\r\n\r": "\n\n",
+- "\r\n\r\n": "\n\n",
+- "\r\r": "\n\n",
+- "\r\r\n": "\n\n",
+- "\r\r\n\n": "\n\n\n",
+- "\r\r\r\n": "\n\n\n",
+- "\r \n": "\n \n",
+- "xyz": "xyz",
+- }
+- for in, want := range testCases {
+- if got := string(convertNewlines([]byte(in))); got != want {
+- t.Errorf("input %q: got %q, want %q", in, got, want)
+- }
+- }
+-}
+-
+-const (
+- rawLevel = iota
+- lowLevel
+- highLevel
+-)
+-
+-func benchmarkTokenizer(b *testing.B, level int) {
+- buf, err := ioutil.ReadFile("testdata/go1.html")
+- if err != nil {
+- b.Fatalf("could not read testdata/go1.html: %v", err)
+- }
+- b.SetBytes(int64(len(buf)))
+- runtime.GC()
+- b.ReportAllocs()
+- b.ResetTimer()
+- for i := 0; i < b.N; i++ {
+- z := NewTokenizer(bytes.NewBuffer(buf))
+- for {
+- tt := z.Next()
+- if tt == ErrorToken {
+- if err := z.Err(); err != nil && err != io.EOF {
+- b.Fatalf("tokenizer error: %v", err)
+- }
+- break
+- }
+- switch level {
+- case rawLevel:
+- // Calling z.Raw just returns the raw bytes of the token. It does
+- // not unescape < to <, or lower-case tag names and attribute keys.
+- z.Raw()
+- case lowLevel:
+- // Caling z.Text, z.TagName and z.TagAttr returns []byte values
+- // whose contents may change on the next call to z.Next.
+- switch tt {
+- case TextToken, CommentToken, DoctypeToken:
+- z.Text()
+- case StartTagToken, SelfClosingTagToken:
+- _, more := z.TagName()
+- for more {
+- _, _, more = z.TagAttr()
+- }
+- case EndTagToken:
+- z.TagName()
+- }
+- case highLevel:
+- // Calling z.Token converts []byte values to strings whose validity
+- // extend beyond the next call to z.Next.
+- z.Token()
+- }
+- }
+- }
+-}
+-
+-func BenchmarkRawLevelTokenizer(b *testing.B) { benchmarkTokenizer(b, rawLevel) }
+-func BenchmarkLowLevelTokenizer(b *testing.B) { benchmarkTokenizer(b, lowLevel) }
+-func BenchmarkHighLevelTokenizer(b *testing.B) { benchmarkTokenizer(b, highLevel) }
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/idna/idna.go docker-devmapper/vendor/src/code.google.com/p/go.net/idna/idna.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/idna/idna.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/idna/idna.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,68 +0,0 @@
+-// Copyright 2012 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 idna implements IDNA2008 (Internationalized Domain Names for
+-// Applications), defined in RFC 5890, RFC 5891, RFC 5892, RFC 5893 and
+-// RFC 5894.
+-package idna
+-
+-import (
+- "strings"
+- "unicode/utf8"
+-)
+-
+-// TODO(nigeltao): specify when errors occur. For example, is ToASCII(".") or
+-// ToASCII("foo\x00") an error? See also http://www.unicode.org/faq/idn.html#11
+-
+-// acePrefix is the ASCII Compatible Encoding prefix.
+-const acePrefix = "xn--"
+-
+-// ToASCII converts a domain or domain label to its ASCII form. For example,
+-// ToASCII("bücher.example.com") is "xn--bcher-kva.example.com", and
+-// ToASCII("golang") is "golang".
+-func ToASCII(s string) (string, error) {
+- if ascii(s) {
+- return s, nil
+- }
+- labels := strings.Split(s, ".")
+- for i, label := range labels {
+- if !ascii(label) {
+- a, err := encode(acePrefix, label)
+- if err != nil {
+- return "", err
+- }
+- labels[i] = a
+- }
+- }
+- return strings.Join(labels, "."), nil
+-}
+-
+-// ToUnicode converts a domain or domain label to its Unicode form. For example,
+-// ToUnicode("xn--bcher-kva.example.com") is "bücher.example.com", and
+-// ToUnicode("golang") is "golang".
+-func ToUnicode(s string) (string, error) {
+- if !strings.Contains(s, acePrefix) {
+- return s, nil
+- }
+- labels := strings.Split(s, ".")
+- for i, label := range labels {
+- if strings.HasPrefix(label, acePrefix) {
+- u, err := decode(label[len(acePrefix):])
+- if err != nil {
+- return "", err
+- }
+- labels[i] = u
+- }
+- }
+- return strings.Join(labels, "."), nil
+-}
+-
+-func ascii(s string) bool {
+- for i := 0; i < len(s); i++ {
+- if s[i] >= utf8.RuneSelf {
+- return false
+- }
+- }
+- return true
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/idna/idna_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/idna/idna_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/idna/idna_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/idna/idna_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,43 +0,0 @@
+-// Copyright 2012 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 idna
+-
+-import (
+- "testing"
+-)
+-
+-var idnaTestCases = [...]struct {
+- ascii, unicode string
+-}{
+- // Labels.
+- {"books", "books"},
+- {"xn--bcher-kva", "bücher"},
+-
+- // Domains.
+- {"foo--xn--bar.org", "foo--xn--bar.org"},
+- {"golang.org", "golang.org"},
+- {"example.xn--p1ai", "example.рф"},
+- {"xn--czrw28b.tw", "商業.tw"},
+- {"www.xn--mller-kva.de", "www.müller.de"},
+-}
+-
+-func TestIDNA(t *testing.T) {
+- for _, tc := range idnaTestCases {
+- if a, err := ToASCII(tc.unicode); err != nil {
+- t.Errorf("ToASCII(%q): %v", tc.unicode, err)
+- } else if a != tc.ascii {
+- t.Errorf("ToASCII(%q): got %q, want %q", tc.unicode, a, tc.ascii)
+- }
+-
+- if u, err := ToUnicode(tc.ascii); err != nil {
+- t.Errorf("ToUnicode(%q): %v", tc.ascii, err)
+- } else if u != tc.unicode {
+- t.Errorf("ToUnicode(%q): got %q, want %q", tc.ascii, u, tc.unicode)
+- }
+- }
+-}
+-
+-// TODO(nigeltao): test errors, once we've specified when ToASCII and ToUnicode
+-// return errors.
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/idna/punycode.go docker-devmapper/vendor/src/code.google.com/p/go.net/idna/punycode.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/idna/punycode.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/idna/punycode.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,200 +0,0 @@
+-// Copyright 2012 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 idna
+-
+-// This file implements the Punycode algorithm from RFC 3492.
+-
+-import (
+- "fmt"
+- "math"
+- "strings"
+- "unicode/utf8"
+-)
+-
+-// These parameter values are specified in section 5.
+-//
+-// All computation is done with int32s, so that overflow behavior is identical
+-// regardless of whether int is 32-bit or 64-bit.
+-const (
+- base int32 = 36
+- damp int32 = 700
+- initialBias int32 = 72
+- initialN int32 = 128
+- skew int32 = 38
+- tmax int32 = 26
+- tmin int32 = 1
+-)
+-
+-// decode decodes a string as specified in section 6.2.
+-func decode(encoded string) (string, error) {
+- if encoded == "" {
+- return "", nil
+- }
+- pos := 1 + strings.LastIndex(encoded, "-")
+- if pos == 1 {
+- return "", fmt.Errorf("idna: invalid label %q", encoded)
+- }
+- if pos == len(encoded) {
+- return encoded[:len(encoded)-1], nil
+- }
+- output := make([]rune, 0, len(encoded))
+- if pos != 0 {
+- for _, r := range encoded[:pos-1] {
+- output = append(output, r)
+- }
+- }
+- i, n, bias := int32(0), initialN, initialBias
+- for pos < len(encoded) {
+- oldI, w := i, int32(1)
+- for k := base; ; k += base {
+- if pos == len(encoded) {
+- return "", fmt.Errorf("idna: invalid label %q", encoded)
+- }
+- digit, ok := decodeDigit(encoded[pos])
+- if !ok {
+- return "", fmt.Errorf("idna: invalid label %q", encoded)
+- }
+- pos++
+- i += digit * w
+- if i < 0 {
+- return "", fmt.Errorf("idna: invalid label %q", encoded)
+- }
+- t := k - bias
+- if t < tmin {
+- t = tmin
+- } else if t > tmax {
+- t = tmax
+- }
+- if digit < t {
+- break
+- }
+- w *= base - t
+- if w >= math.MaxInt32/base {
+- return "", fmt.Errorf("idna: invalid label %q", encoded)
+- }
+- }
+- x := int32(len(output) + 1)
+- bias = adapt(i-oldI, x, oldI == 0)
+- n += i / x
+- i %= x
+- if n > utf8.MaxRune || len(output) >= 1024 {
+- return "", fmt.Errorf("idna: invalid label %q", encoded)
+- }
+- output = append(output, 0)
+- copy(output[i+1:], output[i:])
+- output[i] = n
+- i++
+- }
+- return string(output), nil
+-}
+-
+-// encode encodes a string as specified in section 6.3 and prepends prefix to
+-// the result.
+-//
+-// The "while h < length(input)" line in the specification becomes "for
+-// remaining != 0" in the Go code, because len(s) in Go is in bytes, not runes.
+-func encode(prefix, s string) (string, error) {
+- output := make([]byte, len(prefix), len(prefix)+1+2*len(s))
+- copy(output, prefix)
+- delta, n, bias := int32(0), initialN, initialBias
+- b, remaining := int32(0), int32(0)
+- for _, r := range s {
+- if r < 0x80 {
+- b++
+- output = append(output, byte(r))
+- } else {
+- remaining++
+- }
+- }
+- h := b
+- if b > 0 {
+- output = append(output, '-')
+- }
+- for remaining != 0 {
+- m := int32(0x7fffffff)
+- for _, r := range s {
+- if m > r && r >= n {
+- m = r
+- }
+- }
+- delta += (m - n) * (h + 1)
+- if delta < 0 {
+- return "", fmt.Errorf("idna: invalid label %q", s)
+- }
+- n = m
+- for _, r := range s {
+- if r < n {
+- delta++
+- if delta < 0 {
+- return "", fmt.Errorf("idna: invalid label %q", s)
+- }
+- continue
+- }
+- if r > n {
+- continue
+- }
+- q := delta
+- for k := base; ; k += base {
+- t := k - bias
+- if t < tmin {
+- t = tmin
+- } else if t > tmax {
+- t = tmax
+- }
+- if q < t {
+- break
+- }
+- output = append(output, encodeDigit(t+(q-t)%(base-t)))
+- q = (q - t) / (base - t)
+- }
+- output = append(output, encodeDigit(q))
+- bias = adapt(delta, h+1, h == b)
+- delta = 0
+- h++
+- remaining--
+- }
+- delta++
+- n++
+- }
+- return string(output), nil
+-}
+-
+-func decodeDigit(x byte) (digit int32, ok bool) {
+- switch {
+- case '0' <= x && x <= '9':
+- return int32(x - ('0' - 26)), true
+- case 'A' <= x && x <= 'Z':
+- return int32(x - 'A'), true
+- case 'a' <= x && x <= 'z':
+- return int32(x - 'a'), true
+- }
+- return 0, false
+-}
+-
+-func encodeDigit(digit int32) byte {
+- switch {
+- case 0 <= digit && digit < 26:
+- return byte(digit + 'a')
+- case 26 <= digit && digit < 36:
+- return byte(digit + ('0' - 26))
+- }
+- panic("idna: internal error in punycode encoding")
+-}
+-
+-// adapt is the bias adaptation function specified in section 6.1.
+-func adapt(delta, numPoints int32, firstTime bool) int32 {
+- if firstTime {
+- delta /= damp
+- } else {
+- delta /= 2
+- }
+- delta += delta / numPoints
+- k := int32(0)
+- for delta > ((base-tmin)*tmax)/2 {
+- delta /= base - tmin
+- k += base
+- }
+- return k + (base-tmin+1)*delta/(delta+skew)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/idna/punycode_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/idna/punycode_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/idna/punycode_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/idna/punycode_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,198 +0,0 @@
+-// Copyright 2012 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 idna
+-
+-import (
+- "strings"
+- "testing"
+-)
+-
+-var punycodeTestCases = [...]struct {
+- s, encoded string
+-}{
+- {"", ""},
+- {"-", "--"},
+- {"-a", "-a-"},
+- {"-a-", "-a--"},
+- {"a", "a-"},
+- {"a-", "a--"},
+- {"a-b", "a-b-"},
+- {"books", "books-"},
+- {"bücher", "bcher-kva"},
+- {"Hello世界", "Hello-ck1hg65u"},
+- {"ü", "tda"},
+- {"üý", "tdac"},
+-
+- // The test cases below come from RFC 3492 section 7.1 with Errata 3026.
+- {
+- // (A) Arabic (Egyptian).
+- "\u0644\u064A\u0647\u0645\u0627\u0628\u062A\u0643\u0644" +
+- "\u0645\u0648\u0634\u0639\u0631\u0628\u064A\u061F",
+- "egbpdaj6bu4bxfgehfvwxn",
+- },
+- {
+- // (B) Chinese (simplified).
+- "\u4ED6\u4EEC\u4E3A\u4EC0\u4E48\u4E0D\u8BF4\u4E2D\u6587",
+- "ihqwcrb4cv8a8dqg056pqjye",
+- },
+- {
+- // (C) Chinese (traditional).
+- "\u4ED6\u5011\u7232\u4EC0\u9EBD\u4E0D\u8AAA\u4E2D\u6587",
+- "ihqwctvzc91f659drss3x8bo0yb",
+- },
+- {
+- // (D) Czech.
+- "\u0050\u0072\u006F\u010D\u0070\u0072\u006F\u0073\u0074" +
+- "\u011B\u006E\u0065\u006D\u006C\u0075\u0076\u00ED\u010D" +
+- "\u0065\u0073\u006B\u0079",
+- "Proprostnemluvesky-uyb24dma41a",
+- },
+- {
+- // (E) Hebrew.
+- "\u05DC\u05DE\u05D4\u05D4\u05DD\u05E4\u05E9\u05D5\u05D8" +
+- "\u05DC\u05D0\u05DE\u05D3\u05D1\u05E8\u05D9\u05DD\u05E2" +
+- "\u05D1\u05E8\u05D9\u05EA",
+- "4dbcagdahymbxekheh6e0a7fei0b",
+- },
+- {
+- // (F) Hindi (Devanagari).
+- "\u092F\u0939\u0932\u094B\u0917\u0939\u093F\u0928\u094D" +
+- "\u0926\u0940\u0915\u094D\u092F\u094B\u0902\u0928\u0939" +
+- "\u0940\u0902\u092C\u094B\u0932\u0938\u0915\u0924\u0947" +
+- "\u0939\u0948\u0902",
+- "i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd",
+- },
+- {
+- // (G) Japanese (kanji and hiragana).
+- "\u306A\u305C\u307F\u3093\u306A\u65E5\u672C\u8A9E\u3092" +
+- "\u8A71\u3057\u3066\u304F\u308C\u306A\u3044\u306E\u304B",
+- "n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa",
+- },
+- {
+- // (H) Korean (Hangul syllables).
+- "\uC138\uACC4\uC758\uBAA8\uB4E0\uC0AC\uB78C\uB4E4\uC774" +
+- "\uD55C\uAD6D\uC5B4\uB97C\uC774\uD574\uD55C\uB2E4\uBA74" +
+- "\uC5BC\uB9C8\uB098\uC88B\uC744\uAE4C",
+- "989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5j" +
+- "psd879ccm6fea98c",
+- },
+- {
+- // (I) Russian (Cyrillic).
+- "\u043F\u043E\u0447\u0435\u043C\u0443\u0436\u0435\u043E" +
+- "\u043D\u0438\u043D\u0435\u0433\u043E\u0432\u043E\u0440" +
+- "\u044F\u0442\u043F\u043E\u0440\u0443\u0441\u0441\u043A" +
+- "\u0438",
+- "b1abfaaepdrnnbgefbadotcwatmq2g4l",
+- },
+- {
+- // (J) Spanish.
+- "\u0050\u006F\u0072\u0071\u0075\u00E9\u006E\u006F\u0070" +
+- "\u0075\u0065\u0064\u0065\u006E\u0073\u0069\u006D\u0070" +
+- "\u006C\u0065\u006D\u0065\u006E\u0074\u0065\u0068\u0061" +
+- "\u0062\u006C\u0061\u0072\u0065\u006E\u0045\u0073\u0070" +
+- "\u0061\u00F1\u006F\u006C",
+- "PorqunopuedensimplementehablarenEspaol-fmd56a",
+- },
+- {
+- // (K) Vietnamese.
+- "\u0054\u1EA1\u0069\u0073\u0061\u006F\u0068\u1ECD\u006B" +
+- "\u0068\u00F4\u006E\u0067\u0074\u0068\u1EC3\u0063\u0068" +
+- "\u1EC9\u006E\u00F3\u0069\u0074\u0069\u1EBF\u006E\u0067" +
+- "\u0056\u0069\u1EC7\u0074",
+- "TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g",
+- },
+- {
+- // (L) 3<nen>B<gumi><kinpachi><sensei>.
+- "\u0033\u5E74\u0042\u7D44\u91D1\u516B\u5148\u751F",
+- "3B-ww4c5e180e575a65lsy2b",
+- },
+- {
+- // (M) <amuro><namie>-with-SUPER-MONKEYS.
+- "\u5B89\u5BA4\u5948\u7F8E\u6075\u002D\u0077\u0069\u0074" +
+- "\u0068\u002D\u0053\u0055\u0050\u0045\u0052\u002D\u004D" +
+- "\u004F\u004E\u004B\u0045\u0059\u0053",
+- "-with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n",
+- },
+- {
+- // (N) Hello-Another-Way-<sorezore><no><basho>.
+- "\u0048\u0065\u006C\u006C\u006F\u002D\u0041\u006E\u006F" +
+- "\u0074\u0068\u0065\u0072\u002D\u0057\u0061\u0079\u002D" +
+- "\u305D\u308C\u305E\u308C\u306E\u5834\u6240",
+- "Hello-Another-Way--fc4qua05auwb3674vfr0b",
+- },
+- {
+- // (O) <hitotsu><yane><no><shita>2.
+- "\u3072\u3068\u3064\u5C4B\u6839\u306E\u4E0B\u0032",
+- "2-u9tlzr9756bt3uc0v",
+- },
+- {
+- // (P) Maji<de>Koi<suru>5<byou><mae>
+- "\u004D\u0061\u006A\u0069\u3067\u004B\u006F\u0069\u3059" +
+- "\u308B\u0035\u79D2\u524D",
+- "MajiKoi5-783gue6qz075azm5e",
+- },
+- {
+- // (Q) <pafii>de<runba>
+- "\u30D1\u30D5\u30A3\u30FC\u0064\u0065\u30EB\u30F3\u30D0",
+- "de-jg4avhby1noc0d",
+- },
+- {
+- // (R) <sono><supiido><de>
+- "\u305D\u306E\u30B9\u30D4\u30FC\u30C9\u3067",
+- "d9juau41awczczp",
+- },
+- {
+- // (S) -> $1.00 <-
+- "\u002D\u003E\u0020\u0024\u0031\u002E\u0030\u0030\u0020" +
+- "\u003C\u002D",
+- "-> $1.00 <--",
+- },
+-}
+-
+-func TestPunycode(t *testing.T) {
+- for _, tc := range punycodeTestCases {
+- if got, err := decode(tc.encoded); err != nil {
+- t.Errorf("decode(%q): %v", tc.encoded, err)
+- } else if got != tc.s {
+- t.Errorf("decode(%q): got %q, want %q", tc.encoded, got, tc.s)
+- }
+-
+- if got, err := encode("", tc.s); err != nil {
+- t.Errorf(`encode("", %q): %v`, tc.s, err)
+- } else if got != tc.encoded {
+- t.Errorf(`encode("", %q): got %q, want %q`, tc.s, got, tc.encoded)
+- }
+- }
+-}
+-
+-var punycodeErrorTestCases = [...]string{
+- "decode -", // A sole '-' is invalid.
+- "decode foo\x00bar", // '\x00' is not in [0-9A-Za-z].
+- "decode foo#bar", // '#' is not in [0-9A-Za-z].
+- "decode foo\u00A3bar", // '\u00A3' is not in [0-9A-Za-z].
+- "decode 9", // "9a" decodes to codepoint \u00A3; "9" is truncated.
+- "decode 99999a", // "99999a" decodes to codepoint \U0048A3C1, which is > \U0010FFFF.
+- "decode 9999999999a", // "9999999999a" overflows the int32 calculation.
+-
+- "encode " + strings.Repeat("x", 65536) + "\uff00", // int32 overflow.
+-}
+-
+-func TestPunycodeErrors(t *testing.T) {
+- for _, tc := range punycodeErrorTestCases {
+- var err error
+- switch {
+- case strings.HasPrefix(tc, "decode "):
+- _, err = decode(tc[7:])
+- case strings.HasPrefix(tc, "encode "):
+- _, err = encode("", tc[7:])
+- }
+- if err == nil {
+- if len(tc) > 256 {
+- tc = tc[:100] + "..." + tc[len(tc)-100:]
+- }
+- t.Errorf("no error for %s", tc)
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/control_bsd.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/control_bsd.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/control_bsd.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/control_bsd.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,121 +0,0 @@
+-// Copyright 2012 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 darwin freebsd netbsd openbsd
+-
+-package ipv4
+-
+-import (
+- "net"
+- "os"
+- "syscall"
+- "unsafe"
+-)
+-
+-func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
+- opt.Lock()
+- defer opt.Unlock()
+- if cf&FlagTTL != 0 {
+- if err := setIPv4ReceiveTTL(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(FlagTTL)
+- } else {
+- opt.clear(FlagTTL)
+- }
+- }
+- if cf&FlagDst != 0 {
+- if err := setIPv4ReceiveDestinationAddress(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(FlagDst)
+- } else {
+- opt.clear(FlagDst)
+- }
+- }
+- if cf&FlagInterface != 0 {
+- if err := setIPv4ReceiveInterface(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(FlagInterface)
+- } else {
+- opt.clear(FlagInterface)
+- }
+- }
+- return nil
+-}
+-
+-func newControlMessage(opt *rawOpt) (oob []byte) {
+- opt.Lock()
+- defer opt.Unlock()
+- l, off := 0, 0
+- if opt.isset(FlagTTL) {
+- l += syscall.CmsgSpace(1)
+- }
+- if opt.isset(FlagDst) {
+- l += syscall.CmsgSpace(net.IPv4len)
+- }
+- if opt.isset(FlagInterface) {
+- l += syscall.CmsgSpace(syscall.SizeofSockaddrDatalink)
+- }
+- if l > 0 {
+- oob = make([]byte, l)
+- if opt.isset(FlagTTL) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIP
+- m.Type = syscall.IP_RECVTTL
+- m.SetLen(syscall.CmsgLen(1))
+- off += syscall.CmsgSpace(1)
+- }
+- if opt.isset(FlagDst) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIP
+- m.Type = syscall.IP_RECVDSTADDR
+- m.SetLen(syscall.CmsgLen(net.IPv4len))
+- off += syscall.CmsgSpace(net.IPv4len)
+- }
+- if opt.isset(FlagInterface) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIP
+- m.Type = syscall.IP_RECVIF
+- m.SetLen(syscall.CmsgLen(syscall.SizeofSockaddrDatalink))
+- off += syscall.CmsgSpace(syscall.SizeofSockaddrDatalink)
+- }
+- }
+- return
+-}
+-
+-func parseControlMessage(b []byte) (*ControlMessage, error) {
+- if len(b) == 0 {
+- return nil, nil
+- }
+- cmsgs, err := syscall.ParseSocketControlMessage(b)
+- if err != nil {
+- return nil, os.NewSyscallError("parse socket control message", err)
+- }
+- cm := &ControlMessage{}
+- for _, m := range cmsgs {
+- if m.Header.Level != ianaProtocolIP {
+- continue
+- }
+- switch m.Header.Type {
+- case syscall.IP_RECVTTL:
+- cm.TTL = int(*(*byte)(unsafe.Pointer(&m.Data[:1][0])))
+- case syscall.IP_RECVDSTADDR:
+- cm.Dst = m.Data[:net.IPv4len]
+- case syscall.IP_RECVIF:
+- sadl := (*syscall.SockaddrDatalink)(unsafe.Pointer(&m.Data[0]))
+- cm.IfIndex = int(sadl.Index)
+- }
+- }
+- return cm, nil
+-}
+-
+-func marshalControlMessage(cm *ControlMessage) []byte {
+- // TODO(mikio): Implement IP_PKTINFO stuff when OS X 10.8 comes
+- return nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/control.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/control.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/control.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/control.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,52 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import (
+- "fmt"
+- "net"
+- "sync"
+-)
+-
+-type rawOpt struct {
+- sync.Mutex
+- cflags ControlFlags
+-}
+-
+-func (c *rawOpt) set(f ControlFlags) { c.cflags |= f }
+-func (c *rawOpt) clear(f ControlFlags) { c.cflags &^= f }
+-func (c *rawOpt) isset(f ControlFlags) bool { return c.cflags&f != 0 }
+-
+-type ControlFlags uint
+-
+-const (
+- FlagTTL ControlFlags = 1 << iota // pass the TTL on the received packet
+- FlagSrc // pass the source address on the received packet
+- FlagDst // pass the destination address on the received packet
+- FlagInterface // pass the interface index on the received packet
+-)
+-
+-// A ControlMessage represents per packet basis IP-level socket options.
+-type ControlMessage struct {
+- // Receiving socket options: SetControlMessage allows to
+- // receive the options from the protocol stack using ReadFrom
+- // method of PacketConn or RawConn.
+- //
+- // Specifying socket options: ControlMessage for WriteTo
+- // method of PacketConn or RawConn allows to send the options
+- // to the protocol stack.
+- //
+- TTL int // time-to-live, receiving only
+- Src net.IP // source address, specifying only
+- Dst net.IP // destination address, receiving only
+- IfIndex int // interface index, must be 1 <= value when specifying
+-}
+-
+-func (cm *ControlMessage) String() string {
+- if cm == nil {
+- return "<nil>"
+- }
+- return fmt.Sprintf("ttl: %v, src: %v, dst: %v, ifindex: %v", cm.TTL, cm.Src, cm.Dst, cm.IfIndex)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/control_linux.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/control_linux.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/control_linux.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/control_linux.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,126 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import (
+- "os"
+- "syscall"
+- "unsafe"
+-)
+-
+-// Linux provides a convenient path control option IP_PKTINFO that
+-// contains IP_SENDSRCADDR, IP_RECVDSTADDR, IP_RECVIF and IP_SENDIF.
+-const pktinfo = FlagSrc | FlagDst | FlagInterface
+-
+-func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
+- opt.Lock()
+- defer opt.Unlock()
+- if cf&FlagTTL != 0 {
+- if err := setIPv4ReceiveTTL(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(FlagTTL)
+- } else {
+- opt.clear(FlagTTL)
+- }
+- }
+- if cf&pktinfo != 0 {
+- if err := setIPv4PacketInfo(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(cf & pktinfo)
+- } else {
+- opt.clear(cf & pktinfo)
+- }
+- }
+- return nil
+-}
+-
+-func newControlMessage(opt *rawOpt) (oob []byte) {
+- opt.Lock()
+- defer opt.Unlock()
+- l, off := 0, 0
+- if opt.isset(FlagTTL) {
+- l += syscall.CmsgSpace(1)
+- }
+- if opt.isset(pktinfo) {
+- l += syscall.CmsgSpace(syscall.SizeofInet4Pktinfo)
+- }
+- if l > 0 {
+- oob = make([]byte, l)
+- if opt.isset(FlagTTL) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIP
+- m.Type = syscall.IP_RECVTTL
+- m.SetLen(syscall.CmsgLen(1))
+- off += syscall.CmsgSpace(1)
+- }
+- if opt.isset(pktinfo) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIP
+- m.Type = syscall.IP_PKTINFO
+- m.SetLen(syscall.CmsgLen(syscall.SizeofInet4Pktinfo))
+- off += syscall.CmsgSpace(syscall.SizeofInet4Pktinfo)
+- }
+- }
+- return
+-}
+-
+-func parseControlMessage(b []byte) (*ControlMessage, error) {
+- if len(b) == 0 {
+- return nil, nil
+- }
+- cmsgs, err := syscall.ParseSocketControlMessage(b)
+- if err != nil {
+- return nil, os.NewSyscallError("parse socket control message", err)
+- }
+- cm := &ControlMessage{}
+- for _, m := range cmsgs {
+- if m.Header.Level != ianaProtocolIP {
+- continue
+- }
+- switch m.Header.Type {
+- case syscall.IP_TTL:
+- cm.TTL = int(*(*byte)(unsafe.Pointer(&m.Data[:1][0])))
+- case syscall.IP_PKTINFO:
+- pi := (*syscall.Inet4Pktinfo)(unsafe.Pointer(&m.Data[0]))
+- cm.IfIndex = int(pi.Ifindex)
+- cm.Dst = pi.Addr[:]
+- }
+- }
+- return cm, nil
+-}
+-
+-func marshalControlMessage(cm *ControlMessage) (oob []byte) {
+- if cm == nil {
+- return
+- }
+- l, off := 0, 0
+- pion := false
+- if cm.Src.To4() != nil || cm.IfIndex != 0 {
+- pion = true
+- l += syscall.CmsgSpace(syscall.SizeofInet4Pktinfo)
+- }
+- if l > 0 {
+- oob = make([]byte, l)
+- if pion {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIP
+- m.Type = syscall.IP_PKTINFO
+- m.SetLen(syscall.CmsgLen(syscall.SizeofInet4Pktinfo))
+- pi := (*syscall.Inet4Pktinfo)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
+- if ip := cm.Src.To4(); ip != nil {
+- copy(pi.Addr[:], ip)
+- }
+- if cm.IfIndex != 0 {
+- pi.Ifindex = int32(cm.IfIndex)
+- }
+- off += syscall.CmsgSpace(syscall.SizeofInet4Pktinfo)
+- }
+- }
+- return
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/control_plan9.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/control_plan9.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/control_plan9.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/control_plan9.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,27 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import "syscall"
+-
+-func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-func newControlMessage(opt *rawOpt) []byte {
+- // TODO(mikio): Implement this
+- return nil
+-}
+-
+-func parseControlMessage(b []byte) (*ControlMessage, error) {
+- // TODO(mikio): Implement this
+- return nil, syscall.EPLAN9
+-}
+-
+-func marshalControlMessage(cm *ControlMessage) []byte {
+- // TODO(mikio): Implement this
+- return nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/control_windows.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/control_windows.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/control_windows.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/control_windows.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,27 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import "syscall"
+-
+-func setControlMessage(fd syscall.Handle, opt *rawOpt, cf ControlFlags, on bool) error {
+- // TODO(mikio): Implement this
+- return syscall.EWINDOWS
+-}
+-
+-func newControlMessage(opt *rawOpt) []byte {
+- // TODO(mikio): Implement this
+- return nil
+-}
+-
+-func parseControlMessage(b []byte) (*ControlMessage, error) {
+- // TODO(mikio): Implement this
+- return nil, syscall.EWINDOWS
+-}
+-
+-func marshalControlMessage(cm *ControlMessage) []byte {
+- // TODO(mikio): Implement this
+- return nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/dgramopt_plan9.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/dgramopt_plan9.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/dgramopt_plan9.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/dgramopt_plan9.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,50 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import (
+- "net"
+- "syscall"
+-)
+-
+-func (c *dgramOpt) MulticastTTL() (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+-
+-func (c *dgramOpt) SetMulticastTTL(ttl int) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
+- // TODO(mikio): Implement this
+- return nil, syscall.EPLAN9
+-}
+-
+-func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-func (c *dgramOpt) MulticastLoopback() (bool, error) {
+- // TODO(mikio): Implement this
+- return false, syscall.EPLAN9
+-}
+-
+-func (c *dgramOpt) SetMulticastLoopback(on bool) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-func (c *dgramOpt) JoinGroup(ifi *net.Interface, grp net.Addr) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-func (c *dgramOpt) LeaveGroup(ifi *net.Interface, grp net.Addr) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/dgramopt_posix.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/dgramopt_posix.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/dgramopt_posix.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/dgramopt_posix.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,125 +0,0 @@
+-// Copyright 2012 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 darwin freebsd linux netbsd openbsd windows
+-
+-package ipv4
+-
+-import (
+- "net"
+- "syscall"
+-)
+-
+-// MulticastTTL returns the time-to-live field value for outgoing
+-// multicast packets.
+-func (c *dgramOpt) MulticastTTL() (int, error) {
+- if !c.ok() {
+- return 0, syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return 0, err
+- }
+- return ipv4MulticastTTL(fd)
+-}
+-
+-// SetMulticastTTL sets the time-to-live field value for future
+-// outgoing multicast packets.
+-func (c *dgramOpt) SetMulticastTTL(ttl int) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- return setIPv4MulticastTTL(fd, ttl)
+-}
+-
+-// MulticastInterface returns the default interface for multicast
+-// packet transmissions.
+-func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
+- if !c.ok() {
+- return nil, syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return nil, err
+- }
+- return ipv4MulticastInterface(fd)
+-}
+-
+-// SetMulticastInterface sets the default interface for future
+-// multicast packet transmissions.
+-func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- return setIPv4MulticastInterface(fd, ifi)
+-}
+-
+-// MulticastLoopback reports whether transmitted multicast packets
+-// should be copied and send back to the originator.
+-func (c *dgramOpt) MulticastLoopback() (bool, error) {
+- if !c.ok() {
+- return false, syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return false, err
+- }
+- return ipv4MulticastLoopback(fd)
+-}
+-
+-// SetMulticastLoopback sets whether transmitted multicast packets
+-// should be copied and send back to the originator.
+-func (c *dgramOpt) SetMulticastLoopback(on bool) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- return setIPv4MulticastLoopback(fd, on)
+-}
+-
+-// JoinGroup joins the group address group on the interface ifi.
+-// It uses the system assigned multicast interface when ifi is nil,
+-// although this is not recommended because the assignment depends on
+-// platforms and sometimes it might require routing configuration.
+-func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- grp := netAddrToIP4(group)
+- if grp == nil {
+- return errMissingAddress
+- }
+- return joinIPv4Group(fd, ifi, grp)
+-}
+-
+-// LeaveGroup leaves the group address group on the interface ifi.
+-func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- grp := netAddrToIP4(group)
+- if grp == nil {
+- return errMissingAddress
+- }
+- return leaveIPv4Group(fd, ifi, grp)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/doc.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/doc.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/doc.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/doc.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,196 +0,0 @@
+-// Copyright 2012 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 ipv4 implements IP-level socket options for the Internet
+-// Protocol version 4.
+-//
+-// The package provides IP-level socket options that allow
+-// manipulation of IPv4 facilities. The IPv4 and basic host
+-// requirements for IPv4 are defined in RFC 791, RFC 1112 and RFC
+-// 1122.
+-//
+-//
+-// Unicasting
+-//
+-// The options for unicasting are available for net.TCPConn,
+-// net.UDPConn and net.IPConn which are created as network connections
+-// that use the IPv4 transport. When a single TCP connection carrying
+-// a data flow of multiple packets needs to indicate the flow is
+-// important, ipv4.Conn is used to set the type-of-service field on
+-// the IPv4 header for each packet.
+-//
+-// ln, err := net.Listen("tcp4", "0.0.0.0:1024")
+-// if err != nil {
+-// // error handling
+-// }
+-// defer ln.Close()
+-// for {
+-// c, err := ln.Accept()
+-// if err != nil {
+-// // error handling
+-// }
+-// go func(c net.Conn) {
+-// defer c.Close()
+-//
+-// The outgoing packets will be labeled DiffServ assured forwarding
+-// class 1 low drop precedence, as known as AF11 packets.
+-//
+-// if err := ipv4.NewConn(c).SetTOS(DiffServAF11); err != nil {
+-// // error handling
+-// }
+-// if _, err := c.Write(data); err != nil {
+-// // error handling
+-// }
+-// }(c)
+-// }
+-//
+-//
+-// Multicasting
+-//
+-// The options for multicasting are available for net.UDPConn and
+-// net.IPconn which are created as network connections that use the
+-// IPv4 transport. A few network facilities must be prepared before
+-// you begin multicasting, at a minimum joining network interfaces and
+-// multicast groups.
+-//
+-// en0, err := net.InterfaceByName("en0")
+-// if err != nil {
+-// // error handling
+-// }
+-// en1, err := net.InterfaceByIndex(911)
+-// if err != nil {
+-// // error handling
+-// }
+-// group := net.IPv4(224, 0, 0, 250)
+-//
+-// First, an application listens to an appropriate address with an
+-// appropriate service port.
+-//
+-// c, err := net.ListenPacket("udp4", "0.0.0.0:1024")
+-// if err != nil {
+-// // error handling
+-// }
+-// defer c.Close()
+-//
+-// Second, the application joins multicast groups, starts listening to
+-// the groups on the specified network interfaces. Note that the
+-// service port for transport layer protocol does not matter with this
+-// operation as joining groups affects only network and link layer
+-// protocols, such as IPv4 and Ethernet.
+-//
+-// p := ipv4.NewPacketConn(c)
+-// if err := p.JoinGroup(en0, &net.UDPAddr{IP: group}); err != nil {
+-// // error handling
+-// }
+-// if err := p.JoinGroup(en1, &net.UDPAddr{IP: group}); err != nil {
+-// // error handling
+-// }
+-//
+-// The application might set per packet control message transmissions
+-// between the protocol stack within the kernel. When the application
+-// needs a destination address on an incoming packet,
+-// SetControlMessage of ipv4.PacketConn is used to enable control
+-// message transmissons.
+-//
+-// if err := p.SetControlMessage(ipv4.FlagDst, true); err != nil {
+-// // error handling
+-// }
+-//
+-// The application could identify whether the received packets are
+-// of interest by using the control message that contains the
+-// destination address of the received packet.
+-//
+-// b := make([]byte, 1500)
+-// for {
+-// n, cm, src, err := p.ReadFrom(b)
+-// if err != nil {
+-// // error handling
+-// }
+-// if cm.Dst.IsMulticast() {
+-// if cm.Dst.Equal(group)
+-// // joined group, do something
+-// } else {
+-// // unknown group, discard
+-// continue
+-// }
+-// }
+-//
+-// The application can also send both unicast and multicast packets.
+-//
+-// p.SetTOS(DiffServCS0)
+-// p.SetTTL(16)
+-// if _, err := p.WriteTo(data, nil, src); err != nil {
+-// // error handling
+-// }
+-// dst := &net.UDPAddr{IP: group, Port: 1024}
+-// for _, ifi := range []*net.Interface{en0, en1} {
+-// if err := p.SetMulticastInterface(ifi); err != nil {
+-// // error handling
+-// }
+-// p.SetMulticastTTL(2)
+-// if _, err := p.WriteTo(data, nil, dst); err != nil {
+-// // error handling
+-// }
+-// }
+-// }
+-//
+-//
+-// More multicasting
+-//
+-// An application that uses PacketConn or RawConn may join multiple
+-// multicast groups. For example, a UDP listener with port 1024 might
+-// join two different groups across over two different network
+-// interfaces by using:
+-//
+-// c, err := net.ListenPacket("udp4", "0.0.0.0:1024")
+-// if err != nil {
+-// // error handling
+-// }
+-// defer c.Close()
+-// p := ipv4.NewPacketConn(c)
+-// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil {
+-// // error handling
+-// }
+-// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}); err != nil {
+-// // error handling
+-// }
+-// if err := p.JoinGroup(en1, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}); err != nil {
+-// // error handling
+-// }
+-//
+-// It is possible for multiple UDP listeners that listen on the same
+-// UDP port to join the same multicast group. The net package will
+-// provide a socket that listens to a wildcard address with reusable
+-// UDP port when an appropriate multicast address prefix is passed to
+-// the net.ListenPacket or net.ListenUDP.
+-//
+-// c1, err := net.ListenPacket("udp4", "224.0.0.0:1024")
+-// if err != nil {
+-// // error handling
+-// }
+-// defer c1.Close()
+-// c2, err := net.ListenPacket("udp4", "224.0.0.0:1024")
+-// if err != nil {
+-// // error handling
+-// }
+-// defer c2.Close()
+-// p1 := ipv4.NewPacketConn(c1)
+-// if err := p1.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil {
+-// // error handling
+-// }
+-// p2 := ipv4.NewPacketConn(c2)
+-// if err := p2.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil {
+-// // error handling
+-// }
+-//
+-// Also it is possible for the application to leave or rejoin a
+-// multicast group on the network interface.
+-//
+-// if err := p.LeaveGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil {
+-// // error handling
+-// }
+-// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 250)}); err != nil {
+-// // error handling
+-// }
+-package ipv4
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/endpoint.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/endpoint.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/endpoint.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/endpoint.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,181 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import (
+- "net"
+- "syscall"
+- "time"
+-)
+-
+-// A Conn represents a network endpoint that uses the IPv4 transport.
+-// It is used to control basic IP-level socket options such as TOS and
+-// TTL.
+-type Conn struct {
+- genericOpt
+-}
+-
+-type genericOpt struct {
+- net.Conn
+-}
+-
+-func (c *genericOpt) ok() bool { return c != nil && c.Conn != nil }
+-
+-// NewConn returns a new Conn.
+-func NewConn(c net.Conn) *Conn {
+- return &Conn{
+- genericOpt: genericOpt{Conn: c},
+- }
+-}
+-
+-// A PacketConn represents a packet network endpoint that uses the
+-// IPv4 transport. It is used to control several IP-level socket
+-// options including multicasting. It also provides datagram based
+-// network I/O methods specific to the IPv4 and higher layer protocols
+-// such as UDP.
+-type PacketConn struct {
+- genericOpt
+- dgramOpt
+- payloadHandler
+-}
+-
+-type dgramOpt struct {
+- net.PacketConn
+-}
+-
+-func (c *dgramOpt) ok() bool { return c != nil && c.PacketConn != nil }
+-
+-// SetControlMessage sets the per packet IP-level socket options.
+-func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error {
+- if !c.payloadHandler.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.payloadHandler.sysfd()
+- if err != nil {
+- return err
+- }
+- return setControlMessage(fd, &c.payloadHandler.rawOpt, cf, on)
+-}
+-
+-// SetDeadline sets the read and write deadlines associated with the
+-// endpoint.
+-func (c *PacketConn) SetDeadline(t time.Time) error {
+- if !c.payloadHandler.ok() {
+- return syscall.EINVAL
+- }
+- return c.payloadHandler.PacketConn.SetDeadline(t)
+-}
+-
+-// SetReadDeadline sets the read deadline associated with the
+-// endpoint.
+-func (c *PacketConn) SetReadDeadline(t time.Time) error {
+- if !c.payloadHandler.ok() {
+- return syscall.EINVAL
+- }
+- return c.payloadHandler.PacketConn.SetReadDeadline(t)
+-}
+-
+-// SetWriteDeadline sets the write deadline associated with the
+-// endpoint.
+-func (c *PacketConn) SetWriteDeadline(t time.Time) error {
+- if !c.payloadHandler.ok() {
+- return syscall.EINVAL
+- }
+- return c.payloadHandler.PacketConn.SetWriteDeadline(t)
+-}
+-
+-// Close closes the endpoint.
+-func (c *PacketConn) Close() error {
+- if !c.payloadHandler.ok() {
+- return syscall.EINVAL
+- }
+- return c.payloadHandler.PacketConn.Close()
+-}
+-
+-// NewPacketConn returns a new PacketConn using c as its underlying
+-// transport.
+-func NewPacketConn(c net.PacketConn) *PacketConn {
+- return &PacketConn{
+- genericOpt: genericOpt{Conn: c.(net.Conn)},
+- dgramOpt: dgramOpt{PacketConn: c},
+- payloadHandler: payloadHandler{PacketConn: c},
+- }
+-}
+-
+-// A RawConn represents a packet network endpoint that uses the IPv4
+-// transport. It is used to control several IP-level socket options
+-// including IPv4 header manipulation. It also provides datagram
+-// based network I/O methods specific to the IPv4 and higher layer
+-// protocols that handle IPv4 datagram directly such as OSPF, GRE.
+-type RawConn struct {
+- genericOpt
+- dgramOpt
+- packetHandler
+-}
+-
+-// SetControlMessage sets the per packet IP-level socket options.
+-func (c *RawConn) SetControlMessage(cf ControlFlags, on bool) error {
+- if !c.packetHandler.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.packetHandler.sysfd()
+- if err != nil {
+- return err
+- }
+- return setControlMessage(fd, &c.packetHandler.rawOpt, cf, on)
+-}
+-
+-// SetDeadline sets the read and write deadlines associated with the
+-// endpoint.
+-func (c *RawConn) SetDeadline(t time.Time) error {
+- if !c.packetHandler.ok() {
+- return syscall.EINVAL
+- }
+- return c.packetHandler.c.SetDeadline(t)
+-}
+-
+-// SetReadDeadline sets the read deadline associated with the
+-// endpoint.
+-func (c *RawConn) SetReadDeadline(t time.Time) error {
+- if !c.packetHandler.ok() {
+- return syscall.EINVAL
+- }
+- return c.packetHandler.c.SetReadDeadline(t)
+-}
+-
+-// SetWriteDeadline sets the write deadline associated with the
+-// endpoint.
+-func (c *RawConn) SetWriteDeadline(t time.Time) error {
+- if !c.packetHandler.ok() {
+- return syscall.EINVAL
+- }
+- return c.packetHandler.c.SetWriteDeadline(t)
+-}
+-
+-// Close closes the endpoint.
+-func (c *RawConn) Close() error {
+- if !c.packetHandler.ok() {
+- return syscall.EINVAL
+- }
+- return c.packetHandler.c.Close()
+-}
+-
+-// NewRawConn returns a new RawConn using c as its underlying
+-// transport.
+-func NewRawConn(c net.PacketConn) (*RawConn, error) {
+- r := &RawConn{
+- genericOpt: genericOpt{Conn: c.(net.Conn)},
+- dgramOpt: dgramOpt{PacketConn: c},
+- packetHandler: packetHandler{c: c.(*net.IPConn)},
+- }
+- fd, err := r.packetHandler.sysfd()
+- if err != nil {
+- return nil, err
+- }
+- if err := setIPv4HeaderPrepend(fd, true); err != nil {
+- return nil, err
+- }
+- return r, nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/example_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/example_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/example_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/example_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,283 +0,0 @@
+-// Copyright 2012 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 ipv4_test
+-
+-import (
+- "code.google.com/p/go.net/ipv4"
+- "log"
+- "net"
+-)
+-
+-func ExampleUnicastTCPListener() {
+- ln, err := net.Listen("tcp4", "0.0.0.0:1024")
+- if err != nil {
+- log.Fatal(err)
+- }
+- defer ln.Close()
+- for {
+- c, err := ln.Accept()
+- if err != nil {
+- log.Fatal(err)
+- }
+- go func(c net.Conn) {
+- defer c.Close()
+- err := ipv4.NewConn(c).SetTOS(DiffServAF11)
+- if err != nil {
+- log.Fatal(err)
+- }
+- _, err = c.Write([]byte("HELLO-R-U-THERE-ACK"))
+- if err != nil {
+- log.Fatal(err)
+- }
+- }(c)
+- }
+-}
+-
+-func ExampleMulticastUDPListener() {
+- en0, err := net.InterfaceByName("en0")
+- if err != nil {
+- log.Fatal(err)
+- }
+- en1, err := net.InterfaceByIndex(911)
+- if err != nil {
+- log.Fatal(err)
+- }
+- group := net.IPv4(224, 0, 0, 250)
+-
+- c, err := net.ListenPacket("udp4", "0.0.0.0:1024")
+- if err != nil {
+- log.Fatal(err)
+- }
+- defer c.Close()
+-
+- p := ipv4.NewPacketConn(c)
+- err = p.JoinGroup(en0, &net.UDPAddr{IP: group})
+- if err != nil {
+- log.Fatal(err)
+- }
+- err = p.JoinGroup(en1, &net.UDPAddr{IP: group})
+- if err != nil {
+- log.Fatal(err)
+- }
+-
+- err = p.SetControlMessage(ipv4.FlagDst, true)
+- if err != nil {
+- log.Fatal(err)
+- }
+-
+- b := make([]byte, 1500)
+- for {
+- n, cm, src, err := p.ReadFrom(b)
+- if err != nil {
+- log.Fatal(err)
+- }
+- if cm.Dst.IsMulticast() {
+- if cm.Dst.Equal(group) {
+- // joined group, do something
+- } else {
+- // unknown group, discard
+- continue
+- }
+- }
+- p.SetTOS(DiffServCS7)
+- p.SetTTL(16)
+- _, err = p.WriteTo(b[:n], nil, src)
+- if err != nil {
+- log.Fatal(err)
+- }
+- dst := &net.UDPAddr{IP: group, Port: 1024}
+- for _, ifi := range []*net.Interface{en0, en1} {
+- err := p.SetMulticastInterface(ifi)
+- if err != nil {
+- log.Fatal(err)
+- }
+- p.SetMulticastTTL(2)
+- _, err = p.WriteTo(b[:n], nil, dst)
+- if err != nil {
+- log.Fatal(err)
+- }
+- }
+- }
+-
+- err = p.LeaveGroup(en1, &net.UDPAddr{IP: group})
+- if err != nil {
+- log.Fatal(err)
+- }
+- newgroup := net.IPv4(224, 0, 0, 249)
+- err = p.JoinGroup(en1, &net.UDPAddr{IP: newgroup})
+- if err != nil {
+- log.Fatal(err)
+- }
+-}
+-
+-type OSPFHeader struct {
+- Version byte
+- Type byte
+- Len uint16
+- RouterID uint32
+- AreaID uint32
+- Checksum uint16
+-}
+-
+-const (
+- OSPFHeaderLen = 14
+- OSPFHelloHeaderLen = 20
+- OSPF_VERSION = 2
+- OSPF_TYPE_HELLO = iota + 1
+- OSPF_TYPE_DB_DESCRIPTION
+- OSPF_TYPE_LS_REQUEST
+- OSPF_TYPE_LS_UPDATE
+- OSPF_TYPE_LS_ACK
+-)
+-
+-var (
+- AllSPFRouters = net.IPv4(224, 0, 0, 5)
+- AllDRouters = net.IPv4(224, 0, 0, 6)
+-)
+-
+-func ExampleIPOSPFListener() {
+- var ifs []*net.Interface
+- en0, err := net.InterfaceByName("en0")
+- if err != nil {
+- log.Fatal(err)
+- }
+- ifs = append(ifs, en0)
+- en1, err := net.InterfaceByIndex(911)
+- if err != nil {
+- log.Fatal(err)
+- }
+- ifs = append(ifs, en1)
+-
+- c, err := net.ListenPacket("ip4:89", "0.0.0.0") // OSFP for IPv4
+- if err != nil {
+- log.Fatal(err)
+- }
+- defer c.Close()
+-
+- r, err := ipv4.NewRawConn(c)
+- if err != nil {
+- log.Fatal(err)
+- }
+- for _, ifi := range ifs {
+- err := r.JoinGroup(ifi, &net.IPAddr{IP: AllSPFRouters})
+- if err != nil {
+- log.Fatal(err)
+- }
+- err = r.JoinGroup(ifi, &net.IPAddr{IP: AllDRouters})
+- if err != nil {
+- log.Fatal(err)
+- }
+- }
+-
+- err = r.SetControlMessage(ipv4.FlagDst|ipv4.FlagInterface, true)
+- if err != nil {
+- log.Fatal(err)
+- }
+- r.SetTOS(DiffServCS6)
+-
+- parseOSPFHeader := func(b []byte) *OSPFHeader {
+- if len(b) < OSPFHeaderLen {
+- return nil
+- }
+- return &OSPFHeader{
+- Version: b[0],
+- Type: b[1],
+- Len: uint16(b[2])<<8 | uint16(b[3]),
+- RouterID: uint32(b[4])<<24 | uint32(b[5])<<16 | uint32(b[6])<<8 | uint32(b[7]),
+- AreaID: uint32(b[8])<<24 | uint32(b[9])<<16 | uint32(b[10])<<8 | uint32(b[11]),
+- Checksum: uint16(b[12])<<8 | uint16(b[13]),
+- }
+- }
+-
+- b := make([]byte, 1500)
+- for {
+- iph, p, _, err := r.ReadFrom(b)
+- if err != nil {
+- log.Fatal(err)
+- }
+- if iph.Version != ipv4.Version {
+- continue
+- }
+- if iph.Dst.IsMulticast() {
+- if !iph.Dst.Equal(AllSPFRouters) && !iph.Dst.Equal(AllDRouters) {
+- continue
+- }
+- }
+- ospfh := parseOSPFHeader(p)
+- if ospfh == nil {
+- continue
+- }
+- if ospfh.Version != OSPF_VERSION {
+- continue
+- }
+- switch ospfh.Type {
+- case OSPF_TYPE_HELLO:
+- case OSPF_TYPE_DB_DESCRIPTION:
+- case OSPF_TYPE_LS_REQUEST:
+- case OSPF_TYPE_LS_UPDATE:
+- case OSPF_TYPE_LS_ACK:
+- }
+- }
+-}
+-
+-func ExampleWriteIPOSPFHello() {
+- var ifs []*net.Interface
+- en0, err := net.InterfaceByName("en0")
+- if err != nil {
+- log.Fatal(err)
+- }
+- ifs = append(ifs, en0)
+- en1, err := net.InterfaceByIndex(911)
+- if err != nil {
+- log.Fatal(err)
+- }
+- ifs = append(ifs, en1)
+-
+- c, err := net.ListenPacket("ip4:89", "0.0.0.0") // OSPF for IPv4
+- if err != nil {
+- log.Fatal(err)
+- }
+- defer c.Close()
+-
+- r, err := ipv4.NewRawConn(c)
+- if err != nil {
+- log.Fatal(err)
+- }
+- for _, ifi := range ifs {
+- err := r.JoinGroup(ifi, &net.IPAddr{IP: AllSPFRouters})
+- if err != nil {
+- log.Fatal(err)
+- }
+- err = r.JoinGroup(ifi, &net.IPAddr{IP: AllDRouters})
+- if err != nil {
+- log.Fatal(err)
+- }
+- }
+-
+- hello := make([]byte, OSPFHelloHeaderLen)
+- ospf := make([]byte, OSPFHeaderLen)
+- ospf[0] = OSPF_VERSION
+- ospf[1] = OSPF_TYPE_HELLO
+- ospf = append(ospf, hello...)
+- iph := &ipv4.Header{}
+- iph.Version = ipv4.Version
+- iph.Len = ipv4.HeaderLen
+- iph.TOS = DiffServCS6
+- iph.TotalLen = ipv4.HeaderLen + len(ospf)
+- iph.TTL = 1
+- iph.Protocol = 89
+- iph.Dst = AllSPFRouters
+-
+- for _, ifi := range ifs {
+- err := r.SetMulticastInterface(ifi)
+- if err != nil {
+- return
+- }
+- err = r.WriteTo(iph, ospf, nil)
+- if err != nil {
+- return
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/genericopt_plan9.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/genericopt_plan9.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/genericopt_plan9.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/genericopt_plan9.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,29 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import (
+- "syscall"
+-)
+-
+-func (c *genericOpt) TOS() (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+-
+-func (c *genericOpt) SetTOS(tos int) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-func (c *genericOpt) TTL() (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+-
+-func (c *genericOpt) SetTTL(ttl int) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/genericopt_posix.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/genericopt_posix.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/genericopt_posix.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/genericopt_posix.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,61 +0,0 @@
+-// Copyright 2012 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 darwin freebsd linux netbsd openbsd windows
+-
+-package ipv4
+-
+-import (
+- "syscall"
+-)
+-
+-// TOS returns the type-of-service field value for outgoing packets.
+-func (c *genericOpt) TOS() (int, error) {
+- if !c.ok() {
+- return 0, syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return 0, err
+- }
+- return ipv4TOS(fd)
+-}
+-
+-// SetTOS sets the type-of-service field value for future outgoing
+-// packets.
+-func (c *genericOpt) SetTOS(tos int) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- return setIPv4TOS(fd, tos)
+-}
+-
+-// TTL returns the time-to-live field value for outgoing packets.
+-func (c *genericOpt) TTL() (int, error) {
+- if !c.ok() {
+- return 0, syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return 0, err
+- }
+- return ipv4TTL(fd)
+-}
+-
+-// SetTTL sets the time-to-live field value for future outgoing
+-// packets.
+-func (c *genericOpt) SetTTL(ttl int) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- return setIPv4TTL(fd, ttl)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/gen.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/gen.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/gen.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/gen.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,252 +0,0 @@
+-// Copyright 2013 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
+-
+-// This program generates internet protocol constatns and tables by
+-// reading IANA protocol registries.
+-//
+-// Usage of this program:
+-// go run gen.go > iana.go
+-package main
+-
+-import (
+- "bytes"
+- "encoding/xml"
+- "fmt"
+- "go/format"
+- "io"
+- "net/http"
+- "os"
+- "strconv"
+- "strings"
+-)
+-
+-var registries = []struct {
+- url string
+- parse func(io.Writer, io.Reader) error
+-}{
+- {
+- "http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xml",
+- parseICMPv4Parameters,
+- },
+- {
+- "http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml",
+- parseProtocolNumbers,
+- },
+-}
+-
+-func main() {
+- var bb bytes.Buffer
+- fmt.Fprintf(&bb, "// go run gen.go\n")
+- fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n")
+- fmt.Fprintf(&bb, "package ipv4\n\n")
+- for _, r := range registries {
+- resp, err := http.Get(r.url)
+- if err != nil {
+- fmt.Fprintln(os.Stderr, err)
+- os.Exit(1)
+- }
+- defer resp.Body.Close()
+- if resp.StatusCode != http.StatusOK {
+- fmt.Fprintf(os.Stderr, "got HTTP status code %v for %v\n", resp.StatusCode, r.url)
+- os.Exit(1)
+- }
+- if err := r.parse(&bb, resp.Body); err != nil {
+- fmt.Fprintln(os.Stderr, err)
+- os.Exit(1)
+- }
+- fmt.Fprintf(&bb, "\n")
+- }
+- b, err := format.Source(bb.Bytes())
+- if err != nil {
+- fmt.Fprintln(os.Stderr, err)
+- os.Exit(1)
+- }
+- os.Stdout.Write(b)
+-}
+-
+-func parseICMPv4Parameters(w io.Writer, r io.Reader) error {
+- dec := xml.NewDecoder(r)
+- var icp icmpv4Parameters
+- if err := dec.Decode(&icp); err != nil {
+- return err
+- }
+- prs := icp.escape()
+- fmt.Fprintf(w, "// %s, Updated: %s\n", icp.Title, icp.Updated)
+- fmt.Fprintf(w, "const (\n")
+- for _, pr := range prs {
+- if pr.Descr == "" {
+- continue
+- }
+- fmt.Fprintf(w, "ICMPType%s ICMPType = %d", pr.Descr, pr.Value)
+- fmt.Fprintf(w, "// %s\n", pr.OrigDescr)
+- }
+- fmt.Fprintf(w, ")\n\n")
+- fmt.Fprintf(w, "// %s, Updated: %s\n", icp.Title, icp.Updated)
+- fmt.Fprintf(w, "var icmpTypes = map[ICMPType]string{\n")
+- for _, pr := range prs {
+- if pr.Descr == "" {
+- continue
+- }
+- fmt.Fprintf(w, "%d: %q,\n", pr.Value, strings.ToLower(pr.OrigDescr))
+- }
+- fmt.Fprintf(w, "}\n")
+- return nil
+-}
+-
+-type icmpv4Parameters struct {
+- XMLName xml.Name `xml:"registry"`
+- Title string `xml:"title"`
+- Updated string `xml:"updated"`
+- Registries []icmpv4ParamRegistry `xml:"registry"`
+-}
+-
+-type icmpv4ParamRegistry struct {
+- Title string `xml:"title"`
+- Records []icmpv4ParamRecord `xml:"record"`
+-}
+-
+-type icmpv4ParamRecord struct {
+- Value string `xml:"value"`
+- Descr string `xml:"description"`
+-}
+-
+-type canonICMPv4ParamRecord struct {
+- OrigDescr string
+- Descr string
+- Value int
+-}
+-
+-func (icp *icmpv4Parameters) escape() []canonICMPv4ParamRecord {
+- id := -1
+- for i, r := range icp.Registries {
+- if strings.Contains(r.Title, "Type") || strings.Contains(r.Title, "type") {
+- id = i
+- break
+- }
+- }
+- if id < 0 {
+- return nil
+- }
+- prs := make([]canonICMPv4ParamRecord, len(icp.Registries[id].Records))
+- sr := strings.NewReplacer(
+- "Messages", "",
+- "Message", "",
+- "ICMP", "",
+- "+", "P",
+- "-", "",
+- "/", "",
+- ".", "",
+- " ", "",
+- )
+- for i, pr := range icp.Registries[id].Records {
+- if strings.Contains(pr.Descr, "Reserved") ||
+- strings.Contains(pr.Descr, "Unassigned") ||
+- strings.Contains(pr.Descr, "Deprecated") ||
+- strings.Contains(pr.Descr, "Experiment") ||
+- strings.Contains(pr.Descr, "experiment") {
+- continue
+- }
+- ss := strings.Split(pr.Descr, "\n")
+- if len(ss) > 1 {
+- prs[i].Descr = strings.Join(ss, " ")
+- } else {
+- prs[i].Descr = ss[0]
+- }
+- s := strings.TrimSpace(prs[i].Descr)
+- prs[i].OrigDescr = s
+- prs[i].Descr = sr.Replace(s)
+- prs[i].Value, _ = strconv.Atoi(pr.Value)
+- }
+- return prs
+-}
+-
+-func parseProtocolNumbers(w io.Writer, r io.Reader) error {
+- dec := xml.NewDecoder(r)
+- var pn protocolNumbers
+- if err := dec.Decode(&pn); err != nil {
+- return err
+- }
+- prs := pn.escape()
+- prs = append([]canonProtocolRecord{{
+- Name: "IP",
+- Descr: "IPv4 encapsulation, pseudo protocol number",
+- Value: 0,
+- }}, prs...)
+- fmt.Fprintf(w, "// %s, Updated: %s\n", pn.Title, pn.Updated)
+- fmt.Fprintf(w, "const (\n")
+- for _, pr := range prs {
+- if pr.Name == "" {
+- continue
+- }
+- fmt.Fprintf(w, "ianaProtocol%s = %d", pr.Name, pr.Value)
+- s := pr.Descr
+- if s == "" {
+- s = pr.OrigName
+- }
+- fmt.Fprintf(w, "// %s\n", s)
+- }
+- fmt.Fprintf(w, ")\n")
+- return nil
+-}
+-
+-type protocolNumbers struct {
+- XMLName xml.Name `xml:"registry"`
+- Title string `xml:"title"`
+- Updated string `xml:"updated"`
+- RegTitle string `xml:"registry>title"`
+- Note string `xml:"registry>note"`
+- Records []protocolRecord `xml:"registry>record"`
+-}
+-
+-type protocolRecord struct {
+- Value string `xml:"value"`
+- Name string `xml:"name"`
+- Descr string `xml:"description"`
+-}
+-
+-type canonProtocolRecord struct {
+- OrigName string
+- Name string
+- Descr string
+- Value int
+-}
+-
+-func (pn *protocolNumbers) escape() []canonProtocolRecord {
+- prs := make([]canonProtocolRecord, len(pn.Records))
+- sr := strings.NewReplacer(
+- "-in-", "in",
+- "-within-", "within",
+- "-over-", "over",
+- "+", "P",
+- "-", "",
+- "/", "",
+- ".", "",
+- " ", "",
+- )
+- for i, pr := range pn.Records {
+- prs[i].OrigName = pr.Name
+- s := strings.TrimSpace(pr.Name)
+- switch pr.Name {
+- case "ISIS over IPv4":
+- prs[i].Name = "ISIS"
+- case "manet":
+- prs[i].Name = "MANET"
+- default:
+- prs[i].Name = sr.Replace(s)
+- }
+- ss := strings.Split(pr.Descr, "\n")
+- for i := range ss {
+- ss[i] = strings.TrimSpace(ss[i])
+- }
+- if len(ss) > 1 {
+- prs[i].Descr = strings.Join(ss, " ")
+- } else {
+- prs[i].Descr = ss[0]
+- }
+- prs[i].Value, _ = strconv.Atoi(pr.Value)
+- }
+- return prs
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/gentest.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/gentest.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/gentest.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/gentest.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,196 +0,0 @@
+-// Copyright 2013 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
+-
+-// This program generates internet protocol constants by reading IANA
+-// protocol registries.
+-//
+-// Usage:
+-// go run gentest.go > iana_test.go
+-package main
+-
+-import (
+- "bytes"
+- "encoding/xml"
+- "fmt"
+- "go/format"
+- "io"
+- "net/http"
+- "os"
+- "strconv"
+- "strings"
+-)
+-
+-var registries = []struct {
+- url string
+- parse func(io.Writer, io.Reader) error
+-}{
+- {
+- "http://www.iana.org/assignments/dscp-registry/dscp-registry.xml",
+- parseDSCPRegistry,
+- },
+- {
+- "http://www.iana.org/assignments/ipv4-tos-byte/ipv4-tos-byte.xml",
+- parseTOSTCByte,
+- },
+-}
+-
+-func main() {
+- var bb bytes.Buffer
+- fmt.Fprintf(&bb, "// go run gentv.go\n")
+- fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n")
+- fmt.Fprintf(&bb, "package ipv4_test\n\n")
+- for _, r := range registries {
+- resp, err := http.Get(r.url)
+- if err != nil {
+- fmt.Fprintln(os.Stderr, err)
+- os.Exit(1)
+- }
+- defer resp.Body.Close()
+- if resp.StatusCode != http.StatusOK {
+- fmt.Fprintf(os.Stderr, "got HTTP status code %v for %v\n", resp.StatusCode, r.url)
+- os.Exit(1)
+- }
+- if err := r.parse(&bb, resp.Body); err != nil {
+- fmt.Fprintln(os.Stderr, err)
+- os.Exit(1)
+- }
+- fmt.Fprintf(&bb, "\n")
+- }
+- b, err := format.Source(bb.Bytes())
+- if err != nil {
+- fmt.Fprintln(os.Stderr, err)
+- os.Exit(1)
+- }
+- os.Stdout.Write(b)
+-}
+-
+-func parseDSCPRegistry(w io.Writer, r io.Reader) error {
+- dec := xml.NewDecoder(r)
+- var dr dscpRegistry
+- if err := dec.Decode(&dr); err != nil {
+- return err
+- }
+- drs := dr.escape()
+- fmt.Fprintf(w, "// %s, Updated: %s\n", dr.Title, dr.Updated)
+- fmt.Fprintf(w, "const (\n")
+- for _, dr := range drs {
+- fmt.Fprintf(w, "DiffServ%s = %#x", dr.Name, dr.Value)
+- fmt.Fprintf(w, "// %s\n", dr.OrigName)
+- }
+- fmt.Fprintf(w, ")\n")
+- return nil
+-}
+-
+-type dscpRegistry struct {
+- XMLName xml.Name `xml:"registry"`
+- Title string `xml:"title"`
+- Updated string `xml:"updated"`
+- Note string `xml:"note"`
+- RegTitle string `xml:"registry>title"`
+- PoolRecords []dscpRecord `xml:"registry>record"`
+- Records []dscpRecord `xml:"registry>registry>record"`
+-}
+-
+-type dscpRecord struct {
+- Name string `xml:"name"`
+- Space string `xml:"space"`
+-}
+-
+-type canonDSCPRecord struct {
+- OrigName string
+- Name string
+- Value int
+-}
+-
+-func (drr *dscpRegistry) escape() []canonDSCPRecord {
+- drs := make([]canonDSCPRecord, len(drr.Records))
+- sr := strings.NewReplacer(
+- "+", "",
+- "-", "",
+- "/", "",
+- ".", "",
+- " ", "",
+- )
+- for i, dr := range drr.Records {
+- s := strings.TrimSpace(dr.Name)
+- drs[i].OrigName = s
+- drs[i].Name = sr.Replace(s)
+- n, err := strconv.ParseUint(dr.Space, 2, 8)
+- if err != nil {
+- continue
+- }
+- drs[i].Value = int(n) << 2
+- }
+- return drs
+-}
+-
+-func parseTOSTCByte(w io.Writer, r io.Reader) error {
+- dec := xml.NewDecoder(r)
+- var ttb tosTCByte
+- if err := dec.Decode(&ttb); err != nil {
+- return err
+- }
+- trs := ttb.escape()
+- fmt.Fprintf(w, "// %s, Updated: %s\n", ttb.Title, ttb.Updated)
+- fmt.Fprintf(w, "const (\n")
+- for _, tr := range trs {
+- fmt.Fprintf(w, "%s = %#x", tr.Keyword, tr.Value)
+- fmt.Fprintf(w, "// %s\n", tr.OrigKeyword)
+- }
+- fmt.Fprintf(w, ")\n")
+- return nil
+-}
+-
+-type tosTCByte struct {
+- XMLName xml.Name `xml:"registry"`
+- Title string `xml:"title"`
+- Updated string `xml:"updated"`
+- Note string `xml:"note"`
+- RegTitle string `xml:"registry>title"`
+- Records []tosTCByteRecord `xml:"registry>record"`
+-}
+-
+-type tosTCByteRecord struct {
+- Binary string `xml:"binary"`
+- Keyword string `xml:"keyword"`
+-}
+-
+-type canonTOSTCByteRecord struct {
+- OrigKeyword string
+- Keyword string
+- Value int
+-}
+-
+-func (ttb *tosTCByte) escape() []canonTOSTCByteRecord {
+- trs := make([]canonTOSTCByteRecord, len(ttb.Records))
+- sr := strings.NewReplacer(
+- "Capable", "",
+- "(", "",
+- ")", "",
+- "+", "",
+- "-", "",
+- "/", "",
+- ".", "",
+- " ", "",
+- )
+- for i, tr := range ttb.Records {
+- s := strings.TrimSpace(tr.Keyword)
+- trs[i].OrigKeyword = s
+- ss := strings.Split(s, " ")
+- if len(ss) > 1 {
+- trs[i].Keyword = strings.Join(ss[1:], " ")
+- } else {
+- trs[i].Keyword = ss[0]
+- }
+- trs[i].Keyword = sr.Replace(trs[i].Keyword)
+- n, err := strconv.ParseUint(tr.Binary, 2, 8)
+- if err != nil {
+- continue
+- }
+- trs[i].Value = int(n)
+- }
+- return trs
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/header.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/header.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/header.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/header.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,149 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import (
+- "errors"
+- "fmt"
+- "net"
+- "runtime"
+- "syscall"
+- "unsafe"
+-)
+-
+-var (
+- errMissingAddress = errors.New("missing address")
+- errMissingHeader = errors.New("missing header")
+- errHeaderTooShort = errors.New("header too short")
+- errBufferTooShort = errors.New("buffer too short")
+- errInvalidConnType = errors.New("invalid conn type")
+-)
+-
+-// References:
+-//
+-// RFC 791 Internet Protocol
+-// http://tools.ietf.org/html/rfc791
+-// RFC 1112 Host Extensions for IP Multicasting
+-// http://tools.ietf.org/html/rfc1112
+-// RFC 1122 Requirements for Internet Hosts
+-// http://tools.ietf.org/html/rfc1122
+-
+-const (
+- Version = 4 // protocol version
+- HeaderLen = 20 // header length without extension headers
+- maxHeaderLen = 60 // sensible default, revisit if later RFCs define new usage of version and header length fields
+-)
+-
+-type headerField int
+-
+-const (
+- posTOS headerField = 1 // type-of-service
+- posTotalLen = 2 // packet total length
+- posID = 4 // identification
+- posFragOff = 6 // fragment offset
+- posTTL = 8 // time-to-live
+- posProtocol = 9 // next protocol
+- posChecksum = 10 // checksum
+- posSrc = 12 // source address
+- posDst = 16 // destination address
+-)
+-
+-// A Header represents an IPv4 header.
+-type Header struct {
+- Version int // protocol version
+- Len int // header length
+- TOS int // type-of-service
+- TotalLen int // packet total length
+- ID int // identification
+- FragOff int // fragment offset
+- TTL int // time-to-live
+- Protocol int // next protocol
+- Checksum int // checksum
+- Src net.IP // source address
+- Dst net.IP // destination address
+- Options []byte // options, extension headers
+-}
+-
+-func (h *Header) String() string {
+- if h == nil {
+- return "<nil>"
+- }
+- return fmt.Sprintf("ver: %v, hdrlen: %v, tos: %#x, totallen: %v, id: %#x, fragoff: %#x, ttl: %v, proto: %v, cksum: %#x, src: %v, dst: %v", h.Version, h.Len, h.TOS, h.TotalLen, h.ID, h.FragOff, h.TTL, h.Protocol, h.Checksum, h.Src, h.Dst)
+-}
+-
+-// Please refer to the online manual; IP(4) on Darwin, FreeBSD and
+-// OpenBSD. IP(7) on Linux.
+-const supportsNewIPInput = runtime.GOOS == "linux" || runtime.GOOS == "openbsd"
+-
+-// Marshal returns the binary encoding of the IPv4 header h.
+-func (h *Header) Marshal() ([]byte, error) {
+- if h == nil {
+- return nil, syscall.EINVAL
+- }
+- if h.Len < HeaderLen {
+- return nil, errHeaderTooShort
+- }
+- hdrlen := HeaderLen + len(h.Options)
+- b := make([]byte, hdrlen)
+- b[0] = byte(Version<<4 | (hdrlen >> 2 & 0x0f))
+- b[posTOS] = byte(h.TOS)
+- if supportsNewIPInput {
+- b[posTotalLen], b[posTotalLen+1] = byte(h.TotalLen>>8), byte(h.TotalLen)
+- b[posFragOff], b[posFragOff+1] = byte(h.FragOff>>8), byte(h.FragOff)
+- } else {
+- *(*uint16)(unsafe.Pointer(&b[posTotalLen : posTotalLen+1][0])) = uint16(h.TotalLen)
+- *(*uint16)(unsafe.Pointer(&b[posFragOff : posFragOff+1][0])) = uint16(h.FragOff)
+- }
+- b[posID], b[posID+1] = byte(h.ID>>8), byte(h.ID)
+- b[posTTL] = byte(h.TTL)
+- b[posProtocol] = byte(h.Protocol)
+- b[posChecksum], b[posChecksum+1] = byte(h.Checksum>>8), byte(h.Checksum)
+- if ip := h.Src.To4(); ip != nil {
+- copy(b[posSrc:posSrc+net.IPv4len], ip[:net.IPv4len])
+- }
+- if ip := h.Dst.To4(); ip != nil {
+- copy(b[posDst:posDst+net.IPv4len], ip[:net.IPv4len])
+- } else {
+- return nil, errMissingAddress
+- }
+- if len(h.Options) > 0 {
+- copy(b[HeaderLen:], h.Options)
+- }
+- return b, nil
+-}
+-
+-// ParseHeader parses b as an IPv4 header.
+-func ParseHeader(b []byte) (*Header, error) {
+- if len(b) < HeaderLen {
+- return nil, errHeaderTooShort
+- }
+- hdrlen := int(b[0]&0x0f) << 2
+- if hdrlen > len(b) {
+- return nil, errBufferTooShort
+- }
+- h := &Header{}
+- h.Version = int(b[0] >> 4)
+- h.Len = hdrlen
+- h.TOS = int(b[posTOS])
+- if supportsNewIPInput {
+- h.TotalLen = int(b[posTotalLen])<<8 | int(b[posTotalLen+1])
+- h.FragOff = int(b[posFragOff])<<8 | int(b[posFragOff+1])
+- } else {
+- h.TotalLen = int(*(*uint16)(unsafe.Pointer(&b[posTotalLen : posTotalLen+1][0])))
+- h.TotalLen += hdrlen
+- h.FragOff = int(*(*uint16)(unsafe.Pointer(&b[posFragOff : posFragOff+1][0])))
+- }
+- h.ID = int(b[posID])<<8 | int(b[posID+1])
+- h.TTL = int(b[posTTL])
+- h.Protocol = int(b[posProtocol])
+- h.Checksum = int(b[posChecksum])<<8 | int(b[posChecksum+1])
+- h.Src = net.IPv4(b[posSrc], b[posSrc+1], b[posSrc+2], b[posSrc+3])
+- h.Dst = net.IPv4(b[posDst], b[posDst+1], b[posDst+2], b[posDst+3])
+- if hdrlen-HeaderLen > 0 {
+- h.Options = make([]byte, hdrlen-HeaderLen)
+- copy(h.Options, b[HeaderLen:])
+- }
+- return h, nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/header_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/header_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/header_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/header_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,95 +0,0 @@
+-// Copyright 2012 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 ipv4_test
+-
+-import (
+- "bytes"
+- "code.google.com/p/go.net/ipv4"
+- "net"
+- "reflect"
+- "runtime"
+- "testing"
+-)
+-
+-var (
+- wireHeaderFromKernel = [ipv4.HeaderLen]byte{
+- 0x45, 0x01, 0xbe, 0xef,
+- 0xca, 0xfe, 0x05, 0xdc,
+- 0xff, 0x01, 0xde, 0xad,
+- 172, 16, 254, 254,
+- 192, 168, 0, 1,
+- }
+- wireHeaderToKernel = [ipv4.HeaderLen]byte{
+- 0x45, 0x01, 0xbe, 0xef,
+- 0xca, 0xfe, 0x05, 0xdc,
+- 0xff, 0x01, 0xde, 0xad,
+- 172, 16, 254, 254,
+- 192, 168, 0, 1,
+- }
+- wireHeaderFromTradBSDKernel = [ipv4.HeaderLen]byte{
+- 0x45, 0x01, 0xdb, 0xbe,
+- 0xca, 0xfe, 0xdc, 0x05,
+- 0xff, 0x01, 0xde, 0xad,
+- 172, 16, 254, 254,
+- 192, 168, 0, 1,
+- }
+- wireHeaderToTradBSDKernel = [ipv4.HeaderLen]byte{
+- 0x45, 0x01, 0xef, 0xbe,
+- 0xca, 0xfe, 0xdc, 0x05,
+- 0xff, 0x01, 0xde, 0xad,
+- 172, 16, 254, 254,
+- 192, 168, 0, 1,
+- }
+- // TODO(mikio): Add platform dependent wire header formats when
+- // we support new platforms.
+-
+- testHeader = &ipv4.Header{
+- Version: ipv4.Version,
+- Len: ipv4.HeaderLen,
+- TOS: 1,
+- TotalLen: 0xbeef,
+- ID: 0xcafe,
+- FragOff: 1500,
+- TTL: 255,
+- Protocol: 1,
+- Checksum: 0xdead,
+- Src: net.IPv4(172, 16, 254, 254),
+- Dst: net.IPv4(192, 168, 0, 1),
+- }
+-)
+-
+-func TestMarshalHeader(t *testing.T) {
+- b, err := testHeader.Marshal()
+- if err != nil {
+- t.Fatalf("ipv4.Header.Marshal failed: %v", err)
+- }
+- var wh []byte
+- switch runtime.GOOS {
+- case "linux", "openbsd":
+- wh = wireHeaderToKernel[:]
+- default:
+- wh = wireHeaderToTradBSDKernel[:]
+- }
+- if !bytes.Equal(b, wh) {
+- t.Fatalf("ipv4.Header.Marshal failed: %#v not equal %#v", b, wh)
+- }
+-}
+-
+-func TestParseHeader(t *testing.T) {
+- var wh []byte
+- switch runtime.GOOS {
+- case "linux", "openbsd":
+- wh = wireHeaderFromKernel[:]
+- default:
+- wh = wireHeaderFromTradBSDKernel[:]
+- }
+- h, err := ipv4.ParseHeader(wh)
+- if err != nil {
+- t.Fatalf("ipv4.ParseHeader failed: %v", err)
+- }
+- if !reflect.DeepEqual(h, testHeader) {
+- t.Fatalf("ipv4.ParseHeader failed: %#v not equal %#v", h, testHeader)
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/helper.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/helper.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/helper.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/helper.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,85 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import (
+- "errors"
+- "net"
+-)
+-
+-var (
+- errNoSuchInterface = errors.New("no such interface")
+- errNoSuchMulticastInterface = errors.New("no such multicast interface")
+-)
+-
+-func boolint(b bool) int {
+- if b {
+- return 1
+- }
+- return 0
+-}
+-
+-func netAddrToIP4(a net.Addr) net.IP {
+- switch v := a.(type) {
+- case *net.UDPAddr:
+- if ip := v.IP.To4(); ip != nil {
+- return ip
+- }
+- case *net.IPAddr:
+- if ip := v.IP.To4(); ip != nil {
+- return ip
+- }
+- }
+- return nil
+-}
+-
+-func netIP4ToInterface(ip net.IP) (*net.Interface, error) {
+- ift, err := net.Interfaces()
+- if err != nil {
+- return nil, err
+- }
+- for _, ifi := range ift {
+- ifat, err := ifi.Addrs()
+- if err != nil {
+- return nil, err
+- }
+- for _, ifa := range ifat {
+- switch v := ifa.(type) {
+- case *net.IPAddr:
+- if ip.Equal(v.IP) {
+- return &ifi, nil
+- }
+- case *net.IPNet:
+- if ip.Equal(v.IP) {
+- return &ifi, nil
+- }
+- }
+- }
+- }
+- return nil, errNoSuchInterface
+-}
+-
+-func netInterfaceToIP4(ifi *net.Interface) (net.IP, error) {
+- if ifi == nil {
+- return net.IPv4zero, nil
+- }
+- ifat, err := ifi.Addrs()
+- if err != nil {
+- return nil, err
+- }
+- for _, ifa := range ifat {
+- switch v := ifa.(type) {
+- case *net.IPAddr:
+- if v.IP.To4() != nil {
+- return v.IP, nil
+- }
+- case *net.IPNet:
+- if v.IP.To4() != nil {
+- return v.IP, nil
+- }
+- }
+- }
+- return nil, errNoSuchInterface
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/helper_plan9.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/helper_plan9.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/helper_plan9.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/helper_plan9.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,27 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import "syscall"
+-
+-func (c *genericOpt) sysfd() (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+-
+-func (c *dgramOpt) sysfd() (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+-
+-func (c *payloadHandler) sysfd() (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+-
+-func (c *packetHandler) sysfd() (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/helper_posix.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/helper_posix.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/helper_posix.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/helper_posix.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,42 +0,0 @@
+-// Copyright 2012 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 darwin freebsd linux netbsd openbsd windows
+-
+-package ipv4
+-
+-import (
+- "bytes"
+- "net"
+- "syscall"
+-)
+-
+-func setSyscallIPMreq(mreq *syscall.IPMreq, ifi *net.Interface) error {
+- if ifi == nil {
+- return nil
+- }
+- ifat, err := ifi.Addrs()
+- if err != nil {
+- return err
+- }
+- for _, ifa := range ifat {
+- switch v := ifa.(type) {
+- case *net.IPAddr:
+- if a := v.IP.To4(); a != nil {
+- copy(mreq.Interface[:], a)
+- goto done
+- }
+- case *net.IPNet:
+- if a := v.IP.To4(); a != nil {
+- copy(mreq.Interface[:], a)
+- goto done
+- }
+- }
+- }
+-done:
+- if bytes.Equal(mreq.Multiaddr[:], net.IPv4zero.To4()) {
+- return errNoSuchMulticastInterface
+- }
+- return nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/helper_unix.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/helper_unix.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/helper_unix.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/helper_unix.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,50 +0,0 @@
+-// Copyright 2012 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 darwin freebsd linux netbsd openbsd
+-
+-package ipv4
+-
+-import (
+- "net"
+- "reflect"
+-)
+-
+-func (c *genericOpt) sysfd() (int, error) {
+- switch p := c.Conn.(type) {
+- case *net.TCPConn, *net.UDPConn, *net.IPConn:
+- return sysfd(p)
+- }
+- return 0, errInvalidConnType
+-}
+-
+-func (c *dgramOpt) sysfd() (int, error) {
+- switch p := c.PacketConn.(type) {
+- case *net.UDPConn, *net.IPConn:
+- return sysfd(p.(net.Conn))
+- }
+- return 0, errInvalidConnType
+-}
+-
+-func (c *payloadHandler) sysfd() (int, error) {
+- return sysfd(c.PacketConn.(net.Conn))
+-}
+-
+-func (c *packetHandler) sysfd() (int, error) {
+- return sysfd(c.c)
+-}
+-
+-func sysfd(c net.Conn) (int, error) {
+- cv := reflect.ValueOf(c)
+- switch ce := cv.Elem(); ce.Kind() {
+- case reflect.Struct:
+- netfd := ce.FieldByName("conn").FieldByName("fd")
+- switch fe := netfd.Elem(); fe.Kind() {
+- case reflect.Struct:
+- fd := fe.FieldByName("sysfd")
+- return int(fd.Int()), nil
+- }
+- }
+- return 0, errInvalidConnType
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/helper_windows.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/helper_windows.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/helper_windows.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/helper_windows.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,49 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import (
+- "net"
+- "reflect"
+- "syscall"
+-)
+-
+-func (c *genericOpt) sysfd() (syscall.Handle, error) {
+- switch p := c.Conn.(type) {
+- case *net.TCPConn, *net.UDPConn, *net.IPConn:
+- return sysfd(p)
+- }
+- return syscall.InvalidHandle, errInvalidConnType
+-}
+-
+-func (c *dgramOpt) sysfd() (syscall.Handle, error) {
+- switch p := c.PacketConn.(type) {
+- case *net.UDPConn, *net.IPConn:
+- return sysfd(p.(net.Conn))
+- }
+- return syscall.InvalidHandle, errInvalidConnType
+-}
+-
+-func (c *payloadHandler) sysfd() (syscall.Handle, error) {
+- return sysfd(c.PacketConn.(net.Conn))
+-}
+-
+-func (c *packetHandler) sysfd() (syscall.Handle, error) {
+- return sysfd(c.c)
+-}
+-
+-func sysfd(c net.Conn) (syscall.Handle, error) {
+- cv := reflect.ValueOf(c)
+- switch ce := cv.Elem(); ce.Kind() {
+- case reflect.Struct:
+- netfd := ce.FieldByName("conn").FieldByName("fd")
+- switch fe := netfd.Elem(); fe.Kind() {
+- case reflect.Struct:
+- fd := fe.FieldByName("sysfd")
+- return syscall.Handle(fd.Uint()), nil
+- }
+- }
+- return syscall.InvalidHandle, errInvalidConnType
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/iana.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/iana.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/iana.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/iana.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,179 +0,0 @@
+-// go run gen.go
+-// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+-
+-package ipv4
+-
+-// Internet Control Message Protocol (ICMP) Parameters, Updated: 2013-04-19
+-const (
+- ICMPTypeEchoReply ICMPType = 0 // Echo Reply
+- ICMPTypeDestinationUnreachable ICMPType = 3 // Destination Unreachable
+- ICMPTypeRedirect ICMPType = 5 // Redirect
+- ICMPTypeEcho ICMPType = 8 // Echo
+- ICMPTypeRouterAdvertisement ICMPType = 9 // Router Advertisement
+- ICMPTypeRouterSolicitation ICMPType = 10 // Router Solicitation
+- ICMPTypeTimeExceeded ICMPType = 11 // Time Exceeded
+- ICMPTypeParameterProblem ICMPType = 12 // Parameter Problem
+- ICMPTypeTimestamp ICMPType = 13 // Timestamp
+- ICMPTypeTimestampReply ICMPType = 14 // Timestamp Reply
+- ICMPTypePhoturis ICMPType = 40 // Photuris
+-)
+-
+-// Internet Control Message Protocol (ICMP) Parameters, Updated: 2013-04-19
+-var icmpTypes = map[ICMPType]string{
+- 0: "echo reply",
+- 3: "destination unreachable",
+- 5: "redirect",
+- 8: "echo",
+- 9: "router advertisement",
+- 10: "router solicitation",
+- 11: "time exceeded",
+- 12: "parameter problem",
+- 13: "timestamp",
+- 14: "timestamp reply",
+- 40: "photuris",
+-}
+-
+-// Protocol Numbers, Updated: 2013-02-17
+-const (
+- ianaProtocolIP = 0 // IPv4 encapsulation, pseudo protocol number
+- ianaProtocolHOPOPT = 0 // IPv6 Hop-by-Hop Option
+- ianaProtocolICMP = 1 // Internet Control Message
+- ianaProtocolIGMP = 2 // Internet Group Management
+- ianaProtocolGGP = 3 // Gateway-to-Gateway
+- ianaProtocolIPv4 = 4 // IPv4 encapsulation
+- ianaProtocolST = 5 // Stream
+- ianaProtocolTCP = 6 // Transmission Control
+- ianaProtocolCBT = 7 // CBT
+- ianaProtocolEGP = 8 // Exterior Gateway Protocol
+- ianaProtocolIGP = 9 // any private interior gateway (used by Cisco for their IGRP)
+- ianaProtocolBBNRCCMON = 10 // BBN RCC Monitoring
+- ianaProtocolNVPII = 11 // Network Voice Protocol
+- ianaProtocolPUP = 12 // PUP
+- ianaProtocolARGUS = 13 // ARGUS
+- ianaProtocolEMCON = 14 // EMCON
+- ianaProtocolXNET = 15 // Cross Net Debugger
+- ianaProtocolCHAOS = 16 // Chaos
+- ianaProtocolUDP = 17 // User Datagram
+- ianaProtocolMUX = 18 // Multiplexing
+- ianaProtocolDCNMEAS = 19 // DCN Measurement Subsystems
+- ianaProtocolHMP = 20 // Host Monitoring
+- ianaProtocolPRM = 21 // Packet Radio Measurement
+- ianaProtocolXNSIDP = 22 // XEROX NS IDP
+- ianaProtocolTRUNK1 = 23 // Trunk-1
+- ianaProtocolTRUNK2 = 24 // Trunk-2
+- ianaProtocolLEAF1 = 25 // Leaf-1
+- ianaProtocolLEAF2 = 26 // Leaf-2
+- ianaProtocolRDP = 27 // Reliable Data Protocol
+- ianaProtocolIRTP = 28 // Internet Reliable Transaction
+- ianaProtocolISOTP4 = 29 // ISO Transport Protocol Class 4
+- ianaProtocolNETBLT = 30 // Bulk Data Transfer Protocol
+- ianaProtocolMFENSP = 31 // MFE Network Services Protocol
+- ianaProtocolMERITINP = 32 // MERIT Internodal Protocol
+- ianaProtocolDCCP = 33 // Datagram Congestion Control Protocol
+- ianaProtocol3PC = 34 // Third Party Connect Protocol
+- ianaProtocolIDPR = 35 // Inter-Domain Policy Routing Protocol
+- ianaProtocolXTP = 36 // XTP
+- ianaProtocolDDP = 37 // Datagram Delivery Protocol
+- ianaProtocolIDPRCMTP = 38 // IDPR Control Message Transport Proto
+- ianaProtocolTPPP = 39 // TP++ Transport Protocol
+- ianaProtocolIL = 40 // IL Transport Protocol
+- ianaProtocolIPv6 = 41 // IPv6 encapsulation
+- ianaProtocolSDRP = 42 // Source Demand Routing Protocol
+- ianaProtocolIPv6Route = 43 // Routing Header for IPv6
+- ianaProtocolIPv6Frag = 44 // Fragment Header for IPv6
+- ianaProtocolIDRP = 45 // Inter-Domain Routing Protocol
+- ianaProtocolRSVP = 46 // Reservation Protocol
+- ianaProtocolGRE = 47 // Generic Routing Encapsulation
+- ianaProtocolDSR = 48 // Dynamic Source Routing Protocol
+- ianaProtocolBNA = 49 // BNA
+- ianaProtocolESP = 50 // Encap Security Payload
+- ianaProtocolAH = 51 // Authentication Header
+- ianaProtocolINLSP = 52 // Integrated Net Layer Security TUBA
+- ianaProtocolSWIPE = 53 // IP with Encryption
+- ianaProtocolNARP = 54 // NBMA Address Resolution Protocol
+- ianaProtocolMOBILE = 55 // IP Mobility
+- ianaProtocolTLSP = 56 // Transport Layer Security Protocol using Kryptonet key management
+- ianaProtocolSKIP = 57 // SKIP
+- ianaProtocolIPv6ICMP = 58 // ICMP for IPv6
+- ianaProtocolIPv6NoNxt = 59 // No Next Header for IPv6
+- ianaProtocolIPv6Opts = 60 // Destination Options for IPv6
+- ianaProtocolCFTP = 62 // CFTP
+- ianaProtocolSATEXPAK = 64 // SATNET and Backroom EXPAK
+- ianaProtocolKRYPTOLAN = 65 // Kryptolan
+- ianaProtocolRVD = 66 // MIT Remote Virtual Disk Protocol
+- ianaProtocolIPPC = 67 // Internet Pluribus Packet Core
+- ianaProtocolSATMON = 69 // SATNET Monitoring
+- ianaProtocolVISA = 70 // VISA Protocol
+- ianaProtocolIPCV = 71 // Internet Packet Core Utility
+- ianaProtocolCPNX = 72 // Computer Protocol Network Executive
+- ianaProtocolCPHB = 73 // Computer Protocol Heart Beat
+- ianaProtocolWSN = 74 // Wang Span Network
+- ianaProtocolPVP = 75 // Packet Video Protocol
+- ianaProtocolBRSATMON = 76 // Backroom SATNET Monitoring
+- ianaProtocolSUNND = 77 // SUN ND PROTOCOL-Temporary
+- ianaProtocolWBMON = 78 // WIDEBAND Monitoring
+- ianaProtocolWBEXPAK = 79 // WIDEBAND EXPAK
+- ianaProtocolISOIP = 80 // ISO Internet Protocol
+- ianaProtocolVMTP = 81 // VMTP
+- ianaProtocolSECUREVMTP = 82 // SECURE-VMTP
+- ianaProtocolVINES = 83 // VINES
+- ianaProtocolTTP = 84 // TTP
+- ianaProtocolIPTM = 84 // Protocol Internet Protocol Traffic Manager
+- ianaProtocolNSFNETIGP = 85 // NSFNET-IGP
+- ianaProtocolDGP = 86 // Dissimilar Gateway Protocol
+- ianaProtocolTCF = 87 // TCF
+- ianaProtocolEIGRP = 88 // EIGRP
+- ianaProtocolOSPFIGP = 89 // OSPFIGP
+- ianaProtocolSpriteRPC = 90 // Sprite RPC Protocol
+- ianaProtocolLARP = 91 // Locus Address Resolution Protocol
+- ianaProtocolMTP = 92 // Multicast Transport Protocol
+- ianaProtocolAX25 = 93 // AX.25 Frames
+- ianaProtocolIPIP = 94 // IP-within-IP Encapsulation Protocol
+- ianaProtocolMICP = 95 // Mobile Internetworking Control Pro.
+- ianaProtocolSCCSP = 96 // Semaphore Communications Sec. Pro.
+- ianaProtocolETHERIP = 97 // Ethernet-within-IP Encapsulation
+- ianaProtocolENCAP = 98 // Encapsulation Header
+- ianaProtocolGMTP = 100 // GMTP
+- ianaProtocolIFMP = 101 // Ipsilon Flow Management Protocol
+- ianaProtocolPNNI = 102 // PNNI over IP
+- ianaProtocolPIM = 103 // Protocol Independent Multicast
+- ianaProtocolARIS = 104 // ARIS
+- ianaProtocolSCPS = 105 // SCPS
+- ianaProtocolQNX = 106 // QNX
+- ianaProtocolAN = 107 // Active Networks
+- ianaProtocolIPComp = 108 // IP Payload Compression Protocol
+- ianaProtocolSNP = 109 // Sitara Networks Protocol
+- ianaProtocolCompaqPeer = 110 // Compaq Peer Protocol
+- ianaProtocolIPXinIP = 111 // IPX in IP
+- ianaProtocolVRRP = 112 // Virtual Router Redundancy Protocol
+- ianaProtocolPGM = 113 // PGM Reliable Transport Protocol
+- ianaProtocolL2TP = 115 // Layer Two Tunneling Protocol
+- ianaProtocolDDX = 116 // D-II Data Exchange (DDX)
+- ianaProtocolIATP = 117 // Interactive Agent Transfer Protocol
+- ianaProtocolSTP = 118 // Schedule Transfer Protocol
+- ianaProtocolSRP = 119 // SpectraLink Radio Protocol
+- ianaProtocolUTI = 120 // UTI
+- ianaProtocolSMP = 121 // Simple Message Protocol
+- ianaProtocolSM = 122 // SM
+- ianaProtocolPTP = 123 // Performance Transparency Protocol
+- ianaProtocolISIS = 124 // ISIS over IPv4
+- ianaProtocolFIRE = 125 // FIRE
+- ianaProtocolCRTP = 126 // Combat Radio Transport Protocol
+- ianaProtocolCRUDP = 127 // Combat Radio User Datagram
+- ianaProtocolSSCOPMCE = 128 // SSCOPMCE
+- ianaProtocolIPLT = 129 // IPLT
+- ianaProtocolSPS = 130 // Secure Packet Shield
+- ianaProtocolPIPE = 131 // Private IP Encapsulation within IP
+- ianaProtocolSCTP = 132 // Stream Control Transmission Protocol
+- ianaProtocolFC = 133 // Fibre Channel
+- ianaProtocolRSVPE2EIGNORE = 134 // RSVP-E2E-IGNORE
+- ianaProtocolMobilityHeader = 135 // Mobility Header
+- ianaProtocolUDPLite = 136 // UDPLite
+- ianaProtocolMPLSinIP = 137 // MPLS-in-IP
+- ianaProtocolMANET = 138 // MANET Protocols
+- ianaProtocolHIP = 139 // Host Identity Protocol
+- ianaProtocolShim6 = 140 // Shim6 Protocol
+- ianaProtocolWESP = 141 // Wrapped Encapsulating Security Payload
+- ianaProtocolROHC = 142 // Robust Header Compression
+- ianaProtocolReserved = 255 // Reserved
+-)
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/iana_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/iana_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/iana_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/iana_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,38 +0,0 @@
+-// go run gentv.go
+-// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+-
+-package ipv4_test
+-
+-// Differentiated Services Field Codepoints, Updated: 2010-05-11
+-const (
+- DiffServCS0 = 0x0 // CS0
+- DiffServCS1 = 0x20 // CS1
+- DiffServCS2 = 0x40 // CS2
+- DiffServCS3 = 0x60 // CS3
+- DiffServCS4 = 0x80 // CS4
+- DiffServCS5 = 0xa0 // CS5
+- DiffServCS6 = 0xc0 // CS6
+- DiffServCS7 = 0xe0 // CS7
+- DiffServAF11 = 0x28 // AF11
+- DiffServAF12 = 0x30 // AF12
+- DiffServAF13 = 0x38 // AF13
+- DiffServAF21 = 0x48 // AF21
+- DiffServAF22 = 0x50 // AF22
+- DiffServAF23 = 0x58 // AF23
+- DiffServAF31 = 0x68 // AF31
+- DiffServAF32 = 0x70 // AF32
+- DiffServAF33 = 0x78 // AF33
+- DiffServAF41 = 0x88 // AF41
+- DiffServAF42 = 0x90 // AF42
+- DiffServAF43 = 0x98 // AF43
+- DiffServEFPHB = 0xb8 // EF PHB
+- DiffServVOICEADMIT = 0xb0 // VOICE-ADMIT
+-)
+-
+-// IPv4 TOS Byte and IPv6 Traffic Class Octet, Updated: 2001-09-06
+-const (
+- NotECNTransport = 0x0 // Not-ECT (Not ECN-Capable Transport)
+- ECNTransport1 = 0x1 // ECT(1) (ECN-Capable Transport(1))
+- ECNTransport0 = 0x2 // ECT(0) (ECN-Capable Transport(0))
+- CongestionExperienced = 0x3 // CE (Congestion Experienced)
+-)
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/icmp.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/icmp.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/icmp.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/icmp.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,16 +0,0 @@
+-// Copyright 2013 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 ipv4
+-
+-// An ICMPType represents a type of ICMP message.
+-type ICMPType int
+-
+-func (typ ICMPType) String() string {
+- s, ok := icmpTypes[typ]
+- if !ok {
+- return "<nil>"
+- }
+- return s
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/mockicmp_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/mockicmp_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/mockicmp_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/mockicmp_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,111 +0,0 @@
+-// Copyright 2012 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 ipv4_test
+-
+-import (
+- "code.google.com/p/go.net/ipv4"
+- "errors"
+- "flag"
+-)
+-
+-var testExternal = flag.Bool("external", true, "allow use of external networks during long test")
+-
+-// icmpMessage represents an ICMP message.
+-type icmpMessage struct {
+- Type ipv4.ICMPType // type
+- Code int // code
+- Checksum int // checksum
+- Body icmpMessageBody // body
+-}
+-
+-// icmpMessageBody represents an ICMP message body.
+-type icmpMessageBody interface {
+- Len() int
+- Marshal() ([]byte, error)
+-}
+-
+-// Marshal returns the binary enconding of the ICMP echo request or
+-// reply message m.
+-func (m *icmpMessage) Marshal() ([]byte, error) {
+- b := []byte{byte(m.Type), byte(m.Code), 0, 0}
+- if m.Body != nil && m.Body.Len() != 0 {
+- mb, err := m.Body.Marshal()
+- if err != nil {
+- return nil, err
+- }
+- b = append(b, mb...)
+- }
+- csumcv := len(b) - 1 // checksum coverage
+- s := uint32(0)
+- for i := 0; i < csumcv; i += 2 {
+- s += uint32(b[i+1])<<8 | uint32(b[i])
+- }
+- if csumcv&1 == 0 {
+- s += uint32(b[csumcv])
+- }
+- s = s>>16 + s&0xffff
+- s = s + s>>16
+- // Place checksum back in header; using ^= avoids the
+- // assumption the checksum bytes are zero.
+- b[2] ^= byte(^s & 0xff)
+- b[3] ^= byte(^s >> 8)
+- return b, nil
+-}
+-
+-// parseICMPMessage parses b as an ICMP message.
+-func parseICMPMessage(b []byte) (*icmpMessage, error) {
+- msglen := len(b)
+- if msglen < 4 {
+- return nil, errors.New("message too short")
+- }
+- m := &icmpMessage{Type: ipv4.ICMPType(b[0]), Code: int(b[1]), Checksum: int(b[2])<<8 | int(b[3])}
+- if msglen > 4 {
+- var err error
+- switch m.Type {
+- case ipv4.ICMPTypeEcho, ipv4.ICMPTypeEchoReply:
+- m.Body, err = parseICMPEcho(b[4:])
+- if err != nil {
+- return nil, err
+- }
+- }
+- }
+- return m, nil
+-}
+-
+-// imcpEcho represenets an ICMP echo request or reply message body.
+-type icmpEcho struct {
+- ID int // identifier
+- Seq int // sequence number
+- Data []byte // data
+-}
+-
+-func (p *icmpEcho) Len() int {
+- if p == nil {
+- return 0
+- }
+- return 4 + len(p.Data)
+-}
+-
+-// Marshal returns the binary enconding of the ICMP echo request or
+-// reply message body p.
+-func (p *icmpEcho) Marshal() ([]byte, error) {
+- b := make([]byte, 4+len(p.Data))
+- b[0], b[1] = byte(p.ID>>8), byte(p.ID&0xff)
+- b[2], b[3] = byte(p.Seq>>8), byte(p.Seq&0xff)
+- copy(b[4:], p.Data)
+- return b, nil
+-}
+-
+-// parseICMPEcho parses b as an ICMP echo request or reply message
+-// body.
+-func parseICMPEcho(b []byte) (*icmpEcho, error) {
+- bodylen := len(b)
+- p := &icmpEcho{ID: int(b[0])<<8 | int(b[1]), Seq: int(b[2])<<8 | int(b[3])}
+- if bodylen > 4 {
+- p.Data = make([]byte, bodylen-4)
+- copy(p.Data, b[4:])
+- }
+- return p, nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/mocktransponder_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/mocktransponder_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/mocktransponder_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/mocktransponder_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,124 +0,0 @@
+-// Copyright 2012 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 darwin freebsd linux netbsd openbsd
+-
+-package ipv4_test
+-
+-import (
+- "code.google.com/p/go.net/ipv4"
+- "net"
+- "testing"
+- "time"
+-)
+-
+-// writeThenReadPayload transmits IPv4 datagram payloads to the
+-// loopback address or interface and captures the loopback'd datagram
+-// payloads.
+-func writeThenReadPayload(t *testing.T, i int, c *ipv4.PacketConn, wb []byte, dst net.Addr) []byte {
+- rb := make([]byte, 1500)
+- c.SetTOS(i + 1)
+- var ip net.IP
+- switch v := dst.(type) {
+- case *net.UDPAddr:
+- ip = v.IP
+- case *net.IPAddr:
+- ip = v.IP
+- }
+- if ip.IsMulticast() {
+- c.SetMulticastTTL(i + 1)
+- } else {
+- c.SetTTL(i + 1)
+- }
+- c.SetDeadline(time.Now().Add(100 * time.Millisecond))
+- if _, err := c.WriteTo(wb, nil, dst); err != nil {
+- t.Fatalf("ipv4.PacketConn.WriteTo failed: %v", err)
+- }
+- n, cm, _, err := c.ReadFrom(rb)
+- if err != nil {
+- t.Fatalf("ipv4.PacketConn.ReadFrom failed: %v", err)
+- }
+- t.Logf("rcvd cmsg: %v", cm)
+- return rb[:n]
+-}
+-
+-// writeThenReadDatagram transmits ICMP for IPv4 datagrams to the
+-// loopback address or interface and captures the response datagrams
+-// from the protocol stack within the kernel.
+-func writeThenReadDatagram(t *testing.T, i int, c *ipv4.RawConn, wb []byte, src, dst net.Addr) []byte {
+- rb := make([]byte, ipv4.HeaderLen+len(wb))
+- wh := &ipv4.Header{
+- Version: ipv4.Version,
+- Len: ipv4.HeaderLen,
+- TOS: i + 1,
+- TotalLen: ipv4.HeaderLen + len(wb),
+- TTL: i + 1,
+- Protocol: 1,
+- }
+- if src != nil {
+- wh.Src = src.(*net.IPAddr).IP
+- }
+- if dst != nil {
+- wh.Dst = dst.(*net.IPAddr).IP
+- }
+- c.SetDeadline(time.Now().Add(100 * time.Millisecond))
+- if err := c.WriteTo(wh, wb, nil); err != nil {
+- t.Fatalf("ipv4.RawConn.WriteTo failed: %v", err)
+- }
+- rh, b, cm, err := c.ReadFrom(rb)
+- if err != nil {
+- t.Fatalf("ipv4.RawConn.ReadFrom failed: %v", err)
+- }
+- t.Logf("rcvd cmsg: %v", cm.String())
+- t.Logf("rcvd hdr: %v", rh.String())
+- return b
+-}
+-
+-// LoopbackInterface returns a logical network interface for loopback
+-// tests.
+-func loopbackInterface() *net.Interface {
+- ift, err := net.Interfaces()
+- if err != nil {
+- return nil
+- }
+- for _, ifi := range ift {
+- if ifi.Flags&net.FlagLoopback != 0 {
+- return &ifi
+- }
+- }
+- return nil
+-}
+-
+-// isMulticastAvailable returns true if ifi is a multicast access
+-// enabled network interface. It also returns a unicast IPv4 address
+-// that can be used for listening on ifi.
+-func isMulticastAvailable(ifi *net.Interface) (net.IP, bool) {
+- if ifi.Flags&net.FlagUp == 0 || ifi.Flags&net.FlagMulticast == 0 {
+- return nil, false
+- }
+- ifat, err := ifi.Addrs()
+- if err != nil {
+- return nil, false
+- }
+- if len(ifat) == 0 {
+- return nil, false
+- }
+- var ip net.IP
+- for _, ifa := range ifat {
+- switch v := ifa.(type) {
+- case *net.IPAddr:
+- ip = v.IP
+- case *net.IPNet:
+- ip = v.IP
+- default:
+- continue
+- }
+- if ip.To4() == nil {
+- ip = nil
+- continue
+- }
+- break
+- }
+- return ip, true
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/multicastlistener_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/multicastlistener_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/multicastlistener_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/multicastlistener_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,237 +0,0 @@
+-// Copyright 2012 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 darwin freebsd linux netbsd openbsd
+-
+-package ipv4_test
+-
+-import (
+- "code.google.com/p/go.net/ipv4"
+- "net"
+- "os"
+- "testing"
+-)
+-
+-var udpMultipleGroupListenerTests = []struct {
+- gaddr *net.UDPAddr
+-}{
+- {&net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}}, // see RFC 4727
+- {&net.UDPAddr{IP: net.IPv4(224, 0, 0, 250)}}, // see RFC 4727
+- {&net.UDPAddr{IP: net.IPv4(224, 0, 0, 254)}}, // see RFC 4727
+-}
+-
+-func TestUDPSingleConnWithMultipleGroupListeners(t *testing.T) {
+- if testing.Short() || !*testExternal {
+- t.Skip("to avoid external network")
+- }
+-
+- for _, tt := range udpMultipleGroupListenerTests {
+- // listen to a wildcard address with no reusable port
+- c, err := net.ListenPacket("udp4", "0.0.0.0:0")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- p := ipv4.NewPacketConn(c)
+-
+- var mift []*net.Interface
+- ift, err := net.Interfaces()
+- if err != nil {
+- t.Fatalf("net.Interfaces failed: %v", err)
+- }
+- for i, ifi := range ift {
+- if _, ok := isMulticastAvailable(&ifi); !ok {
+- continue
+- }
+- if err := p.JoinGroup(&ifi, tt.gaddr); err != nil {
+- t.Fatalf("ipv4.PacketConn.JoinGroup %v on %v failed: %v", tt.gaddr, ifi, err)
+- }
+- mift = append(mift, &ift[i])
+- }
+- for _, ifi := range mift {
+- if err := p.LeaveGroup(ifi, tt.gaddr); err != nil {
+- t.Fatalf("ipv4.PacketConn.LeaveGroup %v on %v failed: %v", tt.gaddr, ifi, err)
+- }
+- }
+- }
+-}
+-
+-func TestUDPMultipleConnWithMultipleGroupListeners(t *testing.T) {
+- if testing.Short() || !*testExternal {
+- t.Skip("to avoid external network")
+- }
+-
+- for _, tt := range udpMultipleGroupListenerTests {
+- // listen to a group address, actually a wildcard address
+- // with reusable port
+- c1, err := net.ListenPacket("udp4", "224.0.0.0:1024") // see RFC 4727
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c1.Close()
+-
+- c2, err := net.ListenPacket("udp4", "224.0.0.0:1024") // see RFC 4727
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c2.Close()
+-
+- var ps [2]*ipv4.PacketConn
+- ps[0] = ipv4.NewPacketConn(c1)
+- ps[1] = ipv4.NewPacketConn(c2)
+-
+- var mift []*net.Interface
+- ift, err := net.Interfaces()
+- if err != nil {
+- t.Fatalf("net.Interfaces failed: %v", err)
+- }
+- for i, ifi := range ift {
+- if _, ok := isMulticastAvailable(&ifi); !ok {
+- continue
+- }
+- for _, p := range ps {
+- if err := p.JoinGroup(&ifi, tt.gaddr); err != nil {
+- t.Fatalf("ipv4.PacketConn.JoinGroup %v on %v failed: %v", tt.gaddr, ifi, err)
+- }
+- }
+- mift = append(mift, &ift[i])
+- }
+- for _, ifi := range mift {
+- for _, p := range ps {
+- if err := p.LeaveGroup(ifi, tt.gaddr); err != nil {
+- t.Fatalf("ipv4.PacketConn.LeaveGroup %v on %v failed: %v", tt.gaddr, ifi, err)
+- }
+- }
+- }
+- }
+-}
+-
+-func TestIPSingleConnWithSingleGroupListener(t *testing.T) {
+- if testing.Short() || !*testExternal {
+- t.Skip("to avoid external network")
+- }
+- if os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+-
+- // listen to a wildcard address
+- c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- r, err := ipv4.NewRawConn(c)
+- if err != nil {
+- t.Fatalf("ipv4.RawConn failed: %v", err)
+- }
+-
+- gaddr := &net.IPAddr{IP: net.IPv4(224, 0, 0, 254)} // see RFC 4727
+- var mift []*net.Interface
+- ift, err := net.Interfaces()
+- if err != nil {
+- t.Fatalf("net.Interfaces failed: %v", err)
+- }
+- for i, ifi := range ift {
+- if _, ok := isMulticastAvailable(&ifi); !ok {
+- continue
+- }
+- if err := r.JoinGroup(&ifi, gaddr); err != nil {
+- t.Fatalf("ipv4.RawConn.JoinGroup on %v failed: %v", ifi, err)
+- }
+- mift = append(mift, &ift[i])
+- }
+- for _, ifi := range mift {
+- if err := r.LeaveGroup(ifi, gaddr); err != nil {
+- t.Fatalf("ipv4.RawConn.LeaveGroup on %v failed: %v", ifi, err)
+- }
+- }
+-}
+-
+-func TestUDPPerInterfaceSingleConnWithSingleGroupListener(t *testing.T) {
+- if testing.Short() || !*testExternal {
+- t.Skip("to avoid external network")
+- }
+-
+- gaddr := &net.IPAddr{IP: net.IPv4(224, 0, 0, 254)} // see RFC 4727
+- type ml struct {
+- c *ipv4.PacketConn
+- ifi *net.Interface
+- }
+- var mlt []*ml
+-
+- ift, err := net.Interfaces()
+- if err != nil {
+- t.Fatalf("net.Interfaces failed: %v", err)
+- }
+- for i, ifi := range ift {
+- ip, ok := isMulticastAvailable(&ifi)
+- if !ok {
+- continue
+- }
+- // listen to a unicast interface address
+- c, err := net.ListenPacket("udp4", ip.String()+":"+"1024") // see RFC 4727
+- if err != nil {
+- t.Fatalf("net.ListenPacket with %v failed: %v", ip, err)
+- }
+- defer c.Close()
+- p := ipv4.NewPacketConn(c)
+- if err := p.JoinGroup(&ifi, gaddr); err != nil {
+- t.Fatalf("ipv4.PacketConn.JoinGroup on %v failed: %v", ifi, err)
+- }
+- mlt = append(mlt, &ml{p, &ift[i]})
+- }
+- for _, m := range mlt {
+- if err := m.c.LeaveGroup(m.ifi, gaddr); err != nil {
+- t.Fatalf("ipv4.PacketConn.LeaveGroup on %v failed: %v", m.ifi, err)
+- }
+- }
+-}
+-
+-func TestIPPerInterfaceSingleConnWithSingleGroupListener(t *testing.T) {
+- if testing.Short() || !*testExternal {
+- t.Skip("to avoid external network")
+- }
+- if os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+-
+- gaddr := &net.IPAddr{IP: net.IPv4(224, 0, 0, 254)} // see RFC 4727
+- type ml struct {
+- c *ipv4.RawConn
+- ifi *net.Interface
+- }
+- var mlt []*ml
+-
+- ift, err := net.Interfaces()
+- if err != nil {
+- t.Fatalf("net.Interfaces failed: %v", err)
+- }
+- for i, ifi := range ift {
+- ip, ok := isMulticastAvailable(&ifi)
+- if !ok {
+- continue
+- }
+- // listen to a unicast interface address
+- c, err := net.ListenPacket("ip4:253", ip.String()) // see RFC 4727
+- if err != nil {
+- t.Fatalf("net.ListenPacket with %v failed: %v", ip, err)
+- }
+- defer c.Close()
+- r, err := ipv4.NewRawConn(c)
+- if err != nil {
+- t.Fatalf("ipv4.NewRawConn failed: %v", err)
+- }
+- if err := r.JoinGroup(&ifi, gaddr); err != nil {
+- t.Fatalf("ipv4.RawConn.JoinGroup on %v failed: %v", ifi, err)
+- }
+- mlt = append(mlt, &ml{r, &ift[i]})
+- }
+- for _, m := range mlt {
+- if err := m.c.LeaveGroup(m.ifi, gaddr); err != nil {
+- t.Fatalf("ipv4.RawConn.LeaveGroup on %v failed: %v", m.ifi, err)
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/multicastsockopt_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/multicastsockopt_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/multicastsockopt_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/multicastsockopt_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,126 +0,0 @@
+-// Copyright 2012 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 darwin freebsd linux netbsd openbsd windows
+-
+-package ipv4_test
+-
+-import (
+- "code.google.com/p/go.net/ipv4"
+- "net"
+- "os"
+- "runtime"
+- "testing"
+-)
+-
+-type testMulticastConn interface {
+- testUnicastConn
+- MulticastTTL() (int, error)
+- SetMulticastTTL(ttl int) error
+- MulticastLoopback() (bool, error)
+- SetMulticastLoopback(bool) error
+- JoinGroup(*net.Interface, net.Addr) error
+- LeaveGroup(*net.Interface, net.Addr) error
+-}
+-
+-type multicastSockoptTest struct {
+- tos int
+- ttl int
+- mcttl int
+- mcloop bool
+- gaddr net.IP
+-}
+-
+-var multicastSockoptTests = []multicastSockoptTest{
+- {DiffServCS0 | NotECNTransport, 127, 128, false, net.IPv4(224, 0, 0, 249)}, // see RFC 4727
+- {DiffServAF11 | NotECNTransport, 255, 254, true, net.IPv4(224, 0, 0, 250)}, // see RFC 4727
+-}
+-
+-func TestUDPMulticastSockopt(t *testing.T) {
+- if testing.Short() || !*testExternal {
+- t.Skip("to avoid external network")
+- }
+-
+- for _, tt := range multicastSockoptTests {
+- c, err := net.ListenPacket("udp4", "0.0.0.0:0")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- p := ipv4.NewPacketConn(c)
+- testMulticastSockopt(t, tt, p, &net.UDPAddr{IP: tt.gaddr})
+- }
+-}
+-
+-func TestIPMulticastSockopt(t *testing.T) {
+- if testing.Short() || !*testExternal {
+- t.Skip("to avoid external network")
+- }
+- if os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+-
+- for _, tt := range multicastSockoptTests {
+- c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- r, _ := ipv4.NewRawConn(c)
+- testMulticastSockopt(t, tt, r, &net.IPAddr{IP: tt.gaddr})
+- }
+-}
+-
+-func testMulticastSockopt(t *testing.T, tt multicastSockoptTest, c testMulticastConn, gaddr net.Addr) {
+- switch runtime.GOOS {
+- case "windows":
+- // IP_TOS option is supported on Windows 8 and beyond.
+- t.Logf("skipping IP_TOS test on %q", runtime.GOOS)
+- default:
+- if err := c.SetTOS(tt.tos); err != nil {
+- t.Fatalf("ipv4.PacketConn.SetTOS failed: %v", err)
+- }
+- if v, err := c.TOS(); err != nil {
+- t.Fatalf("ipv4.PacketConn.TOS failed: %v", err)
+- } else if v != tt.tos {
+- t.Fatalf("Got unexpected TOS value %v; expected %v", v, tt.tos)
+- }
+- }
+-
+- if err := c.SetTTL(tt.ttl); err != nil {
+- t.Fatalf("ipv4.PacketConn.SetTTL failed: %v", err)
+- }
+- if v, err := c.TTL(); err != nil {
+- t.Fatalf("ipv4.PacketConn.TTL failed: %v", err)
+- } else if v != tt.ttl {
+- t.Fatalf("Got unexpected TTL value %v; expected %v", v, tt.ttl)
+- }
+-
+- if err := c.SetMulticastTTL(tt.mcttl); err != nil {
+- t.Fatalf("ipv4.PacketConn.SetMulticastTTL failed: %v", err)
+- }
+- if v, err := c.MulticastTTL(); err != nil {
+- t.Fatalf("ipv4.PacketConn.MulticastTTL failed: %v", err)
+- } else if v != tt.mcttl {
+- t.Fatalf("Got unexpected MulticastTTL value %v; expected %v", v, tt.mcttl)
+- }
+-
+- if err := c.SetMulticastLoopback(tt.mcloop); err != nil {
+- t.Fatalf("ipv4.PacketConn.SetMulticastLoopback failed: %v", err)
+- }
+- if v, err := c.MulticastLoopback(); err != nil {
+- t.Fatalf("ipv4.PacketConn.MulticastLoopback failed: %v", err)
+- } else if v != tt.mcloop {
+- t.Fatalf("Got unexpected MulticastLoopback value %v; expected %v", v, tt.mcloop)
+- }
+-
+- if err := c.JoinGroup(nil, gaddr); err != nil {
+- t.Fatalf("ipv4.PacketConn.JoinGroup(%v) failed: %v", gaddr, err)
+- }
+- if err := c.LeaveGroup(nil, gaddr); err != nil {
+- t.Fatalf("ipv4.PacketConn.LeaveGroup(%v) failed: %v", gaddr, err)
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/multicast_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/multicast_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/multicast_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/multicast_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,168 +0,0 @@
+-// Copyright 2012 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 darwin freebsd linux netbsd openbsd
+-
+-package ipv4_test
+-
+-import (
+- "code.google.com/p/go.net/ipv4"
+- "net"
+- "os"
+- "testing"
+-)
+-
+-func TestReadWriteMulticastIPPayloadUDP(t *testing.T) {
+- if testing.Short() || !*testExternal {
+- t.Skip("to avoid external network")
+- }
+-
+- c, err := net.ListenPacket("udp4", "224.0.0.0:1024") // see RFC 4727
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- ifi := loopbackInterface()
+- if ifi == nil {
+- t.Skip("an appropriate interface not found")
+- }
+- dst, err := net.ResolveUDPAddr("udp4", "224.0.0.254:1024") // see RFC 4727
+- if err != nil {
+- t.Fatalf("net.ResolveUDPAddr failed: %v", err)
+- }
+-
+- p := ipv4.NewPacketConn(c)
+- if err := p.JoinGroup(ifi, dst); err != nil {
+- t.Fatalf("ipv4.PacketConn.JoinGroup on %v failed: %v", ifi, err)
+- }
+- if err := p.SetMulticastInterface(ifi); err != nil {
+- t.Fatalf("ipv4.PacketConn.SetMulticastInterface failed: %v", err)
+- }
+- if err := p.SetMulticastLoopback(true); err != nil {
+- t.Fatalf("ipv4.PacketConn.SetMulticastLoopback failed: %v", err)
+- }
+- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
+- for i, toggle := range []bool{true, false, true} {
+- if err := p.SetControlMessage(cf, toggle); err != nil {
+- t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
+- }
+- writeThenReadPayload(t, i, p, []byte("HELLO-R-U-THERE"), dst)
+- }
+-}
+-
+-func TestReadWriteMulticastIPPayloadICMP(t *testing.T) {
+- if testing.Short() || !*testExternal {
+- t.Skip("to avoid external network")
+- }
+- if os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+-
+- c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- ifi := loopbackInterface()
+- if ifi == nil {
+- t.Skip("an appropriate interface not found")
+- }
+- dst, err := net.ResolveIPAddr("ip4", "224.0.0.254") // see RFC 4727
+- if err != nil {
+- t.Fatalf("net.ResolveIPAddr failed: %v", err)
+- }
+-
+- p := ipv4.NewPacketConn(c)
+- if err := p.JoinGroup(ifi, dst); err != nil {
+- t.Fatalf("ipv4.PacketConn.JoinGroup on %v failed: %v", ifi, err)
+- }
+- if err := p.SetMulticastInterface(ifi); err != nil {
+- t.Fatalf("ipv4.PacketConn.SetMulticastInterface failed: %v", err)
+- }
+- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
+- for i, toggle := range []bool{true, false, true} {
+- wb, err := (&icmpMessage{
+- Type: ipv4.ICMPTypeEcho, Code: 0,
+- Body: &icmpEcho{
+- ID: os.Getpid() & 0xffff, Seq: i + 1,
+- Data: []byte("HELLO-R-U-THERE"),
+- },
+- }).Marshal()
+- if err != nil {
+- t.Fatalf("icmpMessage.Marshal failed: %v", err)
+- }
+- if err := p.SetControlMessage(cf, toggle); err != nil {
+- t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
+- }
+- rb := writeThenReadPayload(t, i, p, wb, dst)
+- m, err := parseICMPMessage(rb)
+- if err != nil {
+- t.Fatalf("parseICMPMessage failed: %v", err)
+- }
+- if m.Type != ipv4.ICMPTypeEchoReply || m.Code != 0 {
+- t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
+- }
+- }
+-}
+-
+-func TestReadWriteMulticastIPDatagram(t *testing.T) {
+- if testing.Short() || !*testExternal {
+- t.Skip("to avoid external network")
+- }
+- if os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+-
+- c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- ifi := loopbackInterface()
+- if ifi == nil {
+- t.Skip("an appropriate interface not found")
+- }
+- dst, err := net.ResolveIPAddr("ip4", "224.0.0.254") // see RFC 4727
+- if err != nil {
+- t.Fatalf("ResolveIPAddr failed: %v", err)
+- }
+-
+- r, err := ipv4.NewRawConn(c)
+- if err != nil {
+- t.Fatalf("ipv4.NewRawConn failed: %v", err)
+- }
+- if err := r.JoinGroup(ifi, dst); err != nil {
+- t.Fatalf("ipv4.RawConn.JoinGroup on %v failed: %v", ifi, err)
+- }
+- if err := r.SetMulticastInterface(ifi); err != nil {
+- t.Fatalf("ipv4.PacketConn.SetMulticastInterface failed: %v", err)
+- }
+- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
+- for i, toggle := range []bool{true, false, true} {
+- wb, err := (&icmpMessage{
+- Type: ipv4.ICMPTypeEcho, Code: 0,
+- Body: &icmpEcho{
+- ID: os.Getpid() & 0xffff, Seq: i + 1,
+- Data: []byte("HELLO-R-U-THERE"),
+- },
+- }).Marshal()
+- if err != nil {
+- t.Fatalf("icmpMessage.Marshal failed: %v", err)
+- }
+- if err := r.SetControlMessage(cf, toggle); err != nil {
+- t.Fatalf("ipv4.RawConn.SetControlMessage failed: %v", err)
+- }
+- rb := writeThenReadDatagram(t, i, r, wb, nil, dst)
+- m, err := parseICMPMessage(rb)
+- if err != nil {
+- t.Fatalf("parseICMPMessage failed: %v", err)
+- }
+- if m.Type != ipv4.ICMPTypeEchoReply || m.Code != 0 {
+- t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/packet.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/packet.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/packet.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/packet.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,97 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import (
+- "net"
+- "syscall"
+-)
+-
+-// A packetHandler represents the IPv4 datagram handler.
+-type packetHandler struct {
+- c *net.IPConn
+- rawOpt
+-}
+-
+-func (c *packetHandler) ok() bool { return c != nil && c.c != nil }
+-
+-// ReadFrom reads an IPv4 datagram from the endpoint c, copying the
+-// datagram into b. It returns the received datagram as the IPv4
+-// header h, the payload p and the control message cm.
+-func (c *packetHandler) ReadFrom(b []byte) (h *Header, p []byte, cm *ControlMessage, err error) {
+- if !c.ok() {
+- return nil, nil, nil, syscall.EINVAL
+- }
+- oob := newControlMessage(&c.rawOpt)
+- n, oobn, _, src, err := c.c.ReadMsgIP(b, oob)
+- if err != nil {
+- return nil, nil, nil, err
+- }
+- var hs []byte
+- if hs, p, err = slicePacket(b[:n]); err != nil {
+- return nil, nil, nil, err
+- }
+- if h, err = ParseHeader(hs); err != nil {
+- return nil, nil, nil, err
+- }
+- if cm, err = parseControlMessage(oob[:oobn]); err != nil {
+- return nil, nil, nil, err
+- }
+- if src != nil && cm != nil {
+- cm.Src = src.IP
+- }
+- return
+-}
+-
+-func slicePacket(b []byte) (h, p []byte, err error) {
+- if len(b) < HeaderLen {
+- return nil, nil, errHeaderTooShort
+- }
+- hdrlen := int(b[0]&0x0f) << 2
+- return b[:hdrlen], b[hdrlen:], nil
+-}
+-
+-// WriteTo writes an IPv4 datagram through the endpoint c, copying the
+-// datagram from the IPv4 header h and the payload p. The control
+-// message cm allows the datagram path and the outgoing interface to be
+-// specified. Currently only Linux supports this. The cm may be nil
+-// if control of the outgoing datagram is not required.
+-//
+-// The IPv4 header h must contain appropriate fields that include:
+-//
+-// Version = ipv4.Version
+-// Len = <must be specified>
+-// TOS = <must be specified>
+-// TotalLen = <must be specified>
+-// ID = platform sets an appropriate value if ID is zero
+-// FragOff = <must be specified>
+-// TTL = <must be specified>
+-// Protocol = <must be specified>
+-// Checksum = platform sets an appropriate value if Checksum is zero
+-// Src = platform sets an appropriate value if Src is nil
+-// Dst = <must be specified>
+-// h.Options = optional
+-func (c *packetHandler) WriteTo(h *Header, p []byte, cm *ControlMessage) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- oob := marshalControlMessage(cm)
+- wh, err := h.Marshal()
+- if err != nil {
+- return err
+- }
+- dst := &net.IPAddr{}
+- if cm != nil {
+- if ip := cm.Dst.To4(); ip != nil {
+- dst.IP = ip
+- }
+- }
+- if dst.IP == nil {
+- dst.IP = h.Dst
+- }
+- wh = append(wh, p...)
+- _, _, err = c.c.WriteMsgIP(wh, oob, dst)
+- return err
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/payload.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/payload.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/payload.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/payload.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,81 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import (
+- "net"
+- "syscall"
+-)
+-
+-// A payloadHandler represents the IPv4 datagram payload handler.
+-type payloadHandler struct {
+- net.PacketConn
+- rawOpt
+-}
+-
+-func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil }
+-
+-// ReadFrom reads a payload of the received IPv4 datagram, from the
+-// endpoint c, copying the payload into b. It returns the number of
+-// bytes copied into b, the control message cm and the source address
+-// src of the received datagram.
+-func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
+- if !c.ok() {
+- return 0, nil, nil, syscall.EINVAL
+- }
+- oob := newControlMessage(&c.rawOpt)
+- var oobn int
+- switch c := c.PacketConn.(type) {
+- case *net.UDPConn:
+- if n, oobn, _, src, err = c.ReadMsgUDP(b, oob); err != nil {
+- return 0, nil, nil, err
+- }
+- case *net.IPConn:
+- nb := make([]byte, maxHeaderLen+len(b))
+- if n, oobn, _, src, err = c.ReadMsgIP(nb, oob); err != nil {
+- return 0, nil, nil, err
+- }
+- hdrlen := int(nb[0]&0x0f) << 2
+- copy(b, nb[hdrlen:])
+- n -= hdrlen
+- default:
+- return 0, nil, nil, errInvalidConnType
+- }
+- if cm, err = parseControlMessage(oob[:oobn]); err != nil {
+- return 0, nil, nil, err
+- }
+- if cm != nil {
+- cm.Src = netAddrToIP4(src)
+- }
+- return
+-}
+-
+-// WriteTo writes a payload of the IPv4 datagram, to the destination
+-// address dst through the endpoint c, copying the payload from b. It
+-// returns the number of bytes written. The control message cm allows
+-// the datagram path and the outgoing interface to be specified.
+-// Currently only Linux supports this. The cm may be nil if control
+-// of the outgoing datagram is not required.
+-func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
+- if !c.ok() {
+- return 0, syscall.EINVAL
+- }
+- oob := marshalControlMessage(cm)
+- if dst == nil {
+- return 0, errMissingAddress
+- }
+- switch c := c.PacketConn.(type) {
+- case *net.UDPConn:
+- n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr))
+- case *net.IPConn:
+- n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr))
+- default:
+- return 0, errInvalidConnType
+- }
+- if err != nil {
+- return 0, err
+- }
+- return
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/sockopt_bsd.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/sockopt_bsd.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/sockopt_bsd.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/sockopt_bsd.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,95 +0,0 @@
+-// Copyright 2012 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 darwin freebsd netbsd openbsd
+-
+-package ipv4
+-
+-import (
+- "net"
+- "os"
+- "syscall"
+-)
+-
+-func ipv4MulticastTTL(fd int) (int, error) {
+- v, err := syscall.GetsockoptByte(fd, ianaProtocolIP, syscall.IP_MULTICAST_TTL)
+- if err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return int(v), nil
+-}
+-
+-func setIPv4MulticastTTL(fd int, v int) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptByte(fd, ianaProtocolIP, syscall.IP_MULTICAST_TTL, byte(v)))
+-}
+-
+-func ipv4ReceiveDestinationAddress(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, syscall.IP_RECVDSTADDR)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv4ReceiveDestinationAddress(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, syscall.IP_RECVDSTADDR, boolint(v)))
+-}
+-
+-func ipv4ReceiveInterface(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, syscall.IP_RECVIF)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv4ReceiveInterface(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, syscall.IP_RECVIF, boolint(v)))
+-}
+-
+-func ipv4MulticastInterface(fd int) (*net.Interface, error) {
+- v, err := syscall.GetsockoptInet4Addr(fd, ianaProtocolIP, syscall.IP_MULTICAST_IF)
+- if err != nil {
+- return nil, os.NewSyscallError("getsockopt", err)
+- }
+- return netIP4ToInterface(net.IPv4(v[0], v[1], v[2], v[3]))
+-}
+-
+-func setIPv4MulticastInterface(fd int, ifi *net.Interface) error {
+- ip, err := netInterfaceToIP4(ifi)
+- if err != nil {
+- return os.NewSyscallError("setsockopt", err)
+- }
+- var v [4]byte
+- copy(v[:], ip.To4())
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInet4Addr(fd, ianaProtocolIP, syscall.IP_MULTICAST_IF, v))
+-}
+-
+-func ipv4MulticastLoopback(fd int) (bool, error) {
+- v, err := syscall.GetsockoptByte(fd, ianaProtocolIP, syscall.IP_MULTICAST_LOOP)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv4MulticastLoopback(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptByte(fd, ianaProtocolIP, syscall.IP_MULTICAST_LOOP, byte(boolint(v))))
+-}
+-
+-func joinIPv4Group(fd int, ifi *net.Interface, grp net.IP) error {
+- mreq := syscall.IPMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
+- if err := setSyscallIPMreq(&mreq, ifi); err != nil {
+- return err
+- }
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptIPMreq(fd, ianaProtocolIP, syscall.IP_ADD_MEMBERSHIP, &mreq))
+-}
+-
+-func leaveIPv4Group(fd int, ifi *net.Interface, grp net.IP) error {
+- mreq := syscall.IPMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
+- if err := setSyscallIPMreq(&mreq, ifi); err != nil {
+- return err
+- }
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptIPMreq(fd, ianaProtocolIP, syscall.IP_DROP_MEMBERSHIP, &mreq))
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/sockopt_freebsd.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/sockopt_freebsd.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/sockopt_freebsd.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/sockopt_freebsd.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,22 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import (
+- "os"
+- "syscall"
+-)
+-
+-func ipv4SendSourceAddress(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, syscall.IP_SENDSRCADDR)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv4SendSourceAddress(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, syscall.IP_SENDSRCADDR, boolint(v)))
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/sockopt_linux.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/sockopt_linux.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/sockopt_linux.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/sockopt_linux.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,94 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import (
+- "net"
+- "os"
+- "syscall"
+-)
+-
+-func ipv4ReceiveTOS(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, syscall.IP_RECVTOS)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv4ReceiveTOS(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, syscall.IP_RECVTOS, boolint(v)))
+-}
+-
+-func ipv4MulticastTTL(fd int) (int, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, syscall.IP_MULTICAST_TTL)
+- if err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return v, nil
+-}
+-
+-func setIPv4MulticastTTL(fd int, v int) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, syscall.IP_MULTICAST_TTL, v))
+-}
+-
+-func ipv4PacketInfo(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, syscall.IP_PKTINFO)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv4PacketInfo(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, syscall.IP_PKTINFO, boolint(v)))
+-}
+-
+-func ipv4MulticastInterface(fd int) (*net.Interface, error) {
+- mreqn, err := syscall.GetsockoptIPMreqn(fd, ianaProtocolIP, syscall.IP_MULTICAST_IF)
+- if err != nil {
+- return nil, os.NewSyscallError("getsockopt", err)
+- }
+- if int(mreqn.Ifindex) == 0 {
+- return nil, nil
+- }
+- return net.InterfaceByIndex(int(mreqn.Ifindex))
+-}
+-
+-func setIPv4MulticastInterface(fd int, ifi *net.Interface) error {
+- mreqn := syscall.IPMreqn{}
+- if ifi != nil {
+- mreqn.Ifindex = int32(ifi.Index)
+- }
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptIPMreqn(fd, ianaProtocolIP, syscall.IP_MULTICAST_IF, &mreqn))
+-}
+-
+-func ipv4MulticastLoopback(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, syscall.IP_MULTICAST_LOOP)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv4MulticastLoopback(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, syscall.IP_MULTICAST_LOOP, boolint(v)))
+-}
+-
+-func joinIPv4Group(fd int, ifi *net.Interface, grp net.IP) error {
+- mreqn := syscall.IPMreqn{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
+- if ifi != nil {
+- mreqn.Ifindex = int32(ifi.Index)
+- }
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptIPMreqn(fd, ianaProtocolIP, syscall.IP_ADD_MEMBERSHIP, &mreqn))
+-}
+-
+-func leaveIPv4Group(fd int, ifi *net.Interface, grp net.IP) error {
+- mreqn := syscall.IPMreqn{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
+- if ifi != nil {
+- mreqn.Ifindex = int32(ifi.Index)
+- }
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptIPMreqn(fd, ianaProtocolIP, syscall.IP_DROP_MEMBERSHIP, &mreqn))
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/sockopt_plan9.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/sockopt_plan9.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/sockopt_plan9.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/sockopt_plan9.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,17 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import "syscall"
+-
+-func ipv4HeaderPrepend(fd int) (bool, error) {
+- // TODO(mikio): Implement this
+- return false, syscall.EPLAN9
+-}
+-
+-func setIPv4HeaderPrepend(fd int, v bool) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/sockopt_unix.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/sockopt_unix.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/sockopt_unix.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/sockopt_unix.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,60 +0,0 @@
+-// Copyright 2012 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 darwin freebsd linux netbsd openbsd
+-
+-package ipv4
+-
+-import (
+- "os"
+- "syscall"
+-)
+-
+-func ipv4TOS(fd int) (int, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, syscall.IP_TOS)
+- if err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return v, nil
+-}
+-
+-func setIPv4TOS(fd int, v int) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, syscall.IP_TOS, v))
+-}
+-
+-func ipv4TTL(fd int) (int, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, syscall.IP_TTL)
+- if err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return v, nil
+-}
+-
+-func setIPv4TTL(fd int, v int) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, syscall.IP_TTL, v))
+-}
+-
+-func ipv4ReceiveTTL(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, syscall.IP_RECVTTL)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv4ReceiveTTL(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, syscall.IP_RECVTTL, boolint(v)))
+-}
+-
+-func ipv4HeaderPrepend(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIP, syscall.IP_HDRINCL)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv4HeaderPrepend(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIP, syscall.IP_HDRINCL, boolint(v)))
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/sockopt_windows.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/sockopt_windows.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/sockopt_windows.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/sockopt_windows.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,146 +0,0 @@
+-// Copyright 2012 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 ipv4
+-
+-import (
+- "net"
+- "os"
+- "syscall"
+- "unsafe"
+-)
+-
+-// Please refer to the online manual;
+-// http://msdn.microsoft.com/en-us/library/windows/desktop/ms738586(v=vs.85).aspx
+-
+-func ipv4TOS(fd syscall.Handle) (int, error) {
+- var v int32
+- l := int32(4)
+- if err := syscall.Getsockopt(fd, ianaProtocolIP, syscall.IP_TOS, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return int(v), nil
+-}
+-
+-func setIPv4TOS(fd syscall.Handle, v int) error {
+- vv := int32(v)
+- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIP, syscall.IP_TOS, (*byte)(unsafe.Pointer(&vv)), 4))
+-}
+-
+-func ipv4TTL(fd syscall.Handle) (int, error) {
+- var v int32
+- l := int32(4)
+- if err := syscall.Getsockopt(fd, ianaProtocolIP, syscall.IP_TTL, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return int(v), nil
+-}
+-
+-func setIPv4TTL(fd syscall.Handle, v int) error {
+- vv := int32(v)
+- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIP, syscall.IP_TTL, (*byte)(unsafe.Pointer(&vv)), 4))
+-}
+-
+-func ipv4MulticastTTL(fd syscall.Handle) (int, error) {
+- var v int32
+- l := int32(4)
+- if err := syscall.Getsockopt(fd, ianaProtocolIP, syscall.IP_MULTICAST_TTL, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return int(v), nil
+-}
+-
+-func setIPv4MulticastTTL(fd syscall.Handle, v int) error {
+- vv := int32(v)
+- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIP, syscall.IP_MULTICAST_TTL, (*byte)(unsafe.Pointer(&vv)), 4))
+-}
+-
+-func ipv4ReceiveTTL(fd syscall.Handle) (bool, error) {
+- // NOTE: Not supported yet on any Windows
+- return false, syscall.EWINDOWS
+-}
+-
+-func setIPv4ReceiveTTL(fd syscall.Handle, v bool) error {
+- // NOTE: Not supported yet on any Windows
+- return syscall.EWINDOWS
+-}
+-
+-func ipv4ReceiveDestinationAddress(fd syscall.Handle) (bool, error) {
+- // TODO(mikio): Implement this for XP and beyond
+- return false, syscall.EWINDOWS
+-}
+-
+-func setIPv4ReceiveDestinationAddress(fd syscall.Handle, v bool) error {
+- // TODO(mikio): Implement this for XP and beyond
+- return syscall.EWINDOWS
+-}
+-
+-func ipv4HeaderPrepend(fd syscall.Handle) (bool, error) {
+- // TODO(mikio): Implement this for XP and beyond
+- return false, syscall.EWINDOWS
+-}
+-
+-func setIPv4HeaderPrepend(fd syscall.Handle, v bool) error {
+- // TODO(mikio): Implement this for XP and beyond
+- return syscall.EWINDOWS
+-}
+-
+-func ipv4ReceiveInterface(fd syscall.Handle) (bool, error) {
+- // TODO(mikio): Implement this for Vista and beyond
+- return false, syscall.EWINDOWS
+-}
+-
+-func setIPv4ReceiveInterface(fd syscall.Handle, v bool) error {
+- // TODO(mikio): Implement this for Vista and beyond
+- return syscall.EWINDOWS
+-}
+-
+-func ipv4MulticastInterface(fd syscall.Handle) (*net.Interface, error) {
+- var v [4]byte
+- l := int32(4)
+- if err := syscall.Getsockopt(fd, ianaProtocolIP, syscall.IP_MULTICAST_IF, (*byte)(unsafe.Pointer(&v[0])), &l); err != nil {
+- return nil, os.NewSyscallError("getsockopt", err)
+- }
+- return netIP4ToInterface(net.IPv4(v[0], v[1], v[2], v[3]))
+-}
+-
+-func setIPv4MulticastInterface(fd syscall.Handle, ifi *net.Interface) error {
+- ip, err := netInterfaceToIP4(ifi)
+- if err != nil {
+- return os.NewSyscallError("setsockopt", err)
+- }
+- var v [4]byte
+- copy(v[:], ip.To4())
+- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIP, syscall.IP_MULTICAST_IF, (*byte)(unsafe.Pointer(&v[0])), 4))
+-}
+-
+-func ipv4MulticastLoopback(fd syscall.Handle) (bool, error) {
+- var v int32
+- l := int32(4)
+- if err := syscall.Getsockopt(fd, ianaProtocolIP, syscall.IP_MULTICAST_LOOP, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv4MulticastLoopback(fd syscall.Handle, v bool) error {
+- vv := int32(boolint(v))
+- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIP, syscall.IP_MULTICAST_LOOP, (*byte)(unsafe.Pointer(&vv)), 4))
+-}
+-
+-func joinIPv4Group(fd syscall.Handle, ifi *net.Interface, grp net.IP) error {
+- mreq := syscall.IPMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
+- if err := setSyscallIPMreq(&mreq, ifi); err != nil {
+- return err
+- }
+- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIP, syscall.IP_ADD_MEMBERSHIP, (*byte)(unsafe.Pointer(&mreq)), int32(unsafe.Sizeof(mreq))))
+-}
+-
+-func leaveIPv4Group(fd syscall.Handle, ifi *net.Interface, grp net.IP) error {
+- mreq := syscall.IPMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}}
+- if err := setSyscallIPMreq(&mreq, ifi); err != nil {
+- return err
+- }
+- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIP, syscall.IP_DROP_MEMBERSHIP, (*byte)(unsafe.Pointer(&mreq)), int32(unsafe.Sizeof(mreq))))
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/unicastsockopt_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/unicastsockopt_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/unicastsockopt_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/unicastsockopt_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,145 +0,0 @@
+-// Copyright 2012 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 darwin freebsd linux netbsd openbsd windows
+-
+-package ipv4_test
+-
+-import (
+- "code.google.com/p/go.net/ipv4"
+- "errors"
+- "net"
+- "os"
+- "runtime"
+- "testing"
+-)
+-
+-type testUnicastConn interface {
+- TOS() (int, error)
+- SetTOS(int) error
+- TTL() (int, error)
+- SetTTL(int) error
+-}
+-
+-type unicastSockoptTest struct {
+- tos int
+- ttl int
+-}
+-
+-var unicastSockoptTests = []unicastSockoptTest{
+- {DiffServCS0 | NotECNTransport, 127},
+- {DiffServAF11 | NotECNTransport, 255},
+-}
+-
+-func TestTCPUnicastSockopt(t *testing.T) {
+- for _, tt := range unicastSockoptTests {
+- listener := make(chan net.Listener)
+- go tcpListener(t, "127.0.0.1:0", listener)
+- ln := <-listener
+- if ln == nil {
+- return
+- }
+- defer ln.Close()
+- c, err := net.Dial("tcp4", ln.Addr().String())
+- if err != nil {
+- t.Errorf("net.Dial failed: %v", err)
+- return
+- }
+- defer c.Close()
+-
+- cc := ipv4.NewConn(c)
+- if err := testUnicastSockopt(t, tt, cc); err != nil {
+- break
+- }
+- }
+-}
+-
+-func tcpListener(t *testing.T, addr string, listener chan<- net.Listener) {
+- ln, err := net.Listen("tcp4", addr)
+- if err != nil {
+- t.Errorf("net.Listen failed: %v", err)
+- listener <- nil
+- return
+- }
+- listener <- ln
+- c, err := ln.Accept()
+- if err != nil {
+- return
+- }
+- c.Close()
+-}
+-
+-func TestUDPUnicastSockopt(t *testing.T) {
+- for _, tt := range unicastSockoptTests {
+- c, err := net.ListenPacket("udp4", "127.0.0.1:0")
+- if err != nil {
+- t.Errorf("net.ListenPacket failed: %v", err)
+- return
+- }
+- defer c.Close()
+-
+- p := ipv4.NewPacketConn(c)
+- if err := testUnicastSockopt(t, tt, p); err != nil {
+- break
+- }
+- }
+-}
+-
+-func TestIPUnicastSockopt(t *testing.T) {
+- if os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+-
+- for _, tt := range unicastSockoptTests {
+- c, err := net.ListenPacket("ip4:icmp", "127.0.0.1")
+- if err != nil {
+- t.Errorf("net.ListenPacket failed: %v", err)
+- return
+- }
+- defer c.Close()
+-
+- r, err := ipv4.NewRawConn(c)
+- if err != nil {
+- t.Errorf("ipv4.NewRawConn failed: %v", err)
+- return
+- }
+- if err := testUnicastSockopt(t, tt, r); err != nil {
+- break
+- }
+- }
+-}
+-
+-func testUnicastSockopt(t *testing.T, tt unicastSockoptTest, c testUnicastConn) error {
+- switch runtime.GOOS {
+- case "windows":
+- // IP_TOS option is supported on Windows 8 and beyond.
+- t.Logf("skipping IP_TOS test on %q", runtime.GOOS)
+- default:
+- if err := c.SetTOS(tt.tos); err != nil {
+- t.Errorf("ipv4.Conn.SetTOS failed: %v", err)
+- return err
+- }
+- if v, err := c.TOS(); err != nil {
+- t.Errorf("ipv4.Conn.TOS failed: %v", err)
+- return err
+- } else if v != tt.tos {
+- t.Errorf("Got unexpected TOS value %v; expected %v", v, tt.tos)
+- return errors.New("Got unexpected TOS value")
+- }
+- }
+-
+- if err := c.SetTTL(tt.ttl); err != nil {
+- t.Errorf("ipv4.Conn.SetTTL failed: %v", err)
+- return err
+- }
+- if v, err := c.TTL(); err != nil {
+- t.Errorf("ipv4.Conn.TTL failed: %v", err)
+- return err
+- } else if v != tt.ttl {
+- t.Errorf("Got unexpected TTL value %v; expected %v", v, tt.ttl)
+- return errors.New("Got unexpected TTL value")
+- }
+-
+- return nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/unicast_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/unicast_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv4/unicast_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv4/unicast_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,192 +0,0 @@
+-// Copyright 2012 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 darwin freebsd linux netbsd openbsd
+-
+-package ipv4_test
+-
+-import (
+- "code.google.com/p/go.net/ipv4"
+- "net"
+- "os"
+- "testing"
+-)
+-
+-func benchmarkUDPListener() (net.PacketConn, net.Addr, error) {
+- c, err := net.ListenPacket("udp4", "127.0.0.1:0")
+- if err != nil {
+- return nil, nil, err
+- }
+- dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String())
+- if err != nil {
+- c.Close()
+- return nil, nil, err
+- }
+- return c, dst, nil
+-}
+-
+-func BenchmarkReadWriteNetUDP(b *testing.B) {
+- c, dst, err := benchmarkUDPListener()
+- if err != nil {
+- b.Fatalf("benchmarkUDPListener failed: %v", err)
+- }
+- defer c.Close()
+-
+- wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128)
+- b.ResetTimer()
+- for i := 0; i < b.N; i++ {
+- benchmarkReadWriteNetUDP(b, c, wb, rb, dst)
+- }
+-}
+-
+-func benchmarkReadWriteNetUDP(b *testing.B, c net.PacketConn, wb, rb []byte, dst net.Addr) {
+- if _, err := c.WriteTo(wb, dst); err != nil {
+- b.Fatalf("net.PacketConn.WriteTo failed: %v", err)
+- }
+- if _, _, err := c.ReadFrom(rb); err != nil {
+- b.Fatalf("net.PacketConn.ReadFrom failed: %v", err)
+- }
+-}
+-
+-func BenchmarkReadWriteIPv4UDP(b *testing.B) {
+- c, dst, err := benchmarkUDPListener()
+- if err != nil {
+- b.Fatalf("benchmarkUDPListener failed: %v", err)
+- }
+- defer c.Close()
+-
+- p := ipv4.NewPacketConn(c)
+- cf := ipv4.FlagTTL | ipv4.FlagInterface
+- if err := p.SetControlMessage(cf, true); err != nil {
+- b.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
+- }
+- ifi := loopbackInterface()
+-
+- wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128)
+- b.ResetTimer()
+- for i := 0; i < b.N; i++ {
+- benchmarkReadWriteIPv4UDP(b, p, wb, rb, dst, ifi)
+- }
+-}
+-
+-func benchmarkReadWriteIPv4UDP(b *testing.B, p *ipv4.PacketConn, wb, rb []byte, dst net.Addr, ifi *net.Interface) {
+- cm := ipv4.ControlMessage{TTL: 1}
+- if ifi != nil {
+- cm.IfIndex = ifi.Index
+- }
+- if _, err := p.WriteTo(wb, &cm, dst); err != nil {
+- b.Fatalf("ipv4.PacketConn.WriteTo failed: %v", err)
+- }
+- if _, _, _, err := p.ReadFrom(rb); err != nil {
+- b.Fatalf("ipv4.PacketConn.ReadFrom failed: %v", err)
+- }
+-}
+-
+-func TestReadWriteUnicastIPPayloadUDP(t *testing.T) {
+- c, err := net.ListenPacket("udp4", "127.0.0.1:0")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String())
+- if err != nil {
+- t.Fatalf("net.ResolveUDPAddr failed: %v", err)
+- }
+- p := ipv4.NewPacketConn(c)
+- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
+- for i, toggle := range []bool{true, false, true} {
+- if err := p.SetControlMessage(cf, toggle); err != nil {
+- t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
+- }
+- writeThenReadPayload(t, i, p, []byte("HELLO-R-U-THERE"), dst)
+- }
+-}
+-
+-func TestReadWriteUnicastIPPayloadICMP(t *testing.T) {
+- if os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+-
+- c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- dst, err := net.ResolveIPAddr("ip4", "127.0.0.1")
+- if err != nil {
+- t.Fatalf("ResolveIPAddr failed: %v", err)
+- }
+- p := ipv4.NewPacketConn(c)
+- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
+- for i, toggle := range []bool{true, false, true} {
+- wb, err := (&icmpMessage{
+- Type: ipv4.ICMPTypeEcho, Code: 0,
+- Body: &icmpEcho{
+- ID: os.Getpid() & 0xffff, Seq: i + 1,
+- Data: []byte("HELLO-R-U-THERE"),
+- },
+- }).Marshal()
+- if err != nil {
+- t.Fatalf("icmpMessage.Marshal failed: %v", err)
+- }
+- if err := p.SetControlMessage(cf, toggle); err != nil {
+- t.Fatalf("ipv4.PacketConn.SetControlMessage failed: %v", err)
+- }
+- rb := writeThenReadPayload(t, i, p, wb, dst)
+- m, err := parseICMPMessage(rb)
+- if err != nil {
+- t.Fatalf("parseICMPMessage failed: %v", err)
+- }
+- if m.Type != ipv4.ICMPTypeEchoReply || m.Code != 0 {
+- t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
+- }
+- }
+-}
+-
+-func TestReadWriteUnicastIPDatagram(t *testing.T) {
+- if os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+-
+- c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- dst, err := net.ResolveIPAddr("ip4", "127.0.0.1")
+- if err != nil {
+- t.Fatalf("ResolveIPAddr failed: %v", err)
+- }
+- r, err := ipv4.NewRawConn(c)
+- if err != nil {
+- t.Fatalf("ipv4.NewRawConn failed: %v", err)
+- }
+- cf := ipv4.FlagTTL | ipv4.FlagDst | ipv4.FlagInterface
+- for i, toggle := range []bool{true, false, true} {
+- wb, err := (&icmpMessage{
+- Type: ipv4.ICMPTypeEcho, Code: 0,
+- Body: &icmpEcho{
+- ID: os.Getpid() & 0xffff, Seq: i + 1,
+- Data: []byte("HELLO-R-U-THERE"),
+- },
+- }).Marshal()
+- if err != nil {
+- t.Fatalf("icmpMessage.Marshal failed: %v", err)
+- }
+- if err := r.SetControlMessage(cf, toggle); err != nil {
+- t.Fatalf("ipv4.RawConn.SetControlMessage failed: %v", err)
+- }
+- rb := writeThenReadDatagram(t, i, r, wb, nil, dst)
+- m, err := parseICMPMessage(rb)
+- if err != nil {
+- t.Fatalf("parseICMPMessage failed: %v", err)
+- }
+- if m.Type != ipv4.ICMPTypeEchoReply || m.Code != 0 {
+- t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv4.ICMPTypeEchoReply, 0)
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,84 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import (
+- "errors"
+- "fmt"
+- "net"
+- "sync"
+-)
+-
+-var (
+- errNotSupported = errors.New("not supported")
+- errMissingAddress = errors.New("missing address")
+- errInvalidConnType = errors.New("invalid conn type")
+- errNoSuchInterface = errors.New("no such interface")
+-)
+-
+-// References:
+-//
+-// RFC 2292 Advanced Sockets API for IPv6
+-// http://tools.ietf.org/html/rfc2292
+-// RFC 2460 Internet Protocol, Version 6 (IPv6) Specification
+-// http://tools.ietf.org/html/rfc2460
+-// RFC 3493 Basic Socket Interface Extensions for IPv6
+-// http://tools.ietf.org/html/rfc3493.html
+-// RFC 3542 Advanced Sockets Application Program Interface (API) for IPv6
+-// http://tools.ietf.org/html/rfc3542
+-//
+-// Note that RFC 3542 obsoltes RFC 2292 but OS X Snow Leopard and the
+-// former still support RFC 2292 only. Please be aware that almost
+-// all protocol implementations prohibit using a combination of RFC
+-// 2292 and RFC 3542 for some practical reasons.
+-
+-type rawOpt struct {
+- sync.Mutex
+- cflags ControlFlags
+-}
+-
+-func (c *rawOpt) set(f ControlFlags) { c.cflags |= f }
+-func (c *rawOpt) clear(f ControlFlags) { c.cflags &^= f }
+-func (c *rawOpt) isset(f ControlFlags) bool { return c.cflags&f != 0 }
+-
+-// A ControlFlags reprensents per packet basis IP-level socket option
+-// control flags.
+-type ControlFlags uint
+-
+-const (
+- FlagTrafficClass ControlFlags = 1 << iota // pass the traffic class on the received packet
+- FlagHopLimit // pass the hop limit on the received packet
+- FlagSrc // pass the source address on the received packet
+- FlagDst // pass the destination address on the received packet
+- FlagInterface // pass the interface index on the received packet
+- FlagPathMTU // pass the path MTU on the received packet path
+-)
+-
+-// A ControlMessage represents per packet basis IP-level socket
+-// options.
+-type ControlMessage struct {
+- // Receiving socket options: SetControlMessage allows to
+- // receive the options from the protocol stack using ReadFrom
+- // method of PacketConn.
+- //
+- // Specifying socket options: ControlMessage for WriteTo
+- // method of PacketConn allows to send the options to the
+- // protocol stack.
+- //
+- TrafficClass int // traffic class, must be 1 <= value <= 255 when specifying
+- HopLimit int // hop limit, must be 1 <= value <= 255 when specifying
+- Src net.IP // source address, specifying only
+- Dst net.IP // destination address, receiving only
+- IfIndex int // interface index, must be 1 <= value when specifying
+- NextHop net.IP // next hop address, specifying only
+- MTU int // path MTU, receiving only
+-}
+-
+-func (cm *ControlMessage) String() string {
+- if cm == nil {
+- return "<nil>"
+- }
+- return fmt.Sprintf("tclass: %#x, hoplim: %v, src: %v, dst: %v, ifindex: %v, nexthop: %v, mtu: %v", cm.TrafficClass, cm.HopLimit, cm.Src, cm.Dst, cm.IfIndex, cm.NextHop, cm.MTU)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control_rfc2292_darwin.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control_rfc2292_darwin.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control_rfc2292_darwin.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control_rfc2292_darwin.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,151 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import (
+- "net"
+- "os"
+- "syscall"
+- "unsafe"
+-)
+-
+-const pktinfo = FlagDst | FlagInterface
+-
+-func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
+- opt.Lock()
+- defer opt.Unlock()
+- if cf&FlagHopLimit != 0 {
+- if err := setIPv6ReceiveHopLimit(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(FlagHopLimit)
+- } else {
+- opt.clear(FlagHopLimit)
+- }
+- }
+- if cf&pktinfo != 0 {
+- if err := setIPv6ReceivePacketInfo(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(cf & pktinfo)
+- } else {
+- opt.clear(cf & pktinfo)
+- }
+- }
+- return nil
+-}
+-
+-func newControlMessage(opt *rawOpt) (oob []byte) {
+- opt.Lock()
+- defer opt.Unlock()
+- l, off := 0, 0
+- if opt.isset(FlagHopLimit) {
+- l += syscall.CmsgSpace(4)
+- }
+- if opt.isset(pktinfo) {
+- l += syscall.CmsgSpace(syscall.SizeofInet6Pktinfo)
+- }
+- if l > 0 {
+- oob = make([]byte, l)
+- if opt.isset(FlagHopLimit) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_2292HOPLIMIT
+- m.SetLen(syscall.CmsgLen(4))
+- off += syscall.CmsgSpace(4)
+- }
+- if opt.isset(pktinfo) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_2292PKTINFO
+- m.SetLen(syscall.CmsgLen(syscall.SizeofInet6Pktinfo))
+- off += syscall.CmsgSpace(syscall.SizeofInet6Pktinfo)
+- }
+- }
+- return
+-}
+-
+-func parseControlMessage(b []byte) (*ControlMessage, error) {
+- if len(b) == 0 {
+- return nil, nil
+- }
+- cmsgs, err := syscall.ParseSocketControlMessage(b)
+- if err != nil {
+- return nil, os.NewSyscallError("parse socket control message", err)
+- }
+- cm := &ControlMessage{}
+- for _, m := range cmsgs {
+- if m.Header.Level != ianaProtocolIPv6 {
+- continue
+- }
+- switch m.Header.Type {
+- case syscall.IPV6_2292HOPLIMIT:
+- cm.HopLimit = int(*(*byte)(unsafe.Pointer(&m.Data[:1][0])))
+- case syscall.IPV6_2292PKTINFO:
+- pi := (*syscall.Inet6Pktinfo)(unsafe.Pointer(&m.Data[0]))
+- cm.IfIndex = int(pi.Ifindex)
+- cm.Dst = pi.Addr[:]
+- }
+- }
+- return cm, nil
+-}
+-
+-func marshalControlMessage(cm *ControlMessage) (oob []byte) {
+- if cm == nil {
+- return
+- }
+- l, off := 0, 0
+- if cm.HopLimit > 0 {
+- l += syscall.CmsgSpace(4)
+- }
+- pion := false
+- if cm.Src.To4() == nil && cm.Src.To16() != nil || cm.IfIndex != 0 {
+- pion = true
+- l += syscall.CmsgSpace(syscall.SizeofInet6Pktinfo)
+- }
+- if len(cm.NextHop) == net.IPv6len {
+- l += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
+- }
+- if l > 0 {
+- oob = make([]byte, l)
+- if cm.HopLimit > 0 {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_2292HOPLIMIT
+- m.SetLen(syscall.CmsgLen(4))
+- data := oob[off+syscall.CmsgLen(0):]
+- *(*byte)(unsafe.Pointer(&data[:1][0])) = byte(cm.HopLimit)
+- off += syscall.CmsgSpace(4)
+- }
+- if pion {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_2292PKTINFO
+- m.SetLen(syscall.CmsgLen(syscall.SizeofInet6Pktinfo))
+- pi := (*syscall.Inet6Pktinfo)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
+- if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
+- copy(pi.Addr[:], ip)
+- }
+- if cm.IfIndex != 0 {
+- pi.Ifindex = uint32(cm.IfIndex)
+- }
+- off += syscall.CmsgSpace(syscall.SizeofInet6Pktinfo)
+- }
+- if len(cm.NextHop) == net.IPv6len {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_2292NEXTHOP
+- m.SetLen(syscall.CmsgLen(syscall.SizeofSockaddrInet6))
+- sa := (*syscall.RawSockaddrInet6)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
+- sa.Len = syscall.SizeofSockaddrInet6
+- sa.Family = syscall.AF_INET6
+- copy(sa.Addr[:], cm.NextHop)
+- off += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
+- }
+- }
+- return
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_bsd.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_bsd.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_bsd.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_bsd.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,213 +0,0 @@
+-// Copyright 2013 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 netbsd openbsd
+-
+-package ipv6
+-
+-import (
+- "net"
+- "os"
+- "syscall"
+- "unsafe"
+-)
+-
+-const pktinfo = FlagDst | FlagInterface
+-
+-func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
+- opt.Lock()
+- defer opt.Unlock()
+- if cf&FlagTrafficClass != 0 {
+- if err := setIPv6ReceiveTrafficClass(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(FlagTrafficClass)
+- } else {
+- opt.clear(FlagTrafficClass)
+- }
+- }
+- if cf&FlagHopLimit != 0 {
+- if err := setIPv6ReceiveHopLimit(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(FlagHopLimit)
+- } else {
+- opt.clear(FlagHopLimit)
+- }
+- }
+- if cf&pktinfo != 0 {
+- if err := setIPv6ReceivePacketInfo(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(cf & pktinfo)
+- } else {
+- opt.clear(cf & pktinfo)
+- }
+- }
+- if cf&FlagPathMTU != 0 {
+- if err := setIPv6ReceivePathMTU(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(FlagPathMTU)
+- } else {
+- opt.clear(FlagPathMTU)
+- }
+- }
+- return nil
+-}
+-
+-func newControlMessage(opt *rawOpt) (oob []byte) {
+- opt.Lock()
+- defer opt.Unlock()
+- l, off := 0, 0
+- if opt.isset(FlagTrafficClass) {
+- l += syscall.CmsgSpace(4)
+- }
+- if opt.isset(FlagHopLimit) {
+- l += syscall.CmsgSpace(4)
+- }
+- if opt.isset(pktinfo) {
+- l += syscall.CmsgSpace(syscall.SizeofInet6Pktinfo)
+- }
+- if opt.isset(FlagPathMTU) {
+- l += syscall.CmsgSpace(syscall.SizeofIPv6MTUInfo)
+- }
+- if l > 0 {
+- oob = make([]byte, l)
+- if opt.isset(FlagTrafficClass) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_RECVTCLASS
+- m.SetLen(syscall.CmsgLen(4))
+- off += syscall.CmsgSpace(4)
+- }
+- if opt.isset(FlagHopLimit) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_RECVHOPLIMIT
+- m.SetLen(syscall.CmsgLen(4))
+- off += syscall.CmsgSpace(4)
+- }
+- if opt.isset(pktinfo) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_RECVPKTINFO
+- m.SetLen(syscall.CmsgLen(syscall.SizeofInet6Pktinfo))
+- off += syscall.CmsgSpace(syscall.SizeofInet6Pktinfo)
+- }
+- if opt.isset(FlagPathMTU) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_RECVPATHMTU
+- m.SetLen(syscall.CmsgLen(syscall.SizeofIPv6MTUInfo))
+- off += syscall.CmsgSpace(syscall.SizeofIPv6MTUInfo)
+- }
+- }
+- return
+-}
+-
+-func parseControlMessage(b []byte) (*ControlMessage, error) {
+- if len(b) == 0 {
+- return nil, nil
+- }
+- cmsgs, err := syscall.ParseSocketControlMessage(b)
+- if err != nil {
+- return nil, os.NewSyscallError("parse socket control message", err)
+- }
+- cm := &ControlMessage{}
+- for _, m := range cmsgs {
+- if m.Header.Level != ianaProtocolIPv6 {
+- continue
+- }
+- switch m.Header.Type {
+- case syscall.IPV6_TCLASS:
+- cm.TrafficClass = int(*(*byte)(unsafe.Pointer(&m.Data[:1][0])))
+- case syscall.IPV6_HOPLIMIT:
+- cm.HopLimit = int(*(*byte)(unsafe.Pointer(&m.Data[:1][0])))
+- case syscall.IPV6_PKTINFO:
+- pi := (*syscall.Inet6Pktinfo)(unsafe.Pointer(&m.Data[0]))
+- cm.Dst = pi.Addr[:]
+- cm.IfIndex = int(pi.Ifindex)
+- case syscall.IPV6_PATHMTU:
+- mi := (*syscall.IPv6MTUInfo)(unsafe.Pointer(&m.Data[0]))
+- cm.Dst = mi.Addr.Addr[:]
+- cm.IfIndex = int(mi.Addr.Scope_id)
+- cm.MTU = int(mi.Mtu)
+- }
+- }
+- return cm, nil
+-}
+-
+-func marshalControlMessage(cm *ControlMessage) (oob []byte) {
+- if cm == nil {
+- return
+- }
+- l, off := 0, 0
+- if cm.TrafficClass > 0 {
+- l += syscall.CmsgSpace(4)
+- }
+- if cm.HopLimit > 0 {
+- l += syscall.CmsgSpace(4)
+- }
+- pion := false
+- if cm.Src.To4() == nil && cm.Src.To16() != nil || cm.IfIndex != 0 {
+- pion = true
+- l += syscall.CmsgSpace(syscall.SizeofInet6Pktinfo)
+- }
+- if len(cm.NextHop) == net.IPv6len {
+- l += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
+- }
+- if l > 0 {
+- oob = make([]byte, l)
+- if cm.TrafficClass > 0 {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_TCLASS
+- m.SetLen(syscall.CmsgLen(4))
+- data := oob[off+syscall.CmsgLen(0):]
+- *(*byte)(unsafe.Pointer(&data[:1][0])) = byte(cm.TrafficClass)
+- off += syscall.CmsgSpace(4)
+- }
+- if cm.HopLimit > 0 {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_HOPLIMIT
+- m.SetLen(syscall.CmsgLen(4))
+- data := oob[off+syscall.CmsgLen(0):]
+- *(*byte)(unsafe.Pointer(&data[:1][0])) = byte(cm.HopLimit)
+- off += syscall.CmsgSpace(4)
+- }
+- if pion {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_PKTINFO
+- m.SetLen(syscall.CmsgLen(syscall.SizeofInet6Pktinfo))
+- pi := (*syscall.Inet6Pktinfo)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
+- if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
+- copy(pi.Addr[:], ip)
+- }
+- if cm.IfIndex != 0 {
+- pi.Ifindex = uint32(cm.IfIndex)
+- }
+- off += syscall.CmsgSpace(syscall.SizeofInet6Pktinfo)
+- }
+- if len(cm.NextHop) == net.IPv6len {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_NEXTHOP
+- m.SetLen(syscall.CmsgLen(syscall.SizeofSockaddrInet6))
+- sa := (*syscall.RawSockaddrInet6)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
+- sa.Len = syscall.SizeofSockaddrInet6
+- sa.Family = syscall.AF_INET6
+- copy(sa.Addr[:], cm.NextHop)
+- sa.Scope_id = uint32(cm.IfIndex)
+- off += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
+- }
+- }
+- return
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_linux.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_linux.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_linux.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_linux.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,217 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import (
+- "net"
+- "os"
+- "syscall"
+- "unsafe"
+-)
+-
+-const (
+- // See /usr/include/linux/in6.h.
+- syscall_IPV6_RECVPATHMTU = syscall.IPV6_DSTOPTS + 1 + iota
+- syscall_IPV6_PATHMTU
+- syscall_IPV6_DONTFRAG
+-)
+-
+-const pktinfo = FlagDst | FlagInterface
+-
+-func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
+- opt.Lock()
+- defer opt.Unlock()
+- if cf&FlagTrafficClass != 0 {
+- if err := setIPv6ReceiveTrafficClass(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(FlagTrafficClass)
+- } else {
+- opt.clear(FlagTrafficClass)
+- }
+- }
+- if cf&FlagHopLimit != 0 {
+- if err := setIPv6ReceiveHopLimit(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(FlagHopLimit)
+- } else {
+- opt.clear(FlagHopLimit)
+- }
+- }
+- if cf&pktinfo != 0 {
+- if err := setIPv6ReceivePacketInfo(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(cf & pktinfo)
+- } else {
+- opt.clear(cf & pktinfo)
+- }
+- }
+- if cf&FlagPathMTU != 0 {
+- if err := setIPv6ReceivePathMTU(fd, on); err != nil {
+- return err
+- }
+- if on {
+- opt.set(FlagPathMTU)
+- } else {
+- opt.clear(FlagPathMTU)
+- }
+- }
+- return nil
+-}
+-
+-func newControlMessage(opt *rawOpt) (oob []byte) {
+- opt.Lock()
+- defer opt.Unlock()
+- l, off := 0, 0
+- if opt.isset(FlagTrafficClass) {
+- l += syscall.CmsgSpace(4)
+- }
+- if opt.isset(FlagHopLimit) {
+- l += syscall.CmsgSpace(4)
+- }
+- if opt.isset(pktinfo) {
+- l += syscall.CmsgSpace(syscall.SizeofInet6Pktinfo)
+- }
+- if opt.isset(FlagPathMTU) {
+- l += syscall.CmsgSpace(syscall.SizeofIPv6MTUInfo)
+- }
+- if l > 0 {
+- oob = make([]byte, l)
+- if opt.isset(FlagTrafficClass) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_RECVTCLASS
+- m.SetLen(syscall.CmsgLen(4))
+- off += syscall.CmsgSpace(4)
+- }
+- if opt.isset(FlagHopLimit) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_RECVHOPLIMIT
+- m.SetLen(syscall.CmsgLen(4))
+- off += syscall.CmsgSpace(4)
+- }
+- if opt.isset(pktinfo) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_RECVPKTINFO
+- m.SetLen(syscall.CmsgLen(syscall.SizeofInet6Pktinfo))
+- off += syscall.CmsgSpace(syscall.SizeofInet6Pktinfo)
+- }
+- if opt.isset(FlagPathMTU) {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall_IPV6_RECVPATHMTU
+- m.SetLen(syscall.CmsgLen(syscall.SizeofIPv6MTUInfo))
+- off += syscall.CmsgSpace(syscall.SizeofIPv6MTUInfo)
+- }
+- }
+- return
+-}
+-
+-func parseControlMessage(b []byte) (*ControlMessage, error) {
+- if len(b) == 0 {
+- return nil, nil
+- }
+- cmsgs, err := syscall.ParseSocketControlMessage(b)
+- if err != nil {
+- return nil, os.NewSyscallError("parse socket control message", err)
+- }
+- cm := &ControlMessage{}
+- for _, m := range cmsgs {
+- if m.Header.Level != ianaProtocolIPv6 {
+- continue
+- }
+- switch m.Header.Type {
+- case syscall.IPV6_TCLASS:
+- cm.TrafficClass = int(*(*byte)(unsafe.Pointer(&m.Data[:1][0])))
+- case syscall.IPV6_HOPLIMIT:
+- cm.HopLimit = int(*(*byte)(unsafe.Pointer(&m.Data[:1][0])))
+- case syscall.IPV6_PKTINFO:
+- pi := (*syscall.Inet6Pktinfo)(unsafe.Pointer(&m.Data[0]))
+- cm.Dst = pi.Addr[:]
+- cm.IfIndex = int(pi.Ifindex)
+- case syscall_IPV6_PATHMTU:
+- mi := (*syscall.IPv6MTUInfo)(unsafe.Pointer(&m.Data[0]))
+- cm.Dst = mi.Addr.Addr[:]
+- cm.IfIndex = int(mi.Addr.Scope_id)
+- cm.MTU = int(mi.Mtu)
+- }
+- }
+- return cm, nil
+-}
+-
+-func marshalControlMessage(cm *ControlMessage) (oob []byte) {
+- if cm == nil {
+- return
+- }
+- l, off := 0, 0
+- if cm.TrafficClass > 0 {
+- l += syscall.CmsgSpace(4)
+- }
+- if cm.HopLimit > 0 {
+- l += syscall.CmsgSpace(4)
+- }
+- pion := false
+- if cm.Src.To4() == nil && cm.Src.To16() != nil || cm.IfIndex != 0 {
+- pion = true
+- l += syscall.CmsgSpace(syscall.SizeofInet6Pktinfo)
+- }
+- if len(cm.NextHop) == net.IPv6len {
+- l += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
+- }
+- if l > 0 {
+- oob = make([]byte, l)
+- if cm.TrafficClass > 0 {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_TCLASS
+- m.SetLen(syscall.CmsgLen(4))
+- data := oob[off+syscall.CmsgLen(0):]
+- *(*byte)(unsafe.Pointer(&data[:1][0])) = byte(cm.TrafficClass)
+- off += syscall.CmsgSpace(4)
+- }
+- if cm.HopLimit > 0 {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_HOPLIMIT
+- m.SetLen(syscall.CmsgLen(4))
+- data := oob[off+syscall.CmsgLen(0):]
+- *(*byte)(unsafe.Pointer(&data[:1][0])) = byte(cm.HopLimit)
+- off += syscall.CmsgSpace(4)
+- }
+- if pion {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_PKTINFO
+- m.SetLen(syscall.CmsgLen(syscall.SizeofInet6Pktinfo))
+- pi := (*syscall.Inet6Pktinfo)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
+- if ip := cm.Src.To16(); ip != nil && ip.To4() == nil {
+- copy(pi.Addr[:], ip)
+- }
+- if cm.IfIndex != 0 {
+- pi.Ifindex = uint32(cm.IfIndex)
+- }
+- off += syscall.CmsgSpace(syscall.SizeofInet6Pktinfo)
+- }
+- if len(cm.NextHop) == net.IPv6len {
+- m := (*syscall.Cmsghdr)(unsafe.Pointer(&oob[off]))
+- m.Level = ianaProtocolIPv6
+- m.Type = syscall.IPV6_NEXTHOP
+- m.SetLen(syscall.CmsgLen(syscall.SizeofSockaddrInet6))
+- sa := (*syscall.RawSockaddrInet6)(unsafe.Pointer(&oob[off+syscall.CmsgLen(0)]))
+- sa.Family = syscall.AF_INET6
+- copy(sa.Addr[:], cm.NextHop)
+- sa.Scope_id = uint32(cm.IfIndex)
+- off += syscall.CmsgSpace(syscall.SizeofSockaddrInet6)
+- }
+- }
+- return
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_plan9.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_plan9.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_plan9.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_plan9.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,27 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import "syscall"
+-
+-func setControlMessage(fd int, opt *rawOpt, cf ControlFlags, on bool) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-func newControlMessage(opt *rawOpt) (oob []byte) {
+- // TODO(mikio): Implement this
+- return nil
+-}
+-
+-func parseControlMessage(b []byte) (*ControlMessage, error) {
+- // TODO(mikio): Implement this
+- return nil, syscall.EPLAN9
+-}
+-
+-func marshalControlMessage(cm *ControlMessage) (oob []byte) {
+- // TODO(mikio): Implement this
+- return nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_windows.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_windows.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_windows.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control_rfc3542_windows.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,27 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import "syscall"
+-
+-func setControlMessage(fd syscall.Handle, opt *rawOpt, cf ControlFlags, on bool) error {
+- // TODO(mikio): Implement this
+- return syscall.EWINDOWS
+-}
+-
+-func newControlMessage(opt *rawOpt) (oob []byte) {
+- // TODO(mikio): Implement this
+- return nil
+-}
+-
+-func parseControlMessage(b []byte) (*ControlMessage, error) {
+- // TODO(mikio): Implement this
+- return nil, syscall.EWINDOWS
+-}
+-
+-func marshalControlMessage(cm *ControlMessage) (oob []byte) {
+- // TODO(mikio): Implement this
+- return nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/control_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/control_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,42 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import (
+- "sync"
+- "testing"
+-)
+-
+-func TestControlFlags(t *testing.T) {
+- tf := FlagInterface | FlagPathMTU
+- opt := rawOpt{cflags: tf | FlagHopLimit}
+-
+- // This loop runs methods of raw.Opt concurrently for testing
+- // concurrent access to the rawOpt. The first entry shold be
+- // opt.set and the last entry should be opt.clear.
+- tfns := []func(ControlFlags){opt.set, opt.clear, opt.clear}
+- ch := make(chan bool)
+- var wg sync.WaitGroup
+- for i, fn := range tfns {
+- wg.Add(1)
+- go func(i int, fn func(ControlFlags)) {
+- defer wg.Done()
+- switch i {
+- case 0:
+- close(ch)
+- case len(tfns) - 1:
+- <-ch
+- }
+- opt.Lock()
+- defer opt.Unlock()
+- fn(tf)
+- }(i, fn)
+- }
+- wg.Wait()
+-
+- if opt.isset(tf) {
+- t.Fatalf("got %#x; expected %#x", opt.cflags, FlagHopLimit)
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/dgramopt_plan9.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/dgramopt_plan9.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/dgramopt_plan9.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/dgramopt_plan9.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,96 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import (
+- "net"
+- "syscall"
+-)
+-
+-// MulticastHopLimit returns the hop limit field value for outgoing
+-// multicast packets.
+-func (c *dgramOpt) MulticastHopLimit() (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+-
+-// SetMulticastHopLimit sets the hop limit field value for future
+-// outgoing multicast packets.
+-func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-// MulticastInterface returns the default interface for multicast
+-// packet transmissions.
+-func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
+- // TODO(mikio): Implement this
+- return nil, syscall.EPLAN9
+-}
+-
+-// SetMulticastInterface sets the default interface for future
+-// multicast packet transmissions.
+-func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-// MulticastLoopback reports whether transmitted multicast packets
+-// should be copied and send back to the originator.
+-func (c *dgramOpt) MulticastLoopback() (bool, error) {
+- // TODO(mikio): Implement this
+- return false, syscall.EPLAN9
+-}
+-
+-// SetMulticastLoopback sets whether transmitted multicast packets
+-// should be copied and send back to the originator.
+-func (c *dgramOpt) SetMulticastLoopback(on bool) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-// JoinGroup joins the group address group on the interface ifi.
+-// It uses the system assigned multicast interface when ifi is nil,
+-// although this is not recommended because the assignment depends on
+-// platforms and sometimes it might require routing configuration.
+-func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-// LeaveGroup leaves the group address group on the interface ifi.
+-func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-// Checksum reports whether the kernel will compute, store or verify a
+-// checksum for both incoming and outgoing packets. If on is true, it
+-// returns an offset in bytes into the data of where the checksum
+-// field is located.
+-func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
+- // TODO(mikio): Implement this
+- return false, 0, syscall.EPLAN9
+-}
+-
+-// SetChecksum enables the kernel checksum processing. If on is ture,
+-// the offset should be an offset in bytes into the data of where the
+-// checksum field is located.
+-func (c *dgramOpt) SetChecksum(on bool, offset int) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-// ICMPFilter returns an ICMP filter.
+-func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
+- // TODO(mikio): Implement this
+- return nil, syscall.EPLAN9
+-}
+-
+-// SetICMPFilter deploys the ICMP filter.
+-func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/dgramopt_posix.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/dgramopt_posix.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/dgramopt_posix.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/dgramopt_posix.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,178 +0,0 @@
+-// Copyright 2013 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 darwin freebsd linux netbsd openbsd windows
+-
+-package ipv6
+-
+-import (
+- "net"
+- "syscall"
+-)
+-
+-// MulticastHopLimit returns the hop limit field value for outgoing
+-// multicast packets.
+-func (c *dgramOpt) MulticastHopLimit() (int, error) {
+- if !c.ok() {
+- return 0, syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return 0, err
+- }
+- return ipv6MulticastHopLimit(fd)
+-}
+-
+-// SetMulticastHopLimit sets the hop limit field value for future
+-// outgoing multicast packets.
+-func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- return setIPv6MulticastHopLimit(fd, hoplim)
+-}
+-
+-// MulticastInterface returns the default interface for multicast
+-// packet transmissions.
+-func (c *dgramOpt) MulticastInterface() (*net.Interface, error) {
+- if !c.ok() {
+- return nil, syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return nil, err
+- }
+- return ipv6MulticastInterface(fd)
+-}
+-
+-// SetMulticastInterface sets the default interface for future
+-// multicast packet transmissions.
+-func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- return setIPv6MulticastInterface(fd, ifi)
+-}
+-
+-// MulticastLoopback reports whether transmitted multicast packets
+-// should be copied and send back to the originator.
+-func (c *dgramOpt) MulticastLoopback() (bool, error) {
+- if !c.ok() {
+- return false, syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return false, err
+- }
+- return ipv6MulticastLoopback(fd)
+-}
+-
+-// SetMulticastLoopback sets whether transmitted multicast packets
+-// should be copied and send back to the originator.
+-func (c *dgramOpt) SetMulticastLoopback(on bool) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- return setIPv6MulticastLoopback(fd, on)
+-}
+-
+-// JoinGroup joins the group address group on the interface ifi.
+-// It uses the system assigned multicast interface when ifi is nil,
+-// although this is not recommended because the assignment depends on
+-// platforms and sometimes it might require routing configuration.
+-func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- grp := netAddrToIP16(group)
+- if grp == nil {
+- return errMissingAddress
+- }
+- return joinIPv6Group(fd, ifi, grp)
+-}
+-
+-// LeaveGroup leaves the group address group on the interface ifi.
+-func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- grp := netAddrToIP16(group)
+- if grp == nil {
+- return errMissingAddress
+- }
+- return leaveIPv6Group(fd, ifi, grp)
+-}
+-
+-// Checksum reports whether the kernel will compute, store or verify a
+-// checksum for both incoming and outgoing packets. If on is true, it
+-// returns an offset in bytes into the data of where the checksum
+-// field is located.
+-func (c *dgramOpt) Checksum() (on bool, offset int, err error) {
+- if !c.ok() {
+- return false, 0, syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return false, 0, err
+- }
+- return ipv6Checksum(fd)
+-}
+-
+-// SetChecksum enables the kernel checksum processing. If on is ture,
+-// the offset should be an offset in bytes into the data of where the
+-// checksum field is located.
+-func (c *dgramOpt) SetChecksum(on bool, offset int) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- return setIPv6Checksum(fd, on, offset)
+-}
+-
+-// ICMPFilter returns an ICMP filter.
+-func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) {
+- if !c.ok() {
+- return nil, syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return nil, err
+- }
+- return ipv6ICMPFilter(fd)
+-}
+-
+-// SetICMPFilter deploys the ICMP filter.
+-func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- return setIPv6ICMPFilter(fd, f)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/doc.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/doc.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/doc.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/doc.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,193 +0,0 @@
+-// Copyright 2013 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 ipv6 implements IP-level socket options for the Internet
+-// Protocol version 6.
+-//
+-// The package provides IP-level socket options that allow
+-// manipulation of IPv6 facilities. The IPv6 and socket options for
+-// IPv6 are defined in RFC 2460, RFC 3493 and RFC 3542.
+-//
+-//
+-// Unicasting
+-//
+-// The options for unicasting are available for net.TCPConn,
+-// net.UDPConn and net.IPConn which are created as network connections
+-// that use the IPv6 transport. When a single TCP connection carrying
+-// a data flow of multiple packets needs to indicate the flow is
+-// important, ipv6.Conn is used to set the traffic class field on the
+-// IPv6 header for each packet.
+-//
+-// ln, err := net.Listen("tcp6", "[::]:1024")
+-// if err != nil {
+-// // error handling
+-// }
+-// defer ln.Close()
+-// for {
+-// c, err := ln.Accept()
+-// if err != nil {
+-// // error handling
+-// }
+-// go func(c net.Conn) {
+-// defer c.Close()
+-//
+-// The outgoing packets will be labeled DiffServ assured forwarding
+-// class 1 low drop precedence, as known as AF11 packets.
+-//
+-// if err := ipv6.NewConn(c).SetTrafficClass(DiffServAF11); err != nil {
+-// // error handling
+-// }
+-// if _, err := c.Write(data); err != nil {
+-// // error handling
+-// }
+-// }(c)
+-// }
+-//
+-//
+-// Multicasting
+-//
+-// The options for multicasting are available for net.UDPConn and
+-// net.IPconn which are created as network connections that use the
+-// IPv6 transport. A few network facilities must be prepared before
+-// you begin multicasting, at a minimum joining network interfaces and
+-// multicast groups.
+-//
+-// en0, err := net.InterfaceByName("en0")
+-// if err != nil {
+-// // error handling
+-// }
+-// en1, err := net.InterfaceByIndex(911)
+-// if err != nil {
+-// // error handling
+-// }
+-// group := net.ParseIP("ff02::114")
+-//
+-// First, an application listens to an appropriate address with an
+-// appropriate service port.
+-//
+-// c, err := net.ListenPacket("udp6", "[::]:1024")
+-// if err != nil {
+-// // error handling
+-// }
+-// defer c.Close()
+-//
+-// Second, the application joins multicast groups, starts listening to
+-// the groups on the specified network interfaces. Note that the
+-// service port for transport layer protocol does not matter with this
+-// operation as joining groups affects only network and link layer
+-// protocols, such as IPv6 and Ethernet.
+-//
+-// p := ipv6.NewPacketConn(c)
+-// if err := p.JoinGroup(en0, &net.UDPAddr{IP: group}); err != nil {
+-// // error handling
+-// }
+-// if err := p.JoinGroup(en1, &net.UDPAddr{IP: group}); err != nil {
+-// // error handling
+-// }
+-//
+-// The application might set per packet control message transmissions
+-// between the protocol stack within the kernel. When the application
+-// needs a destination address on an incoming packet,
+-// SetControlMessage of ipv6.PacketConn is used to enable control
+-// message transmissons.
+-//
+-// if err := p.SetControlMessage(ipv6.FlagDst, true); err != nil {
+-// // error handling
+-// }
+-//
+-// The application could identify whether the received packets are
+-// of interest by using the control message that contains the
+-// destination address of the received packet.
+-//
+-// b := make([]byte, 1500)
+-// for {
+-// n, rcm, src, err := p.ReadFrom(b)
+-// if err != nil {
+-// // error handling
+-// }
+-// if rcm.Dst.IsMulticast() {
+-// if rcm.Dst.Equal(group)
+-// // joined group, do something
+-// } else {
+-// // unknown group, discard
+-// continue
+-// }
+-// }
+-//
+-// The application can also send both unicast and multicast packets.
+-//
+-// p.SetTrafficClass(DiffServCS0)
+-// p.SetHopLimit(16)
+-// if _, err := p.WriteTo(data[:n], nil, src); err != nil {
+-// // error handling
+-// }
+-// dst := &net.UDPAddr{IP: group, Port: 1024}
+-// wcm := ipv6.ControlMessage{TrafficClass: DiffServCS7, HopLimit: 1}
+-// for _, ifi := range []*net.Interface{en0, en1} {
+-// wcm.IfIndex = ifi.Index
+-// if _, err := p.WriteTo(data[:n], &wcm, dst); err != nil {
+-// // error handling
+-// }
+-// }
+-// }
+-//
+-//
+-// More multicasting
+-//
+-// An application that uses PacketConn may join multiple multicast
+-// groups. For example, a UDP listener with port 1024 might join two
+-// different groups across over two different network interfaces by
+-// using:
+-//
+-// c, err := net.ListenPacket("udp6", "[::]:1024")
+-// if err != nil {
+-// // error handling
+-// }
+-// defer c.Close()
+-// p := ipv6.NewPacketConn(c)
+-// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::1:114")}); err != nil {
+-// // error handling
+-// }
+-// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::2:114")}); err != nil {
+-// // error handling
+-// }
+-// if err := p.JoinGroup(en1, &net.UDPAddr{IP: net.ParseIP("ff02::2:114")}); err != nil {
+-// // error handling
+-// }
+-//
+-// It is possible for multiple UDP listeners that listen on the same
+-// UDP port to join the same multicast group. The net package will
+-// provide a socket that listens to a wildcard address with reusable
+-// UDP port when an appropriate multicast address prefix is passed to
+-// the net.ListenPacket or net.ListenUDP.
+-//
+-// c1, err := net.ListenPacket("udp6", "[ff02::]:1024")
+-// if err != nil {
+-// // error handling
+-// }
+-// defer c1.Close()
+-// c2, err := net.ListenPacket("udp6", "[ff02::]:1024")
+-// if err != nil {
+-// // error handling
+-// }
+-// defer c2.Close()
+-// p1 := ipv6.NewPacketConn(c1)
+-// if err := p1.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil {
+-// // error handling
+-// }
+-// p2 := ipv6.NewPacketConn(c2)
+-// if err := p2.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil {
+-// // error handling
+-// }
+-//
+-// Also it is possible for the application to leave or rejoin a
+-// multicast group on the network interface.
+-//
+-// if err := p.LeaveGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil {
+-// // error handling
+-// }
+-// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff01::114")}); err != nil {
+-// // error handling
+-// }
+-package ipv6
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/endpoint.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/endpoint.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/endpoint.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/endpoint.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,119 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import (
+- "net"
+- "syscall"
+- "time"
+-)
+-
+-// A Conn represents a network endpoint that uses IPv6 transport.
+-// It allows to set basic IP-level socket options such as traffic
+-// class and hop limit.
+-type Conn struct {
+- genericOpt
+-}
+-
+-type genericOpt struct {
+- net.Conn
+-}
+-
+-func (c *genericOpt) ok() bool { return c != nil && c.Conn != nil }
+-
+-// PathMTU returns a path MTU value for the destination associated
+-// with the endpoint.
+-func (c *Conn) PathMTU() (int, error) {
+- if !c.genericOpt.ok() {
+- return 0, syscall.EINVAL
+- }
+- fd, err := c.genericOpt.sysfd()
+- if err != nil {
+- return 0, err
+- }
+- return ipv6PathMTU(fd)
+-}
+-
+-// NewConn returns a new Conn.
+-func NewConn(c net.Conn) *Conn {
+- return &Conn{
+- genericOpt: genericOpt{Conn: c},
+- }
+-}
+-
+-// A PacketConn represents a packet network endpoint that uses IPv6
+-// transport. It is used to control several IP-level socket options
+-// including IPv6 header manipulation. It also provides datagram
+-// based network I/O methods specific to the IPv6 and higher layer
+-// protocols such as OSPF, GRE, and UDP.
+-type PacketConn struct {
+- genericOpt
+- dgramOpt
+- payloadHandler
+-}
+-
+-type dgramOpt struct {
+- net.PacketConn
+-}
+-
+-func (c *dgramOpt) ok() bool { return c != nil && c.PacketConn != nil }
+-
+-// SetControlMessage allows to receive the per packet basis IP-level
+-// socket options.
+-func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error {
+- if !c.payloadHandler.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.payloadHandler.sysfd()
+- if err != nil {
+- return err
+- }
+- return setControlMessage(fd, &c.payloadHandler.rawOpt, cf, on)
+-}
+-
+-// SetDeadline sets the read and write deadlines associated with the
+-// endpoint.
+-func (c *PacketConn) SetDeadline(t time.Time) error {
+- if !c.payloadHandler.ok() {
+- return syscall.EINVAL
+- }
+- return c.payloadHandler.SetDeadline(t)
+-}
+-
+-// SetReadDeadline sets the read deadline associated with the
+-// endpoint.
+-func (c *PacketConn) SetReadDeadline(t time.Time) error {
+- if !c.payloadHandler.ok() {
+- return syscall.EINVAL
+- }
+- return c.payloadHandler.SetReadDeadline(t)
+-}
+-
+-// SetWriteDeadline sets the write deadline associated with the
+-// endpoint.
+-func (c *PacketConn) SetWriteDeadline(t time.Time) error {
+- if !c.payloadHandler.ok() {
+- return syscall.EINVAL
+- }
+- return c.payloadHandler.SetWriteDeadline(t)
+-}
+-
+-// Close closes the endpoint.
+-func (c *PacketConn) Close() error {
+- if !c.payloadHandler.ok() {
+- return syscall.EINVAL
+- }
+- return c.payloadHandler.Close()
+-}
+-
+-// NewPacketConn returns a new PacketConn using c as its underlying
+-// transport.
+-func NewPacketConn(c net.PacketConn) *PacketConn {
+- return &PacketConn{
+- genericOpt: genericOpt{Conn: c.(net.Conn)},
+- dgramOpt: dgramOpt{PacketConn: c},
+- payloadHandler: payloadHandler{PacketConn: c},
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/genericopt_plan9.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/genericopt_plan9.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/genericopt_plan9.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/genericopt_plan9.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,34 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import "syscall"
+-
+-// TrafficClass returns the traffic class field value for outgoing
+-// packets.
+-func (c *genericOpt) TrafficClass() (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+-
+-// SetTrafficClass sets the traffic class field value for future
+-// outgoing packets.
+-func (c *genericOpt) SetTrafficClass(tclass int) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+-
+-// HopLimit returns the hop limit field value for outgoing packets.
+-func (c *genericOpt) HopLimit() (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+-
+-// SetHopLimit sets the hop limit field value for future outgoing
+-// packets.
+-func (c *genericOpt) SetHopLimit(hoplim int) error {
+- // TODO(mikio): Implement this
+- return syscall.EPLAN9
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/genericopt_posix.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/genericopt_posix.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/genericopt_posix.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/genericopt_posix.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,60 +0,0 @@
+-// Copyright 2013 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 darwin freebsd linux netbsd openbsd windows
+-
+-package ipv6
+-
+-import "syscall"
+-
+-// TrafficClass returns the traffic class field value for outgoing
+-// packets.
+-func (c *genericOpt) TrafficClass() (int, error) {
+- if !c.ok() {
+- return 0, syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return 0, err
+- }
+- return ipv6TrafficClass(fd)
+-}
+-
+-// SetTrafficClass sets the traffic class field value for future
+-// outgoing packets.
+-func (c *genericOpt) SetTrafficClass(tclass int) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- return setIPv6TrafficClass(fd, tclass)
+-}
+-
+-// HopLimit returns the hop limit field value for outgoing packets.
+-func (c *genericOpt) HopLimit() (int, error) {
+- if !c.ok() {
+- return 0, syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return 0, err
+- }
+- return ipv6HopLimit(fd)
+-}
+-
+-// SetHopLimit sets the hop limit field value for future outgoing
+-// packets.
+-func (c *genericOpt) SetHopLimit(hoplim int) error {
+- if !c.ok() {
+- return syscall.EINVAL
+- }
+- fd, err := c.sysfd()
+- if err != nil {
+- return err
+- }
+- return setIPv6HopLimit(fd, hoplim)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/gen.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/gen.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/gen.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/gen.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,247 +0,0 @@
+-// Copyright 2013 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
+-
+-// This program generates internet protocol constatns and tables by
+-// reading IANA protocol registries.
+-//
+-// Usage:
+-// go run gen.go > iana.go
+-package main
+-
+-import (
+- "bytes"
+- "encoding/xml"
+- "fmt"
+- "go/format"
+- "io"
+- "net/http"
+- "os"
+- "strconv"
+- "strings"
+-)
+-
+-var registries = []struct {
+- url string
+- parse func(io.Writer, io.Reader) error
+-}{
+- {
+- "http://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xml",
+- parseICMPv6Parameters,
+- },
+- {
+- "http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml",
+- parseProtocolNumbers,
+- },
+-}
+-
+-func main() {
+- var bb bytes.Buffer
+- fmt.Fprintf(&bb, "// go run gen.go\n")
+- fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n")
+- fmt.Fprintf(&bb, "package ipv6\n\n")
+- for _, r := range registries {
+- resp, err := http.Get(r.url)
+- if err != nil {
+- fmt.Fprintln(os.Stderr, err)
+- os.Exit(1)
+- }
+- defer resp.Body.Close()
+- if resp.StatusCode != http.StatusOK {
+- fmt.Fprintf(os.Stderr, "got HTTP status code %v for %v\n", resp.StatusCode, r.url)
+- os.Exit(1)
+- }
+- if err := r.parse(&bb, resp.Body); err != nil {
+- fmt.Fprintln(os.Stderr, err)
+- os.Exit(1)
+- }
+- fmt.Fprintf(&bb, "\n")
+- }
+- b, err := format.Source(bb.Bytes())
+- if err != nil {
+- fmt.Fprintln(os.Stderr, err)
+- os.Exit(1)
+- }
+- os.Stdout.Write(b)
+-}
+-
+-func parseICMPv6Parameters(w io.Writer, r io.Reader) error {
+- dec := xml.NewDecoder(r)
+- var icp icmpv6Parameters
+- if err := dec.Decode(&icp); err != nil {
+- return err
+- }
+- prs := icp.escape()
+- fmt.Fprintf(w, "// %s, Updated: %s\n", icp.Title, icp.Updated)
+- fmt.Fprintf(w, "const (\n")
+- for _, pr := range prs {
+- if pr.Name == "" {
+- continue
+- }
+- fmt.Fprintf(w, "ICMPType%s ICMPType = %d", pr.Name, pr.Value)
+- fmt.Fprintf(w, "// %s\n", pr.OrigName)
+- }
+- fmt.Fprintf(w, ")\n\n")
+- fmt.Fprintf(w, "// %s, Updated: %s\n", icp.Title, icp.Updated)
+- fmt.Fprintf(w, "var icmpTypes = map[ICMPType]string{\n")
+- for _, pr := range prs {
+- if pr.Name == "" {
+- continue
+- }
+- fmt.Fprintf(w, "%d: %q,\n", pr.Value, strings.ToLower(pr.OrigName))
+- }
+- fmt.Fprintf(w, "}\n")
+- return nil
+-}
+-
+-type icmpv6Parameters struct {
+- XMLName xml.Name `xml:"registry"`
+- Title string `xml:"title"`
+- Updated string `xml:"updated"`
+- Registries []icmpv6ParamRegistry `xml:"registry"`
+-}
+-
+-type icmpv6ParamRegistry struct {
+- Title string `xml:"title"`
+- Records []icmpv6ParamRecord `xml:"record"`
+-}
+-
+-type icmpv6ParamRecord struct {
+- Value string `xml:"value"`
+- Name string `xml:"name"`
+-}
+-
+-type canonICMPv6ParamRecord struct {
+- OrigName string
+- Name string
+- Value int
+-}
+-
+-func (icp *icmpv6Parameters) escape() []canonICMPv6ParamRecord {
+- id := -1
+- for i, r := range icp.Registries {
+- if strings.Contains(r.Title, "Type") || strings.Contains(r.Title, "type") {
+- id = i
+- break
+- }
+- }
+- if id < 0 {
+- return nil
+- }
+- prs := make([]canonICMPv6ParamRecord, len(icp.Registries[id].Records))
+- sr := strings.NewReplacer(
+- "Messages", "",
+- "Message", "",
+- "ICMP", "",
+- "+", "P",
+- "-", "",
+- "/", "",
+- ".", "",
+- " ", "",
+- )
+- for i, pr := range icp.Registries[id].Records {
+- if strings.Contains(pr.Name, "Reserved") ||
+- strings.Contains(pr.Name, "Unassigned") ||
+- strings.Contains(pr.Name, "Deprecated") ||
+- strings.Contains(pr.Name, "Experiment") ||
+- strings.Contains(pr.Name, "experiment") {
+- continue
+- }
+- ss := strings.Split(pr.Name, "\n")
+- if len(ss) > 1 {
+- prs[i].Name = strings.Join(ss, " ")
+- } else {
+- prs[i].Name = ss[0]
+- }
+- s := strings.TrimSpace(prs[i].Name)
+- prs[i].OrigName = s
+- prs[i].Name = sr.Replace(s)
+- prs[i].Value, _ = strconv.Atoi(pr.Value)
+- }
+- return prs
+-}
+-
+-func parseProtocolNumbers(w io.Writer, r io.Reader) error {
+- dec := xml.NewDecoder(r)
+- var pn protocolNumbers
+- if err := dec.Decode(&pn); err != nil {
+- return err
+- }
+- prs := pn.escape()
+- fmt.Fprintf(w, "// %s, Updated: %s\n", pn.Title, pn.Updated)
+- fmt.Fprintf(w, "const (\n")
+- for _, pr := range prs {
+- if pr.Name == "" {
+- continue
+- }
+- fmt.Fprintf(w, "ianaProtocol%s = %d", pr.Name, pr.Value)
+- s := pr.Descr
+- if s == "" {
+- s = pr.OrigName
+- }
+- fmt.Fprintf(w, "// %s\n", s)
+- }
+- fmt.Fprintf(w, ")\n")
+- return nil
+-}
+-
+-type protocolNumbers struct {
+- XMLName xml.Name `xml:"registry"`
+- Title string `xml:"title"`
+- Updated string `xml:"updated"`
+- RegTitle string `xml:"registry>title"`
+- Note string `xml:"registry>note"`
+- Records []protocolRecord `xml:"registry>record"`
+-}
+-
+-type protocolRecord struct {
+- Value string `xml:"value"`
+- Name string `xml:"name"`
+- Descr string `xml:"description"`
+-}
+-
+-type canonProtocolRecord struct {
+- OrigName string
+- Name string
+- Descr string
+- Value int
+-}
+-
+-func (pn *protocolNumbers) escape() []canonProtocolRecord {
+- prs := make([]canonProtocolRecord, len(pn.Records))
+- sr := strings.NewReplacer(
+- "-in-", "in",
+- "-within-", "within",
+- "-over-", "over",
+- "+", "P",
+- "-", "",
+- "/", "",
+- ".", "",
+- " ", "",
+- )
+- for i, pr := range pn.Records {
+- prs[i].OrigName = pr.Name
+- s := strings.TrimSpace(pr.Name)
+- switch pr.Name {
+- case "ISIS over IPv4":
+- prs[i].Name = "ISIS"
+- case "manet":
+- prs[i].Name = "MANET"
+- default:
+- prs[i].Name = sr.Replace(s)
+- }
+- ss := strings.Split(pr.Descr, "\n")
+- for i := range ss {
+- ss[i] = strings.TrimSpace(ss[i])
+- }
+- if len(ss) > 1 {
+- prs[i].Descr = strings.Join(ss, " ")
+- } else {
+- prs[i].Descr = ss[0]
+- }
+- prs[i].Value, _ = strconv.Atoi(pr.Value)
+- }
+- return prs
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/gentest.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/gentest.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/gentest.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/gentest.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,196 +0,0 @@
+-// Copyright 2013 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
+-
+-// This program generates internet protocol constants by reading IANA
+-// protocol registries.
+-//
+-// Usage:
+-// go run gentest.go > iana_test.go
+-package main
+-
+-import (
+- "bytes"
+- "encoding/xml"
+- "fmt"
+- "go/format"
+- "io"
+- "net/http"
+- "os"
+- "strconv"
+- "strings"
+-)
+-
+-var registries = []struct {
+- url string
+- parse func(io.Writer, io.Reader) error
+-}{
+- {
+- "http://www.iana.org/assignments/dscp-registry/dscp-registry.xml",
+- parseDSCPRegistry,
+- },
+- {
+- "http://www.iana.org/assignments/ipv4-tos-byte/ipv4-tos-byte.xml",
+- parseTOSTCByte,
+- },
+-}
+-
+-func main() {
+- var bb bytes.Buffer
+- fmt.Fprintf(&bb, "// go run gentv.go\n")
+- fmt.Fprintf(&bb, "// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT\n\n")
+- fmt.Fprintf(&bb, "package ipv6_test\n\n")
+- for _, r := range registries {
+- resp, err := http.Get(r.url)
+- if err != nil {
+- fmt.Fprintln(os.Stderr, err)
+- os.Exit(1)
+- }
+- defer resp.Body.Close()
+- if resp.StatusCode != http.StatusOK {
+- fmt.Fprintf(os.Stderr, "got HTTP status code %v for %v\n", resp.StatusCode, r.url)
+- os.Exit(1)
+- }
+- if err := r.parse(&bb, resp.Body); err != nil {
+- fmt.Fprintln(os.Stderr, err)
+- os.Exit(1)
+- }
+- fmt.Fprintf(&bb, "\n")
+- }
+- b, err := format.Source(bb.Bytes())
+- if err != nil {
+- fmt.Fprintln(os.Stderr, err)
+- os.Exit(1)
+- }
+- os.Stdout.Write(b)
+-}
+-
+-func parseDSCPRegistry(w io.Writer, r io.Reader) error {
+- dec := xml.NewDecoder(r)
+- var dr dscpRegistry
+- if err := dec.Decode(&dr); err != nil {
+- return err
+- }
+- drs := dr.escape()
+- fmt.Fprintf(w, "// %s, Updated: %s\n", dr.Title, dr.Updated)
+- fmt.Fprintf(w, "const (\n")
+- for _, dr := range drs {
+- fmt.Fprintf(w, "DiffServ%s = %#x", dr.Name, dr.Value)
+- fmt.Fprintf(w, "// %s\n", dr.OrigName)
+- }
+- fmt.Fprintf(w, ")\n")
+- return nil
+-}
+-
+-type dscpRegistry struct {
+- XMLName xml.Name `xml:"registry"`
+- Title string `xml:"title"`
+- Updated string `xml:"updated"`
+- Note string `xml:"note"`
+- RegTitle string `xml:"registry>title"`
+- PoolRecords []dscpRecord `xml:"registry>record"`
+- Records []dscpRecord `xml:"registry>registry>record"`
+-}
+-
+-type dscpRecord struct {
+- Name string `xml:"name"`
+- Space string `xml:"space"`
+-}
+-
+-type canonDSCPRecord struct {
+- OrigName string
+- Name string
+- Value int
+-}
+-
+-func (drr *dscpRegistry) escape() []canonDSCPRecord {
+- drs := make([]canonDSCPRecord, len(drr.Records))
+- sr := strings.NewReplacer(
+- "+", "",
+- "-", "",
+- "/", "",
+- ".", "",
+- " ", "",
+- )
+- for i, dr := range drr.Records {
+- s := strings.TrimSpace(dr.Name)
+- drs[i].OrigName = s
+- drs[i].Name = sr.Replace(s)
+- n, err := strconv.ParseUint(dr.Space, 2, 8)
+- if err != nil {
+- continue
+- }
+- drs[i].Value = int(n) << 2
+- }
+- return drs
+-}
+-
+-func parseTOSTCByte(w io.Writer, r io.Reader) error {
+- dec := xml.NewDecoder(r)
+- var ttb tosTCByte
+- if err := dec.Decode(&ttb); err != nil {
+- return err
+- }
+- trs := ttb.escape()
+- fmt.Fprintf(w, "// %s, Updated: %s\n", ttb.Title, ttb.Updated)
+- fmt.Fprintf(w, "const (\n")
+- for _, tr := range trs {
+- fmt.Fprintf(w, "%s = %#x", tr.Keyword, tr.Value)
+- fmt.Fprintf(w, "// %s\n", tr.OrigKeyword)
+- }
+- fmt.Fprintf(w, ")\n")
+- return nil
+-}
+-
+-type tosTCByte struct {
+- XMLName xml.Name `xml:"registry"`
+- Title string `xml:"title"`
+- Updated string `xml:"updated"`
+- Note string `xml:"note"`
+- RegTitle string `xml:"registry>title"`
+- Records []tosTCByteRecord `xml:"registry>record"`
+-}
+-
+-type tosTCByteRecord struct {
+- Binary string `xml:"binary"`
+- Keyword string `xml:"keyword"`
+-}
+-
+-type canonTOSTCByteRecord struct {
+- OrigKeyword string
+- Keyword string
+- Value int
+-}
+-
+-func (ttb *tosTCByte) escape() []canonTOSTCByteRecord {
+- trs := make([]canonTOSTCByteRecord, len(ttb.Records))
+- sr := strings.NewReplacer(
+- "Capable", "",
+- "(", "",
+- ")", "",
+- "+", "",
+- "-", "",
+- "/", "",
+- ".", "",
+- " ", "",
+- )
+- for i, tr := range ttb.Records {
+- s := strings.TrimSpace(tr.Keyword)
+- trs[i].OrigKeyword = s
+- ss := strings.Split(s, " ")
+- if len(ss) > 1 {
+- trs[i].Keyword = strings.Join(ss[1:], " ")
+- } else {
+- trs[i].Keyword = ss[0]
+- }
+- trs[i].Keyword = sr.Replace(trs[i].Keyword)
+- n, err := strconv.ParseUint(tr.Binary, 2, 8)
+- if err != nil {
+- continue
+- }
+- trs[i].Value = int(n)
+- }
+- return trs
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/helper.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/helper.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/helper.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/helper.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,28 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import "net"
+-
+-func boolint(b bool) int {
+- if b {
+- return 1
+- }
+- return 0
+-}
+-
+-func netAddrToIP16(a net.Addr) net.IP {
+- switch v := a.(type) {
+- case *net.UDPAddr:
+- if ip := v.IP.To16(); ip != nil && ip.To4() == nil {
+- return ip
+- }
+- case *net.IPAddr:
+- if ip := v.IP.To16(); ip != nil && ip.To4() == nil {
+- return ip
+- }
+- }
+- return nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/helper_plan9.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/helper_plan9.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/helper_plan9.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/helper_plan9.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,22 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import "syscall"
+-
+-func (c *genericOpt) sysfd() (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+-
+-func (c *dgramOpt) sysfd() (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+-
+-func (c *payloadHandler) sysfd() (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/helper_unix.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/helper_unix.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/helper_unix.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/helper_unix.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,46 +0,0 @@
+-// Copyright 2013 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 darwin freebsd linux netbsd openbsd
+-
+-package ipv6
+-
+-import (
+- "net"
+- "reflect"
+-)
+-
+-func (c *genericOpt) sysfd() (int, error) {
+- switch p := c.Conn.(type) {
+- case *net.TCPConn, *net.UDPConn, *net.IPConn:
+- return sysfd(p)
+- }
+- return 0, errInvalidConnType
+-}
+-
+-func (c *dgramOpt) sysfd() (int, error) {
+- switch p := c.PacketConn.(type) {
+- case *net.UDPConn, *net.IPConn:
+- return sysfd(p.(net.Conn))
+- }
+- return 0, errInvalidConnType
+-}
+-
+-func (c *payloadHandler) sysfd() (int, error) {
+- return sysfd(c.PacketConn.(net.Conn))
+-}
+-
+-func sysfd(c net.Conn) (int, error) {
+- cv := reflect.ValueOf(c)
+- switch ce := cv.Elem(); ce.Kind() {
+- case reflect.Struct:
+- nfd := ce.FieldByName("conn").FieldByName("fd")
+- switch fe := nfd.Elem(); fe.Kind() {
+- case reflect.Struct:
+- fd := fe.FieldByName("sysfd")
+- return int(fd.Int()), nil
+- }
+- }
+- return 0, errInvalidConnType
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/helper_windows.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/helper_windows.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/helper_windows.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/helper_windows.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,45 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import (
+- "net"
+- "reflect"
+- "syscall"
+-)
+-
+-func (c *genericOpt) sysfd() (syscall.Handle, error) {
+- switch p := c.Conn.(type) {
+- case *net.TCPConn, *net.UDPConn, *net.IPConn:
+- return sysfd(p)
+- }
+- return syscall.InvalidHandle, errInvalidConnType
+-}
+-
+-func (c *dgramOpt) sysfd() (syscall.Handle, error) {
+- switch p := c.PacketConn.(type) {
+- case *net.UDPConn, *net.IPConn:
+- return sysfd(p.(net.Conn))
+- }
+- return syscall.InvalidHandle, errInvalidConnType
+-}
+-
+-func (c *payloadHandler) sysfd() (syscall.Handle, error) {
+- return sysfd(c.PacketConn.(net.Conn))
+-}
+-
+-func sysfd(c net.Conn) (syscall.Handle, error) {
+- cv := reflect.ValueOf(c)
+- switch ce := cv.Elem(); ce.Kind() {
+- case reflect.Struct:
+- netfd := ce.FieldByName("conn").FieldByName("fd")
+- switch fe := netfd.Elem(); fe.Kind() {
+- case reflect.Struct:
+- fd := fe.FieldByName("sysfd")
+- return syscall.Handle(fd.Uint()), nil
+- }
+- }
+- return syscall.InvalidHandle, errInvalidConnType
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/iana.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/iana.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/iana.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/iana.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,224 +0,0 @@
+-// go run gen.go
+-// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+-
+-package ipv6
+-
+-// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2012-11-12
+-const (
+- ICMPTypeDestinationUnreachable ICMPType = 1 // Destination Unreachable
+- ICMPTypePacketTooBig ICMPType = 2 // Packet Too Big
+- ICMPTypeTimeExceeded ICMPType = 3 // Time Exceeded
+- ICMPTypeParameterProblem ICMPType = 4 // Parameter Problem
+- ICMPTypeEchoRequest ICMPType = 128 // Echo Request
+- ICMPTypeEchoReply ICMPType = 129 // Echo Reply
+- ICMPTypeMulticastListenerQuery ICMPType = 130 // Multicast Listener Query
+- ICMPTypeMulticastListenerReport ICMPType = 131 // Multicast Listener Report
+- ICMPTypeMulticastListenerDone ICMPType = 132 // Multicast Listener Done
+- ICMPTypeRouterSolicitation ICMPType = 133 // Router Solicitation
+- ICMPTypeRouterAdvertisement ICMPType = 134 // Router Advertisement
+- ICMPTypeNeighborSolicitation ICMPType = 135 // Neighbor Solicitation
+- ICMPTypeNeighborAdvertisement ICMPType = 136 // Neighbor Advertisement
+- ICMPTypeRedirect ICMPType = 137 // Redirect Message
+- ICMPTypeRouterRenumbering ICMPType = 138 // Router Renumbering
+- ICMPTypeNodeInformationQuery ICMPType = 139 // ICMP Node Information Query
+- ICMPTypeNodeInformationResponse ICMPType = 140 // ICMP Node Information Response
+- ICMPTypeInverseNeighborDiscoverySolicitation ICMPType = 141 // Inverse Neighbor Discovery Solicitation Message
+- ICMPTypeInverseNeighborDiscoveryAdvertisement ICMPType = 142 // Inverse Neighbor Discovery Advertisement Message
+- ICMPTypeVersion2MulticastListenerReport ICMPType = 143 // Version 2 Multicast Listener Report
+- ICMPTypeHomeAgentAddressDiscoveryRequest ICMPType = 144 // Home Agent Address Discovery Request Message
+- ICMPTypeHomeAgentAddressDiscoveryReply ICMPType = 145 // Home Agent Address Discovery Reply Message
+- ICMPTypeMobilePrefixSolicitation ICMPType = 146 // Mobile Prefix Solicitation
+- ICMPTypeMobilePrefixAdvertisement ICMPType = 147 // Mobile Prefix Advertisement
+- ICMPTypeCertificationPathSolicitation ICMPType = 148 // Certification Path Solicitation Message
+- ICMPTypeCertificationPathAdvertisement ICMPType = 149 // Certification Path Advertisement Message
+- ICMPTypeMulticastRouterAdvertisement ICMPType = 151 // Multicast Router Advertisement
+- ICMPTypeMulticastRouterSolicitation ICMPType = 152 // Multicast Router Solicitation
+- ICMPTypeMulticastRouterTermination ICMPType = 153 // Multicast Router Termination
+- ICMPTypeFMIPv6 ICMPType = 154 // FMIPv6 Messages
+- ICMPTypeRPLControl ICMPType = 155 // RPL Control Message
+- ICMPTypeILNPv6LocatorUpdate ICMPType = 156 // ILNPv6 Locator Update Message
+- ICMPTypeDuplicateAddressRequest ICMPType = 157 // Duplicate Address Request
+- ICMPTypeDuplicateAddressConfirmation ICMPType = 158 // Duplicate Address Confirmation
+-)
+-
+-// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2012-11-12
+-var icmpTypes = map[ICMPType]string{
+- 1: "destination unreachable",
+- 2: "packet too big",
+- 3: "time exceeded",
+- 4: "parameter problem",
+- 128: "echo request",
+- 129: "echo reply",
+- 130: "multicast listener query",
+- 131: "multicast listener report",
+- 132: "multicast listener done",
+- 133: "router solicitation",
+- 134: "router advertisement",
+- 135: "neighbor solicitation",
+- 136: "neighbor advertisement",
+- 137: "redirect message",
+- 138: "router renumbering",
+- 139: "icmp node information query",
+- 140: "icmp node information response",
+- 141: "inverse neighbor discovery solicitation message",
+- 142: "inverse neighbor discovery advertisement message",
+- 143: "version 2 multicast listener report",
+- 144: "home agent address discovery request message",
+- 145: "home agent address discovery reply message",
+- 146: "mobile prefix solicitation",
+- 147: "mobile prefix advertisement",
+- 148: "certification path solicitation message",
+- 149: "certification path advertisement message",
+- 151: "multicast router advertisement",
+- 152: "multicast router solicitation",
+- 153: "multicast router termination",
+- 154: "fmipv6 messages",
+- 155: "rpl control message",
+- 156: "ilnpv6 locator update message",
+- 157: "duplicate address request",
+- 158: "duplicate address confirmation",
+-}
+-
+-// Protocol Numbers, Updated: 2013-02-17
+-const (
+- ianaProtocolHOPOPT = 0 // IPv6 Hop-by-Hop Option
+- ianaProtocolICMP = 1 // Internet Control Message
+- ianaProtocolIGMP = 2 // Internet Group Management
+- ianaProtocolGGP = 3 // Gateway-to-Gateway
+- ianaProtocolIPv4 = 4 // IPv4 encapsulation
+- ianaProtocolST = 5 // Stream
+- ianaProtocolTCP = 6 // Transmission Control
+- ianaProtocolCBT = 7 // CBT
+- ianaProtocolEGP = 8 // Exterior Gateway Protocol
+- ianaProtocolIGP = 9 // any private interior gateway (used by Cisco for their IGRP)
+- ianaProtocolBBNRCCMON = 10 // BBN RCC Monitoring
+- ianaProtocolNVPII = 11 // Network Voice Protocol
+- ianaProtocolPUP = 12 // PUP
+- ianaProtocolARGUS = 13 // ARGUS
+- ianaProtocolEMCON = 14 // EMCON
+- ianaProtocolXNET = 15 // Cross Net Debugger
+- ianaProtocolCHAOS = 16 // Chaos
+- ianaProtocolUDP = 17 // User Datagram
+- ianaProtocolMUX = 18 // Multiplexing
+- ianaProtocolDCNMEAS = 19 // DCN Measurement Subsystems
+- ianaProtocolHMP = 20 // Host Monitoring
+- ianaProtocolPRM = 21 // Packet Radio Measurement
+- ianaProtocolXNSIDP = 22 // XEROX NS IDP
+- ianaProtocolTRUNK1 = 23 // Trunk-1
+- ianaProtocolTRUNK2 = 24 // Trunk-2
+- ianaProtocolLEAF1 = 25 // Leaf-1
+- ianaProtocolLEAF2 = 26 // Leaf-2
+- ianaProtocolRDP = 27 // Reliable Data Protocol
+- ianaProtocolIRTP = 28 // Internet Reliable Transaction
+- ianaProtocolISOTP4 = 29 // ISO Transport Protocol Class 4
+- ianaProtocolNETBLT = 30 // Bulk Data Transfer Protocol
+- ianaProtocolMFENSP = 31 // MFE Network Services Protocol
+- ianaProtocolMERITINP = 32 // MERIT Internodal Protocol
+- ianaProtocolDCCP = 33 // Datagram Congestion Control Protocol
+- ianaProtocol3PC = 34 // Third Party Connect Protocol
+- ianaProtocolIDPR = 35 // Inter-Domain Policy Routing Protocol
+- ianaProtocolXTP = 36 // XTP
+- ianaProtocolDDP = 37 // Datagram Delivery Protocol
+- ianaProtocolIDPRCMTP = 38 // IDPR Control Message Transport Proto
+- ianaProtocolTPPP = 39 // TP++ Transport Protocol
+- ianaProtocolIL = 40 // IL Transport Protocol
+- ianaProtocolIPv6 = 41 // IPv6 encapsulation
+- ianaProtocolSDRP = 42 // Source Demand Routing Protocol
+- ianaProtocolIPv6Route = 43 // Routing Header for IPv6
+- ianaProtocolIPv6Frag = 44 // Fragment Header for IPv6
+- ianaProtocolIDRP = 45 // Inter-Domain Routing Protocol
+- ianaProtocolRSVP = 46 // Reservation Protocol
+- ianaProtocolGRE = 47 // Generic Routing Encapsulation
+- ianaProtocolDSR = 48 // Dynamic Source Routing Protocol
+- ianaProtocolBNA = 49 // BNA
+- ianaProtocolESP = 50 // Encap Security Payload
+- ianaProtocolAH = 51 // Authentication Header
+- ianaProtocolINLSP = 52 // Integrated Net Layer Security TUBA
+- ianaProtocolSWIPE = 53 // IP with Encryption
+- ianaProtocolNARP = 54 // NBMA Address Resolution Protocol
+- ianaProtocolMOBILE = 55 // IP Mobility
+- ianaProtocolTLSP = 56 // Transport Layer Security Protocol using Kryptonet key management
+- ianaProtocolSKIP = 57 // SKIP
+- ianaProtocolIPv6ICMP = 58 // ICMP for IPv6
+- ianaProtocolIPv6NoNxt = 59 // No Next Header for IPv6
+- ianaProtocolIPv6Opts = 60 // Destination Options for IPv6
+- ianaProtocolCFTP = 62 // CFTP
+- ianaProtocolSATEXPAK = 64 // SATNET and Backroom EXPAK
+- ianaProtocolKRYPTOLAN = 65 // Kryptolan
+- ianaProtocolRVD = 66 // MIT Remote Virtual Disk Protocol
+- ianaProtocolIPPC = 67 // Internet Pluribus Packet Core
+- ianaProtocolSATMON = 69 // SATNET Monitoring
+- ianaProtocolVISA = 70 // VISA Protocol
+- ianaProtocolIPCV = 71 // Internet Packet Core Utility
+- ianaProtocolCPNX = 72 // Computer Protocol Network Executive
+- ianaProtocolCPHB = 73 // Computer Protocol Heart Beat
+- ianaProtocolWSN = 74 // Wang Span Network
+- ianaProtocolPVP = 75 // Packet Video Protocol
+- ianaProtocolBRSATMON = 76 // Backroom SATNET Monitoring
+- ianaProtocolSUNND = 77 // SUN ND PROTOCOL-Temporary
+- ianaProtocolWBMON = 78 // WIDEBAND Monitoring
+- ianaProtocolWBEXPAK = 79 // WIDEBAND EXPAK
+- ianaProtocolISOIP = 80 // ISO Internet Protocol
+- ianaProtocolVMTP = 81 // VMTP
+- ianaProtocolSECUREVMTP = 82 // SECURE-VMTP
+- ianaProtocolVINES = 83 // VINES
+- ianaProtocolTTP = 84 // TTP
+- ianaProtocolIPTM = 84 // Protocol Internet Protocol Traffic Manager
+- ianaProtocolNSFNETIGP = 85 // NSFNET-IGP
+- ianaProtocolDGP = 86 // Dissimilar Gateway Protocol
+- ianaProtocolTCF = 87 // TCF
+- ianaProtocolEIGRP = 88 // EIGRP
+- ianaProtocolOSPFIGP = 89 // OSPFIGP
+- ianaProtocolSpriteRPC = 90 // Sprite RPC Protocol
+- ianaProtocolLARP = 91 // Locus Address Resolution Protocol
+- ianaProtocolMTP = 92 // Multicast Transport Protocol
+- ianaProtocolAX25 = 93 // AX.25 Frames
+- ianaProtocolIPIP = 94 // IP-within-IP Encapsulation Protocol
+- ianaProtocolMICP = 95 // Mobile Internetworking Control Pro.
+- ianaProtocolSCCSP = 96 // Semaphore Communications Sec. Pro.
+- ianaProtocolETHERIP = 97 // Ethernet-within-IP Encapsulation
+- ianaProtocolENCAP = 98 // Encapsulation Header
+- ianaProtocolGMTP = 100 // GMTP
+- ianaProtocolIFMP = 101 // Ipsilon Flow Management Protocol
+- ianaProtocolPNNI = 102 // PNNI over IP
+- ianaProtocolPIM = 103 // Protocol Independent Multicast
+- ianaProtocolARIS = 104 // ARIS
+- ianaProtocolSCPS = 105 // SCPS
+- ianaProtocolQNX = 106 // QNX
+- ianaProtocolAN = 107 // Active Networks
+- ianaProtocolIPComp = 108 // IP Payload Compression Protocol
+- ianaProtocolSNP = 109 // Sitara Networks Protocol
+- ianaProtocolCompaqPeer = 110 // Compaq Peer Protocol
+- ianaProtocolIPXinIP = 111 // IPX in IP
+- ianaProtocolVRRP = 112 // Virtual Router Redundancy Protocol
+- ianaProtocolPGM = 113 // PGM Reliable Transport Protocol
+- ianaProtocolL2TP = 115 // Layer Two Tunneling Protocol
+- ianaProtocolDDX = 116 // D-II Data Exchange (DDX)
+- ianaProtocolIATP = 117 // Interactive Agent Transfer Protocol
+- ianaProtocolSTP = 118 // Schedule Transfer Protocol
+- ianaProtocolSRP = 119 // SpectraLink Radio Protocol
+- ianaProtocolUTI = 120 // UTI
+- ianaProtocolSMP = 121 // Simple Message Protocol
+- ianaProtocolSM = 122 // SM
+- ianaProtocolPTP = 123 // Performance Transparency Protocol
+- ianaProtocolISIS = 124 // ISIS over IPv4
+- ianaProtocolFIRE = 125 // FIRE
+- ianaProtocolCRTP = 126 // Combat Radio Transport Protocol
+- ianaProtocolCRUDP = 127 // Combat Radio User Datagram
+- ianaProtocolSSCOPMCE = 128 // SSCOPMCE
+- ianaProtocolIPLT = 129 // IPLT
+- ianaProtocolSPS = 130 // Secure Packet Shield
+- ianaProtocolPIPE = 131 // Private IP Encapsulation within IP
+- ianaProtocolSCTP = 132 // Stream Control Transmission Protocol
+- ianaProtocolFC = 133 // Fibre Channel
+- ianaProtocolRSVPE2EIGNORE = 134 // RSVP-E2E-IGNORE
+- ianaProtocolMobilityHeader = 135 // Mobility Header
+- ianaProtocolUDPLite = 136 // UDPLite
+- ianaProtocolMPLSinIP = 137 // MPLS-in-IP
+- ianaProtocolMANET = 138 // MANET Protocols
+- ianaProtocolHIP = 139 // Host Identity Protocol
+- ianaProtocolShim6 = 140 // Shim6 Protocol
+- ianaProtocolWESP = 141 // Wrapped Encapsulating Security Payload
+- ianaProtocolROHC = 142 // Robust Header Compression
+- ianaProtocolReserved = 255 // Reserved
+-)
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/iana_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/iana_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/iana_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/iana_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,38 +0,0 @@
+-// go run gentv.go
+-// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+-
+-package ipv6_test
+-
+-// Differentiated Services Field Codepoints, Updated: 2010-05-11
+-const (
+- DiffServCS0 = 0x0 // CS0
+- DiffServCS1 = 0x20 // CS1
+- DiffServCS2 = 0x40 // CS2
+- DiffServCS3 = 0x60 // CS3
+- DiffServCS4 = 0x80 // CS4
+- DiffServCS5 = 0xa0 // CS5
+- DiffServCS6 = 0xc0 // CS6
+- DiffServCS7 = 0xe0 // CS7
+- DiffServAF11 = 0x28 // AF11
+- DiffServAF12 = 0x30 // AF12
+- DiffServAF13 = 0x38 // AF13
+- DiffServAF21 = 0x48 // AF21
+- DiffServAF22 = 0x50 // AF22
+- DiffServAF23 = 0x58 // AF23
+- DiffServAF31 = 0x68 // AF31
+- DiffServAF32 = 0x70 // AF32
+- DiffServAF33 = 0x78 // AF33
+- DiffServAF41 = 0x88 // AF41
+- DiffServAF42 = 0x90 // AF42
+- DiffServAF43 = 0x98 // AF43
+- DiffServEFPHB = 0xb8 // EF PHB
+- DiffServVOICEADMIT = 0xb0 // VOICE-ADMIT
+-)
+-
+-// IPv4 TOS Byte and IPv6 Traffic Class Octet, Updated: 2001-09-06
+-const (
+- NotECNTransport = 0x0 // Not-ECT (Not ECN-Capable Transport)
+- ECNTransport1 = 0x1 // ECT(1) (ECN-Capable Transport(1))
+- ECNTransport0 = 0x2 // ECT(0) (ECN-Capable Transport(0))
+- CongestionExperienced = 0x3 // CE (Congestion Experienced)
+-)
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/icmp_bsd.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/icmp_bsd.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/icmp_bsd.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/icmp_bsd.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,35 +0,0 @@
+-// Copyright 2013 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 darwin freebsd netbsd openbsd
+-
+-package ipv6
+-
+-import "syscall"
+-
+-type rawICMPFilter struct {
+- syscall.ICMPv6Filter
+-}
+-
+-func (f *rawICMPFilter) set(typ ICMPType, block bool) {
+- if block {
+- f.Filt[typ>>5] &^= 1 << (uint32(typ) & 31)
+- } else {
+- f.Filt[typ>>5] |= 1 << (uint32(typ) & 31)
+- }
+-}
+-
+-func (f *rawICMPFilter) setAll(block bool) {
+- for i := range f.Filt {
+- if block {
+- f.Filt[i] = 0
+- } else {
+- f.Filt[i] = 1<<32 - 1
+- }
+- }
+-}
+-
+-func (f *rawICMPFilter) willBlock(typ ICMPType) bool {
+- return f.Filt[typ>>5]&(1<<(uint32(typ)&31)) == 0
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/icmp.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/icmp.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/icmp.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/icmp.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,46 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import "sync"
+-
+-// An ICMPType represents a type of ICMP message.
+-type ICMPType int
+-
+-func (typ ICMPType) String() string {
+- s, ok := icmpTypes[typ]
+- if !ok {
+- return "<nil>"
+- }
+- return s
+-}
+-
+-// An ICMPFilter represents an ICMP message filter for incoming
+-// packets.
+-type ICMPFilter struct {
+- mu sync.RWMutex
+- rawICMPFilter
+-}
+-
+-// Set sets the ICMP type and filter action to the filter.
+-func (f *ICMPFilter) Set(typ ICMPType, block bool) {
+- f.mu.Lock()
+- defer f.mu.Unlock()
+- f.set(typ, block)
+-}
+-
+-// SetAll sets the filter action to the filter.
+-func (f *ICMPFilter) SetAll(block bool) {
+- f.mu.Lock()
+- defer f.mu.Unlock()
+- f.setAll(block)
+-}
+-
+-// WillBlock reports whether the ICMP type will be blocked.
+-func (f *ICMPFilter) WillBlock(typ ICMPType) bool {
+- f.mu.RLock()
+- defer f.mu.RUnlock()
+- return f.willBlock(typ)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/icmp_linux.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/icmp_linux.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/icmp_linux.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/icmp_linux.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,33 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import "syscall"
+-
+-type rawICMPFilter struct {
+- syscall.ICMPv6Filter
+-}
+-
+-func (f *rawICMPFilter) set(typ ICMPType, block bool) {
+- if block {
+- f.Data[typ>>5] |= 1 << (uint32(typ) & 31)
+- } else {
+- f.Data[typ>>5] &^= 1 << (uint32(typ) & 31)
+- }
+-}
+-
+-func (f *rawICMPFilter) setAll(block bool) {
+- for i := range f.Data {
+- if block {
+- f.Data[i] = 1<<32 - 1
+- } else {
+- f.Data[i] = 0
+- }
+- }
+-}
+-
+-func (f *rawICMPFilter) willBlock(typ ICMPType) bool {
+- return f.Data[typ>>5]&(1<<(uint32(typ)&31)) != 0
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/icmp_plan9.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/icmp_plan9.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/icmp_plan9.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/icmp_plan9.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,22 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-type rawICMPFilter struct {
+- // TODO(mikio): Implement this
+-}
+-
+-func (f *rawICMPFilter) set(typ ICMPType, block bool) {
+- // TODO(mikio): Implement this
+-}
+-
+-func (f *rawICMPFilter) setAll(block bool) {
+- // TODO(mikio): Implement this
+-}
+-
+-func (f *rawICMPFilter) willBlock(typ ICMPType) bool {
+- // TODO(mikio): Implement this
+- return false
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/icmp_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/icmp_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/icmp_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/icmp_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,84 +0,0 @@
+-// Copyright 2013 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 ipv6_test
+-
+-import (
+- "code.google.com/p/go.net/ipv6"
+- "net"
+- "os"
+- "reflect"
+- "runtime"
+- "sync"
+- "testing"
+-)
+-
+-func TestICMPFilter(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+-
+- var f ipv6.ICMPFilter
+- for _, toggle := range []bool{false, true} {
+- f.SetAll(toggle)
+- var wg sync.WaitGroup
+- for _, typ := range []ipv6.ICMPType{
+- ipv6.ICMPTypeDestinationUnreachable,
+- ipv6.ICMPTypeEchoReply,
+- ipv6.ICMPTypeNeighborSolicitation,
+- ipv6.ICMPTypeDuplicateAddressConfirmation,
+- } {
+- wg.Add(1)
+- go func(typ ipv6.ICMPType) {
+- defer wg.Done()
+- f.Set(typ, false)
+- if f.WillBlock(typ) {
+- t.Errorf("ipv6.ICMPFilter.Set(%v, false) failed", typ)
+- }
+- f.Set(typ, true)
+- if !f.WillBlock(typ) {
+- t.Errorf("ipv6.ICMPFilter.Set(%v, true) failed", typ)
+- }
+- }(typ)
+- }
+- wg.Wait()
+- }
+-}
+-
+-func TestSetICMPFilter(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+- if os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+-
+- c, err := net.ListenPacket("ip6:ipv6-icmp", "::1")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- p := ipv6.NewPacketConn(c)
+-
+- var f ipv6.ICMPFilter
+- f.SetAll(true)
+- f.Set(ipv6.ICMPTypeEchoRequest, false)
+- f.Set(ipv6.ICMPTypeEchoReply, false)
+- if err := p.SetICMPFilter(&f); err != nil {
+- t.Fatalf("ipv6.PacketConn.SetICMPFilter failed: %v", err)
+- }
+- kf, err := p.ICMPFilter()
+- if err != nil {
+- t.Fatalf("ipv6.PacketConn.ICMPFilter failed: %v", err)
+- }
+- if !reflect.DeepEqual(kf, &f) {
+- t.Fatalf("got unexpected filter %#v; expected %#v", kf, f)
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/icmp_windows.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/icmp_windows.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/icmp_windows.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/icmp_windows.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,22 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-type rawICMPFilter struct {
+- // TODO(mikio): Implement this
+-}
+-
+-func (f *rawICMPFilter) set(typ ICMPType, block bool) {
+- // TODO(mikio): Implement this
+-}
+-
+-func (f *rawICMPFilter) setAll(block bool) {
+- // TODO(mikio): Implement this
+-}
+-
+-func (f *rawICMPFilter) willBlock(typ ICMPType) bool {
+- // TODO(mikio): Implement this
+- return false
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/mockicmp_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/mockicmp_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/mockicmp_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/mockicmp_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,112 +0,0 @@
+-// Copyright 2013 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 ipv6_test
+-
+-import (
+- "code.google.com/p/go.net/ipv6"
+- "errors"
+-)
+-
+-// icmpMessage represents an ICMP message.
+-type icmpMessage struct {
+- Type ipv6.ICMPType // type
+- Code int // code
+- Checksum int // checksum
+- Body icmpMessageBody // body
+-}
+-
+-// icmpMessageBody represents an ICMP message body.
+-type icmpMessageBody interface {
+- Len() int
+- Marshal() ([]byte, error)
+-}
+-
+-// Marshal returns the binary enconding of the ICMP echo request or
+-// reply message m.
+-func (m *icmpMessage) Marshal() ([]byte, error) {
+- b := []byte{byte(m.Type), byte(m.Code), 0, 0}
+- if m.Body != nil && m.Body.Len() != 0 {
+- mb, err := m.Body.Marshal()
+- if err != nil {
+- return nil, err
+- }
+- b = append(b, mb...)
+- }
+- switch m.Type {
+- case ipv6.ICMPTypeEchoRequest, ipv6.ICMPTypeEchoReply:
+- return b, nil
+- }
+- csumcv := len(b) - 1 // checksum coverage
+- s := uint32(0)
+- for i := 0; i < csumcv; i += 2 {
+- s += uint32(b[i+1])<<8 | uint32(b[i])
+- }
+- if csumcv&1 == 0 {
+- s += uint32(b[csumcv])
+- }
+- s = s>>16 + s&0xffff
+- s = s + s>>16
+- // Place checksum back in header; using ^= avoids the
+- // assumption the checksum bytes are zero.
+- b[2] ^= byte(^s & 0xff)
+- b[3] ^= byte(^s >> 8)
+- return b, nil
+-}
+-
+-// parseICMPMessage parses b as an ICMP message.
+-func parseICMPMessage(b []byte) (*icmpMessage, error) {
+- msglen := len(b)
+- if msglen < 4 {
+- return nil, errors.New("message too short")
+- }
+- m := &icmpMessage{Type: ipv6.ICMPType(b[0]), Code: int(b[1]), Checksum: int(b[2])<<8 | int(b[3])}
+- if msglen > 4 {
+- var err error
+- switch m.Type {
+- case ipv6.ICMPTypeEchoRequest, ipv6.ICMPTypeEchoReply:
+- m.Body, err = parseICMPEcho(b[4:])
+- if err != nil {
+- return nil, err
+- }
+- }
+- }
+- return m, nil
+-}
+-
+-// imcpEcho represenets an ICMP echo request or reply message body.
+-type icmpEcho struct {
+- ID int // identifier
+- Seq int // sequence number
+- Data []byte // data
+-}
+-
+-func (p *icmpEcho) Len() int {
+- if p == nil {
+- return 0
+- }
+- return 4 + len(p.Data)
+-}
+-
+-// Marshal returns the binary enconding of the ICMP echo request or
+-// reply message body p.
+-func (p *icmpEcho) Marshal() ([]byte, error) {
+- b := make([]byte, 4+len(p.Data))
+- b[0], b[1] = byte(p.ID>>8), byte(p.ID&0xff)
+- b[2], b[3] = byte(p.Seq>>8), byte(p.Seq&0xff)
+- copy(b[4:], p.Data)
+- return b, nil
+-}
+-
+-// parseICMPEcho parses b as an ICMP echo request or reply message
+-// body.
+-func parseICMPEcho(b []byte) (*icmpEcho, error) {
+- bodylen := len(b)
+- p := &icmpEcho{ID: int(b[0])<<8 | int(b[1]), Seq: int(b[2])<<8 | int(b[3])}
+- if bodylen > 4 {
+- p.Data = make([]byte, bodylen-4)
+- copy(p.Data, b[4:])
+- }
+- return p, nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/mocktransponder_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/mocktransponder_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/mocktransponder_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/mocktransponder_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,110 +0,0 @@
+-// Copyright 2013 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 ipv6_test
+-
+-import (
+- "net"
+- "testing"
+-)
+-
+-func isLinkLocalUnicast(ip net.IP) bool {
+- return ip.To4() == nil && ip.To16() != nil && ip.IsLinkLocalUnicast()
+-}
+-
+-func loopbackInterface() *net.Interface {
+- ift, err := net.Interfaces()
+- if err != nil {
+- return nil
+- }
+- for _, ifi := range ift {
+- if ifi.Flags&net.FlagLoopback == 0 || ifi.Flags&net.FlagUp == 0 {
+- continue
+- }
+- ifat, err := ifi.Addrs()
+- if err != nil {
+- continue
+- }
+- for _, ifa := range ifat {
+- switch ifa := ifa.(type) {
+- case *net.IPAddr:
+- if isLinkLocalUnicast(ifa.IP) {
+- return &ifi
+- }
+- case *net.IPNet:
+- if isLinkLocalUnicast(ifa.IP) {
+- return &ifi
+- }
+- }
+- }
+- }
+- return nil
+-}
+-
+-func isMulticastAvailable(ifi *net.Interface) (net.IP, bool) {
+- if ifi == nil || ifi.Flags&net.FlagUp == 0 || ifi.Flags&net.FlagMulticast == 0 {
+- return nil, false
+- }
+- ifat, err := ifi.Addrs()
+- if err != nil {
+- return nil, false
+- }
+- for _, ifa := range ifat {
+- switch ifa := ifa.(type) {
+- case *net.IPAddr:
+- if isLinkLocalUnicast(ifa.IP) {
+- return ifa.IP, true
+- }
+- case *net.IPNet:
+- if isLinkLocalUnicast(ifa.IP) {
+- return ifa.IP, true
+- }
+- }
+- }
+- return nil, false
+-}
+-
+-func connector(t *testing.T, network, addr string, done chan<- bool) {
+- defer func() { done <- true }()
+-
+- c, err := net.Dial(network, addr)
+- if err != nil {
+- t.Errorf("net.Dial failed: %v", err)
+- return
+- }
+- c.Close()
+-}
+-
+-func acceptor(t *testing.T, ln net.Listener, done chan<- bool) {
+- defer func() { done <- true }()
+-
+- c, err := ln.Accept()
+- if err != nil {
+- t.Errorf("net.Listener.Accept failed: %v", err)
+- return
+- }
+- c.Close()
+-}
+-
+-func transponder(t *testing.T, ln net.Listener, done chan<- bool) {
+- defer func() { done <- true }()
+-
+- c, err := ln.Accept()
+- if err != nil {
+- t.Errorf("net.Listener.Accept failed: %v", err)
+- return
+- }
+- defer c.Close()
+-
+- b := make([]byte, 128)
+- n, err := c.Read(b)
+- if err != nil {
+- t.Errorf("net.Conn.Read failed: %v", err)
+- return
+- }
+- if _, err := c.Write(b[:n]); err != nil {
+- t.Errorf("net.Conn.Write failed: %v", err)
+- return
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/multicastlistener_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/multicastlistener_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/multicastlistener_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/multicastlistener_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,197 +0,0 @@
+-// Copyright 2013 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 ipv6_test
+-
+-import (
+- "code.google.com/p/go.net/ipv6"
+- "fmt"
+- "net"
+- "os"
+- "runtime"
+- "testing"
+-)
+-
+-var udpMultipleGroupListenerTests = []net.Addr{
+- &net.UDPAddr{IP: net.ParseIP("ff02::114")}, // see RFC 4727
+- &net.UDPAddr{IP: net.ParseIP("ff02::1:114")},
+- &net.UDPAddr{IP: net.ParseIP("ff02::2:114")},
+-}
+-
+-func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+-
+- for _, gaddr := range udpMultipleGroupListenerTests {
+- c, err := net.ListenPacket("udp6", "[::]:0") // wildcard address with non-reusable port
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- p := ipv6.NewPacketConn(c)
+- var mift []*net.Interface
+-
+- ift, err := net.Interfaces()
+- if err != nil {
+- t.Fatalf("net.Interfaces failed: %v", err)
+- }
+- for i, ifi := range ift {
+- if _, ok := isMulticastAvailable(&ifi); !ok {
+- continue
+- }
+- if err := p.JoinGroup(&ifi, gaddr); err != nil {
+- t.Fatalf("ipv6.PacketConn.JoinGroup %v on %v failed: %v", gaddr, ifi, err)
+- }
+- mift = append(mift, &ift[i])
+- }
+- for _, ifi := range mift {
+- if err := p.LeaveGroup(ifi, gaddr); err != nil {
+- t.Fatalf("ipv6.PacketConn.LeaveGroup %v on %v failed: %v", gaddr, ifi, err)
+- }
+- }
+- }
+-}
+-
+-func TestUDPMultipleConnWithMultipleGroupListeners(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+-
+- for _, gaddr := range udpMultipleGroupListenerTests {
+- c1, err := net.ListenPacket("udp6", "[ff02::]:1024") // wildcard address with reusable port
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c1.Close()
+-
+- c2, err := net.ListenPacket("udp6", "[ff02::]:1024") // wildcard address with reusable port
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c2.Close()
+-
+- var ps [2]*ipv6.PacketConn
+- ps[0] = ipv6.NewPacketConn(c1)
+- ps[1] = ipv6.NewPacketConn(c2)
+- var mift []*net.Interface
+-
+- ift, err := net.Interfaces()
+- if err != nil {
+- t.Fatalf("net.Interfaces failed: %v", err)
+- }
+- for i, ifi := range ift {
+- if _, ok := isMulticastAvailable(&ifi); !ok {
+- continue
+- }
+- for _, p := range ps {
+- if err := p.JoinGroup(&ifi, gaddr); err != nil {
+- t.Fatalf("ipv6.PacketConn.JoinGroup %v on %v failed: %v", gaddr, ifi, err)
+- }
+- }
+- mift = append(mift, &ift[i])
+- }
+- for _, ifi := range mift {
+- for _, p := range ps {
+- if err := p.LeaveGroup(ifi, gaddr); err != nil {
+- t.Fatalf("ipv6.PacketConn.LeaveGroup %v on %v failed: %v", gaddr, ifi, err)
+- }
+- }
+- }
+- }
+-}
+-
+-func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+-
+- gaddr := &net.IPAddr{IP: net.ParseIP("ff02::114")} // see RFC 4727
+- type ml struct {
+- c *ipv6.PacketConn
+- ifi *net.Interface
+- }
+- var mlt []*ml
+-
+- ift, err := net.Interfaces()
+- if err != nil {
+- t.Fatalf("net.Interfaces failed: %v", err)
+- }
+- for i, ifi := range ift {
+- ip, ok := isMulticastAvailable(&ifi)
+- if !ok {
+- continue
+- }
+- c, err := net.ListenPacket("udp6", fmt.Sprintf("[%s%%%s]:1024", ip.String(), ifi.Name)) // unicast address with non-reusable port
+- if err != nil {
+- t.Fatalf("net.ListenPacket with %v failed: %v", ip, err)
+- }
+- defer c.Close()
+- p := ipv6.NewPacketConn(c)
+- if err := p.JoinGroup(&ifi, gaddr); err != nil {
+- t.Fatalf("ipv6.PacketConn.JoinGroup on %v failed: %v", ifi, err)
+- }
+- mlt = append(mlt, &ml{p, &ift[i]})
+- }
+- for _, m := range mlt {
+- if err := m.c.LeaveGroup(m.ifi, gaddr); err != nil {
+- t.Fatalf("ipv6.PacketConn.LeaveGroup on %v failed: %v", m.ifi, err)
+- }
+- }
+-}
+-
+-func TestIPSinglePacketConnWithSingleGroupListener(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+- if os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+-
+- c, err := net.ListenPacket("ip6:ipv6-icmp", "::")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- p := ipv6.NewPacketConn(c)
+- gaddr := &net.IPAddr{IP: net.ParseIP("ff02::114")} // see RFC 4727
+- var mift []*net.Interface
+-
+- ift, err := net.Interfaces()
+- if err != nil {
+- t.Fatalf("net.Interfaces failed: %v", err)
+- }
+- for i, ifi := range ift {
+- if _, ok := isMulticastAvailable(&ifi); !ok {
+- continue
+- }
+- if err := p.JoinGroup(&ifi, gaddr); err != nil {
+- t.Fatalf("ipv6.PacketConn.JoinGroup on %v failed: %v", ifi, err)
+- }
+- mift = append(mift, &ift[i])
+- }
+- for _, ifi := range mift {
+- if err := p.LeaveGroup(ifi, gaddr); err != nil {
+- t.Fatalf("ipv6.PacketConn.LeaveGroup on %v failed: %v", ifi, err)
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/multicastsockopt_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/multicastsockopt_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/multicastsockopt_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/multicastsockopt_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,76 +0,0 @@
+-// Copyright 2013 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 ipv6_test
+-
+-import (
+- "code.google.com/p/go.net/ipv6"
+- "net"
+- "os"
+- "runtime"
+- "testing"
+-)
+-
+-var packetConnMulticastSocketOptionTests = []struct {
+- net, proto, addr string
+- gaddr net.Addr
+-}{
+- {"udp6", "", "[ff02::]:0", &net.UDPAddr{IP: net.ParseIP("ff02::114")}}, // see RFC 4727
+- {"ip6", ":ipv6-icmp", "::", &net.IPAddr{IP: net.ParseIP("ff02::114")}}, // see RFC 4727
+-}
+-
+-func TestPacketConnMulticastSocketOptions(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+- ifi := loopbackInterface()
+- if ifi == nil {
+- t.Skipf("not available on %q", runtime.GOOS)
+- }
+-
+- for _, tt := range packetConnMulticastSocketOptionTests {
+- if tt.net == "ip6" && os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+- c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- p := ipv6.NewPacketConn(c)
+-
+- hoplim := 255
+- if err := p.SetMulticastHopLimit(hoplim); err != nil {
+- t.Fatalf("ipv6.PacketConn.SetMulticastHopLimit failed: %v", err)
+- }
+- if v, err := p.MulticastHopLimit(); err != nil {
+- t.Fatalf("ipv6.PacketConn.MulticastHopLimit failed: %v", err)
+- } else if v != hoplim {
+- t.Fatalf("got unexpected multicast hop limit %v; expected %v", v, hoplim)
+- }
+-
+- for _, toggle := range []bool{true, false} {
+- if err := p.SetMulticastLoopback(toggle); err != nil {
+- t.Fatalf("ipv6.PacketConn.SetMulticastLoopback failed: %v", err)
+- }
+- if v, err := p.MulticastLoopback(); err != nil {
+- t.Fatalf("ipv6.PacketConn.MulticastLoopback failed: %v", err)
+- } else if v != toggle {
+- t.Fatalf("got unexpected multicast loopback %v; expected %v", v, toggle)
+- }
+- }
+-
+- if err := p.JoinGroup(ifi, tt.gaddr); err != nil {
+- t.Fatalf("ipv6.PacketConn.JoinGroup(%v, %v) failed: %v", ifi, tt.gaddr, err)
+- }
+- if err := p.LeaveGroup(ifi, tt.gaddr); err != nil {
+- t.Fatalf("ipv6.PacketConn.LeaveGroup(%v, %v) failed: %v", ifi, tt.gaddr, err)
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/multicast_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/multicast_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/multicast_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/multicast_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,161 +0,0 @@
+-// Copyright 2013 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 ipv6_test
+-
+-import (
+- "code.google.com/p/go.net/ipv6"
+- "net"
+- "os"
+- "runtime"
+- "testing"
+-)
+-
+-func TestPacketConnReadWriteMulticastUDP(t *testing.T) {
+- switch runtime.GOOS {
+- case "freebsd": // due to a bug on loopback marking
+- // See http://www.freebsd.org/cgi/query-pr.cgi?pr=180065.
+- t.Skipf("not supported on %q", runtime.GOOS)
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+- ifi := loopbackInterface()
+- if ifi == nil {
+- t.Skipf("not available on %q", runtime.GOOS)
+- }
+-
+- c, err := net.ListenPacket("udp6", "[ff02::114]:0") // see RFC 4727
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- _, port, err := net.SplitHostPort(c.LocalAddr().String())
+- if err != nil {
+- t.Fatalf("net.SplitHostPort failed: %v", err)
+- }
+- dst, err := net.ResolveUDPAddr("udp6", "[ff02::114]:"+port) // see RFC 4727
+- if err != nil {
+- t.Fatalf("net.ResolveUDPAddr failed: %v", err)
+- }
+-
+- p := ipv6.NewPacketConn(c)
+- if err := p.JoinGroup(ifi, dst); err != nil {
+- t.Fatalf("ipv6.PacketConn.JoinGroup on %v failed: %v", ifi, err)
+- }
+- if err := p.SetMulticastInterface(ifi); err != nil {
+- t.Fatalf("ipv6.PacketConn.SetMulticastInterface failed: %v", err)
+- }
+- if err := p.SetMulticastLoopback(true); err != nil {
+- t.Fatalf("ipv6.PacketConn.SetMulticastLoopback failed: %v", err)
+- }
+-
+- cm := ipv6.ControlMessage{
+- TrafficClass: DiffServAF11 | CongestionExperienced,
+- IfIndex: ifi.Index,
+- }
+- cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagInterface | ipv6.FlagPathMTU
+-
+- for i, toggle := range []bool{true, false, true} {
+- if err := p.SetControlMessage(cf, toggle); err != nil {
+- t.Fatalf("ipv6.PacketConn.SetControlMessage failed: %v", err)
+- }
+- cm.HopLimit = i + 1
+- if _, err := p.WriteTo([]byte("HELLO-R-U-THERE"), &cm, dst); err != nil {
+- t.Fatalf("ipv6.PacketConn.WriteTo failed: %v", err)
+- }
+- b := make([]byte, 128)
+- if _, cm, _, err := p.ReadFrom(b); err != nil {
+- t.Fatalf("ipv6.PacketConn.ReadFrom failed: %v", err)
+- } else {
+- t.Logf("rcvd cmsg: %v", cm)
+- }
+- }
+-}
+-
+-func TestPacketConnReadWriteMulticastICMP(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+- if os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+- ifi := loopbackInterface()
+- if ifi == nil {
+- t.Skipf("not available on %q", runtime.GOOS)
+- }
+-
+- c, err := net.ListenPacket("ip6:ipv6-icmp", "::")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- dst, err := net.ResolveIPAddr("ip6", "ff02::114") // see RFC 4727
+- if err != nil {
+- t.Fatalf("net.ResolveIPAddr failed: %v", err)
+- }
+-
+- p := ipv6.NewPacketConn(c)
+- if err := p.JoinGroup(ifi, dst); err != nil {
+- t.Fatalf("ipv6.PacketConn.JoinGroup on %v failed: %v", ifi, err)
+- }
+- if err := p.SetMulticastInterface(ifi); err != nil {
+- t.Fatalf("ipv6.PacketConn.SetMulticastInterface failed: %v", err)
+- }
+- if err := p.SetMulticastLoopback(true); err != nil {
+- t.Fatalf("ipv6.PacketConn.SetMulticastLoopback failed: %v", err)
+- }
+-
+- cm := ipv6.ControlMessage{
+- TrafficClass: DiffServAF11 | CongestionExperienced,
+- IfIndex: ifi.Index,
+- }
+- cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagInterface | ipv6.FlagPathMTU
+-
+- var f ipv6.ICMPFilter
+- f.SetAll(true)
+- f.Set(ipv6.ICMPTypeEchoReply, false)
+- if err := p.SetICMPFilter(&f); err != nil {
+- t.Fatalf("ipv6.PacketConn.SetICMPFilter failed: %v", err)
+- }
+-
+- for i, toggle := range []bool{true, false, true} {
+- wb, err := (&icmpMessage{
+- Type: ipv6.ICMPTypeEchoRequest, Code: 0,
+- Body: &icmpEcho{
+- ID: os.Getpid() & 0xffff, Seq: i + 1,
+- Data: []byte("HELLO-R-U-THERE"),
+- },
+- }).Marshal()
+- if err != nil {
+- t.Fatalf("icmpMessage.Marshal failed: %v", err)
+- }
+- if err := p.SetControlMessage(cf, toggle); err != nil {
+- t.Fatalf("ipv6.PacketConn.SetControlMessage failed: %v", err)
+- }
+- cm.HopLimit = i + 1
+- if _, err := p.WriteTo(wb, &cm, dst); err != nil {
+- t.Fatalf("ipv6.PacketConn.WriteTo failed: %v", err)
+- }
+- b := make([]byte, 128)
+- if n, cm, _, err := p.ReadFrom(b); err != nil {
+- t.Fatalf("ipv6.PacketConn.ReadFrom failed: %v", err)
+- } else {
+- t.Logf("rcvd cmsg: %v", cm)
+- if m, err := parseICMPMessage(b[:n]); err != nil {
+- t.Fatalf("parseICMPMessage failed: %v", err)
+- } else if m.Type != ipv6.ICMPTypeEchoReply || m.Code != 0 {
+- t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv6.ICMPTypeEchoReply, 0)
+- }
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/payload_cmsg.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/payload_cmsg.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/payload_cmsg.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/payload_cmsg.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,70 +0,0 @@
+-// Copyright 2013 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 !plan9,!windows
+-
+-package ipv6
+-
+-import (
+- "net"
+- "syscall"
+-)
+-
+-// ReadFrom reads a payload of the received IPv6 datagram, from the
+-// endpoint c, copying the payload into b. It returns the number of
+-// bytes copied into b, the control message cm and the source address
+-// src of the received datagram.
+-func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
+- if !c.ok() {
+- return 0, nil, nil, syscall.EINVAL
+- }
+- oob := newControlMessage(&c.rawOpt)
+- var oobn int
+- switch c := c.PacketConn.(type) {
+- case *net.UDPConn:
+- if n, oobn, _, src, err = c.ReadMsgUDP(b, oob); err != nil {
+- return 0, nil, nil, err
+- }
+- case *net.IPConn:
+- if n, oobn, _, src, err = c.ReadMsgIP(b, oob); err != nil {
+- return 0, nil, nil, err
+- }
+- default:
+- return 0, nil, nil, errInvalidConnType
+- }
+- if cm, err = parseControlMessage(oob[:oobn]); err != nil {
+- return 0, nil, nil, err
+- }
+- if cm != nil {
+- cm.Src = netAddrToIP16(src)
+- }
+- return
+-}
+-
+-// WriteTo writes a payload of the IPv6 datagram, to the destination
+-// address dst through the endpoint c, copying the payload from b. It
+-// returns the number of bytes written. The control message cm allows
+-// the IPv6 header fields and the datagram path to be specified. The
+-// cm may be nil if control of the outgoing datagram is not required.
+-func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
+- if !c.ok() {
+- return 0, syscall.EINVAL
+- }
+- oob := marshalControlMessage(cm)
+- if dst == nil {
+- return 0, errMissingAddress
+- }
+- switch c := c.PacketConn.(type) {
+- case *net.UDPConn:
+- n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr))
+- case *net.IPConn:
+- n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr))
+- default:
+- return 0, errInvalidConnType
+- }
+- if err != nil {
+- return 0, err
+- }
+- return
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/payload.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/payload.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/payload.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/payload.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,15 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import "net"
+-
+-// A payloadHandler represents the IPv6 datagram payload handler.
+-type payloadHandler struct {
+- net.PacketConn
+- rawOpt
+-}
+-
+-func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil }
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/payload_noncmsg.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/payload_noncmsg.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/payload_noncmsg.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/payload_noncmsg.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,41 +0,0 @@
+-// Copyright 2013 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 plan9 windows
+-
+-package ipv6
+-
+-import (
+- "net"
+- "syscall"
+-)
+-
+-// ReadFrom reads a payload of the received IPv6 datagram, from the
+-// endpoint c, copying the payload into b. It returns the number of
+-// bytes copied into b, the control message cm and the source address
+-// src of the received datagram.
+-func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) {
+- if !c.ok() {
+- return 0, nil, nil, syscall.EINVAL
+- }
+- if n, src, err = c.PacketConn.ReadFrom(b); err != nil {
+- return 0, nil, nil, err
+- }
+- return
+-}
+-
+-// WriteTo writes a payload of the IPv6 datagram, to the destination
+-// address dst through the endpoint c, copying the payload from b. It
+-// returns the number of bytes written. The control message cm allows
+-// the IPv6 header fields and the datagram path to be specified. The
+-// cm may be nil if control of the outgoing datagram is not required.
+-func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) {
+- if !c.ok() {
+- return 0, syscall.EINVAL
+- }
+- if dst == nil {
+- return 0, errMissingAddress
+- }
+- return c.PacketConn.WriteTo(b, dst)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc2292_darwin.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc2292_darwin.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc2292_darwin.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc2292_darwin.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,66 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import (
+- "os"
+- "syscall"
+-)
+-
+-func ipv6ReceiveTrafficClass(fd int) (bool, error) {
+- return false, errNotSupported
+-}
+-
+-func setIPv6ReceiveTrafficClass(fd int, v bool) error {
+- return errNotSupported
+-}
+-
+-func ipv6ReceiveHopLimit(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_2292HOPLIMIT)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv6ReceiveHopLimit(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_2292HOPLIMIT, boolint(v)))
+-}
+-
+-func ipv6ReceivePacketInfo(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_2292PKTINFO)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv6ReceivePacketInfo(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_2292PKTINFO, boolint(v)))
+-}
+-
+-func ipv6PathMTU(fd int) (int, error) {
+- return 0, errNotSupported
+-}
+-
+-func ipv6ReceivePathMTU(fd int) (bool, error) {
+- return false, errNotSupported
+-}
+-
+-func setIPv6ReceivePathMTU(fd int, v bool) error {
+- return errNotSupported
+-}
+-
+-func ipv6ICMPFilter(fd int) (*ICMPFilter, error) {
+- v, err := syscall.GetsockoptICMPv6Filter(fd, ianaProtocolIPv6ICMP, syscall.ICMP6_FILTER)
+- if err != nil {
+- return nil, os.NewSyscallError("getsockopt", err)
+- }
+- return &ICMPFilter{rawICMPFilter: rawICMPFilter{*v}}, nil
+-}
+-
+-func setIPv6ICMPFilter(fd int, f *ICMPFilter) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptICMPv6Filter(fd, ianaProtocolIPv6ICMP, syscall.ICMP6_FILTER, &f.rawICMPFilter.ICMPv6Filter))
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_bsd.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_bsd.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_bsd.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_bsd.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,19 +0,0 @@
+-// Copyright 2013 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 darwin freebsd netbsd openbsd
+-
+-package ipv6
+-
+-import (
+- "os"
+- "syscall"
+-)
+-
+-func setIPv6Checksum(fd int, on bool, offset int) error {
+- if !on {
+- offset = -1
+- }
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_CHECKSUM, offset))
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_linux.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_linux.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_linux.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_linux.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,17 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import (
+- "os"
+- "syscall"
+-)
+-
+-func setIPv6Checksum(fd int, on bool, offset int) error {
+- if !on {
+- offset = -1
+- }
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolReserved, syscall.IPV6_CHECKSUM, offset))
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_unix.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_unix.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_unix.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_unix.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,114 +0,0 @@
+-// Copyright 2013 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 darwin freebsd linux netbsd openbsd
+-
+-package ipv6
+-
+-import (
+- "net"
+- "os"
+- "syscall"
+-)
+-
+-func ipv6TrafficClass(fd int) (int, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_TCLASS)
+- if err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return v, nil
+-}
+-
+-func setIPv6TrafficClass(fd, v int) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_TCLASS, v))
+-}
+-
+-func ipv6HopLimit(fd int) (int, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_UNICAST_HOPS)
+- if err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return v, nil
+-}
+-
+-func setIPv6HopLimit(fd, v int) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_UNICAST_HOPS, v))
+-}
+-
+-func ipv6Checksum(fd int) (bool, int, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_CHECKSUM)
+- if err != nil {
+- return false, 0, os.NewSyscallError("getsockopt", err)
+- }
+- on := true
+- if v == -1 {
+- on = false
+- }
+- return on, v, nil
+-}
+-
+-func ipv6MulticastHopLimit(fd int) (int, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_HOPS)
+- if err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return v, nil
+-}
+-
+-func setIPv6MulticastHopLimit(fd, v int) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_HOPS, v))
+-}
+-
+-func ipv6MulticastInterface(fd int) (*net.Interface, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_IF)
+- if err != nil {
+- return nil, os.NewSyscallError("getsockopt", err)
+- }
+- if v == 0 {
+- return nil, nil
+- }
+- ifi, err := net.InterfaceByIndex(v)
+- if err != nil {
+- return nil, err
+- }
+- return ifi, nil
+-}
+-
+-func setIPv6MulticastInterface(fd int, ifi *net.Interface) error {
+- var v int
+- if ifi != nil {
+- v = ifi.Index
+- }
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_IF, v))
+-}
+-
+-func ipv6MulticastLoopback(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_LOOP)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv6MulticastLoopback(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_LOOP, boolint(v)))
+-}
+-
+-func joinIPv6Group(fd int, ifi *net.Interface, grp net.IP) error {
+- mreq := syscall.IPv6Mreq{}
+- copy(mreq.Multiaddr[:], grp)
+- if ifi != nil {
+- mreq.Interface = uint32(ifi.Index)
+- }
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptIPv6Mreq(fd, ianaProtocolIPv6, syscall.IPV6_JOIN_GROUP, &mreq))
+-}
+-
+-func leaveIPv6Group(fd int, ifi *net.Interface, grp net.IP) error {
+- mreq := syscall.IPv6Mreq{}
+- copy(mreq.Multiaddr[:], grp)
+- if ifi != nil {
+- mreq.Interface = uint32(ifi.Index)
+- }
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptIPv6Mreq(fd, ianaProtocolIPv6, syscall.IPV6_LEAVE_GROUP, &mreq))
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_windows.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_windows.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_windows.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3493_windows.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,116 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import (
+- "net"
+- "os"
+- "syscall"
+- "unsafe"
+-)
+-
+-func ipv6TrafficClass(fd syscall.Handle) (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EWINDOWS
+-}
+-
+-func setIPv6TrafficClass(fd syscall.Handle, v int) error {
+- // TODO(mikio): Implement this
+- return syscall.EWINDOWS
+-}
+-
+-func ipv6HopLimit(fd syscall.Handle) (int, error) {
+- var v int32
+- l := int32(4)
+- if err := syscall.Getsockopt(fd, ianaProtocolIPv6, syscall.IPV6_UNICAST_HOPS, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return int(v), nil
+-}
+-
+-func setIPv6HopLimit(fd syscall.Handle, v int) error {
+- vv := int32(v)
+- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, syscall.IPV6_UNICAST_HOPS, (*byte)(unsafe.Pointer(&vv)), 4))
+-}
+-
+-func ipv6Checksum(fd syscall.Handle) (bool, int, error) {
+- // TODO(mikio): Implement this
+- return false, 0, syscall.EWINDOWS
+-}
+-
+-func ipv6MulticastHopLimit(fd syscall.Handle) (int, error) {
+- var v int32
+- l := int32(4)
+- if err := syscall.Getsockopt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_HOPS, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return int(v), nil
+-}
+-
+-func setIPv6MulticastHopLimit(fd syscall.Handle, v int) error {
+- vv := int32(v)
+- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_HOPS, (*byte)(unsafe.Pointer(&vv)), 4))
+-}
+-
+-func ipv6MulticastInterface(fd syscall.Handle) (*net.Interface, error) {
+- var v int32
+- l := int32(4)
+- if err := syscall.Getsockopt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_IF, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
+- return nil, os.NewSyscallError("getsockopt", err)
+- }
+- if v == 0 {
+- return nil, nil
+- }
+- ifi, err := net.InterfaceByIndex(int(v))
+- if err != nil {
+- return nil, err
+- }
+- return ifi, nil
+-}
+-
+-func setIPv6MulticastInterface(fd syscall.Handle, ifi *net.Interface) error {
+- var v int32
+- if ifi != nil {
+- v = int32(ifi.Index)
+- }
+- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_IF, (*byte)(unsafe.Pointer(&v)), 4))
+-}
+-
+-func ipv6MulticastLoopback(fd syscall.Handle) (bool, error) {
+- var v int32
+- l := int32(4)
+- if err := syscall.Getsockopt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_LOOP, (*byte)(unsafe.Pointer(&v)), &l); err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv6MulticastLoopback(fd syscall.Handle, v bool) error {
+- vv := int32(boolint(v))
+- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, syscall.IPV6_MULTICAST_LOOP, (*byte)(unsafe.Pointer(&vv)), 4))
+-}
+-
+-func joinIPv6Group(fd syscall.Handle, ifi *net.Interface, grp net.IP) error {
+- mreq := syscall.IPv6Mreq{}
+- copy(mreq.Multiaddr[:], grp)
+- if ifi != nil {
+- mreq.Interface = uint32(ifi.Index)
+- }
+- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, syscall.IPV6_JOIN_GROUP, (*byte)(unsafe.Pointer(&mreq)), int32(unsafe.Sizeof(mreq))))
+-}
+-
+-func leaveIPv6Group(fd syscall.Handle, ifi *net.Interface, grp net.IP) error {
+- mreq := syscall.IPv6Mreq{}
+- copy(mreq.Multiaddr[:], grp)
+- if ifi != nil {
+- mreq.Interface = uint32(ifi.Index)
+- }
+- return os.NewSyscallError("setsockopt", syscall.Setsockopt(fd, ianaProtocolIPv6, syscall.IPV6_LEAVE_GROUP, (*byte)(unsafe.Pointer(&mreq)), int32(unsafe.Sizeof(mreq))))
+-}
+-
+-func setIPv6Checksum(fd syscall.Handle, on bool, offset int) error {
+- // TODO(mikio): Implement this
+- return syscall.EWINDOWS
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_bsd.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_bsd.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_bsd.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_bsd.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,44 +0,0 @@
+-// Copyright 2013 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 netbsd openbsd
+-
+-package ipv6
+-
+-import (
+- "os"
+- "syscall"
+-)
+-
+-func ipv6PathMTU(fd int) (int, error) {
+- v, err := syscall.GetsockoptIPv6MTUInfo(fd, ianaProtocolIPv6, syscall.IPV6_PATHMTU)
+- if err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return int(v.Mtu), nil
+-}
+-
+-func ipv6ReceivePathMTU(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_RECVPATHMTU)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv6ReceivePathMTU(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_RECVPATHMTU, boolint(v)))
+-}
+-
+-func ipv6ICMPFilter(fd int) (*ICMPFilter, error) {
+- v, err := syscall.GetsockoptICMPv6Filter(fd, ianaProtocolIPv6ICMP, syscall.ICMP6_FILTER)
+- if err != nil {
+- return nil, os.NewSyscallError("getsockopt", err)
+- }
+- return &ICMPFilter{rawICMPFilter: rawICMPFilter{*v}}, nil
+-}
+-
+-func setIPv6ICMPFilter(fd int, f *ICMPFilter) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptICMPv6Filter(fd, ianaProtocolIPv6ICMP, syscall.ICMP6_FILTER, &f.rawICMPFilter.ICMPv6Filter))
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_linux.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_linux.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_linux.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_linux.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,42 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import (
+- "os"
+- "syscall"
+-)
+-
+-func ipv6PathMTU(fd int) (int, error) {
+- v, err := syscall.GetsockoptIPv6MTUInfo(fd, ianaProtocolIPv6, syscall_IPV6_PATHMTU)
+- if err != nil {
+- return 0, os.NewSyscallError("getsockopt", err)
+- }
+- return int(v.Mtu), nil
+-}
+-
+-func ipv6ReceivePathMTU(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, syscall_IPV6_RECVPATHMTU)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv6ReceivePathMTU(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, syscall_IPV6_RECVPATHMTU, boolint(v)))
+-}
+-
+-func ipv6ICMPFilter(fd int) (*ICMPFilter, error) {
+- v, err := syscall.GetsockoptICMPv6Filter(fd, ianaProtocolIPv6ICMP, syscall.ICMPV6_FILTER)
+- if err != nil {
+- return nil, os.NewSyscallError("getsockopt", err)
+- }
+- return &ICMPFilter{rawICMPFilter: rawICMPFilter{*v}}, nil
+-}
+-
+-func setIPv6ICMPFilter(fd int, f *ICMPFilter) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptICMPv6Filter(fd, ianaProtocolIPv6ICMP, syscall.ICMPV6_FILTER, &f.rawICMPFilter.ICMPv6Filter))
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_plan9.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_plan9.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_plan9.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_plan9.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,12 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import "syscall"
+-
+-func ipv6PathMTU(fd int) (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EPLAN9
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_unix.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_unix.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_unix.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_unix.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,48 +0,0 @@
+-// Copyright 2013 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 linux netbsd openbsd
+-
+-package ipv6
+-
+-import (
+- "os"
+- "syscall"
+-)
+-
+-func ipv6ReceiveTrafficClass(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_RECVTCLASS)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv6ReceiveTrafficClass(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_RECVTCLASS, boolint(v)))
+-}
+-
+-func ipv6ReceiveHopLimit(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_RECVHOPLIMIT)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv6ReceiveHopLimit(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_RECVHOPLIMIT, boolint(v)))
+-}
+-
+-func ipv6ReceivePacketInfo(fd int) (bool, error) {
+- v, err := syscall.GetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_RECVPKTINFO)
+- if err != nil {
+- return false, os.NewSyscallError("getsockopt", err)
+- }
+- return v == 1, nil
+-}
+-
+-func setIPv6ReceivePacketInfo(fd int, v bool) error {
+- return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(fd, ianaProtocolIPv6, syscall.IPV6_RECVPKTINFO, boolint(v)))
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_windows.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_windows.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_windows.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_rfc3542_windows.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,62 +0,0 @@
+-// Copyright 2013 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 ipv6
+-
+-import "syscall"
+-
+-func ipv6ReceiveTrafficClass(fd syscall.Handle) (bool, error) {
+- // TODO(mikio): Implement this
+- return false, syscall.EWINDOWS
+-}
+-
+-func setIPv6ReceiveTrafficClass(fd syscall.Handle, v bool) error {
+- // TODO(mikio): Implement this
+- return syscall.EWINDOWS
+-}
+-
+-func ipv6ReceiveHopLimit(fd syscall.Handle) (bool, error) {
+- // TODO(mikio): Implement this
+- return false, syscall.EWINDOWS
+-}
+-
+-func setIPv6ReceiveHopLimit(fd syscall.Handle, v bool) error {
+- // TODO(mikio): Implement this
+- return syscall.EWINDOWS
+-}
+-
+-func ipv6ReceivePacketInfo(fd syscall.Handle) (bool, error) {
+- // TODO(mikio): Implement this
+- return false, syscall.EWINDOWS
+-}
+-
+-func setIPv6ReceivePacketInfo(fd syscall.Handle, v bool) error {
+- // TODO(mikio): Implement this
+- return syscall.EWINDOWS
+-}
+-
+-func ipv6PathMTU(fd syscall.Handle) (int, error) {
+- // TODO(mikio): Implement this
+- return 0, syscall.EWINDOWS
+-}
+-
+-func ipv6ReceivePathMTU(fd syscall.Handle) (bool, error) {
+- // TODO(mikio): Implement this
+- return false, syscall.EWINDOWS
+-}
+-
+-func setIPv6ReceivePathMTU(fd syscall.Handle, v bool) error {
+- // TODO(mikio): Implement this
+- return syscall.EWINDOWS
+-}
+-
+-func ipv6ICMPFilter(fd syscall.Handle) (*ICMPFilter, error) {
+- // TODO(mikio): Implement this
+- return nil, syscall.EWINDOWS
+-}
+-
+-func setIPv6ICMPFilter(fd syscall.Handle, f *ICMPFilter) error {
+- // TODO(mikio): Implement this
+- return syscall.EWINDOWS
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/sockopt_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/sockopt_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,136 +0,0 @@
+-// Copyright 2013 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 ipv6_test
+-
+-import (
+- "code.google.com/p/go.net/ipv6"
+- "net"
+- "os"
+- "runtime"
+- "testing"
+-)
+-
+-var supportsIPv6 bool
+-
+-func init() {
+- if ln, err := net.Listen("tcp6", "[::1]:0"); err == nil {
+- ln.Close()
+- supportsIPv6 = true
+- }
+-}
+-
+-var condFatalf = func() func(*testing.T, string, ...interface{}) {
+- // A few APIs are not implemented yet on some platforms.
+- switch runtime.GOOS {
+- case "darwin", "plan9", "windows":
+- return (*testing.T).Logf
+- }
+- return (*testing.T).Fatalf
+-}()
+-
+-func TestConnInitiatorPathMTU(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+-
+- ln, err := net.Listen("tcp6", "[::1]:0")
+- if err != nil {
+- t.Fatalf("net.Listen failed: %v", err)
+- }
+- defer ln.Close()
+-
+- done := make(chan bool)
+- go acceptor(t, ln, done)
+-
+- c, err := net.Dial("tcp6", ln.Addr().String())
+- if err != nil {
+- t.Fatalf("net.Dial failed: %v", err)
+- }
+- defer c.Close()
+-
+- if pmtu, err := ipv6.NewConn(c).PathMTU(); err != nil {
+- condFatalf(t, "ipv6.Conn.PathMTU failed: %v", err)
+- } else {
+- t.Logf("path mtu for %v: %v", c.RemoteAddr(), pmtu)
+- }
+-
+- <-done
+-}
+-
+-func TestConnResponderPathMTU(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+-
+- ln, err := net.Listen("tcp6", "[::1]:0")
+- if err != nil {
+- t.Fatalf("net.Listen failed: %v", err)
+- }
+- defer ln.Close()
+-
+- done := make(chan bool)
+- go connector(t, "tcp6", ln.Addr().String(), done)
+-
+- c, err := ln.Accept()
+- if err != nil {
+- t.Fatalf("net.Accept failed: %v", err)
+- }
+- defer c.Close()
+-
+- if pmtu, err := ipv6.NewConn(c).PathMTU(); err != nil {
+- condFatalf(t, "ipv6.Conn.PathMTU failed: %v", err)
+- } else {
+- t.Logf("path mtu for %v: %v", c.RemoteAddr(), pmtu)
+- }
+-
+- <-done
+-}
+-
+-func TestPacketConnChecksum(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+- if os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+-
+- c, err := net.ListenPacket("ip6:89", "::") // OSPF for IPv6
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- p := ipv6.NewPacketConn(c)
+- offset := 12 // see RFC 5340
+-
+- for _, toggle := range []bool{false, true} {
+- if err := p.SetChecksum(toggle, offset); err != nil {
+- if toggle {
+- t.Fatalf("ipv6.PacketConn.SetChecksum(%v, %v) failed: %v", toggle, offset, err)
+- } else {
+- // Some platforms never allow to disable the kernel
+- // checksum processing.
+- t.Logf("ipv6.PacketConn.SetChecksum(%v, %v) failed: %v", toggle, offset, err)
+- }
+- }
+- if on, offset, err := p.Checksum(); err != nil {
+- t.Fatalf("ipv6.PacketConn.Checksum failed: %v", err)
+- } else {
+- t.Logf("kernel checksum processing enabled=%v, offset=%v", on, offset)
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/unicastsockopt_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/unicastsockopt_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/unicastsockopt_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/unicastsockopt_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,101 +0,0 @@
+-// Copyright 2013 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 ipv6_test
+-
+-import (
+- "code.google.com/p/go.net/ipv6"
+- "net"
+- "os"
+- "runtime"
+- "testing"
+-)
+-
+-func TestConnUnicastSocketOptions(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+-
+- ln, err := net.Listen("tcp6", "[::1]:0")
+- if err != nil {
+- t.Fatalf("net.Listen failed: %v", err)
+- }
+- defer ln.Close()
+-
+- done := make(chan bool)
+- go acceptor(t, ln, done)
+-
+- c, err := net.Dial("tcp6", ln.Addr().String())
+- if err != nil {
+- t.Fatalf("net.Dial failed: %v", err)
+- }
+- defer c.Close()
+-
+- testUnicastSocketOptions(t, ipv6.NewConn(c))
+-
+- <-done
+-}
+-
+-var packetConnUnicastSocketOptionTests = []struct {
+- net, proto, addr string
+-}{
+- {"udp6", "", "[::1]:0"},
+- {"ip6", ":ipv6-icmp", "::1"},
+-}
+-
+-func TestPacketConnUnicastSocketOptions(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+-
+- for _, tt := range packetConnUnicastSocketOptionTests {
+- if tt.net == "ip6" && os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+- c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
+- if err != nil {
+- t.Fatalf("net.ListenPacket(%q, %q) failed: %v", tt.net+tt.proto, tt.addr, err)
+- }
+- defer c.Close()
+-
+- testUnicastSocketOptions(t, ipv6.NewPacketConn(c))
+- }
+-}
+-
+-type testIPv6UnicastConn interface {
+- TrafficClass() (int, error)
+- SetTrafficClass(int) error
+- HopLimit() (int, error)
+- SetHopLimit(int) error
+-}
+-
+-func testUnicastSocketOptions(t *testing.T, c testIPv6UnicastConn) {
+- tclass := DiffServCS0 | NotECNTransport
+- if err := c.SetTrafficClass(tclass); err != nil {
+- t.Fatalf("ipv6.Conn.SetTrafficClass failed: %v", err)
+- }
+- if v, err := c.TrafficClass(); err != nil {
+- t.Fatalf("ipv6.Conn.TrafficClass failed: %v", err)
+- } else if v != tclass {
+- t.Fatalf("got unexpected traffic class %v; expected %v", v, tclass)
+- }
+-
+- hoplim := 255
+- if err := c.SetHopLimit(hoplim); err != nil {
+- t.Fatalf("ipv6.Conn.SetHopLimit failed: %v", err)
+- }
+- if v, err := c.HopLimit(); err != nil {
+- t.Fatalf("ipv6.Conn.HopLimit failed: %v", err)
+- } else if v != hoplim {
+- t.Fatalf("got unexpected hop limit %v; expected %v", v, hoplim)
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/unicast_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/unicast_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/ipv6/unicast_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/ipv6/unicast_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,203 +0,0 @@
+-// Copyright 2013 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 ipv6_test
+-
+-import (
+- "code.google.com/p/go.net/ipv6"
+- "net"
+- "os"
+- "runtime"
+- "testing"
+-)
+-
+-func benchmarkUDPListener() (net.PacketConn, net.Addr, error) {
+- c, err := net.ListenPacket("udp6", "[::1]:0")
+- if err != nil {
+- return nil, nil, err
+- }
+- dst, err := net.ResolveUDPAddr("udp6", c.LocalAddr().String())
+- if err != nil {
+- c.Close()
+- return nil, nil, err
+- }
+- return c, dst, nil
+-}
+-
+-func BenchmarkReadWriteNetUDP(b *testing.B) {
+- c, dst, err := benchmarkUDPListener()
+- if err != nil {
+- b.Fatalf("benchmarkUDPListener failed: %v", err)
+- }
+- defer c.Close()
+-
+- wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128)
+- b.ResetTimer()
+- for i := 0; i < b.N; i++ {
+- benchmarkReadWriteNetUDP(b, c, wb, rb, dst)
+- }
+-}
+-
+-func benchmarkReadWriteNetUDP(b *testing.B, c net.PacketConn, wb, rb []byte, dst net.Addr) {
+- if _, err := c.WriteTo(wb, dst); err != nil {
+- b.Fatalf("net.PacketConn.WriteTo failed: %v", err)
+- }
+- if _, _, err := c.ReadFrom(rb); err != nil {
+- b.Fatalf("net.PacketConn.ReadFrom failed: %v", err)
+- }
+-}
+-
+-func BenchmarkReadWriteIPv6UDP(b *testing.B) {
+- c, dst, err := benchmarkUDPListener()
+- if err != nil {
+- b.Fatalf("benchmarkUDPListener failed: %v", err)
+- }
+- defer c.Close()
+-
+- p := ipv6.NewPacketConn(c)
+- cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagInterface | ipv6.FlagPathMTU
+- if err := p.SetControlMessage(cf, true); err != nil {
+- b.Fatalf("ipv6.PacketConn.SetControlMessage failed: %v", err)
+- }
+- ifi := loopbackInterface()
+-
+- wb, rb := []byte("HELLO-R-U-THERE"), make([]byte, 128)
+- b.ResetTimer()
+- for i := 0; i < b.N; i++ {
+- benchmarkReadWriteIPv6UDP(b, p, wb, rb, dst, ifi)
+- }
+-}
+-
+-func benchmarkReadWriteIPv6UDP(b *testing.B, p *ipv6.PacketConn, wb, rb []byte, dst net.Addr, ifi *net.Interface) {
+- cm := ipv6.ControlMessage{
+- TrafficClass: DiffServAF11 | CongestionExperienced,
+- HopLimit: 1,
+- }
+- if ifi != nil {
+- cm.IfIndex = ifi.Index
+- }
+- if _, err := p.WriteTo(wb, &cm, dst); err != nil {
+- b.Fatalf("ipv6.PacketConn.WriteTo failed: %v", err)
+- }
+- if _, _, _, err := p.ReadFrom(rb); err != nil {
+- b.Fatalf("ipv6.PacketConn.ReadFrom failed: %v", err)
+- }
+-}
+-
+-func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+-
+- c, err := net.ListenPacket("udp6", "[::1]:0")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- dst, err := net.ResolveUDPAddr("udp6", c.LocalAddr().String())
+- if err != nil {
+- t.Fatalf("net.ResolveUDPAddr failed: %v", err)
+- }
+-
+- p := ipv6.NewPacketConn(c)
+- cm := ipv6.ControlMessage{
+- TrafficClass: DiffServAF11 | CongestionExperienced,
+- }
+- cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagInterface | ipv6.FlagPathMTU
+- ifi := loopbackInterface()
+- if ifi != nil {
+- cm.IfIndex = ifi.Index
+- }
+-
+- for i, toggle := range []bool{true, false, true} {
+- if err := p.SetControlMessage(cf, toggle); err != nil {
+- t.Fatalf("ipv6.PacketConn.SetControlMessage failed: %v", err)
+- }
+- cm.HopLimit = i + 1
+- if _, err := p.WriteTo([]byte("HELLO-R-U-THERE"), &cm, dst); err != nil {
+- t.Fatalf("ipv6.PacketConn.WriteTo failed: %v", err)
+- }
+- b := make([]byte, 128)
+- if _, cm, _, err := p.ReadFrom(b); err != nil {
+- t.Fatalf("ipv6.PacketConn.ReadFrom failed: %v", err)
+- } else {
+- t.Logf("rcvd cmsg: %v", cm)
+- }
+- }
+-}
+-
+-func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
+- switch runtime.GOOS {
+- case "plan9", "windows":
+- t.Skipf("not supported on %q", runtime.GOOS)
+- }
+- if !supportsIPv6 {
+- t.Skip("ipv6 is not supported")
+- }
+- if os.Getuid() != 0 {
+- t.Skip("must be root")
+- }
+-
+- c, err := net.ListenPacket("ip6:ipv6-icmp", "::1")
+- if err != nil {
+- t.Fatalf("net.ListenPacket failed: %v", err)
+- }
+- defer c.Close()
+-
+- dst, err := net.ResolveIPAddr("ip6", "::1")
+- if err != nil {
+- t.Fatalf("net.ResolveIPAddr failed: %v", err)
+- }
+-
+- p := ipv6.NewPacketConn(c)
+- cm := ipv6.ControlMessage{TrafficClass: DiffServAF11 | CongestionExperienced}
+- cf := ipv6.FlagTrafficClass | ipv6.FlagHopLimit | ipv6.FlagInterface | ipv6.FlagPathMTU
+- ifi := loopbackInterface()
+- if ifi != nil {
+- cm.IfIndex = ifi.Index
+- }
+-
+- var f ipv6.ICMPFilter
+- f.SetAll(true)
+- f.Set(ipv6.ICMPTypeEchoReply, false)
+- if err := p.SetICMPFilter(&f); err != nil {
+- t.Fatalf("ipv6.PacketConn.SetICMPFilter failed: %v", err)
+- }
+-
+- for i, toggle := range []bool{true, false, true} {
+- wb, err := (&icmpMessage{
+- Type: ipv6.ICMPTypeEchoRequest, Code: 0,
+- Body: &icmpEcho{
+- ID: os.Getpid() & 0xffff, Seq: i + 1,
+- Data: []byte("HELLO-R-U-THERE"),
+- },
+- }).Marshal()
+- if err != nil {
+- t.Fatalf("icmpMessage.Marshal failed: %v", err)
+- }
+- if err := p.SetControlMessage(cf, toggle); err != nil {
+- t.Fatalf("ipv6.PacketConn.SetControlMessage failed: %v", err)
+- }
+- cm.HopLimit = i + 1
+- if _, err := p.WriteTo(wb, &cm, dst); err != nil {
+- t.Fatalf("ipv6.PacketConn.WriteTo failed: %v", err)
+- }
+- b := make([]byte, 128)
+- if n, cm, _, err := p.ReadFrom(b); err != nil {
+- t.Fatalf("ipv6.PacketConn.ReadFrom failed: %v", err)
+- } else {
+- t.Logf("rcvd cmsg: %v", cm)
+- if m, err := parseICMPMessage(b[:n]); err != nil {
+- t.Fatalf("parseICMPMessage failed: %v", err)
+- } else if m.Type != ipv6.ICMPTypeEchoReply || m.Code != 0 {
+- t.Fatalf("got type=%v, code=%v; expected type=%v, code=%v", m.Type, m.Code, ipv6.ICMPTypeEchoReply, 0)
+- }
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/LICENSE docker-devmapper/vendor/src/code.google.com/p/go.net/LICENSE
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/LICENSE 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/LICENSE 1969-12-31 18:00:00.000000000 -0600
+@@ -1,27 +0,0 @@
+-Copyright (c) 2009 The Go Authors. All rights reserved.
+-
+-Redistribution and use in source and binary forms, with or without
+-modification, are permitted provided that the following conditions are
+-met:
+-
+- * Redistributions of source code must retain the above copyright
+-notice, this list of conditions and the following disclaimer.
+- * Redistributions in binary form must reproduce the above
+-copyright notice, this list of conditions and the following disclaimer
+-in the documentation and/or other materials provided with the
+-distribution.
+- * Neither the name of Google Inc. nor the names of its
+-contributors may be used to endorse or promote products derived from
+-this software without specific prior written permission.
+-
+-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/PATENTS docker-devmapper/vendor/src/code.google.com/p/go.net/PATENTS
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/PATENTS 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/PATENTS 1969-12-31 18:00:00.000000000 -0600
+@@ -1,22 +0,0 @@
+-Additional IP Rights Grant (Patents)
+-
+-"This implementation" means the copyrightable works distributed by
+-Google as part of the Go project.
+-
+-Google hereby grants to You a perpetual, worldwide, non-exclusive,
+-no-charge, royalty-free, irrevocable (except as stated in this section)
+-patent license to make, have made, use, offer to sell, sell, import,
+-transfer and otherwise run, modify and propagate the contents of this
+-implementation of Go, where such license applies only to those patent
+-claims, both currently owned or controlled by Google and acquired in
+-the future, licensable by Google that are necessarily infringed by this
+-implementation of Go. This grant does not include claims that would be
+-infringed only as a consequence of further modification of this
+-implementation. If you or your agent or exclusive licensee institute or
+-order or agree to the institution of patent litigation against any
+-entity (including a cross-claim or counterclaim in a lawsuit) alleging
+-that this implementation of Go or any code incorporated within this
+-implementation of Go constitutes direct or contributory patent
+-infringement, or inducement of patent infringement, then any patent
+-rights granted to you under this License for this implementation of Go
+-shall terminate as of the date such litigation is filed.
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/proxy/direct.go docker-devmapper/vendor/src/code.google.com/p/go.net/proxy/direct.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/proxy/direct.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/proxy/direct.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,18 +0,0 @@
+-// Copyright 2011 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 proxy
+-
+-import (
+- "net"
+-)
+-
+-type direct struct{}
+-
+-// Direct is a direct proxy: one that makes network connections directly.
+-var Direct = direct{}
+-
+-func (direct) Dial(network, addr string) (net.Conn, error) {
+- return net.Dial(network, addr)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/proxy/per_host.go docker-devmapper/vendor/src/code.google.com/p/go.net/proxy/per_host.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/proxy/per_host.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/proxy/per_host.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,140 +0,0 @@
+-// Copyright 2011 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 proxy
+-
+-import (
+- "net"
+- "strings"
+-)
+-
+-// A PerHost directs connections to a default Dialer unless the hostname
+-// requested matches one of a number of exceptions.
+-type PerHost struct {
+- def, bypass Dialer
+-
+- bypassNetworks []*net.IPNet
+- bypassIPs []net.IP
+- bypassZones []string
+- bypassHosts []string
+-}
+-
+-// NewPerHost returns a PerHost Dialer that directs connections to either
+-// defaultDialer or bypass, depending on whether the connection matches one of
+-// the configured rules.
+-func NewPerHost(defaultDialer, bypass Dialer) *PerHost {
+- return &PerHost{
+- def: defaultDialer,
+- bypass: bypass,
+- }
+-}
+-
+-// Dial connects to the address addr on the given network through either
+-// defaultDialer or bypass.
+-func (p *PerHost) Dial(network, addr string) (c net.Conn, err error) {
+- host, _, err := net.SplitHostPort(addr)
+- if err != nil {
+- return nil, err
+- }
+-
+- return p.dialerForRequest(host).Dial(network, addr)
+-}
+-
+-func (p *PerHost) dialerForRequest(host string) Dialer {
+- if ip := net.ParseIP(host); ip != nil {
+- for _, net := range p.bypassNetworks {
+- if net.Contains(ip) {
+- return p.bypass
+- }
+- }
+- for _, bypassIP := range p.bypassIPs {
+- if bypassIP.Equal(ip) {
+- return p.bypass
+- }
+- }
+- return p.def
+- }
+-
+- for _, zone := range p.bypassZones {
+- if strings.HasSuffix(host, zone) {
+- return p.bypass
+- }
+- if host == zone[1:] {
+- // For a zone "example.com", we match "example.com"
+- // too.
+- return p.bypass
+- }
+- }
+- for _, bypassHost := range p.bypassHosts {
+- if bypassHost == host {
+- return p.bypass
+- }
+- }
+- return p.def
+-}
+-
+-// AddFromString parses a string that contains comma-separated values
+-// specifying hosts that should use the bypass proxy. Each value is either an
+-// IP address, a CIDR range, a zone (*.example.com) or a hostname
+-// (localhost). A best effort is made to parse the string and errors are
+-// ignored.
+-func (p *PerHost) AddFromString(s string) {
+- hosts := strings.Split(s, ",")
+- for _, host := range hosts {
+- host = strings.TrimSpace(host)
+- if len(host) == 0 {
+- continue
+- }
+- if strings.Contains(host, "/") {
+- // We assume that it's a CIDR address like 127.0.0.0/8
+- if _, net, err := net.ParseCIDR(host); err == nil {
+- p.AddNetwork(net)
+- }
+- continue
+- }
+- if ip := net.ParseIP(host); ip != nil {
+- p.AddIP(ip)
+- continue
+- }
+- if strings.HasPrefix(host, "*.") {
+- p.AddZone(host[1:])
+- continue
+- }
+- p.AddHost(host)
+- }
+-}
+-
+-// AddIP specifies an IP address that will use the bypass proxy. Note that
+-// this will only take effect if a literal IP address is dialed. A connection
+-// to a named host will never match an IP.
+-func (p *PerHost) AddIP(ip net.IP) {
+- p.bypassIPs = append(p.bypassIPs, ip)
+-}
+-
+-// AddNetwork specifies an IP range that will use the bypass proxy. Note that
+-// this will only take effect if a literal IP address is dialed. A connection
+-// to a named host will never match.
+-func (p *PerHost) AddNetwork(net *net.IPNet) {
+- p.bypassNetworks = append(p.bypassNetworks, net)
+-}
+-
+-// AddZone specifies a DNS suffix that will use the bypass proxy. A zone of
+-// "example.com" matches "example.com" and all of its subdomains.
+-func (p *PerHost) AddZone(zone string) {
+- if strings.HasSuffix(zone, ".") {
+- zone = zone[:len(zone)-1]
+- }
+- if !strings.HasPrefix(zone, ".") {
+- zone = "." + zone
+- }
+- p.bypassZones = append(p.bypassZones, zone)
+-}
+-
+-// AddHost specifies a hostname that will use the bypass proxy.
+-func (p *PerHost) AddHost(host string) {
+- if strings.HasSuffix(host, ".") {
+- host = host[:len(host)-1]
+- }
+- p.bypassHosts = append(p.bypassHosts, host)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/proxy/per_host_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/proxy/per_host_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/proxy/per_host_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/proxy/per_host_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,55 +0,0 @@
+-// Copyright 2011 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 proxy
+-
+-import (
+- "errors"
+- "net"
+- "reflect"
+- "testing"
+-)
+-
+-type recordingProxy struct {
+- addrs []string
+-}
+-
+-func (r *recordingProxy) Dial(network, addr string) (net.Conn, error) {
+- r.addrs = append(r.addrs, addr)
+- return nil, errors.New("recordingProxy")
+-}
+-
+-func TestPerHost(t *testing.T) {
+- var def, bypass recordingProxy
+- perHost := NewPerHost(&def, &bypass)
+- perHost.AddFromString("localhost,*.zone,127.0.0.1,10.0.0.1/8,1000::/16")
+-
+- expectedDef := []string{
+- "example.com:123",
+- "1.2.3.4:123",
+- "[1001::]:123",
+- }
+- expectedBypass := []string{
+- "localhost:123",
+- "zone:123",
+- "foo.zone:123",
+- "127.0.0.1:123",
+- "10.1.2.3:123",
+- "[1000::]:123",
+- }
+-
+- for _, addr := range expectedDef {
+- perHost.Dial("tcp", addr)
+- }
+- for _, addr := range expectedBypass {
+- perHost.Dial("tcp", addr)
+- }
+-
+- if !reflect.DeepEqual(expectedDef, def.addrs) {
+- t.Errorf("Hosts which went to the default proxy didn't match. Got %v, want %v", def.addrs, expectedDef)
+- }
+- if !reflect.DeepEqual(expectedBypass, bypass.addrs) {
+- t.Errorf("Hosts which went to the bypass proxy didn't match. Got %v, want %v", bypass.addrs, expectedBypass)
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/proxy/proxy.go docker-devmapper/vendor/src/code.google.com/p/go.net/proxy/proxy.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/proxy/proxy.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/proxy/proxy.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,94 +0,0 @@
+-// Copyright 2011 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 proxy provides support for a variety of protocols to proxy network
+-// data.
+-package proxy
+-
+-import (
+- "errors"
+- "net"
+- "net/url"
+- "os"
+-)
+-
+-// A Dialer is a means to establish a connection.
+-type Dialer interface {
+- // Dial connects to the given address via the proxy.
+- Dial(network, addr string) (c net.Conn, err error)
+-}
+-
+-// Auth contains authentication parameters that specific Dialers may require.
+-type Auth struct {
+- User, Password string
+-}
+-
+-// DefaultDialer returns the dialer specified by the proxy related variables in
+-// the environment.
+-func FromEnvironment() Dialer {
+- allProxy := os.Getenv("all_proxy")
+- if len(allProxy) == 0 {
+- return Direct
+- }
+-
+- proxyURL, err := url.Parse(allProxy)
+- if err != nil {
+- return Direct
+- }
+- proxy, err := FromURL(proxyURL, Direct)
+- if err != nil {
+- return Direct
+- }
+-
+- noProxy := os.Getenv("no_proxy")
+- if len(noProxy) == 0 {
+- return proxy
+- }
+-
+- perHost := NewPerHost(proxy, Direct)
+- perHost.AddFromString(noProxy)
+- return perHost
+-}
+-
+-// proxySchemes is a map from URL schemes to a function that creates a Dialer
+-// from a URL with such a scheme.
+-var proxySchemes map[string]func(*url.URL, Dialer) (Dialer, error)
+-
+-// RegisterDialerType takes a URL scheme and a function to generate Dialers from
+-// a URL with that scheme and a forwarding Dialer. Registered schemes are used
+-// by FromURL.
+-func RegisterDialerType(scheme string, f func(*url.URL, Dialer) (Dialer, error)) {
+- if proxySchemes == nil {
+- proxySchemes = make(map[string]func(*url.URL, Dialer) (Dialer, error))
+- }
+- proxySchemes[scheme] = f
+-}
+-
+-// FromURL returns a Dialer given a URL specification and an underlying
+-// Dialer for it to make network requests.
+-func FromURL(u *url.URL, forward Dialer) (Dialer, error) {
+- var auth *Auth
+- if u.User != nil {
+- auth = new(Auth)
+- auth.User = u.User.Username()
+- if p, ok := u.User.Password(); ok {
+- auth.Password = p
+- }
+- }
+-
+- switch u.Scheme {
+- case "socks5":
+- return SOCKS5("tcp", u.Host, auth, forward)
+- }
+-
+- // If the scheme doesn't match any of the built-in schemes, see if it
+- // was registered by another package.
+- if proxySchemes != nil {
+- if f, ok := proxySchemes[u.Scheme]; ok {
+- return f(u, forward)
+- }
+- }
+-
+- return nil, errors.New("proxy: unknown scheme: " + u.Scheme)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/proxy/proxy_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/proxy/proxy_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/proxy/proxy_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/proxy/proxy_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,142 +0,0 @@
+-// Copyright 2011 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 proxy
+-
+-import (
+- "io"
+- "net"
+- "net/url"
+- "strconv"
+- "sync"
+- "testing"
+-)
+-
+-func TestFromURL(t *testing.T) {
+- endSystem, err := net.Listen("tcp", "127.0.0.1:0")
+- if err != nil {
+- t.Fatalf("net.Listen failed: %v", err)
+- }
+- defer endSystem.Close()
+- gateway, err := net.Listen("tcp", "127.0.0.1:0")
+- if err != nil {
+- t.Fatalf("net.Listen failed: %v", err)
+- }
+- defer gateway.Close()
+-
+- var wg sync.WaitGroup
+- wg.Add(1)
+- go socks5Gateway(t, gateway, endSystem, socks5Domain, &wg)
+-
+- url, err := url.Parse("socks5://user:password@" + gateway.Addr().String())
+- if err != nil {
+- t.Fatalf("url.Parse failed: %v", err)
+- }
+- proxy, err := FromURL(url, Direct)
+- if err != nil {
+- t.Fatalf("FromURL failed: %v", err)
+- }
+- _, port, err := net.SplitHostPort(endSystem.Addr().String())
+- if err != nil {
+- t.Fatalf("net.SplitHostPort failed: %v", err)
+- }
+- if c, err := proxy.Dial("tcp", "localhost:"+port); err != nil {
+- t.Fatalf("FromURL.Dial failed: %v", err)
+- } else {
+- c.Close()
+- }
+-
+- wg.Wait()
+-}
+-
+-func TestSOCKS5(t *testing.T) {
+- endSystem, err := net.Listen("tcp", "127.0.0.1:0")
+- if err != nil {
+- t.Fatalf("net.Listen failed: %v", err)
+- }
+- defer endSystem.Close()
+- gateway, err := net.Listen("tcp", "127.0.0.1:0")
+- if err != nil {
+- t.Fatalf("net.Listen failed: %v", err)
+- }
+- defer gateway.Close()
+-
+- var wg sync.WaitGroup
+- wg.Add(1)
+- go socks5Gateway(t, gateway, endSystem, socks5IP4, &wg)
+-
+- proxy, err := SOCKS5("tcp", gateway.Addr().String(), nil, Direct)
+- if err != nil {
+- t.Fatalf("SOCKS5 failed: %v", err)
+- }
+- if c, err := proxy.Dial("tcp", endSystem.Addr().String()); err != nil {
+- t.Fatalf("SOCKS5.Dial failed: %v", err)
+- } else {
+- c.Close()
+- }
+-
+- wg.Wait()
+-}
+-
+-func socks5Gateway(t *testing.T, gateway, endSystem net.Listener, typ byte, wg *sync.WaitGroup) {
+- defer wg.Done()
+-
+- c, err := gateway.Accept()
+- if err != nil {
+- t.Errorf("net.Listener.Accept failed: %v", err)
+- return
+- }
+- defer c.Close()
+-
+- b := make([]byte, 32)
+- var n int
+- if typ == socks5Domain {
+- n = 4
+- } else {
+- n = 3
+- }
+- if _, err := io.ReadFull(c, b[:n]); err != nil {
+- t.Errorf("io.ReadFull failed: %v", err)
+- return
+- }
+- if _, err := c.Write([]byte{socks5Version, socks5AuthNone}); err != nil {
+- t.Errorf("net.Conn.Write failed: %v", err)
+- return
+- }
+- if typ == socks5Domain {
+- n = 16
+- } else {
+- n = 10
+- }
+- if _, err := io.ReadFull(c, b[:n]); err != nil {
+- t.Errorf("io.ReadFull failed: %v", err)
+- return
+- }
+- if b[0] != socks5Version || b[1] != socks5Connect || b[2] != 0x00 || b[3] != typ {
+- t.Errorf("got an unexpected packet: %#02x %#02x %#02x %#02x", b[0], b[1], b[2], b[3])
+- return
+- }
+- if typ == socks5Domain {
+- copy(b[:5], []byte{socks5Version, 0x00, 0x00, socks5Domain, 9})
+- b = append(b, []byte("localhost")...)
+- } else {
+- copy(b[:4], []byte{socks5Version, 0x00, 0x00, socks5IP4})
+- }
+- host, port, err := net.SplitHostPort(endSystem.Addr().String())
+- if err != nil {
+- t.Errorf("net.SplitHostPort failed: %v", err)
+- return
+- }
+- b = append(b, []byte(net.ParseIP(host).To4())...)
+- p, err := strconv.Atoi(port)
+- if err != nil {
+- t.Errorf("strconv.Atoi failed: %v", err)
+- return
+- }
+- b = append(b, []byte{byte(p >> 8), byte(p)}...)
+- if _, err := c.Write(b); err != nil {
+- t.Errorf("net.Conn.Write failed: %v", err)
+- return
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/proxy/socks5.go docker-devmapper/vendor/src/code.google.com/p/go.net/proxy/socks5.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/proxy/socks5.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/proxy/socks5.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,207 +0,0 @@
+-// Copyright 2011 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 proxy
+-
+-import (
+- "errors"
+- "io"
+- "net"
+- "strconv"
+-)
+-
+-// SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given address
+-// with an optional username and password. See RFC 1928.
+-func SOCKS5(network, addr string, auth *Auth, forward Dialer) (Dialer, error) {
+- s := &socks5{
+- network: network,
+- addr: addr,
+- forward: forward,
+- }
+- if auth != nil {
+- s.user = auth.User
+- s.password = auth.Password
+- }
+-
+- return s, nil
+-}
+-
+-type socks5 struct {
+- user, password string
+- network, addr string
+- forward Dialer
+-}
+-
+-const socks5Version = 5
+-
+-const (
+- socks5AuthNone = 0
+- socks5AuthPassword = 2
+-)
+-
+-const socks5Connect = 1
+-
+-const (
+- socks5IP4 = 1
+- socks5Domain = 3
+- socks5IP6 = 4
+-)
+-
+-var socks5Errors = []string{
+- "",
+- "general failure",
+- "connection forbidden",
+- "network unreachable",
+- "host unreachable",
+- "connection refused",
+- "TTL expired",
+- "command not supported",
+- "address type not supported",
+-}
+-
+-// Dial connects to the address addr on the network net via the SOCKS5 proxy.
+-func (s *socks5) Dial(network, addr string) (net.Conn, error) {
+- switch network {
+- case "tcp", "tcp6", "tcp4":
+- default:
+- return nil, errors.New("proxy: no support for SOCKS5 proxy connections of type " + network)
+- }
+-
+- conn, err := s.forward.Dial(s.network, s.addr)
+- if err != nil {
+- return nil, err
+- }
+- closeConn := &conn
+- defer func() {
+- if closeConn != nil {
+- (*closeConn).Close()
+- }
+- }()
+-
+- host, portStr, err := net.SplitHostPort(addr)
+- if err != nil {
+- return nil, err
+- }
+-
+- port, err := strconv.Atoi(portStr)
+- if err != nil {
+- return nil, errors.New("proxy: failed to parse port number: " + portStr)
+- }
+- if port < 1 || port > 0xffff {
+- return nil, errors.New("proxy: port number out of range: " + portStr)
+- }
+-
+- // the size here is just an estimate
+- buf := make([]byte, 0, 6+len(host))
+-
+- buf = append(buf, socks5Version)
+- if len(s.user) > 0 && len(s.user) < 256 && len(s.password) < 256 {
+- buf = append(buf, 2 /* num auth methods */, socks5AuthNone, socks5AuthPassword)
+- } else {
+- buf = append(buf, 1 /* num auth methods */, socks5AuthNone)
+- }
+-
+- if _, err := conn.Write(buf); err != nil {
+- return nil, errors.New("proxy: failed to write greeting to SOCKS5 proxy at " + s.addr + ": " + err.Error())
+- }
+-
+- if _, err := io.ReadFull(conn, buf[:2]); err != nil {
+- return nil, errors.New("proxy: failed to read greeting from SOCKS5 proxy at " + s.addr + ": " + err.Error())
+- }
+- if buf[0] != 5 {
+- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " has unexpected version " + strconv.Itoa(int(buf[0])))
+- }
+- if buf[1] == 0xff {
+- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " requires authentication")
+- }
+-
+- if buf[1] == socks5AuthPassword {
+- buf = buf[:0]
+- buf = append(buf, 1 /* password protocol version */)
+- buf = append(buf, uint8(len(s.user)))
+- buf = append(buf, s.user...)
+- buf = append(buf, uint8(len(s.password)))
+- buf = append(buf, s.password...)
+-
+- if _, err := conn.Write(buf); err != nil {
+- return nil, errors.New("proxy: failed to write authentication request to SOCKS5 proxy at " + s.addr + ": " + err.Error())
+- }
+-
+- if _, err := io.ReadFull(conn, buf[:2]); err != nil {
+- return nil, errors.New("proxy: failed to read authentication reply from SOCKS5 proxy at " + s.addr + ": " + err.Error())
+- }
+-
+- if buf[1] != 0 {
+- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " rejected username/password")
+- }
+- }
+-
+- buf = buf[:0]
+- buf = append(buf, socks5Version, socks5Connect, 0 /* reserved */)
+-
+- if ip := net.ParseIP(host); ip != nil {
+- if ip4 := ip.To4(); ip4 != nil {
+- buf = append(buf, socks5IP4)
+- ip = ip4
+- } else {
+- buf = append(buf, socks5IP6)
+- }
+- buf = append(buf, ip...)
+- } else {
+- buf = append(buf, socks5Domain)
+- buf = append(buf, byte(len(host)))
+- buf = append(buf, host...)
+- }
+- buf = append(buf, byte(port>>8), byte(port))
+-
+- if _, err := conn.Write(buf); err != nil {
+- return nil, errors.New("proxy: failed to write connect request to SOCKS5 proxy at " + s.addr + ": " + err.Error())
+- }
+-
+- if _, err := io.ReadFull(conn, buf[:4]); err != nil {
+- return nil, errors.New("proxy: failed to read connect reply from SOCKS5 proxy at " + s.addr + ": " + err.Error())
+- }
+-
+- failure := "unknown error"
+- if int(buf[1]) < len(socks5Errors) {
+- failure = socks5Errors[buf[1]]
+- }
+-
+- if len(failure) > 0 {
+- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " failed to connect: " + failure)
+- }
+-
+- bytesToDiscard := 0
+- switch buf[3] {
+- case socks5IP4:
+- bytesToDiscard = net.IPv4len
+- case socks5IP6:
+- bytesToDiscard = net.IPv6len
+- case socks5Domain:
+- _, err := io.ReadFull(conn, buf[:1])
+- if err != nil {
+- return nil, errors.New("proxy: failed to read domain length from SOCKS5 proxy at " + s.addr + ": " + err.Error())
+- }
+- bytesToDiscard = int(buf[0])
+- default:
+- return nil, errors.New("proxy: got unknown address type " + strconv.Itoa(int(buf[3])) + " from SOCKS5 proxy at " + s.addr)
+- }
+-
+- if cap(buf) < bytesToDiscard {
+- buf = make([]byte, bytesToDiscard)
+- } else {
+- buf = buf[:bytesToDiscard]
+- }
+- if _, err := io.ReadFull(conn, buf); err != nil {
+- return nil, errors.New("proxy: failed to read address from SOCKS5 proxy at " + s.addr + ": " + err.Error())
+- }
+-
+- // Also need to discard the port number
+- if _, err := io.ReadFull(conn, buf[:2]); err != nil {
+- return nil, errors.New("proxy: failed to read port from SOCKS5 proxy at " + s.addr + ": " + err.Error())
+- }
+-
+- closeConn = nil
+- return conn, nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/publicsuffix/gen.go docker-devmapper/vendor/src/code.google.com/p/go.net/publicsuffix/gen.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/publicsuffix/gen.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/publicsuffix/gen.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,570 +0,0 @@
+-// Copyright 2012 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
+-
+-// This program generates table.go and table_test.go.
+-// Invoke as:
+-//
+-// go run gen.go -version "xxx" >table.go
+-// go run gen.go -version "xxx" -test >table_test.go
+-//
+-// The version is derived from information found at
+-// http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat
+-// which is linked from http://publicsuffix.org/list/.
+-//
+-// To fetch a particular hg revision, such as 05b11a8d1ace, pass
+-// -url "http://hg.mozilla.org/mozilla-central/raw-file/05b11a8d1ace/netwerk/dns/effective_tld_names.dat"
+-
+-import (
+- "bufio"
+- "bytes"
+- "flag"
+- "fmt"
+- "go/format"
+- "io"
+- "net/http"
+- "os"
+- "sort"
+- "strings"
+-
+- "code.google.com/p/go.net/idna"
+-)
+-
+-const (
+- nodesBitsChildren = 9
+- nodesBitsICANN = 1
+- nodesBitsTextOffset = 15
+- nodesBitsTextLength = 6
+-
+- childrenBitsWildcard = 1
+- childrenBitsNodeType = 2
+- childrenBitsHi = 14
+- childrenBitsLo = 14
+-)
+-
+-const (
+- nodeTypeNormal = 0
+- nodeTypeException = 1
+- nodeTypeParentOnly = 2
+- numNodeType = 3
+-)
+-
+-func nodeTypeStr(n int) string {
+- switch n {
+- case nodeTypeNormal:
+- return "+"
+- case nodeTypeException:
+- return "!"
+- case nodeTypeParentOnly:
+- return "o"
+- }
+- panic("unreachable")
+-}
+-
+-var (
+- labelEncoding = map[string]uint32{}
+- labelsList = []string{}
+- labelsMap = map[string]bool{}
+- rules = []string{}
+-
+- crush = flag.Bool("crush", true, "make the generated node text as small as possible")
+- subset = flag.Bool("subset", false, "generate only a subset of the full table, for debugging")
+- url = flag.String("url",
+- "http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1",
+- "URL of the publicsuffix.org list. If empty, stdin is read instead")
+- v = flag.Bool("v", false, "verbose output (to stderr)")
+- version = flag.String("version", "", "the effective_tld_names.dat version")
+- test = flag.Bool("test", false, "generate table_test.go")
+-)
+-
+-func main() {
+- if err := main1(); err != nil {
+- fmt.Fprintln(os.Stderr, err)
+- os.Exit(1)
+- }
+-}
+-
+-func main1() error {
+- flag.Parse()
+- if nodesBitsTextLength+nodesBitsTextOffset+nodesBitsICANN+nodesBitsChildren > 32 {
+- return fmt.Errorf("not enough bits to encode the nodes table")
+- }
+- if childrenBitsLo+childrenBitsHi+childrenBitsNodeType+childrenBitsWildcard > 32 {
+- return fmt.Errorf("not enough bits to encode the children table")
+- }
+- if *version == "" {
+- return fmt.Errorf("-version was not specified")
+- }
+- var r io.Reader = os.Stdin
+- if *url != "" {
+- res, err := http.Get(*url)
+- if err != nil {
+- return err
+- }
+- if res.StatusCode != http.StatusOK {
+- return fmt.Errorf("bad GET status for %s: %d", *url, res.Status)
+- }
+- r = res.Body
+- defer res.Body.Close()
+- }
+-
+- var root node
+- icann := false
+- buf := new(bytes.Buffer)
+- br := bufio.NewReader(r)
+- for {
+- s, err := br.ReadString('\n')
+- if err != nil {
+- if err == io.EOF {
+- break
+- }
+- return err
+- }
+- s = strings.TrimSpace(s)
+- if strings.Contains(s, "BEGIN ICANN DOMAINS") {
+- icann = true
+- continue
+- }
+- if strings.Contains(s, "END ICANN DOMAINS") {
+- icann = false
+- continue
+- }
+- if s == "" || strings.HasPrefix(s, "//") {
+- continue
+- }
+- s, err = idna.ToASCII(s)
+- if err != nil {
+- return err
+- }
+-
+- if *subset {
+- switch {
+- case s == "ac.jp" || strings.HasSuffix(s, ".ac.jp"):
+- case s == "ak.us" || strings.HasSuffix(s, ".ak.us"):
+- case s == "ao" || strings.HasSuffix(s, ".ao"):
+- case s == "ar" || strings.HasSuffix(s, ".ar"):
+- case s == "arpa" || strings.HasSuffix(s, ".arpa"):
+- case s == "cy" || strings.HasSuffix(s, ".cy"):
+- case s == "dyndns.org" || strings.HasSuffix(s, ".dyndns.org"):
+- case s == "jp":
+- case s == "kobe.jp" || strings.HasSuffix(s, ".kobe.jp"):
+- case s == "kyoto.jp" || strings.HasSuffix(s, ".kyoto.jp"):
+- case s == "om" || strings.HasSuffix(s, ".om"):
+- case s == "uk" || strings.HasSuffix(s, ".uk"):
+- case s == "uk.com" || strings.HasSuffix(s, ".uk.com"):
+- case s == "tw" || strings.HasSuffix(s, ".tw"):
+- case s == "zw" || strings.HasSuffix(s, ".zw"):
+- case s == "xn--p1ai" || strings.HasSuffix(s, ".xn--p1ai"):
+- // xn--p1ai is Russian-Cyrillic "рф".
+- default:
+- continue
+- }
+- }
+-
+- rules = append(rules, s)
+-
+- nt, wildcard := nodeTypeNormal, false
+- switch {
+- case strings.HasPrefix(s, "*."):
+- s, nt = s[2:], nodeTypeParentOnly
+- wildcard = true
+- case strings.HasPrefix(s, "!"):
+- s, nt = s[1:], nodeTypeException
+- }
+- labels := strings.Split(s, ".")
+- for n, i := &root, len(labels)-1; i >= 0; i-- {
+- label := labels[i]
+- n = n.child(label)
+- if i == 0 {
+- if nt != nodeTypeParentOnly && n.nodeType == nodeTypeParentOnly {
+- n.nodeType = nt
+- }
+- n.icann = n.icann && icann
+- n.wildcard = n.wildcard || wildcard
+- }
+- labelsMap[label] = true
+- }
+- }
+- labelsList = make([]string, 0, len(labelsMap))
+- for label := range labelsMap {
+- labelsList = append(labelsList, label)
+- }
+- sort.Strings(labelsList)
+-
+- p := printReal
+- if *test {
+- p = printTest
+- }
+- if err := p(buf, &root); err != nil {
+- return err
+- }
+-
+- b, err := format.Source(buf.Bytes())
+- if err != nil {
+- return err
+- }
+- _, err = os.Stdout.Write(b)
+- return err
+-}
+-
+-func printTest(w io.Writer, n *node) error {
+- fmt.Fprintf(w, "// generated by go run gen.go; DO NOT EDIT\n\n")
+- fmt.Fprintf(w, "package publicsuffix\n\nvar rules = [...]string{\n")
+- for _, rule := range rules {
+- fmt.Fprintf(w, "%q,\n", rule)
+- }
+- fmt.Fprintf(w, "}\n\nvar nodeLabels = [...]string{\n")
+- if err := n.walk(w, printNodeLabel); err != nil {
+- return err
+- }
+- fmt.Fprintf(w, "}\n")
+- return nil
+-}
+-
+-func printReal(w io.Writer, n *node) error {
+- const header = `// generated by go run gen.go; DO NOT EDIT
+-
+-package publicsuffix
+-
+-const version = %q
+-
+-const (
+- nodesBitsChildren = %d
+- nodesBitsICANN = %d
+- nodesBitsTextOffset = %d
+- nodesBitsTextLength = %d
+-
+- childrenBitsWildcard = %d
+- childrenBitsNodeType = %d
+- childrenBitsHi = %d
+- childrenBitsLo = %d
+-)
+-
+-const (
+- nodeTypeNormal = %d
+- nodeTypeException = %d
+- nodeTypeParentOnly = %d
+-)
+-
+-// numTLD is the number of top level domains.
+-const numTLD = %d
+-
+-`
+- fmt.Fprintf(w, header, *version,
+- nodesBitsChildren, nodesBitsICANN, nodesBitsTextOffset, nodesBitsTextLength,
+- childrenBitsWildcard, childrenBitsNodeType, childrenBitsHi, childrenBitsLo,
+- nodeTypeNormal, nodeTypeException, nodeTypeParentOnly, len(n.children))
+-
+- text := makeText()
+- if text == "" {
+- return fmt.Errorf("internal error: makeText returned no text")
+- }
+- for _, label := range labelsList {
+- offset, length := strings.Index(text, label), len(label)
+- if offset < 0 {
+- return fmt.Errorf("internal error: could not find %q in text %q", label, text)
+- }
+- if offset >= 1<<nodesBitsTextOffset || length >= 1<<nodesBitsTextLength {
+- return fmt.Errorf("text offset/length is too large: %d/%d", offset, length)
+- }
+- labelEncoding[label] = uint32(offset)<<nodesBitsTextLength | uint32(length)
+- }
+- fmt.Fprintf(w, "// Text is the combined text of all labels.\nconst text = ")
+- for len(text) > 0 {
+- n, plus := len(text), ""
+- if n > 64 {
+- n, plus = 64, " +"
+- }
+- fmt.Fprintf(w, "%q%s\n", text[:n], plus)
+- text = text[n:]
+- }
+-
+- n.walk(w, assignIndexes)
+-
+- fmt.Fprintf(w, `
+-
+-// 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
+-// the children array), ICANN bit and text.
+-//
+-// In the //-comment after each node's data, the nodes indexes of the children
+-// are formatted as (n0x1234-n0x1256), with * denoting the wildcard bit. The
+-// nodeType is printed as + for normal, ! for exception, and o for parent-only
+-// nodes that have children but don't match a domain label in their own right.
+-// An I denotes an ICANN domain.
+-//
+-// The layout within the uint32, from MSB to LSB, is:
+-// [%2d bits] unused
+-// [%2d bits] children index
+-// [%2d bits] ICANN bit
+-// [%2d bits] text index
+-// [%2d bits] text length
+-var nodes = [...]uint32{
+-`,
+- 32-nodesBitsChildren-nodesBitsICANN-nodesBitsTextOffset-nodesBitsTextLength,
+- nodesBitsChildren, nodesBitsICANN, nodesBitsTextOffset, nodesBitsTextLength)
+- if err := n.walk(w, printNode); err != nil {
+- return err
+- }
+- fmt.Fprintf(w, `}
+-
+-// children is the list of nodes' children, the parent's wildcard bit and the
+-// parent's node type. If a node has no children then their children index
+-// will be in the range [0, 6), depending on the wildcard bit and node type.
+-//
+-// The layout within the uint32, from MSB to LSB, is:
+-// [%2d bits] unused
+-// [%2d bits] wildcard bit
+-// [%2d bits] node type
+-// [%2d bits] high nodes index (exclusive) of children
+-// [%2d bits] low nodes index (inclusive) of children
+-var children=[...]uint32{
+-`,
+- 32-childrenBitsWildcard-childrenBitsNodeType-childrenBitsHi-childrenBitsLo,
+- childrenBitsWildcard, childrenBitsNodeType, childrenBitsHi, childrenBitsLo)
+- for i, c := range childrenEncoding {
+- s := "---------------"
+- lo := c & (1<<childrenBitsLo - 1)
+- hi := (c >> childrenBitsLo) & (1<<childrenBitsHi - 1)
+- if lo != hi {
+- s = fmt.Sprintf("n0x%04x-n0x%04x", lo, hi)
+- }
+- nodeType := int(c>>(childrenBitsLo+childrenBitsHi)) & (1<<childrenBitsNodeType - 1)
+- wildcard := c>>(childrenBitsLo+childrenBitsHi+childrenBitsNodeType) != 0
+- fmt.Fprintf(w, "0x%08x, // c0x%04x (%s)%s %s\n",
+- c, i, s, wildcardStr(wildcard), nodeTypeStr(nodeType))
+- }
+- fmt.Fprintf(w, "}\n")
+- return nil
+-}
+-
+-type node struct {
+- label string
+- nodeType int
+- icann bool
+- wildcard bool
+- // nodesIndex and childrenIndex are the index of this node in the nodes
+- // and the index of its children offset/length in the children arrays.
+- nodesIndex, childrenIndex int
+- // firstChild is the index of this node's first child, or zero if this
+- // node has no children.
+- firstChild int
+- // children are the node's children, in strictly increasing node label order.
+- children []*node
+-}
+-
+-func (n *node) walk(w io.Writer, f func(w1 io.Writer, n1 *node) error) error {
+- if err := f(w, n); err != nil {
+- return err
+- }
+- for _, c := range n.children {
+- if err := c.walk(w, f); err != nil {
+- return err
+- }
+- }
+- return nil
+-}
+-
+-// child returns the child of n with the given label. The child is created if
+-// it did not exist beforehand.
+-func (n *node) child(label string) *node {
+- for _, c := range n.children {
+- if c.label == label {
+- return c
+- }
+- }
+- c := &node{
+- label: label,
+- nodeType: nodeTypeParentOnly,
+- icann: true,
+- }
+- n.children = append(n.children, c)
+- sort.Sort(byLabel(n.children))
+- return c
+-}
+-
+-type byLabel []*node
+-
+-func (b byLabel) Len() int { return len(b) }
+-func (b byLabel) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
+-func (b byLabel) Less(i, j int) bool { return b[i].label < b[j].label }
+-
+-var nextNodesIndex int
+-
+-// childrenEncoding are the encoded entries in the generated children array.
+-// All these pre-defined entries have no children.
+-var childrenEncoding = []uint32{
+- 0 << (childrenBitsLo + childrenBitsHi), // Without wildcard bit, nodeTypeNormal.
+- 1 << (childrenBitsLo + childrenBitsHi), // Without wildcard bit, nodeTypeException.
+- 2 << (childrenBitsLo + childrenBitsHi), // Without wildcard bit, nodeTypeParentOnly.
+- 4 << (childrenBitsLo + childrenBitsHi), // With wildcard bit, nodeTypeNormal.
+- 5 << (childrenBitsLo + childrenBitsHi), // With wildcard bit, nodeTypeException.
+- 6 << (childrenBitsLo + childrenBitsHi), // With wildcard bit, nodeTypeParentOnly.
+-}
+-
+-var firstCallToAssignIndexes = true
+-
+-func assignIndexes(w io.Writer, n *node) error {
+- if len(n.children) != 0 {
+- // Assign nodesIndex.
+- n.firstChild = nextNodesIndex
+- for _, c := range n.children {
+- c.nodesIndex = nextNodesIndex
+- nextNodesIndex++
+- }
+-
+- // The root node's children is implicit.
+- if firstCallToAssignIndexes {
+- firstCallToAssignIndexes = false
+- return nil
+- }
+-
+- // Assign childrenIndex.
+- if len(childrenEncoding) >= 1<<nodesBitsChildren {
+- return fmt.Errorf("children table is too large")
+- }
+- n.childrenIndex = len(childrenEncoding)
+- lo := uint32(n.firstChild)
+- hi := lo + uint32(len(n.children))
+- if lo >= 1<<childrenBitsLo || hi >= 1<<childrenBitsHi {
+- return fmt.Errorf("children lo/hi is too large: %d/%d", lo, hi)
+- }
+- enc := hi<<childrenBitsLo | lo
+- enc |= uint32(n.nodeType) << (childrenBitsLo + childrenBitsHi)
+- if n.wildcard {
+- enc |= 1 << (childrenBitsLo + childrenBitsHi + childrenBitsNodeType)
+- }
+- childrenEncoding = append(childrenEncoding, enc)
+- } else {
+- n.childrenIndex = n.nodeType
+- if n.wildcard {
+- n.childrenIndex += numNodeType
+- }
+- }
+- return nil
+-}
+-
+-func printNode(w io.Writer, n *node) error {
+- for _, c := range n.children {
+- s := "---------------"
+- if len(c.children) != 0 {
+- s = fmt.Sprintf("n0x%04x-n0x%04x", c.firstChild, c.firstChild+len(c.children))
+- }
+- encoding := labelEncoding[c.label]
+- if c.icann {
+- encoding |= 1 << (nodesBitsTextLength + nodesBitsTextOffset)
+- }
+- encoding |= uint32(c.childrenIndex) << (nodesBitsTextLength + nodesBitsTextOffset + nodesBitsICANN)
+- fmt.Fprintf(w, "0x%08x, // n0x%04x c0x%04x (%s)%s %s %s %s\n",
+- encoding, c.nodesIndex, c.childrenIndex, s, wildcardStr(c.wildcard),
+- nodeTypeStr(c.nodeType), icannStr(c.icann), c.label,
+- )
+- }
+- return nil
+-}
+-
+-func printNodeLabel(w io.Writer, n *node) error {
+- for _, c := range n.children {
+- fmt.Fprintf(w, "%q,\n", c.label)
+- }
+- return nil
+-}
+-
+-func icannStr(icann bool) string {
+- if icann {
+- return "I"
+- }
+- return " "
+-}
+-
+-func wildcardStr(wildcard bool) string {
+- if wildcard {
+- return "*"
+- }
+- return " "
+-}
+-
+-// makeText combines all the strings in labelsList to form one giant string.
+-// If the crush flag is true, then overlapping strings will be merged: "arpa"
+-// and "parliament" could yield "arparliament".
+-func makeText() string {
+- if !*crush {
+- return strings.Join(labelsList, "")
+- }
+-
+- beforeLength := 0
+- for _, s := range labelsList {
+- beforeLength += len(s)
+- }
+-
+- // Make a copy of labelsList.
+- ss := append(make([]string, 0, len(labelsList)), labelsList...)
+-
+- // Remove strings that are substrings of other strings.
+- for changed := true; changed; {
+- changed = false
+- for i, s := range ss {
+- if s == "" {
+- continue
+- }
+- for j, t := range ss {
+- if i != j && t != "" && strings.Contains(s, t) {
+- changed = true
+- ss[j] = ""
+- }
+- }
+- }
+- }
+-
+- // Remove the empty strings.
+- sort.Strings(ss)
+- for len(ss) > 0 && ss[0] == "" {
+- ss = ss[1:]
+- }
+-
+- // Join strings where one suffix matches another prefix.
+- for {
+- // Find best i, j, k such that ss[i][len-k:] == ss[j][:k],
+- // maximizing overlap length k.
+- besti := -1
+- bestj := -1
+- bestk := 0
+- for i, s := range ss {
+- if s == "" {
+- continue
+- }
+- for j, t := range ss {
+- if i == j {
+- continue
+- }
+- for k := bestk + 1; k <= len(s) && k <= len(t); k++ {
+- if s[len(s)-k:] == t[:k] {
+- besti = i
+- bestj = j
+- bestk = k
+- }
+- }
+- }
+- }
+- if bestk > 0 {
+- if *v {
+- fmt.Fprintf(os.Stderr, "%d-length overlap at (%4d,%4d) out of (%4d,%4d): %q and %q\n",
+- bestk, besti, bestj, len(ss), len(ss), ss[besti], ss[bestj])
+- }
+- ss[besti] += ss[bestj][bestk:]
+- ss[bestj] = ""
+- continue
+- }
+- break
+- }
+-
+- text := strings.Join(ss, "")
+- if *v {
+- fmt.Fprintf(os.Stderr, "crushed %d bytes to become %d bytes\n", beforeLength, len(text))
+- }
+- return text
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/publicsuffix/list.go docker-devmapper/vendor/src/code.google.com/p/go.net/publicsuffix/list.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/publicsuffix/list.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/publicsuffix/list.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,133 +0,0 @@
+-// Copyright 2012 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 publicsuffix provides a public suffix list based on data from
+-// http://publicsuffix.org/. A public suffix is one under which Internet users
+-// can directly register names.
+-package publicsuffix
+-
+-// TODO: specify case sensitivity and leading/trailing dot behavior for
+-// func PublicSuffix and func EffectiveTLDPlusOne.
+-
+-import (
+- "fmt"
+- "net/http/cookiejar"
+- "strings"
+-)
+-
+-// List implements the cookiejar.PublicSuffixList interface by calling the
+-// PublicSuffix function.
+-var List cookiejar.PublicSuffixList = list{}
+-
+-type list struct{}
+-
+-func (list) PublicSuffix(domain string) string {
+- ps, _ := PublicSuffix(domain)
+- return ps
+-}
+-
+-func (list) String() string {
+- return version
+-}
+-
+-// PublicSuffix returns the public suffix of the domain using a copy of the
+-// publicsuffix.org database compiled into the library.
+-//
+-// icann is whether the public suffix is managed by the Internet Corporation
+-// for Assigned Names and Numbers. If not, the public suffix is privately
+-// managed. For example, foo.org and foo.co.uk are ICANN domains,
+-// foo.dyndns.org and foo.blogspot.co.uk are private domains.
+-//
+-// Use cases for distinguishing ICANN domains like foo.com from private
+-// domains like foo.appspot.com can be found at
+-// https://wiki.mozilla.org/Public_Suffix_List/Use_Cases
+-func PublicSuffix(domain string) (publicSuffix string, icann bool) {
+- lo, hi := uint32(0), uint32(numTLD)
+- s, suffix, wildcard := domain, len(domain), false
+-loop:
+- for {
+- dot := strings.LastIndex(s, ".")
+- if wildcard {
+- suffix = 1 + dot
+- }
+- if lo == hi {
+- break
+- }
+- f := find(s[1+dot:], lo, hi)
+- if f == notFound {
+- break
+- }
+-
+- u := nodes[f] >> (nodesBitsTextOffset + nodesBitsTextLength)
+- icann = u&(1<<nodesBitsICANN-1) != 0
+- u >>= nodesBitsICANN
+- u = children[u&(1<<nodesBitsChildren-1)]
+- lo = u & (1<<childrenBitsLo - 1)
+- u >>= childrenBitsLo
+- hi = u & (1<<childrenBitsHi - 1)
+- u >>= childrenBitsHi
+- switch u & (1<<childrenBitsNodeType - 1) {
+- case nodeTypeNormal:
+- suffix = 1 + dot
+- case nodeTypeException:
+- suffix = 1 + len(s)
+- break loop
+- }
+- u >>= childrenBitsNodeType
+- wildcard = u&(1<<childrenBitsWildcard-1) != 0
+-
+- if dot == -1 {
+- break
+- }
+- s = s[:dot]
+- }
+- if suffix == len(domain) {
+- // If no rules match, the prevailing rule is "*".
+- return domain[1+strings.LastIndex(domain, "."):], icann
+- }
+- return domain[suffix:], icann
+-}
+-
+-const notFound uint32 = 1<<32 - 1
+-
+-// find returns the index of the node in the range [lo, hi) whose label equals
+-// label, or notFound if there is no such node. The range is assumed to be in
+-// strictly increasing node label order.
+-func find(label string, lo, hi uint32) uint32 {
+- for lo < hi {
+- mid := lo + (hi-lo)/2
+- s := nodeLabel(mid)
+- if s < label {
+- lo = mid + 1
+- } else if s == label {
+- return mid
+- } else {
+- hi = mid
+- }
+- }
+- return notFound
+-}
+-
+-// nodeLabel returns the label for the i'th node.
+-func nodeLabel(i uint32) string {
+- x := nodes[i]
+- length := x & (1<<nodesBitsTextLength - 1)
+- x >>= nodesBitsTextLength
+- offset := x & (1<<nodesBitsTextOffset - 1)
+- return text[offset : offset+length]
+-}
+-
+-// EffectiveTLDPlusOne returns the effective top level domain plus one more
+-// label. For example, the eTLD+1 for "foo.bar.golang.org" is "golang.org".
+-func EffectiveTLDPlusOne(domain string) (string, error) {
+- suffix, _ := PublicSuffix(domain)
+- if len(domain) <= len(suffix) {
+- return "", fmt.Errorf("publicsuffix: cannot derive eTLD+1 for domain %q", domain)
+- }
+- i := len(domain) - len(suffix) - 1
+- if domain[i] != '.' {
+- return "", fmt.Errorf("publicsuffix: invalid public suffix %q for domain %q", suffix, domain)
+- }
+- return domain[1+strings.LastIndex(domain[:i], "."):], nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/publicsuffix/list_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/publicsuffix/list_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/publicsuffix/list_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/publicsuffix/list_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,404 +0,0 @@
+-// Copyright 2012 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 publicsuffix
+-
+-import (
+- "sort"
+- "strings"
+- "testing"
+-)
+-
+-func TestNodeLabel(t *testing.T) {
+- for i, want := range nodeLabels {
+- got := nodeLabel(uint32(i))
+- if got != want {
+- t.Errorf("%d: got %q, want %q", i, got, want)
+- }
+- }
+-}
+-
+-func TestFind(t *testing.T) {
+- testCases := []string{
+- "",
+- "a",
+- "a0",
+- "aaaa",
+- "ao",
+- "ap",
+- "ar",
+- "aro",
+- "arp",
+- "arpa",
+- "arpaa",
+- "arpb",
+- "az",
+- "b",
+- "b0",
+- "ba",
+- "z",
+- "zu",
+- "zv",
+- "zw",
+- "zx",
+- "zy",
+- "zz",
+- "zzzz",
+- }
+- for _, tc := range testCases {
+- got := find(tc, 0, numTLD)
+- want := notFound
+- for i := uint32(0); i < numTLD; i++ {
+- if tc == nodeLabel(i) {
+- want = i
+- break
+- }
+- }
+- if got != want {
+- t.Errorf("%q: got %d, want %d", tc, got, want)
+- }
+- }
+-}
+-
+-func TestICANN(t *testing.T) {
+- testCases := map[string]bool{
+- "foo.org": true,
+- "foo.co.uk": true,
+- "foo.dyndns.org": false,
+- "foo.go.dyndns.org": false,
+- "foo.blogspot.co.uk": false,
+- "foo.intranet": false,
+- }
+- for domain, want := range testCases {
+- _, got := PublicSuffix(domain)
+- if got != want {
+- t.Errorf("%q: got %v, want %v", domain, got, want)
+- }
+- }
+-}
+-
+-var publicSuffixTestCases = []struct {
+- domain, want string
+-}{
+- // Empty string.
+- {"", ""},
+-
+- // The .ao rules are:
+- // ao
+- // ed.ao
+- // gv.ao
+- // og.ao
+- // co.ao
+- // pb.ao
+- // it.ao
+- {"ao", "ao"},
+- {"www.ao", "ao"},
+- {"pb.ao", "pb.ao"},
+- {"www.pb.ao", "pb.ao"},
+- {"www.xxx.yyy.zzz.pb.ao", "pb.ao"},
+-
+- // The .ar rules are:
+- // *.ar
+- // !congresodelalengua3.ar
+- // !educ.ar
+- // !gobiernoelectronico.ar
+- // !mecon.ar
+- // !nacion.ar
+- // !nic.ar
+- // !promocion.ar
+- // !retina.ar
+- // !uba.ar
+- // blogspot.com.ar
+- {"ar", "ar"},
+- {"www.ar", "www.ar"},
+- {"nic.ar", "ar"},
+- {"www.nic.ar", "ar"},
+- {"com.ar", "com.ar"},
+- {"www.com.ar", "com.ar"},
+- {"blogspot.com.ar", "blogspot.com.ar"},
+- {"www.blogspot.com.ar", "blogspot.com.ar"},
+- {"www.xxx.yyy.zzz.blogspot.com.ar", "blogspot.com.ar"},
+- {"logspot.com.ar", "com.ar"},
+- {"zlogspot.com.ar", "com.ar"},
+- {"zblogspot.com.ar", "com.ar"},
+-
+- // The .arpa rules are:
+- // e164.arpa
+- // in-addr.arpa
+- // ip6.arpa
+- // iris.arpa
+- // uri.arpa
+- // urn.arpa
+- {"arpa", "arpa"},
+- {"www.arpa", "arpa"},
+- {"urn.arpa", "urn.arpa"},
+- {"www.urn.arpa", "urn.arpa"},
+- {"www.xxx.yyy.zzz.urn.arpa", "urn.arpa"},
+-
+- // The relevant {kobe,kyoto}.jp rules are:
+- // jp
+- // *.kobe.jp
+- // !city.kobe.jp
+- // kyoto.jp
+- // ide.kyoto.jp
+- {"jp", "jp"},
+- {"kobe.jp", "jp"},
+- {"c.kobe.jp", "c.kobe.jp"},
+- {"b.c.kobe.jp", "c.kobe.jp"},
+- {"a.b.c.kobe.jp", "c.kobe.jp"},
+- {"city.kobe.jp", "kobe.jp"},
+- {"www.city.kobe.jp", "kobe.jp"},
+- {"kyoto.jp", "kyoto.jp"},
+- {"test.kyoto.jp", "kyoto.jp"},
+- {"ide.kyoto.jp", "ide.kyoto.jp"},
+- {"b.ide.kyoto.jp", "ide.kyoto.jp"},
+- {"a.b.ide.kyoto.jp", "ide.kyoto.jp"},
+-
+- // The .tw rules are:
+- // tw
+- // edu.tw
+- // gov.tw
+- // mil.tw
+- // com.tw
+- // net.tw
+- // org.tw
+- // idv.tw
+- // game.tw
+- // ebiz.tw
+- // club.tw
+- // 網路.tw (xn--zf0ao64a.tw)
+- // 組織.tw (xn--uc0atv.tw)
+- // 商業.tw (xn--czrw28b.tw)
+- // blogspot.tw
+- {"tw", "tw"},
+- {"aaa.tw", "tw"},
+- {"www.aaa.tw", "tw"},
+- {"xn--czrw28b.aaa.tw", "tw"},
+- {"edu.tw", "edu.tw"},
+- {"www.edu.tw", "edu.tw"},
+- {"xn--czrw28b.edu.tw", "edu.tw"},
+- {"xn--czrw28b.tw", "xn--czrw28b.tw"},
+- {"www.xn--czrw28b.tw", "xn--czrw28b.tw"},
+- {"xn--uc0atv.xn--czrw28b.tw", "xn--czrw28b.tw"},
+- {"xn--kpry57d.tw", "tw"},
+-
+- // The .uk rules are:
+- // *.uk
+- // *.sch.uk
+- // !bl.uk
+- // !british-library.uk
+- // !jet.uk
+- // !mod.uk
+- // !national-library-scotland.uk
+- // !nel.uk
+- // !nic.uk
+- // !nls.uk
+- // !parliament.uk
+- // blogspot.co.uk
+- {"uk", "uk"},
+- {"aaa.uk", "aaa.uk"},
+- {"www.aaa.uk", "aaa.uk"},
+- {"mod.uk", "uk"},
+- {"www.mod.uk", "uk"},
+- {"sch.uk", "sch.uk"},
+- {"mod.sch.uk", "mod.sch.uk"},
+- {"www.sch.uk", "www.sch.uk"},
+- {"blogspot.co.uk", "blogspot.co.uk"},
+- {"blogspot.nic.uk", "uk"},
+- {"blogspot.sch.uk", "blogspot.sch.uk"},
+-
+- // The .рф rules are
+- // рф (xn--p1ai)
+- {"xn--p1ai", "xn--p1ai"},
+- {"aaa.xn--p1ai", "xn--p1ai"},
+- {"www.xxx.yyy.xn--p1ai", "xn--p1ai"},
+-
+- // The .zw rules are:
+- // *.zw
+- {"zw", "zw"},
+- {"www.zw", "www.zw"},
+- {"zzz.zw", "zzz.zw"},
+- {"www.zzz.zw", "zzz.zw"},
+- {"www.xxx.yyy.zzz.zw", "zzz.zw"},
+-
+- // There are no .nosuchtld rules.
+- {"nosuchtld", "nosuchtld"},
+- {"foo.nosuchtld", "nosuchtld"},
+- {"bar.foo.nosuchtld", "nosuchtld"},
+-}
+-
+-func BenchmarkPublicSuffix(b *testing.B) {
+- for i := 0; i < b.N; i++ {
+- for _, tc := range publicSuffixTestCases {
+- List.PublicSuffix(tc.domain)
+- }
+- }
+-}
+-
+-func TestPublicSuffix(t *testing.T) {
+- for _, tc := range publicSuffixTestCases {
+- got := List.PublicSuffix(tc.domain)
+- if got != tc.want {
+- t.Errorf("%q: got %q, want %q", tc.domain, got, tc.want)
+- }
+- }
+-}
+-
+-func TestSlowPublicSuffix(t *testing.T) {
+- for _, tc := range publicSuffixTestCases {
+- got := slowPublicSuffix(tc.domain)
+- if got != tc.want {
+- t.Errorf("%q: got %q, want %q", tc.domain, got, tc.want)
+- }
+- }
+-}
+-
+-// slowPublicSuffix implements the canonical (but O(number of rules)) public
+-// suffix algorithm described at http://publicsuffix.org/list/.
+-//
+-// 1. Match domain against all rules and take note of the matching ones.
+-// 2. If no rules match, the prevailing rule is "*".
+-// 3. If more than one rule matches, the prevailing rule is the one which is an exception rule.
+-// 4. If there is no matching exception rule, the prevailing rule is the one with the most labels.
+-// 5. If the prevailing rule is a exception rule, modify it by removing the leftmost label.
+-// 6. The public suffix is the set of labels from the domain which directly match the labels of the prevailing rule (joined by dots).
+-// 7. The registered or registrable domain is the public suffix plus one additional label.
+-//
+-// This function returns the public suffix, not the registrable domain, and so
+-// it stops after step 6.
+-func slowPublicSuffix(domain string) string {
+- match := func(rulePart, domainPart string) bool {
+- switch rulePart[0] {
+- case '*':
+- return true
+- case '!':
+- return rulePart[1:] == domainPart
+- }
+- return rulePart == domainPart
+- }
+-
+- domainParts := strings.Split(domain, ".")
+- var matchingRules [][]string
+-
+-loop:
+- for _, rule := range rules {
+- ruleParts := strings.Split(rule, ".")
+- if len(domainParts) < len(ruleParts) {
+- continue
+- }
+- for i := range ruleParts {
+- rulePart := ruleParts[len(ruleParts)-1-i]
+- domainPart := domainParts[len(domainParts)-1-i]
+- if !match(rulePart, domainPart) {
+- continue loop
+- }
+- }
+- matchingRules = append(matchingRules, ruleParts)
+- }
+- if len(matchingRules) == 0 {
+- matchingRules = append(matchingRules, []string{"*"})
+- } else {
+- sort.Sort(byPriority(matchingRules))
+- }
+- prevailing := matchingRules[0]
+- if prevailing[0][0] == '!' {
+- prevailing = prevailing[1:]
+- }
+- if prevailing[0][0] == '*' {
+- replaced := domainParts[len(domainParts)-len(prevailing)]
+- prevailing = append([]string{replaced}, prevailing[1:]...)
+- }
+- return strings.Join(prevailing, ".")
+-}
+-
+-type byPriority [][]string
+-
+-func (b byPriority) Len() int { return len(b) }
+-func (b byPriority) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
+-func (b byPriority) Less(i, j int) bool {
+- if b[i][0][0] == '!' {
+- return true
+- }
+- if b[j][0][0] == '!' {
+- return false
+- }
+- return len(b[i]) > len(b[j])
+-}
+-
+-// eTLDPlusOneTestCases come from
+-// http://mxr.mozilla.org/mozilla-central/source/netwerk/test/unit/data/test_psl.txt
+-var eTLDPlusOneTestCases = []struct {
+- domain, want string
+-}{
+- // Empty input.
+- {"", ""},
+- // Unlisted TLD.
+- {"example", ""},
+- {"example.example", "example.example"},
+- {"b.example.example", "example.example"},
+- {"a.b.example.example", "example.example"},
+- // TLD with only 1 rule.
+- {"biz", ""},
+- {"domain.biz", "domain.biz"},
+- {"b.domain.biz", "domain.biz"},
+- {"a.b.domain.biz", "domain.biz"},
+- // TLD with some 2-level rules.
+- {"com", ""},
+- {"example.com", "example.com"},
+- {"b.example.com", "example.com"},
+- {"a.b.example.com", "example.com"},
+- {"uk.com", ""},
+- {"example.uk.com", "example.uk.com"},
+- {"b.example.uk.com", "example.uk.com"},
+- {"a.b.example.uk.com", "example.uk.com"},
+- {"test.ac", "test.ac"},
+- // TLD with only 1 (wildcard) rule.
+- {"cy", ""},
+- {"c.cy", ""},
+- {"b.c.cy", "b.c.cy"},
+- {"a.b.c.cy", "b.c.cy"},
+- // More complex TLD.
+- {"jp", ""},
+- {"test.jp", "test.jp"},
+- {"www.test.jp", "test.jp"},
+- {"ac.jp", ""},
+- {"test.ac.jp", "test.ac.jp"},
+- {"www.test.ac.jp", "test.ac.jp"},
+- {"kyoto.jp", ""},
+- {"test.kyoto.jp", "test.kyoto.jp"},
+- {"ide.kyoto.jp", ""},
+- {"b.ide.kyoto.jp", "b.ide.kyoto.jp"},
+- {"a.b.ide.kyoto.jp", "b.ide.kyoto.jp"},
+- {"c.kobe.jp", ""},
+- {"b.c.kobe.jp", "b.c.kobe.jp"},
+- {"a.b.c.kobe.jp", "b.c.kobe.jp"},
+- {"city.kobe.jp", "city.kobe.jp"},
+- {"www.city.kobe.jp", "city.kobe.jp"},
+- // TLD with a wildcard rule and exceptions.
+- {"om", ""},
+- {"test.om", ""},
+- {"b.test.om", "b.test.om"},
+- {"a.b.test.om", "b.test.om"},
+- {"songfest.om", "songfest.om"},
+- {"www.songfest.om", "songfest.om"},
+- // US K12.
+- {"us", ""},
+- {"test.us", "test.us"},
+- {"www.test.us", "test.us"},
+- {"ak.us", ""},
+- {"test.ak.us", "test.ak.us"},
+- {"www.test.ak.us", "test.ak.us"},
+- {"k12.ak.us", ""},
+- {"test.k12.ak.us", "test.k12.ak.us"},
+- {"www.test.k12.ak.us", "test.k12.ak.us"},
+-}
+-
+-func TestEffectiveTLDPlusOne(t *testing.T) {
+- for _, tc := range eTLDPlusOneTestCases {
+- got, _ := EffectiveTLDPlusOne(tc.domain)
+- if got != tc.want {
+- t.Errorf("%q: got %q, want %q", tc.domain, got, tc.want)
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/publicsuffix/table.go docker-devmapper/vendor/src/code.google.com/p/go.net/publicsuffix/table.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/publicsuffix/table.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/publicsuffix/table.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,6877 +0,0 @@
+-// generated by go run gen.go; DO NOT EDIT
+-
+-package publicsuffix
+-
+-const version = "publicsuffix.org's effective_tld_names.dat, hg revision 45cfff9c781f (2013-04-23)"
+-
+-const (
+- nodesBitsChildren = 9
+- nodesBitsICANN = 1
+- nodesBitsTextOffset = 15
+- nodesBitsTextLength = 6
+-
+- childrenBitsWildcard = 1
+- childrenBitsNodeType = 2
+- childrenBitsHi = 14
+- childrenBitsLo = 14
+-)
+-
+-const (
+- nodeTypeNormal = 0
+- nodeTypeException = 1
+- nodeTypeParentOnly = 2
+-)
+-
+-// numTLD is the number of top level domains.
+-const numTLD = 310
+-
+-// Text is the combined text of all labels.
+-const text = "bernrtarantokyotangoceanographichisokananporovnoceanographiquebe" +
+- "catanzarowfarmsteadrobakrehamnaturbruksgymnaturhistorisches3-us-" +
+- "west-2beskidyn-o-saurlandebuildingjerstadotsurugashimanxjeonname" +
+- "rikawauebetainaboxfordeatnuernbergjesdalivornohtawaramotoineppul" +
+- "messinatsukigatakasakiiyamanobeeldengeluidyndns-at-workinggroupo" +
+- "wiatargindianapolis-a-bloggerbielawalesundyndns-blogdns3-website" +
+- "-ap-northeast-1biellaakesvuemieleccebieszczadygeyachiyodabievat-" +
+- "band-campobassobetsuldalvdalaskanittedalaheadjudygarlandyndns-fr" +
+- "eemasonryonagoyabifukagawallonieruchomoscienceandindustrynatuurw" +
+- "etenschappenaumburgjovikashiharabihorologyonaguniversityumenaust" +
+- "dalosangeles3-website-ap-southeast-1bilbaogakievenassisibenikiho" +
+- "kumakogenebakkeshibechambagricultureklambulancertificationavalot" +
+- "eneindianmarketplacebillustrationavigationavuotnakanojosoyrovigo" +
+- "palanakanotoddenawrastelecomoldebiolsztynsettlers3-website-ap-so" +
+- "utheast-2birdartdecodynaliascoli-picenogiessenglandyndns-homeftp" +
+- "access3-website-eu-west-1birkenesoddtangenoamishirasatodabirthpl" +
+- "acebjarkoyoriikashiwarabjerkreimperiabjugnayoromutashinainfoggia" +
+- "bmdyndns-ipaleosloppadovanylveniceboltarnobrzegyptianpachigasaki" +
+- "ds3-website-sa-east-1bolzanordlandyndns-mailouvrebomloabaths3-we" +
+- "bsite-us-east-1bonnikkoebenhavnikolaevenessebyglandyndns-office-" +
+- "on-the-webhopocznorfolkebiblebtimnetzgorzeleccoloradoplateaukraa" +
+- "nghkemerovoldavvenjargalsadoes-itarumizusawabostonakijinsekikoge" +
+- "novarabotanicalgardeninomiyakonojournalismolenskashiwazakinsuran" +
+- "cebotanicgardenirasakintelligencebotanycateringebunkyonanaoshima" +
+- "bariakesennumalvikasukabeiarndyndns-pics3-website-us-gov-west-1b" +
+- "ozentsujiiebrandywinevalleyukuhashimoichinosekigaharabrasiljan-m" +
+- "ayenishiawakurabremangerbresciabrindisiellakasamatsudolls3-websi" +
+- "te-us-west-1bristolgamvikasumigaurawa-mazowszexeterbritish-libra" +
+- "ryazannakadomari-elasticbeanstalkasuyanagawabritishcolumbialowie" +
+- "zagannefrankfurtatarstanishiazainuyamanouchikuhokuryugasakitashi" +
+- "obarabroadcastleasinglassassinational-library-scotlandes3-websit" +
+- "e-us-west-2broke-itateshinanomachildrensgardenishigoshikiminokam" +
+- "oenairguardyndns-remoteginankokubunjis-a-bulls-fanishiharabroker" +
+- "bronnoysundyndns-serverbaniabrumunddalowiczest-a-la-maisondre-la" +
+- "ndyndns-webetsuikikugawabrunelblagdenesnaaseralingenkainanaejrie" +
+- "tis-a-candidatebrusselsakuragawabruxellesjamalborkangerbryanskle" +
+- "ppgliwicebrynewjerseyurihonjostrodabvbalatinabearalvahkijogaszko" +
+- "la-speziaustrheimatunduhrennesoygardeniwaizumiotsukuibigawaustev" +
+- "ollimanowarudasnesoddenmarkhangelskjaknoluoktaikicks-assedicaser" +
+- "taishinomakikuchikumagayagawatchandclockarlsoyekaterinburgdynias" +
+- "kvollezajskariyamegurobihirosakikamijimaostalbansnasabaerobatica" +
+- "sadelamonedagroks-theaternopilawakkanaibetsubamericanartanddesig" +
+- "nieznodawaraholtalendoftheinternethnologyeongnamegawakuyabukibic" +
+- "huozudmurtiamusementakkofuelverumbone-burg12bwhalinglogowildlife" +
+- "djelenia-gorabzgradyndns-wikimobetsurutaharacivilaviationishinoo" +
+- "motegotembaixadacivilisationishinoshimacivilizationishiokoppegar" +
+- "dcivilwarmiasakuchinotsuchiurakawaclintonoshonaip6boneat-urlewis" +
+- "millerhcloudfrontariobanazawaeroportalabamagasakishimabarahkkera" +
+- "vjudaicaarborteaches-yogasawaragusartsaritsynarviikamogawagrinet" +
+- "cmwegrowestfalenarvik-uralsk12000cntaxis-a-bruinsfanishitosashim" +
+- "izunaminamiawajikis-a-cubicle-slaveroyrviknakaniikawatanaguracol" +
+- "umbusantiquesakyotanabellunordkappspotenzachpomorskienishiwakis-" +
+- "a-democratgorycomputerhistoryofscience-fictionissedalutskazoolog" +
+- "ycongresodelalengua3consuladoomdnsaliascolipicenonoichikawamisat" +
+- "obishimagnitkagaminord-aurdaltoadigeiseiroudaegubalestrandaberga" +
+- "moarekepnorddalindasiauthordalandivtasvuodnaharimaniwakurate164c" +
+- "onsultanthropologyconsultingvolluxembourgminakamichigangwonisshi" +
+- "ngotsukisofukushimarburgqchattanooganordreisa-hockeynutazulsando" +
+- "yusuharacontemporaryartgalleryggetmyipanamaconventjeldsundcooper" +
+- "aunitelevisioniyodogawacopenhagentsalangenlsalatjomelhusdecorati" +
+- "veartsaltdaluzernrwritesthisblogspotowncorporationcorvettexashor" +
+- "okanaiecosenzakopanewyorkshireggiocalabriacostumediaphonefosshnc" +
+- "ountysfjordcqhabororoskolegnicambridgeorgiacranbrookuwanamizuhob" +
+- "by-sitextileborkdalvivcheltenham-radio-openair-surveillancecremo" +
+- "nagatorockartuzycrewroclawwwcrimeacrotoneculturalcentercuneocxn-" +
+- "-3e0b707ecymrussiafieldfigueresalvadordalillehammerfest-le-patro" +
+- "ndheiminamifuranofilateliafilminamiiserniafineartsalzburgrimstad" +
+- "finlandfinnoyfirenzefirminamiizukamishihoronobeokamikoaniihamata" +
+- "makawajimashikedafitjarchitecturennebudejjuedischesapeakebayfjal" +
+- "erdalflekkefjordflesbergenflightoyakokamiokamikitayamatotakadafl" +
+- "ogisticsamegawafloraflorencefloridaflorokunohealthruhereggioemil" +
+- "iafndfolldalfor-better-thanawafor-ourfor-somedicaltanissettaitog" +
+- "itsulikes-piefor-thedmarkchristiansburgroks-thisayamanashichikas" +
+- "hukujukuriyamaritimodalenforceforgotdnsamnangerforli-cesena-forl" +
+- "icesenaforlikescandynathomebuiltoyokawaforsandasuolodingenfortmi" +
+- "ssoulan-udell-ogliastrakhanamigawafortworthachijorpelandforumina" +
+- "mimakis-a-designerfosnesanfranciscolonialwilliamsburgrongafother" +
+- "fredrikstadaokagakinkobeardudinkakegawalbrzychampionshiparachuti" +
+- "ngrossetouchijiwadepotaruis-a-doctorskenfreiburgroundhandlingroz" +
+- "nyfreightoyonakagyokutomaritimekeepingrparaglidingruenoharafribo" +
+- "urgsmolajollanbibaidarfrognfrolandfrom-akunemurorankoshigayachim" +
+- "atainaikawababia-gorakkestadultoyonezawafrom-alfrom-arqldfrom-az" +
+- "hytomyrfrom-cahcesuolocalhistorybnikahokutoeigersundfrom-collect" +
+- "ionfrom-ctoyonofrom-dchelyabinskodjeffersongfest-a-la-masionishi" +
+- "katakasugais-a-celticsfanishikatsuragis-a-chefauskedsmokorsettle" +
+- "mentateyamafrom-dellogliastraderfrom-flakstadtoyookanrafrom-gaus" +
+- "dalfrom-higashiagatsumagoizumizakirafrom-iafrom-idfrom-ilfrom-in" +
+- "cheonfrom-ksangouvicenzaporizhzheguris-a-financialadvisor-aurdal" +
+- "from-kyotobetsuwanouchikushinonsennanburyatiafrom-lahppiacenzama" +
+- "microlightoyosatomobeneventochiokinoshimalselvendrellfrom-mannos" +
+- "hirooshikamaishimodatefrom-mdfrom-medio-campidano-mediocampidano" +
+- "mediofrom-midoringerikefrom-mnfrom-mochizukirkenesanjournalistav" +
+- "ernfrom-msannanfrom-mtoyotaris-a-geekgunmarnardalfrom-ncherkasyd" +
+- "neyusuissembokumamotoyamatsumaebashikaois-a-conservativefsnillfj" +
+- "ordyroyuulvikaszubytomakomaibarafrom-ndfrom-nefrom-nhachinohekin" +
+- "annestadfrom-njessheiminamiminowafrom-nminamiogunionfrom-nvdonsk" +
+- "habarovskhakassiafrom-nyfrom-ohdafrom-oketogonohejis-a-greenfrom" +
+- "-orlandfrom-pacifichernigovernmentatsunostrolekanazawafrom-prdfr" +
+- "om-rissagaeroclubindallaspeziamallamadridvrdnsdojobojis-a-guruns" +
+- "akatakatsukis-a-hard-workerfrom-schlesischesannohemnesantabarbar" +
+- "afrom-sdfrom-tnfrom-txn--45brj9chernihivanovosibirskydivingloppe" +
+- "nzaogashimadachicagobiernoelectronicoalstahaugesundfrom-utsiracu" +
+- "sagamiharafrom-vadsoftwaremarkerfrom-vtoyotomiyazakis-a-hunterfr" +
+- "om-wafrom-wielunnerfrom-wvenneslaskerfrom-wyfrosinonefrostargard" +
+- "froyaitaiwanair-traffic-controlleyfstarostwodzislawfujiiderafuji" +
+- "kawaguchikonefujiminohkurafujinomiyadafujiokayamansionsantacruzh" +
+- "gorodfujisatoshoofujisawafujishiroishidakabiratoridelmenhorstalo" +
+- "wa-wolawafujiyoshidafukayabeauxartsandcraftsantafederationfukuch" +
+- "iyamadafukudominichernivtsiemenswedenishikawazukanagawafukuis-a-" +
+- "knightoyotsukaidofukumitsukefukuokazakirovogradoyfukuroishigakir" +
+- "yufuefukihabikinokawaircraftoyourafukusakisarazunzenfukuyamagata" +
+- "jimidsundfunabashiriuchinadafunagatajirittogurafunahashikamiamak" +
+- "usatsumasendaisenfundaciofuoiskujitawarafuosskoczowfurniturepbod" +
+- "yndns-at-homednsanukis-a-landscaperugiafurubiraquariuminamisanri" +
+- "kubetsurgeonshalloffameiwamatsunofurudonostiafurukawaharafusognd" +
+- "alfussaikishiwadafutabayamaguchinomigawafuttsunanjohanamakinohar" +
+- "afylkesbiblfyresdalhakubanhakuis-a-lawyerhakusandnessjoenhaldenh" +
+- "alsaintlouis-a-anarchistoiretinazawahammarfeastafricapebretonami" +
+- "bungotakadahamurakamigoris-a-liberalhangglidinguovdageaidnuoroms" +
+- "koguchikuzenhannanmokuizumodellingushikamifuranotairesaotomeldal" +
+- "hannoverhallancashirehanyuzenhapmirkutskharkivguernseyhappoumuen" +
+- "chenhareidsbergbauernurembergwangjurharstadharvestcelebrationhas" +
+- "amarahasaminami-alpschoenbrunnhasudahasvikharkoveronamsskoganeis" +
+- "-a-libertarianhatogayakagehatoyamazakitahiroshimarugame-hostre-t" +
+- "otenkawahatsukaichiharahattfjelldalhawaiijimarumorimachidahayash" +
+- "imamotobusheyhazuminobusenetozsdehemsedalhigashihiroshimanehigas" +
+- "hiizumozakitakatakamoriokamakurazakitakyushuaiahigashikagawahiga" +
+- "shikagurasoedahigashikawakitaaikitamidtre-gauldalhigashikurumedi" +
+- "zinhistorischesapporohigashimatsushimarylandhigashimatsuyamakita" +
+- "akitadaitoigawahigashimurayamalatvuopmifunehigashinarusells-for-" +
+- "lessaratoverranhigashinehigashiomihachimanchesterhigashiosakasay" +
+- "amamotorcycleikangerhigashishirakawamatakanabedzin-addrammenviro" +
+- "nmentalconservationhigashisumiyoshikawaminamiaikitamotosumidatla" +
+- "ntichiryuoharuovatmpalermomanposts-and-telecommunicationsakurais" +
+- "-a-cpaderbornishimerakerhigashitsunotteroyhigashiurausukitanakag" +
+- "usukumodenakamuratakanezawahigashiyamatokoriyamanakakogawahigash" +
+- "iyodogawahigashiyoshinogaris-a-linux-useranishiaritabashiibahcca" +
+- "vuotnagaokakyotambadajozoraumaizurubtsovskjervoystre-slidrettran" +
+- "amsosnowiechitachinakagawawindmillucernehiraizumisatohmarylhurst" +
+- "athelleirfjordhirakatashinagawahiranairlinedre-eikerimo-i-ranaci" +
+- "onhirarahiratsukagawahirayakumodernhistorichousesarpsborgxn--54b" +
+- "7fta0cchernovtsykkylveneziahitachiomiyaginowaniigatakahamantovak" +
+- "sdalhitachiotagoogleapisa-geekhersoniikappulawyhitoyoshimihamada" +
+- "hitradingzjetozawahjartdalhjelmelandholeckobierzycehomelinuxn--5" +
+- "5qx5dhomeunixn--90a3academykolaivano-frankivskiervaapsteiermarkh" +
+- "melnitskiyamasoyhongooglecodespotranbyhonjyoichiropractichitoset" +
+- "ogakushimotoganewportlligatewayuzawahornindalhortendofinternetra" +
+- "ni-andria-barletta-trani-andriahoteledatabaseballangenhoyangerho" +
+- "ylandetroitraniandriabarlettatraniandriahuissier-justicehumaniti" +
+- "esarufutsunomiyawakasaikaitakoelnhurdalhurumajis-a-llamasfjorden" +
+- "hyugawaraissmarterthanyouthachiojiyaizuwakamatsubushikusakadogaw" +
+- "aiwatarailwayiwateiwatsukiyonojfkhvestbyjgorajpnkoperviklabuysho" +
+- "usesavannahgakoryolbia-tempio-olbiatempioolbialystokkekosaigawak" +
+- "osakaerodromeconferencechirebungoonomichinomiyakeisenbahnkoseis-" +
+- "a-personaltrainerkoshimizumakis-a-photographeroykoshunantokamach" +
+- "ippubetsubetsugarustkanzakiyosumitakaginozawaonsenkostromahabmer" +
+- "kosugekotohiradomurakotourakouhokutamakis-a-playerkounosumypetsa" +
+- "yokkaichirurgiens-dentisteshikagamiishikarikaturindalkouyamasuda" +
+- "kouzushimateramoduminamiuonumatsusakahogis-a-republicanadakozaga" +
+- "wakozakis-a-rockstarachowicekrageroticarbonia-iglesias-carboniai" +
+- "glesiascarboniakrakowkrasnoyarskmsaves-the-whalessandria-trani-b" +
+- "arletta-andriatranibarlettaandriakristiansandefjordkristiansundk" +
+- "rodsheradkrokstadelvantaakryminamiyamashirokawanabellevuedavvesi" +
+- "idazaifudaigobodoesntexisteingeekokonoekumatorinokumejimatsumoto" +
+- "fukekumenanyokaichibaikaliszczytnord-odalkunisakis-a-socialistat" +
+- "ionkunitachiaraisaijoshkar-olangevagsoykunitomigusukukis-a-soxfa" +
+- "nkunneppuwajimakunstsammlungkunstunddesignkurekurgankurobelgorod" +
+- "oykurogimimatakasagorgekuroisognekuromatsunairportland-4-salerno" +
+- "gatagajoetsuruokadenagahamaroyerotikafjordkurotakikawasakis-a-st" +
+- "udentranoykurskolobrzegersundkushirogawakustanairtraffichocolate" +
+- "lemarkatowicekusunndalkutchandakutnokuzbassnoasaitamatsukuris-a-" +
+- "teacherkassykuzumakis-a-techietis-a-nascarfankvafjordkvalsundkva" +
+- "msterdamberkeleykvanangenkvinesdalkvinnheradkviteseidskogkvitsoy" +
+- "kwkyowariasahikawakyuragithubalsanagochihayaakasakawagoebinorils" +
+- "karpaczeladzgoravocataniaustraliaurskog-holandiscoveryokamikawan" +
+- "ehonbetsurugildeskalmykiasmatartcentertainmentamayukibestadgcagl" +
+- "iaridagawassamukawatarikuzentakatairaosteroykengerdalto-adigeelv" +
+- "inckareliaomoriguchiharamlierneuest-mon-blogueurmishimatsuuramis" +
+- "sileitungsenmisugitokashikis-an-actormitakeharamitourisminanomit" +
+- "oyoakemiuramiyazumiyotamanomjondalenmombetsurgutrentomskomaganem" +
+- "oneyagawamonmouthachirogatakahashimamakitagawamonticellondonetsk" +
+- "omakis-a-painteractivegarsheiheijis-a-musicianmontrealestatecoun" +
+- "cilmonza-brianzamonza-e-della-brianzamonzabrianzamonzaebrianzamo" +
+- "nzaedellabrianzamordoviamoriyamatsuzakis-an-actressasayamamoriyo" +
+- "shiokamisunagawamoroyamatta-varjjatrevisolaquilapyatigorskomatsu" +
+- "shimassa-carrara-massacarraramassabuzenmoscowmoseushistorymosjoe" +
+- "nmoskeneschokoladenmosreggio-calabriamosschoolkuszlgmosvikomforb" +
+- "allooninggfarmerseinebinagisodegaurautomotivelandivttasvuotnakai" +
+- "wamizawaustinnasushiobarastronomyokohamamatsudaejeonbukarmoyokos" +
+- "ukaratsuginamikatagamilitaryokote12muenstermugis-an-anarchistori" +
+- "calsocietysnesaseboknowsitallmuikamitondabayashiogamagoriziamuko" +
+- "chikuseihigashichichibuskerudinewmexicoldwarszawashingtondchofun" +
+- "atoristanore-og-uvdalukowloclawekatsushikabelaugustowadagestange" +
+- "mologicaliforniamulhousells-itriesteamurskiptveterinairecreation" +
+- "munakatanemuncieszynmuosattemurmanskomitamamuramurotorcraftroand" +
+- "inosaureshinomusashimurayamamusashinodesashibetsukumiyamazonawsc" +
+- "hweizhevskommunalforbundmuseetrogstadmuseumverenigingmutsuzawamy" +
+- "photoshimamytis-a-bookkeepermincommunitysvardopartis-an-engineer" +
+- "pasadenakasatsunais-an-entertainerpassenger-associationpaviapesc" +
+- "arapharmaciensciencecentersciencehistorypharmacyberlevagangaviik" +
+- "arugaulardalphiladelphiaareadmyblogsitephilatelyphoenixn--aropor" +
+- "t-byaotsuzakanonjis-byklebesbydgoszczecincinnationalfirearmsaska" +
+- "tchewanphotographyogoris-certifiedogawarabikomaezakirunosegawapi" +
+- "lotscientisteigenpippupiszminnesotaketakashimatsushigepittsburgh" +
+- "ofermobarapkommuneplanetariumisakis-a-therapistoiaplantationplan" +
+- "tscrapper-siteplazaplchonangokasejnynysafetychyllestadplorenskog" +
+- "podhaleksvikomonopodlasiedlcepodzonepoltavaresearchaeologicalpom" +
+- "orzeszowpordenoneporsangerporsangujolsterporsgrunnanpoznanpreser" +
+- "vationpresidioprincipesaro-urbino-pesarourbinopesaromantelekommu" +
+- "nikationprivneprochowiceproductionproferraraprojectromsolognepro" +
+- "mocionpruszkowprzeworskogpsienakatombetsurnadalptzparliamentroms" +
+- "akakinokis-an-artistavangerpvtrusteepwpzwqslattumisasaguris-an-a" +
+- "ccountantransportrapaniizashellaskimitsubatamiastarnbergsherbroo" +
+- "kegawashimojis-goneshimokawashimokitayamashimonitayanagis-into-a" +
+- "nimeeresassaris-a-nursells-for-usgardenshimonosekikawashimosuwal" +
+- "kis-into-carsatxn--9dbhblg6dielddanuorriminingshimotsukeshimotsu" +
+- "mashingulenshinichinanshinjoyoitakaokamchatkameokameyamashinashi" +
+- "kiyosatohnoshowashinjukumanoshinkamigotoyohashimotokorozawashins" +
+- "hinotsusakis-into-cartoonsaudashinshiroshintokushimashintomikasa" +
+- "harashinyoshitomiokaneyamazoeshiojirishirifujiedashioyanaizushir" +
+- "ahamatonbetsusonoshirakoenigshiranukaniepceshiraois-into-gamesav" +
+- "erdeshiraokanmakiyosemiteshiratakahagis-leetravellinoshishikuis-" +
+- "lostfoldshisokndalshisuifuettertdasnetzshitaramashizukuishimofus" +
+- "aitokonamegatakatoris-not-certifieducatorahimeshimageandsoundand" +
+- "visionshizuokannamihokkaidoshibuyahabaghdadsigdalsimbirskomvuxn-" +
+- "-andy-irasimple-urlsirdalsldslgslupskovestfoldsnzsolundsomasvuot" +
+- "nakayamasomnakhodkamitsuesoosopotularssonsor-odalsor-varangersor" +
+- "foldsorreisahayakawakamiichikaiseiyokoshibahikariwanumatakayamas" +
+- "ortlandsorumisawasouthcarolinaklodzkodairasouthwesterniiminamias" +
+- "higarasowaspace-to-renturystykanumazuryspbalsfjordlugolekalugans" +
+- "karuizawavoues3-ap-northeast-1spjelkavikonantanangerspydebergsqu" +
+- "arendalenvikingatlantakazakis-savedunetnedalsrvestneseoullensake" +
+- "rsteinkjerusalembetsukubahcavuotnagaivuotnagakutechnologystjohns" +
+- "tjordalshalsenstockholmestrandstor-elvdalstordalstorenburgstorfj" +
+- "ordstpetersburgstuff-4-salevangerstuttgartuvarggatverdalsuzukano" +
+- "yaltaijis-slickhmelnytskyiversaillesauheradsvalbardurhamburgsvei" +
+- "osvelvikongsbergsvizzeraswidnicarrierswiebodzinderoyswinoujscien" +
+- "ceandhistorysxn--asky-iravestre-slidreamhosterservebbscrappingve" +
+- "stre-totenris-uberleetrdvestvagoyvevelstadvibo-valentiavibovalen" +
+- "tiavideovinnicartoonarteducationalchikugojomedecinemamurogawatch" +
+- "-and-clockongsvingervinnytsiavirginiavirtualvirtuelviterbolognag" +
+- "asakikonaioirasecngvladikavkazanvladimirumasakitaurayasudavladiv" +
+- "ostokaizukarasjohkamiminerserveftparmavlogvolgogradvolkenkunders" +
+- "eaportvologdanskoninohembygdsforbundvolyngdalvoronezhitomirvosse" +
+- "vangenvrnvyatkarasjokonskowolansavonakatsugawaxn--bdddj-mrabdxn-" +
+- "-bearalvhki-y4axn--berlevg-jxaxn--bhcavuotna-s4axn--bhccavuotna-" +
+- "k7axn--bidr-5nachikatsuuraxn--bievt-0qaxn--bjarky-fyaroslavlaand" +
+- "erenxn--bjddar-ptakinouexn--blt-elaborxn--bmlo-grajewolominamata" +
+- "ketomisatokuyamaxn--bod-2napleservegame-servercellillesandiegorl" +
+- "icexn--brnny-wuaccident-investigationjukudoyamaceratabusebastopo" +
+- "logyeongbukonyvelomzaporizhzhiaxn--brnnysund-m8accident-preventi" +
+- "onlinebraskaunbieidsvollxn--brum-voagatxn--btsfjord-9zaxn--ciqpn" +
+- "xn--clchc0ea0b2g2a9gcdxn--comunicaes-v6a2oxn--correios-e-telecom" +
+- "unicaes-ghc29axn--czrw28bambleangaviikagoshimallorcadaques3-ap-s" +
+- "outheast-2xn--davvenjrga-y4axn--dnna-grandrapidserviceseminexn--" +
+- "drbak-wuaxn--dyry-iraxn--eveni-0qa01gaxn--finny-yuaxn--fiqs8sett" +
+- "surreyxn--fiqz9sevastopolelxn--fjord-lraxn--fl-ziaxn--flor-jraxn" +
+- "--fpcrj9c3dxn--frde-granexn--frna-woarais-very-badaddjamisongdal" +
+- "enxn--frya-hraxn--fzc2c9e2choseikakudamatsuedtirollagrarboretumi" +
+- "namidaitomanmobileirvikatsuyamashikokuchuostrowiecfarsundyndns-w" +
+- "orkshoppdaluccargodonnagasuketrzynishiizunazukis-a-catererxn--ge" +
+- "crj9choshibukawaxn--ggaviika-8ya47hadanotogawaxn--gildeskl-g0axn" +
+- "--givuotna-8yasakaiminatonsbergxn--gjvik-wuaxn--gls-elachoyodont" +
+- "existmein-the-bandaiwafunewspaperxn--gmq050is-very-evillagematsu" +
+- "barakawachinaganoharaokinawashirosatobamagazinewhampshireggio-em" +
+- "iliaxn--gmqw5axn--h-2familyngenxn--h1aeghadselfiparisor-fronxn--" +
+- "h2brj9chtraeumtgeradefenseljejuifcharterxn--hbmer-xqaxn--hcesuol" +
+- "o-7ya35barcelonagaravennagareyamalopolskanlandnepropetrovskaruma" +
+- "intenancebizenakamagayahikobayashijonawatehimejiheyakutiaxn--her" +
+- "y-iraxn--hgebostad-g3axn--hmmrfeasta-s4achungbukautokeinostrowwl" +
+- "kpalmspringsakerxn--hnefoss-q1axn--hobl-iraxn--holtlen-hxaxn--hp" +
+- "mir-xqaxn--hyanger-q1axn--hylandet-54axn--indery-fyasugis-very-g" +
+- "ooddaxn--io0a7is-very-nicexn--j1amhaebaruminamitanexn--j6w193gxn" +
+- "--jlster-byasuokarasuyamashikizunokunimilanoxn--jrpeland-54axn--" +
+- "karmy-yuaxn--kfjord-iuaxn--klbu-woaxn--koluokta-7ya57hagaxn--kpr" +
+- "w13dxn--kpry57dxn--krager-gyatominamibosojaworznoxn--kranghke-b0" +
+- "axn--krdsherad-m8axn--krehamn-dxaxn--krjohka-hwab49jevnakershusc" +
+- "ulturexn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-fyatsukaratexn--kvn" +
+- "angen-k0axn--l-1fareastcoastaldefencexn--laheadju-7yatsushiroxn-" +
+- "-langevg-jxaxn--lcvr32dxn--ldingen-q1axn--leagaviika-52barreaudn" +
+- "edalnationalheritagembroideryokozemergencyclopedicasinordre-land" +
+- "nipropetrovskasaokaminokawanishiaizubangepilepsyzranzanativeamer" +
+- "icanantiques3-eu-west-1xn--lesund-huaxn--lgbbat1ad8jewelryxn--lg" +
+- "rd-poachungnamdalseidfjordxn--lhppi-xqaxn--linds-pratottoris-ver" +
+- "y-sweetreexn--lns-qlarvikooris-a-patsfanxn--loabt-0qaxn--lrdal-s" +
+- "raxn--lrenskog-54axn--lt-liachuvashiaxn--lten-granvindafjordxn--" +
+- "lury-iraxn--mely-iraxn--merker-kuaxn--mgb2ddeshacknetrysilkomoro" +
+- "tsukamisatohoboldlygoingnowhere-for-moregontrailroadxn--mgb9awbf" +
+- "etsundxn--mgba3a4f16axn--mgba3a4franarashinoharaxn--mgbaam7a8hag" +
+- "ebostadxn--mgbayh7gpaduaxn--mgbbh1a71exn--mgbc0a9azcgxn--mgberp4" +
+- "a5d4a87gxn--mgberp4a5d4arxn--mgbqly7c0a67fbciminamiechizenishino" +
+- "miyashironoxn--mgbqly7cvafranziskanerimarinexn--mgbtf8flandersha" +
+- "kotankzxn--mjndalen-64axn--mk0axis-with-thebandovre-eikerxn--mla" +
+- "tvuopmi-s4axn--mli-tlavagiskexn--mlselv-iuaxn--moreke-juaxn--mos" +
+- "jen-eyawaraxn--mot-tlavangenxn--mre-og-romsdal-qqbarrel-of-knowl" +
+- "edgeologyomitanobiraxn--msy-ula0haibarakitahatakahatakaishimogos" +
+- "enxn--mtta-vrjjat-k7afgretajimakanegasakisosakitagatakaharunjarg" +
+- "axn--muost-0qaxn--mxtq1misconfusedxn--nmesjevuemie-tcbajddarchae" +
+- "ologyxn--nnx388axn--nodessakuhokksundxn--nry-yla5gxn--nttery-bya" +
+- "esellsyourhomeiparochesterxn--nvuotna-hwaxn--o3cw4hakatanohataka" +
+- "matsukawaxn--od0algxn--od0aq3barrell-of-knowledgeometre-experts-" +
+- "comptables3-fips-us-gov-west-1xn--ogbpf8flatangerxn--oppegrd-ixa" +
+- "xn--ostery-fyawatahamaxn--osyro-wuaxn--p1aisesakiwakunigamiharus" +
+- "livinghistoryxn--pgbs0dhakodatexn--porsgu-sta26fhskazunoxn--rady" +
+- "-iraxn--rdal-poaxn--rde-ulaxn--rdy-0nabarisleofmandalxn--rennesy" +
+- "-v1axn--rhkkervju-01afhvalerxn--rholt-mragoworse-thandsondriodej" +
+- "aneiroxn--risa-5naritakurashikisshikiyokawaraxn--risr-iraxn--rla" +
+- "nd-uuaxn--rlingen-mxaxn--rmskog-byaxn--rros-gratangenxn--rskog-u" +
+- "uaxn--rst-0naroyxn--rsta-francaiseharaxn--ryken-vuaxn--ryrvik-by" +
+- "axn--s-1farmequipmentxn--s9brj9circuscountryestateofdelawarezzoo" +
+- "logicaluroyuzhno-sakhalinskazimierz-dolnyxn--sandnessjen-ogbasel" +
+- "burgjemnes3-sa-east-1xn--sandy-yuaxn--seral-lraxn--sgne-grazxn--" +
+- "skierv-utazaskoyabenord-fronxn--skjervy-v1axn--skjk-soaxn--sknit" +
+- "-yqaxn--sknland-fxaxn--slat-5narusawaxn--slt-elabourxn--smla-hra" +
+- "xn--smna-graxn--snase-nraxn--sndre-land-0cbgxn--snes-poaxn--snsa" +
+- "-roaxn--sr-aurdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-varang" +
+- "er-ggbashkiriaxn--srfold-byaxn--srreisa-q1axn--srum-graxn--stfol" +
+- "d-9xaxn--stjrdal-s1axn--stjrdalshalsen-sqbatochigifuchukotkakami" +
+- "gaharaxn--stre-toten-zcbatsfjordpalacevje-og-hornnessetagayaselj" +
+- "ordrangedalinzaishobarakpetroleumeloyalistavropolkowicexhibition" +
+- "aturalhistorymuseumcenterxn--tjme-hraxn--tn0agrigentomologyeongg" +
+- "iehtavuoatnaamesjevuemielnoboribetsuitachikawakayamagadanconagaw" +
+- "akembuchikujobsharis-foundationxn--tnsberg-q1axn--trany-yuaxn--t" +
+- "rgstad-r1axn--trna-woaxn--troms-zuaxn--tysvr-vraxn--uc0atvedestr" +
+- "andxn--uc0ay4axn--unjrga-rtakizawaxn--vads-jraxn--vard-jraxn--ve" +
+- "grshei-c0axn--vestvgy-ixa6oxn--vg-yiabeppuboleslawiecastresistan" +
+- "cexpressexchangets-itambovaroyonabarullensvangjerdrumemorialipet" +
+- "skashibatakarazukaminoyamatsuriitatebayashichinohelsinkitakamiiz" +
+- "umisanoksnes3-us-gov-west-1xn--vgan-qoaxn--vgsy-qoa0jewishartren" +
+- "tinoxn--vler-qoaxn--vre-eiker-k8axn--vrggt-xqadxn--vry-yla5gxn--" +
+- "wcvs22dxn--wgbh1citydalusterxn--wgbl6axn--xkc2al3hye2axn--xkc2dl" +
+- "3a5ee0hakonexn--yer-znarutokigawaxn--yfro4i67oxn--ygarden-p1axn-" +
+- "-ygbi2ammxn--aurskog-hland-jnbaltimore-og-romsdalindesnes3-ap-so" +
+- "utheast-1xn--ystre-slidre-ujberlincolnaturalsciencesnaturelles3-" +
+- "us-west-1xn--zf0ao64axn--zf0avxn--avery-yuasakegawaxxxn--b-5gaxz"
+-
+-// 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
+-// the children array), ICANN bit and text.
+-//
+-// In the //-comment after each node's data, the nodes indexes of the children
+-// are formatted as (n0x1234-n0x1256), with * denoting the wildcard bit. The
+-// nodeType is printed as + for normal, ! for exception, and o for parent-only
+-// nodes that have children but don't match a domain label in their own right.
+-// An I denotes an ICANN domain.
+-//
+-// The layout within the uint32, from MSB to LSB, is:
+-// [ 1 bits] unused
+-// [ 9 bits] children index
+-// [ 1 bits] ICANN bit
+-// [15 bits] text index
+-// [ 6 bits] text length
+-var nodes = [...]uint32{
+- 0x01a06c42, // n0x0000 c0x0006 (n0x0136-n0x013c) + I ac
+- 0x01e01442, // n0x0001 c0x0007 (n0x013c-n0x013d) + I ad
+- 0x022138c2, // n0x0002 c0x0008 (n0x013d-n0x0144) + I ae
+- 0x02628d84, // n0x0003 c0x0009 (n0x0144-n0x019d) + I aero
+- 0x02a41442, // n0x0004 c0x000a (n0x019d-n0x01a2) + I af
+- 0x02e082c2, // n0x0005 c0x000b (n0x01a2-n0x01a7) + I ag
+- 0x032032c2, // n0x0006 c0x000c (n0x01a7-n0x01ab) + I ai
+- 0x03603982, // n0x0007 c0x000d (n0x01ab-n0x01b1) + I al
+- 0x002016c2, // n0x0008 c0x0000 (---------------) + I am
+- 0x03a00202, // n0x0009 c0x000e (n0x01b1-n0x01b5) + I an
+- 0x03e0aa02, // n0x000a c0x000f (n0x01b5-n0x01bb) + I ao
+- 0x00271b82, // n0x000b c0x0000 (---------------) + I aq
+- 0x04200182, // n0x000c c0x0010 (n0x01bb-n0x01c5)* o I ar
+- 0x04aae044, // n0x000d c0x0012 (n0x01c6-n0x01cc) o I arpa
+- 0x04e02c02, // n0x000e c0x0013 (n0x01cc-n0x01cd) + I as
+- 0x00237484, // n0x000f c0x0000 (---------------) + I asia
+- 0x05201042, // n0x0010 c0x0014 (n0x01cd-n0x01d4) + I at
+- 0x05a02482, // n0x0011 c0x0016 (n0x01d5-n0x01e7) o I au
+- 0x06a030c2, // n0x0012 c0x001a (n0x01f7-n0x01f8) + I aw
+- 0x00231902, // n0x0013 c0x0000 (---------------) + I ax
+- 0x06e16d42, // n0x0014 c0x001b (n0x01f8-n0x0204) + I az
+- 0x07201542, // n0x0015 c0x001c (n0x0204-n0x020e) + I ba
+- 0x0763efc2, // n0x0016 c0x001d (n0x020e-n0x0216) + I bb
+- 0x016f4c82, // n0x0017 c0x0005 (---------------)* o I bd
+- 0x07a00002, // n0x0018 c0x001e (n0x0216-n0x0218) + I be
+- 0x07f1ff82, // n0x0019 c0x001f (n0x0218-n0x0219) + I bf
+- 0x0833aa82, // n0x001a c0x0020 (n0x0219-n0x023d) + I bg
+- 0x08614242, // n0x001b c0x0021 (n0x023d-n0x0242) + I bh
+- 0x08a05742, // n0x001c c0x0022 (n0x0242-n0x0247) + I bi
+- 0x08f0c243, // n0x001d c0x0023 (n0x0247-n0x024e) + I biz
+- 0x092100c2, // n0x001e c0x0024 (n0x024e-n0x0252) + I bj
+- 0x09611002, // n0x001f c0x0025 (n0x0252-n0x0257) + I bm
+- 0x01652802, // n0x0020 c0x0005 (---------------)* o I bn
+- 0x09a033c2, // n0x0021 c0x0026 (n0x0257-n0x0260) + I bo
+- 0x09e01882, // n0x0022 c0x0027 (n0x0260-n0x02a5) + I br
+- 0x0a605ec2, // n0x0023 c0x0029 (n0x02a6-n0x02ab) + I bs
+- 0x0aa14742, // n0x0024 c0x002a (n0x02ab-n0x02b0) + I bt
+- 0x0ae2bb02, // n0x0025 c0x002b (n0x02b0-n0x02b2) + I bw
+- 0x0b213b02, // n0x0026 c0x002c (n0x02b2-n0x02b6) + I by
+- 0x0b62c342, // n0x0027 c0x002d (n0x02b6-n0x02bb) + I bz
+- 0x0ba01002, // n0x0028 c0x002e (n0x02bb-n0x02cc) + I ca
+- 0x00201003, // n0x0029 c0x0000 (---------------) + I cat
+- 0x0be06842, // n0x002a c0x002f (n0x02cc-n0x02d0) + I cc
+- 0x0c2fc502, // n0x002b c0x0030 (n0x02d0-n0x02d1) + I cd
+- 0x0c703c42, // n0x002c c0x0031 (n0x02d1-n0x02d2) + I cf
+- 0x00217202, // n0x002d c0x0000 (---------------) + I cg
+- 0x0ca007c2, // n0x002e c0x0032 (n0x02d2-n0x02d3) + I ch
+- 0x0ce08a02, // n0x002f c0x0033 (n0x02d3-n0x02e2) + I ci
+- 0x0d226c42, // n0x0030 c0x0034 (n0x02e2-n0x02e3)* o I ck
+- 0x0d6278c2, // n0x0031 c0x0035 (n0x02e3-n0x02e7) + I cl
+- 0x0da31002, // n0x0032 c0x0036 (n0x02e7-n0x02e8) + I cm
+- 0x0de31842, // n0x0033 c0x0037 (n0x02e8-n0x0314) + I cn
+- 0x0e20d642, // n0x0034 c0x0038 (n0x0314-n0x0321) + I co
+- 0x0e60d643, // n0x0035 c0x0039 (n0x0321-n0x03d5) + I com
+- 0x0023ae84, // n0x0036 c0x0000 (---------------) + I coop
+- 0x0ee34182, // n0x0037 c0x003b (n0x03e9-n0x03f0) + I cr
+- 0x0f20b742, // n0x0038 c0x003c (n0x03f0-n0x03f6) + I cu
+- 0x0f717442, // n0x0039 c0x003d (n0x03f6-n0x03f7) + I cv
+- 0x0fb2bbc2, // n0x003a c0x003e (n0x03f7-n0x03fb) + I cw
+- 0x0fe40f02, // n0x003b c0x003f (n0x03fb-n0x03fd) + I cx
+- 0x01641242, // n0x003c c0x0005 (---------------)* o I cy
+- 0x10206a42, // n0x003d c0x0040 (n0x03fd-n0x03fe) + I cz
+- 0x10602602, // n0x003e c0x0041 (n0x03fe-n0x0406) + I de
+- 0x00207b02, // n0x003f c0x0000 (---------------) + I dj
+- 0x10a33742, // n0x0040 c0x0042 (n0x0406-n0x0407) + I dk
+- 0x10e2b142, // n0x0041 c0x0043 (n0x0407-n0x040c) + I dm
+- 0x11202a02, // n0x0042 c0x0044 (n0x040c-n0x0416) + I do
+- 0x11668b02, // n0x0043 c0x0045 (n0x0416-n0x041e) + I dz
+- 0x11a00fc2, // n0x0044 c0x0046 (n0x041e-n0x042a) + I ec
+- 0x002df843, // n0x0045 c0x0000 (---------------) + I edu
+- 0x11e04782, // n0x0046 c0x0047 (n0x042a-n0x0434) + I ee
+- 0x12211b42, // n0x0047 c0x0048 (n0x0434-n0x043d) + I eg
+- 0x01600042, // n0x0048 c0x0005 (---------------)* o I er
+- 0x12601e42, // n0x0049 c0x0049 (n0x043d-n0x0442) + I es
+- 0x01603242, // n0x004a c0x0005 (---------------)* o I et
+- 0x0020f402, // n0x004b c0x0000 (---------------) + I eu
+- 0x12e0bc82, // n0x004c c0x004b (n0x0443-n0x0446) + I fi
+- 0x0163e182, // n0x004d c0x0005 (---------------)* o I fj
+- 0x016977c2, // n0x004e c0x0005 (---------------)* o I fk
+- 0x00330b82, // n0x004f c0x0000 (---------------) + I fm
+- 0x00203482, // n0x0050 c0x0000 (---------------) + I fo
+- 0x13207f82, // n0x0051 c0x004c (n0x0446-n0x045e) + I fr
+- 0x00202bc2, // n0x0052 c0x0000 (---------------) + I ga
+- 0x00205cc2, // n0x0053 c0x0000 (---------------) + I gd
+- 0x13604902, // n0x0054 c0x004d (n0x045e-n0x0465) + I ge
+- 0x00253ac2, // n0x0055 c0x0000 (---------------) + I gf
+- 0x13a04e42, // n0x0056 c0x004e (n0x0465-n0x046a) + I gg
+- 0x13e15042, // n0x0057 c0x004f (n0x046a-n0x046f) + I gh
+- 0x14205182, // n0x0058 c0x0050 (n0x046f-n0x0475) + I gi
+- 0x0020eb82, // n0x0059 c0x0000 (---------------) + I gl
+- 0x00238a02, // n0x005a c0x0000 (---------------) + I gm
+- 0x14610a02, // n0x005b c0x0051 (n0x0475-n0x047b) o I gn
+- 0x00218d43, // n0x005c c0x0000 (---------------) + I gov
+- 0x14acdfc2, // n0x005d c0x0052 (n0x047b-n0x0481) + I gp
+- 0x002395c2, // n0x005e c0x0000 (---------------) + I gq
+- 0x14e00642, // n0x005f c0x0053 (n0x0481-n0x0487) + I gr
+- 0x0023c7c2, // n0x0060 c0x0000 (---------------) + I gs
+- 0x152bfd42, // n0x0061 c0x0054 (n0x0487-n0x048e) + I gt
+- 0x01609b42, // n0x0062 c0x0005 (---------------)* o I gu
+- 0x00238dc2, // n0x0063 c0x0000 (---------------) + I gw
+- 0x156019c2, // n0x0064 c0x0055 (n0x048e-n0x0491) + I gy
+- 0x15a15082, // n0x0065 c0x0056 (n0x0491-n0x04a7) + I hk
+- 0x0028ad42, // n0x0066 c0x0000 (---------------) + I hm
+- 0x15e2a882, // n0x0067 c0x0057 (n0x04a7-n0x04ad) + I hn
+- 0x162255c2, // n0x0068 c0x0058 (n0x04ad-n0x04b1) + I hr
+- 0x16603b82, // n0x0069 c0x0059 (n0x04b1-n0x04c2) + I ht
+- 0x16a2b002, // n0x006a c0x005a (n0x04c2-n0x04e2) + I hu
+- 0x16e02282, // n0x006b c0x005b (n0x04e2-n0x04ec) + I id
+- 0x17205782, // n0x006c c0x005c (n0x04ec-n0x04ee) + I ie
+- 0x17602702, // n0x006d c0x005d (n0x04ee-n0x04ef)* o I il
+- 0x17e02cc2, // n0x006e c0x005f (n0x04f0-n0x04f6) + I im
+- 0x186027c2, // n0x006f c0x0061 (n0x04f8-n0x0505) + I in
+- 0x18a10e04, // n0x0070 c0x0062 (n0x0505-n0x050f) + I info
+- 0x18e17543, // n0x0071 c0x0063 (n0x050f-n0x0510) + I int
+- 0x1920bdc2, // n0x0072 c0x0064 (n0x0510-n0x0512) + I io
+- 0x19600e82, // n0x0073 c0x0065 (n0x0512-n0x0518) + I iq
+- 0x19a0e282, // n0x0074 c0x0066 (n0x0518-n0x0521) + I ir
+- 0x19e00842, // n0x0075 c0x0067 (n0x0521-n0x0527) + I is
+- 0x1a205f42, // n0x0076 c0x0068 (n0x0527-n0x063d) + I it
+- 0x1a602882, // n0x0077 c0x0069 (n0x063d-n0x0642) + I je
+- 0x01740782, // n0x0078 c0x0005 (---------------)* o I jm
+- 0x1aa094c2, // n0x0079 c0x006a (n0x0642-n0x064a) + I jo
+- 0x003422c4, // n0x007a c0x0000 (---------------) + I jobs
+- 0x1ae97b42, // n0x007b c0x006b (n0x064a-n0x068a) + I jp
+- 0x01606582, // n0x007c c0x0005 (---------------)* o I ke
+- 0x28a5c902, // n0x007d c0x00a2 (n0x0d20-n0x0d26) + I kg
+- 0x01626682, // n0x007e c0x0005 (---------------)* o I kh
+- 0x28e02242, // n0x007f c0x00a3 (n0x0d26-n0x0d2d) + I ki
+- 0x292a07c2, // n0x0080 c0x00a4 (n0x0d2d-n0x0d3e) + I km
+- 0x29626942, // n0x0081 c0x00a5 (n0x0d3e-n0x0d42) + I kn
+- 0x29b0e002, // n0x0082 c0x00a6 (n0x0d42-n0x0d48) o I kp
+- 0x29e015c2, // n0x0083 c0x00a7 (n0x0d48-n0x0d66) + I kr
+- 0x016ad002, // n0x0084 c0x0005 (---------------)* o I kw
+- 0x2a200302, // n0x0085 c0x00a8 (n0x0d66-n0x0d6b) + I ky
+- 0x2a724142, // n0x0086 c0x00a9 (n0x0d6b-n0x0d71) + I kz
+- 0x2aa02542, // n0x0087 c0x00aa (n0x0d71-n0x0d7a) + I la
+- 0x2ae0a982, // n0x0088 c0x00ab (n0x0d7a-n0x0d7f) o I lb
+- 0x2b240c02, // n0x0089 c0x00ac (n0x0d7f-n0x0d85) + I lc
+- 0x002039c2, // n0x008a c0x0000 (---------------) + I li
+- 0x2b614542, // n0x008b c0x00ad (n0x0d85-n0x0d93) + I lk
+- 0x2bb00942, // n0x008c c0x00ae (n0x0d93-n0x0d98) o I lr
+- 0x2be0d8c2, // n0x008d c0x00af (n0x0d98-n0x0d9a) + I ls
+- 0x2c20b7c2, // n0x008e c0x00b0 (n0x0d9a-n0x0d9b) + I lt
+- 0x00204982, // n0x008f c0x0000 (---------------) + I lu
+- 0x2c6075c2, // n0x0090 c0x00b1 (n0x0d9b-n0x0da4) + I lv
+- 0x2ca53602, // n0x0091 c0x00b2 (n0x0da4-n0x0dad) + I ly
+- 0x2ce02d02, // n0x0092 c0x00b3 (n0x0dad-n0x0db3) + I ma
+- 0x2d2d8982, // n0x0093 c0x00b4 (n0x0db3-n0x0db5) + I mc
+- 0x00211042, // n0x0094 c0x0000 (---------------) + I md
+- 0x2d602f82, // n0x0095 c0x00b5 (n0x0db5-n0x0dbd) + I me
+- 0x2db1e982, // n0x0096 c0x00b6 (n0x0dbd-n0x0dc5) + I mg
+- 0x002ed9c2, // n0x0097 c0x0000 (---------------) + I mh
+- 0x0022f003, // n0x0098 c0x0000 (---------------) + I mil
+- 0x2df246c2, // n0x0099 c0x00b7 (n0x0dc5-n0x0dcc) + I mk
+- 0x2e212cc2, // n0x009a c0x00b8 (n0x0dcc-n0x0dd3) + I ml
+- 0x01641bc2, // n0x009b c0x0005 (---------------)* o I mm
+- 0x2e601702, // n0x009c c0x00b9 (n0x0dd3-n0x0dd7) + I mn
+- 0x2ea03d42, // n0x009d c0x00ba (n0x0dd7-n0x0ddc) + I mo
+- 0x00303304, // n0x009e c0x0000 (---------------) + I mobi
+- 0x002071c2, // n0x009f c0x0000 (---------------) + I mp
+- 0x00307982, // n0x00a0 c0x0000 (---------------) + I mq
+- 0x2ee412c2, // n0x00a1 c0x00bb (n0x0ddc-n0x0dde) + I mr
+- 0x00201342, // n0x00a2 c0x0000 (---------------) + I ms
+- 0x0165c502, // n0x00a3 c0x0005 (---------------)* o I mt
+- 0x2f210bc2, // n0x00a4 c0x00bc (n0x0dde-n0x0de5) + I mu
+- 0x2f6c4946, // n0x00a5 c0x00bd (n0x0de5-n0x1009) + I museum
+- 0x2fa1b542, // n0x00a6 c0x00be (n0x1009-n0x1017) + I mv
+- 0x2fe31042, // n0x00a7 c0x00bf (n0x1017-n0x1022) + I mw
+- 0x30329482, // n0x00a8 c0x00c0 (n0x1022-n0x1028) + I mx
+- 0x3063a882, // n0x00a9 c0x00c1 (n0x1028-n0x102f) + I my
+- 0x30afa482, // n0x00aa c0x00c2 (n0x102f-n0x1030)* o I mz
+- 0x30e00982, // n0x00ab c0x00c3 (n0x1030-n0x1041) + I na
+- 0x31202f04, // n0x00ac c0x00c4 (n0x1041-n0x1043) + I name
+- 0x31e08ac2, // n0x00ad c0x00c7 (n0x1045-n0x1046) + I nc
+- 0x00203e82, // n0x00ae c0x0000 (---------------) + I ne
+- 0x32214843, // n0x00af c0x00c8 (n0x1046-n0x1070) + I net
+- 0x32610e42, // n0x00b0 c0x00c9 (n0x1070-n0x107a) + I nf
+- 0x32a00442, // n0x00b1 c0x00ca (n0x107a-n0x1080) o I ng
+- 0x01607802, // n0x00b2 c0x0005 (---------------)* o I ni
+- 0x32e3ba42, // n0x00b3 c0x00cb (n0x1080-n0x1083) + I nl
+- 0x332005c2, // n0x00b4 c0x00cc (n0x1083-n0x1359) + I no
+- 0x01600a02, // n0x00b5 c0x0005 (---------------)* o I np
+- 0x3b6000c2, // n0x00b6 c0x00ed (n0x1381-n0x1388) + I nr
+- 0x3ba03642, // n0x00b7 c0x00ee (n0x1388-n0x138b) + I nu
+- 0x3be01102, // n0x00b8 c0x00ef (n0x138b-n0x138c)* o I nz
+- 0x3c608902, // n0x00b9 c0x00f1 (n0x138d-n0x1397)* o I om
+- 0x3ca3e983, // n0x00ba c0x00f2 (n0x1397-n0x13cc) + I org
+- 0x3d20d002, // n0x00bb c0x00f4 (n0x13ce-n0x13d9) + I pa
+- 0x3d609242, // n0x00bc c0x00f5 (n0x13d9-n0x13e0) + I pe
+- 0x3db2d942, // n0x00bd c0x00f6 (n0x13e0-n0x13e3) + I pf
+- 0x01624042, // n0x00be c0x0005 (---------------)* o I pg
+- 0x3de00702, // n0x00bf c0x00f7 (n0x13e3-n0x13eb) + I ph
+- 0x3e2cc282, // n0x00c0 c0x00f8 (n0x13eb-n0x13f9) + I pk
+- 0x3e60c3c2, // n0x00c1 c0x00f9 (n0x13f9-n0x14a4) + I pl
+- 0x002787c2, // n0x00c2 c0x0000 (---------------) + I pm
+- 0x3ee371c2, // n0x00c3 c0x00fb (n0x14ad-n0x14b2) + I pn
+- 0x00285744, // n0x00c4 c0x0000 (---------------) + I post
+- 0x3f261ec2, // n0x00c5 c0x00fc (n0x14b2-n0x14bf) + I pr
+- 0x3f6d1383, // n0x00c6 c0x00fd (n0x14bf-n0x14c6) + I pro
+- 0x3fa33842, // n0x00c7 c0x00fe (n0x14c6-n0x14cd) + I ps
+- 0x3fe11c02, // n0x00c8 c0x00ff (n0x14cd-n0x14d6) + I pt
+- 0x402d3902, // n0x00c9 c0x0100 (n0x14d6-n0x14dc) + I pw
+- 0x406b8c02, // n0x00ca c0x0101 (n0x14dc-n0x14e3) + I py
+- 0x40af6942, // n0x00cb c0x0102 (n0x14e3-n0x14eb) + I qa
+- 0x40e01602, // n0x00cc c0x0103 (n0x14eb-n0x14ef) + I re
+- 0x41200ac2, // n0x00cd c0x0104 (n0x14ef-n0x14fb) + I ro
+- 0x41602902, // n0x00ce c0x0105 (n0x14fb-n0x1501) + I rs
+- 0x41a018c2, // n0x00cf c0x0106 (n0x1501-n0x1586) + I ru
+- 0x41e08f82, // n0x00d0 c0x0107 (n0x1586-n0x158f) + I rw
+- 0x42202442, // n0x00d1 c0x0108 (n0x158f-n0x1597) + I sa
+- 0x4263c6c2, // n0x00d2 c0x0109 (n0x1597-n0x159c) + I sb
+- 0x42a01d82, // n0x00d3 c0x010a (n0x159c-n0x15a1) + I sc
+- 0x42e03902, // n0x00d4 c0x010b (n0x15a1-n0x15a9) + I sd
+- 0x4320da42, // n0x00d5 c0x010c (n0x15a9-n0x15d2) + I se
+- 0x43601982, // n0x00d6 c0x010d (n0x15d2-n0x15d9) + I sg
+- 0x43a02c42, // n0x00d7 c0x010e (n0x15d9-n0x15de) + I sh
+- 0x002040c2, // n0x00d8 c0x0000 (---------------) + I si
+- 0x43e02202, // n0x00d9 c0x010f (n0x15de-n0x15df) + I sk
+- 0x442113c2, // n0x00da c0x0110 (n0x15df-n0x15e4) + I sl
+- 0x00216a02, // n0x00db c0x0000 (---------------) + I sm
+- 0x44622982, // n0x00dc c0x0111 (n0x15e4-n0x15eb) + I sn
+- 0x44a00882, // n0x00dd c0x0112 (n0x15eb-n0x15ee) + I so
+- 0x002ba542, // n0x00de c0x0000 (---------------) + I sr
+- 0x44e01382, // n0x00df c0x0113 (n0x15ee-n0x15fa) + I st
+- 0x00202ac2, // n0x00e0 c0x0000 (---------------) + I su
+- 0x01606602, // n0x00e1 c0x0005 (---------------)* o I sv
+- 0x452ed302, // n0x00e2 c0x0114 (n0x15fa-n0x15fb) + I sx
+- 0x45630a82, // n0x00e3 c0x0115 (n0x15fb-n0x1601) + I sy
+- 0x45a069c2, // n0x00e4 c0x0116 (n0x1601-n0x1604) + I sz
+- 0x00227742, // n0x00e5 c0x0000 (---------------) + I tc
+- 0x45e09fc2, // n0x00e6 c0x0117 (n0x1604-n0x1605) + I td
+- 0x0020d543, // n0x00e7 c0x0000 (---------------) + I tel
+- 0x00231282, // n0x00e8 c0x0000 (---------------) + I tf
+- 0x00234242, // n0x00e9 c0x0000 (---------------) + I tg
+- 0x462061c2, // n0x00ea c0x0118 (n0x1605-n0x160c) + I th
+- 0x4663ac42, // n0x00eb c0x0119 (n0x160c-n0x161b) + I tj
+- 0x002362c2, // n0x00ec c0x0000 (---------------) + I tk
+- 0x46a0db02, // n0x00ed c0x011a (n0x161b-n0x161c) + I tl
+- 0x46e3a842, // n0x00ee c0x011b (n0x161c-n0x1624) + I tm
+- 0x47203602, // n0x00ef c0x011c (n0x1624-n0x1638) + I tn
+- 0x47600282, // n0x00f0 c0x011d (n0x1638-n0x163e) + I to
+- 0x47a08d82, // n0x00f1 c0x011e (n0x163e-n0x1640)* o I tr
+- 0x002ddac6, // n0x00f2 c0x0000 (---------------) + I travel
+- 0x48207882, // n0x00f3 c0x0120 (n0x1641-n0x1652) + I tt
+- 0x48681802, // n0x00f4 c0x0121 (n0x1652-n0x1656) + I tv
+- 0x48a4b942, // n0x00f5 c0x0122 (n0x1656-n0x1664) + I tw
+- 0x48e148c2, // n0x00f6 c0x0123 (n0x1664-n0x1670) o I tz
+- 0x492201c2, // n0x00f7 c0x0124 (n0x1670-n0x16be) + I ua
+- 0x49602b82, // n0x00f8 c0x0125 (n0x16be-n0x16c6) + I ug
+- 0x49a01902, // n0x00f9 c0x0126 (n0x16c6-n0x16d1)* o I uk
+- 0x4a201f42, // n0x00fa c0x0128 (n0x16d2-n0x1711) + I us
+- 0x5861c8c2, // n0x00fb c0x0161 (n0x17b8-n0x17be) + I uy
+- 0x58a3c302, // n0x00fc c0x0162 (n0x17be-n0x17c2) + I uz
+- 0x00206f02, // n0x00fd c0x0000 (---------------) + I va
+- 0x58e3f542, // n0x00fe c0x0163 (n0x17c2-n0x17c8) + I vc
+- 0x59209c42, // n0x00ff c0x0164 (n0x17c8-n0x17d2) + I ve
+- 0x00278b42, // n0x0100 c0x0000 (---------------) + I vg
+- 0x59609542, // n0x0101 c0x0165 (n0x17d2-n0x17d7) + I vi
+- 0x59a00b42, // n0x0102 c0x0166 (n0x17d7-n0x17e3) + I vn
+- 0x00206642, // n0x0103 c0x0000 (---------------) + I vu
+- 0x00201242, // n0x0104 c0x0000 (---------------) + I wf
+- 0x59e1ba82, // n0x0105 c0x0167 (n0x17e3-n0x17ea) + I ws
+- 0x00240f4c, // n0x0106 c0x0000 (---------------) + I xn--3e0b707e
+- 0x0026454b, // n0x0107 c0x0000 (---------------) + I xn--45brj9c
+- 0x0028ce4e, // n0x0108 c0x0000 (---------------) + I xn--54b7fta0cc
+- 0x0029030a, // n0x0109 c0x0000 (---------------) + I xn--90a3ac
+- 0x002fc016, // n0x010a c0x0000 (---------------) + I xn--clchc0ea0b2g2a9gcd
+- 0x002ffcca, // n0x010b c0x0000 (---------------) + I xn--fiqs8s
+- 0x0030018a, // n0x010c c0x0000 (---------------) + I xn--fiqz9s
+- 0x00300f8d, // n0x010d c0x0000 (---------------) + I xn--fpcrj9c3d
+- 0x0030238d, // n0x010e c0x0000 (---------------) + I xn--fzc2c9e2c
+- 0x00304e8b, // n0x010f c0x0000 (---------------) + I xn--gecrj9c
+- 0x00309f0b, // n0x0110 c0x0000 (---------------) + I xn--h2brj9c
+- 0x00310689, // n0x0111 c0x0000 (---------------) + I xn--j1amh
+- 0x00310ccb, // n0x0112 c0x0000 (---------------) + I xn--j6w193g
+- 0x00312e4b, // n0x0113 c0x0000 (---------------) + I xn--kprw13d
+- 0x0031310b, // n0x0114 c0x0000 (---------------) + I xn--kpry57d
+- 0x0031a94f, // n0x0115 c0x0000 (---------------) + I xn--lgbbat1ad8j
+- 0x0031e88c, // n0x0116 c0x0000 (---------------) + I xn--mgb2ddes
+- 0x0031fd0c, // n0x0117 c0x0000 (---------------) + I xn--mgb9awbf
+- 0x0032018f, // n0x0118 c0x0000 (---------------) + I xn--mgba3a4f16a
+- 0x0032054e, // n0x0119 c0x0000 (---------------) + I xn--mgba3a4fra
+- 0x00320c0e, // n0x011a c0x0000 (---------------) + I xn--mgbaam7a8h
+- 0x003211ce, // n0x011b c0x0000 (---------------) + I xn--mgbayh7gpa
+- 0x0032160e, // n0x011c c0x0000 (---------------) + I xn--mgbbh1a71e
+- 0x0032198f, // n0x011d c0x0000 (---------------) + I xn--mgbc0a9azcg
+- 0x00321d53, // n0x011e c0x0000 (---------------) + I xn--mgberp4a5d4a87g
+- 0x00322211, // n0x011f c0x0000 (---------------) + I xn--mgberp4a5d4ar
+- 0x00322653, // n0x0120 c0x0000 (---------------) + I xn--mgbqly7c0a67fbc
+- 0x003232d0, // n0x0121 c0x0000 (---------------) + I xn--mgbqly7cvafr
+- 0x00323b0c, // n0x0122 c0x0000 (---------------) + I xn--mgbtf8fl
+- 0x0032a14b, // n0x0123 c0x0000 (---------------) + I xn--nnx388a
+- 0x0032a408, // n0x0124 c0x0000 (---------------) + I xn--node
+- 0x0032ba4a, // n0x0125 c0x0000 (---------------) + I xn--o3cw4h
+- 0x0032d78c, // n0x0126 c0x0000 (---------------) + I xn--ogbpf8fl
+- 0x0032e8c8, // n0x0127 c0x0000 (---------------) + I xn--p1ai
+- 0x0032f34b, // n0x0128 c0x0000 (---------------) + I xn--pgbs0dh
+- 0x0033554b, // n0x0129 c0x0000 (---------------) + I xn--s9brj9c
+- 0x0034a1ca, // n0x012a c0x0000 (---------------) + I xn--wgbh1c
+- 0x0034a70a, // n0x012b c0x0000 (---------------) + I xn--wgbl6a
+- 0x0034a990, // n0x012c c0x0000 (---------------) + I xn--xkc2al3hye2a
+- 0x0034ad91, // n0x012d c0x0000 (---------------) + I xn--xkc2dl3a5ee0h
+- 0x0034b84d, // n0x012e c0x0000 (---------------) + I xn--yfro4i67o
+- 0x0034bf4d, // n0x012f c0x0000 (---------------) + I xn--ygbi2ammx
+- 0x0034ecc3, // n0x0130 c0x0000 (---------------) + I xxx
+- 0x0161a042, // n0x0131 c0x0005 (---------------)* o I ye
+- 0x00252042, // n0x0132 c0x0000 (---------------) + I yt
+- 0x01601142, // n0x0133 c0x0005 (---------------)* o I za
+- 0x016cb642, // n0x0134 c0x0005 (---------------)* o I zm
+- 0x016d39c2, // n0x0135 c0x0005 (---------------)* o I zw
+- 0x0020d643, // n0x0136 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0137 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0138 c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x0139 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x013a c0x0000 (---------------) + I net
+- 0x0023e983, // n0x013b c0x0000 (---------------) + I org
+- 0x00216583, // n0x013c c0x0000 (---------------) + I nom
+- 0x00206c42, // n0x013d c0x0000 (---------------) + I ac
+- 0x0020d642, // n0x013e c0x0000 (---------------) + I co
+- 0x00218d43, // n0x013f c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x0140 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x0141 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0142 c0x0000 (---------------) + I org
+- 0x00201d83, // n0x0143 c0x0000 (---------------) + I sch
+- 0x002f93d6, // n0x0144 c0x0000 (---------------) + I accident-investigation
+- 0x002fabd3, // n0x0145 c0x0000 (---------------) + I accident-prevention
+- 0x00228d89, // n0x0146 c0x0000 (---------------) + I aerobatic
+- 0x00262248, // n0x0147 c0x0000 (---------------) + I aeroclub
+- 0x00299109, // n0x0148 c0x0000 (---------------) + I aerodrome
+- 0x0023b746, // n0x0149 c0x0000 (---------------) + I agents
+- 0x0023fad0, // n0x014a c0x0000 (---------------) + I air-surveillance
+- 0x00268313, // n0x014b c0x0000 (---------------) + I air-traffic-control
+- 0x0026e508, // n0x014c c0x0000 (---------------) + I aircraft
+- 0x0028b907, // n0x014d c0x0000 (---------------) + I airline
+- 0x002a7ac7, // n0x014e c0x0000 (---------------) + I airport
+- 0x002a9b8a, // n0x014f c0x0000 (---------------) + I airtraffic
+- 0x0020b989, // n0x0150 c0x0000 (---------------) + I ambulance
+- 0x0022b2c9, // n0x0151 c0x0000 (---------------) + I amusement
+- 0x002c6b0b, // n0x0152 c0x0000 (---------------) + I association
+- 0x00237546, // n0x0153 c0x0000 (---------------) + I author
+- 0x002bafca, // n0x0154 c0x0000 (---------------) + I ballooning
+- 0x00220e86, // n0x0155 c0x0000 (---------------) + I broker
+- 0x00230183, // n0x0156 c0x0000 (---------------) + I caa
+- 0x00304345, // n0x0157 c0x0000 (---------------) + I cargo
+- 0x002179c8, // n0x0158 c0x0000 (---------------) + I catering
+- 0x0020bb4d, // n0x0159 c0x0000 (---------------) + I certification
+- 0x0024db0c, // n0x015a c0x0000 (---------------) + I championship
+- 0x0030a847, // n0x015b c0x0000 (---------------) + I charter
+- 0x0022cb0d, // n0x015c c0x0000 (---------------) + I civilaviation
+- 0x00262344, // n0x015d c0x0000 (---------------) + I club
+- 0x0029934a, // n0x015e c0x0000 (---------------) + I conference
+- 0x00237fca, // n0x015f c0x0000 (---------------) + I consultant
+- 0x0023848a, // n0x0160 c0x0000 (---------------) + I consulting
+- 0x00268607, // n0x0161 c0x0000 (---------------) + I control
+- 0x002b5f07, // n0x0162 c0x0000 (---------------) + I council
+- 0x00240404, // n0x0163 c0x0000 (---------------) + I crew
+- 0x00229ec6, // n0x0164 c0x0000 (---------------) + I design
+- 0x002afe84, // n0x0165 c0x0000 (---------------) + I dgca
+- 0x002df848, // n0x0166 c0x0000 (---------------) + I educator
+- 0x00318849, // n0x0167 c0x0000 (---------------) + I emergency
+- 0x002c5e06, // n0x0168 c0x0000 (---------------) + I engine
+- 0x002c5e08, // n0x0169 c0x0000 (---------------) + I engineer
+- 0x002af84d, // n0x016a c0x0000 (---------------) + I entertainment
+- 0x00335309, // n0x016b c0x0000 (---------------) + I equipment
+- 0x00346208, // n0x016c c0x0000 (---------------) + I exchange
+- 0x00346047, // n0x016d c0x0000 (---------------) + I express
+- 0x0026bc0a, // n0x016e c0x0000 (---------------) + I federation
+- 0x00245686, // n0x016f c0x0000 (---------------) + I flight
+- 0x0024f087, // n0x0170 c0x0000 (---------------) + I freight
+- 0x0022b604, // n0x0171 c0x0000 (---------------) + I fuel
+- 0x0024fac7, // n0x0172 c0x0000 (---------------) + I gliding
+- 0x0026160a, // n0x0173 c0x0000 (---------------) + I government
+- 0x0024ebce, // n0x0174 c0x0000 (---------------) + I groundhandling
+- 0x00204e85, // n0x0175 c0x0000 (---------------) + I group
+- 0x0027690b, // n0x0176 c0x0000 (---------------) + I hanggliding
+- 0x0024a5c9, // n0x0177 c0x0000 (---------------) + I homebuilt
+- 0x00216e49, // n0x0178 c0x0000 (---------------) + I insurance
+- 0x00216807, // n0x0179 c0x0000 (---------------) + I journal
+- 0x0025bd0a, // n0x017a c0x0000 (---------------) + I journalist
+- 0x0021e387, // n0x017b c0x0000 (---------------) + I leasing
+- 0x00245fc9, // n0x017c c0x0000 (---------------) + I logistics
+- 0x003089c8, // n0x017d c0x0000 (---------------) + I magazine
+- 0x0030bf8b, // n0x017e c0x0000 (---------------) + I maintenance
+- 0x0020c24b, // n0x017f c0x0000 (---------------) + I marketplace
+- 0x0023dbc5, // n0x0180 c0x0000 (---------------) + I media
+- 0x0025900a, // n0x0181 c0x0000 (---------------) + I microlight
+- 0x00277649, // n0x0182 c0x0000 (---------------) + I modelling
+- 0x0020c80a, // n0x0183 c0x0000 (---------------) + I navigation
+- 0x0024ddcb, // n0x0184 c0x0000 (---------------) + I parachuting
+- 0x0024f9cb, // n0x0185 c0x0000 (---------------) + I paragliding
+- 0x002c6895, // n0x0186 c0x0000 (---------------) + I passenger-association
+- 0x002caf85, // n0x0187 c0x0000 (---------------) + I pilot
+- 0x003460c5, // n0x0188 c0x0000 (---------------) + I press
+- 0x002d160a, // n0x0189 c0x0000 (---------------) + I production
+- 0x002c1d8a, // n0x018a c0x0000 (---------------) + I recreation
+- 0x00270e87, // n0x018b c0x0000 (---------------) + I repbody
+- 0x0021a643, // n0x018c c0x0000 (---------------) + I res
+- 0x002ceac8, // n0x018d c0x0000 (---------------) + I research
+- 0x002c2c4a, // n0x018e c0x0000 (---------------) + I rotorcraft
+- 0x002cd986, // n0x018f c0x0000 (---------------) + I safety
+- 0x002cb0c9, // n0x0190 c0x0000 (---------------) + I scientist
+- 0x002febc8, // n0x0191 c0x0000 (---------------) + I services
+- 0x002d92c4, // n0x0192 c0x0000 (---------------) + I show
+- 0x00264c89, // n0x0193 c0x0000 (---------------) + I skydiving
+- 0x00266488, // n0x0194 c0x0000 (---------------) + I software
+- 0x002a8f87, // n0x0195 c0x0000 (---------------) + I student
+- 0x002318c4, // n0x0196 c0x0000 (---------------) + I taxi
+- 0x00255686, // n0x0197 c0x0000 (---------------) + I trader
+- 0x0028f087, // n0x0198 c0x0000 (---------------) + I trading
+- 0x0029a287, // n0x0199 c0x0000 (---------------) + I trainer
+- 0x0025fbc5, // n0x019a c0x0000 (---------------) + I union
+- 0x00204ccc, // n0x019b c0x0000 (---------------) + I workinggroup
+- 0x00303fc5, // n0x019c c0x0000 (---------------) + I works
+- 0x0020d643, // n0x019d c0x0000 (---------------) + I com
+- 0x002df843, // n0x019e c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x019f c0x0000 (---------------) + I gov
+- 0x00214843, // n0x01a0 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x01a1 c0x0000 (---------------) + I org
+- 0x0020d642, // n0x01a2 c0x0000 (---------------) + I co
+- 0x0020d643, // n0x01a3 c0x0000 (---------------) + I com
+- 0x00214843, // n0x01a4 c0x0000 (---------------) + I net
+- 0x00216583, // n0x01a5 c0x0000 (---------------) + I nom
+- 0x0023e983, // n0x01a6 c0x0000 (---------------) + I org
+- 0x0020d643, // n0x01a7 c0x0000 (---------------) + I com
+- 0x00214843, // n0x01a8 c0x0000 (---------------) + I net
+- 0x00213e43, // n0x01a9 c0x0000 (---------------) + I off
+- 0x0023e983, // n0x01aa c0x0000 (---------------) + I org
+- 0x0020d643, // n0x01ab c0x0000 (---------------) + I com
+- 0x002df843, // n0x01ac c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x01ad c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x01ae c0x0000 (---------------) + I mil
+- 0x00214843, // n0x01af c0x0000 (---------------) + I net
+- 0x0023e983, // n0x01b0 c0x0000 (---------------) + I org
+- 0x0020d643, // n0x01b1 c0x0000 (---------------) + I com
+- 0x002df843, // n0x01b2 c0x0000 (---------------) + I edu
+- 0x00214843, // n0x01b3 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x01b4 c0x0000 (---------------) + I org
+- 0x0020d642, // n0x01b5 c0x0000 (---------------) + I co
+- 0x00207902, // n0x01b6 c0x0000 (---------------) + I ed
+- 0x002386c2, // n0x01b7 c0x0000 (---------------) + I gv
+- 0x00205f42, // n0x01b8 c0x0000 (---------------) + I it
+- 0x00200602, // n0x01b9 c0x0000 (---------------) + I og
+- 0x00270f02, // n0x01ba c0x0000 (---------------) + I pb
+- 0x0460d643, // n0x01bb c0x0011 (n0x01c5-n0x01c6) o I com
+- 0x00635053, // n0x01bc c0x0001 (---------------) ! I congresodelalengua3
+- 0x006df844, // n0x01bd c0x0001 (---------------) ! I educ
+- 0x00665493, // n0x01be c0x0001 (---------------) ! I gobiernoelectronico
+- 0x006992c5, // n0x01bf c0x0001 (---------------) ! I mecon
+- 0x0068bf06, // n0x01c0 c0x0001 (---------------) ! I nacion
+- 0x00611783, // n0x01c1 c0x0001 (---------------) ! I nic
+- 0x006d1f49, // n0x01c2 c0x0001 (---------------) ! I promocion
+- 0x00675686, // n0x01c3 c0x0001 (---------------) ! I retina
+- 0x00629ac3, // n0x01c4 c0x0001 (---------------) ! I uba
+- 0x0003c708, // n0x01c5 c0x0000 (---------------) + blogspot
+- 0x00237ec4, // n0x01c6 c0x0000 (---------------) + I e164
+- 0x00283c07, // n0x01c7 c0x0000 (---------------) + I in-addr
+- 0x0022ebc3, // n0x01c8 c0x0000 (---------------) + I ip6
+- 0x002db884, // n0x01c9 c0x0000 (---------------) + I iris
+- 0x00224543, // n0x01ca c0x0000 (---------------) + I uri
+- 0x00216883, // n0x01cb c0x0000 (---------------) + I urn
+- 0x00218d43, // n0x01cc c0x0000 (---------------) + I gov
+- 0x00206c42, // n0x01cd c0x0000 (---------------) + I ac
+- 0x0010c243, // n0x01ce c0x0000 (---------------) + biz
+- 0x0560d642, // n0x01cf c0x0015 (n0x01d4-n0x01d5) + I co
+- 0x002386c2, // n0x01d0 c0x0000 (---------------) + I gv
+- 0x00010e04, // n0x01d1 c0x0000 (---------------) + info
+- 0x00200a82, // n0x01d2 c0x0000 (---------------) + I or
+- 0x000d1204, // n0x01d3 c0x0000 (---------------) + priv
+- 0x0003c708, // n0x01d4 c0x0000 (---------------) + blogspot
+- 0x00291d03, // n0x01d5 c0x0000 (---------------) + I act
+- 0x00226343, // n0x01d6 c0x0000 (---------------) + I asn
+- 0x05e0d643, // n0x01d7 c0x0017 (n0x01e7-n0x01e8) + I com
+- 0x00299344, // n0x01d8 c0x0000 (---------------) + I conf
+- 0x062df843, // n0x01d9 c0x0018 (n0x01e8-n0x01f0) + I edu
+- 0x06618d43, // n0x01da c0x0019 (n0x01f0-n0x01f7) + I gov
+- 0x00202282, // n0x01db c0x0000 (---------------) + I id
+- 0x00210e04, // n0x01dc c0x0000 (---------------) + I info
+- 0x00214843, // n0x01dd c0x0000 (---------------) + I net
+- 0x0026c783, // n0x01de c0x0000 (---------------) + I nsw
+- 0x00200242, // n0x01df c0x0000 (---------------) + I nt
+- 0x0023e983, // n0x01e0 c0x0000 (---------------) + I org
+- 0x00219002, // n0x01e1 c0x0000 (---------------) + I oz
+- 0x00251d83, // n0x01e2 c0x0000 (---------------) + I qld
+- 0x00202442, // n0x01e3 c0x0000 (---------------) + I sa
+- 0x00210c43, // n0x01e4 c0x0000 (---------------) + I tas
+- 0x00257443, // n0x01e5 c0x0000 (---------------) + I vic
+- 0x00203102, // n0x01e6 c0x0000 (---------------) + I wa
+- 0x0003c708, // n0x01e7 c0x0000 (---------------) + blogspot
+- 0x00291d03, // n0x01e8 c0x0000 (---------------) + I act
+- 0x0026c783, // n0x01e9 c0x0000 (---------------) + I nsw
+- 0x00200242, // n0x01ea c0x0000 (---------------) + I nt
+- 0x00251d83, // n0x01eb c0x0000 (---------------) + I qld
+- 0x00202442, // n0x01ec c0x0000 (---------------) + I sa
+- 0x00210c43, // n0x01ed c0x0000 (---------------) + I tas
+- 0x00257443, // n0x01ee c0x0000 (---------------) + I vic
+- 0x00203102, // n0x01ef c0x0000 (---------------) + I wa
+- 0x00291d03, // n0x01f0 c0x0000 (---------------) + I act
+- 0x00200242, // n0x01f1 c0x0000 (---------------) + I nt
+- 0x00251d83, // n0x01f2 c0x0000 (---------------) + I qld
+- 0x00202442, // n0x01f3 c0x0000 (---------------) + I sa
+- 0x00210c43, // n0x01f4 c0x0000 (---------------) + I tas
+- 0x00257443, // n0x01f5 c0x0000 (---------------) + I vic
+- 0x00203102, // n0x01f6 c0x0000 (---------------) + I wa
+- 0x0020d643, // n0x01f7 c0x0000 (---------------) + I com
+- 0x0030c243, // n0x01f8 c0x0000 (---------------) + I biz
+- 0x0020d643, // n0x01f9 c0x0000 (---------------) + I com
+- 0x002df843, // n0x01fa c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x01fb c0x0000 (---------------) + I gov
+- 0x00210e04, // n0x01fc c0x0000 (---------------) + I info
+- 0x00217543, // n0x01fd c0x0000 (---------------) + I int
+- 0x0022f003, // n0x01fe c0x0000 (---------------) + I mil
+- 0x00202f04, // n0x01ff c0x0000 (---------------) + I name
+- 0x00214843, // n0x0200 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0201 c0x0000 (---------------) + I org
+- 0x00203f02, // n0x0202 c0x0000 (---------------) + I pp
+- 0x002d1383, // n0x0203 c0x0000 (---------------) + I pro
+- 0x0020d642, // n0x0204 c0x0000 (---------------) + I co
+- 0x0020d643, // n0x0205 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0206 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0207 c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x0208 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x0209 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x020a c0x0000 (---------------) + I org
+- 0x00202902, // n0x020b c0x0000 (---------------) + I rs
+- 0x002fb304, // n0x020c c0x0000 (---------------) + I unbi
+- 0x00262f44, // n0x020d c0x0000 (---------------) + I unsa
+- 0x0030c243, // n0x020e c0x0000 (---------------) + I biz
+- 0x0020d643, // n0x020f c0x0000 (---------------) + I com
+- 0x002df843, // n0x0210 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0211 c0x0000 (---------------) + I gov
+- 0x00210e04, // n0x0212 c0x0000 (---------------) + I info
+- 0x00214843, // n0x0213 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0214 c0x0000 (---------------) + I org
+- 0x002e9c05, // n0x0215 c0x0000 (---------------) + I store
+- 0x00206c42, // n0x0216 c0x0000 (---------------) + I ac
+- 0x0003c708, // n0x0217 c0x0000 (---------------) + blogspot
+- 0x00218d43, // n0x0218 c0x0000 (---------------) + I gov
+- 0x00231781, // n0x0219 c0x0000 (---------------) + I 0
+- 0x00206381, // n0x021a c0x0000 (---------------) + I 1
+- 0x00202141, // n0x021b c0x0000 (---------------) + I 2
+- 0x00201ec1, // n0x021c c0x0000 (---------------) + I 3
+- 0x00237f81, // n0x021d c0x0000 (---------------) + I 4
+- 0x00264681, // n0x021e c0x0000 (---------------) + I 5
+- 0x0022ec41, // n0x021f c0x0000 (---------------) + I 6
+- 0x00241141, // n0x0220 c0x0000 (---------------) + I 7
+- 0x002fab81, // n0x0221 c0x0000 (---------------) + I 8
+- 0x00264781, // n0x0222 c0x0000 (---------------) + I 9
+- 0x00200181, // n0x0223 c0x0000 (---------------) + I a
+- 0x00200001, // n0x0224 c0x0000 (---------------) + I b
+- 0x00200501, // n0x0225 c0x0000 (---------------) + I c
+- 0x00201481, // n0x0226 c0x0000 (---------------) + I d
+- 0x00200041, // n0x0227 c0x0000 (---------------) + I e
+- 0x00201281, // n0x0228 c0x0000 (---------------) + I f
+- 0x00200481, // n0x0229 c0x0000 (---------------) + I g
+- 0x00200741, // n0x022a c0x0000 (---------------) + I h
+- 0x00200781, // n0x022b c0x0000 (---------------) + I i
+- 0x00202881, // n0x022c c0x0000 (---------------) + I j
+- 0x00200301, // n0x022d c0x0000 (---------------) + I k
+- 0x00202541, // n0x022e c0x0000 (---------------) + I l
+- 0x00201341, // n0x022f c0x0000 (---------------) + I m
+- 0x002000c1, // n0x0230 c0x0000 (---------------) + I n
+- 0x002002c1, // n0x0231 c0x0000 (---------------) + I o
+- 0x00200701, // n0x0232 c0x0000 (---------------) + I p
+- 0x00200ec1, // n0x0233 c0x0000 (---------------) + I q
+- 0x00200081, // n0x0234 c0x0000 (---------------) + I r
+- 0x00200881, // n0x0235 c0x0000 (---------------) + I s
+- 0x00200141, // n0x0236 c0x0000 (---------------) + I t
+- 0x00200f01, // n0x0237 c0x0000 (---------------) + I u
+- 0x00200b41, // n0x0238 c0x0000 (---------------) + I v
+- 0x00201241, // n0x0239 c0x0000 (---------------) + I w
+- 0x00202dc1, // n0x023a c0x0000 (---------------) + I x
+- 0x00200341, // n0x023b c0x0000 (---------------) + I y
+- 0x00201141, // n0x023c c0x0000 (---------------) + I z
+- 0x0020d643, // n0x023d c0x0000 (---------------) + I com
+- 0x002df843, // n0x023e c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x023f c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0240 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0241 c0x0000 (---------------) + I org
+- 0x0020d642, // n0x0242 c0x0000 (---------------) + I co
+- 0x0020d643, // n0x0243 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0244 c0x0000 (---------------) + I edu
+- 0x00200a82, // n0x0245 c0x0000 (---------------) + I or
+- 0x0023e983, // n0x0246 c0x0000 (---------------) + I org
+- 0x00004a46, // n0x0247 c0x0000 (---------------) + dyndns
+- 0x0004730a, // n0x0248 c0x0000 (---------------) + for-better
+- 0x0011f808, // n0x0249 c0x0000 (---------------) + for-more
+- 0x00047948, // n0x024a c0x0000 (---------------) + for-some
+- 0x00048347, // n0x024b c0x0000 (---------------) + for-the
+- 0x00109ac6, // n0x024c c0x0000 (---------------) + selfip
+- 0x000141c6, // n0x024d c0x0000 (---------------) + webhop
+- 0x002072c4, // n0x024e c0x0000 (---------------) + I asso
+- 0x00317dc7, // n0x024f c0x0000 (---------------) + I barreau
+- 0x0003c708, // n0x0250 c0x0000 (---------------) + blogspot
+- 0x00257384, // n0x0251 c0x0000 (---------------) + I gouv
+- 0x0020d643, // n0x0252 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0253 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0254 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0255 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0256 c0x0000 (---------------) + I org
+- 0x0020d643, // n0x0257 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0258 c0x0000 (---------------) + I edu
+- 0x00265483, // n0x0259 c0x0000 (---------------) + I gob
+- 0x00218d43, // n0x025a c0x0000 (---------------) + I gov
+- 0x00217543, // n0x025b c0x0000 (---------------) + I int
+- 0x0022f003, // n0x025c c0x0000 (---------------) + I mil
+- 0x00214843, // n0x025d c0x0000 (---------------) + I net
+- 0x0023e983, // n0x025e c0x0000 (---------------) + I org
+- 0x00281802, // n0x025f c0x0000 (---------------) + I tv
+- 0x002c48c3, // n0x0260 c0x0000 (---------------) + I adm
+- 0x00257c83, // n0x0261 c0x0000 (---------------) + I adv
+- 0x0020b643, // n0x0262 c0x0000 (---------------) + I agr
+- 0x002016c2, // n0x0263 c0x0000 (---------------) + I am
+- 0x00251d03, // n0x0264 c0x0000 (---------------) + I arq
+- 0x0020e343, // n0x0265 c0x0000 (---------------) + I art
+- 0x0020fd03, // n0x0266 c0x0000 (---------------) + I ato
+- 0x00200001, // n0x0267 c0x0000 (---------------) + I b
+- 0x0020d803, // n0x0268 c0x0000 (---------------) + I bio
+- 0x00205584, // n0x0269 c0x0000 (---------------) + I blog
+- 0x00211003, // n0x026a c0x0000 (---------------) + I bmd
+- 0x00322ac3, // n0x026b c0x0000 (---------------) + I cim
+- 0x002f1403, // n0x026c c0x0000 (---------------) + I cng
+- 0x00231843, // n0x026d c0x0000 (---------------) + I cnt
+- 0x0a20d643, // n0x026e c0x0028 (n0x02a5-n0x02a6) + I com
+- 0x0023ae84, // n0x026f c0x0000 (---------------) + I coop
+- 0x002f13c3, // n0x0270 c0x0000 (---------------) + I ecn
+- 0x0020d603, // n0x0271 c0x0000 (---------------) + I eco
+- 0x002df843, // n0x0272 c0x0000 (---------------) + I edu
+- 0x0023a303, // n0x0273 c0x0000 (---------------) + I emp
+- 0x00204883, // n0x0274 c0x0000 (---------------) + I eng
+- 0x00291703, // n0x0275 c0x0000 (---------------) + I esp
+- 0x00230f83, // n0x0276 c0x0000 (---------------) + I etc
+- 0x00222fc3, // n0x0277 c0x0000 (---------------) + I eti
+- 0x00201283, // n0x0278 c0x0000 (---------------) + I far
+- 0x00245f84, // n0x0279 c0x0000 (---------------) + I flog
+- 0x00330b82, // n0x027a c0x0000 (---------------) + I fm
+- 0x00247083, // n0x027b c0x0000 (---------------) + I fnd
+- 0x0024ce83, // n0x027c c0x0000 (---------------) + I fot
+- 0x00268883, // n0x027d c0x0000 (---------------) + I fst
+- 0x0022ba43, // n0x027e c0x0000 (---------------) + I g12
+- 0x002bb203, // n0x027f c0x0000 (---------------) + I ggf
+- 0x00218d43, // n0x0280 c0x0000 (---------------) + I gov
+- 0x002e0c83, // n0x0281 c0x0000 (---------------) + I imb
+- 0x002051c3, // n0x0282 c0x0000 (---------------) + I ind
+- 0x00210e03, // n0x0283 c0x0000 (---------------) + I inf
+- 0x0023e1c3, // n0x0284 c0x0000 (---------------) + I jor
+- 0x00294c43, // n0x0285 c0x0000 (---------------) + I jus
+- 0x0023e603, // n0x0286 c0x0000 (---------------) + I leg
+- 0x00300603, // n0x0287 c0x0000 (---------------) + I lel
+- 0x0021abc3, // n0x0288 c0x0000 (---------------) + I mat
+- 0x0023dbc3, // n0x0289 c0x0000 (---------------) + I med
+- 0x0022f003, // n0x028a c0x0000 (---------------) + I mil
+- 0x0022b303, // n0x028b c0x0000 (---------------) + I mus
+- 0x00214843, // n0x028c c0x0000 (---------------) + I net
+- 0x00216583, // n0x028d c0x0000 (---------------) + I nom
+- 0x0020d203, // n0x028e c0x0000 (---------------) + I not
+- 0x00268683, // n0x028f c0x0000 (---------------) + I ntr
+- 0x0023b403, // n0x0290 c0x0000 (---------------) + I odo
+- 0x0023e983, // n0x0291 c0x0000 (---------------) + I org
+- 0x00224003, // n0x0292 c0x0000 (---------------) + I ppg
+- 0x002d1383, // n0x0293 c0x0000 (---------------) + I pro
+- 0x0027a483, // n0x0294 c0x0000 (---------------) + I psc
+- 0x002d2643, // n0x0295 c0x0000 (---------------) + I psi
+- 0x002d3a43, // n0x0296 c0x0000 (---------------) + I qsl
+- 0x0023f845, // n0x0297 c0x0000 (---------------) + I radio
+- 0x002c1d83, // n0x0298 c0x0000 (---------------) + I rec
+- 0x002e1703, // n0x0299 c0x0000 (---------------) + I slg
+- 0x002e7b03, // n0x029a c0x0000 (---------------) + I srv
+- 0x002318c4, // n0x029b c0x0000 (---------------) + I taxi
+- 0x00335c03, // n0x029c c0x0000 (---------------) + I teo
+- 0x00285443, // n0x029d c0x0000 (---------------) + I tmp
+- 0x002ee543, // n0x029e c0x0000 (---------------) + I trd
+- 0x002017c3, // n0x029f c0x0000 (---------------) + I tur
+- 0x00281802, // n0x02a0 c0x0000 (---------------) + I tv
+- 0x0023cd43, // n0x02a1 c0x0000 (---------------) + I vet
+- 0x002f2984, // n0x02a2 c0x0000 (---------------) + I vlog
+- 0x0022c644, // n0x02a3 c0x0000 (---------------) + I wiki
+- 0x002bac43, // n0x02a4 c0x0000 (---------------) + I zlg
+- 0x0003c708, // n0x02a5 c0x0000 (---------------) + blogspot
+- 0x0020d643, // n0x02a6 c0x0000 (---------------) + I com
+- 0x002df843, // n0x02a7 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x02a8 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x02a9 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x02aa c0x0000 (---------------) + I org
+- 0x0020d643, // n0x02ab c0x0000 (---------------) + I com
+- 0x002df843, // n0x02ac c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x02ad c0x0000 (---------------) + I gov
+- 0x00214843, // n0x02ae c0x0000 (---------------) + I net
+- 0x0023e983, // n0x02af c0x0000 (---------------) + I org
+- 0x0020d642, // n0x02b0 c0x0000 (---------------) + I co
+- 0x0023e983, // n0x02b1 c0x0000 (---------------) + I org
+- 0x0020d643, // n0x02b2 c0x0000 (---------------) + I com
+- 0x00218d43, // n0x02b3 c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x02b4 c0x0000 (---------------) + I mil
+- 0x00213e42, // n0x02b5 c0x0000 (---------------) + I of
+- 0x0020d643, // n0x02b6 c0x0000 (---------------) + I com
+- 0x002df843, // n0x02b7 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x02b8 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x02b9 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x02ba c0x0000 (---------------) + I org
+- 0x00203382, // n0x02bb c0x0000 (---------------) + I ab
+- 0x00321b02, // n0x02bc c0x0000 (---------------) + I bc
+- 0x0003c708, // n0x02bd c0x0000 (---------------) + blogspot
+- 0x0000d642, // n0x02be c0x0000 (---------------) + co
+- 0x002afec2, // n0x02bf c0x0000 (---------------) + I gc
+- 0x00209382, // n0x02c0 c0x0000 (---------------) + I mb
+- 0x00203742, // n0x02c1 c0x0000 (---------------) + I nb
+- 0x00210e42, // n0x02c2 c0x0000 (---------------) + I nf
+- 0x0023ba42, // n0x02c3 c0x0000 (---------------) + I nl
+- 0x00204b42, // n0x02c4 c0x0000 (---------------) + I ns
+- 0x00200242, // n0x02c5 c0x0000 (---------------) + I nt
+- 0x00203642, // n0x02c6 c0x0000 (---------------) + I nu
+- 0x00202e82, // n0x02c7 c0x0000 (---------------) + I on
+- 0x00209242, // n0x02c8 c0x0000 (---------------) + I pe
+- 0x00239602, // n0x02c9 c0x0000 (---------------) + I qc
+- 0x00202202, // n0x02ca c0x0000 (---------------) + I sk
+- 0x0028d3c2, // n0x02cb c0x0000 (---------------) + I yk
+- 0x0000ef49, // n0x02cc c0x0000 (---------------) + ftpaccess
+- 0x000f88cb, // n0x02cd c0x0000 (---------------) + game-server
+- 0x000c4f88, // n0x02ce c0x0000 (---------------) + myphotos
+- 0x000edd49, // n0x02cf c0x0000 (---------------) + scrapping
+- 0x00218d43, // n0x02d0 c0x0000 (---------------) + I gov
+- 0x0003c708, // n0x02d1 c0x0000 (---------------) + blogspot
+- 0x0003c708, // n0x02d2 c0x0000 (---------------) + blogspot
+- 0x00206c42, // n0x02d3 c0x0000 (---------------) + I ac
+- 0x002072c4, // n0x02d4 c0x0000 (---------------) + I asso
+- 0x0020d642, // n0x02d5 c0x0000 (---------------) + I co
+- 0x0020d643, // n0x02d6 c0x0000 (---------------) + I com
+- 0x00207902, // n0x02d7 c0x0000 (---------------) + I ed
+- 0x002df843, // n0x02d8 c0x0000 (---------------) + I edu
+- 0x00200482, // n0x02d9 c0x0000 (---------------) + I go
+- 0x00257384, // n0x02da c0x0000 (---------------) + I gouv
+- 0x00217543, // n0x02db c0x0000 (---------------) + I int
+- 0x00211042, // n0x02dc c0x0000 (---------------) + I md
+- 0x00214843, // n0x02dd c0x0000 (---------------) + I net
+- 0x00200a82, // n0x02de c0x0000 (---------------) + I or
+- 0x0023e983, // n0x02df c0x0000 (---------------) + I org
+- 0x003460c6, // n0x02e0 c0x0000 (---------------) + I presse
+- 0x002c8d8f, // n0x02e1 c0x0000 (---------------) + I xn--aroport-bya
+- 0x00640643, // n0x02e2 c0x0001 (---------------) ! I www
+- 0x0020d642, // n0x02e3 c0x0000 (---------------) + I co
+- 0x00265483, // n0x02e4 c0x0000 (---------------) + I gob
+- 0x00218d43, // n0x02e5 c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x02e6 c0x0000 (---------------) + I mil
+- 0x00218d43, // n0x02e7 c0x0000 (---------------) + I gov
+- 0x00206c42, // n0x02e8 c0x0000 (---------------) + I ac
+- 0x00207a02, // n0x02e9 c0x0000 (---------------) + I ah
+- 0x002100c2, // n0x02ea c0x0000 (---------------) + I bj
+- 0x0020d643, // n0x02eb c0x0000 (---------------) + I com
+- 0x0023e2c2, // n0x02ec c0x0000 (---------------) + I cq
+- 0x002df843, // n0x02ed c0x0000 (---------------) + I edu
+- 0x0023e182, // n0x02ee c0x0000 (---------------) + I fj
+- 0x00205cc2, // n0x02ef c0x0000 (---------------) + I gd
+- 0x00218d43, // n0x02f0 c0x0000 (---------------) + I gov
+- 0x0023c7c2, // n0x02f1 c0x0000 (---------------) + I gs
+- 0x0028ce02, // n0x02f2 c0x0000 (---------------) + I gx
+- 0x0028f202, // n0x02f3 c0x0000 (---------------) + I gz
+- 0x00201682, // n0x02f4 c0x0000 (---------------) + I ha
+- 0x002d7582, // n0x02f5 c0x0000 (---------------) + I hb
+- 0x00201e02, // n0x02f6 c0x0000 (---------------) + I he
+- 0x00200742, // n0x02f7 c0x0000 (---------------) + I hi
+- 0x00215082, // n0x02f8 c0x0000 (---------------) + I hk
+- 0x00263882, // n0x02f9 c0x0000 (---------------) + I hl
+- 0x0022a882, // n0x02fa c0x0000 (---------------) + I hn
+- 0x00311082, // n0x02fb c0x0000 (---------------) + I jl
+- 0x00228202, // n0x02fc c0x0000 (---------------) + I js
+- 0x002f56c2, // n0x02fd c0x0000 (---------------) + I jx
+- 0x00291082, // n0x02fe c0x0000 (---------------) + I ln
+- 0x0022f003, // n0x02ff c0x0000 (---------------) + I mil
+- 0x00203d42, // n0x0300 c0x0000 (---------------) + I mo
+- 0x00214843, // n0x0301 c0x0000 (---------------) + I net
+- 0x0020c202, // n0x0302 c0x0000 (---------------) + I nm
+- 0x00202d82, // n0x0303 c0x0000 (---------------) + I nx
+- 0x0023e983, // n0x0304 c0x0000 (---------------) + I org
+- 0x0023e302, // n0x0305 c0x0000 (---------------) + I qh
+- 0x00201d82, // n0x0306 c0x0000 (---------------) + I sc
+- 0x00203902, // n0x0307 c0x0000 (---------------) + I sd
+- 0x00202c42, // n0x0308 c0x0000 (---------------) + I sh
+- 0x00222982, // n0x0309 c0x0000 (---------------) + I sn
+- 0x002ed302, // n0x030a c0x0000 (---------------) + I sx
+- 0x0023ac42, // n0x030b c0x0000 (---------------) + I tj
+- 0x0024b942, // n0x030c c0x0000 (---------------) + I tw
+- 0x00202dc2, // n0x030d c0x0000 (---------------) + I xj
+- 0x0028feca, // n0x030e c0x0000 (---------------) + I xn--55qx5d
+- 0x0031014a, // n0x030f c0x0000 (---------------) + I xn--io0a7i
+- 0x0032c24a, // n0x0310 c0x0000 (---------------) + I xn--od0alg
+- 0x0034ef82, // n0x0311 c0x0000 (---------------) + I xz
+- 0x00202302, // n0x0312 c0x0000 (---------------) + I yn
+- 0x0028f242, // n0x0313 c0x0000 (---------------) + I zj
+- 0x00230884, // n0x0314 c0x0000 (---------------) + I arts
+- 0x0020d643, // n0x0315 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0316 c0x0000 (---------------) + I edu
+- 0x00243504, // n0x0317 c0x0000 (---------------) + I firm
+- 0x00218d43, // n0x0318 c0x0000 (---------------) + I gov
+- 0x00210e04, // n0x0319 c0x0000 (---------------) + I info
+- 0x00217543, // n0x031a c0x0000 (---------------) + I int
+- 0x0022f003, // n0x031b c0x0000 (---------------) + I mil
+- 0x00214843, // n0x031c c0x0000 (---------------) + I net
+- 0x00216583, // n0x031d c0x0000 (---------------) + I nom
+- 0x0023e983, // n0x031e c0x0000 (---------------) + I org
+- 0x002c1d83, // n0x031f c0x0000 (---------------) + I rec
+- 0x00205e43, // n0x0320 c0x0000 (---------------) + I web
+- 0x0eac3d89, // n0x0321 c0x003a (n0x03d5-n0x03e9) o I amazonaws
+- 0x000337c7, // n0x0322 c0x0000 (---------------) + appspot
+- 0x00000182, // n0x0323 c0x0000 (---------------) + ar
+- 0x0000320a, // n0x0324 c0x0000 (---------------) + betainabox
+- 0x00005c07, // n0x0325 c0x0000 (---------------) + blogdns
+- 0x0003c708, // n0x0326 c0x0000 (---------------) + blogspot
+- 0x00001882, // n0x0327 c0x0000 (---------------) + br
+- 0x00099547, // n0x0328 c0x0000 (---------------) + cechire
+- 0x00031842, // n0x0329 c0x0000 (---------------) + cn
+- 0x00091648, // n0x032a c0x0000 (---------------) + codespot
+- 0x00002602, // n0x032b c0x0000 (---------------) + de
+- 0x000357c8, // n0x032c c0x0000 (---------------) + dnsalias
+- 0x00062ac7, // n0x032d c0x0000 (---------------) + dnsdojo
+- 0x000a33cb, // n0x032e c0x0000 (---------------) + doesntexist
+- 0x00106f09, // n0x032f c0x0000 (---------------) + dontexist
+- 0x000356c7, // n0x0330 c0x0000 (---------------) + doomdns
+- 0x000ed8cc, // n0x0331 c0x0000 (---------------) + dreamhosters
+- 0x000022ca, // n0x0332 c0x0000 (---------------) + dyn-o-saur
+- 0x0000e508, // n0x0333 c0x0000 (---------------) + dynalias
+- 0x00070fce, // n0x0334 c0x0000 (---------------) + dyndns-at-home
+- 0x00004a4e, // n0x0335 c0x0000 (---------------) + dyndns-at-work
+- 0x00005a4b, // n0x0336 c0x0000 (---------------) + dyndns-blog
+- 0x00007dcb, // n0x0337 c0x0000 (---------------) + dyndns-free
+- 0x0000ec8b, // n0x0338 c0x0000 (---------------) + dyndns-home
+- 0x00011089, // n0x0339 c0x0000 (---------------) + dyndns-ip
+- 0x0001284b, // n0x033a c0x0000 (---------------) + dyndns-mail
+- 0x00013c8d, // n0x033b c0x0000 (---------------) + dyndns-office
+- 0x0001874b, // n0x033c c0x0000 (---------------) + dyndns-pics
+- 0x0002028d, // n0x033d c0x0000 (---------------) + dyndns-remote
+- 0x0002128d, // n0x033e c0x0000 (---------------) + dyndns-server
+- 0x0002204a, // n0x033f c0x0000 (---------------) + dyndns-web
+- 0x0002c48b, // n0x0340 c0x0000 (---------------) + dyndns-wiki
+- 0x00103e0b, // n0x0341 c0x0000 (---------------) + dyndns-work
+- 0x0001c450, // n0x0342 c0x0000 (---------------) + elasticbeanstalk
+- 0x00021acf, // n0x0343 c0x0000 (---------------) + est-a-la-maison
+- 0x00053b4f, // n0x0344 c0x0000 (---------------) + est-a-la-masion
+- 0x00041d0d, // n0x0345 c0x0000 (---------------) + est-le-patron
+- 0x000b1810, // n0x0346 c0x0000 (---------------) + est-mon-blogueur
+- 0x0000f402, // n0x0347 c0x0000 (---------------) + eu
+- 0x00050887, // n0x0348 c0x0000 (---------------) + from-ak
+- 0x00051a07, // n0x0349 c0x0000 (---------------) + from-al
+- 0x00051bc7, // n0x034a c0x0000 (---------------) + from-ar
+- 0x000521c7, // n0x034b c0x0000 (---------------) + from-ca
+- 0x000530c7, // n0x034c c0x0000 (---------------) + from-ct
+- 0x000533c7, // n0x034d c0x0000 (---------------) + from-dc
+- 0x000552c7, // n0x034e c0x0000 (---------------) + from-de
+- 0x00055807, // n0x034f c0x0000 (---------------) + from-fl
+- 0x00055dc7, // n0x0350 c0x0000 (---------------) + from-ga
+- 0x000560c7, // n0x0351 c0x0000 (---------------) + from-hi
+- 0x00056907, // n0x0352 c0x0000 (---------------) + from-ia
+- 0x00056ac7, // n0x0353 c0x0000 (---------------) + from-id
+- 0x00056c87, // n0x0354 c0x0000 (---------------) + from-il
+- 0x00056e47, // n0x0355 c0x0000 (---------------) + from-in
+- 0x00057147, // n0x0356 c0x0000 (---------------) + from-ks
+- 0x00058007, // n0x0357 c0x0000 (---------------) + from-ky
+- 0x00059d47, // n0x0358 c0x0000 (---------------) + from-ma
+- 0x0005a587, // n0x0359 c0x0000 (---------------) + from-md
+- 0x0005b147, // n0x035a c0x0000 (---------------) + from-mi
+- 0x0005b5c7, // n0x035b c0x0000 (---------------) + from-mn
+- 0x0005b787, // n0x035c c0x0000 (---------------) + from-mo
+- 0x0005c0c7, // n0x035d c0x0000 (---------------) + from-ms
+- 0x0005c3c7, // n0x035e c0x0000 (---------------) + from-mt
+- 0x0005cc47, // n0x035f c0x0000 (---------------) + from-nc
+- 0x0005e807, // n0x0360 c0x0000 (---------------) + from-nd
+- 0x0005e9c7, // n0x0361 c0x0000 (---------------) + from-ne
+- 0x0005eb87, // n0x0362 c0x0000 (---------------) + from-nh
+- 0x0005f207, // n0x0363 c0x0000 (---------------) + from-nj
+- 0x0005f847, // n0x0364 c0x0000 (---------------) + from-nm
+- 0x0005fd07, // n0x0365 c0x0000 (---------------) + from-nv
+- 0x00060607, // n0x0366 c0x0000 (---------------) + from-oh
+- 0x00060847, // n0x0367 c0x0000 (---------------) + from-ok
+- 0x00060f07, // n0x0368 c0x0000 (---------------) + from-or
+- 0x000611c7, // n0x0369 c0x0000 (---------------) + from-pa
+- 0x00061d87, // n0x036a c0x0000 (---------------) + from-pr
+- 0x00061f87, // n0x036b c0x0000 (---------------) + from-ri
+- 0x000636c7, // n0x036c c0x0000 (---------------) + from-sc
+- 0x00064047, // n0x036d c0x0000 (---------------) + from-sd
+- 0x00064207, // n0x036e c0x0000 (---------------) + from-tn
+- 0x000643c7, // n0x036f c0x0000 (---------------) + from-tx
+- 0x00065cc7, // n0x0370 c0x0000 (---------------) + from-ut
+- 0x00066287, // n0x0371 c0x0000 (---------------) + from-va
+- 0x00066807, // n0x0372 c0x0000 (---------------) + from-vt
+- 0x00066f87, // n0x0373 c0x0000 (---------------) + from-wa
+- 0x00067147, // n0x0374 c0x0000 (---------------) + from-wi
+- 0x000674c7, // n0x0375 c0x0000 (---------------) + from-wv
+- 0x00067947, // n0x0376 c0x0000 (---------------) + from-wy
+- 0x00079382, // n0x0377 c0x0000 (---------------) + gb
+- 0x0003a7c7, // n0x0378 c0x0000 (---------------) + getmyip
+- 0x0008e38a, // n0x0379 c0x0000 (---------------) + googleapis
+- 0x000914ca, // n0x037a c0x0000 (---------------) + googlecode
+- 0x00049846, // n0x037b c0x0000 (---------------) + gotdns
+- 0x00000642, // n0x037c c0x0000 (---------------) + gr
+- 0x0003ef4a, // n0x037d c0x0000 (---------------) + hobby-site
+- 0x0008fcc9, // n0x037e c0x0000 (---------------) + homelinux
+- 0x00090148, // n0x037f c0x0000 (---------------) + homeunix
+- 0x0002b002, // n0x0380 c0x0000 (---------------) + hu
+- 0x00062709, // n0x0381 c0x0000 (---------------) + iamallama
+- 0x0007528e, // n0x0382 c0x0000 (---------------) + is-a-anarchist
+- 0x0000544c, // n0x0383 c0x0000 (---------------) + is-a-blogger
+- 0x000c534f, // n0x0384 c0x0000 (---------------) + is-a-bookkeeper
+- 0x0002090e, // n0x0385 c0x0000 (---------------) + is-a-bulls-fan
+- 0x00104b8c, // n0x0386 c0x0000 (---------------) + is-a-caterer
+- 0x00054949, // n0x0387 c0x0000 (---------------) + is-a-chef
+- 0x0005d9d1, // n0x0388 c0x0000 (---------------) + is-a-conservative
+- 0x00085f88, // n0x0389 c0x0000 (---------------) + is-a-cpa
+- 0x00032452, // n0x038a c0x0000 (---------------) + is-a-cubicle-slave
+- 0x00033f4d, // n0x038b c0x0000 (---------------) + is-a-democrat
+- 0x0004c14d, // n0x038c c0x0000 (---------------) + is-a-designer
+- 0x0004e64b, // n0x038d c0x0000 (---------------) + is-a-doctor
+- 0x00057915, // n0x038e c0x0000 (---------------) + is-a-financialadvisor
+- 0x0005c709, // n0x038f c0x0000 (---------------) + is-a-geek
+- 0x00060c8a, // n0x0390 c0x0000 (---------------) + is-a-green
+- 0x00062d49, // n0x0391 c0x0000 (---------------) + is-a-guru
+- 0x000632d0, // n0x0392 c0x0000 (---------------) + is-a-hard-worker
+- 0x00066ccb, // n0x0393 c0x0000 (---------------) + is-a-hunter
+- 0x0007150f, // n0x0394 c0x0000 (---------------) + is-a-landscaper
+- 0x0007478b, // n0x0395 c0x0000 (---------------) + is-a-lawyer
+- 0x0007660c, // n0x0396 c0x0000 (---------------) + is-a-liberal
+- 0x0007af90, // n0x0397 c0x0000 (---------------) + is-a-libertarian
+- 0x00095b8a, // n0x0398 c0x0000 (---------------) + is-a-llama
+- 0x000b584d, // n0x0399 c0x0000 (---------------) + is-a-musician
+- 0x000ab7ce, // n0x039a c0x0000 (---------------) + is-a-nascarfan
+- 0x000d634a, // n0x039b c0x0000 (---------------) + is-a-nurse
+- 0x000b510c, // n0x039c c0x0000 (---------------) + is-a-painter
+- 0x00099f54, // n0x039d c0x0000 (---------------) + is-a-personaltrainer
+- 0x0009a751, // n0x039e c0x0000 (---------------) + is-a-photographer
+- 0x0009c9cb, // n0x039f c0x0000 (---------------) + is-a-player
+- 0x0009ea0f, // n0x03a0 c0x0000 (---------------) + is-a-republican
+- 0x0009f1cd, // n0x03a1 c0x0000 (---------------) + is-a-rockstar
+- 0x000a4c0e, // n0x03a2 c0x0000 (---------------) + is-a-socialist
+- 0x000a8e4c, // n0x03a3 c0x0000 (---------------) + is-a-student
+- 0x000aaecc, // n0x03a4 c0x0000 (---------------) + is-a-teacher
+- 0x000ab4cb, // n0x03a5 c0x0000 (---------------) + is-a-techie
+- 0x000cc84e, // n0x03a6 c0x0000 (---------------) + is-a-therapist
+- 0x000d3e50, // n0x03a7 c0x0000 (---------------) + is-an-accountant
+- 0x000b268b, // n0x03a8 c0x0000 (---------------) + is-an-actor
+- 0x000b798d, // n0x03a9 c0x0000 (---------------) + is-an-actress
+- 0x000bdb8f, // n0x03aa c0x0000 (---------------) + is-an-anarchist
+- 0x000d320c, // n0x03ab c0x0000 (---------------) + is-an-artist
+- 0x000c5c8e, // n0x03ac c0x0000 (---------------) + is-an-engineer
+- 0x000c6451, // n0x03ad c0x0000 (---------------) + is-an-entertainer
+- 0x000ca58c, // n0x03ae c0x0000 (---------------) + is-certified
+- 0x000d5307, // n0x03af c0x0000 (---------------) + is-gone
+- 0x000d5dcd, // n0x03b0 c0x0000 (---------------) + is-into-anime
+- 0x000d704c, // n0x03b1 c0x0000 (---------------) + is-into-cars
+- 0x000da290, // n0x03b2 c0x0000 (---------------) + is-into-cartoons
+- 0x000dcc4d, // n0x03b3 c0x0000 (---------------) + is-into-games
+- 0x000dd947, // n0x03b4 c0x0000 (---------------) + is-leet
+- 0x000df4d0, // n0x03b5 c0x0000 (---------------) + is-not-certified
+- 0x000eb1c8, // n0x03b6 c0x0000 (---------------) + is-slick
+- 0x000ee2cb, // n0x03b7 c0x0000 (---------------) + is-uberleet
+- 0x0012480f, // n0x03b8 c0x0000 (---------------) + is-with-theband
+- 0x0008e588, // n0x03b9 c0x0000 (---------------) + isa-geek
+- 0x00039a8d, // n0x03ba c0x0000 (---------------) + isa-hockeynut
+- 0x00096250, // n0x03bb c0x0000 (---------------) + issmarterthanyou
+- 0x00097b43, // n0x03bc c0x0000 (---------------) + jpn
+- 0x000015c2, // n0x03bd c0x0000 (---------------) + kr
+- 0x00048109, // n0x03be c0x0000 (---------------) + likes-pie
+- 0x0004a28a, // n0x03bf c0x0000 (---------------) + likescandy
+- 0x0002ed08, // n0x03c0 c0x0000 (---------------) + neat-url
+- 0x000005c2, // n0x03c1 c0x0000 (---------------) + no
+- 0x0003af0a, // n0x03c2 c0x0000 (---------------) + operaunite
+- 0x00039602, // n0x03c3 c0x0000 (---------------) + qc
+- 0x0002f147, // n0x03c4 c0x0000 (---------------) + rhcloud
+- 0x000018c2, // n0x03c5 c0x0000 (---------------) + ru
+- 0x00002442, // n0x03c6 c0x0000 (---------------) + sa
+- 0x000a0850, // n0x03c7 c0x0000 (---------------) + saves-the-whales
+- 0x0000da42, // n0x03c8 c0x0000 (---------------) + se
+- 0x00109ac6, // n0x03c9 c0x0000 (---------------) + selfip
+- 0x00081d8e, // n0x03ca c0x0000 (---------------) + sells-for-less
+- 0x000d654b, // n0x03cb c0x0000 (---------------) + sells-for-u
+- 0x000edb88, // n0x03cc c0x0000 (---------------) + servebbs
+- 0x000e124a, // n0x03cd c0x0000 (---------------) + simple-url
+- 0x000e528d, // n0x03ce c0x0000 (---------------) + space-to-rent
+- 0x0003034c, // n0x03cf c0x0000 (---------------) + teaches-yoga
+- 0x00001902, // n0x03d0 c0x0000 (---------------) + uk
+- 0x00001f42, // n0x03d1 c0x0000 (---------------) + us
+- 0x0001c8c2, // n0x03d2 c0x0000 (---------------) + uy
+- 0x0003c48e, // n0x03d3 c0x0000 (---------------) + writesthisblog
+- 0x00001142, // n0x03d4 c0x0000 (---------------) + za
+- 0x00022703, // n0x03d5 c0x0000 (---------------) + elb
+- 0x00001e82, // n0x03d6 c0x0000 (---------------) + s3
+- 0x000e6351, // n0x03d7 c0x0000 (---------------) + s3-ap-northeast-1
+- 0x0014ce11, // n0x03d8 c0x0000 (---------------) + s3-ap-southeast-1
+- 0x000fde51, // n0x03d9 c0x0000 (---------------) + s3-ap-southeast-2
+- 0x0011a2cc, // n0x03da c0x0000 (---------------) + s3-eu-west-1
+- 0x0012d255, // n0x03db c0x0000 (---------------) + s3-fips-us-gov-west-1
+- 0x0013724c, // n0x03dc c0x0000 (---------------) + s3-sa-east-1
+- 0x001482d0, // n0x03dd c0x0000 (---------------) + s3-us-gov-west-1
+- 0x0014df4c, // n0x03de c0x0000 (---------------) + s3-us-west-1
+- 0x00001e8c, // n0x03df c0x0000 (---------------) + s3-us-west-2
+- 0x00005d99, // n0x03e0 c0x0000 (---------------) + s3-website-ap-northeast-1
+- 0x0000a2d9, // n0x03e1 c0x0000 (---------------) + s3-website-ap-southeast-1
+- 0x0000dc19, // n0x03e2 c0x0000 (---------------) + s3-website-ap-southeast-2
+- 0x0000f154, // n0x03e3 c0x0000 (---------------) + s3-website-eu-west-1
+- 0x00012054, // n0x03e4 c0x0000 (---------------) + s3-website-sa-east-1
+- 0x00012ed4, // n0x03e5 c0x0000 (---------------) + s3-website-us-east-1
+- 0x000189d8, // n0x03e6 c0x0000 (---------------) + s3-website-us-gov-west-1
+- 0x0001ae14, // n0x03e7 c0x0000 (---------------) + s3-website-us-west-1
+- 0x0001edd4, // n0x03e8 c0x0000 (---------------) + s3-website-us-west-2
+- 0x00206c42, // n0x03e9 c0x0000 (---------------) + I ac
+- 0x0020d642, // n0x03ea c0x0000 (---------------) + I co
+- 0x00207902, // n0x03eb c0x0000 (---------------) + I ed
+- 0x0020bc82, // n0x03ec c0x0000 (---------------) + I fi
+- 0x00200482, // n0x03ed c0x0000 (---------------) + I go
+- 0x00200a82, // n0x03ee c0x0000 (---------------) + I or
+- 0x00202442, // n0x03ef c0x0000 (---------------) + I sa
+- 0x0020d643, // n0x03f0 c0x0000 (---------------) + I com
+- 0x002df843, // n0x03f1 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x03f2 c0x0000 (---------------) + I gov
+- 0x00210e03, // n0x03f3 c0x0000 (---------------) + I inf
+- 0x00214843, // n0x03f4 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x03f5 c0x0000 (---------------) + I org
+- 0x0003c708, // n0x03f6 c0x0000 (---------------) + blogspot
+- 0x0020d643, // n0x03f7 c0x0000 (---------------) + I com
+- 0x002df843, // n0x03f8 c0x0000 (---------------) + I edu
+- 0x00214843, // n0x03f9 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x03fa c0x0000 (---------------) + I org
+- 0x00012e03, // n0x03fb c0x0000 (---------------) + ath
+- 0x00218d43, // n0x03fc c0x0000 (---------------) + I gov
+- 0x0003c708, // n0x03fd c0x0000 (---------------) + blogspot
+- 0x0003c708, // n0x03fe c0x0000 (---------------) + blogspot
+- 0x0000d643, // n0x03ff c0x0000 (---------------) + com
+- 0x000de60f, // n0x0400 c0x0000 (---------------) + fuettertdasnetz
+- 0x000a35ca, // n0x0401 c0x0000 (---------------) + isteingeek
+- 0x00107087, // n0x0402 c0x0000 (---------------) + istmein
+- 0x000146ca, // n0x0403 c0x0000 (---------------) + lebtimnetz
+- 0x000b208a, // n0x0404 c0x0000 (---------------) + leitungsen
+- 0x0010a20d, // n0x0405 c0x0000 (---------------) + traeumtgerade
+- 0x0003c708, // n0x0406 c0x0000 (---------------) + blogspot
+- 0x0020d643, // n0x0407 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0408 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0409 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x040a c0x0000 (---------------) + I net
+- 0x0023e983, // n0x040b c0x0000 (---------------) + I org
+- 0x0020e343, // n0x040c c0x0000 (---------------) + I art
+- 0x0020d643, // n0x040d c0x0000 (---------------) + I com
+- 0x002df843, // n0x040e c0x0000 (---------------) + I edu
+- 0x00265483, // n0x040f c0x0000 (---------------) + I gob
+- 0x00218d43, // n0x0410 c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x0411 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x0412 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0413 c0x0000 (---------------) + I org
+- 0x002e1643, // n0x0414 c0x0000 (---------------) + I sld
+- 0x00205e43, // n0x0415 c0x0000 (---------------) + I web
+- 0x0020e343, // n0x0416 c0x0000 (---------------) + I art
+- 0x002072c4, // n0x0417 c0x0000 (---------------) + I asso
+- 0x0020d643, // n0x0418 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0419 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x041a c0x0000 (---------------) + I gov
+- 0x00214843, // n0x041b c0x0000 (---------------) + I net
+- 0x0023e983, // n0x041c c0x0000 (---------------) + I org
+- 0x00205383, // n0x041d c0x0000 (---------------) + I pol
+- 0x0020d643, // n0x041e c0x0000 (---------------) + I com
+- 0x002df843, // n0x041f c0x0000 (---------------) + I edu
+- 0x00242a83, // n0x0420 c0x0000 (---------------) + I fin
+- 0x00265483, // n0x0421 c0x0000 (---------------) + I gob
+- 0x00218d43, // n0x0422 c0x0000 (---------------) + I gov
+- 0x00210e04, // n0x0423 c0x0000 (---------------) + I info
+- 0x002316c3, // n0x0424 c0x0000 (---------------) + I k12
+- 0x0023dbc3, // n0x0425 c0x0000 (---------------) + I med
+- 0x0022f003, // n0x0426 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x0427 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0428 c0x0000 (---------------) + I org
+- 0x002d1383, // n0x0429 c0x0000 (---------------) + I pro
+- 0x0022eb83, // n0x042a c0x0000 (---------------) + I aip
+- 0x0020d643, // n0x042b c0x0000 (---------------) + I com
+- 0x002df843, // n0x042c c0x0000 (---------------) + I edu
+- 0x00241483, // n0x042d c0x0000 (---------------) + I fie
+- 0x00218d43, // n0x042e c0x0000 (---------------) + I gov
+- 0x0021bec3, // n0x042f c0x0000 (---------------) + I lib
+- 0x0023dbc3, // n0x0430 c0x0000 (---------------) + I med
+- 0x0023e983, // n0x0431 c0x0000 (---------------) + I org
+- 0x002d0383, // n0x0432 c0x0000 (---------------) + I pri
+- 0x002102c4, // n0x0433 c0x0000 (---------------) + I riik
+- 0x0020d643, // n0x0434 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0435 c0x0000 (---------------) + I edu
+- 0x00290203, // n0x0436 c0x0000 (---------------) + I eun
+- 0x00218d43, // n0x0437 c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x0438 c0x0000 (---------------) + I mil
+- 0x00202f04, // n0x0439 c0x0000 (---------------) + I name
+- 0x00214843, // n0x043a c0x0000 (---------------) + I net
+- 0x0023e983, // n0x043b c0x0000 (---------------) + I org
+- 0x002089c3, // n0x043c c0x0000 (---------------) + I sci
+- 0x12a0d643, // n0x043d c0x004a (n0x0442-n0x0443) + I com
+- 0x002df843, // n0x043e c0x0000 (---------------) + I edu
+- 0x00265483, // n0x043f c0x0000 (---------------) + I gob
+- 0x00216583, // n0x0440 c0x0000 (---------------) + I nom
+- 0x0023e983, // n0x0441 c0x0000 (---------------) + I org
+- 0x0003c708, // n0x0442 c0x0000 (---------------) + blogspot
+- 0x00237705, // n0x0443 c0x0000 (---------------) + I aland
+- 0x0003c708, // n0x0444 c0x0000 (---------------) + blogspot
+- 0x0000aec3, // n0x0445 c0x0000 (---------------) + iki
+- 0x0022f708, // n0x0446 c0x0000 (---------------) + I aeroport
+- 0x00226d47, // n0x0447 c0x0000 (---------------) + I assedic
+- 0x002072c4, // n0x0448 c0x0000 (---------------) + I asso
+- 0x002ae3c6, // n0x0449 c0x0000 (---------------) + I avocat
+- 0x002e6206, // n0x044a c0x0000 (---------------) + I avoues
+- 0x0003c708, // n0x044b c0x0000 (---------------) + blogspot
+- 0x002f9403, // n0x044c c0x0000 (---------------) + I cci
+- 0x0020b509, // n0x044d c0x0000 (---------------) + I chambagri
+- 0x0029d195, // n0x044e c0x0000 (---------------) + I chirurgiens-dentistes
+- 0x0020d643, // n0x044f c0x0000 (---------------) + I com
+- 0x0032ce12, // n0x0450 c0x0000 (---------------) + I experts-comptables
+- 0x0032cbcf, // n0x0451 c0x0000 (---------------) + I geometre-expert
+- 0x00257384, // n0x0452 c0x0000 (---------------) + I gouv
+- 0x00328585, // n0x0453 c0x0000 (---------------) + I greta
+- 0x00294a10, // n0x0454 c0x0000 (---------------) + I huissier-justice
+- 0x002efac7, // n0x0455 c0x0000 (---------------) + I medecin
+- 0x00216583, // n0x0456 c0x0000 (---------------) + I nom
+- 0x00277b88, // n0x0457 c0x0000 (---------------) + I notaires
+- 0x002c70ca, // n0x0458 c0x0000 (---------------) + I pharmacien
+- 0x0022f804, // n0x0459 c0x0000 (---------------) + I port
+- 0x00261ec3, // n0x045a c0x0000 (---------------) + I prd
+- 0x003460c6, // n0x045b c0x0000 (---------------) + I presse
+- 0x0023a842, // n0x045c c0x0000 (---------------) + I tm
+- 0x002c1b4b, // n0x045d c0x0000 (---------------) + I veterinaire
+- 0x0020d643, // n0x045e c0x0000 (---------------) + I com
+- 0x002df843, // n0x045f c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0460 c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x0461 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x0462 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0463 c0x0000 (---------------) + I org
+- 0x002d36c3, // n0x0464 c0x0000 (---------------) + I pvt
+- 0x0020d642, // n0x0465 c0x0000 (---------------) + I co
+- 0x00218d43, // n0x0466 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0467 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0468 c0x0000 (---------------) + I org
+- 0x00201d83, // n0x0469 c0x0000 (---------------) + I sch
+- 0x0020d643, // n0x046a c0x0000 (---------------) + I com
+- 0x002df843, // n0x046b c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x046c c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x046d c0x0000 (---------------) + I mil
+- 0x0023e983, // n0x046e c0x0000 (---------------) + I org
+- 0x0020d643, // n0x046f c0x0000 (---------------) + I com
+- 0x002df843, // n0x0470 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0471 c0x0000 (---------------) + I gov
+- 0x0023c1c3, // n0x0472 c0x0000 (---------------) + I ltd
+- 0x00249483, // n0x0473 c0x0000 (---------------) + I mod
+- 0x0023e983, // n0x0474 c0x0000 (---------------) + I org
+- 0x00206c42, // n0x0475 c0x0000 (---------------) + I ac
+- 0x0020d643, // n0x0476 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0477 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0478 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0479 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x047a c0x0000 (---------------) + I org
+- 0x002072c4, // n0x047b c0x0000 (---------------) + I asso
+- 0x0020d643, // n0x047c c0x0000 (---------------) + I com
+- 0x002df843, // n0x047d c0x0000 (---------------) + I edu
+- 0x00303304, // n0x047e c0x0000 (---------------) + I mobi
+- 0x00214843, // n0x047f c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0480 c0x0000 (---------------) + I org
+- 0x0003c708, // n0x0481 c0x0000 (---------------) + blogspot
+- 0x0020d643, // n0x0482 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0483 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0484 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0485 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0486 c0x0000 (---------------) + I org
+- 0x0020d643, // n0x0487 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0488 c0x0000 (---------------) + I edu
+- 0x00265483, // n0x0489 c0x0000 (---------------) + I gob
+- 0x002051c3, // n0x048a c0x0000 (---------------) + I ind
+- 0x0022f003, // n0x048b c0x0000 (---------------) + I mil
+- 0x00214843, // n0x048c c0x0000 (---------------) + I net
+- 0x0023e983, // n0x048d c0x0000 (---------------) + I org
+- 0x0020d642, // n0x048e c0x0000 (---------------) + I co
+- 0x0020d643, // n0x048f c0x0000 (---------------) + I com
+- 0x00214843, // n0x0490 c0x0000 (---------------) + I net
+- 0x0003c708, // n0x0491 c0x0000 (---------------) + blogspot
+- 0x0020d643, // n0x0492 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0493 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0494 c0x0000 (---------------) + I gov
+- 0x002629c3, // n0x0495 c0x0000 (---------------) + I idv
+- 0x00214843, // n0x0496 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0497 c0x0000 (---------------) + I org
+- 0x0028feca, // n0x0498 c0x0000 (---------------) + I xn--55qx5d
+- 0x002fbdc9, // n0x0499 c0x0000 (---------------) + I xn--ciqpn
+- 0x0030784b, // n0x049a c0x0000 (---------------) + I xn--gmq050i
+- 0x0030910a, // n0x049b c0x0000 (---------------) + I xn--gmqw5a
+- 0x0031014a, // n0x049c c0x0000 (---------------) + I xn--io0a7i
+- 0x0031730b, // n0x049d c0x0000 (---------------) + I xn--lcvr32d
+- 0x003245ca, // n0x049e c0x0000 (---------------) + I xn--mk0axi
+- 0x0032938a, // n0x049f c0x0000 (---------------) + I xn--mxtq1m
+- 0x0032c24a, // n0x04a0 c0x0000 (---------------) + I xn--od0alg
+- 0x0032c4cb, // n0x04a1 c0x0000 (---------------) + I xn--od0aq3b
+- 0x00340949, // n0x04a2 c0x0000 (---------------) + I xn--tn0ag
+- 0x00343c0a, // n0x04a3 c0x0000 (---------------) + I xn--uc0atv
+- 0x003440cb, // n0x04a4 c0x0000 (---------------) + I xn--uc0ay4a
+- 0x00349f0b, // n0x04a5 c0x0000 (---------------) + I xn--wcvs22d
+- 0x0034e54a, // n0x04a6 c0x0000 (---------------) + I xn--zf0avx
+- 0x0020d643, // n0x04a7 c0x0000 (---------------) + I com
+- 0x002df843, // n0x04a8 c0x0000 (---------------) + I edu
+- 0x00265483, // n0x04a9 c0x0000 (---------------) + I gob
+- 0x0022f003, // n0x04aa c0x0000 (---------------) + I mil
+- 0x00214843, // n0x04ab c0x0000 (---------------) + I net
+- 0x0023e983, // n0x04ac c0x0000 (---------------) + I org
+- 0x0020d643, // n0x04ad c0x0000 (---------------) + I com
+- 0x00250884, // n0x04ae c0x0000 (---------------) + I from
+- 0x00215942, // n0x04af c0x0000 (---------------) + I iz
+- 0x00202f04, // n0x04b0 c0x0000 (---------------) + I name
+- 0x00251685, // n0x04b1 c0x0000 (---------------) + I adult
+- 0x0020e343, // n0x04b2 c0x0000 (---------------) + I art
+- 0x002072c4, // n0x04b3 c0x0000 (---------------) + I asso
+- 0x0020d643, // n0x04b4 c0x0000 (---------------) + I com
+- 0x0023ae84, // n0x04b5 c0x0000 (---------------) + I coop
+- 0x002df843, // n0x04b6 c0x0000 (---------------) + I edu
+- 0x00243504, // n0x04b7 c0x0000 (---------------) + I firm
+- 0x00257384, // n0x04b8 c0x0000 (---------------) + I gouv
+- 0x00210e04, // n0x04b9 c0x0000 (---------------) + I info
+- 0x0023dbc3, // n0x04ba c0x0000 (---------------) + I med
+- 0x00214843, // n0x04bb c0x0000 (---------------) + I net
+- 0x0023e983, // n0x04bc c0x0000 (---------------) + I org
+- 0x0029a085, // n0x04bd c0x0000 (---------------) + I perso
+- 0x00205383, // n0x04be c0x0000 (---------------) + I pol
+- 0x002d1383, // n0x04bf c0x0000 (---------------) + I pro
+- 0x00259c43, // n0x04c0 c0x0000 (---------------) + I rel
+- 0x003040c4, // n0x04c1 c0x0000 (---------------) + I shop
+- 0x00231744, // n0x04c2 c0x0000 (---------------) + I 2000
+- 0x00302cc5, // n0x04c3 c0x0000 (---------------) + I agrar
+- 0x0003c708, // n0x04c4 c0x0000 (---------------) + blogspot
+- 0x00211884, // n0x04c5 c0x0000 (---------------) + I bolt
+- 0x00318c46, // n0x04c6 c0x0000 (---------------) + I casino
+- 0x0034a404, // n0x04c7 c0x0000 (---------------) + I city
+- 0x0020d642, // n0x04c8 c0x0000 (---------------) + I co
+- 0x0029f807, // n0x04c9 c0x0000 (---------------) + I erotica
+- 0x002a8787, // n0x04ca c0x0000 (---------------) + I erotika
+- 0x00242684, // n0x04cb c0x0000 (---------------) + I film
+- 0x0024be05, // n0x04cc c0x0000 (---------------) + I forum
+- 0x002dce45, // n0x04cd c0x0000 (---------------) + I games
+- 0x002937c5, // n0x04ce c0x0000 (---------------) + I hotel
+- 0x00210e04, // n0x04cf c0x0000 (---------------) + I info
+- 0x002e7308, // n0x04d0 c0x0000 (---------------) + I ingatlan
+- 0x00224e06, // n0x04d1 c0x0000 (---------------) + I jogasz
+- 0x002fa288, // n0x04d2 c0x0000 (---------------) + I konyvelo
+- 0x0021aa45, // n0x04d3 c0x0000 (---------------) + I lakas
+- 0x0023dbc5, // n0x04d4 c0x0000 (---------------) + I media
+- 0x00307604, // n0x04d5 c0x0000 (---------------) + I news
+- 0x0023e983, // n0x04d6 c0x0000 (---------------) + I org
+- 0x002d1204, // n0x04d7 c0x0000 (---------------) + I priv
+- 0x0020b886, // n0x04d8 c0x0000 (---------------) + I reklam
+- 0x003461c3, // n0x04d9 c0x0000 (---------------) + I sex
+- 0x003040c4, // n0x04da c0x0000 (---------------) + I shop
+- 0x002d4305, // n0x04db c0x0000 (---------------) + I sport
+- 0x00248084, // n0x04dc c0x0000 (---------------) + I suli
+- 0x0021bac4, // n0x04dd c0x0000 (---------------) + I szex
+- 0x0023a842, // n0x04de c0x0000 (---------------) + I tm
+- 0x0027d6c6, // n0x04df c0x0000 (---------------) + I tozsde
+- 0x003381c6, // n0x04e0 c0x0000 (---------------) + I utazas
+- 0x002ef0c5, // n0x04e1 c0x0000 (---------------) + I video
+- 0x00206c42, // n0x04e2 c0x0000 (---------------) + I ac
+- 0x0030c243, // n0x04e3 c0x0000 (---------------) + I biz
+- 0x0020d642, // n0x04e4 c0x0000 (---------------) + I co
+- 0x00200482, // n0x04e5 c0x0000 (---------------) + I go
+- 0x0022f003, // n0x04e6 c0x0000 (---------------) + I mil
+- 0x0023a882, // n0x04e7 c0x0000 (---------------) + I my
+- 0x00214843, // n0x04e8 c0x0000 (---------------) + I net
+- 0x00200a82, // n0x04e9 c0x0000 (---------------) + I or
+- 0x00201d83, // n0x04ea c0x0000 (---------------) + I sch
+- 0x00205e43, // n0x04eb c0x0000 (---------------) + I web
+- 0x0003c708, // n0x04ec c0x0000 (---------------) + blogspot
+- 0x00218d43, // n0x04ed c0x0000 (---------------) + I gov
+- 0x17a0d642, // n0x04ee c0x005e (n0x04ef-n0x04f0) o I co
+- 0x0003c708, // n0x04ef c0x0000 (---------------) + blogspot
+- 0x00206c42, // n0x04f0 c0x0000 (---------------) + I ac
+- 0x1820d642, // n0x04f1 c0x0060 (n0x04f6-n0x04f8) + I co
+- 0x00218d43, // n0x04f2 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x04f3 c0x0000 (---------------) + I net
+- 0x00211783, // n0x04f4 c0x0000 (---------------) + I nic
+- 0x0023e983, // n0x04f5 c0x0000 (---------------) + I org
+- 0x0023c1c3, // n0x04f6 c0x0000 (---------------) + I ltd
+- 0x002cd4c3, // n0x04f7 c0x0000 (---------------) + I plc
+- 0x00206c42, // n0x04f8 c0x0000 (---------------) + I ac
+- 0x0003c708, // n0x04f9 c0x0000 (---------------) + blogspot
+- 0x0020d642, // n0x04fa c0x0000 (---------------) + I co
+- 0x002df843, // n0x04fb c0x0000 (---------------) + I edu
+- 0x00243504, // n0x04fc c0x0000 (---------------) + I firm
+- 0x0020b183, // n0x04fd c0x0000 (---------------) + I gen
+- 0x00218d43, // n0x04fe c0x0000 (---------------) + I gov
+- 0x002051c3, // n0x04ff c0x0000 (---------------) + I ind
+- 0x0022f003, // n0x0500 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x0501 c0x0000 (---------------) + I net
+- 0x00211783, // n0x0502 c0x0000 (---------------) + I nic
+- 0x0023e983, // n0x0503 c0x0000 (---------------) + I org
+- 0x0021a643, // n0x0504 c0x0000 (---------------) + I res
+- 0x00126c53, // n0x0505 c0x0000 (---------------) + barrel-of-knowledge
+- 0x0012c754, // n0x0506 c0x0000 (---------------) + barrell-of-knowledge
+- 0x00004a46, // n0x0507 c0x0000 (---------------) + dyndns
+- 0x00047787, // n0x0508 c0x0000 (---------------) + for-our
+- 0x00029309, // n0x0509 c0x0000 (---------------) + groks-the
+- 0x0004898a, // n0x050a c0x0000 (---------------) + groks-this
+- 0x0011f6cd, // n0x050b c0x0000 (---------------) + here-for-more
+- 0x000be4ca, // n0x050c c0x0000 (---------------) + knowsitall
+- 0x00109ac6, // n0x050d c0x0000 (---------------) + selfip
+- 0x000141c6, // n0x050e c0x0000 (---------------) + webhop
+- 0x0020f402, // n0x050f c0x0000 (---------------) + I eu
+- 0x0020d643, // n0x0510 c0x0000 (---------------) + I com
+- 0x000ad5c6, // n0x0511 c0x0000 (---------------) + github
+- 0x0020d643, // n0x0512 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0513 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0514 c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x0515 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x0516 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0517 c0x0000 (---------------) + I org
+- 0x00206c42, // n0x0518 c0x0000 (---------------) + I ac
+- 0x0020d642, // n0x0519 c0x0000 (---------------) + I co
+- 0x00218d43, // n0x051a c0x0000 (---------------) + I gov
+- 0x00202282, // n0x051b c0x0000 (---------------) + I id
+- 0x00214843, // n0x051c c0x0000 (---------------) + I net
+- 0x0023e983, // n0x051d c0x0000 (---------------) + I org
+- 0x00201d83, // n0x051e c0x0000 (---------------) + I sch
+- 0x0032018f, // n0x051f c0x0000 (---------------) + I xn--mgba3a4f16a
+- 0x0032054e, // n0x0520 c0x0000 (---------------) + I xn--mgba3a4fra
+- 0x0020d643, // n0x0521 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0522 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0523 c0x0000 (---------------) + I gov
+- 0x00217543, // n0x0524 c0x0000 (---------------) + I int
+- 0x00214843, // n0x0525 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0526 c0x0000 (---------------) + I org
+- 0x002082c2, // n0x0527 c0x0000 (---------------) + I ag
+- 0x00340b09, // n0x0528 c0x0000 (---------------) + I agrigento
+- 0x00203982, // n0x0529 c0x0000 (---------------) + I al
+- 0x002a0b4b, // n0x052a c0x0000 (---------------) + I alessandria
+- 0x002b0cca, // n0x052b c0x0000 (---------------) + I alto-adige
+- 0x002366c9, // n0x052c c0x0000 (---------------) + I altoadige
+- 0x00200202, // n0x052d c0x0000 (---------------) + I an
+- 0x00341dc6, // n0x052e c0x0000 (---------------) + I ancona
+- 0x002930d5, // n0x052f c0x0000 (---------------) + I andria-barletta-trani
+- 0x002a0c95, // n0x0530 c0x0000 (---------------) + I andria-trani-barletta
+- 0x002943d3, // n0x0531 c0x0000 (---------------) + I andriabarlettatrani
+- 0x002a1213, // n0x0532 c0x0000 (---------------) + I andriatranibarletta
+- 0x0020aa02, // n0x0533 c0x0000 (---------------) + I ao
+- 0x002289c5, // n0x0534 c0x0000 (---------------) + I aosta
+- 0x002b0905, // n0x0535 c0x0000 (---------------) + I aoste
+- 0x002006c2, // n0x0536 c0x0000 (---------------) + I ap
+- 0x00271b82, // n0x0537 c0x0000 (---------------) + I aq
+- 0x002b8a86, // n0x0538 c0x0000 (---------------) + I aquila
+- 0x00200182, // n0x0539 c0x0000 (---------------) + I ar
+- 0x00335e46, // n0x053a c0x0000 (---------------) + I arezzo
+- 0x0020e68d, // n0x053b c0x0000 (---------------) + I ascoli-piceno
+- 0x0023594c, // n0x053c c0x0000 (---------------) + I ascolipiceno
+- 0x0021c4c4, // n0x053d c0x0000 (---------------) + I asti
+- 0x00201042, // n0x053e c0x0000 (---------------) + I at
+- 0x0020be82, // n0x053f c0x0000 (---------------) + I av
+- 0x002ddb48, // n0x0540 c0x0000 (---------------) + I avellino
+- 0x00201542, // n0x0541 c0x0000 (---------------) + I ba
+- 0x002ad706, // n0x0542 c0x0000 (---------------) + I balsan
+- 0x00218004, // n0x0543 c0x0000 (---------------) + I bari
+- 0x00293295, // n0x0544 c0x0000 (---------------) + I barletta-trani-andria
+- 0x00294553, // n0x0545 c0x0000 (---------------) + I barlettatraniandria
+- 0x00233547, // n0x0546 c0x0000 (---------------) + I belluno
+- 0x002594c9, // n0x0547 c0x0000 (---------------) + I benevento
+- 0x00236ec7, // n0x0548 c0x0000 (---------------) + I bergamo
+- 0x0033aa82, // n0x0549 c0x0000 (---------------) + I bg
+- 0x00205742, // n0x054a c0x0000 (---------------) + I bi
+- 0x002063c6, // n0x054b c0x0000 (---------------) + I biella
+- 0x00205582, // n0x054c c0x0000 (---------------) + I bl
+- 0x0003c708, // n0x054d c0x0000 (---------------) + blogspot
+- 0x00252802, // n0x054e c0x0000 (---------------) + I bn
+- 0x002033c2, // n0x054f c0x0000 (---------------) + I bo
+- 0x002f0e07, // n0x0550 c0x0000 (---------------) + I bologna
+- 0x00212547, // n0x0551 c0x0000 (---------------) + I bolzano
+- 0x00218fc5, // n0x0552 c0x0000 (---------------) + I bozen
+- 0x00201882, // n0x0553 c0x0000 (---------------) + I br
+- 0x0021a607, // n0x0554 c0x0000 (---------------) + I brescia
+- 0x0021a7c8, // n0x0555 c0x0000 (---------------) + I brindisi
+- 0x00205ec2, // n0x0556 c0x0000 (---------------) + I bs
+- 0x00214742, // n0x0557 c0x0000 (---------------) + I bt
+- 0x0022c342, // n0x0558 c0x0000 (---------------) + I bz
+- 0x00201002, // n0x0559 c0x0000 (---------------) + I ca
+- 0x002aff08, // n0x055a c0x0000 (---------------) + I cagliari
+- 0x00247bcd, // n0x055b c0x0000 (---------------) + I caltanissetta
+- 0x0025aa0f, // n0x055c c0x0000 (---------------) + I campidano-medio
+- 0x0025adce, // n0x055d c0x0000 (---------------) + I campidanomedio
+- 0x0020714a, // n0x055e c0x0000 (---------------) + I campobasso
+- 0x0029f951, // n0x055f c0x0000 (---------------) + I carbonia-iglesias
+- 0x0029fdd0, // n0x0560 c0x0000 (---------------) + I carboniaiglesias
+- 0x002b924d, // n0x0561 c0x0000 (---------------) + I carrara-massa
+- 0x002b958c, // n0x0562 c0x0000 (---------------) + I carraramassa
+- 0x00226ec7, // n0x0563 c0x0000 (---------------) + I caserta
+- 0x002ae487, // n0x0564 c0x0000 (---------------) + I catania
+- 0x00201009, // n0x0565 c0x0000 (---------------) + I catanzaro
+- 0x0021c5c2, // n0x0566 c0x0000 (---------------) + I cb
+- 0x00200502, // n0x0567 c0x0000 (---------------) + I ce
+- 0x00249d4c, // n0x0568 c0x0000 (---------------) + I cesena-forli
+- 0x0024a04b, // n0x0569 c0x0000 (---------------) + I cesenaforli
+- 0x002007c2, // n0x056a c0x0000 (---------------) + I ch
+- 0x002ab686, // n0x056b c0x0000 (---------------) + I chieti
+- 0x00208a02, // n0x056c c0x0000 (---------------) + I ci
+- 0x002278c2, // n0x056d c0x0000 (---------------) + I cl
+- 0x00231842, // n0x056e c0x0000 (---------------) + I cn
+- 0x0020d642, // n0x056f c0x0000 (---------------) + I co
+- 0x0020d644, // n0x0570 c0x0000 (---------------) + I como
+- 0x0023d1c7, // n0x0571 c0x0000 (---------------) + I cosenza
+- 0x00234182, // n0x0572 c0x0000 (---------------) + I cr
+- 0x0023fec7, // n0x0573 c0x0000 (---------------) + I cremona
+- 0x00240887, // n0x0574 c0x0000 (---------------) + I crotone
+- 0x00218982, // n0x0575 c0x0000 (---------------) + I cs
+- 0x00234a42, // n0x0576 c0x0000 (---------------) + I ct
+- 0x00240dc5, // n0x0577 c0x0000 (---------------) + I cuneo
+- 0x00206a42, // n0x0578 c0x0000 (---------------) + I cz
+- 0x0024b24e, // n0x0579 c0x0000 (---------------) + I dell-ogliastra
+- 0x0025540d, // n0x057a c0x0000 (---------------) + I dellogliastra
+- 0x002df843, // n0x057b c0x0000 (---------------) + I edu
+- 0x00204882, // n0x057c c0x0000 (---------------) + I en
+- 0x00258804, // n0x057d c0x0000 (---------------) + I enna
+- 0x0030a802, // n0x057e c0x0000 (---------------) + I fc
+- 0x0022bf82, // n0x057f c0x0000 (---------------) + I fe
+- 0x002cc045, // n0x0580 c0x0000 (---------------) + I fermo
+- 0x002d1947, // n0x0581 c0x0000 (---------------) + I ferrara
+- 0x00328542, // n0x0582 c0x0000 (---------------) + I fg
+- 0x0020bc82, // n0x0583 c0x0000 (---------------) + I fi
+- 0x00243347, // n0x0584 c0x0000 (---------------) + I firenze
+- 0x00246508, // n0x0585 c0x0000 (---------------) + I florence
+- 0x00330b82, // n0x0586 c0x0000 (---------------) + I fm
+- 0x00210e86, // n0x0587 c0x0000 (---------------) + I foggia
+- 0x00249bcc, // n0x0588 c0x0000 (---------------) + I forli-cesena
+- 0x00249f0b, // n0x0589 c0x0000 (---------------) + I forlicesena
+- 0x00207f82, // n0x058a c0x0000 (---------------) + I fr
+- 0x00267b09, // n0x058b c0x0000 (---------------) + I frosinone
+- 0x00204902, // n0x058c c0x0000 (---------------) + I ge
+- 0x0020f9c5, // n0x058d c0x0000 (---------------) + I genoa
+- 0x00215f86, // n0x058e c0x0000 (---------------) + I genova
+- 0x00200482, // n0x058f c0x0000 (---------------) + I go
+- 0x002bed47, // n0x0590 c0x0000 (---------------) + I gorizia
+- 0x00218d43, // n0x0591 c0x0000 (---------------) + I gov
+- 0x00200642, // n0x0592 c0x0000 (---------------) + I gr
+- 0x0024e048, // n0x0593 c0x0000 (---------------) + I grosseto
+- 0x0029fb91, // n0x0594 c0x0000 (---------------) + I iglesias-carbonia
+- 0x0029ffd0, // n0x0595 c0x0000 (---------------) + I iglesiascarbonia
+- 0x00202cc2, // n0x0596 c0x0000 (---------------) + I im
+- 0x00210787, // n0x0597 c0x0000 (---------------) + I imperia
+- 0x00200842, // n0x0598 c0x0000 (---------------) + I is
+- 0x002428c7, // n0x0599 c0x0000 (---------------) + I isernia
+- 0x002015c2, // n0x059a c0x0000 (---------------) + I kr
+- 0x00225009, // n0x059b c0x0000 (---------------) + I la-spezia
+- 0x002b8a47, // n0x059c c0x0000 (---------------) + I laquila
+- 0x00262588, // n0x059d c0x0000 (---------------) + I laspezia
+- 0x002249c6, // n0x059e c0x0000 (---------------) + I latina
+- 0x00240c02, // n0x059f c0x0000 (---------------) + I lc
+- 0x00205902, // n0x05a0 c0x0000 (---------------) + I le
+- 0x002067c5, // n0x05a1 c0x0000 (---------------) + I lecce
+- 0x00214a85, // n0x05a2 c0x0000 (---------------) + I lecco
+- 0x002039c2, // n0x05a3 c0x0000 (---------------) + I li
+- 0x002039c7, // n0x05a4 c0x0000 (---------------) + I livorno
+- 0x002055c2, // n0x05a5 c0x0000 (---------------) + I lo
+- 0x0024ac84, // n0x05a6 c0x0000 (---------------) + I lodi
+- 0x0020b7c2, // n0x05a7 c0x0000 (---------------) + I lt
+- 0x00204982, // n0x05a8 c0x0000 (---------------) + I lu
+- 0x00304285, // n0x05a9 c0x0000 (---------------) + I lucca
+- 0x002f9b48, // n0x05aa c0x0000 (---------------) + I macerata
+- 0x0028de07, // n0x05ab c0x0000 (---------------) + I mantova
+- 0x002b90cd, // n0x05ac c0x0000 (---------------) + I massa-carrara
+- 0x002b944c, // n0x05ad c0x0000 (---------------) + I massacarrara
+- 0x0029e206, // n0x05ae c0x0000 (---------------) + I matera
+- 0x00209382, // n0x05af c0x0000 (---------------) + I mb
+- 0x002d8982, // n0x05b0 c0x0000 (---------------) + I mc
+- 0x00202f82, // n0x05b1 c0x0000 (---------------) + I me
+- 0x0025a88f, // n0x05b2 c0x0000 (---------------) + I medio-campidano
+- 0x0025ac8e, // n0x05b3 c0x0000 (---------------) + I mediocampidano
+- 0x00204007, // n0x05b4 c0x0000 (---------------) + I messina
+- 0x00206702, // n0x05b5 c0x0000 (---------------) + I mi
+- 0x00311985, // n0x05b6 c0x0000 (---------------) + I milan
+- 0x00311986, // n0x05b7 c0x0000 (---------------) + I milano
+- 0x00201702, // n0x05b8 c0x0000 (---------------) + I mn
+- 0x00203d42, // n0x05b9 c0x0000 (---------------) + I mo
+- 0x00287146, // n0x05ba c0x0000 (---------------) + I modena
+- 0x002b60c5, // n0x05bb c0x0000 (---------------) + I monza
+- 0x002b60cd, // n0x05bc c0x0000 (---------------) + I monza-brianza
+- 0x002b6415, // n0x05bd c0x0000 (---------------) + I monza-e-della-brianza
+- 0x002b694c, // n0x05be c0x0000 (---------------) + I monzabrianza
+- 0x002b6c4d, // n0x05bf c0x0000 (---------------) + I monzaebrianza
+- 0x002b6f92, // n0x05c0 c0x0000 (---------------) + I monzaedellabrianza
+- 0x00201342, // n0x05c1 c0x0000 (---------------) + I ms
+- 0x0025c502, // n0x05c2 c0x0000 (---------------) + I mt
+- 0x00200982, // n0x05c3 c0x0000 (---------------) + I na
+- 0x002f8646, // n0x05c4 c0x0000 (---------------) + I naples
+- 0x00205306, // n0x05c5 c0x0000 (---------------) + I napoli
+- 0x002005c2, // n0x05c6 c0x0000 (---------------) + I no
+- 0x00216006, // n0x05c7 c0x0000 (---------------) + I novara
+- 0x00203642, // n0x05c8 c0x0000 (---------------) + I nu
+- 0x00276e45, // n0x05c9 c0x0000 (---------------) + I nuoro
+- 0x00200602, // n0x05ca c0x0000 (---------------) + I og
+- 0x0024b389, // n0x05cb c0x0000 (---------------) + I ogliastra
+- 0x0029844c, // n0x05cc c0x0000 (---------------) + I olbia-tempio
+- 0x0029878b, // n0x05cd c0x0000 (---------------) + I olbiatempio
+- 0x00200a82, // n0x05ce c0x0000 (---------------) + I or
+- 0x002c0088, // n0x05cf c0x0000 (---------------) + I oristano
+- 0x00200382, // n0x05d0 c0x0000 (---------------) + I ot
+- 0x0020d002, // n0x05d1 c0x0000 (---------------) + I pa
+- 0x002114c6, // n0x05d2 c0x0000 (---------------) + I padova
+- 0x003214c5, // n0x05d3 c0x0000 (---------------) + I padua
+- 0x002854c7, // n0x05d4 c0x0000 (---------------) + I palermo
+- 0x002f2845, // n0x05d5 c0x0000 (---------------) + I parma
+- 0x002c6dc5, // n0x05d6 c0x0000 (---------------) + I pavia
+- 0x002dca02, // n0x05d7 c0x0000 (---------------) + I pc
+- 0x003041c2, // n0x05d8 c0x0000 (---------------) + I pd
+- 0x00209242, // n0x05d9 c0x0000 (---------------) + I pe
+- 0x00271807, // n0x05da c0x0000 (---------------) + I perugia
+- 0x002d050d, // n0x05db c0x0000 (---------------) + I pesaro-urbino
+- 0x002d088c, // n0x05dc c0x0000 (---------------) + I pesarourbino
+- 0x002c6f07, // n0x05dd c0x0000 (---------------) + I pescara
+- 0x00224042, // n0x05de c0x0000 (---------------) + I pg
+- 0x0020e842, // n0x05df c0x0000 (---------------) + I pi
+- 0x00258d88, // n0x05e0 c0x0000 (---------------) + I piacenza
+- 0x0028e544, // n0x05e1 c0x0000 (---------------) + I pisa
+- 0x002ccac7, // n0x05e2 c0x0000 (---------------) + I pistoia
+- 0x002371c2, // n0x05e3 c0x0000 (---------------) + I pn
+- 0x00200a42, // n0x05e4 c0x0000 (---------------) + I po
+- 0x002cf209, // n0x05e5 c0x0000 (---------------) + I pordenone
+- 0x002338c7, // n0x05e6 c0x0000 (---------------) + I potenza
+- 0x00261ec2, // n0x05e7 c0x0000 (---------------) + I pr
+- 0x0031bc45, // n0x05e8 c0x0000 (---------------) + I prato
+- 0x00211c02, // n0x05e9 c0x0000 (---------------) + I pt
+- 0x00203f42, // n0x05ea c0x0000 (---------------) + I pu
+- 0x002d36c2, // n0x05eb c0x0000 (---------------) + I pv
+- 0x002d3982, // n0x05ec c0x0000 (---------------) + I pz
+- 0x002001c2, // n0x05ed c0x0000 (---------------) + I ra
+- 0x00230746, // n0x05ee c0x0000 (---------------) + I ragusa
+- 0x0030b487, // n0x05ef c0x0000 (---------------) + I ravenna
+- 0x00240d82, // n0x05f0 c0x0000 (---------------) + I rc
+- 0x00201602, // n0x05f1 c0x0000 (---------------) + I re
+- 0x002ba58f, // n0x05f2 c0x0000 (---------------) + I reggio-calabria
+- 0x00308dcd, // n0x05f3 c0x0000 (---------------) + I reggio-emilia
+- 0x0023d70e, // n0x05f4 c0x0000 (---------------) + I reggiocalabria
+- 0x00246d8c, // n0x05f5 c0x0000 (---------------) + I reggioemilia
+- 0x00203802, // n0x05f6 c0x0000 (---------------) + I rg
+- 0x00201d02, // n0x05f7 c0x0000 (---------------) + I ri
+- 0x00222f45, // n0x05f8 c0x0000 (---------------) + I rieti
+- 0x002d7986, // n0x05f9 c0x0000 (---------------) + I rimini
+- 0x00201302, // n0x05fa c0x0000 (---------------) + I rm
+- 0x00200082, // n0x05fb c0x0000 (---------------) + I rn
+- 0x00200ac2, // n0x05fc c0x0000 (---------------) + I ro
+- 0x0029bd84, // n0x05fd c0x0000 (---------------) + I roma
+- 0x00299244, // n0x05fe c0x0000 (---------------) + I rome
+- 0x0020ce86, // n0x05ff c0x0000 (---------------) + I rovigo
+- 0x00202442, // n0x0600 c0x0000 (---------------) + I sa
+- 0x002a7e47, // n0x0601 c0x0000 (---------------) + I salerno
+- 0x002d61c7, // n0x0602 c0x0000 (---------------) + I sassari
+- 0x002f47c6, // n0x0603 c0x0000 (---------------) + I savona
+- 0x002040c2, // n0x0604 c0x0000 (---------------) + I si
+- 0x002d2685, // n0x0605 c0x0000 (---------------) + I siena
+- 0x00265e88, // n0x0606 c0x0000 (---------------) + I siracusa
+- 0x00200882, // n0x0607 c0x0000 (---------------) + I so
+- 0x00331d87, // n0x0608 c0x0000 (---------------) + I sondrio
+- 0x002250c2, // n0x0609 c0x0000 (---------------) + I sp
+- 0x002ba542, // n0x060a c0x0000 (---------------) + I sr
+- 0x00204082, // n0x060b c0x0000 (---------------) + I ss
+- 0x00302a49, // n0x060c c0x0000 (---------------) + I suedtirol
+- 0x00206602, // n0x060d c0x0000 (---------------) + I sv
+- 0x00200142, // n0x060e c0x0000 (---------------) + I ta
+- 0x00200147, // n0x060f c0x0000 (---------------) + I taranto
+- 0x002013c2, // n0x0610 c0x0000 (---------------) + I te
+- 0x002985cc, // n0x0611 c0x0000 (---------------) + I tempio-olbia
+- 0x002988cb, // n0x0612 c0x0000 (---------------) + I tempioolbia
+- 0x0029e286, // n0x0613 c0x0000 (---------------) + I teramo
+- 0x002e4c85, // n0x0614 c0x0000 (---------------) + I terni
+- 0x00203602, // n0x0615 c0x0000 (---------------) + I tn
+- 0x00200282, // n0x0616 c0x0000 (---------------) + I to
+- 0x002a3ac6, // n0x0617 c0x0000 (---------------) + I torino
+- 0x0020c382, // n0x0618 c0x0000 (---------------) + I tp
+- 0x00208d82, // n0x0619 c0x0000 (---------------) + I tr
+- 0x00292f55, // n0x061a c0x0000 (---------------) + I trani-andria-barletta
+- 0x002a0e55, // n0x061b c0x0000 (---------------) + I trani-barletta-andria
+- 0x00294293, // n0x061c c0x0000 (---------------) + I traniandriabarletta
+- 0x002a1393, // n0x061d c0x0000 (---------------) + I tranibarlettaandria
+- 0x002d4407, // n0x061e c0x0000 (---------------) + I trapani
+- 0x00348f08, // n0x061f c0x0000 (---------------) + I trentino
+- 0x002b3bc6, // n0x0620 c0x0000 (---------------) + I trento
+- 0x002b8887, // n0x0621 c0x0000 (---------------) + I treviso
+- 0x002c1747, // n0x0622 c0x0000 (---------------) + I trieste
+- 0x00202a82, // n0x0623 c0x0000 (---------------) + I ts
+- 0x0029db45, // n0x0624 c0x0000 (---------------) + I turin
+- 0x00281802, // n0x0625 c0x0000 (---------------) + I tv
+- 0x00207b82, // n0x0626 c0x0000 (---------------) + I ud
+- 0x002bf6c5, // n0x0627 c0x0000 (---------------) + I udine
+- 0x002d06cd, // n0x0628 c0x0000 (---------------) + I urbino-pesaro
+- 0x002d0a0c, // n0x0629 c0x0000 (---------------) + I urbinopesaro
+- 0x00206f02, // n0x062a c0x0000 (---------------) + I va
+- 0x002cea46, // n0x062b c0x0000 (---------------) + I varese
+- 0x00224902, // n0x062c c0x0000 (---------------) + I vb
+- 0x0023f542, // n0x062d c0x0000 (---------------) + I vc
+- 0x00209c42, // n0x062e c0x0000 (---------------) + I ve
+- 0x0028d507, // n0x062f c0x0000 (---------------) + I venezia
+- 0x00211706, // n0x0630 c0x0000 (---------------) + I venice
+- 0x00221508, // n0x0631 c0x0000 (---------------) + I verbania
+- 0x002f8ac8, // n0x0632 c0x0000 (---------------) + I vercelli
+- 0x0027abc6, // n0x0633 c0x0000 (---------------) + I verona
+- 0x00209542, // n0x0634 c0x0000 (---------------) + I vi
+- 0x002eea8d, // n0x0635 c0x0000 (---------------) + I vibo-valentia
+- 0x002eedcc, // n0x0636 c0x0000 (---------------) + I vibovalentia
+- 0x00257447, // n0x0637 c0x0000 (---------------) + I vicenza
+- 0x002f0cc7, // n0x0638 c0x0000 (---------------) + I viterbo
+- 0x00212b82, // n0x0639 c0x0000 (---------------) + I vr
+- 0x00260182, // n0x063a c0x0000 (---------------) + I vs
+- 0x00237882, // n0x063b c0x0000 (---------------) + I vt
+- 0x00215382, // n0x063c c0x0000 (---------------) + I vv
+- 0x0020d642, // n0x063d c0x0000 (---------------) + I co
+- 0x00218d43, // n0x063e c0x0000 (---------------) + I gov
+- 0x00214843, // n0x063f c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0640 c0x0000 (---------------) + I org
+- 0x00201d83, // n0x0641 c0x0000 (---------------) + I sch
+- 0x0020d643, // n0x0642 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0643 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0644 c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x0645 c0x0000 (---------------) + I mil
+- 0x00202f04, // n0x0646 c0x0000 (---------------) + I name
+- 0x00214843, // n0x0647 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0648 c0x0000 (---------------) + I org
+- 0x00201d83, // n0x0649 c0x0000 (---------------) + I sch
+- 0x00206c42, // n0x064a c0x0000 (---------------) + I ac
+- 0x00201442, // n0x064b c0x0000 (---------------) + I ad
+- 0x1b27c385, // n0x064c c0x006c (n0x068a-n0x06bf) + I aichi
+- 0x1b61de05, // n0x064d c0x006d (n0x06bf-n0x06db) + I akita
+- 0x1bab1246, // n0x064e c0x006e (n0x06db-n0x06f1) + I aomori
+- 0x0003c708, // n0x064f c0x0000 (---------------) + blogspot
+- 0x1bea4405, // n0x0650 c0x006f (n0x06f1-n0x072b) + I chiba
+- 0x0020d642, // n0x0651 c0x0000 (---------------) + I co
+- 0x00207902, // n0x0652 c0x0000 (---------------) + I ed
+- 0x1c30ca45, // n0x0653 c0x0070 (n0x072b-n0x0741) + I ehime
+- 0x1c66cdc5, // n0x0654 c0x0071 (n0x0741-n0x0750) + I fukui
+- 0x1ca6d707, // n0x0655 c0x0072 (n0x0750-n0x078f) + I fukuoka
+- 0x1ce39289, // n0x0656 c0x0073 (n0x078f-n0x07c2) + I fukushima
+- 0x1d33dc04, // n0x0657 c0x0074 (n0x07c2-n0x07e8) + I gifu
+- 0x00200482, // n0x0658 c0x0000 (---------------) + I go
+- 0x00200642, // n0x0659 c0x0000 (---------------) + I gr
+- 0x1d65c945, // n0x065a c0x0075 (n0x07e8-n0x080c) + I gunma
+- 0x1da7ba09, // n0x065b c0x0076 (n0x080c-n0x0825) + I hiroshima
+- 0x1dee04c8, // n0x065c c0x0077 (n0x0825-n0x08b3) + I hokkaido
+- 0x1e2ca405, // n0x065d c0x0078 (n0x08b3-n0x08e1) + I hyogo
+- 0x1e727887, // n0x065e c0x0079 (n0x08e1-n0x0914) + I ibaraki
+- 0x1ea6c948, // n0x065f c0x007a (n0x0914-n0x0927) + I ishikawa
+- 0x1ee97345, // n0x0660 c0x007b (n0x0927-n0x094a) + I iwate
+- 0x1f208506, // n0x0661 c0x007c (n0x094a-n0x0959) + I kagawa
+- 0x1f6fd949, // n0x0662 c0x007d (n0x0959-n0x096d) + I kagoshima
+- 0x1fa6cbc8, // n0x0663 c0x007e (n0x096d-n0x098b) + I kanagawa
+- 0x1fea8c88, // n0x0664 c0x007f (n0x098b-n0x098c)* o I kawasaki
+- 0x2027e88a, // n0x0665 c0x0080 (n0x098c-n0x098d)* o I kitakyushu
+- 0x2064d504, // n0x0666 c0x0081 (n0x098d-n0x098e)* o I kobe
+- 0x20abef85, // n0x0667 c0x0082 (n0x098e-n0x09ad) + I kochi
+- 0x20e5d348, // n0x0668 c0x0083 (n0x09ad-n0x09c7) + I kumamoto
+- 0x21258145, // n0x0669 c0x0084 (n0x09c7-n0x09e6) + I kyoto
+- 0x00216382, // n0x066a c0x0000 (---------------) + I lg
+- 0x21606703, // n0x066b c0x0085 (n0x09e6-n0x0a04) + I mie
+- 0x21a8d8c6, // n0x066c c0x0086 (n0x0a04-n0x0a25) + I miyagi
+- 0x21e66b08, // n0x066d c0x0087 (n0x0a25-n0x0a40) + I miyazaki
+- 0x223082c6, // n0x066e c0x0088 (n0x0a40-n0x0a8b) + I nagano
+- 0x226f0f48, // n0x066f c0x0089 (n0x0a8b-n0x0aa1) + I nagasaki
+- 0x22a08286, // n0x0670 c0x008a (n0x0aa1-n0x0aa2)* o I nagoya
+- 0x22f208c4, // n0x0671 c0x008b (n0x0aa2-n0x0ac8) + I nara
+- 0x00203e82, // n0x0672 c0x0000 (---------------) + I ne
+- 0x2328db47, // n0x0673 c0x008c (n0x0ac8-n0x0aea) + I niigata
+- 0x236d8744, // n0x0674 c0x008d (n0x0aea-n0x0afd) + I oita
+- 0x23a69a87, // n0x0675 c0x008e (n0x0afd-n0x0b17) + I okayama
+- 0x23f08547, // n0x0676 c0x008f (n0x0b17-n0x0b41) + I okinawa
+- 0x00200a82, // n0x0677 c0x0000 (---------------) + I or
+- 0x24282e05, // n0x0678 c0x0090 (n0x0b41-n0x0b73) + I osaka
+- 0x24662184, // n0x0679 c0x0091 (n0x0b73-n0x0b8d) + I saga
+- 0x24aaab87, // n0x067a c0x0092 (n0x0b8d-n0x0bd2) + I saitama
+- 0x24e80387, // n0x067b c0x0093 (n0x0bd2-n0x0bd3)* o I sapporo
+- 0x25270206, // n0x067c c0x0094 (n0x0bd3-n0x0bd4)* o I sendai
+- 0x25650d45, // n0x067d c0x0095 (n0x0bd4-n0x0beb) + I shiga
+- 0x25a7dd07, // n0x067e c0x0096 (n0x0beb-n0x0c02) + I shimane
+- 0x25ee0188, // n0x067f c0x0097 (n0x0c02-n0x0c26) + I shizuoka
+- 0x2633dac7, // n0x0680 c0x0098 (n0x0c26-n0x0c45) + I tochigi
+- 0x266daac9, // n0x0681 c0x0099 (n0x0c45-n0x0c56) + I tokushima
+- 0x26a00285, // n0x0682 c0x009a (n0x0c56-n0x0c8f) + I tokyo
+- 0x26f1bd07, // n0x0683 c0x009b (n0x0c8f-n0x0c9c) + I tottori
+- 0x2725d4c6, // n0x0684 c0x009c (n0x0c9c-n0x0cb4) + I toyama
+- 0x27741b08, // n0x0685 c0x009d (n0x0cb4-n0x0cd1) + I wakayama
+- 0x27a6ee08, // n0x0686 c0x009e (n0x0cd1-n0x0cf3) + I yamagata
+- 0x27e735c9, // n0x0687 c0x009f (n0x0cf3-n0x0d03) + I yamaguchi
+- 0x28248c49, // n0x0688 c0x00a0 (n0x0d03-n0x0d1f) + I yamanashi
+- 0x286bc808, // n0x0689 c0x00a1 (n0x0d1f-n0x0d20)* o I yokohama
+- 0x002a5385, // n0x068a c0x0000 (---------------) + I aisai
+- 0x00204603, // n0x068b c0x0000 (---------------) + I ama
+- 0x0025bc84, // n0x068c c0x0000 (---------------) + I anjo
+- 0x00304605, // n0x068d c0x0000 (---------------) + I asuke
+- 0x002850c6, // n0x068e c0x0000 (---------------) + I chiryu
+- 0x0028a285, // n0x068f c0x0000 (---------------) + I chita
+- 0x00272e44, // n0x0690 c0x0000 (---------------) + I fuso
+- 0x002bec48, // n0x0691 c0x0000 (---------------) + I gamagori
+- 0x002aa685, // n0x0692 c0x0000 (---------------) + I handa
+- 0x0027d344, // n0x0693 c0x0000 (---------------) + I hazu
+- 0x0025eec7, // n0x0694 c0x0000 (---------------) + I hekinan
+- 0x00286a8a, // n0x0695 c0x0000 (---------------) + I higashiura
+- 0x0029994a, // n0x0696 c0x0000 (---------------) + I ichinomiya
+- 0x00275747, // n0x0697 c0x0000 (---------------) + I inazawa
+- 0x0021d7c7, // n0x0698 c0x0000 (---------------) + I inuyama
+- 0x00332787, // n0x0699 c0x0000 (---------------) + I isshiki
+- 0x00237cc7, // n0x069a c0x0000 (---------------) + I iwakura
+- 0x002dc8c5, // n0x069b c0x0000 (---------------) + I kanie
+- 0x00228286, // n0x069c c0x0000 (---------------) + I kariya
+- 0x00254107, // n0x069d c0x0000 (---------------) + I kasugai
+- 0x00256804, // n0x069e c0x0000 (---------------) + I kira
+- 0x0029b646, // n0x069f c0x0000 (---------------) + I kiyosu
+- 0x002b4fc6, // n0x06a0 c0x0000 (---------------) + I komaki
+- 0x002e69c5, // n0x06a1 c0x0000 (---------------) + I konan
+- 0x00324004, // n0x06a2 c0x0000 (---------------) + I kota
+- 0x0028ee06, // n0x06a3 c0x0000 (---------------) + I mihama
+- 0x00284707, // n0x06a4 c0x0000 (---------------) + I miyoshi
+- 0x002e8a48, // n0x06a5 c0x0000 (---------------) + I nagakute
+- 0x0022dc86, // n0x06a6 c0x0000 (---------------) + I nishio
+- 0x00238e87, // n0x06a7 c0x0000 (---------------) + I nisshin
+- 0x0027d183, // n0x06a8 c0x0000 (---------------) + I obu
+- 0x00277046, // n0x06a9 c0x0000 (---------------) + I oguchi
+- 0x00285245, // n0x06aa c0x0000 (---------------) + I oharu
+- 0x0026d807, // n0x06ab c0x0000 (---------------) + I okazaki
+- 0x002ad10a, // n0x06ac c0x0000 (---------------) + I owariasahi
+- 0x0024e144, // n0x06ad c0x0000 (---------------) + I seto
+- 0x00254688, // n0x06ae c0x0000 (---------------) + I shikatsu
+- 0x002da789, // n0x06af c0x0000 (---------------) + I shinshiro
+- 0x002de9c7, // n0x06b0 c0x0000 (---------------) + I shitara
+- 0x0022c986, // n0x06b1 c0x0000 (---------------) + I tahara
+- 0x0028dc88, // n0x06b2 c0x0000 (---------------) + I takahama
+- 0x00235fc9, // n0x06b3 c0x0000 (---------------) + I tobishima
+- 0x00252a44, // n0x06b4 c0x0000 (---------------) + I toei
+- 0x00260a44, // n0x06b5 c0x0000 (---------------) + I togo
+- 0x002f2085, // n0x06b6 c0x0000 (---------------) + I tokai
+- 0x002df088, // n0x06b7 c0x0000 (---------------) + I tokoname
+- 0x002b2fc7, // n0x06b8 c0x0000 (---------------) + I toyoake
+- 0x002d9989, // n0x06b9 c0x0000 (---------------) + I toyohashi
+- 0x0024a7c8, // n0x06ba c0x0000 (---------------) + I toyokawa
+- 0x00251786, // n0x06bb c0x0000 (---------------) + I toyone
+- 0x0025c546, // n0x06bc c0x0000 (---------------) + I toyota
+- 0x00280788, // n0x06bd c0x0000 (---------------) + I tsushima
+- 0x003136c6, // n0x06be c0x0000 (---------------) + I yatomi
+- 0x0021de05, // n0x06bf c0x0000 (---------------) + I akita
+- 0x002702c6, // n0x06c0 c0x0000 (---------------) + I daisen
+- 0x0026a148, // n0x06c1 c0x0000 (---------------) + I fujisato
+- 0x002ef9c6, // n0x06c2 c0x0000 (---------------) + I gojome
+- 0x002b440b, // n0x06c3 c0x0000 (---------------) + I hachirogata
+- 0x00278d86, // n0x06c4 c0x0000 (---------------) + I happou
+- 0x00281acd, // n0x06c5 c0x0000 (---------------) + I higashinaruse
+- 0x00224605, // n0x06c6 c0x0000 (---------------) + I honjo
+- 0x00291986, // n0x06c7 c0x0000 (---------------) + I honjyo
+- 0x00203045, // n0x06c8 c0x0000 (---------------) + I ikawa
+- 0x00243c09, // n0x06c9 c0x0000 (---------------) + I kamikoani
+- 0x00245947, // n0x06ca c0x0000 (---------------) + I kamioka
+- 0x002bd388, // n0x06cb c0x0000 (---------------) + I katagami
+- 0x0032fc86, // n0x06cc c0x0000 (---------------) + I kazuno
+- 0x00280f09, // n0x06cd c0x0000 (---------------) + I kitaakita
+- 0x00298fc6, // n0x06ce c0x0000 (---------------) + I kosaka
+- 0x002ad085, // n0x06cf c0x0000 (---------------) + I kyowa
+- 0x00235ec6, // n0x06d0 c0x0000 (---------------) + I misato
+- 0x00310b46, // n0x06d1 c0x0000 (---------------) + I mitane
+- 0x002b7e89, // n0x06d2 c0x0000 (---------------) + I moriyoshi
+- 0x00252846, // n0x06d3 c0x0000 (---------------) + I nikaho
+- 0x00259f47, // n0x06d4 c0x0000 (---------------) + I noshiro
+- 0x0025a445, // n0x06d5 c0x0000 (---------------) + I odate
+- 0x0020aa43, // n0x06d6 c0x0000 (---------------) + I oga
+- 0x002a7fc5, // n0x06d7 c0x0000 (---------------) + I ogata
+- 0x0025d207, // n0x06d8 c0x0000 (---------------) + I semboku
+- 0x002bd6c6, // n0x06d9 c0x0000 (---------------) + I yokote
+- 0x00224509, // n0x06da c0x0000 (---------------) + I yurihonjo
+- 0x002b1246, // n0x06db c0x0000 (---------------) + I aomori
+- 0x00260ac6, // n0x06dc c0x0000 (---------------) + I gonohe
+- 0x0025ed09, // n0x06dd c0x0000 (---------------) + I hachinohe
+- 0x0026fcc9, // n0x06de c0x0000 (---------------) + I hashikami
+- 0x0028b7c7, // n0x06df c0x0000 (---------------) + I hiranai
+- 0x00228608, // n0x06e0 c0x0000 (---------------) + I hirosaki
+- 0x002d5bc9, // n0x06e1 c0x0000 (---------------) + I itayanagi
+- 0x0026dcc8, // n0x06e2 c0x0000 (---------------) + I kuroishi
+- 0x002e42c6, // n0x06e3 c0x0000 (---------------) + I misawa
+- 0x002c4d45, // n0x06e4 c0x0000 (---------------) + I mutsu
+- 0x0021c18a, // n0x06e5 c0x0000 (---------------) + I nakadomari
+- 0x00260b46, // n0x06e6 c0x0000 (---------------) + I noheji
+- 0x002f1286, // n0x06e7 c0x0000 (---------------) + I oirase
+- 0x0028da85, // n0x06e8 c0x0000 (---------------) + I owani
+- 0x00246988, // n0x06e9 c0x0000 (---------------) + I rokunohe
+- 0x00263ac7, // n0x06ea c0x0000 (---------------) + I sannohe
+- 0x00347a0a, // n0x06eb c0x0000 (---------------) + I shichinohe
+- 0x00238f46, // n0x06ec c0x0000 (---------------) + I shingo
+- 0x0022b4c5, // n0x06ed c0x0000 (---------------) + I takko
+- 0x002c0c86, // n0x06ee c0x0000 (---------------) + I towada
+- 0x0029b2c7, // n0x06ef c0x0000 (---------------) + I tsugaru
+- 0x0022c847, // n0x06f0 c0x0000 (---------------) + I tsuruta
+- 0x002caa05, // n0x06f1 c0x0000 (---------------) + I abiko
+- 0x002ad245, // n0x06f2 c0x0000 (---------------) + I asahi
+- 0x002cd546, // n0x06f3 c0x0000 (---------------) + I chonan
+- 0x00302686, // n0x06f4 c0x0000 (---------------) + I chosei
+- 0x00305106, // n0x06f5 c0x0000 (---------------) + I choshi
+- 0x0022afc4, // n0x06f6 c0x0000 (---------------) + I chuo
+- 0x0026f249, // n0x06f7 c0x0000 (---------------) + I funabashi
+- 0x00273a06, // n0x06f8 c0x0000 (---------------) + I futtsu
+- 0x0024b60a, // n0x06f9 c0x0000 (---------------) + I hanamigawa
+- 0x0027c3c8, // n0x06fa c0x0000 (---------------) + I ichihara
+- 0x00235cc8, // n0x06fb c0x0000 (---------------) + I ichikawa
+- 0x0029994a, // n0x06fc c0x0000 (---------------) + I ichinomiya
+- 0x0033f2c5, // n0x06fd c0x0000 (---------------) + I inzai
+- 0x00284645, // n0x06fe c0x0000 (---------------) + I isumi
+- 0x0030c3c8, // n0x06ff c0x0000 (---------------) + I kamagaya
+- 0x00230c88, // n0x0700 c0x0000 (---------------) + I kamogawa
+- 0x00210387, // n0x0701 c0x0000 (---------------) + I kashiwa
+- 0x002df386, // n0x0702 c0x0000 (---------------) + I katori
+- 0x002f6488, // n0x0703 c0x0000 (---------------) + I katsuura
+- 0x002d4847, // n0x0704 c0x0000 (---------------) + I kimitsu
+- 0x0026ea08, // n0x0705 c0x0000 (---------------) + I kisarazu
+- 0x0029f086, // n0x0706 c0x0000 (---------------) + I kozaki
+- 0x00249088, // n0x0707 c0x0000 (---------------) + I kujukuri
+- 0x00217cc6, // n0x0708 c0x0000 (---------------) + I kyonan
+- 0x0021abc7, // n0x0709 c0x0000 (---------------) + I matsudo
+- 0x0025b286, // n0x070a c0x0000 (---------------) + I midori
+- 0x0028ee06, // n0x070b c0x0000 (---------------) + I mihama
+- 0x003137ca, // n0x070c c0x0000 (---------------) + I minamiboso
+- 0x002cc106, // n0x070d c0x0000 (---------------) + I mobara
+- 0x002c4d49, // n0x070e c0x0000 (---------------) + I mutsuzawa
+- 0x0030b386, // n0x070f c0x0000 (---------------) + I nagara
+- 0x0030b5ca, // n0x0710 c0x0000 (---------------) + I nagareyama
+- 0x003208c9, // n0x0711 c0x0000 (---------------) + I narashino
+- 0x00332406, // n0x0712 c0x0000 (---------------) + I narita
+- 0x0022a104, // n0x0713 c0x0000 (---------------) + I noda
+- 0x0020fa8d, // n0x0714 c0x0000 (---------------) + I oamishirasato
+- 0x00273847, // n0x0715 c0x0000 (---------------) + I omigawa
+- 0x002f98c6, // n0x0716 c0x0000 (---------------) + I onjuku
+- 0x002a8b45, // n0x0717 c0x0000 (---------------) + I otaki
+- 0x00299045, // n0x0718 c0x0000 (---------------) + I sakae
+- 0x00223586, // n0x0719 c0x0000 (---------------) + I sakura
+- 0x002dee09, // n0x071a c0x0000 (---------------) + I shimofusa
+- 0x002dc447, // n0x071b c0x0000 (---------------) + I shirako
+- 0x0026a746, // n0x071c c0x0000 (---------------) + I shiroi
+- 0x002de486, // n0x071d c0x0000 (---------------) + I shisui
+- 0x002bb6c9, // n0x071e c0x0000 (---------------) + I sodegaura
+- 0x00328a44, // n0x071f c0x0000 (---------------) + I sosa
+- 0x00295684, // n0x0720 c0x0000 (---------------) + I tako
+- 0x002550c8, // n0x0721 c0x0000 (---------------) + I tateyama
+- 0x00292286, // n0x0722 c0x0000 (---------------) + I togane
+- 0x002d9188, // n0x0723 c0x0000 (---------------) + I tohnosho
+- 0x002f8088, // n0x0724 c0x0000 (---------------) + I tomisato
+- 0x002f1c47, // n0x0725 c0x0000 (---------------) + I urayasu
+- 0x00250e89, // n0x0726 c0x0000 (---------------) + I yachimata
+- 0x00206c07, // n0x0727 c0x0000 (---------------) + I yachiyo
+- 0x002a42ca, // n0x0728 c0x0000 (---------------) + I yokaichiba
+- 0x002e388f, // n0x0729 c0x0000 (---------------) + I yokoshibahikari
+- 0x0026d1ca, // n0x072a c0x0000 (---------------) + I yotsukaido
+- 0x00222d45, // n0x072b c0x0000 (---------------) + I ainan
+- 0x0022eac5, // n0x072c c0x0000 (---------------) + I honai
+- 0x00253fc5, // n0x072d c0x0000 (---------------) + I ikata
+- 0x00217f47, // n0x072e c0x0000 (---------------) + I imabari
+- 0x00206d03, // n0x072f c0x0000 (---------------) + I iyo
+- 0x00228808, // n0x0730 c0x0000 (---------------) + I kamijima
+- 0x0020af06, // n0x0731 c0x0000 (---------------) + I kihoku
+- 0x0020b009, // n0x0732 c0x0000 (---------------) + I kumakogen
+- 0x002f1a46, // n0x0733 c0x0000 (---------------) + I masaki
+- 0x00272687, // n0x0734 c0x0000 (---------------) + I matsuno
+- 0x00280cc9, // n0x0735 c0x0000 (---------------) + I matsuyama
+- 0x002bd288, // n0x0736 c0x0000 (---------------) + I namikata
+- 0x00243dc7, // n0x0737 c0x0000 (---------------) + I niihama
+- 0x0022b083, // n0x0738 c0x0000 (---------------) + I ozu
+- 0x002a5405, // n0x0739 c0x0000 (---------------) + I saijo
+- 0x002e37c5, // n0x073a c0x0000 (---------------) + I seiyo
+- 0x003037cb, // n0x073b c0x0000 (---------------) + I shikokuchuo
+- 0x00258204, // n0x073c c0x0000 (---------------) + I tobe
+- 0x002da544, // n0x073d c0x0000 (---------------) + I toon
+- 0x00269146, // n0x073e c0x0000 (---------------) + I uchiko
+- 0x002a6207, // n0x073f c0x0000 (---------------) + I uwajima
+- 0x0032e30a, // n0x0740 c0x0000 (---------------) + I yawatahama
+- 0x00322cc7, // n0x0741 c0x0000 (---------------) + I echizen
+- 0x002b56c7, // n0x0742 c0x0000 (---------------) + I eiheiji
+- 0x0026cdc5, // n0x0743 c0x0000 (---------------) + I fukui
+- 0x00244305, // n0x0744 c0x0000 (---------------) + I ikeda
+- 0x00303589, // n0x0745 c0x0000 (---------------) + I katsuyama
+- 0x0028ee06, // n0x0746 c0x0000 (---------------) + I mihama
+- 0x00322b4d, // n0x0747 c0x0000 (---------------) + I minamiechizen
+- 0x00308905, // n0x0748 c0x0000 (---------------) + I obama
+- 0x00280503, // n0x0749 c0x0000 (---------------) + I ohi
+- 0x00216743, // n0x074a c0x0000 (---------------) + I ono
+- 0x00228cc5, // n0x074b c0x0000 (---------------) + I sabae
+- 0x00306385, // n0x074c c0x0000 (---------------) + I sakai
+- 0x0028dc88, // n0x074d c0x0000 (---------------) + I takahama
+- 0x00202a87, // n0x074e c0x0000 (---------------) + I tsuruga
+- 0x00295406, // n0x074f c0x0000 (---------------) + I wakasa
+- 0x00287786, // n0x0750 c0x0000 (---------------) + I ashiya
+- 0x002b9885, // n0x0751 c0x0000 (---------------) + I buzen
+- 0x002ef887, // n0x0752 c0x0000 (---------------) + I chikugo
+- 0x0021da47, // n0x0753 c0x0000 (---------------) + I chikuho
+- 0x00342187, // n0x0754 c0x0000 (---------------) + I chikujo
+- 0x0025850a, // n0x0755 c0x0000 (---------------) + I chikushino
+- 0x00277108, // n0x0756 c0x0000 (---------------) + I chikuzen
+- 0x0022afc4, // n0x0757 c0x0000 (---------------) + I chuo
+- 0x002a3047, // n0x0758 c0x0000 (---------------) + I dazaifu
+- 0x0026be87, // n0x0759 c0x0000 (---------------) + I fukuchi
+- 0x0032bc86, // n0x075a c0x0000 (---------------) + I hakata
+- 0x00256207, // n0x075b c0x0000 (---------------) + I higashi
+- 0x002a29c8, // n0x075c c0x0000 (---------------) + I hirokawa
+- 0x00248b48, // n0x075d c0x0000 (---------------) + I hisayama
+- 0x00243706, // n0x075e c0x0000 (---------------) + I iizuka
+- 0x00204108, // n0x075f c0x0000 (---------------) + I inatsuki
+- 0x002528c4, // n0x0760 c0x0000 (---------------) + I kaho
+- 0x00254106, // n0x0761 c0x0000 (---------------) + I kasuga
+- 0x0021c806, // n0x0762 c0x0000 (---------------) + I kasuya
+- 0x003329c6, // n0x0763 c0x0000 (---------------) + I kawara
+- 0x00299bc6, // n0x0764 c0x0000 (---------------) + I keisen
+- 0x0027ae04, // n0x0765 c0x0000 (---------------) + I koga
+- 0x00237d86, // n0x0766 c0x0000 (---------------) + I kurate
+- 0x002a7086, // n0x0767 c0x0000 (---------------) + I kurogi
+- 0x0027fe06, // n0x0768 c0x0000 (---------------) + I kurume
+- 0x00232146, // n0x0769 c0x0000 (---------------) + I minami
+- 0x00216606, // n0x076a c0x0000 (---------------) + I miyako
+- 0x002a2806, // n0x076b c0x0000 (---------------) + I miyama
+- 0x00295308, // n0x076c c0x0000 (---------------) + I miyawaka
+- 0x0029a588, // n0x076d c0x0000 (---------------) + I mizumaki
+- 0x002c2008, // n0x076e c0x0000 (---------------) + I munakata
+- 0x0028a488, // n0x076f c0x0000 (---------------) + I nakagawa
+- 0x0030c346, // n0x0770 c0x0000 (---------------) + I nakama
+- 0x0021a0c5, // n0x0771 c0x0000 (---------------) + I nishi
+- 0x002a7f86, // n0x0772 c0x0000 (---------------) + I nogata
+- 0x002ca485, // n0x0773 c0x0000 (---------------) + I ogori
+- 0x0024d307, // n0x0774 c0x0000 (---------------) + I okagaki
+- 0x0024a885, // n0x0775 c0x0000 (---------------) + I okawa
+- 0x002597c3, // n0x0776 c0x0000 (---------------) + I oki
+- 0x00210b85, // n0x0777 c0x0000 (---------------) + I omuta
+- 0x0024cd84, // n0x0778 c0x0000 (---------------) + I onga
+- 0x00216745, // n0x0779 c0x0000 (---------------) + I onojo
+- 0x00203d83, // n0x077a c0x0000 (---------------) + I oto
+- 0x00298e07, // n0x077b c0x0000 (---------------) + I saigawa
+- 0x002d3c88, // n0x077c c0x0000 (---------------) + I sasaguri
+- 0x002d8086, // n0x077d c0x0000 (---------------) + I shingu
+- 0x002db10d, // n0x077e c0x0000 (---------------) + I shinyoshitomi
+- 0x0022ea86, // n0x077f c0x0000 (---------------) + I shonai
+- 0x0027f245, // n0x0780 c0x0000 (---------------) + I soeda
+- 0x002e2583, // n0x0781 c0x0000 (---------------) + I sue
+- 0x002a51c9, // n0x0782 c0x0000 (---------------) + I tachiarai
+- 0x002b4a06, // n0x0783 c0x0000 (---------------) + I tagawa
+- 0x0027e2c6, // n0x0784 c0x0000 (---------------) + I takata
+- 0x0031f244, // n0x0785 c0x0000 (---------------) + I toho
+- 0x0026d147, // n0x0786 c0x0000 (---------------) + I toyotsu
+- 0x00222306, // n0x0787 c0x0000 (---------------) + I tsuiki
+- 0x0026e185, // n0x0788 c0x0000 (---------------) + I ukiha
+- 0x002158c3, // n0x0789 c0x0000 (---------------) + I umi
+- 0x0025d0c4, // n0x078a c0x0000 (---------------) + I usui
+- 0x0026c046, // n0x078b c0x0000 (---------------) + I yamada
+- 0x00228384, // n0x078c c0x0000 (---------------) + I yame
+- 0x0021c908, // n0x078d c0x0000 (---------------) + I yanagawa
+- 0x00219689, // n0x078e c0x0000 (---------------) + I yukuhashi
+- 0x00319809, // n0x078f c0x0000 (---------------) + I aizubange
+- 0x0028aaca, // n0x0790 c0x0000 (---------------) + I aizumisato
+- 0x002968cd, // n0x0791 c0x0000 (---------------) + I aizuwakamatsu
+- 0x002adb87, // n0x0792 c0x0000 (---------------) + I asakawa
+- 0x00307386, // n0x0793 c0x0000 (---------------) + I bandai
+- 0x002232c4, // n0x0794 c0x0000 (---------------) + I date
+- 0x00239289, // n0x0795 c0x0000 (---------------) + I fukushima
+- 0x00272848, // n0x0796 c0x0000 (---------------) + I furudono
+- 0x00273446, // n0x0797 c0x0000 (---------------) + I futaba
+- 0x00247606, // n0x0798 c0x0000 (---------------) + I hanawa
+- 0x00256207, // n0x0799 c0x0000 (---------------) + I higashi
+- 0x002dd686, // n0x079a c0x0000 (---------------) + I hirata
+- 0x00323146, // n0x079b c0x0000 (---------------) + I hirono
+- 0x00347786, // n0x079c c0x0000 (---------------) + I iitate
+- 0x003085ca, // n0x079d c0x0000 (---------------) + I inawashiro
+- 0x0026c948, // n0x079e c0x0000 (---------------) + I ishikawa
+- 0x00233e45, // n0x079f c0x0000 (---------------) + I iwaki
+- 0x00256649, // n0x07a0 c0x0000 (---------------) + I izumizaki
+- 0x0029d74a, // n0x07a1 c0x0000 (---------------) + I kagamiishi
+- 0x002db488, // n0x07a2 c0x0000 (---------------) + I kaneyama
+- 0x00283808, // n0x07a3 c0x0000 (---------------) + I kawamata
+- 0x0027e248, // n0x07a4 c0x0000 (---------------) + I kitakata
+- 0x0021de4c, // n0x07a5 c0x0000 (---------------) + I kitashiobara
+- 0x0031c605, // n0x07a6 c0x0000 (---------------) + I koori
+- 0x00287a08, // n0x07a7 c0x0000 (---------------) + I koriyama
+- 0x00311886, // n0x07a8 c0x0000 (---------------) + I kunimi
+- 0x0032ee46, // n0x07a9 c0x0000 (---------------) + I miharu
+- 0x002b1c07, // n0x07aa c0x0000 (---------------) + I mishima
+- 0x00322bc5, // n0x07ab c0x0000 (---------------) + I namie
+- 0x002cd605, // n0x07ac c0x0000 (---------------) + I nango
+- 0x003196c9, // n0x07ad c0x0000 (---------------) + I nishiaizu
+- 0x0021fb47, // n0x07ae c0x0000 (---------------) + I nishigo
+- 0x0020afc5, // n0x07af c0x0000 (---------------) + I okuma
+- 0x0022cfc7, // n0x07b0 c0x0000 (---------------) + I omotego
+- 0x00216743, // n0x07b1 c0x0000 (---------------) + I ono
+- 0x002b3505, // n0x07b2 c0x0000 (---------------) + I otama
+- 0x002461c8, // n0x07b3 c0x0000 (---------------) + I samegawa
+- 0x00327e07, // n0x07b4 c0x0000 (---------------) + I shimogo
+- 0x002836c9, // n0x07b5 c0x0000 (---------------) + I shirakawa
+- 0x002d92c5, // n0x07b6 c0x0000 (---------------) + I showa
+- 0x002e1dc4, // n0x07b7 c0x0000 (---------------) + I soma
+- 0x0028c348, // n0x07b8 c0x0000 (---------------) + I sukagawa
+- 0x00227007, // n0x07b9 c0x0000 (---------------) + I taishin
+- 0x00243f88, // n0x07ba c0x0000 (---------------) + I tamakawa
+- 0x00232d48, // n0x07bb c0x0000 (---------------) + I tanagura
+- 0x0020bfc5, // n0x07bc c0x0000 (---------------) + I tenei
+- 0x0022adc6, // n0x07bd c0x0000 (---------------) + I yabuki
+- 0x00245c86, // n0x07be c0x0000 (---------------) + I yamato
+- 0x00347589, // n0x07bf c0x0000 (---------------) + I yamatsuri
+- 0x002dbd47, // n0x07c0 c0x0000 (---------------) + I yanaizu
+- 0x00296046, // n0x07c1 c0x0000 (---------------) + I yugawa
+- 0x00211cc7, // n0x07c2 c0x0000 (---------------) + I anpachi
+- 0x00209283, // n0x07c3 c0x0000 (---------------) + I ena
+- 0x0033dc04, // n0x07c4 c0x0000 (---------------) + I gifu
+- 0x002205c5, // n0x07c5 c0x0000 (---------------) + I ginan
+- 0x00304404, // n0x07c6 c0x0000 (---------------) + I godo
+- 0x002cf804, // n0x07c7 c0x0000 (---------------) + I gujo
+- 0x002b4747, // n0x07c8 c0x0000 (---------------) + I hashima
+- 0x00200747, // n0x07c9 c0x0000 (---------------) + I hichiso
+- 0x0026a904, // n0x07ca c0x0000 (---------------) + I hida
+- 0x00283510, // n0x07cb c0x0000 (---------------) + I higashishirakawa
+- 0x00225d07, // n0x07cc c0x0000 (---------------) + I ibigawa
+- 0x00244305, // n0x07cd c0x0000 (---------------) + I ikeda
+- 0x0033de8c, // n0x07ce c0x0000 (---------------) + I kakamigahara
+- 0x00207784, // n0x07cf c0x0000 (---------------) + I kani
+- 0x002daf08, // n0x07d0 c0x0000 (---------------) + I kasahara
+- 0x0021aac9, // n0x07d1 c0x0000 (---------------) + I kasamatsu
+- 0x00203086, // n0x07d2 c0x0000 (---------------) + I kawaue
+- 0x00328b48, // n0x07d3 c0x0000 (---------------) + I kitagata
+- 0x0021fe44, // n0x07d4 c0x0000 (---------------) + I mino
+- 0x0021fe48, // n0x07d5 c0x0000 (---------------) + I minokamo
+- 0x002b2946, // n0x07d6 c0x0000 (---------------) + I mitake
+- 0x00231fc8, // n0x07d7 c0x0000 (---------------) + I mizunami
+- 0x00284cc6, // n0x07d8 c0x0000 (---------------) + I motosu
+- 0x002f48cb, // n0x07d9 c0x0000 (---------------) + I nakatsugawa
+- 0x0020aa45, // n0x07da c0x0000 (---------------) + I ogaki
+- 0x0029e848, // n0x07db c0x0000 (---------------) + I sakahogi
+- 0x00215e04, // n0x07dc c0x0000 (---------------) + I seki
+- 0x00219aca, // n0x07dd c0x0000 (---------------) + I sekigahara
+- 0x002836c9, // n0x07de c0x0000 (---------------) + I shirakawa
+- 0x0026ef86, // n0x07df c0x0000 (---------------) + I tajimi
+- 0x002e3dc8, // n0x07e0 c0x0000 (---------------) + I takayama
+- 0x0024e545, // n0x07e1 c0x0000 (---------------) + I tarui
+- 0x0034b644, // n0x07e2 c0x0000 (---------------) + I toki
+- 0x002dae06, // n0x07e3 c0x0000 (---------------) + I tomika
+- 0x002583c8, // n0x07e4 c0x0000 (---------------) + I wanouchi
+- 0x0026ee08, // n0x07e5 c0x0000 (---------------) + I yamagata
+- 0x002c90c6, // n0x07e6 c0x0000 (---------------) + I yaotsu
+- 0x00210ac4, // n0x07e7 c0x0000 (---------------) + I yoro
+- 0x0021c106, // n0x07e8 c0x0000 (---------------) + I annaka
+- 0x00206c87, // n0x07e9 c0x0000 (---------------) + I chiyoda
+- 0x00269987, // n0x07ea c0x0000 (---------------) + I fujioka
+- 0x0025620f, // n0x07eb c0x0000 (---------------) + I higashiagatsuma
+- 0x0032ea87, // n0x07ec c0x0000 (---------------) + I isesaki
+- 0x003324c7, // n0x07ed c0x0000 (---------------) + I itakura
+- 0x002e0305, // n0x07ee c0x0000 (---------------) + I kanna
+- 0x00255c85, // n0x07ef c0x0000 (---------------) + I kanra
+- 0x0028b489, // n0x07f0 c0x0000 (---------------) + I katashina
+- 0x002511c6, // n0x07f1 c0x0000 (---------------) + I kawaba
+- 0x0026df45, // n0x07f2 c0x0000 (---------------) + I kiryu
+- 0x0026ffc7, // n0x07f3 c0x0000 (---------------) + I kusatsu
+- 0x0025d708, // n0x07f4 c0x0000 (---------------) + I maebashi
+- 0x00272545, // n0x07f5 c0x0000 (---------------) + I meiwa
+- 0x0025b286, // n0x07f6 c0x0000 (---------------) + I midori
+- 0x00238a48, // n0x07f7 c0x0000 (---------------) + I minakami
+- 0x003082ca, // n0x07f8 c0x0000 (---------------) + I naganohara
+- 0x0020cbc8, // n0x07f9 c0x0000 (---------------) + I nakanojo
+- 0x002773c7, // n0x07fa c0x0000 (---------------) + I nanmoku
+- 0x002e3cc6, // n0x07fb c0x0000 (---------------) + I numata
+- 0x00256606, // n0x07fc c0x0000 (---------------) + I oizumi
+- 0x00214c03, // n0x07fd c0x0000 (---------------) + I ora
+- 0x00200383, // n0x07fe c0x0000 (---------------) + I ota
+- 0x003051c9, // n0x07ff c0x0000 (---------------) + I shibukawa
+- 0x002d5a49, // n0x0800 c0x0000 (---------------) + I shimonita
+- 0x002da9c6, // n0x0801 c0x0000 (---------------) + I shinto
+- 0x002d92c5, // n0x0802 c0x0000 (---------------) + I showa
+- 0x00204388, // n0x0803 c0x0000 (---------------) + I takasaki
+- 0x002e3dc8, // n0x0804 c0x0000 (---------------) + I takayama
+- 0x002c29c8, // n0x0805 c0x0000 (---------------) + I tamamura
+- 0x0034780b, // n0x0806 c0x0000 (---------------) + I tatebayashi
+- 0x002db347, // n0x0807 c0x0000 (---------------) + I tomioka
+- 0x00297549, // n0x0808 c0x0000 (---------------) + I tsukiyono
+- 0x00256488, // n0x0809 c0x0000 (---------------) + I tsumagoi
+- 0x0024fcc4, // n0x080a c0x0000 (---------------) + I ueno
+- 0x002b7f88, // n0x080b c0x0000 (---------------) + I yoshioka
+- 0x0027a189, // n0x080c c0x0000 (---------------) + I asaminami
+- 0x00307445, // n0x080d c0x0000 (---------------) + I daiwa
+- 0x00328607, // n0x080e c0x0000 (---------------) + I etajima
+- 0x0033dc85, // n0x080f c0x0000 (---------------) + I fuchu
+- 0x0026ed08, // n0x0810 c0x0000 (---------------) + I fukuyama
+- 0x0027c20b, // n0x0811 c0x0000 (---------------) + I hatsukaichi
+- 0x0027da50, // n0x0812 c0x0000 (---------------) + I higashihiroshima
+- 0x00291405, // n0x0813 c0x0000 (---------------) + I hongo
+- 0x00215d4c, // n0x0814 c0x0000 (---------------) + I jinsekikogen
+- 0x002955c5, // n0x0815 c0x0000 (---------------) + I kaita
+- 0x00225c83, // n0x0816 c0x0000 (---------------) + I kui
+- 0x002d9586, // n0x0817 c0x0000 (---------------) + I kumano
+- 0x002a6a84, // n0x0818 c0x0000 (---------------) + I kure
+- 0x00266106, // n0x0819 c0x0000 (---------------) + I mihara
+- 0x00284707, // n0x081a c0x0000 (---------------) + I miyoshi
+- 0x0020cbc4, // n0x081b c0x0000 (---------------) + I naka
+- 0x00299848, // n0x081c c0x0000 (---------------) + I onomichi
+- 0x002286cd, // n0x081d c0x0000 (---------------) + I osakikamijima
+- 0x002cb805, // n0x081e c0x0000 (---------------) + I otake
+- 0x00262fc4, // n0x081f c0x0000 (---------------) + I saka
+- 0x00222a84, // n0x0820 c0x0000 (---------------) + I sera
+- 0x00288989, // n0x0821 c0x0000 (---------------) + I seranishi
+- 0x002d82c8, // n0x0822 c0x0000 (---------------) + I shinichi
+- 0x0033f407, // n0x0823 c0x0000 (---------------) + I shobara
+- 0x002b29c8, // n0x0824 c0x0000 (---------------) + I takehara
+- 0x0026f308, // n0x0825 c0x0000 (---------------) + I abashiri
+- 0x0026aa45, // n0x0826 c0x0000 (---------------) + I abira
+- 0x00229947, // n0x0827 c0x0000 (---------------) + I aibetsu
+- 0x0026a9c7, // n0x0828 c0x0000 (---------------) + I akabira
+- 0x0020b2c7, // n0x0829 c0x0000 (---------------) + I akkeshi
+- 0x002ad249, // n0x082a c0x0000 (---------------) + I asahikawa
+- 0x002c3a09, // n0x082b c0x0000 (---------------) + I ashibetsu
+- 0x0023cec6, // n0x082c c0x0000 (---------------) + I ashoro
+- 0x002b9786, // n0x082d c0x0000 (---------------) + I assabu
+- 0x00256446, // n0x082e c0x0000 (---------------) + I atsuma
+- 0x00250385, // n0x082f c0x0000 (---------------) + I bibai
+- 0x002fb384, // n0x0830 c0x0000 (---------------) + I biei
+- 0x00208406, // n0x0831 c0x0000 (---------------) + I bifuka
+- 0x00209806, // n0x0832 c0x0000 (---------------) + I bihoro
+- 0x0026aa88, // n0x0833 c0x0000 (---------------) + I biratori
+- 0x0029af8b, // n0x0834 c0x0000 (---------------) + I chippubetsu
+- 0x00291e07, // n0x0835 c0x0000 (---------------) + I chitose
+- 0x002232c4, // n0x0836 c0x0000 (---------------) + I date
+- 0x00222246, // n0x0837 c0x0000 (---------------) + I ebetsu
+- 0x002e8387, // n0x0838 c0x0000 (---------------) + I embetsu
+- 0x00225905, // n0x0839 c0x0000 (---------------) + I eniwa
+- 0x0028bc85, // n0x083a c0x0000 (---------------) + I erimo
+- 0x0024c584, // n0x083b c0x0000 (---------------) + I esan
+- 0x002c3986, // n0x083c c0x0000 (---------------) + I esashi
+- 0x00208488, // n0x083d c0x0000 (---------------) + I fukagawa
+- 0x00239289, // n0x083e c0x0000 (---------------) + I fukushima
+- 0x002422c6, // n0x083f c0x0000 (---------------) + I furano
+- 0x002719c8, // n0x0840 c0x0000 (---------------) + I furubira
+- 0x0023e346, // n0x0841 c0x0000 (---------------) + I haboro
+- 0x0032f5c8, // n0x0842 c0x0000 (---------------) + I hakodate
+- 0x002dc04c, // n0x0843 c0x0000 (---------------) + I hamatonbetsu
+- 0x0026a906, // n0x0844 c0x0000 (---------------) + I hidaka
+- 0x0027ef0d, // n0x0845 c0x0000 (---------------) + I higashikagura
+- 0x0027f38b, // n0x0846 c0x0000 (---------------) + I higashikawa
+- 0x0025a005, // n0x0847 c0x0000 (---------------) + I hiroo
+- 0x0021db87, // n0x0848 c0x0000 (---------------) + I hokuryu
+- 0x00252946, // n0x0849 c0x0000 (---------------) + I hokuto
+- 0x002af048, // n0x084a c0x0000 (---------------) + I honbetsu
+- 0x0023cf49, // n0x084b c0x0000 (---------------) + I horokanai
+- 0x002439c8, // n0x084c c0x0000 (---------------) + I horonobe
+- 0x00244305, // n0x084d c0x0000 (---------------) + I ikeda
+- 0x00328707, // n0x084e c0x0000 (---------------) + I imakane
+- 0x0029d8c8, // n0x084f c0x0000 (---------------) + I ishikari
+- 0x002bbfc9, // n0x0850 c0x0000 (---------------) + I iwamizawa
+- 0x00268206, // n0x0851 c0x0000 (---------------) + I iwanai
+- 0x0027798a, // n0x0852 c0x0000 (---------------) + I kamifurano
+- 0x002aedc8, // n0x0853 c0x0000 (---------------) + I kamikawa
+- 0x0024380b, // n0x0854 c0x0000 (---------------) + I kamishihoro
+- 0x002b810c, // n0x0855 c0x0000 (---------------) + I kamisunagawa
+- 0x0021ff48, // n0x0856 c0x0000 (---------------) + I kamoenai
+- 0x0026b586, // n0x0857 c0x0000 (---------------) + I kayabe
+- 0x00342048, // n0x0858 c0x0000 (---------------) + I kembuchi
+- 0x002f10c7, // n0x0859 c0x0000 (---------------) + I kikonai
+- 0x0022c6c9, // n0x085a c0x0000 (---------------) + I kimobetsu
+- 0x0027b90d, // n0x085b c0x0000 (---------------) + I kitahiroshima
+- 0x0027f7c6, // n0x085c c0x0000 (---------------) + I kitami
+- 0x002d9008, // n0x085d c0x0000 (---------------) + I kiyosato
+- 0x0029a449, // n0x085e c0x0000 (---------------) + I koshimizu
+- 0x002a6048, // n0x085f c0x0000 (---------------) + I kunneppu
+- 0x00249188, // n0x0860 c0x0000 (---------------) + I kuriyama
+- 0x002a784c, // n0x0861 c0x0000 (---------------) + I kuromatsunai
+- 0x002a9747, // n0x0862 c0x0000 (---------------) + I kushiro
+- 0x002aa587, // n0x0863 c0x0000 (---------------) + I kutchan
+- 0x002ad085, // n0x0864 c0x0000 (---------------) + I kyowa
+- 0x00244207, // n0x0865 c0x0000 (---------------) + I mashike
+- 0x0025d5c8, // n0x0866 c0x0000 (---------------) + I matsumae
+- 0x002dae86, // n0x0867 c0x0000 (---------------) + I mikasa
+- 0x0024214c, // n0x0868 c0x0000 (---------------) + I minamifurano
+- 0x002b3908, // n0x0869 c0x0000 (---------------) + I mombetsu
+- 0x002b9b48, // n0x086a c0x0000 (---------------) + I moseushi
+- 0x002b0346, // n0x086b c0x0000 (---------------) + I mukawa
+- 0x00250b07, // n0x086c c0x0000 (---------------) + I muroran
+- 0x0023d0c4, // n0x086d c0x0000 (---------------) + I naie
+- 0x0028a488, // n0x086e c0x0000 (---------------) + I nakagawa
+- 0x002c618c, // n0x086f c0x0000 (---------------) + I nakasatsunai
+- 0x002d274c, // n0x0870 c0x0000 (---------------) + I nakatombetsu
+- 0x00222dc5, // n0x0871 c0x0000 (---------------) + I nanae
+- 0x00200987, // n0x0872 c0x0000 (---------------) + I nanporo
+- 0x00210a46, // n0x0873 c0x0000 (---------------) + I nayoro
+- 0x00250a86, // n0x0874 c0x0000 (---------------) + I nemuro
+- 0x0028e8c8, // n0x0875 c0x0000 (---------------) + I niikappu
+- 0x0020ae84, // n0x0876 c0x0000 (---------------) + I niki
+- 0x0022dc8b, // n0x0877 c0x0000 (---------------) + I nishiokoppe
+- 0x0034164b, // n0x0878 c0x0000 (---------------) + I noboribetsu
+- 0x002e3cc6, // n0x0879 c0x0000 (---------------) + I numata
+- 0x00228547, // n0x087a c0x0000 (---------------) + I obihiro
+- 0x003273c5, // n0x087b c0x0000 (---------------) + I obira
+- 0x00260985, // n0x087c c0x0000 (---------------) + I oketo
+- 0x0022ddc6, // n0x087d c0x0000 (---------------) + I okoppe
+- 0x0024e505, // n0x087e c0x0000 (---------------) + I otaru
+- 0x002581c5, // n0x087f c0x0000 (---------------) + I otobe
+- 0x002a3f47, // n0x0880 c0x0000 (---------------) + I otofuke
+- 0x00203d89, // n0x0881 c0x0000 (---------------) + I otoineppu
+- 0x00278e84, // n0x0882 c0x0000 (---------------) + I oumu
+- 0x00289585, // n0x0883 c0x0000 (---------------) + I ozora
+- 0x002cb445, // n0x0884 c0x0000 (---------------) + I pippu
+- 0x00250c08, // n0x0885 c0x0000 (---------------) + I rankoshi
+- 0x00299685, // n0x0886 c0x0000 (---------------) + I rebun
+- 0x00271f89, // n0x0887 c0x0000 (---------------) + I rikubetsu
+- 0x002db8c7, // n0x0888 c0x0000 (---------------) + I rishiri
+- 0x002db8cb, // n0x0889 c0x0000 (---------------) + I rishirifuji
+- 0x002d0c06, // n0x088a c0x0000 (---------------) + I saroma
+- 0x00295049, // n0x088b c0x0000 (---------------) + I sarufutsu
+- 0x00323f48, // n0x088c c0x0000 (---------------) + I shakotan
+- 0x00342385, // n0x088d c0x0000 (---------------) + I shari
+- 0x0020b3c8, // n0x088e c0x0000 (---------------) + I shibecha
+- 0x002c3a48, // n0x088f c0x0000 (---------------) + I shibetsu
+- 0x002c0947, // n0x0890 c0x0000 (---------------) + I shikabe
+- 0x0025d847, // n0x0891 c0x0000 (---------------) + I shikaoi
+- 0x002b47c9, // n0x0892 c0x0000 (---------------) + I shimamaki
+- 0x00231f07, // n0x0893 c0x0000 (---------------) + I shimizu
+- 0x002d54c9, // n0x0894 c0x0000 (---------------) + I shimokawa
+- 0x002d9ecc, // n0x0895 c0x0000 (---------------) + I shinshinotsu
+- 0x002da9c8, // n0x0896 c0x0000 (---------------) + I shintoku
+- 0x002dc709, // n0x0897 c0x0000 (---------------) + I shiranuka
+- 0x002dcac7, // n0x0898 c0x0000 (---------------) + I shiraoi
+- 0x0026f3c9, // n0x0899 c0x0000 (---------------) + I shiriuchi
+- 0x00207347, // n0x089a c0x0000 (---------------) + I sobetsu
+- 0x002b8208, // n0x089b c0x0000 (---------------) + I sunagawa
+- 0x00226b05, // n0x089c c0x0000 (---------------) + I taiki
+- 0x00254086, // n0x089d c0x0000 (---------------) + I takasu
+- 0x002a8b88, // n0x089e c0x0000 (---------------) + I takikawa
+- 0x002f7408, // n0x089f c0x0000 (---------------) + I takinoue
+- 0x0029d609, // n0x08a0 c0x0000 (---------------) + I teshikaga
+- 0x00258207, // n0x08a1 c0x0000 (---------------) + I tobetsu
+- 0x0028acc5, // n0x08a2 c0x0000 (---------------) + I tohma
+- 0x0025e4c9, // n0x08a3 c0x0000 (---------------) + I tomakomai
+- 0x0024f546, // n0x08a4 c0x0000 (---------------) + I tomari
+- 0x002457c4, // n0x08a5 c0x0000 (---------------) + I toya
+- 0x002457c6, // n0x08a6 c0x0000 (---------------) + I toyako
+- 0x00266988, // n0x08a7 c0x0000 (---------------) + I toyotomi
+- 0x0026e6c7, // n0x08a8 c0x0000 (---------------) + I toyoura
+- 0x0029b188, // n0x08a9 c0x0000 (---------------) + I tsubetsu
+- 0x002041c9, // n0x08aa c0x0000 (---------------) + I tsukigata
+- 0x0022e6c7, // n0x08ab c0x0000 (---------------) + I urakawa
+- 0x00286c46, // n0x08ac c0x0000 (---------------) + I urausu
+- 0x0021dc44, // n0x08ad c0x0000 (---------------) + I uryu
+- 0x00210c09, // n0x08ae c0x0000 (---------------) + I utashinai
+- 0x002297c8, // n0x08af c0x0000 (---------------) + I wakkanai
+- 0x002b0207, // n0x08b0 c0x0000 (---------------) + I wassamu
+- 0x0028c646, // n0x08b1 c0x0000 (---------------) + I yakumo
+- 0x00291a86, // n0x08b2 c0x0000 (---------------) + I yoichi
+- 0x002f1204, // n0x08b3 c0x0000 (---------------) + I aioi
+- 0x002cb986, // n0x08b4 c0x0000 (---------------) + I akashi
+- 0x0020b0c3, // n0x08b5 c0x0000 (---------------) + I ako
+- 0x0022fa09, // n0x08b6 c0x0000 (---------------) + I amagasaki
+- 0x0020aa06, // n0x08b7 c0x0000 (---------------) + I aogaki
+- 0x002a73c5, // n0x08b8 c0x0000 (---------------) + I asago
+- 0x00287786, // n0x08b9 c0x0000 (---------------) + I ashiya
+- 0x002322c5, // n0x08ba c0x0000 (---------------) + I awaji
+- 0x0026e888, // n0x08bb c0x0000 (---------------) + I fukusaki
+- 0x0021fc87, // n0x08bc c0x0000 (---------------) + I goshiki
+- 0x00237b06, // n0x08bd c0x0000 (---------------) + I harima
+- 0x0030ca86, // n0x08be c0x0000 (---------------) + I himeji
+- 0x00235cc8, // n0x08bf c0x0000 (---------------) + I ichikawa
+- 0x0028b607, // n0x08c0 c0x0000 (---------------) + I inagawa
+- 0x0027f805, // n0x08c1 c0x0000 (---------------) + I itami
+- 0x00287c88, // n0x08c2 c0x0000 (---------------) + I kakogawa
+- 0x00276448, // n0x08c3 c0x0000 (---------------) + I kamigori
+- 0x002aedc8, // n0x08c4 c0x0000 (---------------) + I kamikawa
+- 0x00295485, // n0x08c5 c0x0000 (---------------) + I kasai
+- 0x00254106, // n0x08c6 c0x0000 (---------------) + I kasuga
+- 0x003195c9, // n0x08c7 c0x0000 (---------------) + I kawanishi
+- 0x00245b04, // n0x08c8 c0x0000 (---------------) + I miki
+- 0x0023214b, // n0x08c9 c0x0000 (---------------) + I minamiawaji
+- 0x00322e4b, // n0x08ca c0x0000 (---------------) + I nishinomiya
+- 0x00233d49, // n0x08cb c0x0000 (---------------) + I nishiwaki
+- 0x00216743, // n0x08cc c0x0000 (---------------) + I ono
+- 0x0024aa85, // n0x08cd c0x0000 (---------------) + I sanda
+- 0x0025c246, // n0x08ce c0x0000 (---------------) + I sannan
+- 0x002b7c88, // n0x08cf c0x0000 (---------------) + I sasayama
+- 0x0029cf84, // n0x08d0 c0x0000 (---------------) + I sayo
+- 0x002d8086, // n0x08d1 c0x0000 (---------------) + I shingu
+- 0x00258649, // n0x08d2 c0x0000 (---------------) + I shinonsen
+- 0x002de205, // n0x08d3 c0x0000 (---------------) + I shiso
+- 0x002a3e86, // n0x08d4 c0x0000 (---------------) + I sumoto
+- 0x00227006, // n0x08d5 c0x0000 (---------------) + I taishi
+- 0x00204384, // n0x08d6 c0x0000 (---------------) + I taka
+- 0x0034720a, // n0x08d7 c0x0000 (---------------) + I takarazuka
+- 0x002a7308, // n0x08d8 c0x0000 (---------------) + I takasago
+- 0x002f7406, // n0x08d9 c0x0000 (---------------) + I takino
+- 0x00289385, // n0x08da c0x0000 (---------------) + I tamba
+- 0x00261847, // n0x08db c0x0000 (---------------) + I tatsuno
+- 0x00255b47, // n0x08dc c0x0000 (---------------) + I toyooka
+- 0x0022adc4, // n0x08dd c0x0000 (---------------) + I yabu
+- 0x00323087, // n0x08de c0x0000 (---------------) + I yashiro
+- 0x0024a844, // n0x08df c0x0000 (---------------) + I yoka
+- 0x0024a846, // n0x08e0 c0x0000 (---------------) + I yokawa
+- 0x0020fac3, // n0x08e1 c0x0000 (---------------) + I ami
+- 0x002ad245, // n0x08e2 c0x0000 (---------------) + I asahi
+- 0x00324ac5, // n0x08e3 c0x0000 (---------------) + I bando
+- 0x002bf008, // n0x08e4 c0x0000 (---------------) + I chikusei
+- 0x002a3205, // n0x08e5 c0x0000 (---------------) + I daigo
+- 0x0026a649, // n0x08e6 c0x0000 (---------------) + I fujishiro
+- 0x0028a2c7, // n0x08e7 c0x0000 (---------------) + I hitachi
+- 0x0028a2cb, // n0x08e8 c0x0000 (---------------) + I hitachinaka
+- 0x0028d6cc, // n0x08e9 c0x0000 (---------------) + I hitachiomiya
+- 0x0028e10a, // n0x08ea c0x0000 (---------------) + I hitachiota
+- 0x00327887, // n0x08eb c0x0000 (---------------) + I ibaraki
+- 0x00203303, // n0x08ec c0x0000 (---------------) + I ina
+- 0x002d8e88, // n0x08ed c0x0000 (---------------) + I inashiki
+- 0x00295645, // n0x08ee c0x0000 (---------------) + I itako
+- 0x002725c5, // n0x08ef c0x0000 (---------------) + I iwama
+- 0x0020cd44, // n0x08f0 c0x0000 (---------------) + I joso
+- 0x002b8106, // n0x08f1 c0x0000 (---------------) + I kamisu
+- 0x0021aac6, // n0x08f2 c0x0000 (---------------) + I kasama
+- 0x002cb9c7, // n0x08f3 c0x0000 (---------------) + I kashima
+- 0x0021b60b, // n0x08f4 c0x0000 (---------------) + I kasumigaura
+- 0x0027ae04, // n0x08f5 c0x0000 (---------------) + I koga
+- 0x002e0444, // n0x08f6 c0x0000 (---------------) + I miho
+- 0x002b2bc4, // n0x08f7 c0x0000 (---------------) + I mito
+- 0x002b7606, // n0x08f8 c0x0000 (---------------) + I moriya
+- 0x0020cbc4, // n0x08f9 c0x0000 (---------------) + I naka
+- 0x002df188, // n0x08fa c0x0000 (---------------) + I namegata
+- 0x003018c5, // n0x08fb c0x0000 (---------------) + I oarai
+- 0x00230d45, // n0x08fc c0x0000 (---------------) + I ogawa
+- 0x002c2907, // n0x08fd c0x0000 (---------------) + I omitama
+- 0x0021dc89, // n0x08fe c0x0000 (---------------) + I ryugasaki
+- 0x00306385, // n0x08ff c0x0000 (---------------) + I sakai
+- 0x0022358a, // n0x0900 c0x0000 (---------------) + I sakuragawa
+- 0x0025a349, // n0x0901 c0x0000 (---------------) + I shimodate
+- 0x002d7e0a, // n0x0902 c0x0000 (---------------) + I shimotsuma
+- 0x00308709, // n0x0903 c0x0000 (---------------) + I shirosato
+- 0x002e5184, // n0x0904 c0x0000 (---------------) + I sowa
+- 0x002de545, // n0x0905 c0x0000 (---------------) + I suifu
+- 0x002dd788, // n0x0906 c0x0000 (---------------) + I takahagi
+- 0x002aac4b, // n0x0907 c0x0000 (---------------) + I tamatsukuri
+- 0x002f2085, // n0x0908 c0x0000 (---------------) + I tokai
+- 0x002593c6, // n0x0909 c0x0000 (---------------) + I tomobe
+- 0x00240944, // n0x090a c0x0000 (---------------) + I tone
+- 0x0026ab86, // n0x090b c0x0000 (---------------) + I toride
+- 0x0022e549, // n0x090c c0x0000 (---------------) + I tsuchiura
+- 0x002e8487, // n0x090d c0x0000 (---------------) + I tsukuba
+- 0x002b1408, // n0x090e c0x0000 (---------------) + I uchihara
+- 0x00296c46, // n0x090f c0x0000 (---------------) + I ushiku
+- 0x00206c07, // n0x0910 c0x0000 (---------------) + I yachiyo
+- 0x0026ee08, // n0x0911 c0x0000 (---------------) + I yamagata
+- 0x00326146, // n0x0912 c0x0000 (---------------) + I yawara
+- 0x002afc44, // n0x0913 c0x0000 (---------------) + I yuki
+- 0x0023ed87, // n0x0914 c0x0000 (---------------) + I anamizu
+- 0x00274685, // n0x0915 c0x0000 (---------------) + I hakui
+- 0x00274a47, // n0x0916 c0x0000 (---------------) + I hakusan
+- 0x00208504, // n0x0917 c0x0000 (---------------) + I kaga
+- 0x002528c6, // n0x0918 c0x0000 (---------------) + I kahoku
+- 0x00261b88, // n0x0919 c0x0000 (---------------) + I kanazawa
+- 0x0027f548, // n0x091a c0x0000 (---------------) + I kawakita
+- 0x002b8e47, // n0x091b c0x0000 (---------------) + I komatsu
+- 0x0020d108, // n0x091c c0x0000 (---------------) + I nakanoto
+- 0x00217d85, // n0x091d c0x0000 (---------------) + I nanao
+- 0x00216584, // n0x091e c0x0000 (---------------) + I nomi
+- 0x00235bc8, // n0x091f c0x0000 (---------------) + I nonoichi
+- 0x0020d204, // n0x0920 c0x0000 (---------------) + I noto
+- 0x00253f45, // n0x0921 c0x0000 (---------------) + I shika
+- 0x002eae04, // n0x0922 c0x0000 (---------------) + I suzu
+- 0x002d4947, // n0x0923 c0x0000 (---------------) + I tsubata
+- 0x002af187, // n0x0924 c0x0000 (---------------) + I tsurugi
+- 0x0026f508, // n0x0925 c0x0000 (---------------) + I uchinada
+- 0x00244106, // n0x0926 c0x0000 (---------------) + I wajima
+- 0x002a3185, // n0x0927 c0x0000 (---------------) + I fudai
+- 0x0026a448, // n0x0928 c0x0000 (---------------) + I fujisawa
+- 0x00273cc8, // n0x0929 c0x0000 (---------------) + I hanamaki
+- 0x0028aa09, // n0x092a c0x0000 (---------------) + I hiraizumi
+- 0x00323146, // n0x092b c0x0000 (---------------) + I hirono
+- 0x00347a88, // n0x092c c0x0000 (---------------) + I ichinohe
+- 0x0021994a, // n0x092d c0x0000 (---------------) + I ichinoseki
+- 0x00225988, // n0x092e c0x0000 (---------------) + I iwaizumi
+- 0x00297345, // n0x092f c0x0000 (---------------) + I iwate
+- 0x00262c06, // n0x0930 c0x0000 (---------------) + I joboji
+- 0x0025a208, // n0x0931 c0x0000 (---------------) + I kamaishi
+- 0x003287ca, // n0x0932 c0x0000 (---------------) + I kanegasaki
+- 0x0030be87, // n0x0933 c0x0000 (---------------) + I karumai
+- 0x0026e445, // n0x0934 c0x0000 (---------------) + I kawai
+- 0x00347d88, // n0x0935 c0x0000 (---------------) + I kitakami
+- 0x00270784, // n0x0936 c0x0000 (---------------) + I kuji
+- 0x00246a06, // n0x0937 c0x0000 (---------------) + I kunohe
+- 0x002ab308, // n0x0938 c0x0000 (---------------) + I kuzumaki
+- 0x00216606, // n0x0939 c0x0000 (---------------) + I miyako
+- 0x00215908, // n0x093a c0x0000 (---------------) + I mizusawa
+- 0x0027e4c7, // n0x093b c0x0000 (---------------) + I morioka
+- 0x002f3446, // n0x093c c0x0000 (---------------) + I ninohe
+- 0x0022a104, // n0x093d c0x0000 (---------------) + I noda
+- 0x002bff07, // n0x093e c0x0000 (---------------) + I ofunato
+- 0x0029ac44, // n0x093f c0x0000 (---------------) + I oshu
+- 0x0022e507, // n0x0940 c0x0000 (---------------) + I otsuchi
+- 0x002b054d, // n0x0941 c0x0000 (---------------) + I rikuzentakata
+- 0x00210405, // n0x0942 c0x0000 (---------------) + I shiwa
+- 0x002dec0b, // n0x0943 c0x0000 (---------------) + I shizukuishi
+- 0x0029b746, // n0x0944 c0x0000 (---------------) + I sumita
+- 0x00344688, // n0x0945 c0x0000 (---------------) + I takizawa
+- 0x0032bd88, // n0x0946 c0x0000 (---------------) + I tanohata
+- 0x0022e984, // n0x0947 c0x0000 (---------------) + I tono
+- 0x002e0806, // n0x0948 c0x0000 (---------------) + I yahaba
+- 0x0026c046, // n0x0949 c0x0000 (---------------) + I yamada
+- 0x00227587, // n0x094a c0x0000 (---------------) + I ayagawa
+- 0x0027ebcd, // n0x094b c0x0000 (---------------) + I higashikagawa
+- 0x002c92c7, // n0x094c c0x0000 (---------------) + I kanonji
+- 0x0029c188, // n0x094d c0x0000 (---------------) + I kotohira
+- 0x00259e85, // n0x094e c0x0000 (---------------) + I manno
+- 0x0027bbc8, // n0x094f c0x0000 (---------------) + I marugame
+- 0x002b2f46, // n0x0950 c0x0000 (---------------) + I mitoyo
+- 0x00217e08, // n0x0951 c0x0000 (---------------) + I naoshima
+- 0x002713c6, // n0x0952 c0x0000 (---------------) + I sanuki
+- 0x00202987, // n0x0953 c0x0000 (---------------) + I tadotsu
+- 0x0032bf09, // n0x0954 c0x0000 (---------------) + I takamatsu
+- 0x0022e987, // n0x0955 c0x0000 (---------------) + I tonosho
+- 0x00273708, // n0x0956 c0x0000 (---------------) + I uchinomi
+- 0x00239d45, // n0x0957 c0x0000 (---------------) + I utazu
+- 0x00219048, // n0x0958 c0x0000 (---------------) + I zentsuji
+- 0x002509c5, // n0x0959 c0x0000 (---------------) + I akune
+- 0x00258f45, // n0x095a c0x0000 (---------------) + I amami
+- 0x00259745, // n0x095b c0x0000 (---------------) + I hioki
+- 0x0022d543, // n0x095c c0x0000 (---------------) + I isa
+- 0x00270344, // n0x095d c0x0000 (---------------) + I isen
+- 0x00225a45, // n0x095e c0x0000 (---------------) + I izumi
+- 0x002fd949, // n0x095f c0x0000 (---------------) + I kagoshima
+- 0x002eaf06, // n0x0960 c0x0000 (---------------) + I kanoya
+- 0x002a2ac8, // n0x0961 c0x0000 (---------------) + I kawanabe
+- 0x0024d445, // n0x0962 c0x0000 (---------------) + I kinko
+- 0x0029dd47, // n0x0963 c0x0000 (---------------) + I kouyama
+- 0x0027e68a, // n0x0964 c0x0000 (---------------) + I makurazaki
+- 0x002a3dc9, // n0x0965 c0x0000 (---------------) + I matsumoto
+- 0x00310a4a, // n0x0966 c0x0000 (---------------) + I minamitane
+- 0x002c2088, // n0x0967 c0x0000 (---------------) + I nakatane
+- 0x0022ce0c, // n0x0968 c0x0000 (---------------) + I nishinoomote
+- 0x0027004d, // n0x0969 c0x0000 (---------------) + I satsumasendai
+- 0x002e2643, // n0x096a c0x0000 (---------------) + I soo
+- 0x00215808, // n0x096b c0x0000 (---------------) + I tarumizu
+- 0x0025d085, // n0x096c c0x0000 (---------------) + I yusui
+- 0x00251146, // n0x096d c0x0000 (---------------) + I aikawa
+- 0x002bd106, // n0x096e c0x0000 (---------------) + I atsugi
+- 0x0033ee45, // n0x096f c0x0000 (---------------) + I ayase
+- 0x00211dc9, // n0x0970 c0x0000 (---------------) + I chigasaki
+- 0x002bb505, // n0x0971 c0x0000 (---------------) + I ebina
+- 0x0026a448, // n0x0972 c0x0000 (---------------) + I fujisawa
+- 0x00305886, // n0x0973 c0x0000 (---------------) + I hadano
+- 0x0034b186, // n0x0974 c0x0000 (---------------) + I hakone
+- 0x0028c209, // n0x0975 c0x0000 (---------------) + I hiratsuka
+- 0x003347c7, // n0x0976 c0x0000 (---------------) + I isehara
+- 0x002e3706, // n0x0977 c0x0000 (---------------) + I kaisei
+- 0x0027e608, // n0x0978 c0x0000 (---------------) + I kamakura
+- 0x003328c8, // n0x0979 c0x0000 (---------------) + I kiyokawa
+- 0x002bca07, // n0x097a c0x0000 (---------------) + I matsuda
+- 0x002e4e0e, // n0x097b c0x0000 (---------------) + I minamiashigara
+- 0x002b3185, // n0x097c c0x0000 (---------------) + I miura
+- 0x002bbec5, // n0x097d c0x0000 (---------------) + I nakai
+- 0x00216508, // n0x097e c0x0000 (---------------) + I ninomiya
+- 0x0022a147, // n0x097f c0x0000 (---------------) + I odawara
+- 0x00203e02, // n0x0980 c0x0000 (---------------) + I oi
+- 0x002a7684, // n0x0981 c0x0000 (---------------) + I oiso
+- 0x0026600a, // n0x0982 c0x0000 (---------------) + I sagamihara
+- 0x002b02c8, // n0x0983 c0x0000 (---------------) + I samukawa
+- 0x00225bc6, // n0x0984 c0x0000 (---------------) + I tsukui
+- 0x00280e08, // n0x0985 c0x0000 (---------------) + I yamakita
+- 0x00245c86, // n0x0986 c0x0000 (---------------) + I yamato
+- 0x002bcec8, // n0x0987 c0x0000 (---------------) + I yokosuka
+- 0x00296048, // n0x0988 c0x0000 (---------------) + I yugawara
+- 0x00258f04, // n0x0989 c0x0000 (---------------) + I zama
+- 0x0029e0c5, // n0x098a c0x0000 (---------------) + I zushi
+- 0x0074a404, // n0x098b c0x0001 (---------------) ! I city
+- 0x0074a404, // n0x098c c0x0001 (---------------) ! I city
+- 0x0074a404, // n0x098d c0x0001 (---------------) ! I city
+- 0x002044c3, // n0x098e c0x0000 (---------------) + I aki
+- 0x00236886, // n0x098f c0x0000 (---------------) + I geisei
+- 0x0026a906, // n0x0990 c0x0000 (---------------) + I hidaka
+- 0x0028660c, // n0x0991 c0x0000 (---------------) + I higashitsuno
+- 0x00216543, // n0x0992 c0x0000 (---------------) + I ino
+- 0x00236306, // n0x0993 c0x0000 (---------------) + I kagami
+- 0x00228804, // n0x0994 c0x0000 (---------------) + I kami
+- 0x002b4988, // n0x0995 c0x0000 (---------------) + I kitagawa
+- 0x002bef85, // n0x0996 c0x0000 (---------------) + I kochi
+- 0x00266106, // n0x0997 c0x0000 (---------------) + I mihara
+- 0x0025d448, // n0x0998 c0x0000 (---------------) + I motoyama
+- 0x002c2bc6, // n0x0999 c0x0000 (---------------) + I muroto
+- 0x00237a86, // n0x099a c0x0000 (---------------) + I nahari
+- 0x00287248, // n0x099b c0x0000 (---------------) + I nakamura
+- 0x00220647, // n0x099c c0x0000 (---------------) + I nankoku
+- 0x00231cc9, // n0x099d c0x0000 (---------------) + I nishitosa
+- 0x0023b34a, // n0x099e c0x0000 (---------------) + I niyodogawa
+- 0x002596c4, // n0x099f c0x0000 (---------------) + I ochi
+- 0x0024a885, // n0x09a0 c0x0000 (---------------) + I okawa
+- 0x002d9945, // n0x09a1 c0x0000 (---------------) + I otoyo
+- 0x00239086, // n0x09a2 c0x0000 (---------------) + I otsuki
+- 0x002adbc6, // n0x09a3 c0x0000 (---------------) + I sakawa
+- 0x00287046, // n0x09a4 c0x0000 (---------------) + I sukumo
+- 0x002da146, // n0x09a5 c0x0000 (---------------) + I susaki
+- 0x00231e04, // n0x09a6 c0x0000 (---------------) + I tosa
+- 0x00231e0b, // n0x09a7 c0x0000 (---------------) + I tosashimizu
+- 0x0024a7c4, // n0x09a8 c0x0000 (---------------) + I toyo
+- 0x002618c5, // n0x09a9 c0x0000 (---------------) + I tsuno
+- 0x00295a85, // n0x09aa c0x0000 (---------------) + I umaji
+- 0x002f1d06, // n0x09ab c0x0000 (---------------) + I yasuda
+- 0x0023a008, // n0x09ac c0x0000 (---------------) + I yusuhara
+- 0x0026ff07, // n0x09ad c0x0000 (---------------) + I amakusa
+- 0x00308484, // n0x09ae c0x0000 (---------------) + I arao
+- 0x002080c3, // n0x09af c0x0000 (---------------) + I aso
+- 0x00306dc5, // n0x09b0 c0x0000 (---------------) + I choyo
+- 0x0024f407, // n0x09b1 c0x0000 (---------------) + I gyokuto
+- 0x0028ebc9, // n0x09b2 c0x0000 (---------------) + I hitoyoshi
+- 0x0026fe0b, // n0x09b3 c0x0000 (---------------) + I kamiamakusa
+- 0x002cb9c7, // n0x09b4 c0x0000 (---------------) + I kashima
+- 0x00227287, // n0x09b5 c0x0000 (---------------) + I kikuchi
+- 0x00298d84, // n0x09b6 c0x0000 (---------------) + I kosa
+- 0x0025d348, // n0x09b7 c0x0000 (---------------) + I kumamoto
+- 0x003115c7, // n0x09b8 c0x0000 (---------------) + I mashiki
+- 0x00281946, // n0x09b9 c0x0000 (---------------) + I mifune
+- 0x002f7e08, // n0x09ba c0x0000 (---------------) + I minamata
+- 0x0025f9cb, // n0x09bb c0x0000 (---------------) + I minamioguni
+- 0x00304546, // n0x09bc c0x0000 (---------------) + I nagasu
+- 0x00220c49, // n0x09bd c0x0000 (---------------) + I nishihara
+- 0x0025fb45, // n0x09be c0x0000 (---------------) + I oguni
+- 0x0022b083, // n0x09bf c0x0000 (---------------) + I ozu
+- 0x002a3e86, // n0x09c0 c0x0000 (---------------) + I sumoto
+- 0x0027e3c8, // n0x09c1 c0x0000 (---------------) + I takamori
+- 0x00204243, // n0x09c2 c0x0000 (---------------) + I uki
+- 0x0024f503, // n0x09c3 c0x0000 (---------------) + I uto
+- 0x0026ee06, // n0x09c4 c0x0000 (---------------) + I yamaga
+- 0x00245c86, // n0x09c5 c0x0000 (---------------) + I yamato
+- 0x00316cca, // n0x09c6 c0x0000 (---------------) + I yatsushiro
+- 0x0026b5c5, // n0x09c7 c0x0000 (---------------) + I ayabe
+- 0x0026be8b, // n0x09c8 c0x0000 (---------------) + I fukuchiyama
+- 0x002876cb, // n0x09c9 c0x0000 (---------------) + I higashiyama
+- 0x00268dc3, // n0x09ca c0x0000 (---------------) + I ide
+- 0x00203e43, // n0x09cb c0x0000 (---------------) + I ine
+- 0x002d8684, // n0x09cc c0x0000 (---------------) + I joyo
+- 0x002d8ac7, // n0x09cd c0x0000 (---------------) + I kameoka
+- 0x0021ff44, // n0x09ce c0x0000 (---------------) + I kamo
+- 0x0021de44, // n0x09cf c0x0000 (---------------) + I kita
+- 0x00311704, // n0x09d0 c0x0000 (---------------) + I kizu
+- 0x002c3c48, // n0x09d1 c0x0000 (---------------) + I kumiyama
+- 0x002892c8, // n0x09d2 c0x0000 (---------------) + I kyotamba
+- 0x00233389, // n0x09d3 c0x0000 (---------------) + I kyotanabe
+- 0x00200308, // n0x09d4 c0x0000 (---------------) + I kyotango
+- 0x00289707, // n0x09d5 c0x0000 (---------------) + I maizuru
+- 0x00232146, // n0x09d6 c0x0000 (---------------) + I minami
+- 0x002a270f, // n0x09d7 c0x0000 (---------------) + I minamiyamashiro
+- 0x002b32c6, // n0x09d8 c0x0000 (---------------) + I miyazu
+- 0x002bef04, // n0x09d9 c0x0000 (---------------) + I muko
+- 0x0028910a, // n0x09da c0x0000 (---------------) + I nagaokakyo
+- 0x0024f307, // n0x09db c0x0000 (---------------) + I nakagyo
+- 0x002e6a46, // n0x09dc c0x0000 (---------------) + I nantan
+- 0x0027b749, // n0x09dd c0x0000 (---------------) + I oyamazaki
+- 0x00233305, // n0x09de c0x0000 (---------------) + I sakyo
+- 0x00302745, // n0x09df c0x0000 (---------------) + I seika
+- 0x00233446, // n0x09e0 c0x0000 (---------------) + I tanabe
+- 0x00219183, // n0x09e1 c0x0000 (---------------) + I uji
+- 0x002707c9, // n0x09e2 c0x0000 (---------------) + I ujitawara
+- 0x0026cac6, // n0x09e3 c0x0000 (---------------) + I wazuka
+- 0x002d8d09, // n0x09e4 c0x0000 (---------------) + I yamashina
+- 0x0032e306, // n0x09e5 c0x0000 (---------------) + I yawata
+- 0x002ad245, // n0x09e6 c0x0000 (---------------) + I asahi
+- 0x00224a85, // n0x09e7 c0x0000 (---------------) + I inabe
+- 0x00236903, // n0x09e8 c0x0000 (---------------) + I ise
+- 0x002d8c08, // n0x09e9 c0x0000 (---------------) + I kameyama
+- 0x002adc47, // n0x09ea c0x0000 (---------------) + I kawagoe
+- 0x0020af04, // n0x09eb c0x0000 (---------------) + I kiho
+- 0x003289c8, // n0x09ec c0x0000 (---------------) + I kisosaki
+- 0x0032ebc4, // n0x09ed c0x0000 (---------------) + I kiwa
+- 0x002ce2c6, // n0x09ee c0x0000 (---------------) + I komono
+- 0x002d9586, // n0x09ef c0x0000 (---------------) + I kumano
+- 0x0023ecc6, // n0x09f0 c0x0000 (---------------) + I kuwana
+- 0x0029e709, // n0x09f1 c0x0000 (---------------) + I matsusaka
+- 0x00272545, // n0x09f2 c0x0000 (---------------) + I meiwa
+- 0x0028ee06, // n0x09f3 c0x0000 (---------------) + I mihama
+- 0x00242749, // n0x09f4 c0x0000 (---------------) + I minamiise
+- 0x002b2306, // n0x09f5 c0x0000 (---------------) + I misugi
+- 0x002a2806, // n0x09f6 c0x0000 (---------------) + I miyama
+- 0x00330906, // n0x09f7 c0x0000 (---------------) + I nabari
+- 0x00202c45, // n0x09f8 c0x0000 (---------------) + I shima
+- 0x002eae06, // n0x09f9 c0x0000 (---------------) + I suzuka
+- 0x00202984, // n0x09fa c0x0000 (---------------) + I tado
+- 0x00226b05, // n0x09fb c0x0000 (---------------) + I taiki
+- 0x002a8b84, // n0x09fc c0x0000 (---------------) + I taki
+- 0x0029c886, // n0x09fd c0x0000 (---------------) + I tamaki
+- 0x003088c4, // n0x09fe c0x0000 (---------------) + I toba
+- 0x00202a83, // n0x09ff c0x0000 (---------------) + I tsu
+- 0x00272905, // n0x0a00 c0x0000 (---------------) + I udono
+- 0x002c3148, // n0x0a01 c0x0000 (---------------) + I ureshino
+- 0x00297087, // n0x0a02 c0x0000 (---------------) + I watarai
+- 0x0029d009, // n0x0a03 c0x0000 (---------------) + I yokkaichi
+- 0x00272b48, // n0x0a04 c0x0000 (---------------) + I furukawa
+- 0x00280551, // n0x0a05 c0x0000 (---------------) + I higashimatsushima
+- 0x0022708a, // n0x0a06 c0x0000 (---------------) + I ishinomaki
+- 0x002e3c07, // n0x0a07 c0x0000 (---------------) + I iwanuma
+- 0x00302806, // n0x0a08 c0x0000 (---------------) + I kakuda
+- 0x00228804, // n0x0a09 c0x0000 (---------------) + I kami
+- 0x002a8c88, // n0x0a0a c0x0000 (---------------) + I kawasaki
+- 0x00218149, // n0x0a0b c0x0000 (---------------) + I kesennuma
+- 0x0027cac8, // n0x0a0c c0x0000 (---------------) + I marumori
+- 0x0028070a, // n0x0a0d c0x0000 (---------------) + I matsushima
+- 0x00271d4d, // n0x0a0e c0x0000 (---------------) + I minamisanriku
+- 0x00235ec6, // n0x0a0f c0x0000 (---------------) + I misato
+- 0x00287346, // n0x0a10 c0x0000 (---------------) + I murata
+- 0x002bffc6, // n0x0a11 c0x0000 (---------------) + I natori
+- 0x002ca887, // n0x0a12 c0x0000 (---------------) + I ogawara
+- 0x0029c245, // n0x0a13 c0x0000 (---------------) + I ohira
+- 0x00341e87, // n0x0a14 c0x0000 (---------------) + I onagawa
+- 0x002286c5, // n0x0a15 c0x0000 (---------------) + I osaki
+- 0x002dba04, // n0x0a16 c0x0000 (---------------) + I rifu
+- 0x002fed86, // n0x0a17 c0x0000 (---------------) + I semine
+- 0x003470c7, // n0x0a18 c0x0000 (---------------) + I shibata
+- 0x00248dcd, // n0x0a19 c0x0000 (---------------) + I shichikashuku
+- 0x0025a147, // n0x0a1a c0x0000 (---------------) + I shikama
+- 0x002beb48, // n0x0a1b c0x0000 (---------------) + I shiogama
+- 0x0026a749, // n0x0a1c c0x0000 (---------------) + I shiroishi
+- 0x002a8086, // n0x0a1d c0x0000 (---------------) + I tagajo
+- 0x00268185, // n0x0a1e c0x0000 (---------------) + I taiwa
+- 0x00277e04, // n0x0a1f c0x0000 (---------------) + I tome
+- 0x00266a86, // n0x0a20 c0x0000 (---------------) + I tomiya
+- 0x0022acc6, // n0x0a21 c0x0000 (---------------) + I wakuya
+- 0x002b0446, // n0x0a22 c0x0000 (---------------) + I watari
+- 0x00282fc8, // n0x0a23 c0x0000 (---------------) + I yamamoto
+- 0x00265043, // n0x0a24 c0x0000 (---------------) + I zao
+- 0x00227583, // n0x0a25 c0x0000 (---------------) + I aya
+- 0x002addc5, // n0x0a26 c0x0000 (---------------) + I ebino
+- 0x002cd6c6, // n0x0a27 c0x0000 (---------------) + I gokase
+- 0x00296005, // n0x0a28 c0x0000 (---------------) + I hyuga
+- 0x00296e48, // n0x0a29 c0x0000 (---------------) + I kadogawa
+- 0x002848ca, // n0x0a2a c0x0000 (---------------) + I kawaminami
+- 0x00224d84, // n0x0a2b c0x0000 (---------------) + I kijo
+- 0x002b4988, // n0x0a2c c0x0000 (---------------) + I kitagawa
+- 0x0027e248, // n0x0a2d c0x0000 (---------------) + I kitakata
+- 0x002f1b47, // n0x0a2e c0x0000 (---------------) + I kitaura
+- 0x0030c649, // n0x0a2f c0x0000 (---------------) + I kobayashi
+- 0x002a59c8, // n0x0a30 c0x0000 (---------------) + I kunitomi
+- 0x00239307, // n0x0a31 c0x0000 (---------------) + I kushima
+- 0x002a7206, // n0x0a32 c0x0000 (---------------) + I mimata
+- 0x0021660a, // n0x0a33 c0x0000 (---------------) + I miyakonojo
+- 0x00266b08, // n0x0a34 c0x0000 (---------------) + I miyazaki
+- 0x0031ef09, // n0x0a35 c0x0000 (---------------) + I morotsuka
+- 0x002d8388, // n0x0a36 c0x0000 (---------------) + I nichinan
+- 0x00286309, // n0x0a37 c0x0000 (---------------) + I nishimera
+- 0x00243ac7, // n0x0a38 c0x0000 (---------------) + I nobeoka
+- 0x002defc5, // n0x0a39 c0x0000 (---------------) + I saito
+- 0x00288d86, // n0x0a3a c0x0000 (---------------) + I shiiba
+- 0x002dad08, // n0x0a3b c0x0000 (---------------) + I shintomi
+- 0x00328cc8, // n0x0a3c c0x0000 (---------------) + I takaharu
+- 0x00283988, // n0x0a3d c0x0000 (---------------) + I takanabe
+- 0x002e7508, // n0x0a3e c0x0000 (---------------) + I takazaki
+- 0x002618c5, // n0x0a3f c0x0000 (---------------) + I tsuno
+- 0x00206c44, // n0x0a40 c0x0000 (---------------) + I achi
+- 0x00307e08, // n0x0a41 c0x0000 (---------------) + I agematsu
+- 0x00200944, // n0x0a42 c0x0000 (---------------) + I anan
+- 0x00308504, // n0x0a43 c0x0000 (---------------) + I aoki
+- 0x002ad245, // n0x0a44 c0x0000 (---------------) + I asahi
+- 0x0027d387, // n0x0a45 c0x0000 (---------------) + I azumino
+- 0x0021da49, // n0x0a46 c0x0000 (---------------) + I chikuhoku
+- 0x00227387, // n0x0a47 c0x0000 (---------------) + I chikuma
+- 0x00219985, // n0x0a48 c0x0000 (---------------) + I chino
+- 0x00269346, // n0x0a49 c0x0000 (---------------) + I fujimi
+- 0x002744c6, // n0x0a4a c0x0000 (---------------) + I hakuba
+- 0x00209704, // n0x0a4b c0x0000 (---------------) + I hara
+- 0x0028c546, // n0x0a4c c0x0000 (---------------) + I hiraya
+- 0x002a2fc4, // n0x0a4d c0x0000 (---------------) + I iida
+- 0x0027c9c6, // n0x0a4e c0x0000 (---------------) + I iijima
+- 0x00204546, // n0x0a4f c0x0000 (---------------) + I iiyama
+- 0x00304946, // n0x0a50 c0x0000 (---------------) + I iizuna
+- 0x00244305, // n0x0a51 c0x0000 (---------------) + I ikeda
+- 0x00296d07, // n0x0a52 c0x0000 (---------------) + I ikusaka
+- 0x00203303, // n0x0a53 c0x0000 (---------------) + I ina
+- 0x002e6009, // n0x0a54 c0x0000 (---------------) + I karuizawa
+- 0x002e3408, // n0x0a55 c0x0000 (---------------) + I kawakami
+- 0x00239184, // n0x0a56 c0x0000 (---------------) + I kiso
+- 0x0023918d, // n0x0a57 c0x0000 (---------------) + I kisofukushima
+- 0x0027f648, // n0x0a58 c0x0000 (---------------) + I kitaaiki
+- 0x002b3dc8, // n0x0a59 c0x0000 (---------------) + I komagane
+- 0x0031ee86, // n0x0a5a c0x0000 (---------------) + I komoro
+- 0x0032c009, // n0x0a5b c0x0000 (---------------) + I matsukawa
+- 0x002a3dc9, // n0x0a5c c0x0000 (---------------) + I matsumoto
+- 0x0022e245, // n0x0a5d c0x0000 (---------------) + I miasa
+- 0x002849ca, // n0x0a5e c0x0000 (---------------) + I minamiaiki
+- 0x0024bf0a, // n0x0a5f c0x0000 (---------------) + I minamimaki
+- 0x0025f54c, // n0x0a60 c0x0000 (---------------) + I minamiminowa
+- 0x0025f6c6, // n0x0a61 c0x0000 (---------------) + I minowa
+- 0x00269806, // n0x0a62 c0x0000 (---------------) + I miyada
+- 0x002b3446, // n0x0a63 c0x0000 (---------------) + I miyota
+- 0x0025b8c9, // n0x0a64 c0x0000 (---------------) + I mochizuki
+- 0x003082c6, // n0x0a65 c0x0000 (---------------) + I nagano
+- 0x0021c986, // n0x0a66 c0x0000 (---------------) + I nagawa
+- 0x002bb5c6, // n0x0a67 c0x0000 (---------------) + I nagiso
+- 0x0028a488, // n0x0a68 c0x0000 (---------------) + I nakagawa
+- 0x0020cbc6, // n0x0a69 c0x0000 (---------------) + I nakano
+- 0x0029b9cb, // n0x0a6a c0x0000 (---------------) + I nozawaonsen
+- 0x0027d505, // n0x0a6b c0x0000 (---------------) + I obuse
+- 0x00230d45, // n0x0a6c c0x0000 (---------------) + I ogawa
+- 0x00269a85, // n0x0a6d c0x0000 (---------------) + I okaya
+- 0x0021f706, // n0x0a6e c0x0000 (---------------) + I omachi
+- 0x002165c3, // n0x0a6f c0x0000 (---------------) + I omi
+- 0x0023ec46, // n0x0a70 c0x0000 (---------------) + I ookuwa
+- 0x0025a0c7, // n0x0a71 c0x0000 (---------------) + I ooshika
+- 0x002a8b45, // n0x0a72 c0x0000 (---------------) + I otaki
+- 0x0025c605, // n0x0a73 c0x0000 (---------------) + I otari
+- 0x00299045, // n0x0a74 c0x0000 (---------------) + I sakae
+- 0x002d2fc6, // n0x0a75 c0x0000 (---------------) + I sakaki
+- 0x00223584, // n0x0a76 c0x0000 (---------------) + I saku
+- 0x0032a646, // n0x0a77 c0x0000 (---------------) + I sakuho
+- 0x002d6d89, // n0x0a78 c0x0000 (---------------) + I shimosuwa
+- 0x0021f58c, // n0x0a79 c0x0000 (---------------) + I shinanomachi
+- 0x002db748, // n0x0a7a c0x0000 (---------------) + I shiojiri
+- 0x00258344, // n0x0a7b c0x0000 (---------------) + I suwa
+- 0x002c91c6, // n0x0a7c c0x0000 (---------------) + I suzaka
+- 0x0029b846, // n0x0a7d c0x0000 (---------------) + I takagi
+- 0x0027e3c8, // n0x0a7e c0x0000 (---------------) + I takamori
+- 0x002e3dc8, // n0x0a7f c0x0000 (---------------) + I takayama
+- 0x0021f489, // n0x0a80 c0x0000 (---------------) + I tateshina
+- 0x00261847, // n0x0a81 c0x0000 (---------------) + I tatsuno
+- 0x00291fc9, // n0x0a82 c0x0000 (---------------) + I togakushi
+- 0x0026fa46, // n0x0a83 c0x0000 (---------------) + I togura
+- 0x00266a84, // n0x0a84 c0x0000 (---------------) + I tomi
+- 0x002a2dc4, // n0x0a85 c0x0000 (---------------) + I ueda
+- 0x00273344, // n0x0a86 c0x0000 (---------------) + I wada
+- 0x0026ee08, // n0x0a87 c0x0000 (---------------) + I yamagata
+- 0x0021d88a, // n0x0a88 c0x0000 (---------------) + I yamanouchi
+- 0x00306306, // n0x0a89 c0x0000 (---------------) + I yasaka
+- 0x00311287, // n0x0a8a c0x0000 (---------------) + I yasuoka
+- 0x0024e287, // n0x0a8b c0x0000 (---------------) + I chijiwa
+- 0x00295145, // n0x0a8c c0x0000 (---------------) + I futsu
+- 0x002d9904, // n0x0a8d c0x0000 (---------------) + I goto
+- 0x0027a146, // n0x0a8e c0x0000 (---------------) + I hasami
+- 0x0029c286, // n0x0a8f c0x0000 (---------------) + I hirado
+- 0x0020aec3, // n0x0a90 c0x0000 (---------------) + I iki
+- 0x002e3247, // n0x0a91 c0x0000 (---------------) + I isahaya
+- 0x00232c48, // n0x0a92 c0x0000 (---------------) + I kawatana
+- 0x0022e38a, // n0x0a93 c0x0000 (---------------) + I kuchinotsu
+- 0x002b1d48, // n0x0a94 c0x0000 (---------------) + I matsuura
+- 0x002f0f48, // n0x0a95 c0x0000 (---------------) + I nagasaki
+- 0x00308905, // n0x0a96 c0x0000 (---------------) + I obama
+- 0x0029c3c5, // n0x0a97 c0x0000 (---------------) + I omura
+- 0x00291f05, // n0x0a98 c0x0000 (---------------) + I oseto
+- 0x00295506, // n0x0a99 c0x0000 (---------------) + I saikai
+- 0x002be346, // n0x0a9a c0x0000 (---------------) + I sasebo
+- 0x002bf145, // n0x0a9b c0x0000 (---------------) + I seihi
+- 0x0022fc49, // n0x0a9c c0x0000 (---------------) + I shimabara
+- 0x002d970c, // n0x0a9d c0x0000 (---------------) + I shinkamigoto
+- 0x00247f47, // n0x0a9e c0x0000 (---------------) + I togitsu
+- 0x00280788, // n0x0a9f c0x0000 (---------------) + I tsushima
+- 0x0026ebc5, // n0x0aa0 c0x0000 (---------------) + I unzen
+- 0x0074a404, // n0x0aa1 c0x0001 (---------------) ! I city
+- 0x00239f04, // n0x0aa2 c0x0000 (---------------) + I ando
+- 0x00327f44, // n0x0aa3 c0x0000 (---------------) + I gose
+- 0x002577c6, // n0x0aa4 c0x0000 (---------------) + I heguri
+- 0x0028824e, // n0x0aa5 c0x0000 (---------------) + I higashiyoshino
+- 0x002c7f87, // n0x0aa6 c0x0000 (---------------) + I ikaruga
+- 0x002caa85, // n0x0aa7 c0x0000 (---------------) + I ikoma
+- 0x00245a8c, // n0x0aa8 c0x0000 (---------------) + I kamikitayama
+- 0x002dd287, // n0x0aa9 c0x0000 (---------------) + I kanmaki
+- 0x00347047, // n0x0aaa c0x0000 (---------------) + I kashiba
+- 0x002095c9, // n0x0aab c0x0000 (---------------) + I kashihara
+- 0x00254749, // n0x0aac c0x0000 (---------------) + I katsuragi
+- 0x0026e445, // n0x0aad c0x0000 (---------------) + I kawai
+- 0x002e3408, // n0x0aae c0x0000 (---------------) + I kawakami
+- 0x003195c9, // n0x0aaf c0x0000 (---------------) + I kawanishi
+- 0x00298345, // n0x0ab0 c0x0000 (---------------) + I koryo
+- 0x002a8a88, // n0x0ab1 c0x0000 (---------------) + I kurotaki
+- 0x002e24c6, // n0x0ab2 c0x0000 (---------------) + I mitsue
+- 0x00299ac6, // n0x0ab3 c0x0000 (---------------) + I miyake
+- 0x003208c4, // n0x0ab4 c0x0000 (---------------) + I nara
+- 0x002cad88, // n0x0ab5 c0x0000 (---------------) + I nosegawa
+- 0x00262cc3, // n0x0ab6 c0x0000 (---------------) + I oji
+- 0x00236a44, // n0x0ab7 c0x0000 (---------------) + I ouda
+- 0x00306e45, // n0x0ab8 c0x0000 (---------------) + I oyodo
+- 0x00285e07, // n0x0ab9 c0x0000 (---------------) + I sakurai
+- 0x002572c5, // n0x0aba c0x0000 (---------------) + I sango
+- 0x00219809, // n0x0abb c0x0000 (---------------) + I shimoichi
+- 0x002d570d, // n0x0abc c0x0000 (---------------) + I shimokitayama
+- 0x002d8586, // n0x0abd c0x0000 (---------------) + I shinjo
+- 0x0028e844, // n0x0abe c0x0000 (---------------) + I soni
+- 0x002df308, // n0x0abf c0x0000 (---------------) + I takatori
+- 0x00203bca, // n0x0ac0 c0x0000 (---------------) + I tawaramoto
+- 0x0027c047, // n0x0ac1 c0x0000 (---------------) + I tenkawa
+- 0x002ee1c5, // n0x0ac2 c0x0000 (---------------) + I tenri
+- 0x002262c3, // n0x0ac3 c0x0000 (---------------) + I uda
+- 0x0028788e, // n0x0ac4 c0x0000 (---------------) + I yamatokoriyama
+- 0x00245c8c, // n0x0ac5 c0x0000 (---------------) + I yamatotakada
+- 0x002db587, // n0x0ac6 c0x0000 (---------------) + I yamazoe
+- 0x00288407, // n0x0ac7 c0x0000 (---------------) + I yoshino
+- 0x00208543, // n0x0ac8 c0x0000 (---------------) + I aga
+- 0x00308305, // n0x0ac9 c0x0000 (---------------) + I agano
+- 0x00327f45, // n0x0aca c0x0000 (---------------) + I gosen
+- 0x002811c8, // n0x0acb c0x0000 (---------------) + I itoigawa
+- 0x0027e089, // n0x0acc c0x0000 (---------------) + I izumozaki
+- 0x002a8186, // n0x0acd c0x0000 (---------------) + I joetsu
+- 0x0021ff44, // n0x0ace c0x0000 (---------------) + I kamo
+- 0x002e3b46, // n0x0acf c0x0000 (---------------) + I kariwa
+- 0x00216bcb, // n0x0ad0 c0x0000 (---------------) + I kashiwazaki
+- 0x0029e48c, // n0x0ad1 c0x0000 (---------------) + I minamiuonuma
+- 0x0026d547, // n0x0ad2 c0x0000 (---------------) + I mitsuke
+- 0x002be745, // n0x0ad3 c0x0000 (---------------) + I muika
+- 0x00276348, // n0x0ad4 c0x0000 (---------------) + I murakami
+- 0x002bc7c5, // n0x0ad5 c0x0000 (---------------) + I myoko
+- 0x00289107, // n0x0ad6 c0x0000 (---------------) + I nagaoka
+- 0x0028db47, // n0x0ad7 c0x0000 (---------------) + I niigata
+- 0x002967c5, // n0x0ad8 c0x0000 (---------------) + I ojiya
+- 0x002165c3, // n0x0ad9 c0x0000 (---------------) + I omi
+- 0x00215604, // n0x0ada c0x0000 (---------------) + I sado
+- 0x0025bc45, // n0x0adb c0x0000 (---------------) + I sanjo
+- 0x00236945, // n0x0adc c0x0000 (---------------) + I seiro
+- 0x00236946, // n0x0add c0x0000 (---------------) + I seirou
+- 0x002d6b88, // n0x0ade c0x0000 (---------------) + I sekikawa
+- 0x003470c7, // n0x0adf c0x0000 (---------------) + I shibata
+- 0x002bd406, // n0x0ae0 c0x0000 (---------------) + I tagami
+- 0x00251046, // n0x0ae1 c0x0000 (---------------) + I tainai
+- 0x00259686, // n0x0ae2 c0x0000 (---------------) + I tochio
+- 0x0029ae09, // n0x0ae3 c0x0000 (---------------) + I tokamachi
+- 0x00229a47, // n0x0ae4 c0x0000 (---------------) + I tsubame
+- 0x00273ac6, // n0x0ae5 c0x0000 (---------------) + I tsunan
+- 0x0029e606, // n0x0ae6 c0x0000 (---------------) + I uonuma
+- 0x0030c546, // n0x0ae7 c0x0000 (---------------) + I yahiko
+- 0x002d8705, // n0x0ae8 c0x0000 (---------------) + I yoita
+- 0x00292786, // n0x0ae9 c0x0000 (---------------) + I yuzawa
+- 0x00345945, // n0x0aea c0x0000 (---------------) + I beppu
+- 0x00299708, // n0x0aeb c0x0000 (---------------) + I bungoono
+- 0x0027600b, // n0x0aec c0x0000 (---------------) + I bungotakada
+- 0x00279f46, // n0x0aed c0x0000 (---------------) + I hasama
+- 0x0024e2c4, // n0x0aee c0x0000 (---------------) + I hiji
+- 0x002dfa89, // n0x0aef c0x0000 (---------------) + I himeshima
+- 0x0028a2c4, // n0x0af0 c0x0000 (---------------) + I hita
+- 0x002e2448, // n0x0af1 c0x0000 (---------------) + I kamitsue
+- 0x002a3807, // n0x0af2 c0x0000 (---------------) + I kokonoe
+- 0x00249084, // n0x0af3 c0x0000 (---------------) + I kuju
+- 0x002a4a48, // n0x0af4 c0x0000 (---------------) + I kunisaki
+- 0x002aa344, // n0x0af5 c0x0000 (---------------) + I kusu
+- 0x002d8744, // n0x0af6 c0x0000 (---------------) + I oita
+- 0x00273145, // n0x0af7 c0x0000 (---------------) + I saiki
+- 0x002cb846, // n0x0af8 c0x0000 (---------------) + I taketa
+- 0x002c3b87, // n0x0af9 c0x0000 (---------------) + I tsukumi
+- 0x002159c3, // n0x0afa c0x0000 (---------------) + I usa
+- 0x00286d05, // n0x0afb c0x0000 (---------------) + I usuki
+- 0x0026e004, // n0x0afc c0x0000 (---------------) + I yufu
+- 0x002bbf06, // n0x0afd c0x0000 (---------------) + I akaiwa
+- 0x0022e2c8, // n0x0afe c0x0000 (---------------) + I asakuchi
+- 0x0030c245, // n0x0aff c0x0000 (---------------) + I bizen
+- 0x0027ce89, // n0x0b00 c0x0000 (---------------) + I hayashima
+- 0x0025e6c5, // n0x0b01 c0x0000 (---------------) + I ibara
+- 0x00236308, // n0x0b02 c0x0000 (---------------) + I kagamino
+- 0x00319307, // n0x0b03 c0x0000 (---------------) + I kasaoka
+- 0x0022aec8, // n0x0b04 c0x0000 (---------------) + I kibichuo
+- 0x002a4107, // n0x0b05 c0x0000 (---------------) + I kumenan
+- 0x00332589, // n0x0b06 c0x0000 (---------------) + I kurashiki
+- 0x00237c06, // n0x0b07 c0x0000 (---------------) + I maniwa
+- 0x002cc706, // n0x0b08 c0x0000 (---------------) + I misaki
+- 0x002bb5c4, // n0x0b09 c0x0000 (---------------) + I nagi
+- 0x002e4d45, // n0x0b0a c0x0000 (---------------) + I niimi
+- 0x0021a0cc, // n0x0b0b c0x0000 (---------------) + I nishiawakura
+- 0x00269a87, // n0x0b0c c0x0000 (---------------) + I okayama
+- 0x0026a247, // n0x0b0d c0x0000 (---------------) + I satosho
+- 0x0024e148, // n0x0b0e c0x0000 (---------------) + I setouchi
+- 0x002d8586, // n0x0b0f c0x0000 (---------------) + I shinjo
+- 0x0026a344, // n0x0b10 c0x0000 (---------------) + I shoo
+- 0x003139c4, // n0x0b11 c0x0000 (---------------) + I soja
+- 0x002b4649, // n0x0b12 c0x0000 (---------------) + I takahashi
+- 0x002b3546, // n0x0b13 c0x0000 (---------------) + I tamano
+- 0x00280d47, // n0x0b14 c0x0000 (---------------) + I tsuyama
+- 0x00341fc4, // n0x0b15 c0x0000 (---------------) + I wake
+- 0x0027b506, // n0x0b16 c0x0000 (---------------) + I yakage
+- 0x00209b05, // n0x0b17 c0x0000 (---------------) + I aguni
+- 0x0028d9c7, // n0x0b18 c0x0000 (---------------) + I ginowan
+- 0x0029b946, // n0x0b19 c0x0000 (---------------) + I ginoza
+- 0x00277849, // n0x0b1a c0x0000 (---------------) + I gushikami
+- 0x00310887, // n0x0b1b c0x0000 (---------------) + I haebaru
+- 0x00256207, // n0x0b1c c0x0000 (---------------) + I higashi
+- 0x0028c086, // n0x0b1d c0x0000 (---------------) + I hirara
+- 0x0030cbc5, // n0x0b1e c0x0000 (---------------) + I iheya
+- 0x0026ddc8, // n0x0b1f c0x0000 (---------------) + I ishigaki
+- 0x0026c948, // n0x0b20 c0x0000 (---------------) + I ishikawa
+- 0x00303186, // n0x0b21 c0x0000 (---------------) + I itoman
+- 0x0030c285, // n0x0b22 c0x0000 (---------------) + I izena
+- 0x002a83c6, // n0x0b23 c0x0000 (---------------) + I kadena
+- 0x00204d83, // n0x0b24 c0x0000 (---------------) + I kin
+- 0x00281049, // n0x0b25 c0x0000 (---------------) + I kitadaito
+- 0x00286dce, // n0x0b26 c0x0000 (---------------) + I kitanakagusuku
+- 0x002a3c48, // n0x0b27 c0x0000 (---------------) + I kumejima
+- 0x0032ecc8, // n0x0b28 c0x0000 (---------------) + I kunigami
+- 0x00302f8b, // n0x0b29 c0x0000 (---------------) + I minamidaito
+- 0x0027d0c6, // n0x0b2a c0x0000 (---------------) + I motobu
+- 0x00208284, // n0x0b2b c0x0000 (---------------) + I nago
+- 0x00237a84, // n0x0b2c c0x0000 (---------------) + I naha
+- 0x00286eca, // n0x0b2d c0x0000 (---------------) + I nakagusuku
+- 0x00215c47, // n0x0b2e c0x0000 (---------------) + I nakijin
+- 0x00273b85, // n0x0b2f c0x0000 (---------------) + I nanjo
+- 0x00220c49, // n0x0b30 c0x0000 (---------------) + I nishihara
+- 0x002a7145, // n0x0b31 c0x0000 (---------------) + I ogimi
+- 0x00308547, // n0x0b32 c0x0000 (---------------) + I okinawa
+- 0x00202e84, // n0x0b33 c0x0000 (---------------) + I onna
+- 0x002d5187, // n0x0b34 c0x0000 (---------------) + I shimoji
+- 0x002f7f88, // n0x0b35 c0x0000 (---------------) + I taketomi
+- 0x002dea86, // n0x0b36 c0x0000 (---------------) + I tarama
+- 0x002b2489, // n0x0b37 c0x0000 (---------------) + I tokashiki
+- 0x002a5aca, // n0x0b38 c0x0000 (---------------) + I tomigusuku
+- 0x00215bc6, // n0x0b39 c0x0000 (---------------) + I tonaki
+- 0x0027f186, // n0x0b3a c0x0000 (---------------) + I urasoe
+- 0x00295a05, // n0x0b3b c0x0000 (---------------) + I uruma
+- 0x0032af85, // n0x0b3c c0x0000 (---------------) + I yaese
+- 0x00327207, // n0x0b3d c0x0000 (---------------) + I yomitan
+- 0x00346748, // n0x0b3e c0x0000 (---------------) + I yonabaru
+- 0x00209a48, // n0x0b3f c0x0000 (---------------) + I yonaguni
+- 0x00258f06, // n0x0b40 c0x0000 (---------------) + I zamami
+- 0x00338405, // n0x0b41 c0x0000 (---------------) + I abeno
+- 0x002ad94e, // n0x0b42 c0x0000 (---------------) + I chihayaakasaka
+- 0x0022afc4, // n0x0b43 c0x0000 (---------------) + I chuo
+- 0x00281145, // n0x0b44 c0x0000 (---------------) + I daito
+- 0x00268cc9, // n0x0b45 c0x0000 (---------------) + I fujiidera
+- 0x0026e248, // n0x0b46 c0x0000 (---------------) + I habikino
+- 0x00277306, // n0x0b47 c0x0000 (---------------) + I hannan
+- 0x00282c4c, // n0x0b48 c0x0000 (---------------) + I higashiosaka
+- 0x002844d0, // n0x0b49 c0x0000 (---------------) + I higashisumiyoshi
+- 0x00287e8f, // n0x0b4a c0x0000 (---------------) + I higashiyodogawa
+- 0x0028b388, // n0x0b4b c0x0000 (---------------) + I hirakata
+- 0x00327887, // n0x0b4c c0x0000 (---------------) + I ibaraki
+- 0x00244305, // n0x0b4d c0x0000 (---------------) + I ikeda
+- 0x00225a45, // n0x0b4e c0x0000 (---------------) + I izumi
+- 0x00225a49, // n0x0b4f c0x0000 (---------------) + I izumiotsu
+- 0x00347f89, // n0x0b50 c0x0000 (---------------) + I izumisano
+- 0x0021c206, // n0x0b51 c0x0000 (---------------) + I kadoma
+- 0x002f2107, // n0x0b52 c0x0000 (---------------) + I kaizuka
+- 0x00200905, // n0x0b53 c0x0000 (---------------) + I kanan
+- 0x00210389, // n0x0b54 c0x0000 (---------------) + I kashiwara
+- 0x0032bd06, // n0x0b55 c0x0000 (---------------) + I katano
+- 0x0030810d, // n0x0b56 c0x0000 (---------------) + I kawachinagano
+- 0x00273209, // n0x0b57 c0x0000 (---------------) + I kishiwada
+- 0x0021de44, // n0x0b58 c0x0000 (---------------) + I kita
+- 0x002a39c8, // n0x0b59 c0x0000 (---------------) + I kumatori
+- 0x00307ec9, // n0x0b5a c0x0000 (---------------) + I matsubara
+- 0x003064c6, // n0x0b5b c0x0000 (---------------) + I minato
+- 0x00269445, // n0x0b5c c0x0000 (---------------) + I minoh
+- 0x002cc706, // n0x0b5d c0x0000 (---------------) + I misaki
+- 0x002b12c9, // n0x0b5e c0x0000 (---------------) + I moriguchi
+- 0x002b4048, // n0x0b5f c0x0000 (---------------) + I neyagawa
+- 0x0021a0c5, // n0x0b60 c0x0000 (---------------) + I nishi
+- 0x00219a44, // n0x0b61 c0x0000 (---------------) + I nose
+- 0x00282e0b, // n0x0b62 c0x0000 (---------------) + I osakasayama
+- 0x00306385, // n0x0b63 c0x0000 (---------------) + I sakai
+- 0x00248bc6, // n0x0b64 c0x0000 (---------------) + I sayama
+- 0x002587c6, // n0x0b65 c0x0000 (---------------) + I sennan
+- 0x002fff06, // n0x0b66 c0x0000 (---------------) + I settsu
+- 0x0030c7cb, // n0x0b67 c0x0000 (---------------) + I shijonawate
+- 0x0027cf89, // n0x0b68 c0x0000 (---------------) + I shimamoto
+- 0x00341885, // n0x0b69 c0x0000 (---------------) + I suita
+- 0x0024d207, // n0x0b6a c0x0000 (---------------) + I tadaoka
+- 0x00227006, // n0x0b6b c0x0000 (---------------) + I taishi
+- 0x0026f886, // n0x0b6c c0x0000 (---------------) + I tajiri
+- 0x00327cc8, // n0x0b6d c0x0000 (---------------) + I takaishi
+- 0x002630c9, // n0x0b6e c0x0000 (---------------) + I takatsuki
+- 0x002be90c, // n0x0b6f c0x0000 (---------------) + I tondabayashi
+- 0x0024f208, // n0x0b70 c0x0000 (---------------) + I toyonaka
+- 0x00253246, // n0x0b71 c0x0000 (---------------) + I toyono
+- 0x002c90c3, // n0x0b72 c0x0000 (---------------) + I yao
+- 0x00218046, // n0x0b73 c0x0000 (---------------) + I ariake
+- 0x00288bc5, // n0x0b74 c0x0000 (---------------) + I arita
+- 0x0026c1c8, // n0x0b75 c0x0000 (---------------) + I fukudomi
+- 0x00222c46, // n0x0b76 c0x0000 (---------------) + I genkai
+- 0x00243e88, // n0x0b77 c0x0000 (---------------) + I hamatama
+- 0x00322d45, // n0x0b78 c0x0000 (---------------) + I hizen
+- 0x00323945, // n0x0b79 c0x0000 (---------------) + I imari
+- 0x002f2448, // n0x0b7a c0x0000 (---------------) + I kamimine
+- 0x0029b507, // n0x0b7b c0x0000 (---------------) + I kanzaki
+- 0x002bd047, // n0x0b7c c0x0000 (---------------) + I karatsu
+- 0x002cb9c7, // n0x0b7d c0x0000 (---------------) + I kashima
+- 0x00328b48, // n0x0b7e c0x0000 (---------------) + I kitagata
+- 0x003279c8, // n0x0b7f c0x0000 (---------------) + I kitahata
+- 0x002911c6, // n0x0b80 c0x0000 (---------------) + I kiyama
+- 0x0029c6c7, // n0x0b81 c0x0000 (---------------) + I kouhoku
+- 0x002ad487, // n0x0b82 c0x0000 (---------------) + I kyuragi
+- 0x00288a8a, // n0x0b83 c0x0000 (---------------) + I nishiarita
+- 0x0020e983, // n0x0b84 c0x0000 (---------------) + I ogi
+- 0x0021f706, // n0x0b85 c0x0000 (---------------) + I omachi
+- 0x0021d9c5, // n0x0b86 c0x0000 (---------------) + I ouchi
+- 0x00262184, // n0x0b87 c0x0000 (---------------) + I saga
+- 0x0026a749, // n0x0b88 c0x0000 (---------------) + I shiroishi
+- 0x00332504, // n0x0b89 c0x0000 (---------------) + I taku
+- 0x00200144, // n0x0b8a c0x0000 (---------------) + I tara
+- 0x00284d44, // n0x0b8b c0x0000 (---------------) + I tosu
+- 0x0028840b, // n0x0b8c c0x0000 (---------------) + I yoshinogari
+- 0x00308047, // n0x0b8d c0x0000 (---------------) + I arakawa
+- 0x002adb85, // n0x0b8e c0x0000 (---------------) + I asaka
+- 0x002bf3c8, // n0x0b8f c0x0000 (---------------) + I chichibu
+- 0x00269346, // n0x0b90 c0x0000 (---------------) + I fujimi
+- 0x00269348, // n0x0b91 c0x0000 (---------------) + I fujimino
+- 0x0026b506, // n0x0b92 c0x0000 (---------------) + I fukaya
+- 0x00278005, // n0x0b93 c0x0000 (---------------) + I hanno
+- 0x00278545, // n0x0b94 c0x0000 (---------------) + I hanyu
+- 0x0027a786, // n0x0b95 c0x0000 (---------------) + I hasuda
+- 0x0027b388, // n0x0b96 c0x0000 (---------------) + I hatogaya
+- 0x0027b688, // n0x0b97 c0x0000 (---------------) + I hatoyama
+- 0x0026a906, // n0x0b98 c0x0000 (---------------) + I hidaka
+- 0x002bf20f, // n0x0b99 c0x0000 (---------------) + I higashichichibu
+- 0x00280b10, // n0x0b9a c0x0000 (---------------) + I higashimatsuyama
+- 0x00224605, // n0x0b9b c0x0000 (---------------) + I honjo
+- 0x00203303, // n0x0b9c c0x0000 (---------------) + I ina
+- 0x002f1985, // n0x0b9d c0x0000 (---------------) + I iruma
+- 0x00297488, // n0x0b9e c0x0000 (---------------) + I iwatsuki
+- 0x00347e89, // n0x0b9f c0x0000 (---------------) + I kamiizumi
+- 0x002aedc8, // n0x0ba0 c0x0000 (---------------) + I kamikawa
+- 0x0031f0c8, // n0x0ba1 c0x0000 (---------------) + I kamisato
+- 0x00218448, // n0x0ba2 c0x0000 (---------------) + I kasukabe
+- 0x002adc47, // n0x0ba3 c0x0000 (---------------) + I kawagoe
+- 0x00269009, // n0x0ba4 c0x0000 (---------------) + I kawaguchi
+- 0x00244088, // n0x0ba5 c0x0000 (---------------) + I kawajima
+- 0x00234e04, // n0x0ba6 c0x0000 (---------------) + I kazo
+- 0x00284bc8, // n0x0ba7 c0x0000 (---------------) + I kitamoto
+- 0x00250cc9, // n0x0ba8 c0x0000 (---------------) + I koshigaya
+- 0x0029cc87, // n0x0ba9 c0x0000 (---------------) + I kounosu
+- 0x002a5cc4, // n0x0baa c0x0000 (---------------) + I kuki
+- 0x00227448, // n0x0bab c0x0000 (---------------) + I kumagaya
+- 0x00296aca, // n0x0bac c0x0000 (---------------) + I matsubushi
+- 0x002b2dc6, // n0x0bad c0x0000 (---------------) + I minano
+- 0x00235ec6, // n0x0bae c0x0000 (---------------) + I misato
+- 0x00323009, // n0x0baf c0x0000 (---------------) + I miyashiro
+- 0x00284707, // n0x0bb0 c0x0000 (---------------) + I miyoshi
+- 0x002b8408, // n0x0bb1 c0x0000 (---------------) + I moroyama
+- 0x00240008, // n0x0bb2 c0x0000 (---------------) + I nagatoro
+- 0x0022ab48, // n0x0bb3 c0x0000 (---------------) + I namegawa
+- 0x002d4545, // n0x0bb4 c0x0000 (---------------) + I niiza
+- 0x00239845, // n0x0bb5 c0x0000 (---------------) + I ogano
+- 0x00230d45, // n0x0bb6 c0x0000 (---------------) + I ogawa
+- 0x00327f05, // n0x0bb7 c0x0000 (---------------) + I ogose
+- 0x002d4fc7, // n0x0bb8 c0x0000 (---------------) + I okegawa
+- 0x002165c5, // n0x0bb9 c0x0000 (---------------) + I omiya
+- 0x002a8b45, // n0x0bba c0x0000 (---------------) + I otaki
+- 0x00319c46, // n0x0bbb c0x0000 (---------------) + I ranzan
+- 0x002aed07, // n0x0bbc c0x0000 (---------------) + I ryokami
+- 0x002aab87, // n0x0bbd c0x0000 (---------------) + I saitama
+- 0x00296dc6, // n0x0bbe c0x0000 (---------------) + I sakado
+- 0x002c25c5, // n0x0bbf c0x0000 (---------------) + I satte
+- 0x00248bc6, // n0x0bc0 c0x0000 (---------------) + I sayama
+- 0x0021fd05, // n0x0bc1 c0x0000 (---------------) + I shiki
+- 0x002dd108, // n0x0bc2 c0x0000 (---------------) + I shiraoka
+- 0x00200884, // n0x0bc3 c0x0000 (---------------) + I soka
+- 0x002b2386, // n0x0bc4 c0x0000 (---------------) + I sugito
+- 0x0020fd44, // n0x0bc5 c0x0000 (---------------) + I toda
+- 0x0034b648, // n0x0bc6 c0x0000 (---------------) + I tokigawa
+- 0x002d9c4a, // n0x0bc7 c0x0000 (---------------) + I tokorozawa
+- 0x00202a8c, // n0x0bc8 c0x0000 (---------------) + I tsurugashima
+- 0x0021b805, // n0x0bc9 c0x0000 (---------------) + I urawa
+- 0x002ca946, // n0x0bca c0x0000 (---------------) + I warabi
+- 0x002beac6, // n0x0bcb c0x0000 (---------------) + I yashio
+- 0x00318706, // n0x0bcc c0x0000 (---------------) + I yokoze
+- 0x002532c4, // n0x0bcd c0x0000 (---------------) + I yono
+- 0x00210245, // n0x0bce c0x0000 (---------------) + I yorii
+- 0x0026b347, // n0x0bcf c0x0000 (---------------) + I yoshida
+- 0x00284789, // n0x0bd0 c0x0000 (---------------) + I yoshikawa
+- 0x0028ecc7, // n0x0bd1 c0x0000 (---------------) + I yoshimi
+- 0x0074a404, // n0x0bd2 c0x0001 (---------------) ! I city
+- 0x0074a404, // n0x0bd3 c0x0001 (---------------) ! I city
+- 0x0033f385, // n0x0bd4 c0x0000 (---------------) + I aisho
+- 0x00236f84, // n0x0bd5 c0x0000 (---------------) + I gamo
+- 0x0028260a, // n0x0bd6 c0x0000 (---------------) + I higashiomi
+- 0x002691c6, // n0x0bd7 c0x0000 (---------------) + I hikone
+- 0x002458c4, // n0x0bd8 c0x0000 (---------------) + I koka
+- 0x002e69c5, // n0x0bd9 c0x0000 (---------------) + I konan
+- 0x00299e45, // n0x0bda c0x0000 (---------------) + I kosei
+- 0x0029c184, // n0x0bdb c0x0000 (---------------) + I koto
+- 0x0026ffc7, // n0x0bdc c0x0000 (---------------) + I kusatsu
+- 0x0025e647, // n0x0bdd c0x0000 (---------------) + I maibara
+- 0x002b7608, // n0x0bde c0x0000 (---------------) + I moriyama
+- 0x002a84c8, // n0x0bdf c0x0000 (---------------) + I nagahama
+- 0x0021d5c9, // n0x0be0 c0x0000 (---------------) + I nishiazai
+- 0x00305988, // n0x0be1 c0x0000 (---------------) + I notogawa
+- 0x002827cb, // n0x0be2 c0x0000 (---------------) + I omihachiman
+- 0x00202a44, // n0x0be3 c0x0000 (---------------) + I otsu
+- 0x0026f985, // n0x0be4 c0x0000 (---------------) + I ritto
+- 0x00285185, // n0x0be5 c0x0000 (---------------) + I ryuoh
+- 0x002cb949, // n0x0be6 c0x0000 (---------------) + I takashima
+- 0x002630c9, // n0x0be7 c0x0000 (---------------) + I takatsuki
+- 0x002df988, // n0x0be8 c0x0000 (---------------) + I torahime
+- 0x00259248, // n0x0be9 c0x0000 (---------------) + I toyosato
+- 0x002f1d04, // n0x0bea c0x0000 (---------------) + I yasu
+- 0x0029b885, // n0x0beb c0x0000 (---------------) + I akagi
+- 0x00204603, // n0x0bec c0x0000 (---------------) + I ama
+- 0x00239045, // n0x0bed c0x0000 (---------------) + I gotsu
+- 0x0028ee86, // n0x0bee c0x0000 (---------------) + I hamada
+- 0x0027decc, // n0x0bef c0x0000 (---------------) + I higashiizumo
+- 0x00235d46, // n0x0bf0 c0x0000 (---------------) + I hikawa
+- 0x0021fd46, // n0x0bf1 c0x0000 (---------------) + I hikimi
+- 0x00277585, // n0x0bf2 c0x0000 (---------------) + I izumo
+- 0x002d3048, // n0x0bf3 c0x0000 (---------------) + I kakinoki
+- 0x0029de86, // n0x0bf4 c0x0000 (---------------) + I masuda
+- 0x00302986, // n0x0bf5 c0x0000 (---------------) + I matsue
+- 0x00235ec6, // n0x0bf6 c0x0000 (---------------) + I misato
+- 0x0022d6cc, // n0x0bf7 c0x0000 (---------------) + I nishinoshima
+- 0x00260744, // n0x0bf8 c0x0000 (---------------) + I ohda
+- 0x002597ca, // n0x0bf9 c0x0000 (---------------) + I okinoshima
+- 0x002774c8, // n0x0bfa c0x0000 (---------------) + I okuizumo
+- 0x0027dd07, // n0x0bfb c0x0000 (---------------) + I shimane
+- 0x002afb46, // n0x0bfc c0x0000 (---------------) + I tamayu
+- 0x00258307, // n0x0bfd c0x0000 (---------------) + I tsuwano
+- 0x002cfbc5, // n0x0bfe c0x0000 (---------------) + I unnan
+- 0x0028c646, // n0x0bff c0x0000 (---------------) + I yakumo
+- 0x0030fc86, // n0x0c00 c0x0000 (---------------) + I yasugi
+- 0x00315b87, // n0x0c01 c0x0000 (---------------) + I yatsuka
+- 0x00296184, // n0x0c02 c0x0000 (---------------) + I arai
+- 0x002d4a45, // n0x0c03 c0x0000 (---------------) + I atami
+- 0x00268cc4, // n0x0c04 c0x0000 (---------------) + I fuji
+- 0x002dba87, // n0x0c05 c0x0000 (---------------) + I fujieda
+- 0x00268f08, // n0x0c06 c0x0000 (---------------) + I fujikawa
+- 0x0026968a, // n0x0c07 c0x0000 (---------------) + I fujinomiya
+- 0x0026dc47, // n0x0c08 c0x0000 (---------------) + I fukuroi
+- 0x0022d107, // n0x0c09 c0x0000 (---------------) + I gotemba
+- 0x00327807, // n0x0c0a c0x0000 (---------------) + I haibara
+- 0x002bc909, // n0x0c0b c0x0000 (---------------) + I hamamatsu
+- 0x0027deca, // n0x0c0c c0x0000 (---------------) + I higashiizu
+- 0x00231dc3, // n0x0c0d c0x0000 (---------------) + I ito
+- 0x00297045, // n0x0c0e c0x0000 (---------------) + I iwata
+- 0x00215943, // n0x0c0f c0x0000 (---------------) + I izu
+- 0x00311749, // n0x0c10 c0x0000 (---------------) + I izunokuni
+- 0x0024d7c8, // n0x0c11 c0x0000 (---------------) + I kakegawa
+- 0x002e0307, // n0x0c12 c0x0000 (---------------) + I kannami
+- 0x002aeec9, // n0x0c13 c0x0000 (---------------) + I kawanehon
+- 0x0026ca46, // n0x0c14 c0x0000 (---------------) + I kawazu
+- 0x00222408, // n0x0c15 c0x0000 (---------------) + I kikugawa
+- 0x00298d85, // n0x0c16 c0x0000 (---------------) + I kosai
+- 0x00273dca, // n0x0c17 c0x0000 (---------------) + I makinohara
+- 0x002b7789, // n0x0c18 c0x0000 (---------------) + I matsuzaki
+- 0x002435c9, // n0x0c19 c0x0000 (---------------) + I minamiizu
+- 0x002b1c07, // n0x0c1a c0x0000 (---------------) + I mishima
+- 0x0027cbc9, // n0x0c1b c0x0000 (---------------) + I morimachi
+- 0x00304848, // n0x0c1c c0x0000 (---------------) + I nishiizu
+- 0x002e57c6, // n0x0c1d c0x0000 (---------------) + I numazu
+- 0x002cab08, // n0x0c1e c0x0000 (---------------) + I omaezaki
+- 0x00265187, // n0x0c1f c0x0000 (---------------) + I shimada
+- 0x00231f07, // n0x0c20 c0x0000 (---------------) + I shimizu
+- 0x0025a347, // n0x0c21 c0x0000 (---------------) + I shimoda
+- 0x002e0188, // n0x0c22 c0x0000 (---------------) + I shizuoka
+- 0x002dc2c6, // n0x0c23 c0x0000 (---------------) + I susono
+- 0x00296885, // n0x0c24 c0x0000 (---------------) + I yaizu
+- 0x0026b347, // n0x0c25 c0x0000 (---------------) + I yoshida
+- 0x0027ec88, // n0x0c26 c0x0000 (---------------) + I ashikaga
+- 0x0033da44, // n0x0c27 c0x0000 (---------------) + I bato
+- 0x00312d44, // n0x0c28 c0x0000 (---------------) + I haga
+- 0x002e3607, // n0x0c29 c0x0000 (---------------) + I ichikai
+- 0x003074c7, // n0x0c2a c0x0000 (---------------) + I iwafune
+- 0x0031944a, // n0x0c2b c0x0000 (---------------) + I kaminokawa
+- 0x002e5746, // n0x0c2c c0x0000 (---------------) + I kanuma
+- 0x003113ca, // n0x0c2d c0x0000 (---------------) + I karasuyama
+- 0x002a75c7, // n0x0c2e c0x0000 (---------------) + I kuroiso
+- 0x00303747, // n0x0c2f c0x0000 (---------------) + I mashiko
+- 0x00275f84, // n0x0c30 c0x0000 (---------------) + I mibu
+- 0x002d5584, // n0x0c31 c0x0000 (---------------) + I moka
+- 0x002204c6, // n0x0c32 c0x0000 (---------------) + I motegi
+- 0x002bc344, // n0x0c33 c0x0000 (---------------) + I nasu
+- 0x002bc34c, // n0x0c34 c0x0000 (---------------) + I nasushiobara
+- 0x00213485, // n0x0c35 c0x0000 (---------------) + I nikko
+- 0x00253ec9, // n0x0c36 c0x0000 (---------------) + I nishikata
+- 0x0020e944, // n0x0c37 c0x0000 (---------------) + I nogi
+- 0x0029c245, // n0x0c38 c0x0000 (---------------) + I ohira
+- 0x00203b48, // n0x0c39 c0x0000 (---------------) + I ohtawara
+- 0x0025d505, // n0x0c3a c0x0000 (---------------) + I oyama
+- 0x00223586, // n0x0c3b c0x0000 (---------------) + I sakura
+- 0x003480c4, // n0x0c3c c0x0000 (---------------) + I sano
+- 0x002d7b8a, // n0x0c3d c0x0000 (---------------) + I shimotsuke
+- 0x002dbc46, // n0x0c3e c0x0000 (---------------) + I shioya
+- 0x0028744a, // n0x0c3f c0x0000 (---------------) + I takanezawa
+- 0x0033dac7, // n0x0c40 c0x0000 (---------------) + I tochigi
+- 0x0029b2c5, // n0x0c41 c0x0000 (---------------) + I tsuga
+- 0x00219185, // n0x0c42 c0x0000 (---------------) + I ujiie
+- 0x0029518a, // n0x0c43 c0x0000 (---------------) + I utsunomiya
+- 0x002680c5, // n0x0c44 c0x0000 (---------------) + I yaita
+- 0x00225a06, // n0x0c45 c0x0000 (---------------) + I aizumi
+- 0x00200944, // n0x0c46 c0x0000 (---------------) + I anan
+- 0x002a43c6, // n0x0c47 c0x0000 (---------------) + I ichiba
+- 0x003272c5, // n0x0c48 c0x0000 (---------------) + I itano
+- 0x00222d06, // n0x0c49 c0x0000 (---------------) + I kainan
+- 0x002b8e4c, // n0x0c4a c0x0000 (---------------) + I komatsushima
+- 0x002cbb0a, // n0x0c4b c0x0000 (---------------) + I matsushige
+- 0x0024c004, // n0x0c4c c0x0000 (---------------) + I mima
+- 0x00232146, // n0x0c4d c0x0000 (---------------) + I minami
+- 0x00284707, // n0x0c4e c0x0000 (---------------) + I miyoshi
+- 0x002bdac4, // n0x0c4f c0x0000 (---------------) + I mugi
+- 0x0028a488, // n0x0c50 c0x0000 (---------------) + I nakagawa
+- 0x0034b546, // n0x0c51 c0x0000 (---------------) + I naruto
+- 0x002ad7c9, // n0x0c52 c0x0000 (---------------) + I sanagochi
+- 0x002ddd49, // n0x0c53 c0x0000 (---------------) + I shishikui
+- 0x002daac9, // n0x0c54 c0x0000 (---------------) + I tokushima
+- 0x00232306, // n0x0c55 c0x0000 (---------------) + I wajiki
+- 0x00265286, // n0x0c56 c0x0000 (---------------) + I adachi
+- 0x002cac47, // n0x0c57 c0x0000 (---------------) + I akiruno
+- 0x0022fb88, // n0x0c58 c0x0000 (---------------) + I akishima
+- 0x00265089, // n0x0c59 c0x0000 (---------------) + I aogashima
+- 0x00308047, // n0x0c5a c0x0000 (---------------) + I arakawa
+- 0x00217c06, // n0x0c5b c0x0000 (---------------) + I bunkyo
+- 0x00206c87, // n0x0c5c c0x0000 (---------------) + I chiyoda
+- 0x002bfe85, // n0x0c5d c0x0000 (---------------) + I chofu
+- 0x0022afc4, // n0x0c5e c0x0000 (---------------) + I chuo
+- 0x002ca807, // n0x0c5f c0x0000 (---------------) + I edogawa
+- 0x0033dc85, // n0x0c60 c0x0000 (---------------) + I fuchu
+- 0x00273085, // n0x0c61 c0x0000 (---------------) + I fussa
+- 0x0024ba87, // n0x0c62 c0x0000 (---------------) + I hachijo
+- 0x00296688, // n0x0c63 c0x0000 (---------------) + I hachioji
+- 0x002762c6, // n0x0c64 c0x0000 (---------------) + I hamura
+- 0x0027fc4d, // n0x0c65 c0x0000 (---------------) + I higashikurume
+- 0x002813cf, // n0x0c66 c0x0000 (---------------) + I higashimurayama
+- 0x002876cd, // n0x0c67 c0x0000 (---------------) + I higashiyamato
+- 0x002199c4, // n0x0c68 c0x0000 (---------------) + I hino
+- 0x002c3846, // n0x0c69 c0x0000 (---------------) + I hinode
+- 0x00320a08, // n0x0c6a c0x0000 (---------------) + I hinohara
+- 0x002bb585, // n0x0c6b c0x0000 (---------------) + I inagi
+- 0x00288c48, // n0x0c6c c0x0000 (---------------) + I itabashi
+- 0x002c080a, // n0x0c6d c0x0000 (---------------) + I katsushika
+- 0x0021de44, // n0x0c6e c0x0000 (---------------) + I kita
+- 0x002dd3c6, // n0x0c6f c0x0000 (---------------) + I kiyose
+- 0x002e48c7, // n0x0c70 c0x0000 (---------------) + I kodaira
+- 0x0027ae07, // n0x0c71 c0x0000 (---------------) + I koganei
+- 0x00220709, // n0x0c72 c0x0000 (---------------) + I kokubunji
+- 0x002caac5, // n0x0c73 c0x0000 (---------------) + I komae
+- 0x0029c184, // n0x0c74 c0x0000 (---------------) + I koto
+- 0x0029e00a, // n0x0c75 c0x0000 (---------------) + I kouzushima
+- 0x002a50c9, // n0x0c76 c0x0000 (---------------) + I kunitachi
+- 0x0027ccc7, // n0x0c77 c0x0000 (---------------) + I machida
+- 0x00228406, // n0x0c78 c0x0000 (---------------) + I meguro
+- 0x003064c6, // n0x0c79 c0x0000 (---------------) + I minato
+- 0x0029b7c6, // n0x0c7a c0x0000 (---------------) + I mitaka
+- 0x0023ee46, // n0x0c7b c0x0000 (---------------) + I mizuho
+- 0x002c334f, // n0x0c7c c0x0000 (---------------) + I musashimurayama
+- 0x002c3709, // n0x0c7d c0x0000 (---------------) + I musashino
+- 0x0020cbc6, // n0x0c7e c0x0000 (---------------) + I nakano
+- 0x00323886, // n0x0c7f c0x0000 (---------------) + I nerima
+- 0x00230589, // n0x0c80 c0x0000 (---------------) + I ogasawara
+- 0x0029c7c7, // n0x0c81 c0x0000 (---------------) + I okutama
+- 0x0020ee83, // n0x0c82 c0x0000 (---------------) + I ome
+- 0x00217e86, // n0x0c83 c0x0000 (---------------) + I oshima
+- 0x00200383, // n0x0c84 c0x0000 (---------------) + I ota
+- 0x0033ed08, // n0x0c85 c0x0000 (---------------) + I setagaya
+- 0x002e06c7, // n0x0c86 c0x0000 (---------------) + I shibuya
+- 0x0028b589, // n0x0c87 c0x0000 (---------------) + I shinagawa
+- 0x002d9408, // n0x0c88 c0x0000 (---------------) + I shinjuku
+- 0x002bd188, // n0x0c89 c0x0000 (---------------) + I suginami
+- 0x00284dc6, // n0x0c8a c0x0000 (---------------) + I sumida
+- 0x00341949, // n0x0c8b c0x0000 (---------------) + I tachikawa
+- 0x00247e85, // n0x0c8c c0x0000 (---------------) + I taito
+- 0x00243f84, // n0x0c8d c0x0000 (---------------) + I tama
+- 0x002c50c7, // n0x0c8e c0x0000 (---------------) + I toshima
+- 0x0025b945, // n0x0c8f c0x0000 (---------------) + I chizu
+- 0x002199c4, // n0x0c90 c0x0000 (---------------) + I hino
+- 0x00272c48, // n0x0c91 c0x0000 (---------------) + I kawahara
+- 0x0020b104, // n0x0c92 c0x0000 (---------------) + I koge
+- 0x0029c507, // n0x0c93 c0x0000 (---------------) + I kotoura
+- 0x002d3c06, // n0x0c94 c0x0000 (---------------) + I misasa
+- 0x00258885, // n0x0c95 c0x0000 (---------------) + I nanbu
+- 0x002d8388, // n0x0c96 c0x0000 (---------------) + I nichinan
+- 0x0030638b, // n0x0c97 c0x0000 (---------------) + I sakaiminato
+- 0x0031bd07, // n0x0c98 c0x0000 (---------------) + I tottori
+- 0x00295406, // n0x0c99 c0x0000 (---------------) + I wakasa
+- 0x002b3344, // n0x0c9a c0x0000 (---------------) + I yazu
+- 0x00208206, // n0x0c9b c0x0000 (---------------) + I yonago
+- 0x002ad245, // n0x0c9c c0x0000 (---------------) + I asahi
+- 0x0033dc85, // n0x0c9d c0x0000 (---------------) + I fuchu
+- 0x0026d449, // n0x0c9e c0x0000 (---------------) + I fukumitsu
+- 0x0026fbc9, // n0x0c9f c0x0000 (---------------) + I funahashi
+- 0x00231f44, // n0x0ca0 c0x0000 (---------------) + I himi
+- 0x00231f85, // n0x0ca1 c0x0000 (---------------) + I imizu
+- 0x00232185, // n0x0ca2 c0x0000 (---------------) + I inami
+- 0x00273c46, // n0x0ca3 c0x0000 (---------------) + I johana
+- 0x002e3508, // n0x0ca4 c0x0000 (---------------) + I kamiichi
+- 0x002a6d06, // n0x0ca5 c0x0000 (---------------) + I kurobe
+- 0x00232a8b, // n0x0ca6 c0x0000 (---------------) + I nakaniikawa
+- 0x00202f0a, // n0x0ca7 c0x0000 (---------------) + I namerikawa
+- 0x0029ad45, // n0x0ca8 c0x0000 (---------------) + I nanto
+- 0x002785c6, // n0x0ca9 c0x0000 (---------------) + I nyuzen
+- 0x00338385, // n0x0caa c0x0000 (---------------) + I oyabe
+- 0x002b0805, // n0x0cab c0x0000 (---------------) + I taira
+- 0x002d87c7, // n0x0cac c0x0000 (---------------) + I takaoka
+- 0x002550c8, // n0x0cad c0x0000 (---------------) + I tateyama
+- 0x0027b404, // n0x0cae c0x0000 (---------------) + I toga
+- 0x00275e86, // n0x0caf c0x0000 (---------------) + I tonami
+- 0x0025d4c6, // n0x0cb0 c0x0000 (---------------) + I toyama
+- 0x00304a07, // n0x0cb1 c0x0000 (---------------) + I unazuki
+- 0x0022b044, // n0x0cb2 c0x0000 (---------------) + I uozu
+- 0x0026c046, // n0x0cb3 c0x0000 (---------------) + I yamada
+- 0x002b0045, // n0x0cb4 c0x0000 (---------------) + I arida
+- 0x002b0049, // n0x0cb5 c0x0000 (---------------) + I aridagawa
+- 0x002a32c4, // n0x0cb6 c0x0000 (---------------) + I gobo
+- 0x002d9a89, // n0x0cb7 c0x0000 (---------------) + I hashimoto
+- 0x0026a906, // n0x0cb8 c0x0000 (---------------) + I hidaka
+- 0x002a9808, // n0x0cb9 c0x0000 (---------------) + I hirogawa
+- 0x00232185, // n0x0cba c0x0000 (---------------) + I inami
+- 0x0024e385, // n0x0cbb c0x0000 (---------------) + I iwade
+- 0x00222d06, // n0x0cbc c0x0000 (---------------) + I kainan
+- 0x002be809, // n0x0cbd c0x0000 (---------------) + I kamitonda
+- 0x00254749, // n0x0cbe c0x0000 (---------------) + I katsuragi
+- 0x0021fdc6, // n0x0cbf c0x0000 (---------------) + I kimino
+- 0x0026e348, // n0x0cc0 c0x0000 (---------------) + I kinokawa
+- 0x00245b88, // n0x0cc1 c0x0000 (---------------) + I kitayama
+- 0x00338344, // n0x0cc2 c0x0000 (---------------) + I koya
+- 0x0029ee84, // n0x0cc3 c0x0000 (---------------) + I koza
+- 0x0029ee88, // n0x0cc4 c0x0000 (---------------) + I kozagawa
+- 0x002f99c8, // n0x0cc5 c0x0000 (---------------) + I kudoyama
+- 0x002920c9, // n0x0cc6 c0x0000 (---------------) + I kushimoto
+- 0x0028ee06, // n0x0cc7 c0x0000 (---------------) + I mihama
+- 0x00235ec6, // n0x0cc8 c0x0000 (---------------) + I misato
+- 0x002f634d, // n0x0cc9 c0x0000 (---------------) + I nachikatsuura
+- 0x002d8086, // n0x0cca c0x0000 (---------------) + I shingu
+- 0x002dbf09, // n0x0ccb c0x0000 (---------------) + I shirahama
+- 0x002eb0c5, // n0x0ccc c0x0000 (---------------) + I taiji
+- 0x00233446, // n0x0ccd c0x0000 (---------------) + I tanabe
+- 0x00341b08, // n0x0cce c0x0000 (---------------) + I wakayama
+- 0x0034ea05, // n0x0ccf c0x0000 (---------------) + I yuasa
+- 0x002ad4c4, // n0x0cd0 c0x0000 (---------------) + I yura
+- 0x002ad245, // n0x0cd1 c0x0000 (---------------) + I asahi
+- 0x0026f708, // n0x0cd2 c0x0000 (---------------) + I funagata
+- 0x002823c9, // n0x0cd3 c0x0000 (---------------) + I higashine
+- 0x00268d84, // n0x0cd4 c0x0000 (---------------) + I iide
+- 0x002528c6, // n0x0cd5 c0x0000 (---------------) + I kahoku
+- 0x0034740a, // n0x0cd6 c0x0000 (---------------) + I kaminoyama
+- 0x002db488, // n0x0cd7 c0x0000 (---------------) + I kaneyama
+- 0x003195c9, // n0x0cd8 c0x0000 (---------------) + I kawanishi
+- 0x002efcca, // n0x0cd9 c0x0000 (---------------) + I mamurogawa
+- 0x002aee46, // n0x0cda c0x0000 (---------------) + I mikawa
+- 0x00281588, // n0x0cdb c0x0000 (---------------) + I murayama
+- 0x002e8805, // n0x0cdc c0x0000 (---------------) + I nagai
+- 0x002e2008, // n0x0cdd c0x0000 (---------------) + I nakayama
+- 0x002a4205, // n0x0cde c0x0000 (---------------) + I nanyo
+- 0x0026c909, // n0x0cdf c0x0000 (---------------) + I nishikawa
+- 0x0022f509, // n0x0ce0 c0x0000 (---------------) + I obanazawa
+- 0x00213582, // n0x0ce1 c0x0000 (---------------) + I oe
+- 0x0025fb45, // n0x0ce2 c0x0000 (---------------) + I oguni
+- 0x00269506, // n0x0ce3 c0x0000 (---------------) + I ohkura
+- 0x0026a847, // n0x0ce4 c0x0000 (---------------) + I oishida
+- 0x00262185, // n0x0ce5 c0x0000 (---------------) + I sagae
+- 0x00262fc6, // n0x0ce6 c0x0000 (---------------) + I sakata
+- 0x0034eac8, // n0x0ce7 c0x0000 (---------------) + I sakegawa
+- 0x002d8586, // n0x0ce8 c0x0000 (---------------) + I shinjo
+- 0x002dd649, // n0x0ce9 c0x0000 (---------------) + I shirataka
+- 0x0022ea86, // n0x0cea c0x0000 (---------------) + I shonai
+- 0x00327b48, // n0x0ceb c0x0000 (---------------) + I takahata
+- 0x00292c05, // n0x0cec c0x0000 (---------------) + I tendo
+- 0x0028f306, // n0x0ced c0x0000 (---------------) + I tozawa
+- 0x002a8248, // n0x0cee c0x0000 (---------------) + I tsuruoka
+- 0x0026ee08, // n0x0cef c0x0000 (---------------) + I yamagata
+- 0x002045c8, // n0x0cf0 c0x0000 (---------------) + I yamanobe
+- 0x00251808, // n0x0cf1 c0x0000 (---------------) + I yonezawa
+- 0x00292784, // n0x0cf2 c0x0000 (---------------) + I yuza
+- 0x0022ae03, // n0x0cf3 c0x0000 (---------------) + I abu
+- 0x002dd884, // n0x0cf4 c0x0000 (---------------) + I hagi
+- 0x0029d946, // n0x0cf5 c0x0000 (---------------) + I hikari
+- 0x002bfec4, // n0x0cf6 c0x0000 (---------------) + I hofu
+- 0x0032ec07, // n0x0cf7 c0x0000 (---------------) + I iwakuni
+- 0x00302889, // n0x0cf8 c0x0000 (---------------) + I kudamatsu
+- 0x002b2bc5, // n0x0cf9 c0x0000 (---------------) + I mitou
+- 0x00240006, // n0x0cfa c0x0000 (---------------) + I nagato
+- 0x00217e86, // n0x0cfb c0x0000 (---------------) + I oshima
+- 0x002d69cb, // n0x0cfc c0x0000 (---------------) + I shimonoseki
+- 0x0029ac86, // n0x0cfd c0x0000 (---------------) + I shunan
+- 0x002f9cc6, // n0x0cfe c0x0000 (---------------) + I tabuse
+- 0x002f8208, // n0x0cff c0x0000 (---------------) + I tokuyama
+- 0x0025c546, // n0x0d00 c0x0000 (---------------) + I toyota
+- 0x00272043, // n0x0d01 c0x0000 (---------------) + I ube
+- 0x0025e183, // n0x0d02 c0x0000 (---------------) + I yuu
+- 0x0022afc4, // n0x0d03 c0x0000 (---------------) + I chuo
+- 0x002e0645, // n0x0d04 c0x0000 (---------------) + I doshi
+- 0x0026e087, // n0x0d05 c0x0000 (---------------) + I fuefuki
+- 0x00268f08, // n0x0d06 c0x0000 (---------------) + I fujikawa
+- 0x00268f0f, // n0x0d07 c0x0000 (---------------) + I fujikawaguchiko
+- 0x0026b24b, // n0x0d08 c0x0000 (---------------) + I fujiyoshida
+- 0x002e3308, // n0x0d09 c0x0000 (---------------) + I hayakawa
+- 0x00252946, // n0x0d0a c0x0000 (---------------) + I hokuto
+- 0x00235cce, // n0x0d0b c0x0000 (---------------) + I ichikawamisato
+- 0x00222d03, // n0x0d0c c0x0000 (---------------) + I kai
+- 0x0022b584, // n0x0d0d c0x0000 (---------------) + I kofu
+- 0x0029ac05, // n0x0d0e c0x0000 (---------------) + I koshu
+- 0x0029c006, // n0x0d0f c0x0000 (---------------) + I kosuge
+- 0x0027a24b, // n0x0d10 c0x0000 (---------------) + I minami-alps
+- 0x0027d446, // n0x0d11 c0x0000 (---------------) + I minobu
+- 0x00238ac9, // n0x0d12 c0x0000 (---------------) + I nakamichi
+- 0x00258885, // n0x0d13 c0x0000 (---------------) + I nanbu
+- 0x00339748, // n0x0d14 c0x0000 (---------------) + I narusawa
+- 0x00217388, // n0x0d15 c0x0000 (---------------) + I nirasaki
+- 0x0025460c, // n0x0d16 c0x0000 (---------------) + I nishikatsura
+- 0x00288446, // n0x0d17 c0x0000 (---------------) + I oshino
+- 0x00239086, // n0x0d18 c0x0000 (---------------) + I otsuki
+- 0x002d92c5, // n0x0d19 c0x0000 (---------------) + I showa
+- 0x002734c8, // n0x0d1a c0x0000 (---------------) + I tabayama
+- 0x00202a85, // n0x0d1b c0x0000 (---------------) + I tsuru
+- 0x0024fcc8, // n0x0d1c c0x0000 (---------------) + I uenohara
+- 0x00287b0a, // n0x0d1d c0x0000 (---------------) + I yamanakako
+- 0x00248c49, // n0x0d1e c0x0000 (---------------) + I yamanashi
+- 0x0074a404, // n0x0d1f c0x0001 (---------------) ! I city
+- 0x0020d643, // n0x0d20 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0d21 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0d22 c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x0d23 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x0d24 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0d25 c0x0000 (---------------) + I org
+- 0x0030c243, // n0x0d26 c0x0000 (---------------) + I biz
+- 0x0020d643, // n0x0d27 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0d28 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0d29 c0x0000 (---------------) + I gov
+- 0x00210e04, // n0x0d2a c0x0000 (---------------) + I info
+- 0x00214843, // n0x0d2b c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0d2c c0x0000 (---------------) + I org
+- 0x002072c3, // n0x0d2d c0x0000 (---------------) + I ass
+- 0x002072c4, // n0x0d2e c0x0000 (---------------) + I asso
+- 0x0020d643, // n0x0d2f c0x0000 (---------------) + I com
+- 0x0023ae84, // n0x0d30 c0x0000 (---------------) + I coop
+- 0x002df843, // n0x0d31 c0x0000 (---------------) + I edu
+- 0x00257384, // n0x0d32 c0x0000 (---------------) + I gouv
+- 0x00218d43, // n0x0d33 c0x0000 (---------------) + I gov
+- 0x002efac7, // n0x0d34 c0x0000 (---------------) + I medecin
+- 0x0022f003, // n0x0d35 c0x0000 (---------------) + I mil
+- 0x00216583, // n0x0d36 c0x0000 (---------------) + I nom
+- 0x00277b88, // n0x0d37 c0x0000 (---------------) + I notaires
+- 0x0023e983, // n0x0d38 c0x0000 (---------------) + I org
+- 0x002c70cb, // n0x0d39 c0x0000 (---------------) + I pharmaciens
+- 0x00261ec3, // n0x0d3a c0x0000 (---------------) + I prd
+- 0x003460c6, // n0x0d3b c0x0000 (---------------) + I presse
+- 0x0023a842, // n0x0d3c c0x0000 (---------------) + I tm
+- 0x002c1b4b, // n0x0d3d c0x0000 (---------------) + I veterinaire
+- 0x002df843, // n0x0d3e c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0d3f c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0d40 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0d41 c0x0000 (---------------) + I org
+- 0x0020d643, // n0x0d42 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0d43 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0d44 c0x0000 (---------------) + I gov
+- 0x0023e983, // n0x0d45 c0x0000 (---------------) + I org
+- 0x00270e83, // n0x0d46 c0x0000 (---------------) + I rep
+- 0x0020c683, // n0x0d47 c0x0000 (---------------) + I tra
+- 0x00206c42, // n0x0d48 c0x0000 (---------------) + I ac
+- 0x0003c708, // n0x0d49 c0x0000 (---------------) + blogspot
+- 0x00233085, // n0x0d4a c0x0000 (---------------) + I busan
+- 0x0030da08, // n0x0d4b c0x0000 (---------------) + I chungbuk
+- 0x0031b188, // n0x0d4c c0x0000 (---------------) + I chungnam
+- 0x0020d642, // n0x0d4d c0x0000 (---------------) + I co
+- 0x00236ac5, // n0x0d4e c0x0000 (---------------) + I daegu
+- 0x002bcb47, // n0x0d4f c0x0000 (---------------) + I daejeon
+- 0x00201e42, // n0x0d50 c0x0000 (---------------) + I es
+- 0x00238d07, // n0x0d51 c0x0000 (---------------) + I gangwon
+- 0x00200482, // n0x0d52 c0x0000 (---------------) + I go
+- 0x00279707, // n0x0d53 c0x0000 (---------------) + I gwangju
+- 0x002fa089, // n0x0d54 c0x0000 (---------------) + I gyeongbuk
+- 0x00340e48, // n0x0d55 c0x0000 (---------------) + I gyeonggi
+- 0x0022a9c9, // n0x0d56 c0x0000 (---------------) + I gyeongnam
+- 0x00212e82, // n0x0d57 c0x0000 (---------------) + I hs
+- 0x00256f87, // n0x0d58 c0x0000 (---------------) + I incheon
+- 0x0030a6c4, // n0x0d59 c0x0000 (---------------) + I jeju
+- 0x002bcc07, // n0x0d5a c0x0000 (---------------) + I jeonbuk
+- 0x00202e07, // n0x0d5b c0x0000 (---------------) + I jeonnam
+- 0x0025c902, // n0x0d5c c0x0000 (---------------) + I kg
+- 0x0022f003, // n0x0d5d c0x0000 (---------------) + I mil
+- 0x00201342, // n0x0d5e c0x0000 (---------------) + I ms
+- 0x00203e82, // n0x0d5f c0x0000 (---------------) + I ne
+- 0x00200a82, // n0x0d60 c0x0000 (---------------) + I or
+- 0x00209242, // n0x0d61 c0x0000 (---------------) + I pe
+- 0x00201602, // n0x0d62 c0x0000 (---------------) + I re
+- 0x00201d82, // n0x0d63 c0x0000 (---------------) + I sc
+- 0x002e7d05, // n0x0d64 c0x0000 (---------------) + I seoul
+- 0x00239e45, // n0x0d65 c0x0000 (---------------) + I ulsan
+- 0x0020d643, // n0x0d66 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0d67 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0d68 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0d69 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0d6a c0x0000 (---------------) + I org
+- 0x0020d643, // n0x0d6b c0x0000 (---------------) + I com
+- 0x002df843, // n0x0d6c c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0d6d c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x0d6e c0x0000 (---------------) + I mil
+- 0x00214843, // n0x0d6f c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0d70 c0x0000 (---------------) + I org
+- 0x00000501, // n0x0d71 c0x0000 (---------------) + c
+- 0x0020d643, // n0x0d72 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0d73 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0d74 c0x0000 (---------------) + I gov
+- 0x00210e04, // n0x0d75 c0x0000 (---------------) + I info
+- 0x00217543, // n0x0d76 c0x0000 (---------------) + I int
+- 0x00214843, // n0x0d77 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0d78 c0x0000 (---------------) + I org
+- 0x00210803, // n0x0d79 c0x0000 (---------------) + I per
+- 0x0020d643, // n0x0d7a c0x0000 (---------------) + I com
+- 0x002df843, // n0x0d7b c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0d7c c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0d7d c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0d7e c0x0000 (---------------) + I org
+- 0x0020d642, // n0x0d7f c0x0000 (---------------) + I co
+- 0x0020d643, // n0x0d80 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0d81 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0d82 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0d83 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0d84 c0x0000 (---------------) + I org
+- 0x002aaa04, // n0x0d85 c0x0000 (---------------) + I assn
+- 0x0020d643, // n0x0d86 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0d87 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0d88 c0x0000 (---------------) + I gov
+- 0x0024f943, // n0x0d89 c0x0000 (---------------) + I grp
+- 0x002937c5, // n0x0d8a c0x0000 (---------------) + I hotel
+- 0x00217543, // n0x0d8b c0x0000 (---------------) + I int
+- 0x0023c1c3, // n0x0d8c c0x0000 (---------------) + I ltd
+- 0x00214843, // n0x0d8d c0x0000 (---------------) + I net
+- 0x00200443, // n0x0d8e c0x0000 (---------------) + I ngo
+- 0x0023e983, // n0x0d8f c0x0000 (---------------) + I org
+- 0x00201d83, // n0x0d90 c0x0000 (---------------) + I sch
+- 0x002a4d43, // n0x0d91 c0x0000 (---------------) + I soc
+- 0x00205e43, // n0x0d92 c0x0000 (---------------) + I web
+- 0x0020d643, // n0x0d93 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0d94 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0d95 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0d96 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0d97 c0x0000 (---------------) + I org
+- 0x0020d642, // n0x0d98 c0x0000 (---------------) + I co
+- 0x0023e983, // n0x0d99 c0x0000 (---------------) + I org
+- 0x00218d43, // n0x0d9a c0x0000 (---------------) + I gov
+- 0x00226343, // n0x0d9b c0x0000 (---------------) + I asn
+- 0x0020d643, // n0x0d9c c0x0000 (---------------) + I com
+- 0x00299344, // n0x0d9d c0x0000 (---------------) + I conf
+- 0x002df843, // n0x0d9e c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0d9f c0x0000 (---------------) + I gov
+- 0x00202282, // n0x0da0 c0x0000 (---------------) + I id
+- 0x0022f003, // n0x0da1 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x0da2 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0da3 c0x0000 (---------------) + I org
+- 0x0020d643, // n0x0da4 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0da5 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0da6 c0x0000 (---------------) + I gov
+- 0x00202282, // n0x0da7 c0x0000 (---------------) + I id
+- 0x0023dbc3, // n0x0da8 c0x0000 (---------------) + I med
+- 0x00214843, // n0x0da9 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0daa c0x0000 (---------------) + I org
+- 0x002cd4c3, // n0x0dab c0x0000 (---------------) + I plc
+- 0x00201d83, // n0x0dac c0x0000 (---------------) + I sch
+- 0x00206c42, // n0x0dad c0x0000 (---------------) + I ac
+- 0x0020d642, // n0x0dae c0x0000 (---------------) + I co
+- 0x00218d43, // n0x0daf c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0db0 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0db1 c0x0000 (---------------) + I org
+- 0x003460c5, // n0x0db2 c0x0000 (---------------) + I press
+- 0x002072c4, // n0x0db3 c0x0000 (---------------) + I asso
+- 0x0023a842, // n0x0db4 c0x0000 (---------------) + I tm
+- 0x00206c42, // n0x0db5 c0x0000 (---------------) + I ac
+- 0x0020d642, // n0x0db6 c0x0000 (---------------) + I co
+- 0x002df843, // n0x0db7 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0db8 c0x0000 (---------------) + I gov
+- 0x00230a03, // n0x0db9 c0x0000 (---------------) + I its
+- 0x00214843, // n0x0dba c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0dbb c0x0000 (---------------) + I org
+- 0x002d1204, // n0x0dbc c0x0000 (---------------) + I priv
+- 0x0020d643, // n0x0dbd c0x0000 (---------------) + I com
+- 0x002df843, // n0x0dbe c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0dbf c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x0dc0 c0x0000 (---------------) + I mil
+- 0x00216583, // n0x0dc1 c0x0000 (---------------) + I nom
+- 0x0023e983, // n0x0dc2 c0x0000 (---------------) + I org
+- 0x00261ec3, // n0x0dc3 c0x0000 (---------------) + I prd
+- 0x0023a842, // n0x0dc4 c0x0000 (---------------) + I tm
+- 0x0020d643, // n0x0dc5 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0dc6 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0dc7 c0x0000 (---------------) + I gov
+- 0x00210e03, // n0x0dc8 c0x0000 (---------------) + I inf
+- 0x00202f04, // n0x0dc9 c0x0000 (---------------) + I name
+- 0x00214843, // n0x0dca c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0dcb c0x0000 (---------------) + I org
+- 0x0020d643, // n0x0dcc c0x0000 (---------------) + I com
+- 0x002df843, // n0x0dcd c0x0000 (---------------) + I edu
+- 0x00257384, // n0x0dce c0x0000 (---------------) + I gouv
+- 0x00218d43, // n0x0dcf c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0dd0 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0dd1 c0x0000 (---------------) + I org
+- 0x003460c6, // n0x0dd2 c0x0000 (---------------) + I presse
+- 0x002df843, // n0x0dd3 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0dd4 c0x0000 (---------------) + I gov
+- 0x00017943, // n0x0dd5 c0x0000 (---------------) + nyc
+- 0x0023e983, // n0x0dd6 c0x0000 (---------------) + I org
+- 0x0020d643, // n0x0dd7 c0x0000 (---------------) + I com
+- 0x002df843, // n0x0dd8 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x0dd9 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0dda c0x0000 (---------------) + I net
+- 0x0023e983, // n0x0ddb c0x0000 (---------------) + I org
+- 0x0003c708, // n0x0ddc c0x0000 (---------------) + blogspot
+- 0x00218d43, // n0x0ddd c0x0000 (---------------) + I gov
+- 0x00206c42, // n0x0dde c0x0000 (---------------) + I ac
+- 0x0020d642, // n0x0ddf c0x0000 (---------------) + I co
+- 0x0020d643, // n0x0de0 c0x0000 (---------------) + I com
+- 0x00218d43, // n0x0de1 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x0de2 c0x0000 (---------------) + I net
+- 0x00200a82, // n0x0de3 c0x0000 (---------------) + I or
+- 0x0023e983, // n0x0de4 c0x0000 (---------------) + I org
+- 0x00290507, // n0x0de5 c0x0000 (---------------) + I academy
+- 0x0020b64b, // n0x0de6 c0x0000 (---------------) + I agriculture
+- 0x002200c3, // n0x0de7 c0x0000 (---------------) + I air
+- 0x002200c8, // n0x0de8 c0x0000 (---------------) + I airguard
+- 0x0022f907, // n0x0de9 c0x0000 (---------------) + I alabama
+- 0x00207686, // n0x0dea c0x0000 (---------------) + I alaska
+- 0x002ac185, // n0x0deb c0x0000 (---------------) + I amber
+- 0x0020b989, // n0x0dec c0x0000 (---------------) + I ambulance
+- 0x00229b48, // n0x0ded c0x0000 (---------------) + I american
+- 0x00229b49, // n0x0dee c0x0000 (---------------) + I americana
+- 0x00319f10, // n0x0def c0x0000 (---------------) + I americanantiques
+- 0x00229b4b, // n0x0df0 c0x0000 (---------------) + I americanart
+- 0x002abfc9, // n0x0df1 c0x0000 (---------------) + I amsterdam
+- 0x00202583, // n0x0df2 c0x0000 (---------------) + I and
+- 0x0021d0c9, // n0x0df3 c0x0000 (---------------) + I annefrank
+- 0x00238186, // n0x0df4 c0x0000 (---------------) + I anthro
+- 0x0023818c, // n0x0df5 c0x0000 (---------------) + I anthropology
+- 0x00233148, // n0x0df6 c0x0000 (---------------) + I antiques
+- 0x00271b88, // n0x0df7 c0x0000 (---------------) + I aquarium
+- 0x00302d89, // n0x0df8 c0x0000 (---------------) + I arboretum
+- 0x002cebce, // n0x0df9 c0x0000 (---------------) + I archaeological
+- 0x00329e8b, // n0x0dfa c0x0000 (---------------) + I archaeology
+- 0x0024454c, // n0x0dfb c0x0000 (---------------) + I architecture
+- 0x0020e343, // n0x0dfc c0x0000 (---------------) + I art
+- 0x00229d4c, // n0x0dfd c0x0000 (---------------) + I artanddesign
+- 0x002af749, // n0x0dfe c0x0000 (---------------) + I artcenter
+- 0x0020e347, // n0x0dff c0x0000 (---------------) + I artdeco
+- 0x002ef50c, // n0x0e00 c0x0000 (---------------) + I arteducation
+- 0x0023a50a, // n0x0e01 c0x0000 (---------------) + I artgallery
+- 0x00230884, // n0x0e02 c0x0000 (---------------) + I arts
+- 0x0026b7cd, // n0x0e03 c0x0000 (---------------) + I artsandcrafts
+- 0x002af608, // n0x0e04 c0x0000 (---------------) + I asmatart
+- 0x0021e58d, // n0x0e05 c0x0000 (---------------) + I assassination
+- 0x0020ac86, // n0x0e06 c0x0000 (---------------) + I assisi
+- 0x002c6b0b, // n0x0e07 c0x0000 (---------------) + I association
+- 0x002bc609, // n0x0e08 c0x0000 (---------------) + I astronomy
+- 0x002e73c7, // n0x0e09 c0x0000 (---------------) + I atlanta
+- 0x002bc1c6, // n0x0e0a c0x0000 (---------------) + I austin
+- 0x002ae609, // n0x0e0b c0x0000 (---------------) + I australia
+- 0x002bb8ca, // n0x0e0c c0x0000 (---------------) + I automotive
+- 0x0022cc48, // n0x0e0d c0x0000 (---------------) + I aviation
+- 0x00231904, // n0x0e0e c0x0000 (---------------) + I axis
+- 0x00289447, // n0x0e0f c0x0000 (---------------) + I badajoz
+- 0x002e0907, // n0x0e10 c0x0000 (---------------) + I baghdad
+- 0x00299d44, // n0x0e11 c0x0000 (---------------) + I bahn
+- 0x00236c04, // n0x0e12 c0x0000 (---------------) + I bale
+- 0x0034c749, // n0x0e13 c0x0000 (---------------) + I baltimore
+- 0x0030b1c9, // n0x0e14 c0x0000 (---------------) + I barcelona
+- 0x00293a48, // n0x0e15 c0x0000 (---------------) + I baseball
+- 0x00336ec5, // n0x0e16 c0x0000 (---------------) + I basel
+- 0x00212dc5, // n0x0e17 c0x0000 (---------------) + I baths
+- 0x002793c6, // n0x0e18 c0x0000 (---------------) + I bauern
+- 0x0026b689, // n0x0e19 c0x0000 (---------------) + I beauxarts
+- 0x0020474d, // n0x0e1a c0x0000 (---------------) + I beeldengeluid
+- 0x002a2c48, // n0x0e1b c0x0000 (---------------) + I bellevue
+- 0x002792c7, // n0x0e1c c0x0000 (---------------) + I bergbau
+- 0x002ac208, // n0x0e1d c0x0000 (---------------) + I berkeley
+- 0x0034d706, // n0x0e1e c0x0000 (---------------) + I berlin
+- 0x00200004, // n0x0e1f c0x0000 (---------------) + I bern
+- 0x00214605, // n0x0e20 c0x0000 (---------------) + I bible
+- 0x0020a906, // n0x0e21 c0x0000 (---------------) + I bilbao
+- 0x0020c504, // n0x0e22 c0x0000 (---------------) + I bill
+- 0x0020e247, // n0x0e23 c0x0000 (---------------) + I birdart
+- 0x0020fe4a, // n0x0e24 c0x0000 (---------------) + I birthplace
+- 0x002133c4, // n0x0e25 c0x0000 (---------------) + I bonn
+- 0x00215b06, // n0x0e26 c0x0000 (---------------) + I boston
+- 0x00216189, // n0x0e27 c0x0000 (---------------) + I botanical
+- 0x0021618f, // n0x0e28 c0x0000 (---------------) + I botanicalgarden
+- 0x0021708d, // n0x0e29 c0x0000 (---------------) + I botanicgarden
+- 0x00217846, // n0x0e2a c0x0000 (---------------) + I botany
+- 0x002192d0, // n0x0e2b c0x0000 (---------------) + I brandywinevalley
+- 0x00219d46, // n0x0e2c c0x0000 (---------------) + I brasil
+- 0x0021b307, // n0x0e2d c0x0000 (---------------) + I bristol
+- 0x0021bcc7, // n0x0e2e c0x0000 (---------------) + I british
+- 0x0021cb0f, // n0x0e2f c0x0000 (---------------) + I britishcolumbia
+- 0x0021e149, // n0x0e30 c0x0000 (---------------) + I broadcast
+- 0x00222606, // n0x0e31 c0x0000 (---------------) + I brunel
+- 0x002233c7, // n0x0e32 c0x0000 (---------------) + I brussel
+- 0x002233c8, // n0x0e33 c0x0000 (---------------) + I brussels
+- 0x00223809, // n0x0e34 c0x0000 (---------------) + I bruxelles
+- 0x00202688, // n0x0e35 c0x0000 (---------------) + I building
+- 0x002cbec7, // n0x0e36 c0x0000 (---------------) + I burghof
+- 0x00233083, // n0x0e37 c0x0000 (---------------) + I bus
+- 0x0027d1c6, // n0x0e38 c0x0000 (---------------) + I bushey
+- 0x002fdc88, // n0x0e39 c0x0000 (---------------) + I cadaques
+- 0x002c118a, // n0x0e3a c0x0000 (---------------) + I california
+- 0x0023e749, // n0x0e3b c0x0000 (---------------) + I cambridge
+- 0x00223183, // n0x0e3c c0x0000 (---------------) + I can
+- 0x0029ed06, // n0x0e3d c0x0000 (---------------) + I canada
+- 0x00275cca, // n0x0e3e c0x0000 (---------------) + I capebreton
+- 0x002ec787, // n0x0e3f c0x0000 (---------------) + I carrier
+- 0x002ef34a, // n0x0e40 c0x0000 (---------------) + I cartoonart
+- 0x00228f8e, // n0x0e41 c0x0000 (---------------) + I casadelamoneda
+- 0x0021e286, // n0x0e42 c0x0000 (---------------) + I castle
+- 0x00345d07, // n0x0e43 c0x0000 (---------------) + I castres
+- 0x002543c6, // n0x0e44 c0x0000 (---------------) + I celtic
+- 0x00240c46, // n0x0e45 c0x0000 (---------------) + I center
+- 0x0023964b, // n0x0e46 c0x0000 (---------------) + I chattanooga
+- 0x0023f58a, // n0x0e47 c0x0000 (---------------) + I cheltenham
+- 0x00244bcd, // n0x0e48 c0x0000 (---------------) + I chesapeakebay
+- 0x00265347, // n0x0e49 c0x0000 (---------------) + I chicago
+- 0x0021f7c8, // n0x0e4a c0x0000 (---------------) + I children
+- 0x0021f7c9, // n0x0e4b c0x0000 (---------------) + I childrens
+- 0x0021f7cf, // n0x0e4c c0x0000 (---------------) + I childrensgarden
+- 0x00291b4c, // n0x0e4d c0x0000 (---------------) + I chiropractic
+- 0x002a9dc9, // n0x0e4e c0x0000 (---------------) + I chocolate
+- 0x0024864e, // n0x0e4f c0x0000 (---------------) + I christiansburg
+- 0x002c998a, // n0x0e50 c0x0000 (---------------) + I cincinnati
+- 0x002efbc6, // n0x0e51 c0x0000 (---------------) + I cinema
+- 0x003357c6, // n0x0e52 c0x0000 (---------------) + I circus
+- 0x0022d40c, // n0x0e53 c0x0000 (---------------) + I civilisation
+- 0x0022d9cc, // n0x0e54 c0x0000 (---------------) + I civilization
+- 0x0022e048, // n0x0e55 c0x0000 (---------------) + I civilwar
+- 0x0022e887, // n0x0e56 c0x0000 (---------------) + I clinton
+- 0x002278c5, // n0x0e57 c0x0000 (---------------) + I clock
+- 0x002658c4, // n0x0e58 c0x0000 (---------------) + I coal
+- 0x003165ce, // n0x0e59 c0x0000 (---------------) + I coastaldefence
+- 0x0020e484, // n0x0e5a c0x0000 (---------------) + I cody
+- 0x002bf947, // n0x0e5b c0x0000 (---------------) + I coldwar
+- 0x00252e4a, // n0x0e5c c0x0000 (---------------) + I collection
+- 0x0024c854, // n0x0e5d c0x0000 (---------------) + I colonialwilliamsburg
+- 0x00214b4f, // n0x0e5e c0x0000 (---------------) + I coloradoplateau
+- 0x0021ccc8, // n0x0e5f c0x0000 (---------------) + I columbia
+- 0x00232f48, // n0x0e60 c0x0000 (---------------) + I columbus
+- 0x00285acd, // n0x0e61 c0x0000 (---------------) + I communication
+- 0x00285ace, // n0x0e62 c0x0000 (---------------) + I communications
+- 0x002c57c9, // n0x0e63 c0x0000 (---------------) + I community
+- 0x00234388, // n0x0e64 c0x0000 (---------------) + I computer
+- 0x0023438f, // n0x0e65 c0x0000 (---------------) + I computerhistory
+- 0x0023a20c, // n0x0e66 c0x0000 (---------------) + I contemporary
+- 0x0023a20f, // n0x0e67 c0x0000 (---------------) + I contemporaryart
+- 0x0023aac7, // n0x0e68 c0x0000 (---------------) + I convent
+- 0x0023b5ca, // n0x0e69 c0x0000 (---------------) + I copenhagen
+- 0x0023c9cb, // n0x0e6a c0x0000 (---------------) + I corporation
+- 0x0023cc88, // n0x0e6b c0x0000 (---------------) + I corvette
+- 0x0023da87, // n0x0e6c c0x0000 (---------------) + I costume
+- 0x0033594d, // n0x0e6d c0x0000 (---------------) + I countryestate
+- 0x0023dfc6, // n0x0e6e c0x0000 (---------------) + I county
+- 0x0026b986, // n0x0e6f c0x0000 (---------------) + I crafts
+- 0x0023eac9, // n0x0e70 c0x0000 (---------------) + I cranbrook
+- 0x002c1e08, // n0x0e71 c0x0000 (---------------) + I creation
+- 0x00240a48, // n0x0e72 c0x0000 (---------------) + I cultural
+- 0x00240a4e, // n0x0e73 c0x0000 (---------------) + I culturalcenter
+- 0x0020b747, // n0x0e74 c0x0000 (---------------) + I culture
+- 0x002c7b85, // n0x0e75 c0x0000 (---------------) + I cyber
+- 0x00241245, // n0x0e76 c0x0000 (---------------) + I cymru
+- 0x00203944, // n0x0e77 c0x0000 (---------------) + I dali
+- 0x002624c6, // n0x0e78 c0x0000 (---------------) + I dallas
+- 0x00293948, // n0x0e79 c0x0000 (---------------) + I database
+- 0x00283d03, // n0x0e7a c0x0000 (---------------) + I ddr
+- 0x0023be0e, // n0x0e7b c0x0000 (---------------) + I decorativearts
+- 0x00335d08, // n0x0e7c c0x0000 (---------------) + I delaware
+- 0x0026ac8b, // n0x0e7d c0x0000 (---------------) + I delmenhorst
+- 0x00226507, // n0x0e7e c0x0000 (---------------) + I denmark
+- 0x0024e445, // n0x0e7f c0x0000 (---------------) + I depot
+- 0x00229ec6, // n0x0e80 c0x0000 (---------------) + I design
+- 0x00294107, // n0x0e81 c0x0000 (---------------) + I detroit
+- 0x002c2fc8, // n0x0e82 c0x0000 (---------------) + I dinosaur
+- 0x002aeb49, // n0x0e83 c0x0000 (---------------) + I discovery
+- 0x0021ad05, // n0x0e84 c0x0000 (---------------) + I dolls
+- 0x00272948, // n0x0e85 c0x0000 (---------------) + I donostia
+- 0x002ebc86, // n0x0e86 c0x0000 (---------------) + I durham
+- 0x00275aca, // n0x0e87 c0x0000 (---------------) + I eastafrica
+- 0x003164c9, // n0x0e88 c0x0000 (---------------) + I eastcoast
+- 0x002ef5c9, // n0x0e89 c0x0000 (---------------) + I education
+- 0x002ef5cb, // n0x0e8a c0x0000 (---------------) + I educational
+- 0x00211b48, // n0x0e8b c0x0000 (---------------) + I egyptian
+- 0x00299c09, // n0x0e8c c0x0000 (---------------) + I eisenbahn
+- 0x00336f86, // n0x0e8d c0x0000 (---------------) + I elburg
+- 0x00259aca, // n0x0e8e c0x0000 (---------------) + I elvendrell
+- 0x003184ca, // n0x0e8f c0x0000 (---------------) + I embroidery
+- 0x0031898c, // n0x0e90 c0x0000 (---------------) + I encyclopedic
+- 0x0020eb07, // n0x0e91 c0x0000 (---------------) + I england
+- 0x00340c4a, // n0x0e92 c0x0000 (---------------) + I entomology
+- 0x00283e8b, // n0x0e93 c0x0000 (---------------) + I environment
+- 0x00283e99, // n0x0e94 c0x0000 (---------------) + I environmentalconservation
+- 0x00319a08, // n0x0e95 c0x0000 (---------------) + I epilepsy
+- 0x00346145, // n0x0e96 c0x0000 (---------------) + I essex
+- 0x002b5d86, // n0x0e97 c0x0000 (---------------) + I estate
+- 0x0022a809, // n0x0e98 c0x0000 (---------------) + I ethnology
+- 0x0021bb46, // n0x0e99 c0x0000 (---------------) + I exeter
+- 0x0033fd8a, // n0x0e9a c0x0000 (---------------) + I exhibition
+- 0x00309546, // n0x0e9b c0x0000 (---------------) + I family
+- 0x00201284, // n0x0e9c c0x0000 (---------------) + I farm
+- 0x0033520d, // n0x0e9d c0x0000 (---------------) + I farmequipment
+- 0x002bb287, // n0x0e9e c0x0000 (---------------) + I farmers
+- 0x00201289, // n0x0e9f c0x0000 (---------------) + I farmstead
+- 0x00241485, // n0x0ea0 c0x0000 (---------------) + I field
+- 0x002415c8, // n0x0ea1 c0x0000 (---------------) + I figueres
+- 0x00242449, // n0x0ea2 c0x0000 (---------------) + I filatelia
+- 0x00242684, // n0x0ea3 c0x0000 (---------------) + I film
+- 0x00242a87, // n0x0ea4 c0x0000 (---------------) + I fineart
+- 0x00242a88, // n0x0ea5 c0x0000 (---------------) + I finearts
+- 0x00243007, // n0x0ea6 c0x0000 (---------------) + I finland
+- 0x00323d88, // n0x0ea7 c0x0000 (---------------) + I flanders
+- 0x00246707, // n0x0ea8 c0x0000 (---------------) + I florida
+- 0x00249645, // n0x0ea9 c0x0000 (---------------) + I force
+- 0x0024ae8c, // n0x0eaa c0x0000 (---------------) + I fortmissoula
+- 0x0024b889, // n0x0eab c0x0000 (---------------) + I fortworth
+- 0x0034254a, // n0x0eac c0x0000 (---------------) + I foundation
+- 0x00334649, // n0x0ead c0x0000 (---------------) + I francaise
+- 0x0021d1c9, // n0x0eae c0x0000 (---------------) + I frankfurt
+- 0x0032364c, // n0x0eaf c0x0000 (---------------) + I franziskaner
+- 0x00207f8b, // n0x0eb0 c0x0000 (---------------) + I freemasonry
+- 0x0024ea08, // n0x0eb1 c0x0000 (---------------) + I freiburg
+- 0x0024fec8, // n0x0eb2 c0x0000 (---------------) + I fribourg
+- 0x00250584, // n0x0eb3 c0x0000 (---------------) + I frog
+- 0x00270448, // n0x0eb4 c0x0000 (---------------) + I fundacio
+- 0x00270cc9, // n0x0eb5 c0x0000 (---------------) + I furniture
+- 0x0023a5c7, // n0x0eb6 c0x0000 (---------------) + I gallery
+- 0x002163c6, // n0x0eb7 c0x0000 (---------------) + I garden
+- 0x00292607, // n0x0eb8 c0x0000 (---------------) + I gateway
+- 0x002b0ec9, // n0x0eb9 c0x0000 (---------------) + I geelvinck
+- 0x002c0f8b, // n0x0eba c0x0000 (---------------) + I gemological
+- 0x00327087, // n0x0ebb c0x0000 (---------------) + I geology
+- 0x0023e907, // n0x0ebc c0x0000 (---------------) + I georgia
+- 0x0020e9c7, // n0x0ebd c0x0000 (---------------) + I giessen
+- 0x0021e504, // n0x0ebe c0x0000 (---------------) + I glas
+- 0x0021e505, // n0x0ebf c0x0000 (---------------) + I glass
+- 0x002a7485, // n0x0ec0 c0x0000 (---------------) + I gorge
+- 0x002fe94b, // n0x0ec1 c0x0000 (---------------) + I grandrapids
+- 0x00337e04, // n0x0ec2 c0x0000 (---------------) + I graz
+- 0x00278b88, // n0x0ec3 c0x0000 (---------------) + I guernsey
+- 0x0027234a, // n0x0ec4 c0x0000 (---------------) + I halloffame
+- 0x002ebd47, // n0x0ec5 c0x0000 (---------------) + I hamburg
+- 0x00331c87, // n0x0ec6 c0x0000 (---------------) + I handson
+- 0x00279ad2, // n0x0ec7 c0x0000 (---------------) + I harvestcelebration
+- 0x0027c8c6, // n0x0ec8 c0x0000 (---------------) + I hawaii
+- 0x00246b06, // n0x0ec9 c0x0000 (---------------) + I health
+- 0x0022534e, // n0x0eca c0x0000 (---------------) + I heimatunduhren
+- 0x002d46c6, // n0x0ecb c0x0000 (---------------) + I hellas
+- 0x00347c08, // n0x0ecc c0x0000 (---------------) + I helsinki
+- 0x002f354f, // n0x0ecd c0x0000 (---------------) + I hembygdsforbund
+- 0x00318308, // n0x0ece c0x0000 (---------------) + I heritage
+- 0x00275508, // n0x0ecf c0x0000 (---------------) + I histoire
+- 0x002bde4a, // n0x0ed0 c0x0000 (---------------) + I historical
+- 0x002bde51, // n0x0ed1 c0x0000 (---------------) + I historicalsociety
+- 0x0028c8ce, // n0x0ed2 c0x0000 (---------------) + I historichouses
+- 0x00201bca, // n0x0ed3 c0x0000 (---------------) + I historisch
+- 0x00201bcc, // n0x0ed4 c0x0000 (---------------) + I historisches
+- 0x00234587, // n0x0ed5 c0x0000 (---------------) + I history
+- 0x00234590, // n0x0ed6 c0x0000 (---------------) + I historyofscience
+- 0x00209888, // n0x0ed7 c0x0000 (---------------) + I horology
+- 0x0028cac5, // n0x0ed8 c0x0000 (---------------) + I house
+- 0x00294e0a, // n0x0ed9 c0x0000 (---------------) + I humanities
+- 0x0020c54c, // n0x0eda c0x0000 (---------------) + I illustration
+- 0x002dfc0d, // n0x0edb c0x0000 (---------------) + I imageandsound
+- 0x002051c6, // n0x0edc c0x0000 (---------------) + I indian
+- 0x002051c7, // n0x0edd c0x0000 (---------------) + I indiana
+- 0x002051cc, // n0x0ede c0x0000 (---------------) + I indianapolis
+- 0x0020c0cc, // n0x0edf c0x0000 (---------------) + I indianmarket
+- 0x0021754c, // n0x0ee0 c0x0000 (---------------) + I intelligence
+- 0x002b52cb, // n0x0ee1 c0x0000 (---------------) + I interactive
+- 0x00271b04, // n0x0ee2 c0x0000 (---------------) + I iraq
+- 0x00283f44, // n0x0ee3 c0x0000 (---------------) + I iron
+- 0x00330a49, // n0x0ee4 c0x0000 (---------------) + I isleofman
+- 0x00301d47, // n0x0ee5 c0x0000 (---------------) + I jamison
+- 0x00253889, // n0x0ee6 c0x0000 (---------------) + I jefferson
+- 0x002e81c9, // n0x0ee7 c0x0000 (---------------) + I jerusalem
+- 0x0031acc7, // n0x0ee8 c0x0000 (---------------) + I jewelry
+- 0x00348d06, // n0x0ee9 c0x0000 (---------------) + I jewish
+- 0x00348d09, // n0x0eea c0x0000 (---------------) + I jewishart
+- 0x00297783, // n0x0eeb c0x0000 (---------------) + I jfk
+- 0x0021680a, // n0x0eec c0x0000 (---------------) + I journalism
+- 0x00230047, // n0x0eed c0x0000 (---------------) + I judaica
+- 0x00207b4b, // n0x0eee c0x0000 (---------------) + I judygarland
+- 0x00244a4a, // n0x0eef c0x0000 (---------------) + I juedisches
+- 0x0030a744, // n0x0ef0 c0x0000 (---------------) + I juif
+- 0x00315cc6, // n0x0ef1 c0x0000 (---------------) + I karate
+- 0x0029d9c9, // n0x0ef2 c0x0000 (---------------) + I karikatur
+- 0x00211f84, // n0x0ef3 c0x0000 (---------------) + I kids
+- 0x0021354a, // n0x0ef4 c0x0000 (---------------) + I koebenhavn
+- 0x00295705, // n0x0ef5 c0x0000 (---------------) + I koeln
+- 0x002a63c5, // n0x0ef6 c0x0000 (---------------) + I kunst
+- 0x002a63cd, // n0x0ef7 c0x0000 (---------------) + I kunstsammlung
+- 0x002a670e, // n0x0ef8 c0x0000 (---------------) + I kunstunddesign
+- 0x002f7845, // n0x0ef9 c0x0000 (---------------) + I labor
+- 0x00339b86, // n0x0efa c0x0000 (---------------) + I labour
+- 0x00250187, // n0x0efb c0x0000 (---------------) + I lajolla
+- 0x002782ca, // n0x0efc c0x0000 (---------------) + I lancashire
+- 0x0021ec86, // n0x0efd c0x0000 (---------------) + I landes
+- 0x002f4704, // n0x0efe c0x0000 (---------------) + I lans
+- 0x002e2887, // n0x0eff c0x0000 (---------------) + I larsson
+- 0x0022eecb, // n0x0f00 c0x0000 (---------------) + I lewismiller
+- 0x0034d7c7, // n0x0f01 c0x0000 (---------------) + I lincoln
+- 0x0033f284, // n0x0f02 c0x0000 (---------------) + I linz
+- 0x0032f006, // n0x0f03 c0x0000 (---------------) + I living
+- 0x0032f00d, // n0x0f04 c0x0000 (---------------) + I livinghistory
+- 0x0025250c, // n0x0f05 c0x0000 (---------------) + I localhistory
+- 0x002b4d86, // n0x0f06 c0x0000 (---------------) + I london
+- 0x0020a08a, // n0x0f07 c0x0000 (---------------) + I losangeles
+- 0x00212ac6, // n0x0f08 c0x0000 (---------------) + I louvre
+- 0x0033f888, // n0x0f09 c0x0000 (---------------) + I loyalist
+- 0x0028a847, // n0x0f0a c0x0000 (---------------) + I lucerne
+- 0x002387ca, // n0x0f0b c0x0000 (---------------) + I luxembourg
+- 0x0023c2c6, // n0x0f0c c0x0000 (---------------) + I luzern
+- 0x002628c3, // n0x0f0d c0x0000 (---------------) + I mad
+- 0x002628c6, // n0x0f0e c0x0000 (---------------) + I madrid
+- 0x002fdb08, // n0x0f0f c0x0000 (---------------) + I mallorca
+- 0x002829ca, // n0x0f10 c0x0000 (---------------) + I manchester
+- 0x00269bc7, // n0x0f11 c0x0000 (---------------) + I mansion
+- 0x00269bc8, // n0x0f12 c0x0000 (---------------) + I mansions
+- 0x00202d04, // n0x0f13 c0x0000 (---------------) + I manx
+- 0x00239447, // n0x0f14 c0x0000 (---------------) + I marburg
+- 0x0024f5c8, // n0x0f15 c0x0000 (---------------) + I maritime
+- 0x00249308, // n0x0f16 c0x0000 (---------------) + I maritimo
+- 0x00280908, // n0x0f17 c0x0000 (---------------) + I maryland
+- 0x0028ad8a, // n0x0f18 c0x0000 (---------------) + I marylhurst
+- 0x0023dbc5, // n0x0f19 c0x0000 (---------------) + I media
+- 0x00247ac7, // n0x0f1a c0x0000 (---------------) + I medical
+- 0x0027ff13, // n0x0f1b c0x0000 (---------------) + I medizinhistorisches
+- 0x002d6086, // n0x0f1c c0x0000 (---------------) + I meeres
+- 0x00346d08, // n0x0f1d c0x0000 (---------------) + I memorial
+- 0x002dcec9, // n0x0f1e c0x0000 (---------------) + I mesaverde
+- 0x00238bc8, // n0x0f1f c0x0000 (---------------) + I michigan
+- 0x00284e4b, // n0x0f20 c0x0000 (---------------) + I midatlantic
+- 0x002bd508, // n0x0f21 c0x0000 (---------------) + I military
+- 0x0022f004, // n0x0f22 c0x0000 (---------------) + I mill
+- 0x002f2546, // n0x0f23 c0x0000 (---------------) + I miners
+- 0x002d7a06, // n0x0f24 c0x0000 (---------------) + I mining
+- 0x002cb689, // n0x0f25 c0x0000 (---------------) + I minnesota
+- 0x002b1f47, // n0x0f26 c0x0000 (---------------) + I missile
+- 0x0024af88, // n0x0f27 c0x0000 (---------------) + I missoula
+- 0x0028c746, // n0x0f28 c0x0000 (---------------) + I modern
+- 0x00285604, // n0x0f29 c0x0000 (---------------) + I moma
+- 0x002b3fc5, // n0x0f2a c0x0000 (---------------) + I money
+- 0x002b4248, // n0x0f2b c0x0000 (---------------) + I monmouth
+- 0x002b4b8a, // n0x0f2c c0x0000 (---------------) + I monticello
+- 0x002b5b88, // n0x0f2d c0x0000 (---------------) + I montreal
+- 0x002b99c6, // n0x0f2e c0x0000 (---------------) + I moscow
+- 0x002830ca, // n0x0f2f c0x0000 (---------------) + I motorcycle
+- 0x00278f08, // n0x0f30 c0x0000 (---------------) + I muenchen
+- 0x002bd8c8, // n0x0f31 c0x0000 (---------------) + I muenster
+- 0x002c1408, // n0x0f32 c0x0000 (---------------) + I mulhouse
+- 0x002c2286, // n0x0f33 c0x0000 (---------------) + I muncie
+- 0x002c4606, // n0x0f34 c0x0000 (---------------) + I museet
+- 0x0034034c, // n0x0f35 c0x0000 (---------------) + I museumcenter
+- 0x002c4950, // n0x0f36 c0x0000 (---------------) + I museumvereniging
+- 0x002b5985, // n0x0f37 c0x0000 (---------------) + I music
+- 0x0021e748, // n0x0f38 c0x0000 (---------------) + I national
+- 0x002c9b10, // n0x0f39 c0x0000 (---------------) + I nationalfirearms
+- 0x00318110, // n0x0f3a c0x0000 (---------------) + I nationalheritage
+- 0x00319d8e, // n0x0f3b c0x0000 (---------------) + I nativeamerican
+- 0x0033ffce, // n0x0f3c c0x0000 (---------------) + I naturalhistory
+- 0x0033ffd4, // n0x0f3d c0x0000 (---------------) + I naturalhistorymuseum
+- 0x0034d94f, // n0x0f3e c0x0000 (---------------) + I naturalsciences
+- 0x0034dd06, // n0x0f3f c0x0000 (---------------) + I nature
+- 0x00201a91, // n0x0f40 c0x0000 (---------------) + I naturhistorisches
+- 0x00208e53, // n0x0f41 c0x0000 (---------------) + I natuurwetenschappen
+- 0x002092c8, // n0x0f42 c0x0000 (---------------) + I naumburg
+- 0x0020be45, // n0x0f43 c0x0000 (---------------) + I naval
+- 0x002fb108, // n0x0f44 c0x0000 (---------------) + I nebraska
+- 0x002b1745, // n0x0f45 c0x0000 (---------------) + I neues
+- 0x00308b4c, // n0x0f46 c0x0000 (---------------) + I newhampshire
+- 0x00224309, // n0x0f47 c0x0000 (---------------) + I newjersey
+- 0x002bf789, // n0x0f48 c0x0000 (---------------) + I newmexico
+- 0x00292387, // n0x0f49 c0x0000 (---------------) + I newport
+- 0x00307609, // n0x0f4a c0x0000 (---------------) + I newspaper
+- 0x0023d487, // n0x0f4b c0x0000 (---------------) + I newyork
+- 0x002dc946, // n0x0f4c c0x0000 (---------------) + I niepce
+- 0x00214407, // n0x0f4d c0x0000 (---------------) + I norfolk
+- 0x00206105, // n0x0f4e c0x0000 (---------------) + I north
+- 0x0023c403, // n0x0f4f c0x0000 (---------------) + I nrw
+- 0x00203649, // n0x0f50 c0x0000 (---------------) + I nuernberg
+- 0x00279509, // n0x0f51 c0x0000 (---------------) + I nuremberg
+- 0x00217943, // n0x0f52 c0x0000 (---------------) + I nyc
+- 0x002cd884, // n0x0f53 c0x0000 (---------------) + I nyny
+- 0x002004cd, // n0x0f54 c0x0000 (---------------) + I oceanographic
+- 0x00200bcf, // n0x0f55 c0x0000 (---------------) + I oceanographique
+- 0x0029bdc5, // n0x0f56 c0x0000 (---------------) + I omaha
+- 0x002fb006, // n0x0f57 c0x0000 (---------------) + I online
+- 0x0022f387, // n0x0f58 c0x0000 (---------------) + I ontario
+- 0x0023f9c7, // n0x0f59 c0x0000 (---------------) + I openair
+- 0x0031f946, // n0x0f5a c0x0000 (---------------) + I oregon
+- 0x0031f94b, // n0x0f5b c0x0000 (---------------) + I oregontrail
+- 0x0028e2c5, // n0x0f5c c0x0000 (---------------) + I otago
+- 0x00203406, // n0x0f5d c0x0000 (---------------) + I oxford
+- 0x00261307, // n0x0f5e c0x0000 (---------------) + I pacific
+- 0x00286109, // n0x0f5f c0x0000 (---------------) + I paderborn
+- 0x0033e806, // n0x0f60 c0x0000 (---------------) + I palace
+- 0x00211285, // n0x0f61 c0x0000 (---------------) + I paleo
+- 0x0030e04b, // n0x0f62 c0x0000 (---------------) + I palmsprings
+- 0x0023a946, // n0x0f63 c0x0000 (---------------) + I panama
+- 0x00309c05, // n0x0f64 c0x0000 (---------------) + I paris
+- 0x002c6008, // n0x0f65 c0x0000 (---------------) + I pasadena
+- 0x002c7a08, // n0x0f66 c0x0000 (---------------) + I pharmacy
+- 0x002c830c, // n0x0f67 c0x0000 (---------------) + I philadelphia
+- 0x002c8310, // n0x0f68 c0x0000 (---------------) + I philadelphiaarea
+- 0x002c89c9, // n0x0f69 c0x0000 (---------------) + I philately
+- 0x002c8c07, // n0x0f6a c0x0000 (---------------) + I phoenix
+- 0x002ca1cb, // n0x0f6b c0x0000 (---------------) + I photography
+- 0x002caf86, // n0x0f6c c0x0000 (---------------) + I pilots
+- 0x002cbd8a, // n0x0f6d c0x0000 (---------------) + I pittsburgh
+- 0x002cc48b, // n0x0f6e c0x0000 (---------------) + I planetarium
+- 0x002ccc8a, // n0x0f6f c0x0000 (---------------) + I plantation
+- 0x002ccf06, // n0x0f70 c0x0000 (---------------) + I plants
+- 0x002cd385, // n0x0f71 c0x0000 (---------------) + I plaza
+- 0x0022f806, // n0x0f72 c0x0000 (---------------) + I portal
+- 0x002a7b88, // n0x0f73 c0x0000 (---------------) + I portland
+- 0x0029244a, // n0x0f74 c0x0000 (---------------) + I portlligat
+- 0x0028575c, // n0x0f75 c0x0000 (---------------) + I posts-and-telecommunications
+- 0x002cfe8c, // n0x0f76 c0x0000 (---------------) + I preservation
+- 0x002d0188, // n0x0f77 c0x0000 (---------------) + I presidio
+- 0x003460c5, // n0x0f78 c0x0000 (---------------) + I press
+- 0x002d1b07, // n0x0f79 c0x0000 (---------------) + I project
+- 0x0029ebc6, // n0x0f7a c0x0000 (---------------) + I public
+- 0x00345a05, // n0x0f7b c0x0000 (---------------) + I pubol
+- 0x00200ec6, // n0x0f7c c0x0000 (---------------) + I quebec
+- 0x0031fb08, // n0x0f7d c0x0000 (---------------) + I railroad
+- 0x00297187, // n0x0f7e c0x0000 (---------------) + I railway
+- 0x002ceac8, // n0x0f7f c0x0000 (---------------) + I research
+- 0x00345e0a, // n0x0f80 c0x0000 (---------------) + I resistance
+- 0x00331e8c, // n0x0f81 c0x0000 (---------------) + I riodejaneiro
+- 0x0032b449, // n0x0f82 c0x0000 (---------------) + I rochester
+- 0x00240187, // n0x0f83 c0x0000 (---------------) + I rockart
+- 0x0029bd84, // n0x0f84 c0x0000 (---------------) + I roma
+- 0x00241306, // n0x0f85 c0x0000 (---------------) + I russia
+- 0x0027508a, // n0x0f86 c0x0000 (---------------) + I saintlouis
+- 0x002e82c5, // n0x0f87 c0x0000 (---------------) + I salem
+- 0x0024178c, // n0x0f88 c0x0000 (---------------) + I salvadordali
+- 0x00242c48, // n0x0f89 c0x0000 (---------------) + I salzburg
+- 0x002f8d88, // n0x0f8a c0x0000 (---------------) + I sandiego
+- 0x0024c5cc, // n0x0f8b c0x0000 (---------------) + I sanfrancisco
+- 0x00263d4c, // n0x0f8c c0x0000 (---------------) + I santabarbara
+- 0x00269d89, // n0x0f8d c0x0000 (---------------) + I santacruz
+- 0x0026bac7, // n0x0f8e c0x0000 (---------------) + I santafe
+- 0x002c9ecc, // n0x0f8f c0x0000 (---------------) + I saskatchewan
+- 0x002d7304, // n0x0f90 c0x0000 (---------------) + I satx
+- 0x002980ca, // n0x0f91 c0x0000 (---------------) + I savannahga
+- 0x0026380c, // n0x0f92 c0x0000 (---------------) + I schlesisches
+- 0x0027a4cb, // n0x0f93 c0x0000 (---------------) + I schoenbrunn
+- 0x002ba20b, // n0x0f94 c0x0000 (---------------) + I schokoladen
+- 0x002baa06, // n0x0f95 c0x0000 (---------------) + I school
+- 0x002c3f87, // n0x0f96 c0x0000 (---------------) + I schweiz
+- 0x002089c7, // n0x0f97 c0x0000 (---------------) + I science
+- 0x002347cf, // n0x0f98 c0x0000 (---------------) + I science-fiction
+- 0x002eced1, // n0x0f99 c0x0000 (---------------) + I scienceandhistory
+- 0x002089d2, // n0x0f9a c0x0000 (---------------) + I scienceandindustry
+- 0x002c734d, // n0x0f9b c0x0000 (---------------) + I sciencecenter
+- 0x002c734e, // n0x0f9c c0x0000 (---------------) + I sciencecenters
+- 0x002c768e, // n0x0f9d c0x0000 (---------------) + I sciencehistory
+- 0x0034db08, // n0x0f9e c0x0000 (---------------) + I sciences
+- 0x0034db12, // n0x0f9f c0x0000 (---------------) + I sciencesnaturelles
+- 0x0021eb88, // n0x0fa0 c0x0000 (---------------) + I scotland
+- 0x002f2fc7, // n0x0fa1 c0x0000 (---------------) + I seaport
+- 0x00254e8a, // n0x0fa2 c0x0000 (---------------) + I settlement
+- 0x0020da48, // n0x0fa3 c0x0000 (---------------) + I settlers
+- 0x002d4685, // n0x0fa4 c0x0000 (---------------) + I shell
+- 0x002d4e0a, // n0x0fa5 c0x0000 (---------------) + I sherbrooke
+- 0x0020ad87, // n0x0fa6 c0x0000 (---------------) + I sibenik
+- 0x0031edc4, // n0x0fa7 c0x0000 (---------------) + I silk
+- 0x00202203, // n0x0fa8 c0x0000 (---------------) + I ski
+- 0x0023e545, // n0x0fa9 c0x0000 (---------------) + I skole
+- 0x002be0c7, // n0x0faa c0x0000 (---------------) + I society
+- 0x002d1d87, // n0x0fab c0x0000 (---------------) + I sologne
+- 0x002dfe0e, // n0x0fac c0x0000 (---------------) + I soundandvision
+- 0x002e444d, // n0x0fad c0x0000 (---------------) + I southcarolina
+- 0x002e4a89, // n0x0fae c0x0000 (---------------) + I southwest
+- 0x002e5285, // n0x0faf c0x0000 (---------------) + I space
+- 0x002e6d03, // n0x0fb0 c0x0000 (---------------) + I spy
+- 0x002e6f46, // n0x0fb1 c0x0000 (---------------) + I square
+- 0x00255a45, // n0x0fb2 c0x0000 (---------------) + I stadt
+- 0x00228a48, // n0x0fb3 c0x0000 (---------------) + I stalbans
+- 0x002d4bc9, // n0x0fb4 c0x0000 (---------------) + I starnberg
+- 0x002b5dc5, // n0x0fb5 c0x0000 (---------------) + I state
+- 0x00335b4f, // n0x0fb6 c0x0000 (---------------) + I stateofdelaware
+- 0x002a4f07, // n0x0fb7 c0x0000 (---------------) + I station
+- 0x002c1845, // n0x0fb8 c0x0000 (---------------) + I steam
+- 0x00290d4a, // n0x0fb9 c0x0000 (---------------) + I steiermark
+- 0x002e8e46, // n0x0fba c0x0000 (---------------) + I stjohn
+- 0x002e9389, // n0x0fbb c0x0000 (---------------) + I stockholm
+- 0x002ea0cc, // n0x0fbc c0x0000 (---------------) + I stpetersburg
+- 0x002ea849, // n0x0fbd c0x0000 (---------------) + I stuttgart
+- 0x0025d106, // n0x0fbe c0x0000 (---------------) + I suisse
+- 0x0027214c, // n0x0fbf c0x0000 (---------------) + I surgeonshall
+- 0x00300006, // n0x0fc0 c0x0000 (---------------) + I surrey
+- 0x002ec408, // n0x0fc1 c0x0000 (---------------) + I svizzera
+- 0x0026c7c6, // n0x0fc2 c0x0000 (---------------) + I sweden
+- 0x0025cf46, // n0x0fc3 c0x0000 (---------------) + I sydney
+- 0x00324084, // n0x0fc4 c0x0000 (---------------) + I tank
+- 0x00230fc3, // n0x0fc5 c0x0000 (---------------) + I tcm
+- 0x002e8bca, // n0x0fc6 c0x0000 (---------------) + I technology
+- 0x002d0dd1, // n0x0fc7 c0x0000 (---------------) + I telekommunikation
+- 0x0023b10a, // n0x0fc8 c0x0000 (---------------) + I television
+- 0x0023ce05, // n0x0fc9 c0x0000 (---------------) + I texas
+- 0x0023f147, // n0x0fca c0x0000 (---------------) + I textile
+- 0x00229487, // n0x0fcb c0x0000 (---------------) + I theater
+- 0x0024f6c4, // n0x0fcc c0x0000 (---------------) + I time
+- 0x0024f6cb, // n0x0fcd c0x0000 (---------------) + I timekeeping
+- 0x002f9f08, // n0x0fce c0x0000 (---------------) + I topology
+- 0x002a3ac6, // n0x0fcf c0x0000 (---------------) + I torino
+- 0x0024e1c5, // n0x0fd0 c0x0000 (---------------) + I touch
+- 0x0023c8c4, // n0x0fd1 c0x0000 (---------------) + I town
+- 0x002d4209, // n0x0fd2 c0x0000 (---------------) + I transport
+- 0x0031c184, // n0x0fd3 c0x0000 (---------------) + I tree
+- 0x002686c7, // n0x0fd4 c0x0000 (---------------) + I trolley
+- 0x002d3745, // n0x0fd5 c0x0000 (---------------) + I trust
+- 0x002d3747, // n0x0fd6 c0x0000 (---------------) + I trustee
+- 0x00225585, // n0x0fd7 c0x0000 (---------------) + I uhren
+- 0x00203f83, // n0x0fd8 c0x0000 (---------------) + I ulm
+- 0x002f2e88, // n0x0fd9 c0x0000 (---------------) + I undersea
+- 0x00209b8a, // n0x0fda c0x0000 (---------------) + I university
+- 0x002159c3, // n0x0fdb c0x0000 (---------------) + I usa
+- 0x002330ca, // n0x0fdc c0x0000 (---------------) + I usantiques
+- 0x00230806, // n0x0fdd c0x0000 (---------------) + I usarts
+- 0x003358cf, // n0x0fde c0x0000 (---------------) + I uscountryestate
+- 0x00314f49, // n0x0fdf c0x0000 (---------------) + I usculture
+- 0x0023bd90, // n0x0fe0 c0x0000 (---------------) + I usdecorativearts
+- 0x002d67c8, // n0x0fe1 c0x0000 (---------------) + I usgarden
+- 0x002b9c49, // n0x0fe2 c0x0000 (---------------) + I ushistory
+- 0x0027ea07, // n0x0fe3 c0x0000 (---------------) + I ushuaia
+- 0x0032ef8f, // n0x0fe4 c0x0000 (---------------) + I uslivinghistory
+- 0x0022c944, // n0x0fe5 c0x0000 (---------------) + I utah
+- 0x00257404, // n0x0fe6 c0x0000 (---------------) + I uvic
+- 0x00219546, // n0x0fe7 c0x0000 (---------------) + I valley
+- 0x002a24c6, // n0x0fe8 c0x0000 (---------------) + I vantaa
+- 0x002eb68a, // n0x0fe9 c0x0000 (---------------) + I versailles
+- 0x002e7246, // n0x0fea c0x0000 (---------------) + I viking
+- 0x00307d07, // n0x0feb c0x0000 (---------------) + I village
+- 0x002f0748, // n0x0fec c0x0000 (---------------) + I virginia
+- 0x002f0947, // n0x0fed c0x0000 (---------------) + I virtual
+- 0x002f0b07, // n0x0fee c0x0000 (---------------) + I virtuel
+- 0x002f6e8a, // n0x0fef c0x0000 (---------------) + I vlaanderen
+- 0x002f2ccb, // n0x0ff0 c0x0000 (---------------) + I volkenkunde
+- 0x00205885, // n0x0ff1 c0x0000 (---------------) + I wales
+- 0x00208608, // n0x0ff2 c0x0000 (---------------) + I wallonie
+- 0x00203c43, // n0x0ff3 c0x0000 (---------------) + I war
+- 0x002bfbcc, // n0x0ff4 c0x0000 (---------------) + I washingtondc
+- 0x002efecf, // n0x0ff5 c0x0000 (---------------) + I watch-and-clock
+- 0x002276cd, // n0x0ff6 c0x0000 (---------------) + I watchandclock
+- 0x002e4bc7, // n0x0ff7 c0x0000 (---------------) + I western
+- 0x002311c9, // n0x0ff8 c0x0000 (---------------) + I westfalen
+- 0x0022bb47, // n0x0ff9 c0x0000 (---------------) + I whaling
+- 0x0022be08, // n0x0ffa c0x0000 (---------------) + I wildlife
+- 0x0024ca4c, // n0x0ffb c0x0000 (---------------) + I williamsburg
+- 0x0028a688, // n0x0ffc c0x0000 (---------------) + I windmill
+- 0x00303fc8, // n0x0ffd c0x0000 (---------------) + I workshop
+- 0x002d73ce, // n0x0ffe c0x0000 (---------------) + I xn--9dbhblg6di
+- 0x002fc594, // n0x0fff c0x0000 (---------------) + I xn--comunicaes-v6a2o
+- 0x002fcaa4, // n0x1000 c0x0000 (---------------) + I xn--correios-e-telecomunicaes-ghc29a
+- 0x003097ca, // n0x1001 c0x0000 (---------------) + I xn--h1aegh
+- 0x0031c28b, // n0x1002 c0x0000 (---------------) + I xn--lns-qla
+- 0x0023d544, // n0x1003 c0x0000 (---------------) + I york
+- 0x0023d549, // n0x1004 c0x0000 (---------------) + I yorkshire
+- 0x002dd448, // n0x1005 c0x0000 (---------------) + I yosemite
+- 0x00296585, // n0x1006 c0x0000 (---------------) + I youth
+- 0x00335f4a, // n0x1007 c0x0000 (---------------) + I zoological
+- 0x00234e87, // n0x1008 c0x0000 (---------------) + I zoology
+- 0x00228d84, // n0x1009 c0x0000 (---------------) + I aero
+- 0x0030c243, // n0x100a c0x0000 (---------------) + I biz
+- 0x0020d643, // n0x100b c0x0000 (---------------) + I com
+- 0x0023ae84, // n0x100c c0x0000 (---------------) + I coop
+- 0x002df843, // n0x100d c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x100e c0x0000 (---------------) + I gov
+- 0x00210e04, // n0x100f c0x0000 (---------------) + I info
+- 0x00217543, // n0x1010 c0x0000 (---------------) + I int
+- 0x0022f003, // n0x1011 c0x0000 (---------------) + I mil
+- 0x002c4946, // n0x1012 c0x0000 (---------------) + I museum
+- 0x00202f04, // n0x1013 c0x0000 (---------------) + I name
+- 0x00214843, // n0x1014 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x1015 c0x0000 (---------------) + I org
+- 0x002d1383, // n0x1016 c0x0000 (---------------) + I pro
+- 0x00206c42, // n0x1017 c0x0000 (---------------) + I ac
+- 0x0030c243, // n0x1018 c0x0000 (---------------) + I biz
+- 0x0020d642, // n0x1019 c0x0000 (---------------) + I co
+- 0x0020d643, // n0x101a c0x0000 (---------------) + I com
+- 0x0023ae84, // n0x101b c0x0000 (---------------) + I coop
+- 0x002df843, // n0x101c c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x101d c0x0000 (---------------) + I gov
+- 0x00217543, // n0x101e c0x0000 (---------------) + I int
+- 0x002c4946, // n0x101f c0x0000 (---------------) + I museum
+- 0x00214843, // n0x1020 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x1021 c0x0000 (---------------) + I org
+- 0x0003c708, // n0x1022 c0x0000 (---------------) + blogspot
+- 0x0020d643, // n0x1023 c0x0000 (---------------) + I com
+- 0x002df843, // n0x1024 c0x0000 (---------------) + I edu
+- 0x00265483, // n0x1025 c0x0000 (---------------) + I gob
+- 0x00214843, // n0x1026 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x1027 c0x0000 (---------------) + I org
+- 0x0020d643, // n0x1028 c0x0000 (---------------) + I com
+- 0x002df843, // n0x1029 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x102a c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x102b c0x0000 (---------------) + I mil
+- 0x00202f04, // n0x102c c0x0000 (---------------) + I name
+- 0x00214843, // n0x102d c0x0000 (---------------) + I net
+- 0x0023e983, // n0x102e c0x0000 (---------------) + I org
+- 0x00693848, // n0x102f c0x0001 (---------------) ! I teledata
+- 0x00201002, // n0x1030 c0x0000 (---------------) + I ca
+- 0x00206842, // n0x1031 c0x0000 (---------------) + I cc
+- 0x0020d642, // n0x1032 c0x0000 (---------------) + I co
+- 0x0020d643, // n0x1033 c0x0000 (---------------) + I com
+- 0x00201482, // n0x1034 c0x0000 (---------------) + I dr
+- 0x002027c2, // n0x1035 c0x0000 (---------------) + I in
+- 0x00210e04, // n0x1036 c0x0000 (---------------) + I info
+- 0x00303304, // n0x1037 c0x0000 (---------------) + I mobi
+- 0x00329482, // n0x1038 c0x0000 (---------------) + I mx
+- 0x00202f04, // n0x1039 c0x0000 (---------------) + I name
+- 0x00200a82, // n0x103a c0x0000 (---------------) + I or
+- 0x0023e983, // n0x103b c0x0000 (---------------) + I org
+- 0x002d1383, // n0x103c c0x0000 (---------------) + I pro
+- 0x002baa06, // n0x103d c0x0000 (---------------) + I school
+- 0x00281802, // n0x103e c0x0000 (---------------) + I tv
+- 0x00201f42, // n0x103f c0x0000 (---------------) + I us
+- 0x0021ba82, // n0x1040 c0x0000 (---------------) + I ws
+- 0x31646d03, // n0x1041 c0x00c5 (n0x1043-n0x1044) o I her
+- 0x31a00803, // n0x1042 c0x00c6 (n0x1044-n0x1045) o I his
+- 0x00049786, // n0x1043 c0x0000 (---------------) + forgot
+- 0x00049786, // n0x1044 c0x0000 (---------------) + forgot
+- 0x002072c4, // n0x1045 c0x0000 (---------------) + I asso
+- 0x00006f4c, // n0x1046 c0x0000 (---------------) + at-band-camp
+- 0x00005c07, // n0x1047 c0x0000 (---------------) + blogdns
+- 0x0001f2c8, // n0x1048 c0x0000 (---------------) + broke-it
+- 0x00097e8a, // n0x1049 c0x0000 (---------------) + buyshouses
+- 0x0002f1ca, // n0x104a c0x0000 (---------------) + cloudfront
+- 0x000357c8, // n0x104b c0x0000 (---------------) + dnsalias
+- 0x00062ac7, // n0x104c c0x0000 (---------------) + dnsdojo
+- 0x00015687, // n0x104d c0x0000 (---------------) + does-it
+- 0x00106f09, // n0x104e c0x0000 (---------------) + dontexist
+- 0x0000e508, // n0x104f c0x0000 (---------------) + dynalias
+- 0x0004a489, // n0x1050 c0x0000 (---------------) + dynathome
+- 0x00092c4d, // n0x1051 c0x0000 (---------------) + endofinternet
+- 0x00051e47, // n0x1052 c0x0000 (---------------) + from-az
+- 0x00052d07, // n0x1053 c0x0000 (---------------) + from-co
+- 0x00058b47, // n0x1054 c0x0000 (---------------) + from-la
+- 0x00060447, // n0x1055 c0x0000 (---------------) + from-ny
+- 0x00079382, // n0x1056 c0x0000 (---------------) + gb
+- 0x00146387, // n0x1057 c0x0000 (---------------) + gets-it
+- 0x0003f74c, // n0x1058 c0x0000 (---------------) + ham-radio-op
+- 0x0000ee47, // n0x1059 c0x0000 (---------------) + homeftp
+- 0x0012b286, // n0x105a c0x0000 (---------------) + homeip
+- 0x0008fcc9, // n0x105b c0x0000 (---------------) + homelinux
+- 0x00090148, // n0x105c c0x0000 (---------------) + homeunix
+- 0x0002b002, // n0x105d c0x0000 (---------------) + hu
+- 0x001071cb, // n0x105e c0x0000 (---------------) + in-the-band
+- 0x00054949, // n0x105f c0x0000 (---------------) + is-a-chef
+- 0x0005c709, // n0x1060 c0x0000 (---------------) + is-a-geek
+- 0x0008e588, // n0x1061 c0x0000 (---------------) + isa-geek
+- 0x00097b42, // n0x1062 c0x0000 (---------------) + jp
+- 0x00026bc9, // n0x1063 c0x0000 (---------------) + kicks-ass
+- 0x00013e4d, // n0x1064 c0x0000 (---------------) + office-on-the
+- 0x000ce747, // n0x1065 c0x0000 (---------------) + podzone
+- 0x000cd04d, // n0x1066 c0x0000 (---------------) + scrapper-site
+- 0x0000da42, // n0x1067 c0x0000 (---------------) + se
+- 0x00109ac6, // n0x1068 c0x0000 (---------------) + selfip
+- 0x000c1588, // n0x1069 c0x0000 (---------------) + sells-it
+- 0x000edb88, // n0x106a c0x0000 (---------------) + servebbs
+- 0x000f2688, // n0x106b c0x0000 (---------------) + serveftp
+- 0x00046c08, // n0x106c c0x0000 (---------------) + thruhere
+- 0x00001902, // n0x106d c0x0000 (---------------) + uk
+- 0x000141c6, // n0x106e c0x0000 (---------------) + webhop
+- 0x00001142, // n0x106f c0x0000 (---------------) + za
+- 0x00230884, // n0x1070 c0x0000 (---------------) + I arts
+- 0x0020d643, // n0x1071 c0x0000 (---------------) + I com
+- 0x00243504, // n0x1072 c0x0000 (---------------) + I firm
+- 0x00210e04, // n0x1073 c0x0000 (---------------) + I info
+- 0x00214843, // n0x1074 c0x0000 (---------------) + I net
+- 0x0024cec5, // n0x1075 c0x0000 (---------------) + I other
+- 0x00210803, // n0x1076 c0x0000 (---------------) + I per
+- 0x002c1d83, // n0x1077 c0x0000 (---------------) + I rec
+- 0x002e9c05, // n0x1078 c0x0000 (---------------) + I store
+- 0x00205e43, // n0x1079 c0x0000 (---------------) + I web
+- 0x00206c42, // n0x107a c0x0000 (---------------) + I ac
+- 0x0020d643, // n0x107b c0x0000 (---------------) + I com
+- 0x002df843, // n0x107c c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x107d c0x0000 (---------------) + I gov
+- 0x00214843, // n0x107e c0x0000 (---------------) + I net
+- 0x0023e983, // n0x107f c0x0000 (---------------) + I org
+- 0x0003c708, // n0x1080 c0x0000 (---------------) + blogspot
+- 0x002248c2, // n0x1081 c0x0000 (---------------) + I bv
+- 0x0000d642, // n0x1082 c0x0000 (---------------) + co
+- 0x33606502, // n0x1083 c0x00cd (n0x1359-n0x135a) + I aa
+- 0x002301c8, // n0x1084 c0x0000 (---------------) + I aarborte
+- 0x00222e86, // n0x1085 c0x0000 (---------------) + I aejrie
+- 0x002a8906, // n0x1086 c0x0000 (---------------) + I afjord
+- 0x00222807, // n0x1087 c0x0000 (---------------) + I agdenes
+- 0x33a07a02, // n0x1088 c0x00ce (n0x135a-n0x135b) + I ah
+- 0x33f14dc8, // n0x1089 c0x00cf (n0x135b-n0x135c) o I akershus
+- 0x0022690a, // n0x108a c0x0000 (---------------) + I aknoluokta
+- 0x00201588, // n0x108b c0x0000 (---------------) + I akrehamn
+- 0x00203982, // n0x108c c0x0000 (---------------) + I al
+- 0x00207989, // n0x108d c0x0000 (---------------) + I alaheadju
+- 0x002058c7, // n0x108e c0x0000 (---------------) + I alesund
+- 0x00216346, // n0x108f c0x0000 (---------------) + I algard
+- 0x00265949, // n0x1090 c0x0000 (---------------) + I alstahaug
+- 0x00247c04, // n0x1091 c0x0000 (---------------) + I alta
+- 0x00207586, // n0x1092 c0x0000 (---------------) + I alvdal
+- 0x002b15c4, // n0x1093 c0x0000 (---------------) + I amli
+- 0x00203d04, // n0x1094 c0x0000 (---------------) + I amot
+- 0x0024aac9, // n0x1095 c0x0000 (---------------) + I andasuolo
+- 0x00202586, // n0x1096 c0x0000 (---------------) + I andebu
+- 0x00239f05, // n0x1097 c0x0000 (---------------) + I andoy
+- 0x0025cb05, // n0x1098 c0x0000 (---------------) + I ardal
+- 0x002665c7, // n0x1099 c0x0000 (---------------) + I aremark
+- 0x002e7007, // n0x109a c0x0000 (---------------) + I arendal
+- 0x0025ca44, // n0x109b c0x0000 (---------------) + I arna
+- 0x00222a46, // n0x109c c0x0000 (---------------) + I aseral
+- 0x00267805, // n0x109d c0x0000 (---------------) + I asker
+- 0x002d47c5, // n0x109e c0x0000 (---------------) + I askim
+- 0x003382c5, // n0x109f c0x0000 (---------------) + I askoy
+- 0x00227f87, // n0x10a0 c0x0000 (---------------) + I askvoll
+- 0x00226345, // n0x10a1 c0x0000 (---------------) + I asnes
+- 0x00317f09, // n0x10a2 c0x0000 (---------------) + I audnedaln
+- 0x00214e85, // n0x10a3 c0x0000 (---------------) + I aukra
+- 0x002c3104, // n0x10a4 c0x0000 (---------------) + I aure
+- 0x00202487, // n0x10a5 c0x0000 (---------------) + I aurland
+- 0x002ae80e, // n0x10a6 c0x0000 (---------------) + I aurskog-holand
+- 0x00225e89, // n0x10a7 c0x0000 (---------------) + I austevoll
+- 0x00225209, // n0x10a8 c0x0000 (---------------) + I austrheim
+- 0x00232806, // n0x10a9 c0x0000 (---------------) + I averoy
+- 0x00301bc8, // n0x10aa c0x0000 (---------------) + I badaddja
+- 0x002e85cb, // n0x10ab c0x0000 (---------------) + I bahcavuotna
+- 0x00288e8c, // n0x10ac c0x0000 (---------------) + I bahccavuotna
+- 0x00250406, // n0x10ad c0x0000 (---------------) + I baidar
+- 0x00329d47, // n0x10ae c0x0000 (---------------) + I bajddar
+- 0x00224945, // n0x10af c0x0000 (---------------) + I balat
+- 0x00236c0a, // n0x10b0 c0x0000 (---------------) + I balestrand
+- 0x00293b49, // n0x10b1 c0x0000 (---------------) + I ballangen
+- 0x002e5a49, // n0x10b2 c0x0000 (---------------) + I balsfjord
+- 0x002fd606, // n0x10b3 c0x0000 (---------------) + I bamble
+- 0x002ebbc5, // n0x10b4 c0x0000 (---------------) + I bardu
+- 0x00310945, // n0x10b5 c0x0000 (---------------) + I barum
+- 0x0033e5c9, // n0x10b6 c0x0000 (---------------) + I batsfjord
+- 0x00224b4b, // n0x10b7 c0x0000 (---------------) + I bearalvahki
+- 0x0024d586, // n0x10b8 c0x0000 (---------------) + I beardu
+- 0x002185c6, // n0x10b9 c0x0000 (---------------) + I beiarn
+- 0x00203784, // n0x10ba c0x0000 (---------------) + I berg
+- 0x00245506, // n0x10bb c0x0000 (---------------) + I bergen
+- 0x002c7c08, // n0x10bc c0x0000 (---------------) + I berlevag
+- 0x00206e46, // n0x10bd c0x0000 (---------------) + I bievat
+- 0x00262406, // n0x10be c0x0000 (---------------) + I bindal
+- 0x0020f648, // n0x10bf c0x0000 (---------------) + I birkenes
+- 0x002100c7, // n0x10c0 c0x0000 (---------------) + I bjarkoy
+- 0x002105c9, // n0x10c1 c0x0000 (---------------) + I bjerkreim
+- 0x00210945, // n0x10c2 c0x0000 (---------------) + I bjugn
+- 0x0003c708, // n0x10c3 c0x0000 (---------------) + blogspot
+- 0x002a3344, // n0x10c4 c0x0000 (---------------) + I bodo
+- 0x002be444, // n0x10c5 c0x0000 (---------------) + I bokn
+- 0x00212c45, // n0x10c6 c0x0000 (---------------) + I bomlo
+- 0x0021a3c9, // n0x10c7 c0x0000 (---------------) + I bremanger
+- 0x00221007, // n0x10c8 c0x0000 (---------------) + I bronnoy
+- 0x0022100b, // n0x10c9 c0x0000 (---------------) + I bronnoysund
+- 0x0022170a, // n0x10ca c0x0000 (---------------) + I brumunddal
+- 0x00224245, // n0x10cb c0x0000 (---------------) + I bryne
+- 0x34202682, // n0x10cc c0x00d0 (n0x135c-n0x135d) + I bu
+- 0x00244907, // n0x10cd c0x0000 (---------------) + I budejju
+- 0x346bf548, // n0x10ce c0x00d1 (n0x135d-n0x135e) o I buskerud
+- 0x00213b07, // n0x10cf c0x0000 (---------------) + I bygland
+- 0x002c9505, // n0x10d0 c0x0000 (---------------) + I bykle
+- 0x0025230a, // n0x10d1 c0x0000 (---------------) + I cahcesuolo
+- 0x0000d642, // n0x10d2 c0x0000 (---------------) + co
+- 0x0021530b, // n0x10d3 c0x0000 (---------------) + I davvenjarga
+- 0x002a2e4a, // n0x10d4 c0x0000 (---------------) + I davvesiida
+- 0x00203546, // n0x10d5 c0x0000 (---------------) + I deatnu
+- 0x0024e443, // n0x10d6 c0x0000 (---------------) + I dep
+- 0x002d76cd, // n0x10d7 c0x0000 (---------------) + I dielddanuorri
+- 0x0023780c, // n0x10d8 c0x0000 (---------------) + I divtasvuodna
+- 0x002bbc0d, // n0x10d9 c0x0000 (---------------) + I divttasvuotna
+- 0x00304485, // n0x10da c0x0000 (---------------) + I donna
+- 0x00324b85, // n0x10db c0x0000 (---------------) + I dovre
+- 0x00283d47, // n0x10dc c0x0000 (---------------) + I drammen
+- 0x0033f089, // n0x10dd c0x0000 (---------------) + I drangedal
+- 0x00201486, // n0x10de c0x0000 (---------------) + I drobak
+- 0x0025e085, // n0x10df c0x0000 (---------------) + I dyroy
+- 0x002a9548, // n0x10e0 c0x0000 (---------------) + I egersund
+- 0x002791c3, // n0x10e1 c0x0000 (---------------) + I eid
+- 0x0031b488, // n0x10e2 c0x0000 (---------------) + I eidfjord
+- 0x002791c8, // n0x10e3 c0x0000 (---------------) + I eidsberg
+- 0x002acc87, // n0x10e4 c0x0000 (---------------) + I eidskog
+- 0x002fb408, // n0x10e5 c0x0000 (---------------) + I eidsvoll
+- 0x00252ac9, // n0x10e6 c0x0000 (---------------) + I eigersund
+- 0x0022b687, // n0x10e7 c0x0000 (---------------) + I elverum
+- 0x0020b1c7, // n0x10e8 c0x0000 (---------------) + I enebakk
+- 0x002b0b48, // n0x10e9 c0x0000 (---------------) + I engerdal
+- 0x002e7944, // n0x10ea c0x0000 (---------------) + I etne
+- 0x002e7947, // n0x10eb c0x0000 (---------------) + I etnedal
+- 0x0020ab88, // n0x10ec c0x0000 (---------------) + I evenassi
+- 0x00213906, // n0x10ed c0x0000 (---------------) + I evenes
+- 0x0033e94f, // n0x10ee c0x0000 (---------------) + I evje-og-hornnes
+- 0x00303c87, // n0x10ef c0x0000 (---------------) + I farsund
+- 0x00254b46, // n0x10f0 c0x0000 (---------------) + I fauske
+- 0x0022bf85, // n0x10f1 c0x0000 (---------------) + I fedje
+- 0x002cda03, // n0x10f2 c0x0000 (---------------) + I fet
+- 0x0031ffc7, // n0x10f3 c0x0000 (---------------) + I fetsund
+- 0x0032fbc3, // n0x10f4 c0x0000 (---------------) + I fhs
+- 0x002431c6, // n0x10f5 c0x0000 (---------------) + I finnoy
+- 0x00244446, // n0x10f6 c0x0000 (---------------) + I fitjar
+- 0x00244f06, // n0x10f7 c0x0000 (---------------) + I fjaler
+- 0x0027c6c5, // n0x10f8 c0x0000 (---------------) + I fjell
+- 0x00255943, // n0x10f9 c0x0000 (---------------) + I fla
+- 0x00255948, // n0x10fa c0x0000 (---------------) + I flakstad
+- 0x0032da09, // n0x10fb c0x0000 (---------------) + I flatanger
+- 0x0024514b, // n0x10fc c0x0000 (---------------) + I flekkefjord
+- 0x00245408, // n0x10fd c0x0000 (---------------) + I flesberg
+- 0x002463c5, // n0x10fe c0x0000 (---------------) + I flora
+- 0x002468c5, // n0x10ff c0x0000 (---------------) + I floro
+- 0x34b30b82, // n0x1100 c0x00d2 (n0x135e-n0x135f) + I fm
+- 0x002144c9, // n0x1101 c0x0000 (---------------) + I folkebibl
+- 0x00247147, // n0x1102 c0x0000 (---------------) + I folldal
+- 0x00203485, // n0x1103 c0x0000 (---------------) + I forde
+- 0x0024a9c7, // n0x1104 c0x0000 (---------------) + I forsand
+- 0x0024c486, // n0x1105 c0x0000 (---------------) + I fosnes
+- 0x00320805, // n0x1106 c0x0000 (---------------) + I frana
+- 0x0024d00b, // n0x1107 c0x0000 (---------------) + I fredrikstad
+- 0x0024ea04, // n0x1108 c0x0000 (---------------) + I frei
+- 0x00250585, // n0x1109 c0x0000 (---------------) + I frogn
+- 0x002506c7, // n0x110a c0x0000 (---------------) + I froland
+- 0x00267d46, // n0x110b c0x0000 (---------------) + I frosta
+- 0x00268005, // n0x110c c0x0000 (---------------) + I froya
+- 0x00270647, // n0x110d c0x0000 (---------------) + I fuoisku
+- 0x00270a07, // n0x110e c0x0000 (---------------) + I fuossko
+- 0x002def44, // n0x110f c0x0000 (---------------) + I fusa
+- 0x0027404a, // n0x1110 c0x0000 (---------------) + I fylkesbibl
+- 0x002742c8, // n0x1111 c0x0000 (---------------) + I fyresdal
+- 0x002e8889, // n0x1112 c0x0000 (---------------) + I gaivuotna
+- 0x00215545, // n0x1113 c0x0000 (---------------) + I galsa
+- 0x0021b4c6, // n0x1114 c0x0000 (---------------) + I gamvik
+- 0x002c7dca, // n0x1115 c0x0000 (---------------) + I gangaviika
+- 0x002c80c6, // n0x1116 c0x0000 (---------------) + I gaular
+- 0x00255f07, // n0x1117 c0x0000 (---------------) + I gausdal
+- 0x00340fcd, // n0x1118 c0x0000 (---------------) + I giehtavuoatna
+- 0x002af2c9, // n0x1119 c0x0000 (---------------) + I gildeskal
+- 0x00325605, // n0x111a c0x0000 (---------------) + I giske
+- 0x003370c7, // n0x111b c0x0000 (---------------) + I gjemnes
+- 0x00346b48, // n0x111c c0x0000 (---------------) + I gjerdrum
+- 0x00202848, // n0x111d c0x0000 (---------------) + I gjerstad
+- 0x00203847, // n0x111e c0x0000 (---------------) + I gjesdal
+- 0x00209486, // n0x111f c0x0000 (---------------) + I gjovik
+- 0x00264e87, // n0x1120 c0x0000 (---------------) + I gloppen
+- 0x002e5d03, // n0x1121 c0x0000 (---------------) + I gol
+- 0x002fe944, // n0x1122 c0x0000 (---------------) + I gran
+- 0x00301505, // n0x1123 c0x0000 (---------------) + I grane
+- 0x0031db87, // n0x1124 c0x0000 (---------------) + I granvin
+- 0x00333b09, // n0x1125 c0x0000 (---------------) + I gratangen
+- 0x00242e08, // n0x1126 c0x0000 (---------------) + I grimstad
+- 0x0024cd05, // n0x1127 c0x0000 (---------------) + I grong
+- 0x0024fc44, // n0x1128 c0x0000 (---------------) + I grue
+- 0x002d8185, // n0x1129 c0x0000 (---------------) + I gulen
+- 0x00276b8d, // n0x112a c0x0000 (---------------) + I guovdageaidnu
+- 0x00201682, // n0x112b c0x0000 (---------------) + I ha
+- 0x0029be86, // n0x112c c0x0000 (---------------) + I habmer
+- 0x00309a06, // n0x112d c0x0000 (---------------) + I hadsel
+- 0x00320f4a, // n0x112e c0x0000 (---------------) + I hagebostad
+- 0x00274e46, // n0x112f c0x0000 (---------------) + I halden
+- 0x00274fc5, // n0x1130 c0x0000 (---------------) + I halsa
+- 0x002a85c5, // n0x1131 c0x0000 (---------------) + I hamar
+- 0x002a85c7, // n0x1132 c0x0000 (---------------) + I hamaroy
+- 0x0027590c, // n0x1133 c0x0000 (---------------) + I hammarfeasta
+- 0x00241b4a, // n0x1134 c0x0000 (---------------) + I hammerfest
+- 0x00278746, // n0x1135 c0x0000 (---------------) + I hapmir
+- 0x002b1505, // n0x1136 c0x0000 (---------------) + I haram
+- 0x00279106, // n0x1137 c0x0000 (---------------) + I hareid
+- 0x00279907, // n0x1138 c0x0000 (---------------) + I harstad
+- 0x0027a906, // n0x1139 c0x0000 (---------------) + I hasvik
+- 0x0027c5cc, // n0x113a c0x0000 (---------------) + I hattfjelldal
+- 0x00265a89, // n0x113b c0x0000 (---------------) + I haugesund
+- 0x34e48487, // n0x113c c0x00d3 (n0x135f-n0x1362) o I hedmark
+- 0x00263c05, // n0x113d c0x0000 (---------------) + I hemne
+- 0x00263c06, // n0x113e c0x0000 (---------------) + I hemnes
+- 0x0027d848, // n0x113f c0x0000 (---------------) + I hemsedal
+- 0x002a2105, // n0x1140 c0x0000 (---------------) + I herad
+- 0x0028f005, // n0x1141 c0x0000 (---------------) + I hitra
+- 0x0028f488, // n0x1142 c0x0000 (---------------) + I hjartdal
+- 0x0028f68a, // n0x1143 c0x0000 (---------------) + I hjelmeland
+- 0x35263882, // n0x1144 c0x00d4 (n0x1362-n0x1363) + I hl
+- 0x3568ad42, // n0x1145 c0x00d5 (n0x1363-n0x1364) + I hm
+- 0x0031f2c5, // n0x1146 c0x0000 (---------------) + I hobol
+- 0x002bfec3, // n0x1147 c0x0000 (---------------) + I hof
+- 0x0032a748, // n0x1148 c0x0000 (---------------) + I hokksund
+- 0x0022a303, // n0x1149 c0x0000 (---------------) + I hol
+- 0x0028f904, // n0x114a c0x0000 (---------------) + I hole
+- 0x002e94cb, // n0x114b c0x0000 (---------------) + I holmestrand
+- 0x0022a308, // n0x114c c0x0000 (---------------) + I holtalen
+- 0x0023dd48, // n0x114d c0x0000 (---------------) + I honefoss
+- 0x35a37609, // n0x114e c0x00d6 (n0x1364-n0x1365) o I hordaland
+- 0x00292909, // n0x114f c0x0000 (---------------) + I hornindal
+- 0x00292b46, // n0x1150 c0x0000 (---------------) + I horten
+- 0x00293d88, // n0x1151 c0x0000 (---------------) + I hoyanger
+- 0x00293f89, // n0x1152 c0x0000 (---------------) + I hoylandet
+- 0x00295846, // n0x1153 c0x0000 (---------------) + I hurdal
+- 0x002959c5, // n0x1154 c0x0000 (---------------) + I hurum
+- 0x00331586, // n0x1155 c0x0000 (---------------) + I hvaler
+- 0x002cdb49, // n0x1156 c0x0000 (---------------) + I hyllestad
+- 0x002afd07, // n0x1157 c0x0000 (---------------) + I ibestad
+- 0x00289dc6, // n0x1158 c0x0000 (---------------) + I idrett
+- 0x002ecb47, // n0x1159 c0x0000 (---------------) + I inderoy
+- 0x002bba87, // n0x115a c0x0000 (---------------) + I iveland
+- 0x00278b04, // n0x115b c0x0000 (---------------) + I ivgu
+- 0x35e19ec9, // n0x115c c0x00d7 (n0x1365-n0x1366) + I jan-mayen
+- 0x0025f388, // n0x115d c0x0000 (---------------) + I jessheim
+- 0x00314cc8, // n0x115e c0x0000 (---------------) + I jevnaker
+- 0x002cf887, // n0x115f c0x0000 (---------------) + I jolster
+- 0x002b3706, // n0x1160 c0x0000 (---------------) + I jondal
+- 0x0024bbc9, // n0x1161 c0x0000 (---------------) + I jorpeland
+- 0x002a88c7, // n0x1162 c0x0000 (---------------) + I kafjord
+- 0x002f224a, // n0x1163 c0x0000 (---------------) + I karasjohka
+- 0x002f4348, // n0x1164 c0x0000 (---------------) + I karasjok
+- 0x002279c7, // n0x1165 c0x0000 (---------------) + I karlsoy
+- 0x002bcd86, // n0x1166 c0x0000 (---------------) + I karmoy
+- 0x0030dbca, // n0x1167 c0x0000 (---------------) + I kautokeino
+- 0x0025ba88, // n0x1168 c0x0000 (---------------) + I kirkenes
+- 0x00297dc5, // n0x1169 c0x0000 (---------------) + I klabu
+- 0x00223f45, // n0x116a c0x0000 (---------------) + I klepp
+- 0x002cc2c7, // n0x116b c0x0000 (---------------) + I kommune
+- 0x002ec1c9, // n0x116c c0x0000 (---------------) + I kongsberg
+- 0x002f024b, // n0x116d c0x0000 (---------------) + I kongsvinger
+- 0x00297c08, // n0x116e c0x0000 (---------------) + I kopervik
+- 0x00214f09, // n0x116f c0x0000 (---------------) + I kraanghke
+- 0x0029f707, // n0x1170 c0x0000 (---------------) + I kragero
+- 0x002a184c, // n0x1171 c0x0000 (---------------) + I kristiansand
+- 0x002a1ccc, // n0x1172 c0x0000 (---------------) + I kristiansund
+- 0x002a1fca, // n0x1173 c0x0000 (---------------) + I krodsherad
+- 0x002a224c, // n0x1174 c0x0000 (---------------) + I krokstadelva
+- 0x002abb48, // n0x1175 c0x0000 (---------------) + I kvafjord
+- 0x002abd48, // n0x1176 c0x0000 (---------------) + I kvalsund
+- 0x002abf44, // n0x1177 c0x0000 (---------------) + I kvam
+- 0x002ac409, // n0x1178 c0x0000 (---------------) + I kvanangen
+- 0x002ac649, // n0x1179 c0x0000 (---------------) + I kvinesdal
+- 0x002ac88a, // n0x117a c0x0000 (---------------) + I kvinnherad
+- 0x002acb09, // n0x117b c0x0000 (---------------) + I kviteseid
+- 0x002ace47, // n0x117c c0x0000 (---------------) + I kvitsoy
+- 0x002064cc, // n0x117d c0x0000 (---------------) + I laakesvuemie
+- 0x00258c86, // n0x117e c0x0000 (---------------) + I lahppi
+- 0x002a5708, // n0x117f c0x0000 (---------------) + I langevag
+- 0x002c8186, // n0x1180 c0x0000 (---------------) + I lardal
+- 0x0031c4c6, // n0x1181 c0x0000 (---------------) + I larvik
+- 0x00325507, // n0x1182 c0x0000 (---------------) + I lavagis
+- 0x00326508, // n0x1183 c0x0000 (---------------) + I lavangen
+- 0x002fd70b, // n0x1184 c0x0000 (---------------) + I leangaviika
+- 0x002c95c7, // n0x1185 c0x0000 (---------------) + I lebesby
+- 0x002832c9, // n0x1186 c0x0000 (---------------) + I leikanger
+- 0x0028b149, // n0x1187 c0x0000 (---------------) + I leirfjord
+- 0x00303407, // n0x1188 c0x0000 (---------------) + I leirvik
+- 0x00261b04, // n0x1189 c0x0000 (---------------) + I leka
+- 0x002ce147, // n0x118a c0x0000 (---------------) + I leksvik
+- 0x002e7186, // n0x118b c0x0000 (---------------) + I lenvik
+- 0x00244fc6, // n0x118c c0x0000 (---------------) + I lerdal
+- 0x00223985, // n0x118d c0x0000 (---------------) + I lesja
+- 0x002ea648, // n0x118e c0x0000 (---------------) + I levanger
+- 0x002b1644, // n0x118f c0x0000 (---------------) + I lier
+- 0x002b1646, // n0x1190 c0x0000 (---------------) + I lierne
+- 0x00241a0b, // n0x1191 c0x0000 (---------------) + I lillehammer
+- 0x002f8c49, // n0x1192 c0x0000 (---------------) + I lillesand
+- 0x00237386, // n0x1193 c0x0000 (---------------) + I lindas
+- 0x0034cc09, // n0x1194 c0x0000 (---------------) + I lindesnes
+- 0x00212d06, // n0x1195 c0x0000 (---------------) + I loabat
+- 0x0024ac88, // n0x1196 c0x0000 (---------------) + I lodingen
+- 0x002f7d83, // n0x1197 c0x0000 (---------------) + I lom
+- 0x00211405, // n0x1198 c0x0000 (---------------) + I loppa
+- 0x002cddc9, // n0x1199 c0x0000 (---------------) + I lorenskog
+- 0x0020bf45, // n0x119a c0x0000 (---------------) + I loten
+- 0x002e1cc4, // n0x119b c0x0000 (---------------) + I lund
+- 0x00267346, // n0x119c c0x0000 (---------------) + I lunner
+- 0x00336185, // n0x119d c0x0000 (---------------) + I luroy
+- 0x0034a586, // n0x119e c0x0000 (---------------) + I luster
+- 0x002f3987, // n0x119f c0x0000 (---------------) + I lyngdal
+- 0x00309646, // n0x11a0 c0x0000 (---------------) + I lyngen
+- 0x0028170b, // n0x11a1 c0x0000 (---------------) + I malatvuopmi
+- 0x002599c7, // n0x11a2 c0x0000 (---------------) + I malselv
+- 0x00218306, // n0x11a3 c0x0000 (---------------) + I malvik
+- 0x00330bc6, // n0x11a4 c0x0000 (---------------) + I mandal
+- 0x00266686, // n0x11a5 c0x0000 (---------------) + I marker
+- 0x0025ca09, // n0x11a6 c0x0000 (---------------) + I marnardal
+- 0x00295d8a, // n0x11a7 c0x0000 (---------------) + I masfjorden
+- 0x002912c5, // n0x11a8 c0x0000 (---------------) + I masoy
+- 0x002b858d, // n0x11a9 c0x0000 (---------------) + I matta-varjjat
+- 0x0028f786, // n0x11aa c0x0000 (---------------) + I meland
+- 0x00277e86, // n0x11ab c0x0000 (---------------) + I meldal
+- 0x0023bc86, // n0x11ac c0x0000 (---------------) + I melhus
+- 0x0033f805, // n0x11ad c0x0000 (---------------) + I meloy
+- 0x00286447, // n0x11ae c0x0000 (---------------) + I meraker
+- 0x0026f087, // n0x11af c0x0000 (---------------) + I midsund
+- 0x0027f8ce, // n0x11b0 c0x0000 (---------------) + I midtre-gauldal
+- 0x0022f003, // n0x11b1 c0x0000 (---------------) + I mil
+- 0x002b36c9, // n0x11b2 c0x0000 (---------------) + I mjondalen
+- 0x0028bd49, // n0x11b3 c0x0000 (---------------) + I mo-i-rana
+- 0x00237007, // n0x11b4 c0x0000 (---------------) + I moareke
+- 0x00249487, // n0x11b5 c0x0000 (---------------) + I modalen
+- 0x0029e385, // n0x11b6 c0x0000 (---------------) + I modum
+- 0x0020d6c5, // n0x11b7 c0x0000 (---------------) + I molde
+- 0x3634c88f, // n0x11b8 c0x00d8 (n0x1366-n0x1368) o I more-og-romsdal
+- 0x002b9e87, // n0x11b9 c0x0000 (---------------) + I mosjoen
+- 0x002ba048, // n0x11ba c0x0000 (---------------) + I moskenes
+- 0x002ba944, // n0x11bb c0x0000 (---------------) + I moss
+- 0x002bad06, // n0x11bc c0x0000 (---------------) + I mosvik
+- 0x366412c2, // n0x11bd c0x00d9 (n0x1368-n0x1369) + I mr
+- 0x002c2506, // n0x11be c0x0000 (---------------) + I muosat
+- 0x002c4946, // n0x11bf c0x0000 (---------------) + I museum
+- 0x0034128e, // n0x11c0 c0x0000 (---------------) + I naamesjevuemie
+- 0x0031b2ca, // n0x11c1 c0x0000 (---------------) + I namdalseid
+- 0x00289fc6, // n0x11c2 c0x0000 (---------------) + I namsos
+- 0x0027acca, // n0x11c3 c0x0000 (---------------) + I namsskogan
+- 0x0025efc9, // n0x11c4 c0x0000 (---------------) + I nannestad
+- 0x003342c5, // n0x11c5 c0x0000 (---------------) + I naroy
+- 0x00230b08, // n0x11c6 c0x0000 (---------------) + I narviika
+- 0x002313c6, // n0x11c7 c0x0000 (---------------) + I narvik
+- 0x00209ec8, // n0x11c8 c0x0000 (---------------) + I naustdal
+- 0x0020ca48, // n0x11c9 c0x0000 (---------------) + I navuotna
+- 0x0028ba4b, // n0x11ca c0x0000 (---------------) + I nedre-eiker
+- 0x00222905, // n0x11cb c0x0000 (---------------) + I nesna
+- 0x002263c8, // n0x11cc c0x0000 (---------------) + I nesodden
+- 0x0020f78c, // n0x11cd c0x0000 (---------------) + I nesoddtangen
+- 0x002139c7, // n0x11ce c0x0000 (---------------) + I nesseby
+- 0x0033ec46, // n0x11cf c0x0000 (---------------) + I nesset
+- 0x00234b48, // n0x11d0 c0x0000 (---------------) + I nissedal
+- 0x00207808, // n0x11d1 c0x0000 (---------------) + I nittedal
+- 0x36a3ba42, // n0x11d2 c0x00da (n0x1369-n0x136a) + I nl
+- 0x0023648b, // n0x11d3 c0x0000 (---------------) + I nord-aurdal
+- 0x003384c9, // n0x11d4 c0x0000 (---------------) + I nord-fron
+- 0x002a4809, // n0x11d5 c0x0000 (---------------) + I nord-odal
+- 0x00237207, // n0x11d6 c0x0000 (---------------) + I norddal
+- 0x00233688, // n0x11d7 c0x0000 (---------------) + I nordkapp
+- 0x36e12688, // n0x11d8 c0x00db (n0x136a-n0x136e) o I nordland
+- 0x00318d4b, // n0x11d9 c0x0000 (---------------) + I nordre-land
+- 0x00239909, // n0x11da c0x0000 (---------------) + I nordreisa
+- 0x002c020d, // n0x11db c0x0000 (---------------) + I nore-og-uvdal
+- 0x0020d208, // n0x11dc c0x0000 (---------------) + I notodden
+- 0x00286888, // n0x11dd c0x0000 (---------------) + I notteroy
+- 0x37200242, // n0x11de c0x00dc (n0x136e-n0x136f) + I nt
+- 0x00310044, // n0x11df c0x0000 (---------------) + I odda
+- 0x37613e42, // n0x11e0 c0x00dd (n0x136f-n0x1370) + I of
+- 0x00348186, // n0x11e1 c0x0000 (---------------) + I oksnes
+- 0x37a053c2, // n0x11e2 c0x00de (n0x1370-n0x1371) + I ol
+- 0x002e1e0a, // n0x11e3 c0x0000 (---------------) + I omasvuotna
+- 0x00304146, // n0x11e4 c0x0000 (---------------) + I oppdal
+- 0x0022de48, // n0x11e5 c0x0000 (---------------) + I oppegard
+- 0x00223bc8, // n0x11e6 c0x0000 (---------------) + I orkanger
+- 0x0023f346, // n0x11e7 c0x0000 (---------------) + I orkdal
+- 0x00261046, // n0x11e8 c0x0000 (---------------) + I orland
+- 0x002d24c6, // n0x11e9 c0x0000 (---------------) + I orskog
+- 0x0026ae45, // n0x11ea c0x0000 (---------------) + I orsta
+- 0x0023d204, // n0x11eb c0x0000 (---------------) + I osen
+- 0x37e11384, // n0x11ec c0x00df (n0x1371-n0x1372) + I oslo
+- 0x0020cd86, // n0x11ed c0x0000 (---------------) + I osoyro
+- 0x002b0947, // n0x11ee c0x0000 (---------------) + I osteroy
+- 0x382de047, // n0x11ef c0x00e0 (n0x1372-n0x1373) o I ostfold
+- 0x0027be4b, // n0x11f0 c0x0000 (---------------) + I ostre-toten
+- 0x00278109, // n0x11f1 c0x0000 (---------------) + I overhalla
+- 0x00324bca, // n0x11f2 c0x0000 (---------------) + I ovre-eiker
+- 0x002a8704, // n0x11f3 c0x0000 (---------------) + I oyer
+- 0x00225788, // n0x11f4 c0x0000 (---------------) + I oygarden
+- 0x00289b8d, // n0x11f5 c0x0000 (---------------) + I oystre-slidre
+- 0x002cf449, // n0x11f6 c0x0000 (---------------) + I porsanger
+- 0x002cf688, // n0x11f7 c0x0000 (---------------) + I porsangu
+- 0x002cfa49, // n0x11f8 c0x0000 (---------------) + I porsgrunn
+- 0x002d1204, // n0x11f9 c0x0000 (---------------) + I priv
+- 0x002556c4, // n0x11fa c0x0000 (---------------) + I rade
+- 0x0026db05, // n0x11fb c0x0000 (---------------) + I radoy
+- 0x0022fe0b, // n0x11fc c0x0000 (---------------) + I rahkkeravju
+- 0x0022a286, // n0x11fd c0x0000 (---------------) + I raholt
+- 0x002a5345, // n0x11fe c0x0000 (---------------) + I raisa
+- 0x002514c9, // n0x11ff c0x0000 (---------------) + I rakkestad
+- 0x00222b08, // n0x1200 c0x0000 (---------------) + I ralingen
+- 0x00289f44, // n0x1201 c0x0000 (---------------) + I rana
+- 0x00236d89, // n0x1202 c0x0000 (---------------) + I randaberg
+- 0x00289645, // n0x1203 c0x0000 (---------------) + I rauma
+- 0x002e7048, // n0x1204 c0x0000 (---------------) + I rendalen
+- 0x002447c7, // n0x1205 c0x0000 (---------------) + I rennebu
+- 0x00225608, // n0x1206 c0x0000 (---------------) + I rennesoy
+- 0x0029dbc6, // n0x1207 c0x0000 (---------------) + I rindal
+- 0x00217ac7, // n0x1208 c0x0000 (---------------) + I ringebu
+- 0x0025b389, // n0x1209 c0x0000 (---------------) + I ringerike
+- 0x0030e1c9, // n0x120a c0x0000 (---------------) + I ringsaker
+- 0x00309c85, // n0x120b c0x0000 (---------------) + I risor
+- 0x002620c5, // n0x120c c0x0000 (---------------) + I rissa
+- 0x38602502, // n0x120d c0x00e1 (n0x1373-n0x1374) + I rl
+- 0x002c2ec4, // n0x120e c0x0000 (---------------) + I roan
+- 0x002a6f45, // n0x120f c0x0000 (---------------) + I rodoy
+- 0x00302bc6, // n0x1210 c0x0000 (---------------) + I rollag
+- 0x002d2f05, // n0x1211 c0x0000 (---------------) + I romsa
+- 0x00276f07, // n0x1212 c0x0000 (---------------) + I romskog
+- 0x0023e445, // n0x1213 c0x0000 (---------------) + I roros
+- 0x00267d84, // n0x1214 c0x0000 (---------------) + I rost
+- 0x002b0a46, // n0x1215 c0x0000 (---------------) + I royken
+- 0x002328c7, // n0x1216 c0x0000 (---------------) + I royrvik
+- 0x00285306, // n0x1217 c0x0000 (---------------) + I ruovat
+- 0x0023a705, // n0x1218 c0x0000 (---------------) + I rygge
+- 0x0023b888, // n0x1219 c0x0000 (---------------) + I salangen
+- 0x0023bac5, // n0x121a c0x0000 (---------------) + I salat
+- 0x0023c147, // n0x121b c0x0000 (---------------) + I saltdal
+- 0x00249989, // n0x121c c0x0000 (---------------) + I samnanger
+- 0x002a1a4a, // n0x121d c0x0000 (---------------) + I sandefjord
+- 0x00274b47, // n0x121e c0x0000 (---------------) + I sandnes
+- 0x00274b4c, // n0x121f c0x0000 (---------------) + I sandnessjoen
+- 0x00239ec6, // n0x1220 c0x0000 (---------------) + I sandoy
+- 0x0028cc09, // n0x1221 c0x0000 (---------------) + I sarpsborg
+- 0x002da645, // n0x1222 c0x0000 (---------------) + I sauda
+- 0x002eb8c8, // n0x1223 c0x0000 (---------------) + I sauherad
+- 0x002234c3, // n0x1224 c0x0000 (---------------) + I sel
+- 0x00336f45, // n0x1225 c0x0000 (---------------) + I selbu
+- 0x0030a605, // n0x1226 c0x0000 (---------------) + I selje
+- 0x0033ef07, // n0x1227 c0x0000 (---------------) + I seljord
+- 0x38a31c02, // n0x1228 c0x00e2 (n0x1374-n0x1375) + I sf
+- 0x0021a947, // n0x1229 c0x0000 (---------------) + I siellak
+- 0x002e0ac6, // n0x122a c0x0000 (---------------) + I sigdal
+- 0x00219e06, // n0x122b c0x0000 (---------------) + I siljan
+- 0x002e14c6, // n0x122c c0x0000 (---------------) + I sirdal
+- 0x00207746, // n0x122d c0x0000 (---------------) + I skanit
+- 0x0030b988, // n0x122e c0x0000 (---------------) + I skanland
+- 0x002fb245, // n0x122f c0x0000 (---------------) + I skaun
+- 0x00254c07, // n0x1230 c0x0000 (---------------) + I skedsmo
+- 0x00254c0d, // n0x1231 c0x0000 (---------------) + I skedsmokorset
+- 0x00202203, // n0x1232 c0x0000 (---------------) + I ski
+- 0x00233c45, // n0x1233 c0x0000 (---------------) + I skien
+- 0x00290b07, // n0x1234 c0x0000 (---------------) + I skierva
+- 0x002c1a08, // n0x1235 c0x0000 (---------------) + I skiptvet
+- 0x00226845, // n0x1236 c0x0000 (---------------) + I skjak
+- 0x00289a08, // n0x1237 c0x0000 (---------------) + I skjervoy
+- 0x00253786, // n0x1238 c0x0000 (---------------) + I skodje
+- 0x002d3a87, // n0x1239 c0x0000 (---------------) + I slattum
+- 0x002500c5, // n0x123a c0x0000 (---------------) + I smola
+- 0x00222986, // n0x123b c0x0000 (---------------) + I snaase
+- 0x00228c05, // n0x123c c0x0000 (---------------) + I snasa
+- 0x0025de4a, // n0x123d c0x0000 (---------------) + I snillfjord
+- 0x002aaa86, // n0x123e c0x0000 (---------------) + I snoasa
+- 0x00272ec7, // n0x123f c0x0000 (---------------) + I sogndal
+- 0x002a7705, // n0x1240 c0x0000 (---------------) + I sogne
+- 0x002de2c7, // n0x1241 c0x0000 (---------------) + I sokndal
+- 0x002b89c4, // n0x1242 c0x0000 (---------------) + I sola
+- 0x002e1c46, // n0x1243 c0x0000 (---------------) + I solund
+- 0x002e2205, // n0x1244 c0x0000 (---------------) + I somna
+- 0x00221dcb, // n0x1245 c0x0000 (---------------) + I sondre-land
+- 0x00301e49, // n0x1246 c0x0000 (---------------) + I songdalen
+- 0x00257d8a, // n0x1247 c0x0000 (---------------) + I sor-aurdal
+- 0x00309d08, // n0x1248 c0x0000 (---------------) + I sor-fron
+- 0x002e2a48, // n0x1249 c0x0000 (---------------) + I sor-odal
+- 0x002e2c4c, // n0x124a c0x0000 (---------------) + I sor-varanger
+- 0x002e2f47, // n0x124b c0x0000 (---------------) + I sorfold
+- 0x002e3108, // n0x124c c0x0000 (---------------) + I sorreisa
+- 0x002e3fc8, // n0x124d c0x0000 (---------------) + I sortland
+- 0x002e41c5, // n0x124e c0x0000 (---------------) + I sorum
+- 0x002e678a, // n0x124f c0x0000 (---------------) + I spjelkavik
+- 0x002e6d09, // n0x1250 c0x0000 (---------------) + I spydeberg
+- 0x38e01382, // n0x1251 c0x00e3 (n0x1375-n0x1376) + I st
+- 0x002c0e86, // n0x1252 c0x0000 (---------------) + I stange
+- 0x0028af84, // n0x1253 c0x0000 (---------------) + I stat
+- 0x0028af89, // n0x1254 c0x0000 (---------------) + I stathelle
+- 0x002d3489, // n0x1255 c0x0000 (---------------) + I stavanger
+- 0x0025bf07, // n0x1256 c0x0000 (---------------) + I stavern
+- 0x002cb287, // n0x1257 c0x0000 (---------------) + I steigen
+- 0x002e8049, // n0x1258 c0x0000 (---------------) + I steinkjer
+- 0x002e8fc8, // n0x1259 c0x0000 (---------------) + I stjordal
+- 0x002e8fcf, // n0x125a c0x0000 (---------------) + I stjordalshalsen
+- 0x00298c06, // n0x125b c0x0000 (---------------) + I stokke
+- 0x002e978b, // n0x125c c0x0000 (---------------) + I stor-elvdal
+- 0x002e9a45, // n0x125d c0x0000 (---------------) + I stord
+- 0x002e9a47, // n0x125e c0x0000 (---------------) + I stordal
+- 0x002e9e89, // n0x125f c0x0000 (---------------) + I storfjord
+- 0x00236d06, // n0x1260 c0x0000 (---------------) + I strand
+- 0x00236d07, // n0x1261 c0x0000 (---------------) + I stranda
+- 0x00208d45, // n0x1262 c0x0000 (---------------) + I stryn
+- 0x002355c4, // n0x1263 c0x0000 (---------------) + I sula
+- 0x00207486, // n0x1264 c0x0000 (---------------) + I suldal
+- 0x00205984, // n0x1265 c0x0000 (---------------) + I sund
+- 0x002aa3c7, // n0x1266 c0x0000 (---------------) + I sunndal
+- 0x002d29c8, // n0x1267 c0x0000 (---------------) + I surnadal
+- 0x392ebac8, // n0x1268 c0x00e4 (n0x1376-n0x1377) + I svalbard
+- 0x002ebf05, // n0x1269 c0x0000 (---------------) + I sveio
+- 0x002ec047, // n0x126a c0x0000 (---------------) + I svelvik
+- 0x0028d389, // n0x126b c0x0000 (---------------) + I sykkylven
+- 0x00232d44, // n0x126c c0x0000 (---------------) + I tana
+- 0x002e6b08, // n0x126d c0x0000 (---------------) + I tananger
+- 0x396a9f88, // n0x126e c0x00e5 (n0x1377-n0x1379) o I telemark
+- 0x0024f6c4, // n0x126f c0x0000 (---------------) + I time
+- 0x00238608, // n0x1270 c0x0000 (---------------) + I tingvoll
+- 0x002bc284, // n0x1271 c0x0000 (---------------) + I tinn
+- 0x0023ac49, // n0x1272 c0x0000 (---------------) + I tjeldsund
+- 0x0023bbc5, // n0x1273 c0x0000 (---------------) + I tjome
+- 0x39a3a842, // n0x1274 c0x00e6 (n0x1379-n0x137a) + I tm
+- 0x00298c45, // n0x1275 c0x0000 (---------------) + I tokke
+- 0x0021b405, // n0x1276 c0x0000 (---------------) + I tolga
+- 0x003065c8, // n0x1277 c0x0000 (---------------) + I tonsberg
+- 0x0024e847, // n0x1278 c0x0000 (---------------) + I torsken
+- 0x39e08d82, // n0x1279 c0x00e7 (n0x137a-n0x137b) + I tr
+- 0x00289f05, // n0x127a c0x0000 (---------------) + I trana
+- 0x00291806, // n0x127b c0x0000 (---------------) + I tranby
+- 0x002a9106, // n0x127c c0x0000 (---------------) + I tranoy
+- 0x002c2e88, // n0x127d c0x0000 (---------------) + I troandin
+- 0x002c4748, // n0x127e c0x0000 (---------------) + I trogstad
+- 0x002d2ec6, // n0x127f c0x0000 (---------------) + I tromsa
+- 0x002d1c86, // n0x1280 c0x0000 (---------------) + I tromso
+- 0x00241f49, // n0x1281 c0x0000 (---------------) + I trondheim
+- 0x0031ed06, // n0x1282 c0x0000 (---------------) + I trysil
+- 0x00343e0b, // n0x1283 c0x0000 (---------------) + I tvedestrand
+- 0x0034a485, // n0x1284 c0x0000 (---------------) + I tydal
+- 0x0020d986, // n0x1285 c0x0000 (---------------) + I tynset
+- 0x0023e0c8, // n0x1286 c0x0000 (---------------) + I tysfjord
+- 0x002be206, // n0x1287 c0x0000 (---------------) + I tysnes
+- 0x002c5986, // n0x1288 c0x0000 (---------------) + I tysvar
+- 0x002e7dca, // n0x1289 c0x0000 (---------------) + I ullensaker
+- 0x0034690a, // n0x128a c0x0000 (---------------) + I ullensvang
+- 0x0025e205, // n0x128b c0x0000 (---------------) + I ulvik
+- 0x00328e87, // n0x128c c0x0000 (---------------) + I unjarga
+- 0x00265e06, // n0x128d c0x0000 (---------------) + I utsira
+- 0x3a206f02, // n0x128e c0x00e8 (n0x137b-n0x137c) + I va
+- 0x00290c47, // n0x128f c0x0000 (---------------) + I vaapste
+- 0x002663c5, // n0x1290 c0x0000 (---------------) + I vadso
+- 0x002c7d44, // n0x1291 c0x0000 (---------------) + I vaga
+- 0x002c7d45, // n0x1292 c0x0000 (---------------) + I vagan
+- 0x002a5846, // n0x1293 c0x0000 (---------------) + I vagsoy
+- 0x0028df47, // n0x1294 c0x0000 (---------------) + I vaksdal
+- 0x00219545, // n0x1295 c0x0000 (---------------) + I valle
+- 0x002d3544, // n0x1296 c0x0000 (---------------) + I vang
+- 0x002115c8, // n0x1297 c0x0000 (---------------) + I vanylven
+- 0x002c5a45, // n0x1298 c0x0000 (---------------) + I vardo
+- 0x002eaac7, // n0x1299 c0x0000 (---------------) + I varggat
+- 0x00346645, // n0x129a c0x0000 (---------------) + I varoy
+- 0x0025dd85, // n0x129b c0x0000 (---------------) + I vefsn
+- 0x002b5504, // n0x129c c0x0000 (---------------) + I vega
+- 0x002b5509, // n0x129d c0x0000 (---------------) + I vegarshei
+- 0x00267648, // n0x129e c0x0000 (---------------) + I vennesla
+- 0x002eac86, // n0x129f c0x0000 (---------------) + I verdal
+- 0x00282246, // n0x12a0 c0x0000 (---------------) + I verran
+- 0x00297886, // n0x12a1 c0x0000 (---------------) + I vestby
+- 0x3a6e1988, // n0x12a2 c0x00e9 (n0x137c-n0x137d) o I vestfold
+- 0x002e7b87, // n0x12a3 c0x0000 (---------------) + I vestnes
+- 0x002ed64d, // n0x12a4 c0x0000 (---------------) + I vestre-slidre
+- 0x002edf8c, // n0x12a5 c0x0000 (---------------) + I vestre-toten
+- 0x002ee609, // n0x12a6 c0x0000 (---------------) + I vestvagoy
+- 0x002ee849, // n0x12a7 c0x0000 (---------------) + I vevelstad
+- 0x3ab15602, // n0x12a8 c0x00ea (n0x137d-n0x137e) + I vf
+- 0x00348ac3, // n0x12a9 c0x0000 (---------------) + I vgs
+- 0x00209543, // n0x12aa c0x0000 (---------------) + I vik
+- 0x002329c5, // n0x12ab c0x0000 (---------------) + I vikna
+- 0x0031dc8a, // n0x12ac c0x0000 (---------------) + I vindafjord
+- 0x002fb846, // n0x12ad c0x0000 (---------------) + I voagat
+- 0x00215245, // n0x12ae c0x0000 (---------------) + I volda
+- 0x002f3ec4, // n0x12af c0x0000 (---------------) + I voss
+- 0x002f3ecb, // n0x12b0 c0x0000 (---------------) + I vossevangen
+- 0x002e0f4c, // n0x12b1 c0x0000 (---------------) + I xn--andy-ira
+- 0x002ed34c, // n0x12b2 c0x0000 (---------------) + I xn--asky-ira
+- 0x0034c255, // n0x12b3 c0x0000 (---------------) + I xn--aurskog-hland-jnb
+- 0x0034e78d, // n0x12b4 c0x0000 (---------------) + I xn--avery-yua
+- 0x002f4b8f, // n0x12b5 c0x0000 (---------------) + I xn--bdddj-mrabd
+- 0x002f4f52, // n0x12b6 c0x0000 (---------------) + I xn--bearalvhki-y4a
+- 0x002f53cf, // n0x12b7 c0x0000 (---------------) + I xn--berlevg-jxa
+- 0x002f5792, // n0x12b8 c0x0000 (---------------) + I xn--bhcavuotna-s4a
+- 0x002f5c13, // n0x12b9 c0x0000 (---------------) + I xn--bhccavuotna-k7a
+- 0x002f60cd, // n0x12ba c0x0000 (---------------) + I xn--bidr-5nac
+- 0x002f668d, // n0x12bb c0x0000 (---------------) + I xn--bievt-0qa
+- 0x002f69ce, // n0x12bc c0x0000 (---------------) + I xn--bjarky-fya
+- 0x002f710e, // n0x12bd c0x0000 (---------------) + I xn--bjddar-pta
+- 0x002f760c, // n0x12be c0x0000 (---------------) + I xn--blt-elab
+- 0x002f798c, // n0x12bf c0x0000 (---------------) + I xn--bmlo-gra
+- 0x002f840b, // n0x12c0 c0x0000 (---------------) + I xn--bod-2na
+- 0x002f90ce, // n0x12c1 c0x0000 (---------------) + I xn--brnny-wuac
+- 0x002fa7d2, // n0x12c2 c0x0000 (---------------) + I xn--brnnysund-m8ac
+- 0x002fb60c, // n0x12c3 c0x0000 (---------------) + I xn--brum-voa
+- 0x002fb9d0, // n0x12c4 c0x0000 (---------------) + I xn--btsfjord-9za
+- 0x002fe292, // n0x12c5 c0x0000 (---------------) + I xn--davvenjrga-y4a
+- 0x002fe70c, // n0x12c6 c0x0000 (---------------) + I xn--dnna-gra
+- 0x002fef0d, // n0x12c7 c0x0000 (---------------) + I xn--drbak-wua
+- 0x002ff24c, // n0x12c8 c0x0000 (---------------) + I xn--dyry-ira
+- 0x002ff551, // n0x12c9 c0x0000 (---------------) + I xn--eveni-0qa01ga
+- 0x002ff98d, // n0x12ca c0x0000 (---------------) + I xn--finny-yua
+- 0x003006cd, // n0x12cb c0x0000 (---------------) + I xn--fjord-lra
+- 0x00300a0a, // n0x12cc c0x0000 (---------------) + I xn--fl-zia
+- 0x00300c8c, // n0x12cd c0x0000 (---------------) + I xn--flor-jra
+- 0x003012cc, // n0x12ce c0x0000 (---------------) + I xn--frde-gra
+- 0x0030164c, // n0x12cf c0x0000 (---------------) + I xn--frna-woa
+- 0x0030208c, // n0x12d0 c0x0000 (---------------) + I xn--frya-hra
+- 0x00305413, // n0x12d1 c0x0000 (---------------) + I xn--ggaviika-8ya47h
+- 0x00305b90, // n0x12d2 c0x0000 (---------------) + I xn--gildeskl-g0a
+- 0x00305f90, // n0x12d3 c0x0000 (---------------) + I xn--givuotna-8ya
+- 0x003067cd, // n0x12d4 c0x0000 (---------------) + I xn--gjvik-wua
+- 0x00306b0c, // n0x12d5 c0x0000 (---------------) + I xn--gls-elac
+- 0x00309389, // n0x12d6 c0x0000 (---------------) + I xn--h-2fa
+- 0x0030aa0d, // n0x12d7 c0x0000 (---------------) + I xn--hbmer-xqa
+- 0x0030ad53, // n0x12d8 c0x0000 (---------------) + I xn--hcesuolo-7ya35b
+- 0x0030d151, // n0x12d9 c0x0000 (---------------) + I xn--hgebostad-g3a
+- 0x0030d593, // n0x12da c0x0000 (---------------) + I xn--hmmrfeasta-s4ac
+- 0x0030e40f, // n0x12db c0x0000 (---------------) + I xn--hnefoss-q1a
+- 0x0030e7cc, // n0x12dc c0x0000 (---------------) + I xn--hobl-ira
+- 0x0030eacf, // n0x12dd c0x0000 (---------------) + I xn--holtlen-hxa
+- 0x0030ee8d, // n0x12de c0x0000 (---------------) + I xn--hpmir-xqa
+- 0x0030f1cf, // n0x12df c0x0000 (---------------) + I xn--hyanger-q1a
+- 0x0030f590, // n0x12e0 c0x0000 (---------------) + I xn--hylandet-54a
+- 0x0030f98e, // n0x12e1 c0x0000 (---------------) + I xn--indery-fya
+- 0x00310f8e, // n0x12e2 c0x0000 (---------------) + I xn--jlster-bya
+- 0x00311b10, // n0x12e3 c0x0000 (---------------) + I xn--jrpeland-54a
+- 0x00311f0d, // n0x12e4 c0x0000 (---------------) + I xn--karmy-yua
+- 0x0031224e, // n0x12e5 c0x0000 (---------------) + I xn--kfjord-iua
+- 0x003125cc, // n0x12e6 c0x0000 (---------------) + I xn--klbu-woa
+- 0x003128d3, // n0x12e7 c0x0000 (---------------) + I xn--koluokta-7ya57h
+- 0x003133ce, // n0x12e8 c0x0000 (---------------) + I xn--krager-gya
+- 0x00313c50, // n0x12e9 c0x0000 (---------------) + I xn--kranghke-b0a
+- 0x00314051, // n0x12ea c0x0000 (---------------) + I xn--krdsherad-m8a
+- 0x0031448f, // n0x12eb c0x0000 (---------------) + I xn--krehamn-dxa
+- 0x00314853, // n0x12ec c0x0000 (---------------) + I xn--krjohka-hwab49j
+- 0x0031518d, // n0x12ed c0x0000 (---------------) + I xn--ksnes-uua
+- 0x003154cf, // n0x12ee c0x0000 (---------------) + I xn--kvfjord-nxa
+- 0x0031588e, // n0x12ef c0x0000 (---------------) + I xn--kvitsy-fya
+- 0x00315e50, // n0x12f0 c0x0000 (---------------) + I xn--kvnangen-k0a
+- 0x00316249, // n0x12f1 c0x0000 (---------------) + I xn--l-1fa
+- 0x00316950, // n0x12f2 c0x0000 (---------------) + I xn--laheadju-7ya
+- 0x00316f4f, // n0x12f3 c0x0000 (---------------) + I xn--langevg-jxa
+- 0x003175cf, // n0x12f4 c0x0000 (---------------) + I xn--ldingen-q1a
+- 0x00317992, // n0x12f5 c0x0000 (---------------) + I xn--leagaviika-52b
+- 0x0031a5ce, // n0x12f6 c0x0000 (---------------) + I xn--lesund-hua
+- 0x0031ae8d, // n0x12f7 c0x0000 (---------------) + I xn--lgrd-poac
+- 0x0031b68d, // n0x12f8 c0x0000 (---------------) + I xn--lhppi-xqa
+- 0x0031b9cd, // n0x12f9 c0x0000 (---------------) + I xn--linds-pra
+- 0x0031ca0d, // n0x12fa c0x0000 (---------------) + I xn--loabt-0qa
+- 0x0031cd4d, // n0x12fb c0x0000 (---------------) + I xn--lrdal-sra
+- 0x0031d090, // n0x12fc c0x0000 (---------------) + I xn--lrenskog-54a
+- 0x0031d48b, // n0x12fd c0x0000 (---------------) + I xn--lt-liac
+- 0x0031d94c, // n0x12fe c0x0000 (---------------) + I xn--lten-gra
+- 0x0031df0c, // n0x12ff c0x0000 (---------------) + I xn--lury-ira
+- 0x0031e20c, // n0x1300 c0x0000 (---------------) + I xn--mely-ira
+- 0x0031e50e, // n0x1301 c0x0000 (---------------) + I xn--merker-kua
+- 0x003241d0, // n0x1302 c0x0000 (---------------) + I xn--mjndalen-64a
+- 0x00324e52, // n0x1303 c0x0000 (---------------) + I xn--mlatvuopmi-s4a
+- 0x003252cb, // n0x1304 c0x0000 (---------------) + I xn--mli-tla
+- 0x0032574e, // n0x1305 c0x0000 (---------------) + I xn--mlselv-iua
+- 0x00325ace, // n0x1306 c0x0000 (---------------) + I xn--moreke-jua
+- 0x00325e4e, // n0x1307 c0x0000 (---------------) + I xn--mosjen-eya
+- 0x003262cb, // n0x1308 c0x0000 (---------------) + I xn--mot-tla
+- 0x3af26716, // n0x1309 c0x00eb (n0x137e-n0x1380) o I xn--mre-og-romsdal-qqb
+- 0x0032750d, // n0x130a c0x0000 (---------------) + I xn--msy-ula0h
+- 0x00328094, // n0x130b c0x0000 (---------------) + I xn--mtta-vrjjat-k7af
+- 0x0032904d, // n0x130c c0x0000 (---------------) + I xn--muost-0qa
+- 0x00329895, // n0x130d c0x0000 (---------------) + I xn--nmesjevuemie-tcba
+- 0x0032a94d, // n0x130e c0x0000 (---------------) + I xn--nry-yla5g
+- 0x0032ac8f, // n0x130f c0x0000 (---------------) + I xn--nttery-byae
+- 0x0032b68f, // n0x1310 c0x0000 (---------------) + I xn--nvuotna-hwa
+- 0x0032dc4f, // n0x1311 c0x0000 (---------------) + I xn--oppegrd-ixa
+- 0x0032e00e, // n0x1312 c0x0000 (---------------) + I xn--ostery-fya
+- 0x0032e58d, // n0x1313 c0x0000 (---------------) + I xn--osyro-wua
+- 0x0032f7d1, // n0x1314 c0x0000 (---------------) + I xn--porsgu-sta26f
+- 0x0032fe0c, // n0x1315 c0x0000 (---------------) + I xn--rady-ira
+- 0x0033010c, // n0x1316 c0x0000 (---------------) + I xn--rdal-poa
+- 0x0033040b, // n0x1317 c0x0000 (---------------) + I xn--rde-ula
+- 0x003306cc, // n0x1318 c0x0000 (---------------) + I xn--rdy-0nab
+- 0x00330d4f, // n0x1319 c0x0000 (---------------) + I xn--rennesy-v1a
+- 0x00331112, // n0x131a c0x0000 (---------------) + I xn--rhkkervju-01af
+- 0x0033170d, // n0x131b c0x0000 (---------------) + I xn--rholt-mra
+- 0x0033218c, // n0x131c c0x0000 (---------------) + I xn--risa-5na
+- 0x00332b4c, // n0x131d c0x0000 (---------------) + I xn--risr-ira
+- 0x00332e4d, // n0x131e c0x0000 (---------------) + I xn--rland-uua
+- 0x0033318f, // n0x131f c0x0000 (---------------) + I xn--rlingen-mxa
+- 0x0033354e, // n0x1320 c0x0000 (---------------) + I xn--rmskog-bya
+- 0x003338cc, // n0x1321 c0x0000 (---------------) + I xn--rros-gra
+- 0x00333d4d, // n0x1322 c0x0000 (---------------) + I xn--rskog-uua
+- 0x0033408b, // n0x1323 c0x0000 (---------------) + I xn--rst-0na
+- 0x0033440c, // n0x1324 c0x0000 (---------------) + I xn--rsta-fra
+- 0x0033498d, // n0x1325 c0x0000 (---------------) + I xn--ryken-vua
+- 0x00334cce, // n0x1326 c0x0000 (---------------) + I xn--ryrvik-bya
+- 0x00335049, // n0x1327 c0x0000 (---------------) + I xn--s-1fa
+- 0x00336a53, // n0x1328 c0x0000 (---------------) + I xn--sandnessjen-ogb
+- 0x0033754d, // n0x1329 c0x0000 (---------------) + I xn--sandy-yua
+- 0x0033788d, // n0x132a c0x0000 (---------------) + I xn--seral-lra
+- 0x00337bcc, // n0x132b c0x0000 (---------------) + I xn--sgne-gra
+- 0x00337f0e, // n0x132c c0x0000 (---------------) + I xn--skierv-uta
+- 0x0033870f, // n0x132d c0x0000 (---------------) + I xn--skjervy-v1a
+- 0x00338acc, // n0x132e c0x0000 (---------------) + I xn--skjk-soa
+- 0x00338dcd, // n0x132f c0x0000 (---------------) + I xn--sknit-yqa
+- 0x0033910f, // n0x1330 c0x0000 (---------------) + I xn--sknland-fxa
+- 0x003394cc, // n0x1331 c0x0000 (---------------) + I xn--slat-5na
+- 0x0033994c, // n0x1332 c0x0000 (---------------) + I xn--slt-elab
+- 0x00339d0c, // n0x1333 c0x0000 (---------------) + I xn--smla-hra
+- 0x0033a00c, // n0x1334 c0x0000 (---------------) + I xn--smna-gra
+- 0x0033a30d, // n0x1335 c0x0000 (---------------) + I xn--snase-nra
+- 0x0033a652, // n0x1336 c0x0000 (---------------) + I xn--sndre-land-0cb
+- 0x0033ab0c, // n0x1337 c0x0000 (---------------) + I xn--snes-poa
+- 0x0033ae0c, // n0x1338 c0x0000 (---------------) + I xn--snsa-roa
+- 0x0033b111, // n0x1339 c0x0000 (---------------) + I xn--sr-aurdal-l8a
+- 0x0033b54f, // n0x133a c0x0000 (---------------) + I xn--sr-fron-q1a
+- 0x0033b90f, // n0x133b c0x0000 (---------------) + I xn--sr-odal-q1a
+- 0x0033bcd3, // n0x133c c0x0000 (---------------) + I xn--sr-varanger-ggb
+- 0x0033c38e, // n0x133d c0x0000 (---------------) + I xn--srfold-bya
+- 0x0033c70f, // n0x133e c0x0000 (---------------) + I xn--srreisa-q1a
+- 0x0033cacc, // n0x133f c0x0000 (---------------) + I xn--srum-gra
+- 0x3b33cdce, // n0x1340 c0x00ec (n0x1380-n0x1381) o I xn--stfold-9xa
+- 0x0033d14f, // n0x1341 c0x0000 (---------------) + I xn--stjrdal-s1a
+- 0x0033d516, // n0x1342 c0x0000 (---------------) + I xn--stjrdalshalsen-sqb
+- 0x0033e192, // n0x1343 c0x0000 (---------------) + I xn--stre-toten-zcb
+- 0x0034064c, // n0x1344 c0x0000 (---------------) + I xn--tjme-hra
+- 0x003427cf, // n0x1345 c0x0000 (---------------) + I xn--tnsberg-q1a
+- 0x00342b8d, // n0x1346 c0x0000 (---------------) + I xn--trany-yua
+- 0x00342ecf, // n0x1347 c0x0000 (---------------) + I xn--trgstad-r1a
+- 0x0034328c, // n0x1348 c0x0000 (---------------) + I xn--trna-woa
+- 0x0034358d, // n0x1349 c0x0000 (---------------) + I xn--troms-zua
+- 0x003438cd, // n0x134a c0x0000 (---------------) + I xn--tysvr-vra
+- 0x0034438e, // n0x134b c0x0000 (---------------) + I xn--unjrga-rta
+- 0x0034488c, // n0x134c c0x0000 (---------------) + I xn--vads-jra
+- 0x00344b8c, // n0x134d c0x0000 (---------------) + I xn--vard-jra
+- 0x00344e90, // n0x134e c0x0000 (---------------) + I xn--vegrshei-c0a
+- 0x00345291, // n0x134f c0x0000 (---------------) + I xn--vestvgy-ixa6o
+- 0x003456cb, // n0x1350 c0x0000 (---------------) + I xn--vg-yiab
+- 0x003486cc, // n0x1351 c0x0000 (---------------) + I xn--vgan-qoa
+- 0x003489ce, // n0x1352 c0x0000 (---------------) + I xn--vgsy-qoa0j
+- 0x00349411, // n0x1353 c0x0000 (---------------) + I xn--vre-eiker-k8a
+- 0x0034984e, // n0x1354 c0x0000 (---------------) + I xn--vrggt-xqad
+- 0x00349bcd, // n0x1355 c0x0000 (---------------) + I xn--vry-yla5g
+- 0x0034b30b, // n0x1356 c0x0000 (---------------) + I xn--yer-zna
+- 0x0034bb8f, // n0x1357 c0x0000 (---------------) + I xn--ygarden-p1a
+- 0x0034d254, // n0x1358 c0x0000 (---------------) + I xn--ystre-slidre-ujb
+- 0x0023c7c2, // n0x1359 c0x0000 (---------------) + I gs
+- 0x0023c7c2, // n0x135a c0x0000 (---------------) + I gs
+- 0x0020f783, // n0x135b c0x0000 (---------------) + I nes
+- 0x0023c7c2, // n0x135c c0x0000 (---------------) + I gs
+- 0x0020f783, // n0x135d c0x0000 (---------------) + I nes
+- 0x0023c7c2, // n0x135e c0x0000 (---------------) + I gs
+- 0x00208982, // n0x135f c0x0000 (---------------) + I os
+- 0x003315c5, // n0x1360 c0x0000 (---------------) + I valer
+- 0x0034910c, // n0x1361 c0x0000 (---------------) + I xn--vler-qoa
+- 0x0023c7c2, // n0x1362 c0x0000 (---------------) + I gs
+- 0x0023c7c2, // n0x1363 c0x0000 (---------------) + I gs
+- 0x00208982, // n0x1364 c0x0000 (---------------) + I os
+- 0x0023c7c2, // n0x1365 c0x0000 (---------------) + I gs
+- 0x0029aac5, // n0x1366 c0x0000 (---------------) + I heroy
+- 0x002a1a45, // n0x1367 c0x0000 (---------------) + I sande
+- 0x0023c7c2, // n0x1368 c0x0000 (---------------) + I gs
+- 0x0023c7c2, // n0x1369 c0x0000 (---------------) + I gs
+- 0x002033c2, // n0x136a c0x0000 (---------------) + I bo
+- 0x0029aac5, // n0x136b c0x0000 (---------------) + I heroy
+- 0x0034ed49, // n0x136c c0x0000 (---------------) + I xn--b-5ga
+- 0x0030ce4c, // n0x136d c0x0000 (---------------) + I xn--hery-ira
+- 0x0023c7c2, // n0x136e c0x0000 (---------------) + I gs
+- 0x0023c7c2, // n0x136f c0x0000 (---------------) + I gs
+- 0x0023c7c2, // n0x1370 c0x0000 (---------------) + I gs
+- 0x0023c7c2, // n0x1371 c0x0000 (---------------) + I gs
+- 0x003315c5, // n0x1372 c0x0000 (---------------) + I valer
+- 0x0023c7c2, // n0x1373 c0x0000 (---------------) + I gs
+- 0x0023c7c2, // n0x1374 c0x0000 (---------------) + I gs
+- 0x0023c7c2, // n0x1375 c0x0000 (---------------) + I gs
+- 0x0023c7c2, // n0x1376 c0x0000 (---------------) + I gs
+- 0x002033c2, // n0x1377 c0x0000 (---------------) + I bo
+- 0x0034ed49, // n0x1378 c0x0000 (---------------) + I xn--b-5ga
+- 0x0023c7c2, // n0x1379 c0x0000 (---------------) + I gs
+- 0x0023c7c2, // n0x137a c0x0000 (---------------) + I gs
+- 0x0023c7c2, // n0x137b c0x0000 (---------------) + I gs
+- 0x002a1a45, // n0x137c c0x0000 (---------------) + I sande
+- 0x0023c7c2, // n0x137d c0x0000 (---------------) + I gs
+- 0x002a1a45, // n0x137e c0x0000 (---------------) + I sande
+- 0x0030ce4c, // n0x137f c0x0000 (---------------) + I xn--hery-ira
+- 0x0034910c, // n0x1380 c0x0000 (---------------) + I xn--vler-qoa
+- 0x0030c243, // n0x1381 c0x0000 (---------------) + I biz
+- 0x0020d643, // n0x1382 c0x0000 (---------------) + I com
+- 0x002df843, // n0x1383 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x1384 c0x0000 (---------------) + I gov
+- 0x00210e04, // n0x1385 c0x0000 (---------------) + I info
+- 0x00214843, // n0x1386 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x1387 c0x0000 (---------------) + I org
+- 0x000bb348, // n0x1388 c0x0000 (---------------) + merseine
+- 0x000f2544, // n0x1389 c0x0000 (---------------) + mine
+- 0x0011eb48, // n0x138a c0x0000 (---------------) + shacknet
+- 0x3c20d642, // n0x138b c0x00f0 (n0x138c-n0x138d) o I co
+- 0x0003c708, // n0x138c c0x0000 (---------------) + blogspot
+- 0x0063dbca, // n0x138d c0x0001 (---------------) ! I mediaphone
+- 0x0060d3c6, // n0x138e c0x0001 (---------------) ! I nawras
+- 0x0060d3cd, // n0x138f c0x0001 (---------------) ! I nawrastelecom
+- 0x0070320a, // n0x1390 c0x0001 (---------------) ! I omanmobile
+- 0x00685648, // n0x1391 c0x0001 (---------------) ! I omanpost
+- 0x006d0cc7, // n0x1392 c0x0001 (---------------) ! I omantel
+- 0x0073f54c, // n0x1393 c0x0001 (---------------) ! I rakpetroleum
+- 0x0066c647, // n0x1394 c0x0001 (---------------) ! I siemens
+- 0x00653a08, // n0x1395 c0x0001 (---------------) ! I songfest
+- 0x006b5dcc, // n0x1396 c0x0001 (---------------) ! I statecouncil
+- 0x000138c2, // n0x1397 c0x0000 (---------------) + ae
+- 0x00005c07, // n0x1398 c0x0000 (---------------) + blogdns
+- 0x000c87c8, // n0x1399 c0x0000 (---------------) + blogsite
+- 0x0011f352, // n0x139a c0x0000 (---------------) + boldlygoingnowhere
+- 0x000357c8, // n0x139b c0x0000 (---------------) + dnsalias
+- 0x00062ac7, // n0x139c c0x0000 (---------------) + dnsdojo
+- 0x000a33cb, // n0x139d c0x0000 (---------------) + doesntexist
+- 0x00106f09, // n0x139e c0x0000 (---------------) + dontexist
+- 0x000356c7, // n0x139f c0x0000 (---------------) + doomdns
+- 0x00062a06, // n0x13a0 c0x0000 (---------------) + dvrdns
+- 0x0000e508, // n0x13a1 c0x0000 (---------------) + dynalias
+- 0x3cc04a46, // n0x13a2 c0x00f3 (n0x13cc-n0x13ce) + dyndns
+- 0x00092c4d, // n0x13a3 c0x0000 (---------------) + endofinternet
+- 0x0002a490, // n0x13a4 c0x0000 (---------------) + endoftheinternet
+- 0x0005a747, // n0x13a5 c0x0000 (---------------) + from-me
+- 0x0007bcc9, // n0x13a6 c0x0000 (---------------) + game-host
+- 0x00049846, // n0x13a7 c0x0000 (---------------) + gotdns
+- 0x0003ef4a, // n0x13a8 c0x0000 (---------------) + hobby-site
+- 0x00071247, // n0x13a9 c0x0000 (---------------) + homedns
+- 0x0000ee47, // n0x13aa c0x0000 (---------------) + homeftp
+- 0x0008fcc9, // n0x13ab c0x0000 (---------------) + homelinux
+- 0x00090148, // n0x13ac c0x0000 (---------------) + homeunix
+- 0x0003198e, // n0x13ad c0x0000 (---------------) + is-a-bruinsfan
+- 0x0002304e, // n0x13ae c0x0000 (---------------) + is-a-candidate
+- 0x0005428f, // n0x13af c0x0000 (---------------) + is-a-celticsfan
+- 0x00054949, // n0x13b0 c0x0000 (---------------) + is-a-chef
+- 0x0005c709, // n0x13b1 c0x0000 (---------------) + is-a-geek
+- 0x0006cecb, // n0x13b2 c0x0000 (---------------) + is-a-knight
+- 0x0008868f, // n0x13b3 c0x0000 (---------------) + is-a-linux-user
+- 0x0011c70c, // n0x13b4 c0x0000 (---------------) + is-a-patsfan
+- 0x000a5d8b, // n0x13b5 c0x0000 (---------------) + is-a-soxfan
+- 0x00142488, // n0x13b6 c0x0000 (---------------) + is-found
+- 0x000ddf47, // n0x13b7 c0x0000 (---------------) + is-lost
+- 0x000e76c8, // n0x13b8 c0x0000 (---------------) + is-saved
+- 0x001019cb, // n0x13b9 c0x0000 (---------------) + is-very-bad
+- 0x00107acc, // n0x13ba c0x0000 (---------------) + is-very-evil
+- 0x0010fdcc, // n0x13bb c0x0000 (---------------) + is-very-good
+- 0x0011038c, // n0x13bc c0x0000 (---------------) + is-very-nice
+- 0x0011be8d, // n0x13bd c0x0000 (---------------) + is-very-sweet
+- 0x0008e588, // n0x13be c0x0000 (---------------) + isa-geek
+- 0x00026bc9, // n0x13bf c0x0000 (---------------) + kicks-ass
+- 0x001295cb, // n0x13c0 c0x0000 (---------------) + misconfused
+- 0x000ce747, // n0x13c1 c0x0000 (---------------) + podzone
+- 0x000c864a, // n0x13c2 c0x0000 (---------------) + readmyblog
+- 0x00109ac6, // n0x13c3 c0x0000 (---------------) + selfip
+- 0x0012b04d, // n0x13c4 c0x0000 (---------------) + sellsyourhome
+- 0x000edb88, // n0x13c5 c0x0000 (---------------) + servebbs
+- 0x000f2688, // n0x13c6 c0x0000 (---------------) + serveftp
+- 0x000f8789, // n0x13c7 c0x0000 (---------------) + servegame
+- 0x000ea3cc, // n0x13c8 c0x0000 (---------------) + stuff-4-sale
+- 0x00001f42, // n0x13c9 c0x0000 (---------------) + us
+- 0x000141c6, // n0x13ca c0x0000 (---------------) + webhop
+- 0x00001142, // n0x13cb c0x0000 (---------------) + za
+- 0x00000482, // n0x13cc c0x0000 (---------------) + go
+- 0x0000ee44, // n0x13cd c0x0000 (---------------) + home
+- 0x00203383, // n0x13ce c0x0000 (---------------) + I abo
+- 0x00206c42, // n0x13cf c0x0000 (---------------) + I ac
+- 0x0020d643, // n0x13d0 c0x0000 (---------------) + I com
+- 0x002df843, // n0x13d1 c0x0000 (---------------) + I edu
+- 0x00265483, // n0x13d2 c0x0000 (---------------) + I gob
+- 0x002027c3, // n0x13d3 c0x0000 (---------------) + I ing
+- 0x0023dbc3, // n0x13d4 c0x0000 (---------------) + I med
+- 0x00214843, // n0x13d5 c0x0000 (---------------) + I net
+- 0x00216583, // n0x13d6 c0x0000 (---------------) + I nom
+- 0x0023e983, // n0x13d7 c0x0000 (---------------) + I org
+- 0x002e1643, // n0x13d8 c0x0000 (---------------) + I sld
+- 0x0020d643, // n0x13d9 c0x0000 (---------------) + I com
+- 0x002df843, // n0x13da c0x0000 (---------------) + I edu
+- 0x00265483, // n0x13db c0x0000 (---------------) + I gob
+- 0x0022f003, // n0x13dc c0x0000 (---------------) + I mil
+- 0x00214843, // n0x13dd c0x0000 (---------------) + I net
+- 0x00216583, // n0x13de c0x0000 (---------------) + I nom
+- 0x0023e983, // n0x13df c0x0000 (---------------) + I org
+- 0x0020d643, // n0x13e0 c0x0000 (---------------) + I com
+- 0x002df843, // n0x13e1 c0x0000 (---------------) + I edu
+- 0x0023e983, // n0x13e2 c0x0000 (---------------) + I org
+- 0x0020d643, // n0x13e3 c0x0000 (---------------) + I com
+- 0x002df843, // n0x13e4 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x13e5 c0x0000 (---------------) + I gov
+- 0x00200781, // n0x13e6 c0x0000 (---------------) + I i
+- 0x0022f003, // n0x13e7 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x13e8 c0x0000 (---------------) + I net
+- 0x00200443, // n0x13e9 c0x0000 (---------------) + I ngo
+- 0x0023e983, // n0x13ea c0x0000 (---------------) + I org
+- 0x0030c243, // n0x13eb c0x0000 (---------------) + I biz
+- 0x0020d643, // n0x13ec c0x0000 (---------------) + I com
+- 0x002df843, // n0x13ed c0x0000 (---------------) + I edu
+- 0x002724c3, // n0x13ee c0x0000 (---------------) + I fam
+- 0x00265483, // n0x13ef c0x0000 (---------------) + I gob
+- 0x002cd6c3, // n0x13f0 c0x0000 (---------------) + I gok
+- 0x00260ac3, // n0x13f1 c0x0000 (---------------) + I gon
+- 0x0020cf83, // n0x13f2 c0x0000 (---------------) + I gop
+- 0x0021fc83, // n0x13f3 c0x0000 (---------------) + I gos
+- 0x00218d43, // n0x13f4 c0x0000 (---------------) + I gov
+- 0x00210e04, // n0x13f5 c0x0000 (---------------) + I info
+- 0x00214843, // n0x13f6 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x13f7 c0x0000 (---------------) + I org
+- 0x00205e43, // n0x13f8 c0x0000 (---------------) + I web
+- 0x0022ec45, // n0x13f9 c0x0000 (---------------) + I 6bone
+- 0x002292c4, // n0x13fa c0x0000 (---------------) + I agro
+- 0x00250443, // n0x13fb c0x0000 (---------------) + I aid
+- 0x0020e343, // n0x13fc c0x0000 (---------------) + I art
+- 0x00285403, // n0x13fd c0x0000 (---------------) + I atm
+- 0x002c0b48, // n0x13fe c0x0000 (---------------) + I augustow
+- 0x002bb8c4, // n0x13ff c0x0000 (---------------) + I auto
+- 0x002512ca, // n0x1400 c0x0000 (---------------) + I babia-gora
+- 0x00283b06, // n0x1401 c0x0000 (---------------) + I bedzin
+- 0x00202187, // n0x1402 c0x0000 (---------------) + I beskidy
+- 0x0021ce0a, // n0x1403 c0x0000 (---------------) + I bialowieza
+- 0x00298ac9, // n0x1404 c0x0000 (---------------) + I bialystok
+- 0x00205747, // n0x1405 c0x0000 (---------------) + I bielawa
+- 0x0020690a, // n0x1406 c0x0000 (---------------) + I bieszczady
+- 0x0030c243, // n0x1407 c0x0000 (---------------) + I biz
+- 0x00345a8b, // n0x1408 c0x0000 (---------------) + I boleslawiec
+- 0x002c9709, // n0x1409 c0x0000 (---------------) + I bydgoszcz
+- 0x0025e445, // n0x140a c0x0000 (---------------) + I bytom
+- 0x002c2347, // n0x140b c0x0000 (---------------) + I cieszyn
+- 0x0000d642, // n0x140c c0x0000 (---------------) + co
+- 0x0020d643, // n0x140d c0x0000 (---------------) + I com
+- 0x002ae147, // n0x140e c0x0000 (---------------) + I czeladz
+- 0x00221a45, // n0x140f c0x0000 (---------------) + I czest
+- 0x002e5c49, // n0x1410 c0x0000 (---------------) + I dlugoleka
+- 0x002df843, // n0x1411 c0x0000 (---------------) + I edu
+- 0x00222706, // n0x1412 c0x0000 (---------------) + I elblag
+- 0x002e6843, // n0x1413 c0x0000 (---------------) + I elk
+- 0x002e0b43, // n0x1414 c0x0000 (---------------) + I gda
+- 0x002f3286, // n0x1415 c0x0000 (---------------) + I gdansk
+- 0x00227e46, // n0x1416 c0x0000 (---------------) + I gdynia
+- 0x00224087, // n0x1417 c0x0000 (---------------) + I gliwice
+- 0x0022bcc6, // n0x1418 c0x0000 (---------------) + I glogow
+- 0x00238a05, // n0x1419 c0x0000 (---------------) + I gmina
+- 0x00229fc7, // n0x141a c0x0000 (---------------) + I gniezno
+- 0x002f8f07, // n0x141b c0x0000 (---------------) + I gorlice
+- 0x3ea18d43, // n0x141c c0x00fa (n0x14a4-n0x14ad) + I gov
+- 0x002f7bc7, // n0x141d c0x0000 (---------------) + I grajewo
+- 0x00250083, // n0x141e c0x0000 (---------------) + I gsm
+- 0x00229705, // n0x141f c0x0000 (---------------) + I ilawa
+- 0x00210e04, // n0x1420 c0x0000 (---------------) + I info
+- 0x0026e543, // n0x1421 c0x0000 (---------------) + I irc
+- 0x00313a48, // n0x1422 c0x0000 (---------------) + I jaworzno
+- 0x0022c04c, // n0x1423 c0x0000 (---------------) + I jelenia-gora
+- 0x00297a05, // n0x1424 c0x0000 (---------------) + I jgora
+- 0x002a4586, // n0x1425 c0x0000 (---------------) + I kalisz
+- 0x002ae007, // n0x1426 c0x0000 (---------------) + I karpacz
+- 0x00240247, // n0x1427 c0x0000 (---------------) + I kartuzy
+- 0x0025e307, // n0x1428 c0x0000 (---------------) + I kaszuby
+- 0x002aa148, // n0x1429 c0x0000 (---------------) + I katowice
+- 0x0033668f, // n0x142a c0x0000 (---------------) + I kazimierz-dolny
+- 0x00237145, // n0x142b c0x0000 (---------------) + I kepno
+- 0x003046c7, // n0x142c c0x0000 (---------------) + I ketrzyn
+- 0x002e4787, // n0x142d c0x0000 (---------------) + I klodzko
+- 0x0028fa4a, // n0x142e c0x0000 (---------------) + I kobierzyce
+- 0x002a9389, // n0x142f c0x0000 (---------------) + I kolobrzeg
+- 0x002f33c5, // n0x1430 c0x0000 (---------------) + I konin
+- 0x002f450a, // n0x1431 c0x0000 (---------------) + I konskowola
+- 0x002a03c6, // n0x1432 c0x0000 (---------------) + I krakow
+- 0x002aa7c5, // n0x1433 c0x0000 (---------------) + I kutno
+- 0x002b8b84, // n0x1434 c0x0000 (---------------) + I lapy
+- 0x0023f286, // n0x1435 c0x0000 (---------------) + I lebork
+- 0x0023e607, // n0x1436 c0x0000 (---------------) + I legnica
+- 0x00228107, // n0x1437 c0x0000 (---------------) + I lezajsk
+- 0x00226088, // n0x1438 c0x0000 (---------------) + I limanowa
+- 0x002fa405, // n0x1439 c0x0000 (---------------) + I lomza
+- 0x00221946, // n0x143a c0x0000 (---------------) + I lowicz
+- 0x00262385, // n0x143b c0x0000 (---------------) + I lubin
+- 0x002c0505, // n0x143c c0x0000 (---------------) + I lukow
+- 0x00212a04, // n0x143d c0x0000 (---------------) + I mail
+- 0x00223ac7, // n0x143e c0x0000 (---------------) + I malbork
+- 0x0030b7ca, // n0x143f c0x0000 (---------------) + I malopolska
+- 0x0021b988, // n0x1440 c0x0000 (---------------) + I mazowsze
+- 0x002e5846, // n0x1441 c0x0000 (---------------) + I mazury
+- 0x0022b805, // n0x1442 c0x0000 (---------------) + I mbone
+- 0x0023dbc3, // n0x1443 c0x0000 (---------------) + I med
+- 0x0023dbc5, // n0x1444 c0x0000 (---------------) + I media
+- 0x002d4b06, // n0x1445 c0x0000 (---------------) + I miasta
+- 0x00206706, // n0x1446 c0x0000 (---------------) + I mielec
+- 0x00341546, // n0x1447 c0x0000 (---------------) + I mielno
+- 0x0022f003, // n0x1448 c0x0000 (---------------) + I mil
+- 0x00331987, // n0x1449 c0x0000 (---------------) + I mragowo
+- 0x002e4705, // n0x144a c0x0000 (---------------) + I naklo
+- 0x00214843, // n0x144b c0x0000 (---------------) + I net
+- 0x00200443, // n0x144c c0x0000 (---------------) + I ngo
+- 0x0020874d, // n0x144d c0x0000 (---------------) + I nieruchomosci
+- 0x00216583, // n0x144e c0x0000 (---------------) + I nom
+- 0x00226188, // n0x144f c0x0000 (---------------) + I nowaruda
+- 0x002cd904, // n0x1450 c0x0000 (---------------) + I nysa
+- 0x0026b105, // n0x1451 c0x0000 (---------------) + I olawa
+- 0x0028f946, // n0x1452 c0x0000 (---------------) + I olecko
+- 0x002bab06, // n0x1453 c0x0000 (---------------) + I olkusz
+- 0x0020d887, // n0x1454 c0x0000 (---------------) + I olsztyn
+- 0x002142c7, // n0x1455 c0x0000 (---------------) + I opoczno
+- 0x00300545, // n0x1456 c0x0000 (---------------) + I opole
+- 0x0023e983, // n0x1457 c0x0000 (---------------) + I org
+- 0x00224707, // n0x1458 c0x0000 (---------------) + I ostroda
+- 0x002619c9, // n0x1459 c0x0000 (---------------) + I ostroleka
+- 0x00303a49, // n0x145a c0x0000 (---------------) + I ostrowiec
+- 0x0030de0a, // n0x145b c0x0000 (---------------) + I ostrowwlkp
+- 0x002dca02, // n0x145c c0x0000 (---------------) + I pc
+- 0x002296c4, // n0x145d c0x0000 (---------------) + I pila
+- 0x002cb584, // n0x145e c0x0000 (---------------) + I pisz
+- 0x002ce007, // n0x145f c0x0000 (---------------) + I podhale
+- 0x002ce448, // n0x1460 c0x0000 (---------------) + I podlasie
+- 0x0033fb89, // n0x1461 c0x0000 (---------------) + I polkowice
+- 0x00233b09, // n0x1462 c0x0000 (---------------) + I pomorskie
+- 0x002cef47, // n0x1463 c0x0000 (---------------) + I pomorze
+- 0x00204f86, // n0x1464 c0x0000 (---------------) + I powiat
+- 0x002cfd06, // n0x1465 c0x0000 (---------------) + I poznan
+- 0x002d1204, // n0x1466 c0x0000 (---------------) + I priv
+- 0x002d138a, // n0x1467 c0x0000 (---------------) + I prochowice
+- 0x002d2188, // n0x1468 c0x0000 (---------------) + I pruszkow
+- 0x002d2389, // n0x1469 c0x0000 (---------------) + I przeworsk
+- 0x0028ea46, // n0x146a c0x0000 (---------------) + I pulawy
+- 0x0029c305, // n0x146b c0x0000 (---------------) + I radom
+- 0x0021b848, // n0x146c c0x0000 (---------------) + I rawa-maz
+- 0x002b5c8a, // n0x146d c0x0000 (---------------) + I realestate
+- 0x00259c43, // n0x146e c0x0000 (---------------) + I rel
+- 0x00252786, // n0x146f c0x0000 (---------------) + I rybnik
+- 0x002cf047, // n0x1470 c0x0000 (---------------) + I rzeszow
+- 0x003480c5, // n0x1471 c0x0000 (---------------) + I sanok
+- 0x002cd7c5, // n0x1472 c0x0000 (---------------) + I sejny
+- 0x003461c3, // n0x1473 c0x0000 (---------------) + I sex
+- 0x003040c4, // n0x1474 c0x0000 (---------------) + I shop
+- 0x002ce587, // n0x1475 c0x0000 (---------------) + I siedlce
+- 0x00223f05, // n0x1476 c0x0000 (---------------) + I sklep
+- 0x00270b07, // n0x1477 c0x0000 (---------------) + I skoczow
+- 0x00267785, // n0x1478 c0x0000 (---------------) + I slask
+- 0x002e17c6, // n0x1479 c0x0000 (---------------) + I slupsk
+- 0x002e2705, // n0x147a c0x0000 (---------------) + I sopot
+- 0x0028a083, // n0x147b c0x0000 (---------------) + I sos
+- 0x0028a089, // n0x147c c0x0000 (---------------) + I sosnowiec
+- 0x0026aecc, // n0x147d c0x0000 (---------------) + I stalowa-wola
+- 0x0029f40c, // n0x147e c0x0000 (---------------) + I starachowice
+- 0x00267e08, // n0x147f c0x0000 (---------------) + I stargard
+- 0x002d6ec7, // n0x1480 c0x0000 (---------------) + I suwalki
+- 0x002ec608, // n0x1481 c0x0000 (---------------) + I swidnica
+- 0x002ec94a, // n0x1482 c0x0000 (---------------) + I swiebodzin
+- 0x002ecd0b, // n0x1483 c0x0000 (---------------) + I swinoujscie
+- 0x002c9848, // n0x1484 c0x0000 (---------------) + I szczecin
+- 0x002a4688, // n0x1485 c0x0000 (---------------) + I szczytno
+- 0x00224f06, // n0x1486 c0x0000 (---------------) + I szkola
+- 0x002050c5, // n0x1487 c0x0000 (---------------) + I targi
+- 0x0021194a, // n0x1488 c0x0000 (---------------) + I tarnobrzeg
+- 0x00234245, // n0x1489 c0x0000 (---------------) + I tgory
+- 0x0023a842, // n0x148a c0x0000 (---------------) + I tm
+- 0x002b2c47, // n0x148b c0x0000 (---------------) + I tourism
+- 0x002ddac6, // n0x148c c0x0000 (---------------) + I travel
+- 0x0020b805, // n0x148d c0x0000 (---------------) + I turek
+- 0x002e5589, // n0x148e c0x0000 (---------------) + I turystyka
+- 0x002cda85, // n0x148f c0x0000 (---------------) + I tychy
+- 0x0027d586, // n0x1490 c0x0000 (---------------) + I usenet
+- 0x0029b445, // n0x1491 c0x0000 (---------------) + I ustka
+- 0x0024d949, // n0x1492 c0x0000 (---------------) + I walbrzych
+- 0x0022e186, // n0x1493 c0x0000 (---------------) + I warmia
+- 0x002bfa48, // n0x1494 c0x0000 (---------------) + I warszawa
+- 0x0028a603, // n0x1495 c0x0000 (---------------) + I waw
+- 0x00231086, // n0x1496 c0x0000 (---------------) + I wegrow
+- 0x00267286, // n0x1497 c0x0000 (---------------) + I wielun
+- 0x002c0605, // n0x1498 c0x0000 (---------------) + I wlocl
+- 0x002c0609, // n0x1499 c0x0000 (---------------) + I wloclawek
+- 0x00268a89, // n0x149a c0x0000 (---------------) + I wodzislaw
+- 0x002f7d07, // n0x149b c0x0000 (---------------) + I wolomin
+- 0x002404c4, // n0x149c c0x0000 (---------------) + I wroc
+- 0x002404c7, // n0x149d c0x0000 (---------------) + I wroclaw
+- 0x00233a09, // n0x149e c0x0000 (---------------) + I zachpomor
+- 0x0021d005, // n0x149f c0x0000 (---------------) + I zagan
+- 0x0023d308, // n0x14a0 c0x0000 (---------------) + I zakopane
+- 0x00201145, // n0x14a1 c0x0000 (---------------) + I zarow
+- 0x002ae2c5, // n0x14a2 c0x0000 (---------------) + I zgora
+- 0x00214909, // n0x14a3 c0x0000 (---------------) + I zgorzelec
+- 0x0020d002, // n0x14a4 c0x0000 (---------------) + I pa
+- 0x00200a42, // n0x14a5 c0x0000 (---------------) + I po
+- 0x00200882, // n0x14a6 c0x0000 (---------------) + I so
+- 0x002ba542, // n0x14a7 c0x0000 (---------------) + I sr
+- 0x002688c9, // n0x14a8 c0x0000 (---------------) + I starostwo
+- 0x00202b82, // n0x14a9 c0x0000 (---------------) + I ug
+- 0x00209342, // n0x14aa c0x0000 (---------------) + I um
+- 0x00204f44, // n0x14ab c0x0000 (---------------) + I upow
+- 0x0023ed02, // n0x14ac c0x0000 (---------------) + I uw
+- 0x0020d642, // n0x14ad c0x0000 (---------------) + I co
+- 0x002df843, // n0x14ae c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x14af c0x0000 (---------------) + I gov
+- 0x00214843, // n0x14b0 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x14b1 c0x0000 (---------------) + I org
+- 0x00206c42, // n0x14b2 c0x0000 (---------------) + I ac
+- 0x0030c243, // n0x14b3 c0x0000 (---------------) + I biz
+- 0x0020d643, // n0x14b4 c0x0000 (---------------) + I com
+- 0x002df843, // n0x14b5 c0x0000 (---------------) + I edu
+- 0x00202043, // n0x14b6 c0x0000 (---------------) + I est
+- 0x00218d43, // n0x14b7 c0x0000 (---------------) + I gov
+- 0x00210e04, // n0x14b8 c0x0000 (---------------) + I info
+- 0x00268b84, // n0x14b9 c0x0000 (---------------) + I isla
+- 0x00202f04, // n0x14ba c0x0000 (---------------) + I name
+- 0x00214843, // n0x14bb c0x0000 (---------------) + I net
+- 0x0023e983, // n0x14bc c0x0000 (---------------) + I org
+- 0x002d1383, // n0x14bd c0x0000 (---------------) + I pro
+- 0x002d1884, // n0x14be c0x0000 (---------------) + I prof
+- 0x00290503, // n0x14bf c0x0000 (---------------) + I aca
+- 0x00218003, // n0x14c0 c0x0000 (---------------) + I bar
+- 0x002860c3, // n0x14c1 c0x0000 (---------------) + I cpa
+- 0x00204883, // n0x14c2 c0x0000 (---------------) + I eng
+- 0x00279843, // n0x14c3 c0x0000 (---------------) + I jur
+- 0x00205803, // n0x14c4 c0x0000 (---------------) + I law
+- 0x0023dbc3, // n0x14c5 c0x0000 (---------------) + I med
+- 0x0020d643, // n0x14c6 c0x0000 (---------------) + I com
+- 0x002df843, // n0x14c7 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x14c8 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x14c9 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x14ca c0x0000 (---------------) + I org
+- 0x002cdd83, // n0x14cb c0x0000 (---------------) + I plo
+- 0x002f1383, // n0x14cc c0x0000 (---------------) + I sec
+- 0x0003c708, // n0x14cd c0x0000 (---------------) + blogspot
+- 0x0020d643, // n0x14ce c0x0000 (---------------) + I com
+- 0x002df843, // n0x14cf c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x14d0 c0x0000 (---------------) + I gov
+- 0x00217543, // n0x14d1 c0x0000 (---------------) + I int
+- 0x00214843, // n0x14d2 c0x0000 (---------------) + I net
+- 0x0025af84, // n0x14d3 c0x0000 (---------------) + I nome
+- 0x0023e983, // n0x14d4 c0x0000 (---------------) + I org
+- 0x0029ebc4, // n0x14d5 c0x0000 (---------------) + I publ
+- 0x002c0a85, // n0x14d6 c0x0000 (---------------) + I belau
+- 0x0020d642, // n0x14d7 c0x0000 (---------------) + I co
+- 0x00207902, // n0x14d8 c0x0000 (---------------) + I ed
+- 0x00200482, // n0x14d9 c0x0000 (---------------) + I go
+- 0x00203e82, // n0x14da c0x0000 (---------------) + I ne
+- 0x00200a82, // n0x14db c0x0000 (---------------) + I or
+- 0x0020d643, // n0x14dc c0x0000 (---------------) + I com
+- 0x0023ae84, // n0x14dd c0x0000 (---------------) + I coop
+- 0x002df843, // n0x14de c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x14df c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x14e0 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x14e1 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x14e2 c0x0000 (---------------) + I org
+- 0x0020d643, // n0x14e3 c0x0000 (---------------) + I com
+- 0x002df843, // n0x14e4 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x14e5 c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x14e6 c0x0000 (---------------) + I mil
+- 0x00202f04, // n0x14e7 c0x0000 (---------------) + I name
+- 0x00214843, // n0x14e8 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x14e9 c0x0000 (---------------) + I org
+- 0x00201d83, // n0x14ea c0x0000 (---------------) + I sch
+- 0x002072c4, // n0x14eb c0x0000 (---------------) + I asso
+- 0x0003c708, // n0x14ec c0x0000 (---------------) + blogspot
+- 0x0020d643, // n0x14ed c0x0000 (---------------) + I com
+- 0x00216583, // n0x14ee c0x0000 (---------------) + I nom
+- 0x00230884, // n0x14ef c0x0000 (---------------) + I arts
+- 0x0003c708, // n0x14f0 c0x0000 (---------------) + blogspot
+- 0x0020d643, // n0x14f1 c0x0000 (---------------) + I com
+- 0x00243504, // n0x14f2 c0x0000 (---------------) + I firm
+- 0x00210e04, // n0x14f3 c0x0000 (---------------) + I info
+- 0x00216583, // n0x14f4 c0x0000 (---------------) + I nom
+- 0x00200242, // n0x14f5 c0x0000 (---------------) + I nt
+- 0x0023e983, // n0x14f6 c0x0000 (---------------) + I org
+- 0x002c1d83, // n0x14f7 c0x0000 (---------------) + I rec
+- 0x002e9c05, // n0x14f8 c0x0000 (---------------) + I store
+- 0x0023a842, // n0x14f9 c0x0000 (---------------) + I tm
+- 0x00240643, // n0x14fa c0x0000 (---------------) + I www
+- 0x00206c42, // n0x14fb c0x0000 (---------------) + I ac
+- 0x0020d642, // n0x14fc c0x0000 (---------------) + I co
+- 0x002df843, // n0x14fd c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x14fe c0x0000 (---------------) + I gov
+- 0x002027c2, // n0x14ff c0x0000 (---------------) + I in
+- 0x0023e983, // n0x1500 c0x0000 (---------------) + I org
+- 0x00206c42, // n0x1501 c0x0000 (---------------) + I ac
+- 0x00206ac7, // n0x1502 c0x0000 (---------------) + I adygeya
+- 0x002eb045, // n0x1503 c0x0000 (---------------) + I altai
+- 0x00276304, // n0x1504 c0x0000 (---------------) + I amur
+- 0x002c1906, // n0x1505 c0x0000 (---------------) + I amursk
+- 0x0022660b, // n0x1506 c0x0000 (---------------) + I arkhangelsk
+- 0x0024b489, // n0x1507 c0x0000 (---------------) + I astrakhan
+- 0x002a44c6, // n0x1508 c0x0000 (---------------) + I baikal
+- 0x0033c149, // n0x1509 c0x0000 (---------------) + I bashkiria
+- 0x002a6e08, // n0x150a c0x0000 (---------------) + I belgorod
+- 0x0020e243, // n0x150b c0x0000 (---------------) + I bir
+- 0x00223dc7, // n0x150c c0x0000 (---------------) + I bryansk
+- 0x00258948, // n0x150d c0x0000 (---------------) + I buryatia
+- 0x0033aa43, // n0x150e c0x0000 (---------------) + I cbg
+- 0x0023f584, // n0x150f c0x0000 (---------------) + I chel
+- 0x0025354b, // n0x1510 c0x0000 (---------------) + I chelyabinsk
+- 0x0028a285, // n0x1511 c0x0000 (---------------) + I chita
+- 0x0033dd08, // n0x1512 c0x0000 (---------------) + I chukotka
+- 0x0031d709, // n0x1513 c0x0000 (---------------) + I chuvashia
+- 0x00231003, // n0x1514 c0x0000 (---------------) + I cmw
+- 0x0020d643, // n0x1515 c0x0000 (---------------) + I com
+- 0x002c0d88, // n0x1516 c0x0000 (---------------) + I dagestan
+- 0x0024d687, // n0x1517 c0x0000 (---------------) + I dudinka
+- 0x0022b906, // n0x1518 c0x0000 (---------------) + I e-burg
+- 0x002df843, // n0x1519 c0x0000 (---------------) + I edu
+- 0x00316407, // n0x151a c0x0000 (---------------) + I fareast
+- 0x00218d43, // n0x151b c0x0000 (---------------) + I gov
+- 0x0024ef06, // n0x151c c0x0000 (---------------) + I grozny
+- 0x00217543, // n0x151d c0x0000 (---------------) + I int
+- 0x00278847, // n0x151e c0x0000 (---------------) + I irkutsk
+- 0x00264987, // n0x151f c0x0000 (---------------) + I ivanovo
+- 0x002c40c7, // n0x1520 c0x0000 (---------------) + I izhevsk
+- 0x00223a45, // n0x1521 c0x0000 (---------------) + I jamal
+- 0x00210103, // n0x1522 c0x0000 (---------------) + I jar
+- 0x002a54cb, // n0x1523 c0x0000 (---------------) + I joshkar-ola
+- 0x00231508, // n0x1524 c0x0000 (---------------) + I k-uralsk
+- 0x002af448, // n0x1525 c0x0000 (---------------) + I kalmykia
+- 0x002e5e06, // n0x1526 c0x0000 (---------------) + I kaluga
+- 0x002d8909, // n0x1527 c0x0000 (---------------) + I kamchatka
+- 0x002b10c7, // n0x1528 c0x0000 (---------------) + I karelia
+- 0x002f16c5, // n0x1529 c0x0000 (---------------) + I kazan
+- 0x00248604, // n0x152a c0x0000 (---------------) + I kchr
+- 0x002150c8, // n0x152b c0x0000 (---------------) + I kemerovo
+- 0x0025ffca, // n0x152c c0x0000 (---------------) + I khabarovsk
+- 0x00260209, // n0x152d c0x0000 (---------------) + I khakassia
+- 0x00297803, // n0x152e c0x0000 (---------------) + I khv
+- 0x0026d945, // n0x152f c0x0000 (---------------) + I kirov
+- 0x002a07c3, // n0x1530 c0x0000 (---------------) + I kms
+- 0x002dc586, // n0x1531 c0x0000 (---------------) + I koenig
+- 0x002c28c4, // n0x1532 c0x0000 (---------------) + I komi
+- 0x0029bc88, // n0x1533 c0x0000 (---------------) + I kostroma
+- 0x002a054b, // n0x1534 c0x0000 (---------------) + I krasnoyarsk
+- 0x00274545, // n0x1535 c0x0000 (---------------) + I kuban
+- 0x002a6b86, // n0x1536 c0x0000 (---------------) + I kurgan
+- 0x002a9285, // n0x1537 c0x0000 (---------------) + I kursk
+- 0x002a9a08, // n0x1538 c0x0000 (---------------) + I kustanai
+- 0x002aa907, // n0x1539 c0x0000 (---------------) + I kuzbass
+- 0x00346ec7, // n0x153a c0x0000 (---------------) + I lipetsk
+- 0x00341c87, // n0x153b c0x0000 (---------------) + I magadan
+- 0x00236188, // n0x153c c0x0000 (---------------) + I magnitka
+- 0x0021c304, // n0x153d c0x0000 (---------------) + I mari
+- 0x0021c307, // n0x153e c0x0000 (---------------) + I mari-el
+- 0x00323986, // n0x153f c0x0000 (---------------) + I marine
+- 0x0022f003, // n0x1540 c0x0000 (---------------) + I mil
+- 0x002b7408, // n0x1541 c0x0000 (---------------) + I mordovia
+- 0x002ba4c6, // n0x1542 c0x0000 (---------------) + I mosreg
+- 0x00276f83, // n0x1543 c0x0000 (---------------) + I msk
+- 0x002c2708, // n0x1544 c0x0000 (---------------) + I murmansk
+- 0x002c5285, // n0x1545 c0x0000 (---------------) + I mytis
+- 0x002e22c8, // n0x1546 c0x0000 (---------------) + I nakhodka
+- 0x002ef7c7, // n0x1547 c0x0000 (---------------) + I nalchik
+- 0x00214843, // n0x1548 c0x0000 (---------------) + I net
+- 0x00324103, // n0x1549 c0x0000 (---------------) + I nkz
+- 0x00278084, // n0x154a c0x0000 (---------------) + I nnov
+- 0x002ade87, // n0x154b c0x0000 (---------------) + I norilsk
+- 0x00216003, // n0x154c c0x0000 (---------------) + I nov
+- 0x00264a4b, // n0x154d c0x0000 (---------------) + I novosibirsk
+- 0x00216b43, // n0x154e c0x0000 (---------------) + I nsk
+- 0x00276f44, // n0x154f c0x0000 (---------------) + I omsk
+- 0x002e9c88, // n0x1550 c0x0000 (---------------) + I orenburg
+- 0x0023e983, // n0x1551 c0x0000 (---------------) + I org
+- 0x00298385, // n0x1552 c0x0000 (---------------) + I oryol
+- 0x0023e505, // n0x1553 c0x0000 (---------------) + I oskol
+- 0x0020d006, // n0x1554 c0x0000 (---------------) + I palana
+- 0x00264f85, // n0x1555 c0x0000 (---------------) + I penza
+- 0x002c5644, // n0x1556 c0x0000 (---------------) + I perm
+- 0x00203f02, // n0x1557 c0x0000 (---------------) + I pp
+- 0x002e1885, // n0x1558 c0x0000 (---------------) + I pskov
+- 0x002d2bc3, // n0x1559 c0x0000 (---------------) + I ptz
+- 0x002b8c0a, // n0x155a c0x0000 (---------------) + I pyatigorsk
+- 0x002186c3, // n0x155b c0x0000 (---------------) + I rnd
+- 0x00289849, // n0x155c c0x0000 (---------------) + I rubtsovsk
+- 0x0021c006, // n0x155d c0x0000 (---------------) + I ryazan
+- 0x00336448, // n0x155e c0x0000 (---------------) + I sakhalin
+- 0x00279fc6, // n0x155f c0x0000 (---------------) + I samara
+- 0x002820c7, // n0x1560 c0x0000 (---------------) + I saratov
+- 0x002e0c48, // n0x1561 c0x0000 (---------------) + I simbirsk
+- 0x00216a08, // n0x1562 c0x0000 (---------------) + I smolensk
+- 0x002e1b83, // n0x1563 c0x0000 (---------------) + I snz
+- 0x002e59c3, // n0x1564 c0x0000 (---------------) + I spb
+- 0x0033fa09, // n0x1565 c0x0000 (---------------) + I stavropol
+- 0x002ee683, // n0x1566 c0x0000 (---------------) + I stv
+- 0x002b3a86, // n0x1567 c0x0000 (---------------) + I surgut
+- 0x00319b86, // n0x1568 c0x0000 (---------------) + I syzran
+- 0x00346506, // n0x1569 c0x0000 (---------------) + I tambov
+- 0x0021d3c9, // n0x156a c0x0000 (---------------) + I tatarstan
+- 0x0023c544, // n0x156b c0x0000 (---------------) + I test
+- 0x0024f543, // n0x156c c0x0000 (---------------) + I tom
+- 0x002b3cc5, // n0x156d c0x0000 (---------------) + I tomsk
+- 0x00230909, // n0x156e c0x0000 (---------------) + I tsaritsyn
+- 0x00234d83, // n0x156f c0x0000 (---------------) + I tsk
+- 0x002e2804, // n0x1570 c0x0000 (---------------) + I tula
+- 0x002eaa44, // n0x1571 c0x0000 (---------------) + I tuva
+- 0x002eac44, // n0x1572 c0x0000 (---------------) + I tver
+- 0x00209d86, // n0x1573 c0x0000 (---------------) + I tyumen
+- 0x0022b103, // n0x1574 c0x0000 (---------------) + I udm
+- 0x0022b108, // n0x1575 c0x0000 (---------------) + I udmurtia
+- 0x0024b0c8, // n0x1576 c0x0000 (---------------) + I ulan-ude
+- 0x0025fe86, // n0x1577 c0x0000 (---------------) + I vdonsk
+- 0x002f14cb, // n0x1578 c0x0000 (---------------) + I vladikavkaz
+- 0x002f1808, // n0x1579 c0x0000 (---------------) + I vladimir
+- 0x002f1e8b, // n0x157a c0x0000 (---------------) + I vladivostok
+- 0x002f2a89, // n0x157b c0x0000 (---------------) + I volgograd
+- 0x002f3187, // n0x157c c0x0000 (---------------) + I vologda
+- 0x002f3b48, // n0x157d c0x0000 (---------------) + I voronezh
+- 0x002f4183, // n0x157e c0x0000 (---------------) + I vrn
+- 0x002f4246, // n0x157f c0x0000 (---------------) + I vyatka
+- 0x0030cc87, // n0x1580 c0x0000 (---------------) + I yakutia
+- 0x00281685, // n0x1581 c0x0000 (---------------) + I yamal
+- 0x002f6cc9, // n0x1582 c0x0000 (---------------) + I yaroslavl
+- 0x00227b4d, // n0x1583 c0x0000 (---------------) + I yekaterinburg
+- 0x00336291, // n0x1584 c0x0000 (---------------) + I yuzhno-sakhalinsk
+- 0x0022c385, // n0x1585 c0x0000 (---------------) + I zgrad
+- 0x00206c42, // n0x1586 c0x0000 (---------------) + I ac
+- 0x0020d642, // n0x1587 c0x0000 (---------------) + I co
+- 0x0020d643, // n0x1588 c0x0000 (---------------) + I com
+- 0x002df843, // n0x1589 c0x0000 (---------------) + I edu
+- 0x00257384, // n0x158a c0x0000 (---------------) + I gouv
+- 0x00218d43, // n0x158b c0x0000 (---------------) + I gov
+- 0x00217543, // n0x158c c0x0000 (---------------) + I int
+- 0x0022f003, // n0x158d c0x0000 (---------------) + I mil
+- 0x00214843, // n0x158e c0x0000 (---------------) + I net
+- 0x0020d643, // n0x158f c0x0000 (---------------) + I com
+- 0x002df843, // n0x1590 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x1591 c0x0000 (---------------) + I gov
+- 0x0023dbc3, // n0x1592 c0x0000 (---------------) + I med
+- 0x00214843, // n0x1593 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x1594 c0x0000 (---------------) + I org
+- 0x0029b083, // n0x1595 c0x0000 (---------------) + I pub
+- 0x00201d83, // n0x1596 c0x0000 (---------------) + I sch
+- 0x0020d643, // n0x1597 c0x0000 (---------------) + I com
+- 0x002df843, // n0x1598 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x1599 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x159a c0x0000 (---------------) + I net
+- 0x0023e983, // n0x159b c0x0000 (---------------) + I org
+- 0x0020d643, // n0x159c c0x0000 (---------------) + I com
+- 0x002df843, // n0x159d c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x159e c0x0000 (---------------) + I gov
+- 0x00214843, // n0x159f c0x0000 (---------------) + I net
+- 0x0023e983, // n0x15a0 c0x0000 (---------------) + I org
+- 0x0020d643, // n0x15a1 c0x0000 (---------------) + I com
+- 0x002df843, // n0x15a2 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x15a3 c0x0000 (---------------) + I gov
+- 0x00210e04, // n0x15a4 c0x0000 (---------------) + I info
+- 0x0023dbc3, // n0x15a5 c0x0000 (---------------) + I med
+- 0x00214843, // n0x15a6 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x15a7 c0x0000 (---------------) + I org
+- 0x00281802, // n0x15a8 c0x0000 (---------------) + I tv
+- 0x00200181, // n0x15a9 c0x0000 (---------------) + I a
+- 0x00206c42, // n0x15aa c0x0000 (---------------) + I ac
+- 0x00200001, // n0x15ab c0x0000 (---------------) + I b
+- 0x002f4c82, // n0x15ac c0x0000 (---------------) + I bd
+- 0x0003c708, // n0x15ad c0x0000 (---------------) + blogspot
+- 0x002192c5, // n0x15ae c0x0000 (---------------) + I brand
+- 0x00200501, // n0x15af c0x0000 (---------------) + I c
+- 0x00201481, // n0x15b0 c0x0000 (---------------) + I d
+- 0x00200041, // n0x15b1 c0x0000 (---------------) + I e
+- 0x00201281, // n0x15b2 c0x0000 (---------------) + I f
+- 0x0032fbc2, // n0x15b3 c0x0000 (---------------) + I fh
+- 0x0032fbc4, // n0x15b4 c0x0000 (---------------) + I fhsk
+- 0x00331543, // n0x15b5 c0x0000 (---------------) + I fhv
+- 0x00200481, // n0x15b6 c0x0000 (---------------) + I g
+- 0x00200741, // n0x15b7 c0x0000 (---------------) + I h
+- 0x00200781, // n0x15b8 c0x0000 (---------------) + I i
+- 0x00200301, // n0x15b9 c0x0000 (---------------) + I k
+- 0x002bae47, // n0x15ba c0x0000 (---------------) + I komforb
+- 0x002c424f, // n0x15bb c0x0000 (---------------) + I kommunalforbund
+- 0x002e0e06, // n0x15bc c0x0000 (---------------) + I komvux
+- 0x00202541, // n0x15bd c0x0000 (---------------) + I l
+- 0x002502c6, // n0x15be c0x0000 (---------------) + I lanbib
+- 0x00201341, // n0x15bf c0x0000 (---------------) + I m
+- 0x002000c1, // n0x15c0 c0x0000 (---------------) + I n
+- 0x0020174e, // n0x15c1 c0x0000 (---------------) + I naturbruksgymn
+- 0x002002c1, // n0x15c2 c0x0000 (---------------) + I o
+- 0x0023e983, // n0x15c3 c0x0000 (---------------) + I org
+- 0x00200701, // n0x15c4 c0x0000 (---------------) + I p
+- 0x002c5b85, // n0x15c5 c0x0000 (---------------) + I parti
+- 0x00203f02, // n0x15c6 c0x0000 (---------------) + I pp
+- 0x003460c5, // n0x15c7 c0x0000 (---------------) + I press
+- 0x00200081, // n0x15c8 c0x0000 (---------------) + I r
+- 0x00200881, // n0x15c9 c0x0000 (---------------) + I s
+- 0x0023dec4, // n0x15ca c0x0000 (---------------) + I sshn
+- 0x00200141, // n0x15cb c0x0000 (---------------) + I t
+- 0x0023a842, // n0x15cc c0x0000 (---------------) + I tm
+- 0x00200f01, // n0x15cd c0x0000 (---------------) + I u
+- 0x00201241, // n0x15ce c0x0000 (---------------) + I w
+- 0x00202dc1, // n0x15cf c0x0000 (---------------) + I x
+- 0x00200341, // n0x15d0 c0x0000 (---------------) + I y
+- 0x00201141, // n0x15d1 c0x0000 (---------------) + I z
+- 0x0003c708, // n0x15d2 c0x0000 (---------------) + blogspot
+- 0x0020d643, // n0x15d3 c0x0000 (---------------) + I com
+- 0x002df843, // n0x15d4 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x15d5 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x15d6 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x15d7 c0x0000 (---------------) + I org
+- 0x00210803, // n0x15d8 c0x0000 (---------------) + I per
+- 0x0020d643, // n0x15d9 c0x0000 (---------------) + I com
+- 0x00218d43, // n0x15da c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x15db c0x0000 (---------------) + I mil
+- 0x00214843, // n0x15dc c0x0000 (---------------) + I net
+- 0x0023e983, // n0x15dd c0x0000 (---------------) + I org
+- 0x0003c708, // n0x15de c0x0000 (---------------) + blogspot
+- 0x0020d643, // n0x15df c0x0000 (---------------) + I com
+- 0x002df843, // n0x15e0 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x15e1 c0x0000 (---------------) + I gov
+- 0x00214843, // n0x15e2 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x15e3 c0x0000 (---------------) + I org
+- 0x0020e343, // n0x15e4 c0x0000 (---------------) + I art
+- 0x0020d643, // n0x15e5 c0x0000 (---------------) + I com
+- 0x002df843, // n0x15e6 c0x0000 (---------------) + I edu
+- 0x00257384, // n0x15e7 c0x0000 (---------------) + I gouv
+- 0x0023e983, // n0x15e8 c0x0000 (---------------) + I org
+- 0x0029a085, // n0x15e9 c0x0000 (---------------) + I perso
+- 0x00209b84, // n0x15ea c0x0000 (---------------) + I univ
+- 0x0020d643, // n0x15eb c0x0000 (---------------) + I com
+- 0x00214843, // n0x15ec c0x0000 (---------------) + I net
+- 0x0023e983, // n0x15ed c0x0000 (---------------) + I org
+- 0x0020d642, // n0x15ee c0x0000 (---------------) + I co
+- 0x0020d643, // n0x15ef c0x0000 (---------------) + I com
+- 0x00235509, // n0x15f0 c0x0000 (---------------) + I consulado
+- 0x002df843, // n0x15f1 c0x0000 (---------------) + I edu
+- 0x0022d1c9, // n0x15f2 c0x0000 (---------------) + I embaixada
+- 0x00218d43, // n0x15f3 c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x15f4 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x15f5 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x15f6 c0x0000 (---------------) + I org
+- 0x002d0388, // n0x15f7 c0x0000 (---------------) + I principe
+- 0x00277d47, // n0x15f8 c0x0000 (---------------) + I saotome
+- 0x002e9c05, // n0x15f9 c0x0000 (---------------) + I store
+- 0x00218d43, // n0x15fa c0x0000 (---------------) + I gov
+- 0x0020d643, // n0x15fb c0x0000 (---------------) + I com
+- 0x002df843, // n0x15fc c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x15fd c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x15fe c0x0000 (---------------) + I mil
+- 0x00214843, // n0x15ff c0x0000 (---------------) + I net
+- 0x0023e983, // n0x1600 c0x0000 (---------------) + I org
+- 0x00206c42, // n0x1601 c0x0000 (---------------) + I ac
+- 0x0020d642, // n0x1602 c0x0000 (---------------) + I co
+- 0x0023e983, // n0x1603 c0x0000 (---------------) + I org
+- 0x0003c708, // n0x1604 c0x0000 (---------------) + blogspot
+- 0x00206c42, // n0x1605 c0x0000 (---------------) + I ac
+- 0x0020d642, // n0x1606 c0x0000 (---------------) + I co
+- 0x00200482, // n0x1607 c0x0000 (---------------) + I go
+- 0x002027c2, // n0x1608 c0x0000 (---------------) + I in
+- 0x00206702, // n0x1609 c0x0000 (---------------) + I mi
+- 0x00214843, // n0x160a c0x0000 (---------------) + I net
+- 0x00200a82, // n0x160b c0x0000 (---------------) + I or
+- 0x00206c42, // n0x160c c0x0000 (---------------) + I ac
+- 0x0030c243, // n0x160d c0x0000 (---------------) + I biz
+- 0x0020d642, // n0x160e c0x0000 (---------------) + I co
+- 0x0020d643, // n0x160f c0x0000 (---------------) + I com
+- 0x002df843, // n0x1610 c0x0000 (---------------) + I edu
+- 0x00200482, // n0x1611 c0x0000 (---------------) + I go
+- 0x00218d43, // n0x1612 c0x0000 (---------------) + I gov
+- 0x00217543, // n0x1613 c0x0000 (---------------) + I int
+- 0x0022f003, // n0x1614 c0x0000 (---------------) + I mil
+- 0x00202f04, // n0x1615 c0x0000 (---------------) + I name
+- 0x00214843, // n0x1616 c0x0000 (---------------) + I net
+- 0x00211783, // n0x1617 c0x0000 (---------------) + I nic
+- 0x0023e983, // n0x1618 c0x0000 (---------------) + I org
+- 0x0023c544, // n0x1619 c0x0000 (---------------) + I test
+- 0x00205e43, // n0x161a c0x0000 (---------------) + I web
+- 0x00218d43, // n0x161b c0x0000 (---------------) + I gov
+- 0x0020d642, // n0x161c c0x0000 (---------------) + I co
+- 0x0020d643, // n0x161d c0x0000 (---------------) + I com
+- 0x002df843, // n0x161e c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x161f c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x1620 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x1621 c0x0000 (---------------) + I net
+- 0x00216583, // n0x1622 c0x0000 (---------------) + I nom
+- 0x0023e983, // n0x1623 c0x0000 (---------------) + I org
+- 0x00230e47, // n0x1624 c0x0000 (---------------) + I agrinet
+- 0x0020d643, // n0x1625 c0x0000 (---------------) + I com
+- 0x0030a4c7, // n0x1626 c0x0000 (---------------) + I defense
+- 0x002e7846, // n0x1627 c0x0000 (---------------) + I edunet
+- 0x00209083, // n0x1628 c0x0000 (---------------) + I ens
+- 0x00242a83, // n0x1629 c0x0000 (---------------) + I fin
+- 0x00218d43, // n0x162a c0x0000 (---------------) + I gov
+- 0x002051c3, // n0x162b c0x0000 (---------------) + I ind
+- 0x00210e04, // n0x162c c0x0000 (---------------) + I info
+- 0x00275104, // n0x162d c0x0000 (---------------) + I intl
+- 0x002c5706, // n0x162e c0x0000 (---------------) + I mincom
+- 0x00201743, // n0x162f c0x0000 (---------------) + I nat
+- 0x00214843, // n0x1630 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x1631 c0x0000 (---------------) + I org
+- 0x0029a085, // n0x1632 c0x0000 (---------------) + I perso
+- 0x00200084, // n0x1633 c0x0000 (---------------) + I rnrt
+- 0x00278c43, // n0x1634 c0x0000 (---------------) + I rns
+- 0x002794c3, // n0x1635 c0x0000 (---------------) + I rnu
+- 0x002b2c47, // n0x1636 c0x0000 (---------------) + I tourism
+- 0x00244745, // n0x1637 c0x0000 (---------------) + I turen
+- 0x0020d643, // n0x1638 c0x0000 (---------------) + I com
+- 0x002df843, // n0x1639 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x163a c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x163b c0x0000 (---------------) + I mil
+- 0x00214843, // n0x163c c0x0000 (---------------) + I net
+- 0x0023e983, // n0x163d c0x0000 (---------------) + I org
+- 0x47e08ac2, // n0x163e c0x011f (n0x1640-n0x1641) o I nc
+- 0x00611783, // n0x163f c0x0001 (---------------) ! I nic
+- 0x00218d43, // n0x1640 c0x0000 (---------------) + I gov
+- 0x00228d84, // n0x1641 c0x0000 (---------------) + I aero
+- 0x0030c243, // n0x1642 c0x0000 (---------------) + I biz
+- 0x0020d642, // n0x1643 c0x0000 (---------------) + I co
+- 0x0020d643, // n0x1644 c0x0000 (---------------) + I com
+- 0x0023ae84, // n0x1645 c0x0000 (---------------) + I coop
+- 0x002df843, // n0x1646 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x1647 c0x0000 (---------------) + I gov
+- 0x00210e04, // n0x1648 c0x0000 (---------------) + I info
+- 0x00217543, // n0x1649 c0x0000 (---------------) + I int
+- 0x003422c4, // n0x164a c0x0000 (---------------) + I jobs
+- 0x00303304, // n0x164b c0x0000 (---------------) + I mobi
+- 0x002c4946, // n0x164c c0x0000 (---------------) + I museum
+- 0x00202f04, // n0x164d c0x0000 (---------------) + I name
+- 0x00214843, // n0x164e c0x0000 (---------------) + I net
+- 0x0023e983, // n0x164f c0x0000 (---------------) + I org
+- 0x002d1383, // n0x1650 c0x0000 (---------------) + I pro
+- 0x002ddac6, // n0x1651 c0x0000 (---------------) + I travel
+- 0x0004740b, // n0x1652 c0x0000 (---------------) + better-than
+- 0x00004a46, // n0x1653 c0x0000 (---------------) + dyndns
+- 0x0001400a, // n0x1654 c0x0000 (---------------) + on-the-web
+- 0x00131aca, // n0x1655 c0x0000 (---------------) + worse-than
+- 0x0003c708, // n0x1656 c0x0000 (---------------) + blogspot
+- 0x00262344, // n0x1657 c0x0000 (---------------) + I club
+- 0x0020d643, // n0x1658 c0x0000 (---------------) + I com
+- 0x0030c204, // n0x1659 c0x0000 (---------------) + I ebiz
+- 0x002df843, // n0x165a c0x0000 (---------------) + I edu
+- 0x0027bcc4, // n0x165b c0x0000 (---------------) + I game
+- 0x00218d43, // n0x165c c0x0000 (---------------) + I gov
+- 0x002629c3, // n0x165d c0x0000 (---------------) + I idv
+- 0x0022f003, // n0x165e c0x0000 (---------------) + I mil
+- 0x00214843, // n0x165f c0x0000 (---------------) + I net
+- 0x0023e983, // n0x1660 c0x0000 (---------------) + I org
+- 0x002fd38b, // n0x1661 c0x0000 (---------------) + I xn--czrw28b
+- 0x00343c0a, // n0x1662 c0x0000 (---------------) + I xn--uc0atv
+- 0x0034e24c, // n0x1663 c0x0000 (---------------) + I xn--zf0ao64a
+- 0x00206c42, // n0x1664 c0x0000 (---------------) + I ac
+- 0x0020d642, // n0x1665 c0x0000 (---------------) + I co
+- 0x00200482, // n0x1666 c0x0000 (---------------) + I go
+- 0x002937c5, // n0x1667 c0x0000 (---------------) + I hotel
+- 0x00210e04, // n0x1668 c0x0000 (---------------) + I info
+- 0x00202f82, // n0x1669 c0x0000 (---------------) + I me
+- 0x0022f003, // n0x166a c0x0000 (---------------) + I mil
+- 0x00303304, // n0x166b c0x0000 (---------------) + I mobi
+- 0x00203e82, // n0x166c c0x0000 (---------------) + I ne
+- 0x00200a82, // n0x166d c0x0000 (---------------) + I or
+- 0x00201d82, // n0x166e c0x0000 (---------------) + I sc
+- 0x00281802, // n0x166f c0x0000 (---------------) + I tv
+- 0x002ab0c9, // n0x1670 c0x0000 (---------------) + I cherkassy
+- 0x0025cdc8, // n0x1671 c0x0000 (---------------) + I cherkasy
+- 0x00261489, // n0x1672 c0x0000 (---------------) + I chernigov
+- 0x002647c9, // n0x1673 c0x0000 (---------------) + I chernihiv
+- 0x0026c44a, // n0x1674 c0x0000 (---------------) + I chernivtsi
+- 0x0028d18a, // n0x1675 c0x0000 (---------------) + I chernovtsy
+- 0x00226c42, // n0x1676 c0x0000 (---------------) + I ck
+- 0x00231842, // n0x1677 c0x0000 (---------------) + I cn
+- 0x0020d642, // n0x1678 c0x0000 (---------------) + I co
+- 0x0020d643, // n0x1679 c0x0000 (---------------) + I com
+- 0x00234182, // n0x167a c0x0000 (---------------) + I cr
+- 0x00240706, // n0x167b c0x0000 (---------------) + I crimea
+- 0x00317442, // n0x167c c0x0000 (---------------) + I cv
+- 0x00204b02, // n0x167d c0x0000 (---------------) + I dn
+- 0x0030bb4e, // n0x167e c0x0000 (---------------) + I dnepropetrovsk
+- 0x00318fce, // n0x167f c0x0000 (---------------) + I dnipropetrovsk
+- 0x0026c2c7, // n0x1680 c0x0000 (---------------) + I dominic
+- 0x002b4e47, // n0x1681 c0x0000 (---------------) + I donetsk
+- 0x002cdd42, // n0x1682 c0x0000 (---------------) + I dp
+- 0x002df843, // n0x1683 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x1684 c0x0000 (---------------) + I gov
+- 0x00208442, // n0x1685 c0x0000 (---------------) + I if
+- 0x002027c2, // n0x1686 c0x0000 (---------------) + I in
+- 0x002907cf, // n0x1687 c0x0000 (---------------) + I ivano-frankivsk
+- 0x00226682, // n0x1688 c0x0000 (---------------) + I kh
+- 0x002789c7, // n0x1689 c0x0000 (---------------) + I kharkiv
+- 0x0027aa47, // n0x168a c0x0000 (---------------) + I kharkov
+- 0x0028e747, // n0x168b c0x0000 (---------------) + I kherson
+- 0x00290f8c, // n0x168c c0x0000 (---------------) + I khmelnitskiy
+- 0x002eb38c, // n0x168d c0x0000 (---------------) + I khmelnytskyi
+- 0x0020ab04, // n0x168e c0x0000 (---------------) + I kiev
+- 0x0026d94a, // n0x168f c0x0000 (---------------) + I kirovograd
+- 0x002a07c2, // n0x1690 c0x0000 (---------------) + I km
+- 0x002015c2, // n0x1691 c0x0000 (---------------) + I kr
+- 0x002a2644, // n0x1692 c0x0000 (---------------) + I krym
+- 0x00201942, // n0x1693 c0x0000 (---------------) + I ks
+- 0x00228002, // n0x1694 c0x0000 (---------------) + I kv
+- 0x002eb5c4, // n0x1695 c0x0000 (---------------) + I kyiv
+- 0x00216382, // n0x1696 c0x0000 (---------------) + I lg
+- 0x0020b7c2, // n0x1697 c0x0000 (---------------) + I lt
+- 0x002e5e87, // n0x1698 c0x0000 (---------------) + I lugansk
+- 0x00234d05, // n0x1699 c0x0000 (---------------) + I lutsk
+- 0x002075c2, // n0x169a c0x0000 (---------------) + I lv
+- 0x0023f484, // n0x169b c0x0000 (---------------) + I lviv
+- 0x003246c2, // n0x169c c0x0000 (---------------) + I mk
+- 0x00290648, // n0x169d c0x0000 (---------------) + I mykolaiv
+- 0x00214843, // n0x169e c0x0000 (---------------) + I net
+- 0x00213788, // n0x169f c0x0000 (---------------) + I nikolaev
+- 0x00206d82, // n0x16a0 c0x0000 (---------------) + I od
+- 0x002c3905, // n0x16a1 c0x0000 (---------------) + I odesa
+- 0x0032a546, // n0x16a2 c0x0000 (---------------) + I odessa
+- 0x0023e983, // n0x16a3 c0x0000 (---------------) + I org
+- 0x0020c3c2, // n0x16a4 c0x0000 (---------------) + I pl
+- 0x002ce907, // n0x16a5 c0x0000 (---------------) + I poltava
+- 0x00203f02, // n0x16a6 c0x0000 (---------------) + I pp
+- 0x002d1245, // n0x16a7 c0x0000 (---------------) + I rivne
+- 0x00200ac5, // n0x16a8 c0x0000 (---------------) + I rovno
+- 0x002214c2, // n0x16a9 c0x0000 (---------------) + I rv
+- 0x0023c6c2, // n0x16aa c0x0000 (---------------) + I sb
+- 0x002f9dca, // n0x16ab c0x0000 (---------------) + I sebastopol
+- 0x003003ca, // n0x16ac c0x0000 (---------------) + I sevastopol
+- 0x00216a02, // n0x16ad c0x0000 (---------------) + I sm
+- 0x0029cdc4, // n0x16ae c0x0000 (---------------) + I sumy
+- 0x002013c2, // n0x16af c0x0000 (---------------) + I te
+- 0x00229588, // n0x16b0 c0x0000 (---------------) + I ternopil
+- 0x0023c302, // n0x16b1 c0x0000 (---------------) + I uz
+- 0x00269f48, // n0x16b2 c0x0000 (---------------) + I uzhgorod
+- 0x002ef207, // n0x16b3 c0x0000 (---------------) + I vinnica
+- 0x002f0509, // n0x16b4 c0x0000 (---------------) + I vinnytsia
+- 0x00200b42, // n0x16b5 c0x0000 (---------------) + I vn
+- 0x002f3905, // n0x16b6 c0x0000 (---------------) + I volyn
+- 0x002eb005, // n0x16b7 c0x0000 (---------------) + I yalta
+- 0x0025758b, // n0x16b8 c0x0000 (---------------) + I zaporizhzhe
+- 0x002fa4cc, // n0x16b9 c0x0000 (---------------) + I zaporizhzhia
+- 0x002f3cc8, // n0x16ba c0x0000 (---------------) + I zhitomir
+- 0x00251fc8, // n0x16bb c0x0000 (---------------) + I zhytomyr
+- 0x002d2c42, // n0x16bc c0x0000 (---------------) + I zp
+- 0x0020d942, // n0x16bd c0x0000 (---------------) + I zt
+- 0x00206c42, // n0x16be c0x0000 (---------------) + I ac
+- 0x0020d642, // n0x16bf c0x0000 (---------------) + I co
+- 0x0020d643, // n0x16c0 c0x0000 (---------------) + I com
+- 0x00200482, // n0x16c1 c0x0000 (---------------) + I go
+- 0x00203e82, // n0x16c2 c0x0000 (---------------) + I ne
+- 0x00200a82, // n0x16c3 c0x0000 (---------------) + I or
+- 0x0023e983, // n0x16c4 c0x0000 (---------------) + I org
+- 0x00201d82, // n0x16c5 c0x0000 (---------------) + I sc
+- 0x00605582, // n0x16c6 c0x0001 (---------------) ! I bl
+- 0x0061bccf, // n0x16c7 c0x0001 (---------------) ! I british-library
+- 0x49e0d642, // n0x16c8 c0x0127 (n0x16d1-n0x16d2) o I co
+- 0x0068f283, // n0x16c9 c0x0001 (---------------) ! I jet
+- 0x00649483, // n0x16ca c0x0001 (---------------) ! I mod
+- 0x0061e759, // n0x16cb c0x0001 (---------------) ! I national-library-scotland
+- 0x006226c3, // n0x16cc c0x0001 (---------------) ! I nel
+- 0x00611783, // n0x16cd c0x0001 (---------------) ! I nic
+- 0x0063ba43, // n0x16ce c0x0001 (---------------) ! I nls
+- 0x006d2c8a, // n0x16cf c0x0001 (---------------) ! I parliament
+- 0x01601d83, // n0x16d0 c0x0005 (---------------)* o I sch
+- 0x0003c708, // n0x16d1 c0x0000 (---------------) + blogspot
+- 0x4a601582, // n0x16d2 c0x0129 (n0x1711-n0x1714) + I ak
+- 0x4aa03982, // n0x16d3 c0x012a (n0x1714-n0x1717) + I al
+- 0x4ae00182, // n0x16d4 c0x012b (n0x1717-n0x171a) + I ar
+- 0x4b202c02, // n0x16d5 c0x012c (n0x171a-n0x171d) + I as
+- 0x4b616d42, // n0x16d6 c0x012d (n0x171d-n0x1720) + I az
+- 0x4ba01002, // n0x16d7 c0x012e (n0x1720-n0x1723) + I ca
+- 0x4be0d642, // n0x16d8 c0x012f (n0x1723-n0x1726) + I co
+- 0x4c234a42, // n0x16d9 c0x0130 (n0x1726-n0x1729) + I ct
+- 0x4c61e242, // n0x16da c0x0131 (n0x1729-n0x172c) + I dc
+- 0x4ca02602, // n0x16db c0x0132 (n0x172c-n0x172f) + I de
+- 0x002ec6c3, // n0x16dc c0x0000 (---------------) + I dni
+- 0x0022bf83, // n0x16dd c0x0000 (---------------) + I fed
+- 0x4ce45142, // n0x16de c0x0133 (n0x172f-n0x1732) + I fl
+- 0x4d202bc2, // n0x16df c0x0134 (n0x1732-n0x1735) + I ga
+- 0x4d609b42, // n0x16e0 c0x0135 (n0x1735-n0x1738) + I gu
+- 0x4da00742, // n0x16e1 c0x0136 (n0x1738-n0x173a) + I hi
+- 0x4de05042, // n0x16e2 c0x0137 (n0x173a-n0x173d) + I ia
+- 0x4e202282, // n0x16e3 c0x0138 (n0x173d-n0x1740) + I id
+- 0x4e602702, // n0x16e4 c0x0139 (n0x1740-n0x1743) + I il
+- 0x4ea027c2, // n0x16e5 c0x013a (n0x1743-n0x1746) + I in
+- 0x000c9445, // n0x16e6 c0x0000 (---------------) + is-by
+- 0x0022d543, // n0x16e7 c0x0000 (---------------) + I isa
+- 0x00211f84, // n0x16e8 c0x0000 (---------------) + I kids
+- 0x4ee01942, // n0x16e9 c0x013b (n0x1746-n0x1749) + I ks
+- 0x4f200302, // n0x16ea c0x013c (n0x1749-n0x174c) + I ky
+- 0x4f602542, // n0x16eb c0x013d (n0x174c-n0x174f) + I la
+- 0x000a7c8b, // n0x16ec c0x0000 (---------------) + land-4-sale
+- 0x4fa02d02, // n0x16ed c0x013e (n0x174f-n0x1752) + I ma
+- 0x50211042, // n0x16ee c0x0140 (n0x1755-n0x1758) + I md
+- 0x50602f82, // n0x16ef c0x0141 (n0x1758-n0x175b) + I me
+- 0x50a06702, // n0x16f0 c0x0142 (n0x175b-n0x175e) + I mi
+- 0x50e01702, // n0x16f1 c0x0143 (n0x175e-n0x1761) + I mn
+- 0x51203d42, // n0x16f2 c0x0144 (n0x1761-n0x1764) + I mo
+- 0x51601342, // n0x16f3 c0x0145 (n0x1764-n0x1767) + I ms
+- 0x51a5c502, // n0x16f4 c0x0146 (n0x1767-n0x176a) + I mt
+- 0x51e08ac2, // n0x16f5 c0x0147 (n0x176a-n0x176d) + I nc
+- 0x522025c2, // n0x16f6 c0x0148 (n0x176d-n0x1770) + I nd
+- 0x52603e82, // n0x16f7 c0x0149 (n0x1770-n0x1773) + I ne
+- 0x52a13682, // n0x16f8 c0x014a (n0x1773-n0x1776) + I nh
+- 0x52e15442, // n0x16f9 c0x014b (n0x1776-n0x1779) + I nj
+- 0x5320c202, // n0x16fa c0x014c (n0x1779-n0x177c) + I nm
+- 0x00228bc3, // n0x16fb c0x0000 (---------------) + I nsn
+- 0x5363ab42, // n0x16fc c0x014d (n0x177c-n0x177f) + I nv
+- 0x53a11642, // n0x16fd c0x014e (n0x177f-n0x1782) + I ny
+- 0x53e03b42, // n0x16fe c0x014f (n0x1782-n0x1785) + I oh
+- 0x542002c2, // n0x16ff c0x0150 (n0x1785-n0x1788) + I ok
+- 0x54600a82, // n0x1700 c0x0151 (n0x1788-n0x178b) + I or
+- 0x54a0d002, // n0x1701 c0x0152 (n0x178b-n0x178e) + I pa
+- 0x54e61ec2, // n0x1702 c0x0153 (n0x178e-n0x1791) + I pr
+- 0x55201d02, // n0x1703 c0x0154 (n0x1791-n0x1794) + I ri
+- 0x55601d82, // n0x1704 c0x0155 (n0x1794-n0x1797) + I sc
+- 0x55a03902, // n0x1705 c0x0156 (n0x1797-n0x179a) + I sd
+- 0x000ea3cc, // n0x1706 c0x0000 (---------------) + stuff-4-sale
+- 0x55e03602, // n0x1707 c0x0157 (n0x179a-n0x179d) + I tn
+- 0x56264502, // n0x1708 c0x0158 (n0x179d-n0x17a0) + I tx
+- 0x5660a6c2, // n0x1709 c0x0159 (n0x17a0-n0x17a3) + I ut
+- 0x56a06f02, // n0x170a c0x015a (n0x17a3-n0x17a6) + I va
+- 0x56e09542, // n0x170b c0x015b (n0x17a6-n0x17a9) + I vi
+- 0x57237882, // n0x170c c0x015c (n0x17a9-n0x17ac) + I vt
+- 0x57603102, // n0x170d c0x015d (n0x17ac-n0x17af) + I wa
+- 0x57a05002, // n0x170e c0x015e (n0x17af-n0x17b2) + I wi
+- 0x57e67602, // n0x170f c0x015f (n0x17b2-n0x17b5) + I wv
+- 0x5823d502, // n0x1710 c0x0160 (n0x17b5-n0x17b8) + I wy
+- 0x00206842, // n0x1711 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1712 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1713 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1714 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1715 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1716 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1717 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1718 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1719 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x171a c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x171b c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x171c c0x0000 (---------------) + I lib
+- 0x00206842, // n0x171d c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x171e c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x171f c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1720 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1721 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1722 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1723 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1724 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1725 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1726 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1727 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1728 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1729 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x172a c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x172b c0x0000 (---------------) + I lib
+- 0x00206842, // n0x172c c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x172d c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x172e c0x0000 (---------------) + I lib
+- 0x00206842, // n0x172f c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1730 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1731 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1732 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1733 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1734 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1735 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1736 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1737 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1738 c0x0000 (---------------) + I cc
+- 0x0021bec3, // n0x1739 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x173a c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x173b c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x173c c0x0000 (---------------) + I lib
+- 0x00206842, // n0x173d c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x173e c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x173f c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1740 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1741 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1742 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1743 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1744 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1745 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1746 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1747 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1748 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1749 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x174a c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x174b c0x0000 (---------------) + I lib
+- 0x00206842, // n0x174c c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x174d c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x174e c0x0000 (---------------) + I lib
+- 0x00206842, // n0x174f c0x0000 (---------------) + I cc
+- 0x4fe316c3, // n0x1750 c0x013f (n0x1752-n0x1755) + I k12
+- 0x0021bec3, // n0x1751 c0x0000 (---------------) + I lib
+- 0x0030a184, // n0x1752 c0x0000 (---------------) + I chtr
+- 0x0032b3c6, // n0x1753 c0x0000 (---------------) + I paroch
+- 0x002d36c3, // n0x1754 c0x0000 (---------------) + I pvt
+- 0x00206842, // n0x1755 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1756 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1757 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1758 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1759 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x175a c0x0000 (---------------) + I lib
+- 0x00206842, // n0x175b c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x175c c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x175d c0x0000 (---------------) + I lib
+- 0x00206842, // n0x175e c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x175f c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1760 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1761 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1762 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1763 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1764 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1765 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1766 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1767 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1768 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1769 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x176a c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x176b c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x176c c0x0000 (---------------) + I lib
+- 0x00206842, // n0x176d c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x176e c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x176f c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1770 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1771 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1772 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1773 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1774 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1775 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1776 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1777 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1778 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1779 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x177a c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x177b c0x0000 (---------------) + I lib
+- 0x00206842, // n0x177c c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x177d c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x177e c0x0000 (---------------) + I lib
+- 0x00206842, // n0x177f c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1780 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1781 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1782 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1783 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1784 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1785 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1786 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1787 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1788 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1789 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x178a c0x0000 (---------------) + I lib
+- 0x00206842, // n0x178b c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x178c c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x178d c0x0000 (---------------) + I lib
+- 0x00206842, // n0x178e c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x178f c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1790 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1791 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1792 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1793 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1794 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1795 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1796 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x1797 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x1798 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x1799 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x179a c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x179b c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x179c c0x0000 (---------------) + I lib
+- 0x00206842, // n0x179d c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x179e c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x179f c0x0000 (---------------) + I lib
+- 0x00206842, // n0x17a0 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x17a1 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x17a2 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x17a3 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x17a4 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x17a5 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x17a6 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x17a7 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x17a8 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x17a9 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x17aa c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x17ab c0x0000 (---------------) + I lib
+- 0x00206842, // n0x17ac c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x17ad c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x17ae c0x0000 (---------------) + I lib
+- 0x00206842, // n0x17af c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x17b0 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x17b1 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x17b2 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x17b3 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x17b4 c0x0000 (---------------) + I lib
+- 0x00206842, // n0x17b5 c0x0000 (---------------) + I cc
+- 0x002316c3, // n0x17b6 c0x0000 (---------------) + I k12
+- 0x0021bec3, // n0x17b7 c0x0000 (---------------) + I lib
+- 0x0020d643, // n0x17b8 c0x0000 (---------------) + I com
+- 0x002df843, // n0x17b9 c0x0000 (---------------) + I edu
+- 0x00236b83, // n0x17ba c0x0000 (---------------) + I gub
+- 0x0022f003, // n0x17bb c0x0000 (---------------) + I mil
+- 0x00214843, // n0x17bc c0x0000 (---------------) + I net
+- 0x0023e983, // n0x17bd c0x0000 (---------------) + I org
+- 0x0020d642, // n0x17be c0x0000 (---------------) + I co
+- 0x0020d643, // n0x17bf c0x0000 (---------------) + I com
+- 0x00214843, // n0x17c0 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x17c1 c0x0000 (---------------) + I org
+- 0x0020d643, // n0x17c2 c0x0000 (---------------) + I com
+- 0x002df843, // n0x17c3 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x17c4 c0x0000 (---------------) + I gov
+- 0x0022f003, // n0x17c5 c0x0000 (---------------) + I mil
+- 0x00214843, // n0x17c6 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x17c7 c0x0000 (---------------) + I org
+- 0x0020d642, // n0x17c8 c0x0000 (---------------) + I co
+- 0x0020d643, // n0x17c9 c0x0000 (---------------) + I com
+- 0x002bd803, // n0x17ca c0x0000 (---------------) + I e12
+- 0x002df843, // n0x17cb c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x17cc c0x0000 (---------------) + I gov
+- 0x00210e04, // n0x17cd c0x0000 (---------------) + I info
+- 0x0022f003, // n0x17ce c0x0000 (---------------) + I mil
+- 0x00214843, // n0x17cf c0x0000 (---------------) + I net
+- 0x0023e983, // n0x17d0 c0x0000 (---------------) + I org
+- 0x00205e43, // n0x17d1 c0x0000 (---------------) + I web
+- 0x0020d642, // n0x17d2 c0x0000 (---------------) + I co
+- 0x0020d643, // n0x17d3 c0x0000 (---------------) + I com
+- 0x002316c3, // n0x17d4 c0x0000 (---------------) + I k12
+- 0x00214843, // n0x17d5 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x17d6 c0x0000 (---------------) + I org
+- 0x00206c42, // n0x17d7 c0x0000 (---------------) + I ac
+- 0x0030c243, // n0x17d8 c0x0000 (---------------) + I biz
+- 0x0020d643, // n0x17d9 c0x0000 (---------------) + I com
+- 0x002df843, // n0x17da c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x17db c0x0000 (---------------) + I gov
+- 0x00246b06, // n0x17dc c0x0000 (---------------) + I health
+- 0x00210e04, // n0x17dd c0x0000 (---------------) + I info
+- 0x00217543, // n0x17de c0x0000 (---------------) + I int
+- 0x00202f04, // n0x17df c0x0000 (---------------) + I name
+- 0x00214843, // n0x17e0 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x17e1 c0x0000 (---------------) + I org
+- 0x002d1383, // n0x17e2 c0x0000 (---------------) + I pro
+- 0x0020d643, // n0x17e3 c0x0000 (---------------) + I com
+- 0x00004a46, // n0x17e4 c0x0000 (---------------) + dyndns
+- 0x002df843, // n0x17e5 c0x0000 (---------------) + I edu
+- 0x00218d43, // n0x17e6 c0x0000 (---------------) + I gov
+- 0x0009ce46, // n0x17e7 c0x0000 (---------------) + mypets
+- 0x00214843, // n0x17e8 c0x0000 (---------------) + I net
+- 0x0023e983, // n0x17e9 c0x0000 (---------------) + I org
+-}
+-
+-// children is the list of nodes' children, the parent's wildcard bit and the
+-// parent's node type. If a node has no children then their children index
+-// will be in the range [0, 6), depending on the wildcard bit and node type.
+-//
+-// The layout within the uint32, from MSB to LSB, is:
+-// [ 1 bits] unused
+-// [ 1 bits] wildcard bit
+-// [ 2 bits] node type
+-// [14 bits] high nodes index (exclusive) of children
+-// [14 bits] low nodes index (inclusive) of children
+-var children = [...]uint32{
+- 0x00000000, // c0x0000 (---------------) +
+- 0x10000000, // c0x0001 (---------------) !
+- 0x20000000, // c0x0002 (---------------) o
+- 0x40000000, // c0x0003 (---------------)* +
+- 0x50000000, // c0x0004 (---------------)* !
+- 0x60000000, // c0x0005 (---------------)* o
+- 0x004f0136, // c0x0006 (n0x0136-n0x013c) +
+- 0x004f413c, // c0x0007 (n0x013c-n0x013d) +
+- 0x0051013d, // c0x0008 (n0x013d-n0x0144) +
+- 0x00674144, // c0x0009 (n0x0144-n0x019d) +
+- 0x0068819d, // c0x000a (n0x019d-n0x01a2) +
+- 0x0069c1a2, // c0x000b (n0x01a2-n0x01a7) +
+- 0x006ac1a7, // c0x000c (n0x01a7-n0x01ab) +
+- 0x006c41ab, // c0x000d (n0x01ab-n0x01b1) +
+- 0x006d41b1, // c0x000e (n0x01b1-n0x01b5) +
+- 0x006ec1b5, // c0x000f (n0x01b5-n0x01bb) +
+- 0x607141bb, // c0x0010 (n0x01bb-n0x01c5)* o
+- 0x207181c5, // c0x0011 (n0x01c5-n0x01c6) o
+- 0x207301c6, // c0x0012 (n0x01c6-n0x01cc) o
+- 0x007341cc, // c0x0013 (n0x01cc-n0x01cd) +
+- 0x007501cd, // c0x0014 (n0x01cd-n0x01d4) +
+- 0x007541d4, // c0x0015 (n0x01d4-n0x01d5) +
+- 0x2079c1d5, // c0x0016 (n0x01d5-n0x01e7) o
+- 0x007a01e7, // c0x0017 (n0x01e7-n0x01e8) +
+- 0x007c01e8, // c0x0018 (n0x01e8-n0x01f0) +
+- 0x007dc1f0, // c0x0019 (n0x01f0-n0x01f7) +
+- 0x007e01f7, // c0x001a (n0x01f7-n0x01f8) +
+- 0x008101f8, // c0x001b (n0x01f8-n0x0204) +
+- 0x00838204, // c0x001c (n0x0204-n0x020e) +
+- 0x0085820e, // c0x001d (n0x020e-n0x0216) +
+- 0x00860216, // c0x001e (n0x0216-n0x0218) +
+- 0x00864218, // c0x001f (n0x0218-n0x0219) +
+- 0x008f4219, // c0x0020 (n0x0219-n0x023d) +
+- 0x0090823d, // c0x0021 (n0x023d-n0x0242) +
+- 0x0091c242, // c0x0022 (n0x0242-n0x0247) +
+- 0x00938247, // c0x0023 (n0x0247-n0x024e) +
+- 0x0094824e, // c0x0024 (n0x024e-n0x0252) +
+- 0x0095c252, // c0x0025 (n0x0252-n0x0257) +
+- 0x00980257, // c0x0026 (n0x0257-n0x0260) +
+- 0x00a94260, // c0x0027 (n0x0260-n0x02a5) +
+- 0x00a982a5, // c0x0028 (n0x02a5-n0x02a6) +
+- 0x00aac2a6, // c0x0029 (n0x02a6-n0x02ab) +
+- 0x00ac02ab, // c0x002a (n0x02ab-n0x02b0) +
+- 0x00ac82b0, // c0x002b (n0x02b0-n0x02b2) +
+- 0x00ad82b2, // c0x002c (n0x02b2-n0x02b6) +
+- 0x00aec2b6, // c0x002d (n0x02b6-n0x02bb) +
+- 0x00b302bb, // c0x002e (n0x02bb-n0x02cc) +
+- 0x00b402cc, // c0x002f (n0x02cc-n0x02d0) +
+- 0x00b442d0, // c0x0030 (n0x02d0-n0x02d1) +
+- 0x00b482d1, // c0x0031 (n0x02d1-n0x02d2) +
+- 0x00b4c2d2, // c0x0032 (n0x02d2-n0x02d3) +
+- 0x00b882d3, // c0x0033 (n0x02d3-n0x02e2) +
+- 0x60b8c2e2, // c0x0034 (n0x02e2-n0x02e3)* o
+- 0x00b9c2e3, // c0x0035 (n0x02e3-n0x02e7) +
+- 0x00ba02e7, // c0x0036 (n0x02e7-n0x02e8) +
+- 0x00c502e8, // c0x0037 (n0x02e8-n0x0314) +
+- 0x00c84314, // c0x0038 (n0x0314-n0x0321) +
+- 0x00f54321, // c0x0039 (n0x0321-n0x03d5) +
+- 0x20fa43d5, // c0x003a (n0x03d5-n0x03e9) o
+- 0x00fc03e9, // c0x003b (n0x03e9-n0x03f0) +
+- 0x00fd83f0, // c0x003c (n0x03f0-n0x03f6) +
+- 0x00fdc3f6, // c0x003d (n0x03f6-n0x03f7) +
+- 0x00fec3f7, // c0x003e (n0x03f7-n0x03fb) +
+- 0x00ff43fb, // c0x003f (n0x03fb-n0x03fd) +
+- 0x00ff83fd, // c0x0040 (n0x03fd-n0x03fe) +
+- 0x010183fe, // c0x0041 (n0x03fe-n0x0406) +
+- 0x0101c406, // c0x0042 (n0x0406-n0x0407) +
+- 0x01030407, // c0x0043 (n0x0407-n0x040c) +
+- 0x0105840c, // c0x0044 (n0x040c-n0x0416) +
+- 0x01078416, // c0x0045 (n0x0416-n0x041e) +
+- 0x010a841e, // c0x0046 (n0x041e-n0x042a) +
+- 0x010d042a, // c0x0047 (n0x042a-n0x0434) +
+- 0x010f4434, // c0x0048 (n0x0434-n0x043d) +
+- 0x0110843d, // c0x0049 (n0x043d-n0x0442) +
+- 0x0110c442, // c0x004a (n0x0442-n0x0443) +
+- 0x01118443, // c0x004b (n0x0443-n0x0446) +
+- 0x01178446, // c0x004c (n0x0446-n0x045e) +
+- 0x0119445e, // c0x004d (n0x045e-n0x0465) +
+- 0x011a8465, // c0x004e (n0x0465-n0x046a) +
+- 0x011bc46a, // c0x004f (n0x046a-n0x046f) +
+- 0x011d446f, // c0x0050 (n0x046f-n0x0475) +
+- 0x211ec475, // c0x0051 (n0x0475-n0x047b) o
+- 0x0120447b, // c0x0052 (n0x047b-n0x0481) +
+- 0x0121c481, // c0x0053 (n0x0481-n0x0487) +
+- 0x01238487, // c0x0054 (n0x0487-n0x048e) +
+- 0x0124448e, // c0x0055 (n0x048e-n0x0491) +
+- 0x0129c491, // c0x0056 (n0x0491-n0x04a7) +
+- 0x012b44a7, // c0x0057 (n0x04a7-n0x04ad) +
+- 0x012c44ad, // c0x0058 (n0x04ad-n0x04b1) +
+- 0x013084b1, // c0x0059 (n0x04b1-n0x04c2) +
+- 0x013884c2, // c0x005a (n0x04c2-n0x04e2) +
+- 0x013b04e2, // c0x005b (n0x04e2-n0x04ec) +
+- 0x013b84ec, // c0x005c (n0x04ec-n0x04ee) +
+- 0x613bc4ee, // c0x005d (n0x04ee-n0x04ef)* o
+- 0x213c04ef, // c0x005e (n0x04ef-n0x04f0) o
+- 0x013d84f0, // c0x005f (n0x04f0-n0x04f6) +
+- 0x013e04f6, // c0x0060 (n0x04f6-n0x04f8) +
+- 0x014144f8, // c0x0061 (n0x04f8-n0x0505) +
+- 0x0143c505, // c0x0062 (n0x0505-n0x050f) +
+- 0x0144050f, // c0x0063 (n0x050f-n0x0510) +
+- 0x01448510, // c0x0064 (n0x0510-n0x0512) +
+- 0x01460512, // c0x0065 (n0x0512-n0x0518) +
+- 0x01484518, // c0x0066 (n0x0518-n0x0521) +
+- 0x0149c521, // c0x0067 (n0x0521-n0x0527) +
+- 0x018f4527, // c0x0068 (n0x0527-n0x063d) +
+- 0x0190863d, // c0x0069 (n0x063d-n0x0642) +
+- 0x01928642, // c0x006a (n0x0642-n0x064a) +
+- 0x01a2864a, // c0x006b (n0x064a-n0x068a) +
+- 0x01afc68a, // c0x006c (n0x068a-n0x06bf) +
+- 0x01b6c6bf, // c0x006d (n0x06bf-n0x06db) +
+- 0x01bc46db, // c0x006e (n0x06db-n0x06f1) +
+- 0x01cac6f1, // c0x006f (n0x06f1-n0x072b) +
+- 0x01d0472b, // c0x0070 (n0x072b-n0x0741) +
+- 0x01d40741, // c0x0071 (n0x0741-n0x0750) +
+- 0x01e3c750, // c0x0072 (n0x0750-n0x078f) +
+- 0x01f0878f, // c0x0073 (n0x078f-n0x07c2) +
+- 0x01fa07c2, // c0x0074 (n0x07c2-n0x07e8) +
+- 0x020307e8, // c0x0075 (n0x07e8-n0x080c) +
+- 0x0209480c, // c0x0076 (n0x080c-n0x0825) +
+- 0x022cc825, // c0x0077 (n0x0825-n0x08b3) +
+- 0x023848b3, // c0x0078 (n0x08b3-n0x08e1) +
+- 0x024508e1, // c0x0079 (n0x08e1-n0x0914) +
+- 0x0249c914, // c0x007a (n0x0914-n0x0927) +
+- 0x02528927, // c0x007b (n0x0927-n0x094a) +
+- 0x0256494a, // c0x007c (n0x094a-n0x0959) +
+- 0x025b4959, // c0x007d (n0x0959-n0x096d) +
+- 0x0262c96d, // c0x007e (n0x096d-n0x098b) +
+- 0x6263098b, // c0x007f (n0x098b-n0x098c)* o
+- 0x6263498c, // c0x0080 (n0x098c-n0x098d)* o
+- 0x6263898d, // c0x0081 (n0x098d-n0x098e)* o
+- 0x026b498e, // c0x0082 (n0x098e-n0x09ad) +
+- 0x0271c9ad, // c0x0083 (n0x09ad-n0x09c7) +
+- 0x027989c7, // c0x0084 (n0x09c7-n0x09e6) +
+- 0x028109e6, // c0x0085 (n0x09e6-n0x0a04) +
+- 0x02894a04, // c0x0086 (n0x0a04-n0x0a25) +
+- 0x02900a25, // c0x0087 (n0x0a25-n0x0a40) +
+- 0x02a2ca40, // c0x0088 (n0x0a40-n0x0a8b) +
+- 0x02a84a8b, // c0x0089 (n0x0a8b-n0x0aa1) +
+- 0x62a88aa1, // c0x008a (n0x0aa1-n0x0aa2)* o
+- 0x02b20aa2, // c0x008b (n0x0aa2-n0x0ac8) +
+- 0x02ba8ac8, // c0x008c (n0x0ac8-n0x0aea) +
+- 0x02bf4aea, // c0x008d (n0x0aea-n0x0afd) +
+- 0x02c5cafd, // c0x008e (n0x0afd-n0x0b17) +
+- 0x02d04b17, // c0x008f (n0x0b17-n0x0b41) +
+- 0x02dccb41, // c0x0090 (n0x0b41-n0x0b73) +
+- 0x02e34b73, // c0x0091 (n0x0b73-n0x0b8d) +
+- 0x02f48b8d, // c0x0092 (n0x0b8d-n0x0bd2) +
+- 0x62f4cbd2, // c0x0093 (n0x0bd2-n0x0bd3)* o
+- 0x62f50bd3, // c0x0094 (n0x0bd3-n0x0bd4)* o
+- 0x02facbd4, // c0x0095 (n0x0bd4-n0x0beb) +
+- 0x03008beb, // c0x0096 (n0x0beb-n0x0c02) +
+- 0x03098c02, // c0x0097 (n0x0c02-n0x0c26) +
+- 0x03114c26, // c0x0098 (n0x0c26-n0x0c45) +
+- 0x03158c45, // c0x0099 (n0x0c45-n0x0c56) +
+- 0x0323cc56, // c0x009a (n0x0c56-n0x0c8f) +
+- 0x03270c8f, // c0x009b (n0x0c8f-n0x0c9c) +
+- 0x032d0c9c, // c0x009c (n0x0c9c-n0x0cb4) +
+- 0x03344cb4, // c0x009d (n0x0cb4-n0x0cd1) +
+- 0x033cccd1, // c0x009e (n0x0cd1-n0x0cf3) +
+- 0x0340ccf3, // c0x009f (n0x0cf3-n0x0d03) +
+- 0x0347cd03, // c0x00a0 (n0x0d03-n0x0d1f) +
+- 0x63480d1f, // c0x00a1 (n0x0d1f-n0x0d20)* o
+- 0x03498d20, // c0x00a2 (n0x0d20-n0x0d26) +
+- 0x034b4d26, // c0x00a3 (n0x0d26-n0x0d2d) +
+- 0x034f8d2d, // c0x00a4 (n0x0d2d-n0x0d3e) +
+- 0x03508d3e, // c0x00a5 (n0x0d3e-n0x0d42) +
+- 0x23520d42, // c0x00a6 (n0x0d42-n0x0d48) o
+- 0x03598d48, // c0x00a7 (n0x0d48-n0x0d66) +
+- 0x035acd66, // c0x00a8 (n0x0d66-n0x0d6b) +
+- 0x035c4d6b, // c0x00a9 (n0x0d6b-n0x0d71) +
+- 0x035e8d71, // c0x00aa (n0x0d71-n0x0d7a) +
+- 0x235fcd7a, // c0x00ab (n0x0d7a-n0x0d7f) o
+- 0x03614d7f, // c0x00ac (n0x0d7f-n0x0d85) +
+- 0x0364cd85, // c0x00ad (n0x0d85-n0x0d93) +
+- 0x23660d93, // c0x00ae (n0x0d93-n0x0d98) o
+- 0x03668d98, // c0x00af (n0x0d98-n0x0d9a) +
+- 0x0366cd9a, // c0x00b0 (n0x0d9a-n0x0d9b) +
+- 0x03690d9b, // c0x00b1 (n0x0d9b-n0x0da4) +
+- 0x036b4da4, // c0x00b2 (n0x0da4-n0x0dad) +
+- 0x036ccdad, // c0x00b3 (n0x0dad-n0x0db3) +
+- 0x036d4db3, // c0x00b4 (n0x0db3-n0x0db5) +
+- 0x036f4db5, // c0x00b5 (n0x0db5-n0x0dbd) +
+- 0x03714dbd, // c0x00b6 (n0x0dbd-n0x0dc5) +
+- 0x03730dc5, // c0x00b7 (n0x0dc5-n0x0dcc) +
+- 0x0374cdcc, // c0x00b8 (n0x0dcc-n0x0dd3) +
+- 0x0375cdd3, // c0x00b9 (n0x0dd3-n0x0dd7) +
+- 0x03770dd7, // c0x00ba (n0x0dd7-n0x0ddc) +
+- 0x03778ddc, // c0x00bb (n0x0ddc-n0x0dde) +
+- 0x03794dde, // c0x00bc (n0x0dde-n0x0de5) +
+- 0x04024de5, // c0x00bd (n0x0de5-n0x1009) +
+- 0x0405d009, // c0x00be (n0x1009-n0x1017) +
+- 0x04089017, // c0x00bf (n0x1017-n0x1022) +
+- 0x040a1022, // c0x00c0 (n0x1022-n0x1028) +
+- 0x040bd028, // c0x00c1 (n0x1028-n0x102f) +
+- 0x640c102f, // c0x00c2 (n0x102f-n0x1030)* o
+- 0x04105030, // c0x00c3 (n0x1030-n0x1041) +
+- 0x0410d041, // c0x00c4 (n0x1041-n0x1043) +
+- 0x24111043, // c0x00c5 (n0x1043-n0x1044) o
+- 0x24115044, // c0x00c6 (n0x1044-n0x1045) o
+- 0x04119045, // c0x00c7 (n0x1045-n0x1046) +
+- 0x041c1046, // c0x00c8 (n0x1046-n0x1070) +
+- 0x041e9070, // c0x00c9 (n0x1070-n0x107a) +
+- 0x2420107a, // c0x00ca (n0x107a-n0x1080) o
+- 0x0420d080, // c0x00cb (n0x1080-n0x1083) +
+- 0x04d65083, // c0x00cc (n0x1083-n0x1359) +
+- 0x04d69359, // c0x00cd (n0x1359-n0x135a) +
+- 0x04d6d35a, // c0x00ce (n0x135a-n0x135b) +
+- 0x24d7135b, // c0x00cf (n0x135b-n0x135c) o
+- 0x04d7535c, // c0x00d0 (n0x135c-n0x135d) +
+- 0x24d7935d, // c0x00d1 (n0x135d-n0x135e) o
+- 0x04d7d35e, // c0x00d2 (n0x135e-n0x135f) +
+- 0x24d8935f, // c0x00d3 (n0x135f-n0x1362) o
+- 0x04d8d362, // c0x00d4 (n0x1362-n0x1363) +
+- 0x04d91363, // c0x00d5 (n0x1363-n0x1364) +
+- 0x24d95364, // c0x00d6 (n0x1364-n0x1365) o
+- 0x04d99365, // c0x00d7 (n0x1365-n0x1366) +
+- 0x24da1366, // c0x00d8 (n0x1366-n0x1368) o
+- 0x04da5368, // c0x00d9 (n0x1368-n0x1369) +
+- 0x04da9369, // c0x00da (n0x1369-n0x136a) +
+- 0x24db936a, // c0x00db (n0x136a-n0x136e) o
+- 0x04dbd36e, // c0x00dc (n0x136e-n0x136f) +
+- 0x04dc136f, // c0x00dd (n0x136f-n0x1370) +
+- 0x04dc5370, // c0x00de (n0x1370-n0x1371) +
+- 0x04dc9371, // c0x00df (n0x1371-n0x1372) +
+- 0x24dcd372, // c0x00e0 (n0x1372-n0x1373) o
+- 0x04dd1373, // c0x00e1 (n0x1373-n0x1374) +
+- 0x04dd5374, // c0x00e2 (n0x1374-n0x1375) +
+- 0x04dd9375, // c0x00e3 (n0x1375-n0x1376) +
+- 0x04ddd376, // c0x00e4 (n0x1376-n0x1377) +
+- 0x24de5377, // c0x00e5 (n0x1377-n0x1379) o
+- 0x04de9379, // c0x00e6 (n0x1379-n0x137a) +
+- 0x04ded37a, // c0x00e7 (n0x137a-n0x137b) +
+- 0x04df137b, // c0x00e8 (n0x137b-n0x137c) +
+- 0x24df537c, // c0x00e9 (n0x137c-n0x137d) o
+- 0x04df937d, // c0x00ea (n0x137d-n0x137e) +
+- 0x24e0137e, // c0x00eb (n0x137e-n0x1380) o
+- 0x24e05380, // c0x00ec (n0x1380-n0x1381) o
+- 0x04e21381, // c0x00ed (n0x1381-n0x1388) +
+- 0x04e2d388, // c0x00ee (n0x1388-n0x138b) +
+- 0x64e3138b, // c0x00ef (n0x138b-n0x138c)* o
+- 0x24e3538c, // c0x00f0 (n0x138c-n0x138d) o
+- 0x64e5d38d, // c0x00f1 (n0x138d-n0x1397)* o
+- 0x04f31397, // c0x00f2 (n0x1397-n0x13cc) +
+- 0x04f393cc, // c0x00f3 (n0x13cc-n0x13ce) +
+- 0x04f653ce, // c0x00f4 (n0x13ce-n0x13d9) +
+- 0x04f813d9, // c0x00f5 (n0x13d9-n0x13e0) +
+- 0x04f8d3e0, // c0x00f6 (n0x13e0-n0x13e3) +
+- 0x04fad3e3, // c0x00f7 (n0x13e3-n0x13eb) +
+- 0x04fe53eb, // c0x00f8 (n0x13eb-n0x13f9) +
+- 0x052913f9, // c0x00f9 (n0x13f9-n0x14a4) +
+- 0x052b54a4, // c0x00fa (n0x14a4-n0x14ad) +
+- 0x052c94ad, // c0x00fb (n0x14ad-n0x14b2) +
+- 0x052fd4b2, // c0x00fc (n0x14b2-n0x14bf) +
+- 0x053194bf, // c0x00fd (n0x14bf-n0x14c6) +
+- 0x053354c6, // c0x00fe (n0x14c6-n0x14cd) +
+- 0x053594cd, // c0x00ff (n0x14cd-n0x14d6) +
+- 0x053714d6, // c0x0100 (n0x14d6-n0x14dc) +
+- 0x0538d4dc, // c0x0101 (n0x14dc-n0x14e3) +
+- 0x053ad4e3, // c0x0102 (n0x14e3-n0x14eb) +
+- 0x053bd4eb, // c0x0103 (n0x14eb-n0x14ef) +
+- 0x053ed4ef, // c0x0104 (n0x14ef-n0x14fb) +
+- 0x054054fb, // c0x0105 (n0x14fb-n0x1501) +
+- 0x05619501, // c0x0106 (n0x1501-n0x1586) +
+- 0x0563d586, // c0x0107 (n0x1586-n0x158f) +
+- 0x0565d58f, // c0x0108 (n0x158f-n0x1597) +
+- 0x05671597, // c0x0109 (n0x1597-n0x159c) +
+- 0x0568559c, // c0x010a (n0x159c-n0x15a1) +
+- 0x056a55a1, // c0x010b (n0x15a1-n0x15a9) +
+- 0x057495a9, // c0x010c (n0x15a9-n0x15d2) +
+- 0x057655d2, // c0x010d (n0x15d2-n0x15d9) +
+- 0x057795d9, // c0x010e (n0x15d9-n0x15de) +
+- 0x0577d5de, // c0x010f (n0x15de-n0x15df) +
+- 0x057915df, // c0x0110 (n0x15df-n0x15e4) +
+- 0x057ad5e4, // c0x0111 (n0x15e4-n0x15eb) +
+- 0x057b95eb, // c0x0112 (n0x15eb-n0x15ee) +
+- 0x057e95ee, // c0x0113 (n0x15ee-n0x15fa) +
+- 0x057ed5fa, // c0x0114 (n0x15fa-n0x15fb) +
+- 0x058055fb, // c0x0115 (n0x15fb-n0x1601) +
+- 0x05811601, // c0x0116 (n0x1601-n0x1604) +
+- 0x05815604, // c0x0117 (n0x1604-n0x1605) +
+- 0x05831605, // c0x0118 (n0x1605-n0x160c) +
+- 0x0586d60c, // c0x0119 (n0x160c-n0x161b) +
+- 0x0587161b, // c0x011a (n0x161b-n0x161c) +
+- 0x0589161c, // c0x011b (n0x161c-n0x1624) +
+- 0x058e1624, // c0x011c (n0x1624-n0x1638) +
+- 0x058f9638, // c0x011d (n0x1638-n0x163e) +
+- 0x6590163e, // c0x011e (n0x163e-n0x1640)* o
+- 0x25905640, // c0x011f (n0x1640-n0x1641) o
+- 0x05949641, // c0x0120 (n0x1641-n0x1652) +
+- 0x05959652, // c0x0121 (n0x1652-n0x1656) +
+- 0x05991656, // c0x0122 (n0x1656-n0x1664) +
+- 0x259c1664, // c0x0123 (n0x1664-n0x1670) o
+- 0x05af9670, // c0x0124 (n0x1670-n0x16be) +
+- 0x05b196be, // c0x0125 (n0x16be-n0x16c6) +
+- 0x65b456c6, // c0x0126 (n0x16c6-n0x16d1)* o
+- 0x25b496d1, // c0x0127 (n0x16d1-n0x16d2) o
+- 0x05c456d2, // c0x0128 (n0x16d2-n0x1711) +
+- 0x05c51711, // c0x0129 (n0x1711-n0x1714) +
+- 0x05c5d714, // c0x012a (n0x1714-n0x1717) +
+- 0x05c69717, // c0x012b (n0x1717-n0x171a) +
+- 0x05c7571a, // c0x012c (n0x171a-n0x171d) +
+- 0x05c8171d, // c0x012d (n0x171d-n0x1720) +
+- 0x05c8d720, // c0x012e (n0x1720-n0x1723) +
+- 0x05c99723, // c0x012f (n0x1723-n0x1726) +
+- 0x05ca5726, // c0x0130 (n0x1726-n0x1729) +
+- 0x05cb1729, // c0x0131 (n0x1729-n0x172c) +
+- 0x05cbd72c, // c0x0132 (n0x172c-n0x172f) +
+- 0x05cc972f, // c0x0133 (n0x172f-n0x1732) +
+- 0x05cd5732, // c0x0134 (n0x1732-n0x1735) +
+- 0x05ce1735, // c0x0135 (n0x1735-n0x1738) +
+- 0x05ce9738, // c0x0136 (n0x1738-n0x173a) +
+- 0x05cf573a, // c0x0137 (n0x173a-n0x173d) +
+- 0x05d0173d, // c0x0138 (n0x173d-n0x1740) +
+- 0x05d0d740, // c0x0139 (n0x1740-n0x1743) +
+- 0x05d19743, // c0x013a (n0x1743-n0x1746) +
+- 0x05d25746, // c0x013b (n0x1746-n0x1749) +
+- 0x05d31749, // c0x013c (n0x1749-n0x174c) +
+- 0x05d3d74c, // c0x013d (n0x174c-n0x174f) +
+- 0x05d4974f, // c0x013e (n0x174f-n0x1752) +
+- 0x05d55752, // c0x013f (n0x1752-n0x1755) +
+- 0x05d61755, // c0x0140 (n0x1755-n0x1758) +
+- 0x05d6d758, // c0x0141 (n0x1758-n0x175b) +
+- 0x05d7975b, // c0x0142 (n0x175b-n0x175e) +
+- 0x05d8575e, // c0x0143 (n0x175e-n0x1761) +
+- 0x05d91761, // c0x0144 (n0x1761-n0x1764) +
+- 0x05d9d764, // c0x0145 (n0x1764-n0x1767) +
+- 0x05da9767, // c0x0146 (n0x1767-n0x176a) +
+- 0x05db576a, // c0x0147 (n0x176a-n0x176d) +
+- 0x05dc176d, // c0x0148 (n0x176d-n0x1770) +
+- 0x05dcd770, // c0x0149 (n0x1770-n0x1773) +
+- 0x05dd9773, // c0x014a (n0x1773-n0x1776) +
+- 0x05de5776, // c0x014b (n0x1776-n0x1779) +
+- 0x05df1779, // c0x014c (n0x1779-n0x177c) +
+- 0x05dfd77c, // c0x014d (n0x177c-n0x177f) +
+- 0x05e0977f, // c0x014e (n0x177f-n0x1782) +
+- 0x05e15782, // c0x014f (n0x1782-n0x1785) +
+- 0x05e21785, // c0x0150 (n0x1785-n0x1788) +
+- 0x05e2d788, // c0x0151 (n0x1788-n0x178b) +
+- 0x05e3978b, // c0x0152 (n0x178b-n0x178e) +
+- 0x05e4578e, // c0x0153 (n0x178e-n0x1791) +
+- 0x05e51791, // c0x0154 (n0x1791-n0x1794) +
+- 0x05e5d794, // c0x0155 (n0x1794-n0x1797) +
+- 0x05e69797, // c0x0156 (n0x1797-n0x179a) +
+- 0x05e7579a, // c0x0157 (n0x179a-n0x179d) +
+- 0x05e8179d, // c0x0158 (n0x179d-n0x17a0) +
+- 0x05e8d7a0, // c0x0159 (n0x17a0-n0x17a3) +
+- 0x05e997a3, // c0x015a (n0x17a3-n0x17a6) +
+- 0x05ea57a6, // c0x015b (n0x17a6-n0x17a9) +
+- 0x05eb17a9, // c0x015c (n0x17a9-n0x17ac) +
+- 0x05ebd7ac, // c0x015d (n0x17ac-n0x17af) +
+- 0x05ec97af, // c0x015e (n0x17af-n0x17b2) +
+- 0x05ed57b2, // c0x015f (n0x17b2-n0x17b5) +
+- 0x05ee17b5, // c0x0160 (n0x17b5-n0x17b8) +
+- 0x05ef97b8, // c0x0161 (n0x17b8-n0x17be) +
+- 0x05f097be, // c0x0162 (n0x17be-n0x17c2) +
+- 0x05f217c2, // c0x0163 (n0x17c2-n0x17c8) +
+- 0x05f497c8, // c0x0164 (n0x17c8-n0x17d2) +
+- 0x05f5d7d2, // c0x0165 (n0x17d2-n0x17d7) +
+- 0x05f8d7d7, // c0x0166 (n0x17d7-n0x17e3) +
+- 0x05fa97e3, // c0x0167 (n0x17e3-n0x17ea) +
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/publicsuffix/table_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/publicsuffix/table_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/publicsuffix/table_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/publicsuffix/table_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,12226 +0,0 @@
+-// generated by go run gen.go; DO NOT EDIT
+-
+-package publicsuffix
+-
+-var rules = [...]string{
+- "ac",
+- "com.ac",
+- "edu.ac",
+- "gov.ac",
+- "net.ac",
+- "mil.ac",
+- "org.ac",
+- "ad",
+- "nom.ad",
+- "ae",
+- "co.ae",
+- "net.ae",
+- "org.ae",
+- "sch.ae",
+- "ac.ae",
+- "gov.ae",
+- "mil.ae",
+- "aero",
+- "accident-investigation.aero",
+- "accident-prevention.aero",
+- "aerobatic.aero",
+- "aeroclub.aero",
+- "aerodrome.aero",
+- "agents.aero",
+- "aircraft.aero",
+- "airline.aero",
+- "airport.aero",
+- "air-surveillance.aero",
+- "airtraffic.aero",
+- "air-traffic-control.aero",
+- "ambulance.aero",
+- "amusement.aero",
+- "association.aero",
+- "author.aero",
+- "ballooning.aero",
+- "broker.aero",
+- "caa.aero",
+- "cargo.aero",
+- "catering.aero",
+- "certification.aero",
+- "championship.aero",
+- "charter.aero",
+- "civilaviation.aero",
+- "club.aero",
+- "conference.aero",
+- "consultant.aero",
+- "consulting.aero",
+- "control.aero",
+- "council.aero",
+- "crew.aero",
+- "design.aero",
+- "dgca.aero",
+- "educator.aero",
+- "emergency.aero",
+- "engine.aero",
+- "engineer.aero",
+- "entertainment.aero",
+- "equipment.aero",
+- "exchange.aero",
+- "express.aero",
+- "federation.aero",
+- "flight.aero",
+- "freight.aero",
+- "fuel.aero",
+- "gliding.aero",
+- "government.aero",
+- "groundhandling.aero",
+- "group.aero",
+- "hanggliding.aero",
+- "homebuilt.aero",
+- "insurance.aero",
+- "journal.aero",
+- "journalist.aero",
+- "leasing.aero",
+- "logistics.aero",
+- "magazine.aero",
+- "maintenance.aero",
+- "marketplace.aero",
+- "media.aero",
+- "microlight.aero",
+- "modelling.aero",
+- "navigation.aero",
+- "parachuting.aero",
+- "paragliding.aero",
+- "passenger-association.aero",
+- "pilot.aero",
+- "press.aero",
+- "production.aero",
+- "recreation.aero",
+- "repbody.aero",
+- "res.aero",
+- "research.aero",
+- "rotorcraft.aero",
+- "safety.aero",
+- "scientist.aero",
+- "services.aero",
+- "show.aero",
+- "skydiving.aero",
+- "software.aero",
+- "student.aero",
+- "taxi.aero",
+- "trader.aero",
+- "trading.aero",
+- "trainer.aero",
+- "union.aero",
+- "workinggroup.aero",
+- "works.aero",
+- "af",
+- "gov.af",
+- "com.af",
+- "org.af",
+- "net.af",
+- "edu.af",
+- "ag",
+- "com.ag",
+- "org.ag",
+- "net.ag",
+- "co.ag",
+- "nom.ag",
+- "ai",
+- "off.ai",
+- "com.ai",
+- "net.ai",
+- "org.ai",
+- "al",
+- "com.al",
+- "edu.al",
+- "gov.al",
+- "mil.al",
+- "net.al",
+- "org.al",
+- "am",
+- "an",
+- "com.an",
+- "net.an",
+- "org.an",
+- "edu.an",
+- "ao",
+- "ed.ao",
+- "gv.ao",
+- "og.ao",
+- "co.ao",
+- "pb.ao",
+- "it.ao",
+- "aq",
+- "*.ar",
+- "!congresodelalengua3.ar",
+- "!educ.ar",
+- "!gobiernoelectronico.ar",
+- "!mecon.ar",
+- "!nacion.ar",
+- "!nic.ar",
+- "!promocion.ar",
+- "!retina.ar",
+- "!uba.ar",
+- "e164.arpa",
+- "in-addr.arpa",
+- "ip6.arpa",
+- "iris.arpa",
+- "uri.arpa",
+- "urn.arpa",
+- "as",
+- "gov.as",
+- "asia",
+- "at",
+- "ac.at",
+- "co.at",
+- "gv.at",
+- "or.at",
+- "com.au",
+- "net.au",
+- "org.au",
+- "edu.au",
+- "gov.au",
+- "asn.au",
+- "id.au",
+- "info.au",
+- "conf.au",
+- "oz.au",
+- "act.au",
+- "nsw.au",
+- "nt.au",
+- "qld.au",
+- "sa.au",
+- "tas.au",
+- "vic.au",
+- "wa.au",
+- "act.edu.au",
+- "nsw.edu.au",
+- "nt.edu.au",
+- "qld.edu.au",
+- "sa.edu.au",
+- "tas.edu.au",
+- "vic.edu.au",
+- "wa.edu.au",
+- "act.gov.au",
+- "nt.gov.au",
+- "qld.gov.au",
+- "sa.gov.au",
+- "tas.gov.au",
+- "vic.gov.au",
+- "wa.gov.au",
+- "aw",
+- "com.aw",
+- "ax",
+- "az",
+- "com.az",
+- "net.az",
+- "int.az",
+- "gov.az",
+- "org.az",
+- "edu.az",
+- "info.az",
+- "pp.az",
+- "mil.az",
+- "name.az",
+- "pro.az",
+- "biz.az",
+- "ba",
+- "org.ba",
+- "net.ba",
+- "edu.ba",
+- "gov.ba",
+- "mil.ba",
+- "unsa.ba",
+- "unbi.ba",
+- "co.ba",
+- "com.ba",
+- "rs.ba",
+- "bb",
+- "biz.bb",
+- "com.bb",
+- "edu.bb",
+- "gov.bb",
+- "info.bb",
+- "net.bb",
+- "org.bb",
+- "store.bb",
+- "*.bd",
+- "be",
+- "ac.be",
+- "bf",
+- "gov.bf",
+- "bg",
+- "a.bg",
+- "b.bg",
+- "c.bg",
+- "d.bg",
+- "e.bg",
+- "f.bg",
+- "g.bg",
+- "h.bg",
+- "i.bg",
+- "j.bg",
+- "k.bg",
+- "l.bg",
+- "m.bg",
+- "n.bg",
+- "o.bg",
+- "p.bg",
+- "q.bg",
+- "r.bg",
+- "s.bg",
+- "t.bg",
+- "u.bg",
+- "v.bg",
+- "w.bg",
+- "x.bg",
+- "y.bg",
+- "z.bg",
+- "0.bg",
+- "1.bg",
+- "2.bg",
+- "3.bg",
+- "4.bg",
+- "5.bg",
+- "6.bg",
+- "7.bg",
+- "8.bg",
+- "9.bg",
+- "bh",
+- "com.bh",
+- "edu.bh",
+- "net.bh",
+- "org.bh",
+- "gov.bh",
+- "bi",
+- "co.bi",
+- "com.bi",
+- "edu.bi",
+- "or.bi",
+- "org.bi",
+- "biz",
+- "bj",
+- "asso.bj",
+- "barreau.bj",
+- "gouv.bj",
+- "bm",
+- "com.bm",
+- "edu.bm",
+- "gov.bm",
+- "net.bm",
+- "org.bm",
+- "*.bn",
+- "bo",
+- "com.bo",
+- "edu.bo",
+- "gov.bo",
+- "gob.bo",
+- "int.bo",
+- "org.bo",
+- "net.bo",
+- "mil.bo",
+- "tv.bo",
+- "br",
+- "adm.br",
+- "adv.br",
+- "agr.br",
+- "am.br",
+- "arq.br",
+- "art.br",
+- "ato.br",
+- "b.br",
+- "bio.br",
+- "blog.br",
+- "bmd.br",
+- "cim.br",
+- "cng.br",
+- "cnt.br",
+- "com.br",
+- "coop.br",
+- "ecn.br",
+- "eco.br",
+- "edu.br",
+- "emp.br",
+- "eng.br",
+- "esp.br",
+- "etc.br",
+- "eti.br",
+- "far.br",
+- "flog.br",
+- "fm.br",
+- "fnd.br",
+- "fot.br",
+- "fst.br",
+- "g12.br",
+- "ggf.br",
+- "gov.br",
+- "imb.br",
+- "ind.br",
+- "inf.br",
+- "jor.br",
+- "jus.br",
+- "leg.br",
+- "lel.br",
+- "mat.br",
+- "med.br",
+- "mil.br",
+- "mus.br",
+- "net.br",
+- "nom.br",
+- "not.br",
+- "ntr.br",
+- "odo.br",
+- "org.br",
+- "ppg.br",
+- "pro.br",
+- "psc.br",
+- "psi.br",
+- "qsl.br",
+- "radio.br",
+- "rec.br",
+- "slg.br",
+- "srv.br",
+- "taxi.br",
+- "teo.br",
+- "tmp.br",
+- "trd.br",
+- "tur.br",
+- "tv.br",
+- "vet.br",
+- "vlog.br",
+- "wiki.br",
+- "zlg.br",
+- "bs",
+- "com.bs",
+- "net.bs",
+- "org.bs",
+- "edu.bs",
+- "gov.bs",
+- "bt",
+- "com.bt",
+- "edu.bt",
+- "gov.bt",
+- "net.bt",
+- "org.bt",
+- "bw",
+- "co.bw",
+- "org.bw",
+- "by",
+- "gov.by",
+- "mil.by",
+- "com.by",
+- "of.by",
+- "bz",
+- "com.bz",
+- "net.bz",
+- "org.bz",
+- "edu.bz",
+- "gov.bz",
+- "ca",
+- "ab.ca",
+- "bc.ca",
+- "mb.ca",
+- "nb.ca",
+- "nf.ca",
+- "nl.ca",
+- "ns.ca",
+- "nt.ca",
+- "nu.ca",
+- "on.ca",
+- "pe.ca",
+- "qc.ca",
+- "sk.ca",
+- "yk.ca",
+- "gc.ca",
+- "cat",
+- "cc",
+- "cd",
+- "gov.cd",
+- "cf",
+- "cg",
+- "ch",
+- "ci",
+- "org.ci",
+- "or.ci",
+- "com.ci",
+- "co.ci",
+- "edu.ci",
+- "ed.ci",
+- "ac.ci",
+- "net.ci",
+- "go.ci",
+- "asso.ci",
+- "xn--aroport-bya.ci",
+- "int.ci",
+- "presse.ci",
+- "md.ci",
+- "gouv.ci",
+- "*.ck",
+- "!www.ck",
+- "cl",
+- "gov.cl",
+- "gob.cl",
+- "co.cl",
+- "mil.cl",
+- "cm",
+- "gov.cm",
+- "cn",
+- "ac.cn",
+- "com.cn",
+- "edu.cn",
+- "gov.cn",
+- "net.cn",
+- "org.cn",
+- "mil.cn",
+- "xn--55qx5d.cn",
+- "xn--io0a7i.cn",
+- "xn--od0alg.cn",
+- "ah.cn",
+- "bj.cn",
+- "cq.cn",
+- "fj.cn",
+- "gd.cn",
+- "gs.cn",
+- "gz.cn",
+- "gx.cn",
+- "ha.cn",
+- "hb.cn",
+- "he.cn",
+- "hi.cn",
+- "hl.cn",
+- "hn.cn",
+- "jl.cn",
+- "js.cn",
+- "jx.cn",
+- "ln.cn",
+- "nm.cn",
+- "nx.cn",
+- "qh.cn",
+- "sc.cn",
+- "sd.cn",
+- "sh.cn",
+- "sn.cn",
+- "sx.cn",
+- "tj.cn",
+- "xj.cn",
+- "xz.cn",
+- "yn.cn",
+- "zj.cn",
+- "hk.cn",
+- "mo.cn",
+- "tw.cn",
+- "co",
+- "arts.co",
+- "com.co",
+- "edu.co",
+- "firm.co",
+- "gov.co",
+- "info.co",
+- "int.co",
+- "mil.co",
+- "net.co",
+- "nom.co",
+- "org.co",
+- "rec.co",
+- "web.co",
+- "com",
+- "coop",
+- "cr",
+- "ac.cr",
+- "co.cr",
+- "ed.cr",
+- "fi.cr",
+- "go.cr",
+- "or.cr",
+- "sa.cr",
+- "cu",
+- "com.cu",
+- "edu.cu",
+- "org.cu",
+- "net.cu",
+- "gov.cu",
+- "inf.cu",
+- "cv",
+- "cw",
+- "com.cw",
+- "edu.cw",
+- "net.cw",
+- "org.cw",
+- "cx",
+- "gov.cx",
+- "*.cy",
+- "cz",
+- "de",
+- "dj",
+- "dk",
+- "dm",
+- "com.dm",
+- "net.dm",
+- "org.dm",
+- "edu.dm",
+- "gov.dm",
+- "do",
+- "art.do",
+- "com.do",
+- "edu.do",
+- "gob.do",
+- "gov.do",
+- "mil.do",
+- "net.do",
+- "org.do",
+- "sld.do",
+- "web.do",
+- "dz",
+- "com.dz",
+- "org.dz",
+- "net.dz",
+- "gov.dz",
+- "edu.dz",
+- "asso.dz",
+- "pol.dz",
+- "art.dz",
+- "ec",
+- "com.ec",
+- "info.ec",
+- "net.ec",
+- "fin.ec",
+- "k12.ec",
+- "med.ec",
+- "pro.ec",
+- "org.ec",
+- "edu.ec",
+- "gov.ec",
+- "gob.ec",
+- "mil.ec",
+- "edu",
+- "ee",
+- "edu.ee",
+- "gov.ee",
+- "riik.ee",
+- "lib.ee",
+- "med.ee",
+- "com.ee",
+- "pri.ee",
+- "aip.ee",
+- "org.ee",
+- "fie.ee",
+- "eg",
+- "com.eg",
+- "edu.eg",
+- "eun.eg",
+- "gov.eg",
+- "mil.eg",
+- "name.eg",
+- "net.eg",
+- "org.eg",
+- "sci.eg",
+- "*.er",
+- "es",
+- "com.es",
+- "nom.es",
+- "org.es",
+- "gob.es",
+- "edu.es",
+- "*.et",
+- "eu",
+- "fi",
+- "aland.fi",
+- "*.fj",
+- "*.fk",
+- "fm",
+- "fo",
+- "fr",
+- "com.fr",
+- "asso.fr",
+- "nom.fr",
+- "prd.fr",
+- "presse.fr",
+- "tm.fr",
+- "aeroport.fr",
+- "assedic.fr",
+- "avocat.fr",
+- "avoues.fr",
+- "cci.fr",
+- "chambagri.fr",
+- "chirurgiens-dentistes.fr",
+- "experts-comptables.fr",
+- "geometre-expert.fr",
+- "gouv.fr",
+- "greta.fr",
+- "huissier-justice.fr",
+- "medecin.fr",
+- "notaires.fr",
+- "pharmacien.fr",
+- "port.fr",
+- "veterinaire.fr",
+- "ga",
+- "gd",
+- "ge",
+- "com.ge",
+- "edu.ge",
+- "gov.ge",
+- "org.ge",
+- "mil.ge",
+- "net.ge",
+- "pvt.ge",
+- "gf",
+- "gg",
+- "co.gg",
+- "org.gg",
+- "net.gg",
+- "sch.gg",
+- "gov.gg",
+- "gh",
+- "com.gh",
+- "edu.gh",
+- "gov.gh",
+- "org.gh",
+- "mil.gh",
+- "gi",
+- "com.gi",
+- "ltd.gi",
+- "gov.gi",
+- "mod.gi",
+- "edu.gi",
+- "org.gi",
+- "gl",
+- "gm",
+- "ac.gn",
+- "com.gn",
+- "edu.gn",
+- "gov.gn",
+- "org.gn",
+- "net.gn",
+- "gov",
+- "gp",
+- "com.gp",
+- "net.gp",
+- "mobi.gp",
+- "edu.gp",
+- "org.gp",
+- "asso.gp",
+- "gq",
+- "gr",
+- "com.gr",
+- "edu.gr",
+- "net.gr",
+- "org.gr",
+- "gov.gr",
+- "gs",
+- "gt",
+- "com.gt",
+- "edu.gt",
+- "gob.gt",
+- "ind.gt",
+- "mil.gt",
+- "net.gt",
+- "org.gt",
+- "*.gu",
+- "gw",
+- "gy",
+- "co.gy",
+- "com.gy",
+- "net.gy",
+- "hk",
+- "com.hk",
+- "edu.hk",
+- "gov.hk",
+- "idv.hk",
+- "net.hk",
+- "org.hk",
+- "xn--55qx5d.hk",
+- "xn--wcvs22d.hk",
+- "xn--lcvr32d.hk",
+- "xn--mxtq1m.hk",
+- "xn--gmqw5a.hk",
+- "xn--ciqpn.hk",
+- "xn--gmq050i.hk",
+- "xn--zf0avx.hk",
+- "xn--io0a7i.hk",
+- "xn--mk0axi.hk",
+- "xn--od0alg.hk",
+- "xn--od0aq3b.hk",
+- "xn--tn0ag.hk",
+- "xn--uc0atv.hk",
+- "xn--uc0ay4a.hk",
+- "hm",
+- "hn",
+- "com.hn",
+- "edu.hn",
+- "org.hn",
+- "net.hn",
+- "mil.hn",
+- "gob.hn",
+- "hr",
+- "iz.hr",
+- "from.hr",
+- "name.hr",
+- "com.hr",
+- "ht",
+- "com.ht",
+- "shop.ht",
+- "firm.ht",
+- "info.ht",
+- "adult.ht",
+- "net.ht",
+- "pro.ht",
+- "org.ht",
+- "med.ht",
+- "art.ht",
+- "coop.ht",
+- "pol.ht",
+- "asso.ht",
+- "edu.ht",
+- "rel.ht",
+- "gouv.ht",
+- "perso.ht",
+- "hu",
+- "co.hu",
+- "info.hu",
+- "org.hu",
+- "priv.hu",
+- "sport.hu",
+- "tm.hu",
+- "2000.hu",
+- "agrar.hu",
+- "bolt.hu",
+- "casino.hu",
+- "city.hu",
+- "erotica.hu",
+- "erotika.hu",
+- "film.hu",
+- "forum.hu",
+- "games.hu",
+- "hotel.hu",
+- "ingatlan.hu",
+- "jogasz.hu",
+- "konyvelo.hu",
+- "lakas.hu",
+- "media.hu",
+- "news.hu",
+- "reklam.hu",
+- "sex.hu",
+- "shop.hu",
+- "suli.hu",
+- "szex.hu",
+- "tozsde.hu",
+- "utazas.hu",
+- "video.hu",
+- "id",
+- "ac.id",
+- "biz.id",
+- "co.id",
+- "go.id",
+- "mil.id",
+- "my.id",
+- "net.id",
+- "or.id",
+- "sch.id",
+- "web.id",
+- "ie",
+- "gov.ie",
+- "*.il",
+- "im",
+- "co.im",
+- "ltd.co.im",
+- "plc.co.im",
+- "net.im",
+- "gov.im",
+- "org.im",
+- "nic.im",
+- "ac.im",
+- "in",
+- "co.in",
+- "firm.in",
+- "net.in",
+- "org.in",
+- "gen.in",
+- "ind.in",
+- "nic.in",
+- "ac.in",
+- "edu.in",
+- "res.in",
+- "gov.in",
+- "mil.in",
+- "info",
+- "int",
+- "eu.int",
+- "io",
+- "com.io",
+- "iq",
+- "gov.iq",
+- "edu.iq",
+- "mil.iq",
+- "com.iq",
+- "org.iq",
+- "net.iq",
+- "ir",
+- "ac.ir",
+- "co.ir",
+- "gov.ir",
+- "id.ir",
+- "net.ir",
+- "org.ir",
+- "sch.ir",
+- "xn--mgba3a4f16a.ir",
+- "xn--mgba3a4fra.ir",
+- "is",
+- "net.is",
+- "com.is",
+- "edu.is",
+- "gov.is",
+- "org.is",
+- "int.is",
+- "it",
+- "gov.it",
+- "edu.it",
+- "agrigento.it",
+- "ag.it",
+- "alessandria.it",
+- "al.it",
+- "ancona.it",
+- "an.it",
+- "aosta.it",
+- "aoste.it",
+- "ao.it",
+- "arezzo.it",
+- "ar.it",
+- "ascoli-piceno.it",
+- "ascolipiceno.it",
+- "ap.it",
+- "asti.it",
+- "at.it",
+- "avellino.it",
+- "av.it",
+- "bari.it",
+- "ba.it",
+- "andria-barletta-trani.it",
+- "andriabarlettatrani.it",
+- "trani-barletta-andria.it",
+- "tranibarlettaandria.it",
+- "barletta-trani-andria.it",
+- "barlettatraniandria.it",
+- "andria-trani-barletta.it",
+- "andriatranibarletta.it",
+- "trani-andria-barletta.it",
+- "traniandriabarletta.it",
+- "bt.it",
+- "belluno.it",
+- "bl.it",
+- "benevento.it",
+- "bn.it",
+- "bergamo.it",
+- "bg.it",
+- "biella.it",
+- "bi.it",
+- "bologna.it",
+- "bo.it",
+- "bolzano.it",
+- "bozen.it",
+- "balsan.it",
+- "alto-adige.it",
+- "altoadige.it",
+- "suedtirol.it",
+- "bz.it",
+- "brescia.it",
+- "bs.it",
+- "brindisi.it",
+- "br.it",
+- "cagliari.it",
+- "ca.it",
+- "caltanissetta.it",
+- "cl.it",
+- "campobasso.it",
+- "cb.it",
+- "carboniaiglesias.it",
+- "carbonia-iglesias.it",
+- "iglesias-carbonia.it",
+- "iglesiascarbonia.it",
+- "ci.it",
+- "caserta.it",
+- "ce.it",
+- "catania.it",
+- "ct.it",
+- "catanzaro.it",
+- "cz.it",
+- "chieti.it",
+- "ch.it",
+- "como.it",
+- "co.it",
+- "cosenza.it",
+- "cs.it",
+- "cremona.it",
+- "cr.it",
+- "crotone.it",
+- "kr.it",
+- "cuneo.it",
+- "cn.it",
+- "dell-ogliastra.it",
+- "dellogliastra.it",
+- "ogliastra.it",
+- "og.it",
+- "enna.it",
+- "en.it",
+- "ferrara.it",
+- "fe.it",
+- "fermo.it",
+- "fm.it",
+- "firenze.it",
+- "florence.it",
+- "fi.it",
+- "foggia.it",
+- "fg.it",
+- "forli-cesena.it",
+- "forlicesena.it",
+- "cesena-forli.it",
+- "cesenaforli.it",
+- "fc.it",
+- "frosinone.it",
+- "fr.it",
+- "genova.it",
+- "genoa.it",
+- "ge.it",
+- "gorizia.it",
+- "go.it",
+- "grosseto.it",
+- "gr.it",
+- "imperia.it",
+- "im.it",
+- "isernia.it",
+- "is.it",
+- "laquila.it",
+- "aquila.it",
+- "aq.it",
+- "la-spezia.it",
+- "laspezia.it",
+- "sp.it",
+- "latina.it",
+- "lt.it",
+- "lecce.it",
+- "le.it",
+- "lecco.it",
+- "lc.it",
+- "livorno.it",
+- "li.it",
+- "lodi.it",
+- "lo.it",
+- "lucca.it",
+- "lu.it",
+- "macerata.it",
+- "mc.it",
+- "mantova.it",
+- "mn.it",
+- "massa-carrara.it",
+- "massacarrara.it",
+- "carrara-massa.it",
+- "carraramassa.it",
+- "ms.it",
+- "matera.it",
+- "mt.it",
+- "medio-campidano.it",
+- "mediocampidano.it",
+- "campidano-medio.it",
+- "campidanomedio.it",
+- "vs.it",
+- "messina.it",
+- "me.it",
+- "milano.it",
+- "milan.it",
+- "mi.it",
+- "modena.it",
+- "mo.it",
+- "monza.it",
+- "monza-brianza.it",
+- "monzabrianza.it",
+- "monzaebrianza.it",
+- "monzaedellabrianza.it",
+- "monza-e-della-brianza.it",
+- "mb.it",
+- "napoli.it",
+- "naples.it",
+- "na.it",
+- "novara.it",
+- "no.it",
+- "nuoro.it",
+- "nu.it",
+- "oristano.it",
+- "or.it",
+- "padova.it",
+- "padua.it",
+- "pd.it",
+- "palermo.it",
+- "pa.it",
+- "parma.it",
+- "pr.it",
+- "pavia.it",
+- "pv.it",
+- "perugia.it",
+- "pg.it",
+- "pescara.it",
+- "pe.it",
+- "pesaro-urbino.it",
+- "pesarourbino.it",
+- "urbino-pesaro.it",
+- "urbinopesaro.it",
+- "pu.it",
+- "piacenza.it",
+- "pc.it",
+- "pisa.it",
+- "pi.it",
+- "pistoia.it",
+- "pt.it",
+- "pordenone.it",
+- "pn.it",
+- "potenza.it",
+- "pz.it",
+- "prato.it",
+- "po.it",
+- "ragusa.it",
+- "rg.it",
+- "ravenna.it",
+- "ra.it",
+- "reggio-calabria.it",
+- "reggiocalabria.it",
+- "rc.it",
+- "reggio-emilia.it",
+- "reggioemilia.it",
+- "re.it",
+- "rieti.it",
+- "ri.it",
+- "rimini.it",
+- "rn.it",
+- "roma.it",
+- "rome.it",
+- "rm.it",
+- "rovigo.it",
+- "ro.it",
+- "salerno.it",
+- "sa.it",
+- "sassari.it",
+- "ss.it",
+- "savona.it",
+- "sv.it",
+- "siena.it",
+- "si.it",
+- "siracusa.it",
+- "sr.it",
+- "sondrio.it",
+- "so.it",
+- "taranto.it",
+- "ta.it",
+- "tempio-olbia.it",
+- "tempioolbia.it",
+- "olbia-tempio.it",
+- "olbiatempio.it",
+- "ot.it",
+- "teramo.it",
+- "te.it",
+- "terni.it",
+- "tr.it",
+- "torino.it",
+- "turin.it",
+- "to.it",
+- "trapani.it",
+- "tp.it",
+- "trento.it",
+- "trentino.it",
+- "tn.it",
+- "treviso.it",
+- "tv.it",
+- "trieste.it",
+- "ts.it",
+- "udine.it",
+- "ud.it",
+- "varese.it",
+- "va.it",
+- "venezia.it",
+- "venice.it",
+- "ve.it",
+- "verbania.it",
+- "vb.it",
+- "vercelli.it",
+- "vc.it",
+- "verona.it",
+- "vr.it",
+- "vibo-valentia.it",
+- "vibovalentia.it",
+- "vv.it",
+- "vicenza.it",
+- "vi.it",
+- "viterbo.it",
+- "vt.it",
+- "je",
+- "co.je",
+- "org.je",
+- "net.je",
+- "sch.je",
+- "gov.je",
+- "*.jm",
+- "jo",
+- "com.jo",
+- "org.jo",
+- "net.jo",
+- "edu.jo",
+- "sch.jo",
+- "gov.jo",
+- "mil.jo",
+- "name.jo",
+- "jobs",
+- "jp",
+- "ac.jp",
+- "ad.jp",
+- "co.jp",
+- "ed.jp",
+- "go.jp",
+- "gr.jp",
+- "lg.jp",
+- "ne.jp",
+- "or.jp",
+- "aichi.jp",
+- "akita.jp",
+- "aomori.jp",
+- "chiba.jp",
+- "ehime.jp",
+- "fukui.jp",
+- "fukuoka.jp",
+- "fukushima.jp",
+- "gifu.jp",
+- "gunma.jp",
+- "hiroshima.jp",
+- "hokkaido.jp",
+- "hyogo.jp",
+- "ibaraki.jp",
+- "ishikawa.jp",
+- "iwate.jp",
+- "kagawa.jp",
+- "kagoshima.jp",
+- "kanagawa.jp",
+- "kochi.jp",
+- "kumamoto.jp",
+- "kyoto.jp",
+- "mie.jp",
+- "miyagi.jp",
+- "miyazaki.jp",
+- "nagano.jp",
+- "nagasaki.jp",
+- "nara.jp",
+- "niigata.jp",
+- "oita.jp",
+- "okayama.jp",
+- "okinawa.jp",
+- "osaka.jp",
+- "saga.jp",
+- "saitama.jp",
+- "shiga.jp",
+- "shimane.jp",
+- "shizuoka.jp",
+- "tochigi.jp",
+- "tokushima.jp",
+- "tokyo.jp",
+- "tottori.jp",
+- "toyama.jp",
+- "wakayama.jp",
+- "yamagata.jp",
+- "yamaguchi.jp",
+- "yamanashi.jp",
+- "*.kawasaki.jp",
+- "*.kitakyushu.jp",
+- "*.kobe.jp",
+- "*.nagoya.jp",
+- "*.sapporo.jp",
+- "*.sendai.jp",
+- "*.yokohama.jp",
+- "!city.kawasaki.jp",
+- "!city.kitakyushu.jp",
+- "!city.kobe.jp",
+- "!city.nagoya.jp",
+- "!city.sapporo.jp",
+- "!city.sendai.jp",
+- "!city.yokohama.jp",
+- "aisai.aichi.jp",
+- "ama.aichi.jp",
+- "anjo.aichi.jp",
+- "asuke.aichi.jp",
+- "chiryu.aichi.jp",
+- "chita.aichi.jp",
+- "fuso.aichi.jp",
+- "gamagori.aichi.jp",
+- "handa.aichi.jp",
+- "hazu.aichi.jp",
+- "hekinan.aichi.jp",
+- "higashiura.aichi.jp",
+- "ichinomiya.aichi.jp",
+- "inazawa.aichi.jp",
+- "inuyama.aichi.jp",
+- "isshiki.aichi.jp",
+- "iwakura.aichi.jp",
+- "kanie.aichi.jp",
+- "kariya.aichi.jp",
+- "kasugai.aichi.jp",
+- "kira.aichi.jp",
+- "kiyosu.aichi.jp",
+- "komaki.aichi.jp",
+- "konan.aichi.jp",
+- "kota.aichi.jp",
+- "mihama.aichi.jp",
+- "miyoshi.aichi.jp",
+- "nagakute.aichi.jp",
+- "nishio.aichi.jp",
+- "nisshin.aichi.jp",
+- "obu.aichi.jp",
+- "oguchi.aichi.jp",
+- "oharu.aichi.jp",
+- "okazaki.aichi.jp",
+- "owariasahi.aichi.jp",
+- "seto.aichi.jp",
+- "shikatsu.aichi.jp",
+- "shinshiro.aichi.jp",
+- "shitara.aichi.jp",
+- "tahara.aichi.jp",
+- "takahama.aichi.jp",
+- "tobishima.aichi.jp",
+- "toei.aichi.jp",
+- "togo.aichi.jp",
+- "tokai.aichi.jp",
+- "tokoname.aichi.jp",
+- "toyoake.aichi.jp",
+- "toyohashi.aichi.jp",
+- "toyokawa.aichi.jp",
+- "toyone.aichi.jp",
+- "toyota.aichi.jp",
+- "tsushima.aichi.jp",
+- "yatomi.aichi.jp",
+- "akita.akita.jp",
+- "daisen.akita.jp",
+- "fujisato.akita.jp",
+- "gojome.akita.jp",
+- "hachirogata.akita.jp",
+- "happou.akita.jp",
+- "higashinaruse.akita.jp",
+- "honjo.akita.jp",
+- "honjyo.akita.jp",
+- "ikawa.akita.jp",
+- "kamikoani.akita.jp",
+- "kamioka.akita.jp",
+- "katagami.akita.jp",
+- "kazuno.akita.jp",
+- "kitaakita.akita.jp",
+- "kosaka.akita.jp",
+- "kyowa.akita.jp",
+- "misato.akita.jp",
+- "mitane.akita.jp",
+- "moriyoshi.akita.jp",
+- "nikaho.akita.jp",
+- "noshiro.akita.jp",
+- "odate.akita.jp",
+- "oga.akita.jp",
+- "ogata.akita.jp",
+- "semboku.akita.jp",
+- "yokote.akita.jp",
+- "yurihonjo.akita.jp",
+- "aomori.aomori.jp",
+- "gonohe.aomori.jp",
+- "hachinohe.aomori.jp",
+- "hashikami.aomori.jp",
+- "hiranai.aomori.jp",
+- "hirosaki.aomori.jp",
+- "itayanagi.aomori.jp",
+- "kuroishi.aomori.jp",
+- "misawa.aomori.jp",
+- "mutsu.aomori.jp",
+- "nakadomari.aomori.jp",
+- "noheji.aomori.jp",
+- "oirase.aomori.jp",
+- "owani.aomori.jp",
+- "rokunohe.aomori.jp",
+- "sannohe.aomori.jp",
+- "shichinohe.aomori.jp",
+- "shingo.aomori.jp",
+- "takko.aomori.jp",
+- "towada.aomori.jp",
+- "tsugaru.aomori.jp",
+- "tsuruta.aomori.jp",
+- "abiko.chiba.jp",
+- "asahi.chiba.jp",
+- "chonan.chiba.jp",
+- "chosei.chiba.jp",
+- "choshi.chiba.jp",
+- "chuo.chiba.jp",
+- "funabashi.chiba.jp",
+- "futtsu.chiba.jp",
+- "hanamigawa.chiba.jp",
+- "ichihara.chiba.jp",
+- "ichikawa.chiba.jp",
+- "ichinomiya.chiba.jp",
+- "inzai.chiba.jp",
+- "isumi.chiba.jp",
+- "kamagaya.chiba.jp",
+- "kamogawa.chiba.jp",
+- "kashiwa.chiba.jp",
+- "katori.chiba.jp",
+- "katsuura.chiba.jp",
+- "kimitsu.chiba.jp",
+- "kisarazu.chiba.jp",
+- "kozaki.chiba.jp",
+- "kujukuri.chiba.jp",
+- "kyonan.chiba.jp",
+- "matsudo.chiba.jp",
+- "midori.chiba.jp",
+- "mihama.chiba.jp",
+- "minamiboso.chiba.jp",
+- "mobara.chiba.jp",
+- "mutsuzawa.chiba.jp",
+- "nagara.chiba.jp",
+- "nagareyama.chiba.jp",
+- "narashino.chiba.jp",
+- "narita.chiba.jp",
+- "noda.chiba.jp",
+- "oamishirasato.chiba.jp",
+- "omigawa.chiba.jp",
+- "onjuku.chiba.jp",
+- "otaki.chiba.jp",
+- "sakae.chiba.jp",
+- "sakura.chiba.jp",
+- "shimofusa.chiba.jp",
+- "shirako.chiba.jp",
+- "shiroi.chiba.jp",
+- "shisui.chiba.jp",
+- "sodegaura.chiba.jp",
+- "sosa.chiba.jp",
+- "tako.chiba.jp",
+- "tateyama.chiba.jp",
+- "togane.chiba.jp",
+- "tohnosho.chiba.jp",
+- "tomisato.chiba.jp",
+- "urayasu.chiba.jp",
+- "yachimata.chiba.jp",
+- "yachiyo.chiba.jp",
+- "yokaichiba.chiba.jp",
+- "yokoshibahikari.chiba.jp",
+- "yotsukaido.chiba.jp",
+- "ainan.ehime.jp",
+- "honai.ehime.jp",
+- "ikata.ehime.jp",
+- "imabari.ehime.jp",
+- "iyo.ehime.jp",
+- "kamijima.ehime.jp",
+- "kihoku.ehime.jp",
+- "kumakogen.ehime.jp",
+- "masaki.ehime.jp",
+- "matsuno.ehime.jp",
+- "matsuyama.ehime.jp",
+- "namikata.ehime.jp",
+- "niihama.ehime.jp",
+- "ozu.ehime.jp",
+- "saijo.ehime.jp",
+- "seiyo.ehime.jp",
+- "shikokuchuo.ehime.jp",
+- "tobe.ehime.jp",
+- "toon.ehime.jp",
+- "uchiko.ehime.jp",
+- "uwajima.ehime.jp",
+- "yawatahama.ehime.jp",
+- "echizen.fukui.jp",
+- "eiheiji.fukui.jp",
+- "fukui.fukui.jp",
+- "ikeda.fukui.jp",
+- "katsuyama.fukui.jp",
+- "mihama.fukui.jp",
+- "minamiechizen.fukui.jp",
+- "obama.fukui.jp",
+- "ohi.fukui.jp",
+- "ono.fukui.jp",
+- "sabae.fukui.jp",
+- "sakai.fukui.jp",
+- "takahama.fukui.jp",
+- "tsuruga.fukui.jp",
+- "wakasa.fukui.jp",
+- "ashiya.fukuoka.jp",
+- "buzen.fukuoka.jp",
+- "chikugo.fukuoka.jp",
+- "chikuho.fukuoka.jp",
+- "chikujo.fukuoka.jp",
+- "chikushino.fukuoka.jp",
+- "chikuzen.fukuoka.jp",
+- "chuo.fukuoka.jp",
+- "dazaifu.fukuoka.jp",
+- "fukuchi.fukuoka.jp",
+- "hakata.fukuoka.jp",
+- "higashi.fukuoka.jp",
+- "hirokawa.fukuoka.jp",
+- "hisayama.fukuoka.jp",
+- "iizuka.fukuoka.jp",
+- "inatsuki.fukuoka.jp",
+- "kaho.fukuoka.jp",
+- "kasuga.fukuoka.jp",
+- "kasuya.fukuoka.jp",
+- "kawara.fukuoka.jp",
+- "keisen.fukuoka.jp",
+- "koga.fukuoka.jp",
+- "kurate.fukuoka.jp",
+- "kurogi.fukuoka.jp",
+- "kurume.fukuoka.jp",
+- "minami.fukuoka.jp",
+- "miyako.fukuoka.jp",
+- "miyama.fukuoka.jp",
+- "miyawaka.fukuoka.jp",
+- "mizumaki.fukuoka.jp",
+- "munakata.fukuoka.jp",
+- "nakagawa.fukuoka.jp",
+- "nakama.fukuoka.jp",
+- "nishi.fukuoka.jp",
+- "nogata.fukuoka.jp",
+- "ogori.fukuoka.jp",
+- "okagaki.fukuoka.jp",
+- "okawa.fukuoka.jp",
+- "oki.fukuoka.jp",
+- "omuta.fukuoka.jp",
+- "onga.fukuoka.jp",
+- "onojo.fukuoka.jp",
+- "oto.fukuoka.jp",
+- "saigawa.fukuoka.jp",
+- "sasaguri.fukuoka.jp",
+- "shingu.fukuoka.jp",
+- "shinyoshitomi.fukuoka.jp",
+- "shonai.fukuoka.jp",
+- "soeda.fukuoka.jp",
+- "sue.fukuoka.jp",
+- "tachiarai.fukuoka.jp",
+- "tagawa.fukuoka.jp",
+- "takata.fukuoka.jp",
+- "toho.fukuoka.jp",
+- "toyotsu.fukuoka.jp",
+- "tsuiki.fukuoka.jp",
+- "ukiha.fukuoka.jp",
+- "umi.fukuoka.jp",
+- "usui.fukuoka.jp",
+- "yamada.fukuoka.jp",
+- "yame.fukuoka.jp",
+- "yanagawa.fukuoka.jp",
+- "yukuhashi.fukuoka.jp",
+- "aizubange.fukushima.jp",
+- "aizumisato.fukushima.jp",
+- "aizuwakamatsu.fukushima.jp",
+- "asakawa.fukushima.jp",
+- "bandai.fukushima.jp",
+- "date.fukushima.jp",
+- "fukushima.fukushima.jp",
+- "furudono.fukushima.jp",
+- "futaba.fukushima.jp",
+- "hanawa.fukushima.jp",
+- "higashi.fukushima.jp",
+- "hirata.fukushima.jp",
+- "hirono.fukushima.jp",
+- "iitate.fukushima.jp",
+- "inawashiro.fukushima.jp",
+- "ishikawa.fukushima.jp",
+- "iwaki.fukushima.jp",
+- "izumizaki.fukushima.jp",
+- "kagamiishi.fukushima.jp",
+- "kaneyama.fukushima.jp",
+- "kawamata.fukushima.jp",
+- "kitakata.fukushima.jp",
+- "kitashiobara.fukushima.jp",
+- "koori.fukushima.jp",
+- "koriyama.fukushima.jp",
+- "kunimi.fukushima.jp",
+- "miharu.fukushima.jp",
+- "mishima.fukushima.jp",
+- "namie.fukushima.jp",
+- "nango.fukushima.jp",
+- "nishiaizu.fukushima.jp",
+- "nishigo.fukushima.jp",
+- "okuma.fukushima.jp",
+- "omotego.fukushima.jp",
+- "ono.fukushima.jp",
+- "otama.fukushima.jp",
+- "samegawa.fukushima.jp",
+- "shimogo.fukushima.jp",
+- "shirakawa.fukushima.jp",
+- "showa.fukushima.jp",
+- "soma.fukushima.jp",
+- "sukagawa.fukushima.jp",
+- "taishin.fukushima.jp",
+- "tamakawa.fukushima.jp",
+- "tanagura.fukushima.jp",
+- "tenei.fukushima.jp",
+- "yabuki.fukushima.jp",
+- "yamato.fukushima.jp",
+- "yamatsuri.fukushima.jp",
+- "yanaizu.fukushima.jp",
+- "yugawa.fukushima.jp",
+- "anpachi.gifu.jp",
+- "ena.gifu.jp",
+- "gifu.gifu.jp",
+- "ginan.gifu.jp",
+- "godo.gifu.jp",
+- "gujo.gifu.jp",
+- "hashima.gifu.jp",
+- "hichiso.gifu.jp",
+- "hida.gifu.jp",
+- "higashishirakawa.gifu.jp",
+- "ibigawa.gifu.jp",
+- "ikeda.gifu.jp",
+- "kakamigahara.gifu.jp",
+- "kani.gifu.jp",
+- "kasahara.gifu.jp",
+- "kasamatsu.gifu.jp",
+- "kawaue.gifu.jp",
+- "kitagata.gifu.jp",
+- "mino.gifu.jp",
+- "minokamo.gifu.jp",
+- "mitake.gifu.jp",
+- "mizunami.gifu.jp",
+- "motosu.gifu.jp",
+- "nakatsugawa.gifu.jp",
+- "ogaki.gifu.jp",
+- "sakahogi.gifu.jp",
+- "seki.gifu.jp",
+- "sekigahara.gifu.jp",
+- "shirakawa.gifu.jp",
+- "tajimi.gifu.jp",
+- "takayama.gifu.jp",
+- "tarui.gifu.jp",
+- "toki.gifu.jp",
+- "tomika.gifu.jp",
+- "wanouchi.gifu.jp",
+- "yamagata.gifu.jp",
+- "yaotsu.gifu.jp",
+- "yoro.gifu.jp",
+- "annaka.gunma.jp",
+- "chiyoda.gunma.jp",
+- "fujioka.gunma.jp",
+- "higashiagatsuma.gunma.jp",
+- "isesaki.gunma.jp",
+- "itakura.gunma.jp",
+- "kanna.gunma.jp",
+- "kanra.gunma.jp",
+- "katashina.gunma.jp",
+- "kawaba.gunma.jp",
+- "kiryu.gunma.jp",
+- "kusatsu.gunma.jp",
+- "maebashi.gunma.jp",
+- "meiwa.gunma.jp",
+- "midori.gunma.jp",
+- "minakami.gunma.jp",
+- "naganohara.gunma.jp",
+- "nakanojo.gunma.jp",
+- "nanmoku.gunma.jp",
+- "numata.gunma.jp",
+- "oizumi.gunma.jp",
+- "ora.gunma.jp",
+- "ota.gunma.jp",
+- "shibukawa.gunma.jp",
+- "shimonita.gunma.jp",
+- "shinto.gunma.jp",
+- "showa.gunma.jp",
+- "takasaki.gunma.jp",
+- "takayama.gunma.jp",
+- "tamamura.gunma.jp",
+- "tatebayashi.gunma.jp",
+- "tomioka.gunma.jp",
+- "tsukiyono.gunma.jp",
+- "tsumagoi.gunma.jp",
+- "ueno.gunma.jp",
+- "yoshioka.gunma.jp",
+- "asaminami.hiroshima.jp",
+- "daiwa.hiroshima.jp",
+- "etajima.hiroshima.jp",
+- "fuchu.hiroshima.jp",
+- "fukuyama.hiroshima.jp",
+- "hatsukaichi.hiroshima.jp",
+- "higashihiroshima.hiroshima.jp",
+- "hongo.hiroshima.jp",
+- "jinsekikogen.hiroshima.jp",
+- "kaita.hiroshima.jp",
+- "kui.hiroshima.jp",
+- "kumano.hiroshima.jp",
+- "kure.hiroshima.jp",
+- "mihara.hiroshima.jp",
+- "miyoshi.hiroshima.jp",
+- "naka.hiroshima.jp",
+- "onomichi.hiroshima.jp",
+- "osakikamijima.hiroshima.jp",
+- "otake.hiroshima.jp",
+- "saka.hiroshima.jp",
+- "sera.hiroshima.jp",
+- "seranishi.hiroshima.jp",
+- "shinichi.hiroshima.jp",
+- "shobara.hiroshima.jp",
+- "takehara.hiroshima.jp",
+- "abashiri.hokkaido.jp",
+- "abira.hokkaido.jp",
+- "aibetsu.hokkaido.jp",
+- "akabira.hokkaido.jp",
+- "akkeshi.hokkaido.jp",
+- "asahikawa.hokkaido.jp",
+- "ashibetsu.hokkaido.jp",
+- "ashoro.hokkaido.jp",
+- "assabu.hokkaido.jp",
+- "atsuma.hokkaido.jp",
+- "bibai.hokkaido.jp",
+- "biei.hokkaido.jp",
+- "bifuka.hokkaido.jp",
+- "bihoro.hokkaido.jp",
+- "biratori.hokkaido.jp",
+- "chippubetsu.hokkaido.jp",
+- "chitose.hokkaido.jp",
+- "date.hokkaido.jp",
+- "ebetsu.hokkaido.jp",
+- "embetsu.hokkaido.jp",
+- "eniwa.hokkaido.jp",
+- "erimo.hokkaido.jp",
+- "esan.hokkaido.jp",
+- "esashi.hokkaido.jp",
+- "fukagawa.hokkaido.jp",
+- "fukushima.hokkaido.jp",
+- "furano.hokkaido.jp",
+- "furubira.hokkaido.jp",
+- "haboro.hokkaido.jp",
+- "hakodate.hokkaido.jp",
+- "hamatonbetsu.hokkaido.jp",
+- "hidaka.hokkaido.jp",
+- "higashikagura.hokkaido.jp",
+- "higashikawa.hokkaido.jp",
+- "hiroo.hokkaido.jp",
+- "hokuryu.hokkaido.jp",
+- "hokuto.hokkaido.jp",
+- "honbetsu.hokkaido.jp",
+- "horokanai.hokkaido.jp",
+- "horonobe.hokkaido.jp",
+- "ikeda.hokkaido.jp",
+- "imakane.hokkaido.jp",
+- "ishikari.hokkaido.jp",
+- "iwamizawa.hokkaido.jp",
+- "iwanai.hokkaido.jp",
+- "kamifurano.hokkaido.jp",
+- "kamikawa.hokkaido.jp",
+- "kamishihoro.hokkaido.jp",
+- "kamisunagawa.hokkaido.jp",
+- "kamoenai.hokkaido.jp",
+- "kayabe.hokkaido.jp",
+- "kembuchi.hokkaido.jp",
+- "kikonai.hokkaido.jp",
+- "kimobetsu.hokkaido.jp",
+- "kitahiroshima.hokkaido.jp",
+- "kitami.hokkaido.jp",
+- "kiyosato.hokkaido.jp",
+- "koshimizu.hokkaido.jp",
+- "kunneppu.hokkaido.jp",
+- "kuriyama.hokkaido.jp",
+- "kuromatsunai.hokkaido.jp",
+- "kushiro.hokkaido.jp",
+- "kutchan.hokkaido.jp",
+- "kyowa.hokkaido.jp",
+- "mashike.hokkaido.jp",
+- "matsumae.hokkaido.jp",
+- "mikasa.hokkaido.jp",
+- "minamifurano.hokkaido.jp",
+- "mombetsu.hokkaido.jp",
+- "moseushi.hokkaido.jp",
+- "mukawa.hokkaido.jp",
+- "muroran.hokkaido.jp",
+- "naie.hokkaido.jp",
+- "nakagawa.hokkaido.jp",
+- "nakasatsunai.hokkaido.jp",
+- "nakatombetsu.hokkaido.jp",
+- "nanae.hokkaido.jp",
+- "nanporo.hokkaido.jp",
+- "nayoro.hokkaido.jp",
+- "nemuro.hokkaido.jp",
+- "niikappu.hokkaido.jp",
+- "niki.hokkaido.jp",
+- "nishiokoppe.hokkaido.jp",
+- "noboribetsu.hokkaido.jp",
+- "numata.hokkaido.jp",
+- "obihiro.hokkaido.jp",
+- "obira.hokkaido.jp",
+- "oketo.hokkaido.jp",
+- "okoppe.hokkaido.jp",
+- "otaru.hokkaido.jp",
+- "otobe.hokkaido.jp",
+- "otofuke.hokkaido.jp",
+- "otoineppu.hokkaido.jp",
+- "oumu.hokkaido.jp",
+- "ozora.hokkaido.jp",
+- "pippu.hokkaido.jp",
+- "rankoshi.hokkaido.jp",
+- "rebun.hokkaido.jp",
+- "rikubetsu.hokkaido.jp",
+- "rishiri.hokkaido.jp",
+- "rishirifuji.hokkaido.jp",
+- "saroma.hokkaido.jp",
+- "sarufutsu.hokkaido.jp",
+- "shakotan.hokkaido.jp",
+- "shari.hokkaido.jp",
+- "shibecha.hokkaido.jp",
+- "shibetsu.hokkaido.jp",
+- "shikabe.hokkaido.jp",
+- "shikaoi.hokkaido.jp",
+- "shimamaki.hokkaido.jp",
+- "shimizu.hokkaido.jp",
+- "shimokawa.hokkaido.jp",
+- "shinshinotsu.hokkaido.jp",
+- "shintoku.hokkaido.jp",
+- "shiranuka.hokkaido.jp",
+- "shiraoi.hokkaido.jp",
+- "shiriuchi.hokkaido.jp",
+- "sobetsu.hokkaido.jp",
+- "sunagawa.hokkaido.jp",
+- "taiki.hokkaido.jp",
+- "takasu.hokkaido.jp",
+- "takikawa.hokkaido.jp",
+- "takinoue.hokkaido.jp",
+- "teshikaga.hokkaido.jp",
+- "tobetsu.hokkaido.jp",
+- "tohma.hokkaido.jp",
+- "tomakomai.hokkaido.jp",
+- "tomari.hokkaido.jp",
+- "toya.hokkaido.jp",
+- "toyako.hokkaido.jp",
+- "toyotomi.hokkaido.jp",
+- "toyoura.hokkaido.jp",
+- "tsubetsu.hokkaido.jp",
+- "tsukigata.hokkaido.jp",
+- "urakawa.hokkaido.jp",
+- "urausu.hokkaido.jp",
+- "uryu.hokkaido.jp",
+- "utashinai.hokkaido.jp",
+- "wakkanai.hokkaido.jp",
+- "wassamu.hokkaido.jp",
+- "yakumo.hokkaido.jp",
+- "yoichi.hokkaido.jp",
+- "aioi.hyogo.jp",
+- "akashi.hyogo.jp",
+- "ako.hyogo.jp",
+- "amagasaki.hyogo.jp",
+- "aogaki.hyogo.jp",
+- "asago.hyogo.jp",
+- "ashiya.hyogo.jp",
+- "awaji.hyogo.jp",
+- "fukusaki.hyogo.jp",
+- "goshiki.hyogo.jp",
+- "harima.hyogo.jp",
+- "himeji.hyogo.jp",
+- "ichikawa.hyogo.jp",
+- "inagawa.hyogo.jp",
+- "itami.hyogo.jp",
+- "kakogawa.hyogo.jp",
+- "kamigori.hyogo.jp",
+- "kamikawa.hyogo.jp",
+- "kasai.hyogo.jp",
+- "kasuga.hyogo.jp",
+- "kawanishi.hyogo.jp",
+- "miki.hyogo.jp",
+- "minamiawaji.hyogo.jp",
+- "nishinomiya.hyogo.jp",
+- "nishiwaki.hyogo.jp",
+- "ono.hyogo.jp",
+- "sanda.hyogo.jp",
+- "sannan.hyogo.jp",
+- "sasayama.hyogo.jp",
+- "sayo.hyogo.jp",
+- "shingu.hyogo.jp",
+- "shinonsen.hyogo.jp",
+- "shiso.hyogo.jp",
+- "sumoto.hyogo.jp",
+- "taishi.hyogo.jp",
+- "taka.hyogo.jp",
+- "takarazuka.hyogo.jp",
+- "takasago.hyogo.jp",
+- "takino.hyogo.jp",
+- "tamba.hyogo.jp",
+- "tatsuno.hyogo.jp",
+- "toyooka.hyogo.jp",
+- "yabu.hyogo.jp",
+- "yashiro.hyogo.jp",
+- "yoka.hyogo.jp",
+- "yokawa.hyogo.jp",
+- "ami.ibaraki.jp",
+- "asahi.ibaraki.jp",
+- "bando.ibaraki.jp",
+- "chikusei.ibaraki.jp",
+- "daigo.ibaraki.jp",
+- "fujishiro.ibaraki.jp",
+- "hitachi.ibaraki.jp",
+- "hitachinaka.ibaraki.jp",
+- "hitachiomiya.ibaraki.jp",
+- "hitachiota.ibaraki.jp",
+- "ibaraki.ibaraki.jp",
+- "ina.ibaraki.jp",
+- "inashiki.ibaraki.jp",
+- "itako.ibaraki.jp",
+- "iwama.ibaraki.jp",
+- "joso.ibaraki.jp",
+- "kamisu.ibaraki.jp",
+- "kasama.ibaraki.jp",
+- "kashima.ibaraki.jp",
+- "kasumigaura.ibaraki.jp",
+- "koga.ibaraki.jp",
+- "miho.ibaraki.jp",
+- "mito.ibaraki.jp",
+- "moriya.ibaraki.jp",
+- "naka.ibaraki.jp",
+- "namegata.ibaraki.jp",
+- "oarai.ibaraki.jp",
+- "ogawa.ibaraki.jp",
+- "omitama.ibaraki.jp",
+- "ryugasaki.ibaraki.jp",
+- "sakai.ibaraki.jp",
+- "sakuragawa.ibaraki.jp",
+- "shimodate.ibaraki.jp",
+- "shimotsuma.ibaraki.jp",
+- "shirosato.ibaraki.jp",
+- "sowa.ibaraki.jp",
+- "suifu.ibaraki.jp",
+- "takahagi.ibaraki.jp",
+- "tamatsukuri.ibaraki.jp",
+- "tokai.ibaraki.jp",
+- "tomobe.ibaraki.jp",
+- "tone.ibaraki.jp",
+- "toride.ibaraki.jp",
+- "tsuchiura.ibaraki.jp",
+- "tsukuba.ibaraki.jp",
+- "uchihara.ibaraki.jp",
+- "ushiku.ibaraki.jp",
+- "yachiyo.ibaraki.jp",
+- "yamagata.ibaraki.jp",
+- "yawara.ibaraki.jp",
+- "yuki.ibaraki.jp",
+- "anamizu.ishikawa.jp",
+- "hakui.ishikawa.jp",
+- "hakusan.ishikawa.jp",
+- "kaga.ishikawa.jp",
+- "kahoku.ishikawa.jp",
+- "kanazawa.ishikawa.jp",
+- "kawakita.ishikawa.jp",
+- "komatsu.ishikawa.jp",
+- "nakanoto.ishikawa.jp",
+- "nanao.ishikawa.jp",
+- "nomi.ishikawa.jp",
+- "nonoichi.ishikawa.jp",
+- "noto.ishikawa.jp",
+- "shika.ishikawa.jp",
+- "suzu.ishikawa.jp",
+- "tsubata.ishikawa.jp",
+- "tsurugi.ishikawa.jp",
+- "uchinada.ishikawa.jp",
+- "wajima.ishikawa.jp",
+- "fudai.iwate.jp",
+- "fujisawa.iwate.jp",
+- "hanamaki.iwate.jp",
+- "hiraizumi.iwate.jp",
+- "hirono.iwate.jp",
+- "ichinohe.iwate.jp",
+- "ichinoseki.iwate.jp",
+- "iwaizumi.iwate.jp",
+- "iwate.iwate.jp",
+- "joboji.iwate.jp",
+- "kamaishi.iwate.jp",
+- "kanegasaki.iwate.jp",
+- "karumai.iwate.jp",
+- "kawai.iwate.jp",
+- "kitakami.iwate.jp",
+- "kuji.iwate.jp",
+- "kunohe.iwate.jp",
+- "kuzumaki.iwate.jp",
+- "miyako.iwate.jp",
+- "mizusawa.iwate.jp",
+- "morioka.iwate.jp",
+- "ninohe.iwate.jp",
+- "noda.iwate.jp",
+- "ofunato.iwate.jp",
+- "oshu.iwate.jp",
+- "otsuchi.iwate.jp",
+- "rikuzentakata.iwate.jp",
+- "shiwa.iwate.jp",
+- "shizukuishi.iwate.jp",
+- "sumita.iwate.jp",
+- "takizawa.iwate.jp",
+- "tanohata.iwate.jp",
+- "tono.iwate.jp",
+- "yahaba.iwate.jp",
+- "yamada.iwate.jp",
+- "ayagawa.kagawa.jp",
+- "higashikagawa.kagawa.jp",
+- "kanonji.kagawa.jp",
+- "kotohira.kagawa.jp",
+- "manno.kagawa.jp",
+- "marugame.kagawa.jp",
+- "mitoyo.kagawa.jp",
+- "naoshima.kagawa.jp",
+- "sanuki.kagawa.jp",
+- "tadotsu.kagawa.jp",
+- "takamatsu.kagawa.jp",
+- "tonosho.kagawa.jp",
+- "uchinomi.kagawa.jp",
+- "utazu.kagawa.jp",
+- "zentsuji.kagawa.jp",
+- "akune.kagoshima.jp",
+- "amami.kagoshima.jp",
+- "hioki.kagoshima.jp",
+- "isa.kagoshima.jp",
+- "isen.kagoshima.jp",
+- "izumi.kagoshima.jp",
+- "kagoshima.kagoshima.jp",
+- "kanoya.kagoshima.jp",
+- "kawanabe.kagoshima.jp",
+- "kinko.kagoshima.jp",
+- "kouyama.kagoshima.jp",
+- "makurazaki.kagoshima.jp",
+- "matsumoto.kagoshima.jp",
+- "minamitane.kagoshima.jp",
+- "nakatane.kagoshima.jp",
+- "nishinoomote.kagoshima.jp",
+- "satsumasendai.kagoshima.jp",
+- "soo.kagoshima.jp",
+- "tarumizu.kagoshima.jp",
+- "yusui.kagoshima.jp",
+- "aikawa.kanagawa.jp",
+- "atsugi.kanagawa.jp",
+- "ayase.kanagawa.jp",
+- "chigasaki.kanagawa.jp",
+- "ebina.kanagawa.jp",
+- "fujisawa.kanagawa.jp",
+- "hadano.kanagawa.jp",
+- "hakone.kanagawa.jp",
+- "hiratsuka.kanagawa.jp",
+- "isehara.kanagawa.jp",
+- "kaisei.kanagawa.jp",
+- "kamakura.kanagawa.jp",
+- "kiyokawa.kanagawa.jp",
+- "matsuda.kanagawa.jp",
+- "minamiashigara.kanagawa.jp",
+- "miura.kanagawa.jp",
+- "nakai.kanagawa.jp",
+- "ninomiya.kanagawa.jp",
+- "odawara.kanagawa.jp",
+- "oi.kanagawa.jp",
+- "oiso.kanagawa.jp",
+- "sagamihara.kanagawa.jp",
+- "samukawa.kanagawa.jp",
+- "tsukui.kanagawa.jp",
+- "yamakita.kanagawa.jp",
+- "yamato.kanagawa.jp",
+- "yokosuka.kanagawa.jp",
+- "yugawara.kanagawa.jp",
+- "zama.kanagawa.jp",
+- "zushi.kanagawa.jp",
+- "aki.kochi.jp",
+- "geisei.kochi.jp",
+- "hidaka.kochi.jp",
+- "higashitsuno.kochi.jp",
+- "ino.kochi.jp",
+- "kagami.kochi.jp",
+- "kami.kochi.jp",
+- "kitagawa.kochi.jp",
+- "kochi.kochi.jp",
+- "mihara.kochi.jp",
+- "motoyama.kochi.jp",
+- "muroto.kochi.jp",
+- "nahari.kochi.jp",
+- "nakamura.kochi.jp",
+- "nankoku.kochi.jp",
+- "nishitosa.kochi.jp",
+- "niyodogawa.kochi.jp",
+- "ochi.kochi.jp",
+- "okawa.kochi.jp",
+- "otoyo.kochi.jp",
+- "otsuki.kochi.jp",
+- "sakawa.kochi.jp",
+- "sukumo.kochi.jp",
+- "susaki.kochi.jp",
+- "tosa.kochi.jp",
+- "tosashimizu.kochi.jp",
+- "toyo.kochi.jp",
+- "tsuno.kochi.jp",
+- "umaji.kochi.jp",
+- "yasuda.kochi.jp",
+- "yusuhara.kochi.jp",
+- "amakusa.kumamoto.jp",
+- "arao.kumamoto.jp",
+- "aso.kumamoto.jp",
+- "choyo.kumamoto.jp",
+- "gyokuto.kumamoto.jp",
+- "hitoyoshi.kumamoto.jp",
+- "kamiamakusa.kumamoto.jp",
+- "kashima.kumamoto.jp",
+- "kikuchi.kumamoto.jp",
+- "kosa.kumamoto.jp",
+- "kumamoto.kumamoto.jp",
+- "mashiki.kumamoto.jp",
+- "mifune.kumamoto.jp",
+- "minamata.kumamoto.jp",
+- "minamioguni.kumamoto.jp",
+- "nagasu.kumamoto.jp",
+- "nishihara.kumamoto.jp",
+- "oguni.kumamoto.jp",
+- "ozu.kumamoto.jp",
+- "sumoto.kumamoto.jp",
+- "takamori.kumamoto.jp",
+- "uki.kumamoto.jp",
+- "uto.kumamoto.jp",
+- "yamaga.kumamoto.jp",
+- "yamato.kumamoto.jp",
+- "yatsushiro.kumamoto.jp",
+- "ayabe.kyoto.jp",
+- "fukuchiyama.kyoto.jp",
+- "higashiyama.kyoto.jp",
+- "ide.kyoto.jp",
+- "ine.kyoto.jp",
+- "joyo.kyoto.jp",
+- "kameoka.kyoto.jp",
+- "kamo.kyoto.jp",
+- "kita.kyoto.jp",
+- "kizu.kyoto.jp",
+- "kumiyama.kyoto.jp",
+- "kyotamba.kyoto.jp",
+- "kyotanabe.kyoto.jp",
+- "kyotango.kyoto.jp",
+- "maizuru.kyoto.jp",
+- "minami.kyoto.jp",
+- "minamiyamashiro.kyoto.jp",
+- "miyazu.kyoto.jp",
+- "muko.kyoto.jp",
+- "nagaokakyo.kyoto.jp",
+- "nakagyo.kyoto.jp",
+- "nantan.kyoto.jp",
+- "oyamazaki.kyoto.jp",
+- "sakyo.kyoto.jp",
+- "seika.kyoto.jp",
+- "tanabe.kyoto.jp",
+- "uji.kyoto.jp",
+- "ujitawara.kyoto.jp",
+- "wazuka.kyoto.jp",
+- "yamashina.kyoto.jp",
+- "yawata.kyoto.jp",
+- "asahi.mie.jp",
+- "inabe.mie.jp",
+- "ise.mie.jp",
+- "kameyama.mie.jp",
+- "kawagoe.mie.jp",
+- "kiho.mie.jp",
+- "kisosaki.mie.jp",
+- "kiwa.mie.jp",
+- "komono.mie.jp",
+- "kumano.mie.jp",
+- "kuwana.mie.jp",
+- "matsusaka.mie.jp",
+- "meiwa.mie.jp",
+- "mihama.mie.jp",
+- "minamiise.mie.jp",
+- "misugi.mie.jp",
+- "miyama.mie.jp",
+- "nabari.mie.jp",
+- "shima.mie.jp",
+- "suzuka.mie.jp",
+- "tado.mie.jp",
+- "taiki.mie.jp",
+- "taki.mie.jp",
+- "tamaki.mie.jp",
+- "toba.mie.jp",
+- "tsu.mie.jp",
+- "udono.mie.jp",
+- "ureshino.mie.jp",
+- "watarai.mie.jp",
+- "yokkaichi.mie.jp",
+- "furukawa.miyagi.jp",
+- "higashimatsushima.miyagi.jp",
+- "ishinomaki.miyagi.jp",
+- "iwanuma.miyagi.jp",
+- "kakuda.miyagi.jp",
+- "kami.miyagi.jp",
+- "kawasaki.miyagi.jp",
+- "kesennuma.miyagi.jp",
+- "marumori.miyagi.jp",
+- "matsushima.miyagi.jp",
+- "minamisanriku.miyagi.jp",
+- "misato.miyagi.jp",
+- "murata.miyagi.jp",
+- "natori.miyagi.jp",
+- "ogawara.miyagi.jp",
+- "ohira.miyagi.jp",
+- "onagawa.miyagi.jp",
+- "osaki.miyagi.jp",
+- "rifu.miyagi.jp",
+- "semine.miyagi.jp",
+- "shibata.miyagi.jp",
+- "shichikashuku.miyagi.jp",
+- "shikama.miyagi.jp",
+- "shiogama.miyagi.jp",
+- "shiroishi.miyagi.jp",
+- "tagajo.miyagi.jp",
+- "taiwa.miyagi.jp",
+- "tome.miyagi.jp",
+- "tomiya.miyagi.jp",
+- "wakuya.miyagi.jp",
+- "watari.miyagi.jp",
+- "yamamoto.miyagi.jp",
+- "zao.miyagi.jp",
+- "aya.miyazaki.jp",
+- "ebino.miyazaki.jp",
+- "gokase.miyazaki.jp",
+- "hyuga.miyazaki.jp",
+- "kadogawa.miyazaki.jp",
+- "kawaminami.miyazaki.jp",
+- "kijo.miyazaki.jp",
+- "kitagawa.miyazaki.jp",
+- "kitakata.miyazaki.jp",
+- "kitaura.miyazaki.jp",
+- "kobayashi.miyazaki.jp",
+- "kunitomi.miyazaki.jp",
+- "kushima.miyazaki.jp",
+- "mimata.miyazaki.jp",
+- "miyakonojo.miyazaki.jp",
+- "miyazaki.miyazaki.jp",
+- "morotsuka.miyazaki.jp",
+- "nichinan.miyazaki.jp",
+- "nishimera.miyazaki.jp",
+- "nobeoka.miyazaki.jp",
+- "saito.miyazaki.jp",
+- "shiiba.miyazaki.jp",
+- "shintomi.miyazaki.jp",
+- "takaharu.miyazaki.jp",
+- "takanabe.miyazaki.jp",
+- "takazaki.miyazaki.jp",
+- "tsuno.miyazaki.jp",
+- "achi.nagano.jp",
+- "agematsu.nagano.jp",
+- "anan.nagano.jp",
+- "aoki.nagano.jp",
+- "asahi.nagano.jp",
+- "azumino.nagano.jp",
+- "chikuhoku.nagano.jp",
+- "chikuma.nagano.jp",
+- "chino.nagano.jp",
+- "fujimi.nagano.jp",
+- "hakuba.nagano.jp",
+- "hara.nagano.jp",
+- "hiraya.nagano.jp",
+- "iida.nagano.jp",
+- "iijima.nagano.jp",
+- "iiyama.nagano.jp",
+- "iizuna.nagano.jp",
+- "ikeda.nagano.jp",
+- "ikusaka.nagano.jp",
+- "ina.nagano.jp",
+- "karuizawa.nagano.jp",
+- "kawakami.nagano.jp",
+- "kiso.nagano.jp",
+- "kisofukushima.nagano.jp",
+- "kitaaiki.nagano.jp",
+- "komagane.nagano.jp",
+- "komoro.nagano.jp",
+- "matsukawa.nagano.jp",
+- "matsumoto.nagano.jp",
+- "miasa.nagano.jp",
+- "minamiaiki.nagano.jp",
+- "minamimaki.nagano.jp",
+- "minamiminowa.nagano.jp",
+- "minowa.nagano.jp",
+- "miyada.nagano.jp",
+- "miyota.nagano.jp",
+- "mochizuki.nagano.jp",
+- "nagano.nagano.jp",
+- "nagawa.nagano.jp",
+- "nagiso.nagano.jp",
+- "nakagawa.nagano.jp",
+- "nakano.nagano.jp",
+- "nozawaonsen.nagano.jp",
+- "obuse.nagano.jp",
+- "ogawa.nagano.jp",
+- "okaya.nagano.jp",
+- "omachi.nagano.jp",
+- "omi.nagano.jp",
+- "ookuwa.nagano.jp",
+- "ooshika.nagano.jp",
+- "otaki.nagano.jp",
+- "otari.nagano.jp",
+- "sakae.nagano.jp",
+- "sakaki.nagano.jp",
+- "saku.nagano.jp",
+- "sakuho.nagano.jp",
+- "shimosuwa.nagano.jp",
+- "shinanomachi.nagano.jp",
+- "shiojiri.nagano.jp",
+- "suwa.nagano.jp",
+- "suzaka.nagano.jp",
+- "takagi.nagano.jp",
+- "takamori.nagano.jp",
+- "takayama.nagano.jp",
+- "tateshina.nagano.jp",
+- "tatsuno.nagano.jp",
+- "togakushi.nagano.jp",
+- "togura.nagano.jp",
+- "tomi.nagano.jp",
+- "ueda.nagano.jp",
+- "wada.nagano.jp",
+- "yamagata.nagano.jp",
+- "yamanouchi.nagano.jp",
+- "yasaka.nagano.jp",
+- "yasuoka.nagano.jp",
+- "chijiwa.nagasaki.jp",
+- "futsu.nagasaki.jp",
+- "goto.nagasaki.jp",
+- "hasami.nagasaki.jp",
+- "hirado.nagasaki.jp",
+- "iki.nagasaki.jp",
+- "isahaya.nagasaki.jp",
+- "kawatana.nagasaki.jp",
+- "kuchinotsu.nagasaki.jp",
+- "matsuura.nagasaki.jp",
+- "nagasaki.nagasaki.jp",
+- "obama.nagasaki.jp",
+- "omura.nagasaki.jp",
+- "oseto.nagasaki.jp",
+- "saikai.nagasaki.jp",
+- "sasebo.nagasaki.jp",
+- "seihi.nagasaki.jp",
+- "shimabara.nagasaki.jp",
+- "shinkamigoto.nagasaki.jp",
+- "togitsu.nagasaki.jp",
+- "tsushima.nagasaki.jp",
+- "unzen.nagasaki.jp",
+- "ando.nara.jp",
+- "gose.nara.jp",
+- "heguri.nara.jp",
+- "higashiyoshino.nara.jp",
+- "ikaruga.nara.jp",
+- "ikoma.nara.jp",
+- "kamikitayama.nara.jp",
+- "kanmaki.nara.jp",
+- "kashiba.nara.jp",
+- "kashihara.nara.jp",
+- "katsuragi.nara.jp",
+- "kawai.nara.jp",
+- "kawakami.nara.jp",
+- "kawanishi.nara.jp",
+- "koryo.nara.jp",
+- "kurotaki.nara.jp",
+- "mitsue.nara.jp",
+- "miyake.nara.jp",
+- "nara.nara.jp",
+- "nosegawa.nara.jp",
+- "oji.nara.jp",
+- "ouda.nara.jp",
+- "oyodo.nara.jp",
+- "sakurai.nara.jp",
+- "sango.nara.jp",
+- "shimoichi.nara.jp",
+- "shimokitayama.nara.jp",
+- "shinjo.nara.jp",
+- "soni.nara.jp",
+- "takatori.nara.jp",
+- "tawaramoto.nara.jp",
+- "tenkawa.nara.jp",
+- "tenri.nara.jp",
+- "uda.nara.jp",
+- "yamatokoriyama.nara.jp",
+- "yamatotakada.nara.jp",
+- "yamazoe.nara.jp",
+- "yoshino.nara.jp",
+- "aga.niigata.jp",
+- "agano.niigata.jp",
+- "gosen.niigata.jp",
+- "itoigawa.niigata.jp",
+- "izumozaki.niigata.jp",
+- "joetsu.niigata.jp",
+- "kamo.niigata.jp",
+- "kariwa.niigata.jp",
+- "kashiwazaki.niigata.jp",
+- "minamiuonuma.niigata.jp",
+- "mitsuke.niigata.jp",
+- "muika.niigata.jp",
+- "murakami.niigata.jp",
+- "myoko.niigata.jp",
+- "nagaoka.niigata.jp",
+- "niigata.niigata.jp",
+- "ojiya.niigata.jp",
+- "omi.niigata.jp",
+- "sado.niigata.jp",
+- "sanjo.niigata.jp",
+- "seiro.niigata.jp",
+- "seirou.niigata.jp",
+- "sekikawa.niigata.jp",
+- "shibata.niigata.jp",
+- "tagami.niigata.jp",
+- "tainai.niigata.jp",
+- "tochio.niigata.jp",
+- "tokamachi.niigata.jp",
+- "tsubame.niigata.jp",
+- "tsunan.niigata.jp",
+- "uonuma.niigata.jp",
+- "yahiko.niigata.jp",
+- "yoita.niigata.jp",
+- "yuzawa.niigata.jp",
+- "beppu.oita.jp",
+- "bungoono.oita.jp",
+- "bungotakada.oita.jp",
+- "hasama.oita.jp",
+- "hiji.oita.jp",
+- "himeshima.oita.jp",
+- "hita.oita.jp",
+- "kamitsue.oita.jp",
+- "kokonoe.oita.jp",
+- "kuju.oita.jp",
+- "kunisaki.oita.jp",
+- "kusu.oita.jp",
+- "oita.oita.jp",
+- "saiki.oita.jp",
+- "taketa.oita.jp",
+- "tsukumi.oita.jp",
+- "usa.oita.jp",
+- "usuki.oita.jp",
+- "yufu.oita.jp",
+- "akaiwa.okayama.jp",
+- "asakuchi.okayama.jp",
+- "bizen.okayama.jp",
+- "hayashima.okayama.jp",
+- "ibara.okayama.jp",
+- "kagamino.okayama.jp",
+- "kasaoka.okayama.jp",
+- "kibichuo.okayama.jp",
+- "kumenan.okayama.jp",
+- "kurashiki.okayama.jp",
+- "maniwa.okayama.jp",
+- "misaki.okayama.jp",
+- "nagi.okayama.jp",
+- "niimi.okayama.jp",
+- "nishiawakura.okayama.jp",
+- "okayama.okayama.jp",
+- "satosho.okayama.jp",
+- "setouchi.okayama.jp",
+- "shinjo.okayama.jp",
+- "shoo.okayama.jp",
+- "soja.okayama.jp",
+- "takahashi.okayama.jp",
+- "tamano.okayama.jp",
+- "tsuyama.okayama.jp",
+- "wake.okayama.jp",
+- "yakage.okayama.jp",
+- "aguni.okinawa.jp",
+- "ginowan.okinawa.jp",
+- "ginoza.okinawa.jp",
+- "gushikami.okinawa.jp",
+- "haebaru.okinawa.jp",
+- "higashi.okinawa.jp",
+- "hirara.okinawa.jp",
+- "iheya.okinawa.jp",
+- "ishigaki.okinawa.jp",
+- "ishikawa.okinawa.jp",
+- "itoman.okinawa.jp",
+- "izena.okinawa.jp",
+- "kadena.okinawa.jp",
+- "kin.okinawa.jp",
+- "kitadaito.okinawa.jp",
+- "kitanakagusuku.okinawa.jp",
+- "kumejima.okinawa.jp",
+- "kunigami.okinawa.jp",
+- "minamidaito.okinawa.jp",
+- "motobu.okinawa.jp",
+- "nago.okinawa.jp",
+- "naha.okinawa.jp",
+- "nakagusuku.okinawa.jp",
+- "nakijin.okinawa.jp",
+- "nanjo.okinawa.jp",
+- "nishihara.okinawa.jp",
+- "ogimi.okinawa.jp",
+- "okinawa.okinawa.jp",
+- "onna.okinawa.jp",
+- "shimoji.okinawa.jp",
+- "taketomi.okinawa.jp",
+- "tarama.okinawa.jp",
+- "tokashiki.okinawa.jp",
+- "tomigusuku.okinawa.jp",
+- "tonaki.okinawa.jp",
+- "urasoe.okinawa.jp",
+- "uruma.okinawa.jp",
+- "yaese.okinawa.jp",
+- "yomitan.okinawa.jp",
+- "yonabaru.okinawa.jp",
+- "yonaguni.okinawa.jp",
+- "zamami.okinawa.jp",
+- "abeno.osaka.jp",
+- "chihayaakasaka.osaka.jp",
+- "chuo.osaka.jp",
+- "daito.osaka.jp",
+- "fujiidera.osaka.jp",
+- "habikino.osaka.jp",
+- "hannan.osaka.jp",
+- "higashiosaka.osaka.jp",
+- "higashisumiyoshi.osaka.jp",
+- "higashiyodogawa.osaka.jp",
+- "hirakata.osaka.jp",
+- "ibaraki.osaka.jp",
+- "ikeda.osaka.jp",
+- "izumi.osaka.jp",
+- "izumiotsu.osaka.jp",
+- "izumisano.osaka.jp",
+- "kadoma.osaka.jp",
+- "kaizuka.osaka.jp",
+- "kanan.osaka.jp",
+- "kashiwara.osaka.jp",
+- "katano.osaka.jp",
+- "kawachinagano.osaka.jp",
+- "kishiwada.osaka.jp",
+- "kita.osaka.jp",
+- "kumatori.osaka.jp",
+- "matsubara.osaka.jp",
+- "minato.osaka.jp",
+- "minoh.osaka.jp",
+- "misaki.osaka.jp",
+- "moriguchi.osaka.jp",
+- "neyagawa.osaka.jp",
+- "nishi.osaka.jp",
+- "nose.osaka.jp",
+- "osakasayama.osaka.jp",
+- "sakai.osaka.jp",
+- "sayama.osaka.jp",
+- "sennan.osaka.jp",
+- "settsu.osaka.jp",
+- "shijonawate.osaka.jp",
+- "shimamoto.osaka.jp",
+- "suita.osaka.jp",
+- "tadaoka.osaka.jp",
+- "taishi.osaka.jp",
+- "tajiri.osaka.jp",
+- "takaishi.osaka.jp",
+- "takatsuki.osaka.jp",
+- "tondabayashi.osaka.jp",
+- "toyonaka.osaka.jp",
+- "toyono.osaka.jp",
+- "yao.osaka.jp",
+- "ariake.saga.jp",
+- "arita.saga.jp",
+- "fukudomi.saga.jp",
+- "genkai.saga.jp",
+- "hamatama.saga.jp",
+- "hizen.saga.jp",
+- "imari.saga.jp",
+- "kamimine.saga.jp",
+- "kanzaki.saga.jp",
+- "karatsu.saga.jp",
+- "kashima.saga.jp",
+- "kitagata.saga.jp",
+- "kitahata.saga.jp",
+- "kiyama.saga.jp",
+- "kouhoku.saga.jp",
+- "kyuragi.saga.jp",
+- "nishiarita.saga.jp",
+- "ogi.saga.jp",
+- "omachi.saga.jp",
+- "ouchi.saga.jp",
+- "saga.saga.jp",
+- "shiroishi.saga.jp",
+- "taku.saga.jp",
+- "tara.saga.jp",
+- "tosu.saga.jp",
+- "yoshinogari.saga.jp",
+- "arakawa.saitama.jp",
+- "asaka.saitama.jp",
+- "chichibu.saitama.jp",
+- "fujimi.saitama.jp",
+- "fujimino.saitama.jp",
+- "fukaya.saitama.jp",
+- "hanno.saitama.jp",
+- "hanyu.saitama.jp",
+- "hasuda.saitama.jp",
+- "hatogaya.saitama.jp",
+- "hatoyama.saitama.jp",
+- "hidaka.saitama.jp",
+- "higashichichibu.saitama.jp",
+- "higashimatsuyama.saitama.jp",
+- "honjo.saitama.jp",
+- "ina.saitama.jp",
+- "iruma.saitama.jp",
+- "iwatsuki.saitama.jp",
+- "kamiizumi.saitama.jp",
+- "kamikawa.saitama.jp",
+- "kamisato.saitama.jp",
+- "kasukabe.saitama.jp",
+- "kawagoe.saitama.jp",
+- "kawaguchi.saitama.jp",
+- "kawajima.saitama.jp",
+- "kazo.saitama.jp",
+- "kitamoto.saitama.jp",
+- "koshigaya.saitama.jp",
+- "kounosu.saitama.jp",
+- "kuki.saitama.jp",
+- "kumagaya.saitama.jp",
+- "matsubushi.saitama.jp",
+- "minano.saitama.jp",
+- "misato.saitama.jp",
+- "miyashiro.saitama.jp",
+- "miyoshi.saitama.jp",
+- "moroyama.saitama.jp",
+- "nagatoro.saitama.jp",
+- "namegawa.saitama.jp",
+- "niiza.saitama.jp",
+- "ogano.saitama.jp",
+- "ogawa.saitama.jp",
+- "ogose.saitama.jp",
+- "okegawa.saitama.jp",
+- "omiya.saitama.jp",
+- "otaki.saitama.jp",
+- "ranzan.saitama.jp",
+- "ryokami.saitama.jp",
+- "saitama.saitama.jp",
+- "sakado.saitama.jp",
+- "satte.saitama.jp",
+- "sayama.saitama.jp",
+- "shiki.saitama.jp",
+- "shiraoka.saitama.jp",
+- "soka.saitama.jp",
+- "sugito.saitama.jp",
+- "toda.saitama.jp",
+- "tokigawa.saitama.jp",
+- "tokorozawa.saitama.jp",
+- "tsurugashima.saitama.jp",
+- "urawa.saitama.jp",
+- "warabi.saitama.jp",
+- "yashio.saitama.jp",
+- "yokoze.saitama.jp",
+- "yono.saitama.jp",
+- "yorii.saitama.jp",
+- "yoshida.saitama.jp",
+- "yoshikawa.saitama.jp",
+- "yoshimi.saitama.jp",
+- "aisho.shiga.jp",
+- "gamo.shiga.jp",
+- "higashiomi.shiga.jp",
+- "hikone.shiga.jp",
+- "koka.shiga.jp",
+- "konan.shiga.jp",
+- "kosei.shiga.jp",
+- "koto.shiga.jp",
+- "kusatsu.shiga.jp",
+- "maibara.shiga.jp",
+- "moriyama.shiga.jp",
+- "nagahama.shiga.jp",
+- "nishiazai.shiga.jp",
+- "notogawa.shiga.jp",
+- "omihachiman.shiga.jp",
+- "otsu.shiga.jp",
+- "ritto.shiga.jp",
+- "ryuoh.shiga.jp",
+- "takashima.shiga.jp",
+- "takatsuki.shiga.jp",
+- "torahime.shiga.jp",
+- "toyosato.shiga.jp",
+- "yasu.shiga.jp",
+- "akagi.shimane.jp",
+- "ama.shimane.jp",
+- "gotsu.shimane.jp",
+- "hamada.shimane.jp",
+- "higashiizumo.shimane.jp",
+- "hikawa.shimane.jp",
+- "hikimi.shimane.jp",
+- "izumo.shimane.jp",
+- "kakinoki.shimane.jp",
+- "masuda.shimane.jp",
+- "matsue.shimane.jp",
+- "misato.shimane.jp",
+- "nishinoshima.shimane.jp",
+- "ohda.shimane.jp",
+- "okinoshima.shimane.jp",
+- "okuizumo.shimane.jp",
+- "shimane.shimane.jp",
+- "tamayu.shimane.jp",
+- "tsuwano.shimane.jp",
+- "unnan.shimane.jp",
+- "yakumo.shimane.jp",
+- "yasugi.shimane.jp",
+- "yatsuka.shimane.jp",
+- "arai.shizuoka.jp",
+- "atami.shizuoka.jp",
+- "fuji.shizuoka.jp",
+- "fujieda.shizuoka.jp",
+- "fujikawa.shizuoka.jp",
+- "fujinomiya.shizuoka.jp",
+- "fukuroi.shizuoka.jp",
+- "gotemba.shizuoka.jp",
+- "haibara.shizuoka.jp",
+- "hamamatsu.shizuoka.jp",
+- "higashiizu.shizuoka.jp",
+- "ito.shizuoka.jp",
+- "iwata.shizuoka.jp",
+- "izu.shizuoka.jp",
+- "izunokuni.shizuoka.jp",
+- "kakegawa.shizuoka.jp",
+- "kannami.shizuoka.jp",
+- "kawanehon.shizuoka.jp",
+- "kawazu.shizuoka.jp",
+- "kikugawa.shizuoka.jp",
+- "kosai.shizuoka.jp",
+- "makinohara.shizuoka.jp",
+- "matsuzaki.shizuoka.jp",
+- "minamiizu.shizuoka.jp",
+- "mishima.shizuoka.jp",
+- "morimachi.shizuoka.jp",
+- "nishiizu.shizuoka.jp",
+- "numazu.shizuoka.jp",
+- "omaezaki.shizuoka.jp",
+- "shimada.shizuoka.jp",
+- "shimizu.shizuoka.jp",
+- "shimoda.shizuoka.jp",
+- "shizuoka.shizuoka.jp",
+- "susono.shizuoka.jp",
+- "yaizu.shizuoka.jp",
+- "yoshida.shizuoka.jp",
+- "ashikaga.tochigi.jp",
+- "bato.tochigi.jp",
+- "haga.tochigi.jp",
+- "ichikai.tochigi.jp",
+- "iwafune.tochigi.jp",
+- "kaminokawa.tochigi.jp",
+- "kanuma.tochigi.jp",
+- "karasuyama.tochigi.jp",
+- "kuroiso.tochigi.jp",
+- "mashiko.tochigi.jp",
+- "mibu.tochigi.jp",
+- "moka.tochigi.jp",
+- "motegi.tochigi.jp",
+- "nasu.tochigi.jp",
+- "nasushiobara.tochigi.jp",
+- "nikko.tochigi.jp",
+- "nishikata.tochigi.jp",
+- "nogi.tochigi.jp",
+- "ohira.tochigi.jp",
+- "ohtawara.tochigi.jp",
+- "oyama.tochigi.jp",
+- "sakura.tochigi.jp",
+- "sano.tochigi.jp",
+- "shimotsuke.tochigi.jp",
+- "shioya.tochigi.jp",
+- "takanezawa.tochigi.jp",
+- "tochigi.tochigi.jp",
+- "tsuga.tochigi.jp",
+- "ujiie.tochigi.jp",
+- "utsunomiya.tochigi.jp",
+- "yaita.tochigi.jp",
+- "aizumi.tokushima.jp",
+- "anan.tokushima.jp",
+- "ichiba.tokushima.jp",
+- "itano.tokushima.jp",
+- "kainan.tokushima.jp",
+- "komatsushima.tokushima.jp",
+- "matsushige.tokushima.jp",
+- "mima.tokushima.jp",
+- "minami.tokushima.jp",
+- "miyoshi.tokushima.jp",
+- "mugi.tokushima.jp",
+- "nakagawa.tokushima.jp",
+- "naruto.tokushima.jp",
+- "sanagochi.tokushima.jp",
+- "shishikui.tokushima.jp",
+- "tokushima.tokushima.jp",
+- "wajiki.tokushima.jp",
+- "adachi.tokyo.jp",
+- "akiruno.tokyo.jp",
+- "akishima.tokyo.jp",
+- "aogashima.tokyo.jp",
+- "arakawa.tokyo.jp",
+- "bunkyo.tokyo.jp",
+- "chiyoda.tokyo.jp",
+- "chofu.tokyo.jp",
+- "chuo.tokyo.jp",
+- "edogawa.tokyo.jp",
+- "fuchu.tokyo.jp",
+- "fussa.tokyo.jp",
+- "hachijo.tokyo.jp",
+- "hachioji.tokyo.jp",
+- "hamura.tokyo.jp",
+- "higashikurume.tokyo.jp",
+- "higashimurayama.tokyo.jp",
+- "higashiyamato.tokyo.jp",
+- "hino.tokyo.jp",
+- "hinode.tokyo.jp",
+- "hinohara.tokyo.jp",
+- "inagi.tokyo.jp",
+- "itabashi.tokyo.jp",
+- "katsushika.tokyo.jp",
+- "kita.tokyo.jp",
+- "kiyose.tokyo.jp",
+- "kodaira.tokyo.jp",
+- "koganei.tokyo.jp",
+- "kokubunji.tokyo.jp",
+- "komae.tokyo.jp",
+- "koto.tokyo.jp",
+- "kouzushima.tokyo.jp",
+- "kunitachi.tokyo.jp",
+- "machida.tokyo.jp",
+- "meguro.tokyo.jp",
+- "minato.tokyo.jp",
+- "mitaka.tokyo.jp",
+- "mizuho.tokyo.jp",
+- "musashimurayama.tokyo.jp",
+- "musashino.tokyo.jp",
+- "nakano.tokyo.jp",
+- "nerima.tokyo.jp",
+- "ogasawara.tokyo.jp",
+- "okutama.tokyo.jp",
+- "ome.tokyo.jp",
+- "oshima.tokyo.jp",
+- "ota.tokyo.jp",
+- "setagaya.tokyo.jp",
+- "shibuya.tokyo.jp",
+- "shinagawa.tokyo.jp",
+- "shinjuku.tokyo.jp",
+- "suginami.tokyo.jp",
+- "sumida.tokyo.jp",
+- "tachikawa.tokyo.jp",
+- "taito.tokyo.jp",
+- "tama.tokyo.jp",
+- "toshima.tokyo.jp",
+- "chizu.tottori.jp",
+- "hino.tottori.jp",
+- "kawahara.tottori.jp",
+- "koge.tottori.jp",
+- "kotoura.tottori.jp",
+- "misasa.tottori.jp",
+- "nanbu.tottori.jp",
+- "nichinan.tottori.jp",
+- "sakaiminato.tottori.jp",
+- "tottori.tottori.jp",
+- "wakasa.tottori.jp",
+- "yazu.tottori.jp",
+- "yonago.tottori.jp",
+- "asahi.toyama.jp",
+- "fuchu.toyama.jp",
+- "fukumitsu.toyama.jp",
+- "funahashi.toyama.jp",
+- "himi.toyama.jp",
+- "imizu.toyama.jp",
+- "inami.toyama.jp",
+- "johana.toyama.jp",
+- "kamiichi.toyama.jp",
+- "kurobe.toyama.jp",
+- "nakaniikawa.toyama.jp",
+- "namerikawa.toyama.jp",
+- "nanto.toyama.jp",
+- "nyuzen.toyama.jp",
+- "oyabe.toyama.jp",
+- "taira.toyama.jp",
+- "takaoka.toyama.jp",
+- "tateyama.toyama.jp",
+- "toga.toyama.jp",
+- "tonami.toyama.jp",
+- "toyama.toyama.jp",
+- "unazuki.toyama.jp",
+- "uozu.toyama.jp",
+- "yamada.toyama.jp",
+- "arida.wakayama.jp",
+- "aridagawa.wakayama.jp",
+- "gobo.wakayama.jp",
+- "hashimoto.wakayama.jp",
+- "hidaka.wakayama.jp",
+- "hirogawa.wakayama.jp",
+- "inami.wakayama.jp",
+- "iwade.wakayama.jp",
+- "kainan.wakayama.jp",
+- "kamitonda.wakayama.jp",
+- "katsuragi.wakayama.jp",
+- "kimino.wakayama.jp",
+- "kinokawa.wakayama.jp",
+- "kitayama.wakayama.jp",
+- "koya.wakayama.jp",
+- "koza.wakayama.jp",
+- "kozagawa.wakayama.jp",
+- "kudoyama.wakayama.jp",
+- "kushimoto.wakayama.jp",
+- "mihama.wakayama.jp",
+- "misato.wakayama.jp",
+- "nachikatsuura.wakayama.jp",
+- "shingu.wakayama.jp",
+- "shirahama.wakayama.jp",
+- "taiji.wakayama.jp",
+- "tanabe.wakayama.jp",
+- "wakayama.wakayama.jp",
+- "yuasa.wakayama.jp",
+- "yura.wakayama.jp",
+- "asahi.yamagata.jp",
+- "funagata.yamagata.jp",
+- "higashine.yamagata.jp",
+- "iide.yamagata.jp",
+- "kahoku.yamagata.jp",
+- "kaminoyama.yamagata.jp",
+- "kaneyama.yamagata.jp",
+- "kawanishi.yamagata.jp",
+- "mamurogawa.yamagata.jp",
+- "mikawa.yamagata.jp",
+- "murayama.yamagata.jp",
+- "nagai.yamagata.jp",
+- "nakayama.yamagata.jp",
+- "nanyo.yamagata.jp",
+- "nishikawa.yamagata.jp",
+- "obanazawa.yamagata.jp",
+- "oe.yamagata.jp",
+- "oguni.yamagata.jp",
+- "ohkura.yamagata.jp",
+- "oishida.yamagata.jp",
+- "sagae.yamagata.jp",
+- "sakata.yamagata.jp",
+- "sakegawa.yamagata.jp",
+- "shinjo.yamagata.jp",
+- "shirataka.yamagata.jp",
+- "shonai.yamagata.jp",
+- "takahata.yamagata.jp",
+- "tendo.yamagata.jp",
+- "tozawa.yamagata.jp",
+- "tsuruoka.yamagata.jp",
+- "yamagata.yamagata.jp",
+- "yamanobe.yamagata.jp",
+- "yonezawa.yamagata.jp",
+- "yuza.yamagata.jp",
+- "abu.yamaguchi.jp",
+- "hagi.yamaguchi.jp",
+- "hikari.yamaguchi.jp",
+- "hofu.yamaguchi.jp",
+- "iwakuni.yamaguchi.jp",
+- "kudamatsu.yamaguchi.jp",
+- "mitou.yamaguchi.jp",
+- "nagato.yamaguchi.jp",
+- "oshima.yamaguchi.jp",
+- "shimonoseki.yamaguchi.jp",
+- "shunan.yamaguchi.jp",
+- "tabuse.yamaguchi.jp",
+- "tokuyama.yamaguchi.jp",
+- "toyota.yamaguchi.jp",
+- "ube.yamaguchi.jp",
+- "yuu.yamaguchi.jp",
+- "chuo.yamanashi.jp",
+- "doshi.yamanashi.jp",
+- "fuefuki.yamanashi.jp",
+- "fujikawa.yamanashi.jp",
+- "fujikawaguchiko.yamanashi.jp",
+- "fujiyoshida.yamanashi.jp",
+- "hayakawa.yamanashi.jp",
+- "hokuto.yamanashi.jp",
+- "ichikawamisato.yamanashi.jp",
+- "kai.yamanashi.jp",
+- "kofu.yamanashi.jp",
+- "koshu.yamanashi.jp",
+- "kosuge.yamanashi.jp",
+- "minami-alps.yamanashi.jp",
+- "minobu.yamanashi.jp",
+- "nakamichi.yamanashi.jp",
+- "nanbu.yamanashi.jp",
+- "narusawa.yamanashi.jp",
+- "nirasaki.yamanashi.jp",
+- "nishikatsura.yamanashi.jp",
+- "oshino.yamanashi.jp",
+- "otsuki.yamanashi.jp",
+- "showa.yamanashi.jp",
+- "tabayama.yamanashi.jp",
+- "tsuru.yamanashi.jp",
+- "uenohara.yamanashi.jp",
+- "yamanakako.yamanashi.jp",
+- "yamanashi.yamanashi.jp",
+- "*.ke",
+- "kg",
+- "org.kg",
+- "net.kg",
+- "com.kg",
+- "edu.kg",
+- "gov.kg",
+- "mil.kg",
+- "*.kh",
+- "ki",
+- "edu.ki",
+- "biz.ki",
+- "net.ki",
+- "org.ki",
+- "gov.ki",
+- "info.ki",
+- "com.ki",
+- "km",
+- "org.km",
+- "nom.km",
+- "gov.km",
+- "prd.km",
+- "tm.km",
+- "edu.km",
+- "mil.km",
+- "ass.km",
+- "com.km",
+- "coop.km",
+- "asso.km",
+- "presse.km",
+- "medecin.km",
+- "notaires.km",
+- "pharmaciens.km",
+- "veterinaire.km",
+- "gouv.km",
+- "kn",
+- "net.kn",
+- "org.kn",
+- "edu.kn",
+- "gov.kn",
+- "com.kp",
+- "edu.kp",
+- "gov.kp",
+- "org.kp",
+- "rep.kp",
+- "tra.kp",
+- "kr",
+- "ac.kr",
+- "co.kr",
+- "es.kr",
+- "go.kr",
+- "hs.kr",
+- "kg.kr",
+- "mil.kr",
+- "ms.kr",
+- "ne.kr",
+- "or.kr",
+- "pe.kr",
+- "re.kr",
+- "sc.kr",
+- "busan.kr",
+- "chungbuk.kr",
+- "chungnam.kr",
+- "daegu.kr",
+- "daejeon.kr",
+- "gangwon.kr",
+- "gwangju.kr",
+- "gyeongbuk.kr",
+- "gyeonggi.kr",
+- "gyeongnam.kr",
+- "incheon.kr",
+- "jeju.kr",
+- "jeonbuk.kr",
+- "jeonnam.kr",
+- "seoul.kr",
+- "ulsan.kr",
+- "*.kw",
+- "ky",
+- "edu.ky",
+- "gov.ky",
+- "com.ky",
+- "org.ky",
+- "net.ky",
+- "kz",
+- "org.kz",
+- "edu.kz",
+- "net.kz",
+- "gov.kz",
+- "mil.kz",
+- "com.kz",
+- "la",
+- "int.la",
+- "net.la",
+- "info.la",
+- "edu.la",
+- "gov.la",
+- "per.la",
+- "com.la",
+- "org.la",
+- "com.lb",
+- "edu.lb",
+- "gov.lb",
+- "net.lb",
+- "org.lb",
+- "lc",
+- "com.lc",
+- "net.lc",
+- "co.lc",
+- "org.lc",
+- "edu.lc",
+- "gov.lc",
+- "li",
+- "lk",
+- "gov.lk",
+- "sch.lk",
+- "net.lk",
+- "int.lk",
+- "com.lk",
+- "org.lk",
+- "edu.lk",
+- "ngo.lk",
+- "soc.lk",
+- "web.lk",
+- "ltd.lk",
+- "assn.lk",
+- "grp.lk",
+- "hotel.lk",
+- "com.lr",
+- "edu.lr",
+- "gov.lr",
+- "org.lr",
+- "net.lr",
+- "ls",
+- "co.ls",
+- "org.ls",
+- "lt",
+- "gov.lt",
+- "lu",
+- "lv",
+- "com.lv",
+- "edu.lv",
+- "gov.lv",
+- "org.lv",
+- "mil.lv",
+- "id.lv",
+- "net.lv",
+- "asn.lv",
+- "conf.lv",
+- "ly",
+- "com.ly",
+- "net.ly",
+- "gov.ly",
+- "plc.ly",
+- "edu.ly",
+- "sch.ly",
+- "med.ly",
+- "org.ly",
+- "id.ly",
+- "ma",
+- "co.ma",
+- "net.ma",
+- "gov.ma",
+- "org.ma",
+- "ac.ma",
+- "press.ma",
+- "mc",
+- "tm.mc",
+- "asso.mc",
+- "md",
+- "me",
+- "co.me",
+- "net.me",
+- "org.me",
+- "edu.me",
+- "ac.me",
+- "gov.me",
+- "its.me",
+- "priv.me",
+- "mg",
+- "org.mg",
+- "nom.mg",
+- "gov.mg",
+- "prd.mg",
+- "tm.mg",
+- "edu.mg",
+- "mil.mg",
+- "com.mg",
+- "mh",
+- "mil",
+- "mk",
+- "com.mk",
+- "org.mk",
+- "net.mk",
+- "edu.mk",
+- "gov.mk",
+- "inf.mk",
+- "name.mk",
+- "ml",
+- "com.ml",
+- "edu.ml",
+- "gouv.ml",
+- "gov.ml",
+- "net.ml",
+- "org.ml",
+- "presse.ml",
+- "*.mm",
+- "mn",
+- "gov.mn",
+- "edu.mn",
+- "org.mn",
+- "mo",
+- "com.mo",
+- "net.mo",
+- "org.mo",
+- "edu.mo",
+- "gov.mo",
+- "mobi",
+- "mp",
+- "mq",
+- "mr",
+- "gov.mr",
+- "ms",
+- "*.mt",
+- "mu",
+- "com.mu",
+- "net.mu",
+- "org.mu",
+- "gov.mu",
+- "ac.mu",
+- "co.mu",
+- "or.mu",
+- "museum",
+- "academy.museum",
+- "agriculture.museum",
+- "air.museum",
+- "airguard.museum",
+- "alabama.museum",
+- "alaska.museum",
+- "amber.museum",
+- "ambulance.museum",
+- "american.museum",
+- "americana.museum",
+- "americanantiques.museum",
+- "americanart.museum",
+- "amsterdam.museum",
+- "and.museum",
+- "annefrank.museum",
+- "anthro.museum",
+- "anthropology.museum",
+- "antiques.museum",
+- "aquarium.museum",
+- "arboretum.museum",
+- "archaeological.museum",
+- "archaeology.museum",
+- "architecture.museum",
+- "art.museum",
+- "artanddesign.museum",
+- "artcenter.museum",
+- "artdeco.museum",
+- "arteducation.museum",
+- "artgallery.museum",
+- "arts.museum",
+- "artsandcrafts.museum",
+- "asmatart.museum",
+- "assassination.museum",
+- "assisi.museum",
+- "association.museum",
+- "astronomy.museum",
+- "atlanta.museum",
+- "austin.museum",
+- "australia.museum",
+- "automotive.museum",
+- "aviation.museum",
+- "axis.museum",
+- "badajoz.museum",
+- "baghdad.museum",
+- "bahn.museum",
+- "bale.museum",
+- "baltimore.museum",
+- "barcelona.museum",
+- "baseball.museum",
+- "basel.museum",
+- "baths.museum",
+- "bauern.museum",
+- "beauxarts.museum",
+- "beeldengeluid.museum",
+- "bellevue.museum",
+- "bergbau.museum",
+- "berkeley.museum",
+- "berlin.museum",
+- "bern.museum",
+- "bible.museum",
+- "bilbao.museum",
+- "bill.museum",
+- "birdart.museum",
+- "birthplace.museum",
+- "bonn.museum",
+- "boston.museum",
+- "botanical.museum",
+- "botanicalgarden.museum",
+- "botanicgarden.museum",
+- "botany.museum",
+- "brandywinevalley.museum",
+- "brasil.museum",
+- "bristol.museum",
+- "british.museum",
+- "britishcolumbia.museum",
+- "broadcast.museum",
+- "brunel.museum",
+- "brussel.museum",
+- "brussels.museum",
+- "bruxelles.museum",
+- "building.museum",
+- "burghof.museum",
+- "bus.museum",
+- "bushey.museum",
+- "cadaques.museum",
+- "california.museum",
+- "cambridge.museum",
+- "can.museum",
+- "canada.museum",
+- "capebreton.museum",
+- "carrier.museum",
+- "cartoonart.museum",
+- "casadelamoneda.museum",
+- "castle.museum",
+- "castres.museum",
+- "celtic.museum",
+- "center.museum",
+- "chattanooga.museum",
+- "cheltenham.museum",
+- "chesapeakebay.museum",
+- "chicago.museum",
+- "children.museum",
+- "childrens.museum",
+- "childrensgarden.museum",
+- "chiropractic.museum",
+- "chocolate.museum",
+- "christiansburg.museum",
+- "cincinnati.museum",
+- "cinema.museum",
+- "circus.museum",
+- "civilisation.museum",
+- "civilization.museum",
+- "civilwar.museum",
+- "clinton.museum",
+- "clock.museum",
+- "coal.museum",
+- "coastaldefence.museum",
+- "cody.museum",
+- "coldwar.museum",
+- "collection.museum",
+- "colonialwilliamsburg.museum",
+- "coloradoplateau.museum",
+- "columbia.museum",
+- "columbus.museum",
+- "communication.museum",
+- "communications.museum",
+- "community.museum",
+- "computer.museum",
+- "computerhistory.museum",
+- "xn--comunicaes-v6a2o.museum",
+- "contemporary.museum",
+- "contemporaryart.museum",
+- "convent.museum",
+- "copenhagen.museum",
+- "corporation.museum",
+- "xn--correios-e-telecomunicaes-ghc29a.museum",
+- "corvette.museum",
+- "costume.museum",
+- "countryestate.museum",
+- "county.museum",
+- "crafts.museum",
+- "cranbrook.museum",
+- "creation.museum",
+- "cultural.museum",
+- "culturalcenter.museum",
+- "culture.museum",
+- "cyber.museum",
+- "cymru.museum",
+- "dali.museum",
+- "dallas.museum",
+- "database.museum",
+- "ddr.museum",
+- "decorativearts.museum",
+- "delaware.museum",
+- "delmenhorst.museum",
+- "denmark.museum",
+- "depot.museum",
+- "design.museum",
+- "detroit.museum",
+- "dinosaur.museum",
+- "discovery.museum",
+- "dolls.museum",
+- "donostia.museum",
+- "durham.museum",
+- "eastafrica.museum",
+- "eastcoast.museum",
+- "education.museum",
+- "educational.museum",
+- "egyptian.museum",
+- "eisenbahn.museum",
+- "elburg.museum",
+- "elvendrell.museum",
+- "embroidery.museum",
+- "encyclopedic.museum",
+- "england.museum",
+- "entomology.museum",
+- "environment.museum",
+- "environmentalconservation.museum",
+- "epilepsy.museum",
+- "essex.museum",
+- "estate.museum",
+- "ethnology.museum",
+- "exeter.museum",
+- "exhibition.museum",
+- "family.museum",
+- "farm.museum",
+- "farmequipment.museum",
+- "farmers.museum",
+- "farmstead.museum",
+- "field.museum",
+- "figueres.museum",
+- "filatelia.museum",
+- "film.museum",
+- "fineart.museum",
+- "finearts.museum",
+- "finland.museum",
+- "flanders.museum",
+- "florida.museum",
+- "force.museum",
+- "fortmissoula.museum",
+- "fortworth.museum",
+- "foundation.museum",
+- "francaise.museum",
+- "frankfurt.museum",
+- "franziskaner.museum",
+- "freemasonry.museum",
+- "freiburg.museum",
+- "fribourg.museum",
+- "frog.museum",
+- "fundacio.museum",
+- "furniture.museum",
+- "gallery.museum",
+- "garden.museum",
+- "gateway.museum",
+- "geelvinck.museum",
+- "gemological.museum",
+- "geology.museum",
+- "georgia.museum",
+- "giessen.museum",
+- "glas.museum",
+- "glass.museum",
+- "gorge.museum",
+- "grandrapids.museum",
+- "graz.museum",
+- "guernsey.museum",
+- "halloffame.museum",
+- "hamburg.museum",
+- "handson.museum",
+- "harvestcelebration.museum",
+- "hawaii.museum",
+- "health.museum",
+- "heimatunduhren.museum",
+- "hellas.museum",
+- "helsinki.museum",
+- "hembygdsforbund.museum",
+- "heritage.museum",
+- "histoire.museum",
+- "historical.museum",
+- "historicalsociety.museum",
+- "historichouses.museum",
+- "historisch.museum",
+- "historisches.museum",
+- "history.museum",
+- "historyofscience.museum",
+- "horology.museum",
+- "house.museum",
+- "humanities.museum",
+- "illustration.museum",
+- "imageandsound.museum",
+- "indian.museum",
+- "indiana.museum",
+- "indianapolis.museum",
+- "indianmarket.museum",
+- "intelligence.museum",
+- "interactive.museum",
+- "iraq.museum",
+- "iron.museum",
+- "isleofman.museum",
+- "jamison.museum",
+- "jefferson.museum",
+- "jerusalem.museum",
+- "jewelry.museum",
+- "jewish.museum",
+- "jewishart.museum",
+- "jfk.museum",
+- "journalism.museum",
+- "judaica.museum",
+- "judygarland.museum",
+- "juedisches.museum",
+- "juif.museum",
+- "karate.museum",
+- "karikatur.museum",
+- "kids.museum",
+- "koebenhavn.museum",
+- "koeln.museum",
+- "kunst.museum",
+- "kunstsammlung.museum",
+- "kunstunddesign.museum",
+- "labor.museum",
+- "labour.museum",
+- "lajolla.museum",
+- "lancashire.museum",
+- "landes.museum",
+- "lans.museum",
+- "xn--lns-qla.museum",
+- "larsson.museum",
+- "lewismiller.museum",
+- "lincoln.museum",
+- "linz.museum",
+- "living.museum",
+- "livinghistory.museum",
+- "localhistory.museum",
+- "london.museum",
+- "losangeles.museum",
+- "louvre.museum",
+- "loyalist.museum",
+- "lucerne.museum",
+- "luxembourg.museum",
+- "luzern.museum",
+- "mad.museum",
+- "madrid.museum",
+- "mallorca.museum",
+- "manchester.museum",
+- "mansion.museum",
+- "mansions.museum",
+- "manx.museum",
+- "marburg.museum",
+- "maritime.museum",
+- "maritimo.museum",
+- "maryland.museum",
+- "marylhurst.museum",
+- "media.museum",
+- "medical.museum",
+- "medizinhistorisches.museum",
+- "meeres.museum",
+- "memorial.museum",
+- "mesaverde.museum",
+- "michigan.museum",
+- "midatlantic.museum",
+- "military.museum",
+- "mill.museum",
+- "miners.museum",
+- "mining.museum",
+- "minnesota.museum",
+- "missile.museum",
+- "missoula.museum",
+- "modern.museum",
+- "moma.museum",
+- "money.museum",
+- "monmouth.museum",
+- "monticello.museum",
+- "montreal.museum",
+- "moscow.museum",
+- "motorcycle.museum",
+- "muenchen.museum",
+- "muenster.museum",
+- "mulhouse.museum",
+- "muncie.museum",
+- "museet.museum",
+- "museumcenter.museum",
+- "museumvereniging.museum",
+- "music.museum",
+- "national.museum",
+- "nationalfirearms.museum",
+- "nationalheritage.museum",
+- "nativeamerican.museum",
+- "naturalhistory.museum",
+- "naturalhistorymuseum.museum",
+- "naturalsciences.museum",
+- "nature.museum",
+- "naturhistorisches.museum",
+- "natuurwetenschappen.museum",
+- "naumburg.museum",
+- "naval.museum",
+- "nebraska.museum",
+- "neues.museum",
+- "newhampshire.museum",
+- "newjersey.museum",
+- "newmexico.museum",
+- "newport.museum",
+- "newspaper.museum",
+- "newyork.museum",
+- "niepce.museum",
+- "norfolk.museum",
+- "north.museum",
+- "nrw.museum",
+- "nuernberg.museum",
+- "nuremberg.museum",
+- "nyc.museum",
+- "nyny.museum",
+- "oceanographic.museum",
+- "oceanographique.museum",
+- "omaha.museum",
+- "online.museum",
+- "ontario.museum",
+- "openair.museum",
+- "oregon.museum",
+- "oregontrail.museum",
+- "otago.museum",
+- "oxford.museum",
+- "pacific.museum",
+- "paderborn.museum",
+- "palace.museum",
+- "paleo.museum",
+- "palmsprings.museum",
+- "panama.museum",
+- "paris.museum",
+- "pasadena.museum",
+- "pharmacy.museum",
+- "philadelphia.museum",
+- "philadelphiaarea.museum",
+- "philately.museum",
+- "phoenix.museum",
+- "photography.museum",
+- "pilots.museum",
+- "pittsburgh.museum",
+- "planetarium.museum",
+- "plantation.museum",
+- "plants.museum",
+- "plaza.museum",
+- "portal.museum",
+- "portland.museum",
+- "portlligat.museum",
+- "posts-and-telecommunications.museum",
+- "preservation.museum",
+- "presidio.museum",
+- "press.museum",
+- "project.museum",
+- "public.museum",
+- "pubol.museum",
+- "quebec.museum",
+- "railroad.museum",
+- "railway.museum",
+- "research.museum",
+- "resistance.museum",
+- "riodejaneiro.museum",
+- "rochester.museum",
+- "rockart.museum",
+- "roma.museum",
+- "russia.museum",
+- "saintlouis.museum",
+- "salem.museum",
+- "salvadordali.museum",
+- "salzburg.museum",
+- "sandiego.museum",
+- "sanfrancisco.museum",
+- "santabarbara.museum",
+- "santacruz.museum",
+- "santafe.museum",
+- "saskatchewan.museum",
+- "satx.museum",
+- "savannahga.museum",
+- "schlesisches.museum",
+- "schoenbrunn.museum",
+- "schokoladen.museum",
+- "school.museum",
+- "schweiz.museum",
+- "science.museum",
+- "scienceandhistory.museum",
+- "scienceandindustry.museum",
+- "sciencecenter.museum",
+- "sciencecenters.museum",
+- "science-fiction.museum",
+- "sciencehistory.museum",
+- "sciences.museum",
+- "sciencesnaturelles.museum",
+- "scotland.museum",
+- "seaport.museum",
+- "settlement.museum",
+- "settlers.museum",
+- "shell.museum",
+- "sherbrooke.museum",
+- "sibenik.museum",
+- "silk.museum",
+- "ski.museum",
+- "skole.museum",
+- "society.museum",
+- "sologne.museum",
+- "soundandvision.museum",
+- "southcarolina.museum",
+- "southwest.museum",
+- "space.museum",
+- "spy.museum",
+- "square.museum",
+- "stadt.museum",
+- "stalbans.museum",
+- "starnberg.museum",
+- "state.museum",
+- "stateofdelaware.museum",
+- "station.museum",
+- "steam.museum",
+- "steiermark.museum",
+- "stjohn.museum",
+- "stockholm.museum",
+- "stpetersburg.museum",
+- "stuttgart.museum",
+- "suisse.museum",
+- "surgeonshall.museum",
+- "surrey.museum",
+- "svizzera.museum",
+- "sweden.museum",
+- "sydney.museum",
+- "tank.museum",
+- "tcm.museum",
+- "technology.museum",
+- "telekommunikation.museum",
+- "television.museum",
+- "texas.museum",
+- "textile.museum",
+- "theater.museum",
+- "time.museum",
+- "timekeeping.museum",
+- "topology.museum",
+- "torino.museum",
+- "touch.museum",
+- "town.museum",
+- "transport.museum",
+- "tree.museum",
+- "trolley.museum",
+- "trust.museum",
+- "trustee.museum",
+- "uhren.museum",
+- "ulm.museum",
+- "undersea.museum",
+- "university.museum",
+- "usa.museum",
+- "usantiques.museum",
+- "usarts.museum",
+- "uscountryestate.museum",
+- "usculture.museum",
+- "usdecorativearts.museum",
+- "usgarden.museum",
+- "ushistory.museum",
+- "ushuaia.museum",
+- "uslivinghistory.museum",
+- "utah.museum",
+- "uvic.museum",
+- "valley.museum",
+- "vantaa.museum",
+- "versailles.museum",
+- "viking.museum",
+- "village.museum",
+- "virginia.museum",
+- "virtual.museum",
+- "virtuel.museum",
+- "vlaanderen.museum",
+- "volkenkunde.museum",
+- "wales.museum",
+- "wallonie.museum",
+- "war.museum",
+- "washingtondc.museum",
+- "watchandclock.museum",
+- "watch-and-clock.museum",
+- "western.museum",
+- "westfalen.museum",
+- "whaling.museum",
+- "wildlife.museum",
+- "williamsburg.museum",
+- "windmill.museum",
+- "workshop.museum",
+- "york.museum",
+- "yorkshire.museum",
+- "yosemite.museum",
+- "youth.museum",
+- "zoological.museum",
+- "zoology.museum",
+- "xn--9dbhblg6di.museum",
+- "xn--h1aegh.museum",
+- "mv",
+- "aero.mv",
+- "biz.mv",
+- "com.mv",
+- "coop.mv",
+- "edu.mv",
+- "gov.mv",
+- "info.mv",
+- "int.mv",
+- "mil.mv",
+- "museum.mv",
+- "name.mv",
+- "net.mv",
+- "org.mv",
+- "pro.mv",
+- "mw",
+- "ac.mw",
+- "biz.mw",
+- "co.mw",
+- "com.mw",
+- "coop.mw",
+- "edu.mw",
+- "gov.mw",
+- "int.mw",
+- "museum.mw",
+- "net.mw",
+- "org.mw",
+- "mx",
+- "com.mx",
+- "org.mx",
+- "gob.mx",
+- "edu.mx",
+- "net.mx",
+- "my",
+- "com.my",
+- "net.my",
+- "org.my",
+- "gov.my",
+- "edu.my",
+- "mil.my",
+- "name.my",
+- "*.mz",
+- "!teledata.mz",
+- "na",
+- "info.na",
+- "pro.na",
+- "name.na",
+- "school.na",
+- "or.na",
+- "dr.na",
+- "us.na",
+- "mx.na",
+- "ca.na",
+- "in.na",
+- "cc.na",
+- "tv.na",
+- "ws.na",
+- "mobi.na",
+- "co.na",
+- "com.na",
+- "org.na",
+- "name",
+- "nc",
+- "asso.nc",
+- "ne",
+- "net",
+- "nf",
+- "com.nf",
+- "net.nf",
+- "per.nf",
+- "rec.nf",
+- "web.nf",
+- "arts.nf",
+- "firm.nf",
+- "info.nf",
+- "other.nf",
+- "store.nf",
+- "ac.ng",
+- "com.ng",
+- "edu.ng",
+- "gov.ng",
+- "net.ng",
+- "org.ng",
+- "*.ni",
+- "nl",
+- "bv.nl",
+- "no",
+- "fhs.no",
+- "vgs.no",
+- "fylkesbibl.no",
+- "folkebibl.no",
+- "museum.no",
+- "idrett.no",
+- "priv.no",
+- "mil.no",
+- "stat.no",
+- "dep.no",
+- "kommune.no",
+- "herad.no",
+- "aa.no",
+- "ah.no",
+- "bu.no",
+- "fm.no",
+- "hl.no",
+- "hm.no",
+- "jan-mayen.no",
+- "mr.no",
+- "nl.no",
+- "nt.no",
+- "of.no",
+- "ol.no",
+- "oslo.no",
+- "rl.no",
+- "sf.no",
+- "st.no",
+- "svalbard.no",
+- "tm.no",
+- "tr.no",
+- "va.no",
+- "vf.no",
+- "gs.aa.no",
+- "gs.ah.no",
+- "gs.bu.no",
+- "gs.fm.no",
+- "gs.hl.no",
+- "gs.hm.no",
+- "gs.jan-mayen.no",
+- "gs.mr.no",
+- "gs.nl.no",
+- "gs.nt.no",
+- "gs.of.no",
+- "gs.ol.no",
+- "gs.oslo.no",
+- "gs.rl.no",
+- "gs.sf.no",
+- "gs.st.no",
+- "gs.svalbard.no",
+- "gs.tm.no",
+- "gs.tr.no",
+- "gs.va.no",
+- "gs.vf.no",
+- "akrehamn.no",
+- "xn--krehamn-dxa.no",
+- "algard.no",
+- "xn--lgrd-poac.no",
+- "arna.no",
+- "brumunddal.no",
+- "bryne.no",
+- "bronnoysund.no",
+- "xn--brnnysund-m8ac.no",
+- "drobak.no",
+- "xn--drbak-wua.no",
+- "egersund.no",
+- "fetsund.no",
+- "floro.no",
+- "xn--flor-jra.no",
+- "fredrikstad.no",
+- "hokksund.no",
+- "honefoss.no",
+- "xn--hnefoss-q1a.no",
+- "jessheim.no",
+- "jorpeland.no",
+- "xn--jrpeland-54a.no",
+- "kirkenes.no",
+- "kopervik.no",
+- "krokstadelva.no",
+- "langevag.no",
+- "xn--langevg-jxa.no",
+- "leirvik.no",
+- "mjondalen.no",
+- "xn--mjndalen-64a.no",
+- "mo-i-rana.no",
+- "mosjoen.no",
+- "xn--mosjen-eya.no",
+- "nesoddtangen.no",
+- "orkanger.no",
+- "osoyro.no",
+- "xn--osyro-wua.no",
+- "raholt.no",
+- "xn--rholt-mra.no",
+- "sandnessjoen.no",
+- "xn--sandnessjen-ogb.no",
+- "skedsmokorset.no",
+- "slattum.no",
+- "spjelkavik.no",
+- "stathelle.no",
+- "stavern.no",
+- "stjordalshalsen.no",
+- "xn--stjrdalshalsen-sqb.no",
+- "tananger.no",
+- "tranby.no",
+- "vossevangen.no",
+- "afjord.no",
+- "xn--fjord-lra.no",
+- "agdenes.no",
+- "al.no",
+- "xn--l-1fa.no",
+- "alesund.no",
+- "xn--lesund-hua.no",
+- "alstahaug.no",
+- "alta.no",
+- "xn--lt-liac.no",
+- "alaheadju.no",
+- "xn--laheadju-7ya.no",
+- "alvdal.no",
+- "amli.no",
+- "xn--mli-tla.no",
+- "amot.no",
+- "xn--mot-tla.no",
+- "andebu.no",
+- "andoy.no",
+- "xn--andy-ira.no",
+- "andasuolo.no",
+- "ardal.no",
+- "xn--rdal-poa.no",
+- "aremark.no",
+- "arendal.no",
+- "xn--s-1fa.no",
+- "aseral.no",
+- "xn--seral-lra.no",
+- "asker.no",
+- "askim.no",
+- "askvoll.no",
+- "askoy.no",
+- "xn--asky-ira.no",
+- "asnes.no",
+- "xn--snes-poa.no",
+- "audnedaln.no",
+- "aukra.no",
+- "aure.no",
+- "aurland.no",
+- "aurskog-holand.no",
+- "xn--aurskog-hland-jnb.no",
+- "austevoll.no",
+- "austrheim.no",
+- "averoy.no",
+- "xn--avery-yua.no",
+- "balestrand.no",
+- "ballangen.no",
+- "balat.no",
+- "xn--blt-elab.no",
+- "balsfjord.no",
+- "bahccavuotna.no",
+- "xn--bhccavuotna-k7a.no",
+- "bamble.no",
+- "bardu.no",
+- "beardu.no",
+- "beiarn.no",
+- "bajddar.no",
+- "xn--bjddar-pta.no",
+- "baidar.no",
+- "xn--bidr-5nac.no",
+- "berg.no",
+- "bergen.no",
+- "berlevag.no",
+- "xn--berlevg-jxa.no",
+- "bearalvahki.no",
+- "xn--bearalvhki-y4a.no",
+- "bindal.no",
+- "birkenes.no",
+- "bjarkoy.no",
+- "xn--bjarky-fya.no",
+- "bjerkreim.no",
+- "bjugn.no",
+- "bodo.no",
+- "xn--bod-2na.no",
+- "badaddja.no",
+- "xn--bdddj-mrabd.no",
+- "budejju.no",
+- "bokn.no",
+- "bremanger.no",
+- "bronnoy.no",
+- "xn--brnny-wuac.no",
+- "bygland.no",
+- "bykle.no",
+- "barum.no",
+- "xn--brum-voa.no",
+- "bo.telemark.no",
+- "xn--b-5ga.telemark.no",
+- "bo.nordland.no",
+- "xn--b-5ga.nordland.no",
+- "bievat.no",
+- "xn--bievt-0qa.no",
+- "bomlo.no",
+- "xn--bmlo-gra.no",
+- "batsfjord.no",
+- "xn--btsfjord-9za.no",
+- "bahcavuotna.no",
+- "xn--bhcavuotna-s4a.no",
+- "dovre.no",
+- "drammen.no",
+- "drangedal.no",
+- "dyroy.no",
+- "xn--dyry-ira.no",
+- "donna.no",
+- "xn--dnna-gra.no",
+- "eid.no",
+- "eidfjord.no",
+- "eidsberg.no",
+- "eidskog.no",
+- "eidsvoll.no",
+- "eigersund.no",
+- "elverum.no",
+- "enebakk.no",
+- "engerdal.no",
+- "etne.no",
+- "etnedal.no",
+- "evenes.no",
+- "evenassi.no",
+- "xn--eveni-0qa01ga.no",
+- "evje-og-hornnes.no",
+- "farsund.no",
+- "fauske.no",
+- "fuossko.no",
+- "fuoisku.no",
+- "fedje.no",
+- "fet.no",
+- "finnoy.no",
+- "xn--finny-yua.no",
+- "fitjar.no",
+- "fjaler.no",
+- "fjell.no",
+- "flakstad.no",
+- "flatanger.no",
+- "flekkefjord.no",
+- "flesberg.no",
+- "flora.no",
+- "fla.no",
+- "xn--fl-zia.no",
+- "folldal.no",
+- "forsand.no",
+- "fosnes.no",
+- "frei.no",
+- "frogn.no",
+- "froland.no",
+- "frosta.no",
+- "frana.no",
+- "xn--frna-woa.no",
+- "froya.no",
+- "xn--frya-hra.no",
+- "fusa.no",
+- "fyresdal.no",
+- "forde.no",
+- "xn--frde-gra.no",
+- "gamvik.no",
+- "gangaviika.no",
+- "xn--ggaviika-8ya47h.no",
+- "gaular.no",
+- "gausdal.no",
+- "gildeskal.no",
+- "xn--gildeskl-g0a.no",
+- "giske.no",
+- "gjemnes.no",
+- "gjerdrum.no",
+- "gjerstad.no",
+- "gjesdal.no",
+- "gjovik.no",
+- "xn--gjvik-wua.no",
+- "gloppen.no",
+- "gol.no",
+- "gran.no",
+- "grane.no",
+- "granvin.no",
+- "gratangen.no",
+- "grimstad.no",
+- "grong.no",
+- "kraanghke.no",
+- "xn--kranghke-b0a.no",
+- "grue.no",
+- "gulen.no",
+- "hadsel.no",
+- "halden.no",
+- "halsa.no",
+- "hamar.no",
+- "hamaroy.no",
+- "habmer.no",
+- "xn--hbmer-xqa.no",
+- "hapmir.no",
+- "xn--hpmir-xqa.no",
+- "hammerfest.no",
+- "hammarfeasta.no",
+- "xn--hmmrfeasta-s4ac.no",
+- "haram.no",
+- "hareid.no",
+- "harstad.no",
+- "hasvik.no",
+- "aknoluokta.no",
+- "xn--koluokta-7ya57h.no",
+- "hattfjelldal.no",
+- "aarborte.no",
+- "haugesund.no",
+- "hemne.no",
+- "hemnes.no",
+- "hemsedal.no",
+- "heroy.more-og-romsdal.no",
+- "xn--hery-ira.xn--mre-og-romsdal-qqb.no",
+- "heroy.nordland.no",
+- "xn--hery-ira.nordland.no",
+- "hitra.no",
+- "hjartdal.no",
+- "hjelmeland.no",
+- "hobol.no",
+- "xn--hobl-ira.no",
+- "hof.no",
+- "hol.no",
+- "hole.no",
+- "holmestrand.no",
+- "holtalen.no",
+- "xn--holtlen-hxa.no",
+- "hornindal.no",
+- "horten.no",
+- "hurdal.no",
+- "hurum.no",
+- "hvaler.no",
+- "hyllestad.no",
+- "hagebostad.no",
+- "xn--hgebostad-g3a.no",
+- "hoyanger.no",
+- "xn--hyanger-q1a.no",
+- "hoylandet.no",
+- "xn--hylandet-54a.no",
+- "ha.no",
+- "xn--h-2fa.no",
+- "ibestad.no",
+- "inderoy.no",
+- "xn--indery-fya.no",
+- "iveland.no",
+- "jevnaker.no",
+- "jondal.no",
+- "jolster.no",
+- "xn--jlster-bya.no",
+- "karasjok.no",
+- "karasjohka.no",
+- "xn--krjohka-hwab49j.no",
+- "karlsoy.no",
+- "galsa.no",
+- "xn--gls-elac.no",
+- "karmoy.no",
+- "xn--karmy-yua.no",
+- "kautokeino.no",
+- "guovdageaidnu.no",
+- "klepp.no",
+- "klabu.no",
+- "xn--klbu-woa.no",
+- "kongsberg.no",
+- "kongsvinger.no",
+- "kragero.no",
+- "xn--krager-gya.no",
+- "kristiansand.no",
+- "kristiansund.no",
+- "krodsherad.no",
+- "xn--krdsherad-m8a.no",
+- "kvalsund.no",
+- "rahkkeravju.no",
+- "xn--rhkkervju-01af.no",
+- "kvam.no",
+- "kvinesdal.no",
+- "kvinnherad.no",
+- "kviteseid.no",
+- "kvitsoy.no",
+- "xn--kvitsy-fya.no",
+- "kvafjord.no",
+- "xn--kvfjord-nxa.no",
+- "giehtavuoatna.no",
+- "kvanangen.no",
+- "xn--kvnangen-k0a.no",
+- "navuotna.no",
+- "xn--nvuotna-hwa.no",
+- "kafjord.no",
+- "xn--kfjord-iua.no",
+- "gaivuotna.no",
+- "xn--givuotna-8ya.no",
+- "larvik.no",
+- "lavangen.no",
+- "lavagis.no",
+- "loabat.no",
+- "xn--loabt-0qa.no",
+- "lebesby.no",
+- "davvesiida.no",
+- "leikanger.no",
+- "leirfjord.no",
+- "leka.no",
+- "leksvik.no",
+- "lenvik.no",
+- "leangaviika.no",
+- "xn--leagaviika-52b.no",
+- "lesja.no",
+- "levanger.no",
+- "lier.no",
+- "lierne.no",
+- "lillehammer.no",
+- "lillesand.no",
+- "lindesnes.no",
+- "lindas.no",
+- "xn--linds-pra.no",
+- "lom.no",
+- "loppa.no",
+- "lahppi.no",
+- "xn--lhppi-xqa.no",
+- "lund.no",
+- "lunner.no",
+- "luroy.no",
+- "xn--lury-ira.no",
+- "luster.no",
+- "lyngdal.no",
+- "lyngen.no",
+- "ivgu.no",
+- "lardal.no",
+- "lerdal.no",
+- "xn--lrdal-sra.no",
+- "lodingen.no",
+- "xn--ldingen-q1a.no",
+- "lorenskog.no",
+- "xn--lrenskog-54a.no",
+- "loten.no",
+- "xn--lten-gra.no",
+- "malvik.no",
+- "masoy.no",
+- "xn--msy-ula0h.no",
+- "muosat.no",
+- "xn--muost-0qa.no",
+- "mandal.no",
+- "marker.no",
+- "marnardal.no",
+- "masfjorden.no",
+- "meland.no",
+- "meldal.no",
+- "melhus.no",
+- "meloy.no",
+- "xn--mely-ira.no",
+- "meraker.no",
+- "xn--merker-kua.no",
+- "moareke.no",
+- "xn--moreke-jua.no",
+- "midsund.no",
+- "midtre-gauldal.no",
+- "modalen.no",
+- "modum.no",
+- "molde.no",
+- "moskenes.no",
+- "moss.no",
+- "mosvik.no",
+- "malselv.no",
+- "xn--mlselv-iua.no",
+- "malatvuopmi.no",
+- "xn--mlatvuopmi-s4a.no",
+- "namdalseid.no",
+- "aejrie.no",
+- "namsos.no",
+- "namsskogan.no",
+- "naamesjevuemie.no",
+- "xn--nmesjevuemie-tcba.no",
+- "laakesvuemie.no",
+- "nannestad.no",
+- "narvik.no",
+- "narviika.no",
+- "naustdal.no",
+- "nedre-eiker.no",
+- "nes.akershus.no",
+- "nes.buskerud.no",
+- "nesna.no",
+- "nesodden.no",
+- "nesseby.no",
+- "unjarga.no",
+- "xn--unjrga-rta.no",
+- "nesset.no",
+- "nissedal.no",
+- "nittedal.no",
+- "nord-aurdal.no",
+- "nord-fron.no",
+- "nord-odal.no",
+- "norddal.no",
+- "nordkapp.no",
+- "davvenjarga.no",
+- "xn--davvenjrga-y4a.no",
+- "nordre-land.no",
+- "nordreisa.no",
+- "raisa.no",
+- "xn--risa-5na.no",
+- "nore-og-uvdal.no",
+- "notodden.no",
+- "naroy.no",
+- "xn--nry-yla5g.no",
+- "notteroy.no",
+- "xn--nttery-byae.no",
+- "odda.no",
+- "oksnes.no",
+- "xn--ksnes-uua.no",
+- "oppdal.no",
+- "oppegard.no",
+- "xn--oppegrd-ixa.no",
+- "orkdal.no",
+- "orland.no",
+- "xn--rland-uua.no",
+- "orskog.no",
+- "xn--rskog-uua.no",
+- "orsta.no",
+- "xn--rsta-fra.no",
+- "os.hedmark.no",
+- "os.hordaland.no",
+- "osen.no",
+- "osteroy.no",
+- "xn--ostery-fya.no",
+- "ostre-toten.no",
+- "xn--stre-toten-zcb.no",
+- "overhalla.no",
+- "ovre-eiker.no",
+- "xn--vre-eiker-k8a.no",
+- "oyer.no",
+- "xn--yer-zna.no",
+- "oygarden.no",
+- "xn--ygarden-p1a.no",
+- "oystre-slidre.no",
+- "xn--ystre-slidre-ujb.no",
+- "porsanger.no",
+- "porsangu.no",
+- "xn--porsgu-sta26f.no",
+- "porsgrunn.no",
+- "radoy.no",
+- "xn--rady-ira.no",
+- "rakkestad.no",
+- "rana.no",
+- "ruovat.no",
+- "randaberg.no",
+- "rauma.no",
+- "rendalen.no",
+- "rennebu.no",
+- "rennesoy.no",
+- "xn--rennesy-v1a.no",
+- "rindal.no",
+- "ringebu.no",
+- "ringerike.no",
+- "ringsaker.no",
+- "rissa.no",
+- "risor.no",
+- "xn--risr-ira.no",
+- "roan.no",
+- "rollag.no",
+- "rygge.no",
+- "ralingen.no",
+- "xn--rlingen-mxa.no",
+- "rodoy.no",
+- "xn--rdy-0nab.no",
+- "romskog.no",
+- "xn--rmskog-bya.no",
+- "roros.no",
+- "xn--rros-gra.no",
+- "rost.no",
+- "xn--rst-0na.no",
+- "royken.no",
+- "xn--ryken-vua.no",
+- "royrvik.no",
+- "xn--ryrvik-bya.no",
+- "rade.no",
+- "xn--rde-ula.no",
+- "salangen.no",
+- "siellak.no",
+- "saltdal.no",
+- "salat.no",
+- "xn--slt-elab.no",
+- "xn--slat-5na.no",
+- "samnanger.no",
+- "sande.more-og-romsdal.no",
+- "sande.xn--mre-og-romsdal-qqb.no",
+- "sande.vestfold.no",
+- "sandefjord.no",
+- "sandnes.no",
+- "sandoy.no",
+- "xn--sandy-yua.no",
+- "sarpsborg.no",
+- "sauda.no",
+- "sauherad.no",
+- "sel.no",
+- "selbu.no",
+- "selje.no",
+- "seljord.no",
+- "sigdal.no",
+- "siljan.no",
+- "sirdal.no",
+- "skaun.no",
+- "skedsmo.no",
+- "ski.no",
+- "skien.no",
+- "skiptvet.no",
+- "skjervoy.no",
+- "xn--skjervy-v1a.no",
+- "skierva.no",
+- "xn--skierv-uta.no",
+- "skjak.no",
+- "xn--skjk-soa.no",
+- "skodje.no",
+- "skanland.no",
+- "xn--sknland-fxa.no",
+- "skanit.no",
+- "xn--sknit-yqa.no",
+- "smola.no",
+- "xn--smla-hra.no",
+- "snillfjord.no",
+- "snasa.no",
+- "xn--snsa-roa.no",
+- "snoasa.no",
+- "snaase.no",
+- "xn--snase-nra.no",
+- "sogndal.no",
+- "sokndal.no",
+- "sola.no",
+- "solund.no",
+- "songdalen.no",
+- "sortland.no",
+- "spydeberg.no",
+- "stange.no",
+- "stavanger.no",
+- "steigen.no",
+- "steinkjer.no",
+- "stjordal.no",
+- "xn--stjrdal-s1a.no",
+- "stokke.no",
+- "stor-elvdal.no",
+- "stord.no",
+- "stordal.no",
+- "storfjord.no",
+- "omasvuotna.no",
+- "strand.no",
+- "stranda.no",
+- "stryn.no",
+- "sula.no",
+- "suldal.no",
+- "sund.no",
+- "sunndal.no",
+- "surnadal.no",
+- "sveio.no",
+- "svelvik.no",
+- "sykkylven.no",
+- "sogne.no",
+- "xn--sgne-gra.no",
+- "somna.no",
+- "xn--smna-gra.no",
+- "sondre-land.no",
+- "xn--sndre-land-0cb.no",
+- "sor-aurdal.no",
+- "xn--sr-aurdal-l8a.no",
+- "sor-fron.no",
+- "xn--sr-fron-q1a.no",
+- "sor-odal.no",
+- "xn--sr-odal-q1a.no",
+- "sor-varanger.no",
+- "xn--sr-varanger-ggb.no",
+- "matta-varjjat.no",
+- "xn--mtta-vrjjat-k7af.no",
+- "sorfold.no",
+- "xn--srfold-bya.no",
+- "sorreisa.no",
+- "xn--srreisa-q1a.no",
+- "sorum.no",
+- "xn--srum-gra.no",
+- "tana.no",
+- "deatnu.no",
+- "time.no",
+- "tingvoll.no",
+- "tinn.no",
+- "tjeldsund.no",
+- "dielddanuorri.no",
+- "tjome.no",
+- "xn--tjme-hra.no",
+- "tokke.no",
+- "tolga.no",
+- "torsken.no",
+- "tranoy.no",
+- "xn--trany-yua.no",
+- "tromso.no",
+- "xn--troms-zua.no",
+- "tromsa.no",
+- "romsa.no",
+- "trondheim.no",
+- "troandin.no",
+- "trysil.no",
+- "trana.no",
+- "xn--trna-woa.no",
+- "trogstad.no",
+- "xn--trgstad-r1a.no",
+- "tvedestrand.no",
+- "tydal.no",
+- "tynset.no",
+- "tysfjord.no",
+- "divtasvuodna.no",
+- "divttasvuotna.no",
+- "tysnes.no",
+- "tysvar.no",
+- "xn--tysvr-vra.no",
+- "tonsberg.no",
+- "xn--tnsberg-q1a.no",
+- "ullensaker.no",
+- "ullensvang.no",
+- "ulvik.no",
+- "utsira.no",
+- "vadso.no",
+- "xn--vads-jra.no",
+- "cahcesuolo.no",
+- "xn--hcesuolo-7ya35b.no",
+- "vaksdal.no",
+- "valle.no",
+- "vang.no",
+- "vanylven.no",
+- "vardo.no",
+- "xn--vard-jra.no",
+- "varggat.no",
+- "xn--vrggt-xqad.no",
+- "vefsn.no",
+- "vaapste.no",
+- "vega.no",
+- "vegarshei.no",
+- "xn--vegrshei-c0a.no",
+- "vennesla.no",
+- "verdal.no",
+- "verran.no",
+- "vestby.no",
+- "vestnes.no",
+- "vestre-slidre.no",
+- "vestre-toten.no",
+- "vestvagoy.no",
+- "xn--vestvgy-ixa6o.no",
+- "vevelstad.no",
+- "vik.no",
+- "vikna.no",
+- "vindafjord.no",
+- "volda.no",
+- "voss.no",
+- "varoy.no",
+- "xn--vry-yla5g.no",
+- "vagan.no",
+- "xn--vgan-qoa.no",
+- "voagat.no",
+- "vagsoy.no",
+- "xn--vgsy-qoa0j.no",
+- "vaga.no",
+- "xn--vg-yiab.no",
+- "valer.ostfold.no",
+- "xn--vler-qoa.xn--stfold-9xa.no",
+- "valer.hedmark.no",
+- "xn--vler-qoa.hedmark.no",
+- "*.np",
+- "nr",
+- "biz.nr",
+- "info.nr",
+- "gov.nr",
+- "edu.nr",
+- "org.nr",
+- "net.nr",
+- "com.nr",
+- "nu",
+- "*.nz",
+- "*.om",
+- "!mediaphone.om",
+- "!nawrastelecom.om",
+- "!nawras.om",
+- "!omanmobile.om",
+- "!omanpost.om",
+- "!omantel.om",
+- "!rakpetroleum.om",
+- "!siemens.om",
+- "!songfest.om",
+- "!statecouncil.om",
+- "org",
+- "pa",
+- "ac.pa",
+- "gob.pa",
+- "com.pa",
+- "org.pa",
+- "sld.pa",
+- "edu.pa",
+- "net.pa",
+- "ing.pa",
+- "abo.pa",
+- "med.pa",
+- "nom.pa",
+- "pe",
+- "edu.pe",
+- "gob.pe",
+- "nom.pe",
+- "mil.pe",
+- "org.pe",
+- "com.pe",
+- "net.pe",
+- "pf",
+- "com.pf",
+- "org.pf",
+- "edu.pf",
+- "*.pg",
+- "ph",
+- "com.ph",
+- "net.ph",
+- "org.ph",
+- "gov.ph",
+- "edu.ph",
+- "ngo.ph",
+- "mil.ph",
+- "i.ph",
+- "pk",
+- "com.pk",
+- "net.pk",
+- "edu.pk",
+- "org.pk",
+- "fam.pk",
+- "biz.pk",
+- "web.pk",
+- "gov.pk",
+- "gob.pk",
+- "gok.pk",
+- "gon.pk",
+- "gop.pk",
+- "gos.pk",
+- "info.pk",
+- "pl",
+- "aid.pl",
+- "agro.pl",
+- "atm.pl",
+- "auto.pl",
+- "biz.pl",
+- "com.pl",
+- "edu.pl",
+- "gmina.pl",
+- "gsm.pl",
+- "info.pl",
+- "mail.pl",
+- "miasta.pl",
+- "media.pl",
+- "mil.pl",
+- "net.pl",
+- "nieruchomosci.pl",
+- "nom.pl",
+- "org.pl",
+- "pc.pl",
+- "powiat.pl",
+- "priv.pl",
+- "realestate.pl",
+- "rel.pl",
+- "sex.pl",
+- "shop.pl",
+- "sklep.pl",
+- "sos.pl",
+- "szkola.pl",
+- "targi.pl",
+- "tm.pl",
+- "tourism.pl",
+- "travel.pl",
+- "turystyka.pl",
+- "6bone.pl",
+- "art.pl",
+- "mbone.pl",
+- "gov.pl",
+- "uw.gov.pl",
+- "um.gov.pl",
+- "ug.gov.pl",
+- "upow.gov.pl",
+- "starostwo.gov.pl",
+- "so.gov.pl",
+- "sr.gov.pl",
+- "po.gov.pl",
+- "pa.gov.pl",
+- "ngo.pl",
+- "irc.pl",
+- "usenet.pl",
+- "augustow.pl",
+- "babia-gora.pl",
+- "bedzin.pl",
+- "beskidy.pl",
+- "bialowieza.pl",
+- "bialystok.pl",
+- "bielawa.pl",
+- "bieszczady.pl",
+- "boleslawiec.pl",
+- "bydgoszcz.pl",
+- "bytom.pl",
+- "cieszyn.pl",
+- "czeladz.pl",
+- "czest.pl",
+- "dlugoleka.pl",
+- "elblag.pl",
+- "elk.pl",
+- "glogow.pl",
+- "gniezno.pl",
+- "gorlice.pl",
+- "grajewo.pl",
+- "ilawa.pl",
+- "jaworzno.pl",
+- "jelenia-gora.pl",
+- "jgora.pl",
+- "kalisz.pl",
+- "kazimierz-dolny.pl",
+- "karpacz.pl",
+- "kartuzy.pl",
+- "kaszuby.pl",
+- "katowice.pl",
+- "kepno.pl",
+- "ketrzyn.pl",
+- "klodzko.pl",
+- "kobierzyce.pl",
+- "kolobrzeg.pl",
+- "konin.pl",
+- "konskowola.pl",
+- "kutno.pl",
+- "lapy.pl",
+- "lebork.pl",
+- "legnica.pl",
+- "lezajsk.pl",
+- "limanowa.pl",
+- "lomza.pl",
+- "lowicz.pl",
+- "lubin.pl",
+- "lukow.pl",
+- "malbork.pl",
+- "malopolska.pl",
+- "mazowsze.pl",
+- "mazury.pl",
+- "mielec.pl",
+- "mielno.pl",
+- "mragowo.pl",
+- "naklo.pl",
+- "nowaruda.pl",
+- "nysa.pl",
+- "olawa.pl",
+- "olecko.pl",
+- "olkusz.pl",
+- "olsztyn.pl",
+- "opoczno.pl",
+- "opole.pl",
+- "ostroda.pl",
+- "ostroleka.pl",
+- "ostrowiec.pl",
+- "ostrowwlkp.pl",
+- "pila.pl",
+- "pisz.pl",
+- "podhale.pl",
+- "podlasie.pl",
+- "polkowice.pl",
+- "pomorze.pl",
+- "pomorskie.pl",
+- "prochowice.pl",
+- "pruszkow.pl",
+- "przeworsk.pl",
+- "pulawy.pl",
+- "radom.pl",
+- "rawa-maz.pl",
+- "rybnik.pl",
+- "rzeszow.pl",
+- "sanok.pl",
+- "sejny.pl",
+- "siedlce.pl",
+- "slask.pl",
+- "slupsk.pl",
+- "sosnowiec.pl",
+- "stalowa-wola.pl",
+- "skoczow.pl",
+- "starachowice.pl",
+- "stargard.pl",
+- "suwalki.pl",
+- "swidnica.pl",
+- "swiebodzin.pl",
+- "swinoujscie.pl",
+- "szczecin.pl",
+- "szczytno.pl",
+- "tarnobrzeg.pl",
+- "tgory.pl",
+- "turek.pl",
+- "tychy.pl",
+- "ustka.pl",
+- "walbrzych.pl",
+- "warmia.pl",
+- "warszawa.pl",
+- "waw.pl",
+- "wegrow.pl",
+- "wielun.pl",
+- "wlocl.pl",
+- "wloclawek.pl",
+- "wodzislaw.pl",
+- "wolomin.pl",
+- "wroclaw.pl",
+- "zachpomor.pl",
+- "zagan.pl",
+- "zarow.pl",
+- "zgora.pl",
+- "zgorzelec.pl",
+- "gda.pl",
+- "gdansk.pl",
+- "gdynia.pl",
+- "med.pl",
+- "sopot.pl",
+- "gliwice.pl",
+- "krakow.pl",
+- "poznan.pl",
+- "wroc.pl",
+- "zakopane.pl",
+- "pm",
+- "pn",
+- "gov.pn",
+- "co.pn",
+- "org.pn",
+- "edu.pn",
+- "net.pn",
+- "post",
+- "pr",
+- "com.pr",
+- "net.pr",
+- "org.pr",
+- "gov.pr",
+- "edu.pr",
+- "isla.pr",
+- "pro.pr",
+- "biz.pr",
+- "info.pr",
+- "name.pr",
+- "est.pr",
+- "prof.pr",
+- "ac.pr",
+- "pro",
+- "aca.pro",
+- "bar.pro",
+- "cpa.pro",
+- "jur.pro",
+- "law.pro",
+- "med.pro",
+- "eng.pro",
+- "ps",
+- "edu.ps",
+- "gov.ps",
+- "sec.ps",
+- "plo.ps",
+- "com.ps",
+- "org.ps",
+- "net.ps",
+- "pt",
+- "net.pt",
+- "gov.pt",
+- "org.pt",
+- "edu.pt",
+- "int.pt",
+- "publ.pt",
+- "com.pt",
+- "nome.pt",
+- "pw",
+- "co.pw",
+- "ne.pw",
+- "or.pw",
+- "ed.pw",
+- "go.pw",
+- "belau.pw",
+- "py",
+- "com.py",
+- "coop.py",
+- "edu.py",
+- "gov.py",
+- "mil.py",
+- "net.py",
+- "org.py",
+- "qa",
+- "com.qa",
+- "edu.qa",
+- "gov.qa",
+- "mil.qa",
+- "name.qa",
+- "net.qa",
+- "org.qa",
+- "sch.qa",
+- "re",
+- "com.re",
+- "asso.re",
+- "nom.re",
+- "ro",
+- "com.ro",
+- "org.ro",
+- "tm.ro",
+- "nt.ro",
+- "nom.ro",
+- "info.ro",
+- "rec.ro",
+- "arts.ro",
+- "firm.ro",
+- "store.ro",
+- "www.ro",
+- "rs",
+- "co.rs",
+- "org.rs",
+- "edu.rs",
+- "ac.rs",
+- "gov.rs",
+- "in.rs",
+- "ru",
+- "ac.ru",
+- "com.ru",
+- "edu.ru",
+- "int.ru",
+- "net.ru",
+- "org.ru",
+- "pp.ru",
+- "adygeya.ru",
+- "altai.ru",
+- "amur.ru",
+- "arkhangelsk.ru",
+- "astrakhan.ru",
+- "bashkiria.ru",
+- "belgorod.ru",
+- "bir.ru",
+- "bryansk.ru",
+- "buryatia.ru",
+- "cbg.ru",
+- "chel.ru",
+- "chelyabinsk.ru",
+- "chita.ru",
+- "chukotka.ru",
+- "chuvashia.ru",
+- "dagestan.ru",
+- "dudinka.ru",
+- "e-burg.ru",
+- "grozny.ru",
+- "irkutsk.ru",
+- "ivanovo.ru",
+- "izhevsk.ru",
+- "jar.ru",
+- "joshkar-ola.ru",
+- "kalmykia.ru",
+- "kaluga.ru",
+- "kamchatka.ru",
+- "karelia.ru",
+- "kazan.ru",
+- "kchr.ru",
+- "kemerovo.ru",
+- "khabarovsk.ru",
+- "khakassia.ru",
+- "khv.ru",
+- "kirov.ru",
+- "koenig.ru",
+- "komi.ru",
+- "kostroma.ru",
+- "krasnoyarsk.ru",
+- "kuban.ru",
+- "kurgan.ru",
+- "kursk.ru",
+- "lipetsk.ru",
+- "magadan.ru",
+- "mari.ru",
+- "mari-el.ru",
+- "marine.ru",
+- "mordovia.ru",
+- "mosreg.ru",
+- "msk.ru",
+- "murmansk.ru",
+- "nalchik.ru",
+- "nnov.ru",
+- "nov.ru",
+- "novosibirsk.ru",
+- "nsk.ru",
+- "omsk.ru",
+- "orenburg.ru",
+- "oryol.ru",
+- "palana.ru",
+- "penza.ru",
+- "perm.ru",
+- "pskov.ru",
+- "ptz.ru",
+- "rnd.ru",
+- "ryazan.ru",
+- "sakhalin.ru",
+- "samara.ru",
+- "saratov.ru",
+- "simbirsk.ru",
+- "smolensk.ru",
+- "spb.ru",
+- "stavropol.ru",
+- "stv.ru",
+- "surgut.ru",
+- "tambov.ru",
+- "tatarstan.ru",
+- "tom.ru",
+- "tomsk.ru",
+- "tsaritsyn.ru",
+- "tsk.ru",
+- "tula.ru",
+- "tuva.ru",
+- "tver.ru",
+- "tyumen.ru",
+- "udm.ru",
+- "udmurtia.ru",
+- "ulan-ude.ru",
+- "vladikavkaz.ru",
+- "vladimir.ru",
+- "vladivostok.ru",
+- "volgograd.ru",
+- "vologda.ru",
+- "voronezh.ru",
+- "vrn.ru",
+- "vyatka.ru",
+- "yakutia.ru",
+- "yamal.ru",
+- "yaroslavl.ru",
+- "yekaterinburg.ru",
+- "yuzhno-sakhalinsk.ru",
+- "amursk.ru",
+- "baikal.ru",
+- "cmw.ru",
+- "fareast.ru",
+- "jamal.ru",
+- "kms.ru",
+- "k-uralsk.ru",
+- "kustanai.ru",
+- "kuzbass.ru",
+- "magnitka.ru",
+- "mytis.ru",
+- "nakhodka.ru",
+- "nkz.ru",
+- "norilsk.ru",
+- "oskol.ru",
+- "pyatigorsk.ru",
+- "rubtsovsk.ru",
+- "snz.ru",
+- "syzran.ru",
+- "vdonsk.ru",
+- "zgrad.ru",
+- "gov.ru",
+- "mil.ru",
+- "test.ru",
+- "rw",
+- "gov.rw",
+- "net.rw",
+- "edu.rw",
+- "ac.rw",
+- "com.rw",
+- "co.rw",
+- "int.rw",
+- "mil.rw",
+- "gouv.rw",
+- "sa",
+- "com.sa",
+- "net.sa",
+- "org.sa",
+- "gov.sa",
+- "med.sa",
+- "pub.sa",
+- "edu.sa",
+- "sch.sa",
+- "sb",
+- "com.sb",
+- "edu.sb",
+- "gov.sb",
+- "net.sb",
+- "org.sb",
+- "sc",
+- "com.sc",
+- "gov.sc",
+- "net.sc",
+- "org.sc",
+- "edu.sc",
+- "sd",
+- "com.sd",
+- "net.sd",
+- "org.sd",
+- "edu.sd",
+- "med.sd",
+- "tv.sd",
+- "gov.sd",
+- "info.sd",
+- "se",
+- "a.se",
+- "ac.se",
+- "b.se",
+- "bd.se",
+- "brand.se",
+- "c.se",
+- "d.se",
+- "e.se",
+- "f.se",
+- "fh.se",
+- "fhsk.se",
+- "fhv.se",
+- "g.se",
+- "h.se",
+- "i.se",
+- "k.se",
+- "komforb.se",
+- "kommunalforbund.se",
+- "komvux.se",
+- "l.se",
+- "lanbib.se",
+- "m.se",
+- "n.se",
+- "naturbruksgymn.se",
+- "o.se",
+- "org.se",
+- "p.se",
+- "parti.se",
+- "pp.se",
+- "press.se",
+- "r.se",
+- "s.se",
+- "sshn.se",
+- "t.se",
+- "tm.se",
+- "u.se",
+- "w.se",
+- "x.se",
+- "y.se",
+- "z.se",
+- "sg",
+- "com.sg",
+- "net.sg",
+- "org.sg",
+- "gov.sg",
+- "edu.sg",
+- "per.sg",
+- "sh",
+- "com.sh",
+- "net.sh",
+- "gov.sh",
+- "org.sh",
+- "mil.sh",
+- "si",
+- "sk",
+- "sl",
+- "com.sl",
+- "net.sl",
+- "edu.sl",
+- "gov.sl",
+- "org.sl",
+- "sm",
+- "sn",
+- "art.sn",
+- "com.sn",
+- "edu.sn",
+- "gouv.sn",
+- "org.sn",
+- "perso.sn",
+- "univ.sn",
+- "so",
+- "com.so",
+- "net.so",
+- "org.so",
+- "sr",
+- "st",
+- "co.st",
+- "com.st",
+- "consulado.st",
+- "edu.st",
+- "embaixada.st",
+- "gov.st",
+- "mil.st",
+- "net.st",
+- "org.st",
+- "principe.st",
+- "saotome.st",
+- "store.st",
+- "su",
+- "*.sv",
+- "sx",
+- "gov.sx",
+- "sy",
+- "edu.sy",
+- "gov.sy",
+- "net.sy",
+- "mil.sy",
+- "com.sy",
+- "org.sy",
+- "sz",
+- "co.sz",
+- "ac.sz",
+- "org.sz",
+- "tc",
+- "td",
+- "tel",
+- "tf",
+- "tg",
+- "th",
+- "ac.th",
+- "co.th",
+- "go.th",
+- "in.th",
+- "mi.th",
+- "net.th",
+- "or.th",
+- "tj",
+- "ac.tj",
+- "biz.tj",
+- "co.tj",
+- "com.tj",
+- "edu.tj",
+- "go.tj",
+- "gov.tj",
+- "int.tj",
+- "mil.tj",
+- "name.tj",
+- "net.tj",
+- "nic.tj",
+- "org.tj",
+- "test.tj",
+- "web.tj",
+- "tk",
+- "tl",
+- "gov.tl",
+- "tm",
+- "com.tm",
+- "co.tm",
+- "org.tm",
+- "net.tm",
+- "nom.tm",
+- "gov.tm",
+- "mil.tm",
+- "edu.tm",
+- "tn",
+- "com.tn",
+- "ens.tn",
+- "fin.tn",
+- "gov.tn",
+- "ind.tn",
+- "intl.tn",
+- "nat.tn",
+- "net.tn",
+- "org.tn",
+- "info.tn",
+- "perso.tn",
+- "tourism.tn",
+- "edunet.tn",
+- "rnrt.tn",
+- "rns.tn",
+- "rnu.tn",
+- "mincom.tn",
+- "agrinet.tn",
+- "defense.tn",
+- "turen.tn",
+- "to",
+- "com.to",
+- "gov.to",
+- "net.to",
+- "org.to",
+- "edu.to",
+- "mil.to",
+- "*.tr",
+- "!nic.tr",
+- "gov.nc.tr",
+- "travel",
+- "tt",
+- "co.tt",
+- "com.tt",
+- "org.tt",
+- "net.tt",
+- "biz.tt",
+- "info.tt",
+- "pro.tt",
+- "int.tt",
+- "coop.tt",
+- "jobs.tt",
+- "mobi.tt",
+- "travel.tt",
+- "museum.tt",
+- "aero.tt",
+- "name.tt",
+- "gov.tt",
+- "edu.tt",
+- "tv",
+- "tw",
+- "edu.tw",
+- "gov.tw",
+- "mil.tw",
+- "com.tw",
+- "net.tw",
+- "org.tw",
+- "idv.tw",
+- "game.tw",
+- "ebiz.tw",
+- "club.tw",
+- "xn--zf0ao64a.tw",
+- "xn--uc0atv.tw",
+- "xn--czrw28b.tw",
+- "ac.tz",
+- "co.tz",
+- "go.tz",
+- "hotel.tz",
+- "info.tz",
+- "me.tz",
+- "mil.tz",
+- "mobi.tz",
+- "ne.tz",
+- "or.tz",
+- "sc.tz",
+- "tv.tz",
+- "ua",
+- "com.ua",
+- "edu.ua",
+- "gov.ua",
+- "in.ua",
+- "net.ua",
+- "org.ua",
+- "cherkassy.ua",
+- "cherkasy.ua",
+- "chernigov.ua",
+- "chernihiv.ua",
+- "chernivtsi.ua",
+- "chernovtsy.ua",
+- "ck.ua",
+- "cn.ua",
+- "cr.ua",
+- "crimea.ua",
+- "cv.ua",
+- "dn.ua",
+- "dnepropetrovsk.ua",
+- "dnipropetrovsk.ua",
+- "dominic.ua",
+- "donetsk.ua",
+- "dp.ua",
+- "if.ua",
+- "ivano-frankivsk.ua",
+- "kh.ua",
+- "kharkiv.ua",
+- "kharkov.ua",
+- "kherson.ua",
+- "khmelnitskiy.ua",
+- "khmelnytskyi.ua",
+- "kiev.ua",
+- "kirovograd.ua",
+- "km.ua",
+- "kr.ua",
+- "krym.ua",
+- "ks.ua",
+- "kv.ua",
+- "kyiv.ua",
+- "lg.ua",
+- "lt.ua",
+- "lugansk.ua",
+- "lutsk.ua",
+- "lv.ua",
+- "lviv.ua",
+- "mk.ua",
+- "mykolaiv.ua",
+- "nikolaev.ua",
+- "od.ua",
+- "odesa.ua",
+- "odessa.ua",
+- "pl.ua",
+- "poltava.ua",
+- "rivne.ua",
+- "rovno.ua",
+- "rv.ua",
+- "sb.ua",
+- "sebastopol.ua",
+- "sevastopol.ua",
+- "sm.ua",
+- "sumy.ua",
+- "te.ua",
+- "ternopil.ua",
+- "uz.ua",
+- "uzhgorod.ua",
+- "vinnica.ua",
+- "vinnytsia.ua",
+- "vn.ua",
+- "volyn.ua",
+- "yalta.ua",
+- "zaporizhzhe.ua",
+- "zaporizhzhia.ua",
+- "zhitomir.ua",
+- "zhytomyr.ua",
+- "zp.ua",
+- "zt.ua",
+- "co.ua",
+- "pp.ua",
+- "ug",
+- "co.ug",
+- "or.ug",
+- "ac.ug",
+- "sc.ug",
+- "go.ug",
+- "ne.ug",
+- "com.ug",
+- "org.ug",
+- "*.uk",
+- "*.sch.uk",
+- "!bl.uk",
+- "!british-library.uk",
+- "!jet.uk",
+- "!mod.uk",
+- "!national-library-scotland.uk",
+- "!nel.uk",
+- "!nic.uk",
+- "!nls.uk",
+- "!parliament.uk",
+- "us",
+- "dni.us",
+- "fed.us",
+- "isa.us",
+- "kids.us",
+- "nsn.us",
+- "ak.us",
+- "al.us",
+- "ar.us",
+- "as.us",
+- "az.us",
+- "ca.us",
+- "co.us",
+- "ct.us",
+- "dc.us",
+- "de.us",
+- "fl.us",
+- "ga.us",
+- "gu.us",
+- "hi.us",
+- "ia.us",
+- "id.us",
+- "il.us",
+- "in.us",
+- "ks.us",
+- "ky.us",
+- "la.us",
+- "ma.us",
+- "md.us",
+- "me.us",
+- "mi.us",
+- "mn.us",
+- "mo.us",
+- "ms.us",
+- "mt.us",
+- "nc.us",
+- "nd.us",
+- "ne.us",
+- "nh.us",
+- "nj.us",
+- "nm.us",
+- "nv.us",
+- "ny.us",
+- "oh.us",
+- "ok.us",
+- "or.us",
+- "pa.us",
+- "pr.us",
+- "ri.us",
+- "sc.us",
+- "sd.us",
+- "tn.us",
+- "tx.us",
+- "ut.us",
+- "vi.us",
+- "vt.us",
+- "va.us",
+- "wa.us",
+- "wi.us",
+- "wv.us",
+- "wy.us",
+- "k12.ak.us",
+- "k12.al.us",
+- "k12.ar.us",
+- "k12.as.us",
+- "k12.az.us",
+- "k12.ca.us",
+- "k12.co.us",
+- "k12.ct.us",
+- "k12.dc.us",
+- "k12.de.us",
+- "k12.fl.us",
+- "k12.ga.us",
+- "k12.gu.us",
+- "k12.ia.us",
+- "k12.id.us",
+- "k12.il.us",
+- "k12.in.us",
+- "k12.ks.us",
+- "k12.ky.us",
+- "k12.la.us",
+- "k12.ma.us",
+- "k12.md.us",
+- "k12.me.us",
+- "k12.mi.us",
+- "k12.mn.us",
+- "k12.mo.us",
+- "k12.ms.us",
+- "k12.mt.us",
+- "k12.nc.us",
+- "k12.nd.us",
+- "k12.ne.us",
+- "k12.nh.us",
+- "k12.nj.us",
+- "k12.nm.us",
+- "k12.nv.us",
+- "k12.ny.us",
+- "k12.oh.us",
+- "k12.ok.us",
+- "k12.or.us",
+- "k12.pa.us",
+- "k12.pr.us",
+- "k12.ri.us",
+- "k12.sc.us",
+- "k12.sd.us",
+- "k12.tn.us",
+- "k12.tx.us",
+- "k12.ut.us",
+- "k12.vi.us",
+- "k12.vt.us",
+- "k12.va.us",
+- "k12.wa.us",
+- "k12.wi.us",
+- "k12.wv.us",
+- "k12.wy.us",
+- "cc.ak.us",
+- "cc.al.us",
+- "cc.ar.us",
+- "cc.as.us",
+- "cc.az.us",
+- "cc.ca.us",
+- "cc.co.us",
+- "cc.ct.us",
+- "cc.dc.us",
+- "cc.de.us",
+- "cc.fl.us",
+- "cc.ga.us",
+- "cc.gu.us",
+- "cc.hi.us",
+- "cc.ia.us",
+- "cc.id.us",
+- "cc.il.us",
+- "cc.in.us",
+- "cc.ks.us",
+- "cc.ky.us",
+- "cc.la.us",
+- "cc.ma.us",
+- "cc.md.us",
+- "cc.me.us",
+- "cc.mi.us",
+- "cc.mn.us",
+- "cc.mo.us",
+- "cc.ms.us",
+- "cc.mt.us",
+- "cc.nc.us",
+- "cc.nd.us",
+- "cc.ne.us",
+- "cc.nh.us",
+- "cc.nj.us",
+- "cc.nm.us",
+- "cc.nv.us",
+- "cc.ny.us",
+- "cc.oh.us",
+- "cc.ok.us",
+- "cc.or.us",
+- "cc.pa.us",
+- "cc.pr.us",
+- "cc.ri.us",
+- "cc.sc.us",
+- "cc.sd.us",
+- "cc.tn.us",
+- "cc.tx.us",
+- "cc.ut.us",
+- "cc.vi.us",
+- "cc.vt.us",
+- "cc.va.us",
+- "cc.wa.us",
+- "cc.wi.us",
+- "cc.wv.us",
+- "cc.wy.us",
+- "lib.ak.us",
+- "lib.al.us",
+- "lib.ar.us",
+- "lib.as.us",
+- "lib.az.us",
+- "lib.ca.us",
+- "lib.co.us",
+- "lib.ct.us",
+- "lib.dc.us",
+- "lib.de.us",
+- "lib.fl.us",
+- "lib.ga.us",
+- "lib.gu.us",
+- "lib.hi.us",
+- "lib.ia.us",
+- "lib.id.us",
+- "lib.il.us",
+- "lib.in.us",
+- "lib.ks.us",
+- "lib.ky.us",
+- "lib.la.us",
+- "lib.ma.us",
+- "lib.md.us",
+- "lib.me.us",
+- "lib.mi.us",
+- "lib.mn.us",
+- "lib.mo.us",
+- "lib.ms.us",
+- "lib.mt.us",
+- "lib.nc.us",
+- "lib.nd.us",
+- "lib.ne.us",
+- "lib.nh.us",
+- "lib.nj.us",
+- "lib.nm.us",
+- "lib.nv.us",
+- "lib.ny.us",
+- "lib.oh.us",
+- "lib.ok.us",
+- "lib.or.us",
+- "lib.pa.us",
+- "lib.pr.us",
+- "lib.ri.us",
+- "lib.sc.us",
+- "lib.sd.us",
+- "lib.tn.us",
+- "lib.tx.us",
+- "lib.ut.us",
+- "lib.vi.us",
+- "lib.vt.us",
+- "lib.va.us",
+- "lib.wa.us",
+- "lib.wi.us",
+- "lib.wv.us",
+- "lib.wy.us",
+- "pvt.k12.ma.us",
+- "chtr.k12.ma.us",
+- "paroch.k12.ma.us",
+- "uy",
+- "com.uy",
+- "edu.uy",
+- "gub.uy",
+- "mil.uy",
+- "net.uy",
+- "org.uy",
+- "uz",
+- "co.uz",
+- "com.uz",
+- "net.uz",
+- "org.uz",
+- "va",
+- "vc",
+- "com.vc",
+- "net.vc",
+- "org.vc",
+- "gov.vc",
+- "mil.vc",
+- "edu.vc",
+- "ve",
+- "co.ve",
+- "com.ve",
+- "e12.ve",
+- "edu.ve",
+- "gov.ve",
+- "info.ve",
+- "mil.ve",
+- "net.ve",
+- "org.ve",
+- "web.ve",
+- "vg",
+- "vi",
+- "co.vi",
+- "com.vi",
+- "k12.vi",
+- "net.vi",
+- "org.vi",
+- "vn",
+- "com.vn",
+- "net.vn",
+- "org.vn",
+- "edu.vn",
+- "gov.vn",
+- "int.vn",
+- "ac.vn",
+- "biz.vn",
+- "info.vn",
+- "name.vn",
+- "pro.vn",
+- "health.vn",
+- "vu",
+- "wf",
+- "ws",
+- "com.ws",
+- "net.ws",
+- "org.ws",
+- "gov.ws",
+- "edu.ws",
+- "yt",
+- "xn--mgbaam7a8h",
+- "xn--54b7fta0cc",
+- "xn--fiqs8s",
+- "xn--fiqz9s",
+- "xn--lgbbat1ad8j",
+- "xn--wgbh1c",
+- "xn--node",
+- "xn--j6w193g",
+- "xn--h2brj9c",
+- "xn--mgbbh1a71e",
+- "xn--fpcrj9c3d",
+- "xn--gecrj9c",
+- "xn--s9brj9c",
+- "xn--45brj9c",
+- "xn--xkc2dl3a5ee0h",
+- "xn--mgba3a4f16a",
+- "xn--mgba3a4fra",
+- "xn--mgbayh7gpa",
+- "xn--3e0b707e",
+- "xn--fzc2c9e2c",
+- "xn--xkc2al3hye2a",
+- "xn--mgbc0a9azcg",
+- "xn--mgb9awbf",
+- "xn--ygbi2ammx",
+- "xn--90a3ac",
+- "xn--p1ai",
+- "xn--wgbl6a",
+- "xn--mgberp4a5d4ar",
+- "xn--mgberp4a5d4a87g",
+- "xn--mgbqly7c0a67fbc",
+- "xn--mgbqly7cvafr",
+- "xn--ogbpf8fl",
+- "xn--mgbtf8fl",
+- "xn--yfro4i67o",
+- "xn--clchc0ea0b2g2a9gcd",
+- "xn--o3cw4h",
+- "xn--pgbs0dh",
+- "xn--kpry57d",
+- "xn--kprw13d",
+- "xn--nnx388a",
+- "xn--j1amh",
+- "xn--mgb2ddes",
+- "xxx",
+- "*.ye",
+- "*.za",
+- "*.zm",
+- "*.zw",
+- "cloudfront.net",
+- "elasticbeanstalk.com",
+- "elb.amazonaws.com",
+- "s3.amazonaws.com",
+- "s3-us-west-2.amazonaws.com",
+- "s3-us-west-1.amazonaws.com",
+- "s3-eu-west-1.amazonaws.com",
+- "s3-ap-southeast-1.amazonaws.com",
+- "s3-ap-southeast-2.amazonaws.com",
+- "s3-ap-northeast-1.amazonaws.com",
+- "s3-sa-east-1.amazonaws.com",
+- "s3-us-gov-west-1.amazonaws.com",
+- "s3-fips-us-gov-west-1.amazonaws.com",
+- "s3-website-us-east-1.amazonaws.com",
+- "s3-website-us-west-2.amazonaws.com",
+- "s3-website-us-west-1.amazonaws.com",
+- "s3-website-eu-west-1.amazonaws.com",
+- "s3-website-ap-southeast-1.amazonaws.com",
+- "s3-website-ap-southeast-2.amazonaws.com",
+- "s3-website-ap-northeast-1.amazonaws.com",
+- "s3-website-sa-east-1.amazonaws.com",
+- "s3-website-us-gov-west-1.amazonaws.com",
+- "betainabox.com",
+- "ae.org",
+- "ar.com",
+- "br.com",
+- "cn.com",
+- "com.de",
+- "de.com",
+- "eu.com",
+- "gb.com",
+- "gb.net",
+- "gr.com",
+- "hu.com",
+- "hu.net",
+- "jp.net",
+- "jpn.com",
+- "kr.com",
+- "no.com",
+- "qc.com",
+- "ru.com",
+- "sa.com",
+- "se.com",
+- "se.net",
+- "uk.com",
+- "uk.net",
+- "us.com",
+- "us.org",
+- "uy.com",
+- "za.com",
+- "c.la",
+- "co.ca",
+- "co.nl",
+- "co.no",
+- "dreamhosters.com",
+- "dyndns-at-home.com",
+- "dyndns-at-work.com",
+- "dyndns-blog.com",
+- "dyndns-free.com",
+- "dyndns-home.com",
+- "dyndns-ip.com",
+- "dyndns-mail.com",
+- "dyndns-office.com",
+- "dyndns-pics.com",
+- "dyndns-remote.com",
+- "dyndns-server.com",
+- "dyndns-web.com",
+- "dyndns-wiki.com",
+- "dyndns-work.com",
+- "dyndns.biz",
+- "dyndns.info",
+- "dyndns.org",
+- "dyndns.tv",
+- "at-band-camp.net",
+- "ath.cx",
+- "barrel-of-knowledge.info",
+- "barrell-of-knowledge.info",
+- "better-than.tv",
+- "blogdns.com",
+- "blogdns.net",
+- "blogdns.org",
+- "blogsite.org",
+- "boldlygoingnowhere.org",
+- "broke-it.net",
+- "buyshouses.net",
+- "cechire.com",
+- "dnsalias.com",
+- "dnsalias.net",
+- "dnsalias.org",
+- "dnsdojo.com",
+- "dnsdojo.net",
+- "dnsdojo.org",
+- "does-it.net",
+- "doesntexist.com",
+- "doesntexist.org",
+- "dontexist.com",
+- "dontexist.net",
+- "dontexist.org",
+- "doomdns.com",
+- "doomdns.org",
+- "dvrdns.org",
+- "dyn-o-saur.com",
+- "dynalias.com",
+- "dynalias.net",
+- "dynalias.org",
+- "dynathome.net",
+- "dyndns.ws",
+- "endofinternet.net",
+- "endofinternet.org",
+- "endoftheinternet.org",
+- "est-a-la-maison.com",
+- "est-a-la-masion.com",
+- "est-le-patron.com",
+- "est-mon-blogueur.com",
+- "for-better.biz",
+- "for-more.biz",
+- "for-our.info",
+- "for-some.biz",
+- "for-the.biz",
+- "forgot.her.name",
+- "forgot.his.name",
+- "from-ak.com",
+- "from-al.com",
+- "from-ar.com",
+- "from-az.net",
+- "from-ca.com",
+- "from-co.net",
+- "from-ct.com",
+- "from-dc.com",
+- "from-de.com",
+- "from-fl.com",
+- "from-ga.com",
+- "from-hi.com",
+- "from-ia.com",
+- "from-id.com",
+- "from-il.com",
+- "from-in.com",
+- "from-ks.com",
+- "from-ky.com",
+- "from-la.net",
+- "from-ma.com",
+- "from-md.com",
+- "from-me.org",
+- "from-mi.com",
+- "from-mn.com",
+- "from-mo.com",
+- "from-ms.com",
+- "from-mt.com",
+- "from-nc.com",
+- "from-nd.com",
+- "from-ne.com",
+- "from-nh.com",
+- "from-nj.com",
+- "from-nm.com",
+- "from-nv.com",
+- "from-ny.net",
+- "from-oh.com",
+- "from-ok.com",
+- "from-or.com",
+- "from-pa.com",
+- "from-pr.com",
+- "from-ri.com",
+- "from-sc.com",
+- "from-sd.com",
+- "from-tn.com",
+- "from-tx.com",
+- "from-ut.com",
+- "from-va.com",
+- "from-vt.com",
+- "from-wa.com",
+- "from-wi.com",
+- "from-wv.com",
+- "from-wy.com",
+- "ftpaccess.cc",
+- "fuettertdasnetz.de",
+- "game-host.org",
+- "game-server.cc",
+- "getmyip.com",
+- "gets-it.net",
+- "go.dyndns.org",
+- "gotdns.com",
+- "gotdns.org",
+- "groks-the.info",
+- "groks-this.info",
+- "ham-radio-op.net",
+- "here-for-more.info",
+- "hobby-site.com",
+- "hobby-site.org",
+- "home.dyndns.org",
+- "homedns.org",
+- "homeftp.net",
+- "homeftp.org",
+- "homeip.net",
+- "homelinux.com",
+- "homelinux.net",
+- "homelinux.org",
+- "homeunix.com",
+- "homeunix.net",
+- "homeunix.org",
+- "iamallama.com",
+- "in-the-band.net",
+- "is-a-anarchist.com",
+- "is-a-blogger.com",
+- "is-a-bookkeeper.com",
+- "is-a-bruinsfan.org",
+- "is-a-bulls-fan.com",
+- "is-a-candidate.org",
+- "is-a-caterer.com",
+- "is-a-celticsfan.org",
+- "is-a-chef.com",
+- "is-a-chef.net",
+- "is-a-chef.org",
+- "is-a-conservative.com",
+- "is-a-cpa.com",
+- "is-a-cubicle-slave.com",
+- "is-a-democrat.com",
+- "is-a-designer.com",
+- "is-a-doctor.com",
+- "is-a-financialadvisor.com",
+- "is-a-geek.com",
+- "is-a-geek.net",
+- "is-a-geek.org",
+- "is-a-green.com",
+- "is-a-guru.com",
+- "is-a-hard-worker.com",
+- "is-a-hunter.com",
+- "is-a-knight.org",
+- "is-a-landscaper.com",
+- "is-a-lawyer.com",
+- "is-a-liberal.com",
+- "is-a-libertarian.com",
+- "is-a-linux-user.org",
+- "is-a-llama.com",
+- "is-a-musician.com",
+- "is-a-nascarfan.com",
+- "is-a-nurse.com",
+- "is-a-painter.com",
+- "is-a-patsfan.org",
+- "is-a-personaltrainer.com",
+- "is-a-photographer.com",
+- "is-a-player.com",
+- "is-a-republican.com",
+- "is-a-rockstar.com",
+- "is-a-socialist.com",
+- "is-a-soxfan.org",
+- "is-a-student.com",
+- "is-a-teacher.com",
+- "is-a-techie.com",
+- "is-a-therapist.com",
+- "is-an-accountant.com",
+- "is-an-actor.com",
+- "is-an-actress.com",
+- "is-an-anarchist.com",
+- "is-an-artist.com",
+- "is-an-engineer.com",
+- "is-an-entertainer.com",
+- "is-by.us",
+- "is-certified.com",
+- "is-found.org",
+- "is-gone.com",
+- "is-into-anime.com",
+- "is-into-cars.com",
+- "is-into-cartoons.com",
+- "is-into-games.com",
+- "is-leet.com",
+- "is-lost.org",
+- "is-not-certified.com",
+- "is-saved.org",
+- "is-slick.com",
+- "is-uberleet.com",
+- "is-very-bad.org",
+- "is-very-evil.org",
+- "is-very-good.org",
+- "is-very-nice.org",
+- "is-very-sweet.org",
+- "is-with-theband.com",
+- "isa-geek.com",
+- "isa-geek.net",
+- "isa-geek.org",
+- "isa-hockeynut.com",
+- "issmarterthanyou.com",
+- "isteingeek.de",
+- "istmein.de",
+- "kicks-ass.net",
+- "kicks-ass.org",
+- "knowsitall.info",
+- "land-4-sale.us",
+- "lebtimnetz.de",
+- "leitungsen.de",
+- "likes-pie.com",
+- "likescandy.com",
+- "merseine.nu",
+- "mine.nu",
+- "misconfused.org",
+- "mypets.ws",
+- "myphotos.cc",
+- "neat-url.com",
+- "office-on-the.net",
+- "on-the-web.tv",
+- "podzone.net",
+- "podzone.org",
+- "readmyblog.org",
+- "saves-the-whales.com",
+- "scrapper-site.net",
+- "scrapping.cc",
+- "selfip.biz",
+- "selfip.com",
+- "selfip.info",
+- "selfip.net",
+- "selfip.org",
+- "sells-for-less.com",
+- "sells-for-u.com",
+- "sells-it.net",
+- "sellsyourhome.org",
+- "servebbs.com",
+- "servebbs.net",
+- "servebbs.org",
+- "serveftp.net",
+- "serveftp.org",
+- "servegame.org",
+- "shacknet.nu",
+- "simple-url.com",
+- "space-to-rent.com",
+- "stuff-4-sale.org",
+- "stuff-4-sale.us",
+- "teaches-yoga.com",
+- "thruhere.net",
+- "traeumtgerade.de",
+- "webhop.biz",
+- "webhop.info",
+- "webhop.net",
+- "webhop.org",
+- "worse-than.tv",
+- "writesthisblog.com",
+- "github.io",
+- "appspot.com",
+- "blogspot.be",
+- "blogspot.bj",
+- "blogspot.ca",
+- "blogspot.cf",
+- "blogspot.ch",
+- "blogspot.co.at",
+- "blogspot.co.il",
+- "blogspot.co.nz",
+- "blogspot.co.uk",
+- "blogspot.com",
+- "blogspot.com.ar",
+- "blogspot.com.au",
+- "blogspot.com.br",
+- "blogspot.com.es",
+- "blogspot.cv",
+- "blogspot.cz",
+- "blogspot.de",
+- "blogspot.dk",
+- "blogspot.fi",
+- "blogspot.fr",
+- "blogspot.gr",
+- "blogspot.hk",
+- "blogspot.hu",
+- "blogspot.ie",
+- "blogspot.in",
+- "blogspot.it",
+- "blogspot.jp",
+- "blogspot.kr",
+- "blogspot.mr",
+- "blogspot.mx",
+- "blogspot.nl",
+- "blogspot.no",
+- "blogspot.pt",
+- "blogspot.re",
+- "blogspot.ro",
+- "blogspot.se",
+- "blogspot.sg",
+- "blogspot.sk",
+- "blogspot.td",
+- "blogspot.tw",
+- "codespot.com",
+- "googleapis.com",
+- "googlecode.com",
+- "iki.fi",
+- "biz.at",
+- "info.at",
+- "co.pl",
+- "nyc.mn",
+- "operaunite.com",
+- "rhcloud.com",
+- "priv.at",
+- "za.net",
+- "za.org",
+-}
+-
+-var nodeLabels = [...]string{
+- "ac",
+- "ad",
+- "ae",
+- "aero",
+- "af",
+- "ag",
+- "ai",
+- "al",
+- "am",
+- "an",
+- "ao",
+- "aq",
+- "ar",
+- "arpa",
+- "as",
+- "asia",
+- "at",
+- "au",
+- "aw",
+- "ax",
+- "az",
+- "ba",
+- "bb",
+- "bd",
+- "be",
+- "bf",
+- "bg",
+- "bh",
+- "bi",
+- "biz",
+- "bj",
+- "bm",
+- "bn",
+- "bo",
+- "br",
+- "bs",
+- "bt",
+- "bw",
+- "by",
+- "bz",
+- "ca",
+- "cat",
+- "cc",
+- "cd",
+- "cf",
+- "cg",
+- "ch",
+- "ci",
+- "ck",
+- "cl",
+- "cm",
+- "cn",
+- "co",
+- "com",
+- "coop",
+- "cr",
+- "cu",
+- "cv",
+- "cw",
+- "cx",
+- "cy",
+- "cz",
+- "de",
+- "dj",
+- "dk",
+- "dm",
+- "do",
+- "dz",
+- "ec",
+- "edu",
+- "ee",
+- "eg",
+- "er",
+- "es",
+- "et",
+- "eu",
+- "fi",
+- "fj",
+- "fk",
+- "fm",
+- "fo",
+- "fr",
+- "ga",
+- "gd",
+- "ge",
+- "gf",
+- "gg",
+- "gh",
+- "gi",
+- "gl",
+- "gm",
+- "gn",
+- "gov",
+- "gp",
+- "gq",
+- "gr",
+- "gs",
+- "gt",
+- "gu",
+- "gw",
+- "gy",
+- "hk",
+- "hm",
+- "hn",
+- "hr",
+- "ht",
+- "hu",
+- "id",
+- "ie",
+- "il",
+- "im",
+- "in",
+- "info",
+- "int",
+- "io",
+- "iq",
+- "ir",
+- "is",
+- "it",
+- "je",
+- "jm",
+- "jo",
+- "jobs",
+- "jp",
+- "ke",
+- "kg",
+- "kh",
+- "ki",
+- "km",
+- "kn",
+- "kp",
+- "kr",
+- "kw",
+- "ky",
+- "kz",
+- "la",
+- "lb",
+- "lc",
+- "li",
+- "lk",
+- "lr",
+- "ls",
+- "lt",
+- "lu",
+- "lv",
+- "ly",
+- "ma",
+- "mc",
+- "md",
+- "me",
+- "mg",
+- "mh",
+- "mil",
+- "mk",
+- "ml",
+- "mm",
+- "mn",
+- "mo",
+- "mobi",
+- "mp",
+- "mq",
+- "mr",
+- "ms",
+- "mt",
+- "mu",
+- "museum",
+- "mv",
+- "mw",
+- "mx",
+- "my",
+- "mz",
+- "na",
+- "name",
+- "nc",
+- "ne",
+- "net",
+- "nf",
+- "ng",
+- "ni",
+- "nl",
+- "no",
+- "np",
+- "nr",
+- "nu",
+- "nz",
+- "om",
+- "org",
+- "pa",
+- "pe",
+- "pf",
+- "pg",
+- "ph",
+- "pk",
+- "pl",
+- "pm",
+- "pn",
+- "post",
+- "pr",
+- "pro",
+- "ps",
+- "pt",
+- "pw",
+- "py",
+- "qa",
+- "re",
+- "ro",
+- "rs",
+- "ru",
+- "rw",
+- "sa",
+- "sb",
+- "sc",
+- "sd",
+- "se",
+- "sg",
+- "sh",
+- "si",
+- "sk",
+- "sl",
+- "sm",
+- "sn",
+- "so",
+- "sr",
+- "st",
+- "su",
+- "sv",
+- "sx",
+- "sy",
+- "sz",
+- "tc",
+- "td",
+- "tel",
+- "tf",
+- "tg",
+- "th",
+- "tj",
+- "tk",
+- "tl",
+- "tm",
+- "tn",
+- "to",
+- "tr",
+- "travel",
+- "tt",
+- "tv",
+- "tw",
+- "tz",
+- "ua",
+- "ug",
+- "uk",
+- "us",
+- "uy",
+- "uz",
+- "va",
+- "vc",
+- "ve",
+- "vg",
+- "vi",
+- "vn",
+- "vu",
+- "wf",
+- "ws",
+- "xn--3e0b707e",
+- "xn--45brj9c",
+- "xn--54b7fta0cc",
+- "xn--90a3ac",
+- "xn--clchc0ea0b2g2a9gcd",
+- "xn--fiqs8s",
+- "xn--fiqz9s",
+- "xn--fpcrj9c3d",
+- "xn--fzc2c9e2c",
+- "xn--gecrj9c",
+- "xn--h2brj9c",
+- "xn--j1amh",
+- "xn--j6w193g",
+- "xn--kprw13d",
+- "xn--kpry57d",
+- "xn--lgbbat1ad8j",
+- "xn--mgb2ddes",
+- "xn--mgb9awbf",
+- "xn--mgba3a4f16a",
+- "xn--mgba3a4fra",
+- "xn--mgbaam7a8h",
+- "xn--mgbayh7gpa",
+- "xn--mgbbh1a71e",
+- "xn--mgbc0a9azcg",
+- "xn--mgberp4a5d4a87g",
+- "xn--mgberp4a5d4ar",
+- "xn--mgbqly7c0a67fbc",
+- "xn--mgbqly7cvafr",
+- "xn--mgbtf8fl",
+- "xn--nnx388a",
+- "xn--node",
+- "xn--o3cw4h",
+- "xn--ogbpf8fl",
+- "xn--p1ai",
+- "xn--pgbs0dh",
+- "xn--s9brj9c",
+- "xn--wgbh1c",
+- "xn--wgbl6a",
+- "xn--xkc2al3hye2a",
+- "xn--xkc2dl3a5ee0h",
+- "xn--yfro4i67o",
+- "xn--ygbi2ammx",
+- "xxx",
+- "ye",
+- "yt",
+- "za",
+- "zm",
+- "zw",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "nom",
+- "ac",
+- "co",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "sch",
+- "accident-investigation",
+- "accident-prevention",
+- "aerobatic",
+- "aeroclub",
+- "aerodrome",
+- "agents",
+- "air-surveillance",
+- "air-traffic-control",
+- "aircraft",
+- "airline",
+- "airport",
+- "airtraffic",
+- "ambulance",
+- "amusement",
+- "association",
+- "author",
+- "ballooning",
+- "broker",
+- "caa",
+- "cargo",
+- "catering",
+- "certification",
+- "championship",
+- "charter",
+- "civilaviation",
+- "club",
+- "conference",
+- "consultant",
+- "consulting",
+- "control",
+- "council",
+- "crew",
+- "design",
+- "dgca",
+- "educator",
+- "emergency",
+- "engine",
+- "engineer",
+- "entertainment",
+- "equipment",
+- "exchange",
+- "express",
+- "federation",
+- "flight",
+- "freight",
+- "fuel",
+- "gliding",
+- "government",
+- "groundhandling",
+- "group",
+- "hanggliding",
+- "homebuilt",
+- "insurance",
+- "journal",
+- "journalist",
+- "leasing",
+- "logistics",
+- "magazine",
+- "maintenance",
+- "marketplace",
+- "media",
+- "microlight",
+- "modelling",
+- "navigation",
+- "parachuting",
+- "paragliding",
+- "passenger-association",
+- "pilot",
+- "press",
+- "production",
+- "recreation",
+- "repbody",
+- "res",
+- "research",
+- "rotorcraft",
+- "safety",
+- "scientist",
+- "services",
+- "show",
+- "skydiving",
+- "software",
+- "student",
+- "taxi",
+- "trader",
+- "trading",
+- "trainer",
+- "union",
+- "workinggroup",
+- "works",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "co",
+- "com",
+- "net",
+- "nom",
+- "org",
+- "com",
+- "net",
+- "off",
+- "org",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "com",
+- "edu",
+- "net",
+- "org",
+- "co",
+- "ed",
+- "gv",
+- "it",
+- "og",
+- "pb",
+- "com",
+- "congresodelalengua3",
+- "educ",
+- "gobiernoelectronico",
+- "mecon",
+- "nacion",
+- "nic",
+- "promocion",
+- "retina",
+- "uba",
+- "blogspot",
+- "e164",
+- "in-addr",
+- "ip6",
+- "iris",
+- "uri",
+- "urn",
+- "gov",
+- "ac",
+- "biz",
+- "co",
+- "gv",
+- "info",
+- "or",
+- "priv",
+- "blogspot",
+- "act",
+- "asn",
+- "com",
+- "conf",
+- "edu",
+- "gov",
+- "id",
+- "info",
+- "net",
+- "nsw",
+- "nt",
+- "org",
+- "oz",
+- "qld",
+- "sa",
+- "tas",
+- "vic",
+- "wa",
+- "blogspot",
+- "act",
+- "nsw",
+- "nt",
+- "qld",
+- "sa",
+- "tas",
+- "vic",
+- "wa",
+- "act",
+- "nt",
+- "qld",
+- "sa",
+- "tas",
+- "vic",
+- "wa",
+- "com",
+- "biz",
+- "com",
+- "edu",
+- "gov",
+- "info",
+- "int",
+- "mil",
+- "name",
+- "net",
+- "org",
+- "pp",
+- "pro",
+- "co",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "rs",
+- "unbi",
+- "unsa",
+- "biz",
+- "com",
+- "edu",
+- "gov",
+- "info",
+- "net",
+- "org",
+- "store",
+- "ac",
+- "blogspot",
+- "gov",
+- "0",
+- "1",
+- "2",
+- "3",
+- "4",
+- "5",
+- "6",
+- "7",
+- "8",
+- "9",
+- "a",
+- "b",
+- "c",
+- "d",
+- "e",
+- "f",
+- "g",
+- "h",
+- "i",
+- "j",
+- "k",
+- "l",
+- "m",
+- "n",
+- "o",
+- "p",
+- "q",
+- "r",
+- "s",
+- "t",
+- "u",
+- "v",
+- "w",
+- "x",
+- "y",
+- "z",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "co",
+- "com",
+- "edu",
+- "or",
+- "org",
+- "dyndns",
+- "for-better",
+- "for-more",
+- "for-some",
+- "for-the",
+- "selfip",
+- "webhop",
+- "asso",
+- "barreau",
+- "blogspot",
+- "gouv",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "com",
+- "edu",
+- "gob",
+- "gov",
+- "int",
+- "mil",
+- "net",
+- "org",
+- "tv",
+- "adm",
+- "adv",
+- "agr",
+- "am",
+- "arq",
+- "art",
+- "ato",
+- "b",
+- "bio",
+- "blog",
+- "bmd",
+- "cim",
+- "cng",
+- "cnt",
+- "com",
+- "coop",
+- "ecn",
+- "eco",
+- "edu",
+- "emp",
+- "eng",
+- "esp",
+- "etc",
+- "eti",
+- "far",
+- "flog",
+- "fm",
+- "fnd",
+- "fot",
+- "fst",
+- "g12",
+- "ggf",
+- "gov",
+- "imb",
+- "ind",
+- "inf",
+- "jor",
+- "jus",
+- "leg",
+- "lel",
+- "mat",
+- "med",
+- "mil",
+- "mus",
+- "net",
+- "nom",
+- "not",
+- "ntr",
+- "odo",
+- "org",
+- "ppg",
+- "pro",
+- "psc",
+- "psi",
+- "qsl",
+- "radio",
+- "rec",
+- "slg",
+- "srv",
+- "taxi",
+- "teo",
+- "tmp",
+- "trd",
+- "tur",
+- "tv",
+- "vet",
+- "vlog",
+- "wiki",
+- "zlg",
+- "blogspot",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "co",
+- "org",
+- "com",
+- "gov",
+- "mil",
+- "of",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "ab",
+- "bc",
+- "blogspot",
+- "co",
+- "gc",
+- "mb",
+- "nb",
+- "nf",
+- "nl",
+- "ns",
+- "nt",
+- "nu",
+- "on",
+- "pe",
+- "qc",
+- "sk",
+- "yk",
+- "ftpaccess",
+- "game-server",
+- "myphotos",
+- "scrapping",
+- "gov",
+- "blogspot",
+- "blogspot",
+- "ac",
+- "asso",
+- "co",
+- "com",
+- "ed",
+- "edu",
+- "go",
+- "gouv",
+- "int",
+- "md",
+- "net",
+- "or",
+- "org",
+- "presse",
+- "xn--aroport-bya",
+- "www",
+- "co",
+- "gob",
+- "gov",
+- "mil",
+- "gov",
+- "ac",
+- "ah",
+- "bj",
+- "com",
+- "cq",
+- "edu",
+- "fj",
+- "gd",
+- "gov",
+- "gs",
+- "gx",
+- "gz",
+- "ha",
+- "hb",
+- "he",
+- "hi",
+- "hk",
+- "hl",
+- "hn",
+- "jl",
+- "js",
+- "jx",
+- "ln",
+- "mil",
+- "mo",
+- "net",
+- "nm",
+- "nx",
+- "org",
+- "qh",
+- "sc",
+- "sd",
+- "sh",
+- "sn",
+- "sx",
+- "tj",
+- "tw",
+- "xj",
+- "xn--55qx5d",
+- "xn--io0a7i",
+- "xn--od0alg",
+- "xz",
+- "yn",
+- "zj",
+- "arts",
+- "com",
+- "edu",
+- "firm",
+- "gov",
+- "info",
+- "int",
+- "mil",
+- "net",
+- "nom",
+- "org",
+- "rec",
+- "web",
+- "amazonaws",
+- "appspot",
+- "ar",
+- "betainabox",
+- "blogdns",
+- "blogspot",
+- "br",
+- "cechire",
+- "cn",
+- "codespot",
+- "de",
+- "dnsalias",
+- "dnsdojo",
+- "doesntexist",
+- "dontexist",
+- "doomdns",
+- "dreamhosters",
+- "dyn-o-saur",
+- "dynalias",
+- "dyndns-at-home",
+- "dyndns-at-work",
+- "dyndns-blog",
+- "dyndns-free",
+- "dyndns-home",
+- "dyndns-ip",
+- "dyndns-mail",
+- "dyndns-office",
+- "dyndns-pics",
+- "dyndns-remote",
+- "dyndns-server",
+- "dyndns-web",
+- "dyndns-wiki",
+- "dyndns-work",
+- "elasticbeanstalk",
+- "est-a-la-maison",
+- "est-a-la-masion",
+- "est-le-patron",
+- "est-mon-blogueur",
+- "eu",
+- "from-ak",
+- "from-al",
+- "from-ar",
+- "from-ca",
+- "from-ct",
+- "from-dc",
+- "from-de",
+- "from-fl",
+- "from-ga",
+- "from-hi",
+- "from-ia",
+- "from-id",
+- "from-il",
+- "from-in",
+- "from-ks",
+- "from-ky",
+- "from-ma",
+- "from-md",
+- "from-mi",
+- "from-mn",
+- "from-mo",
+- "from-ms",
+- "from-mt",
+- "from-nc",
+- "from-nd",
+- "from-ne",
+- "from-nh",
+- "from-nj",
+- "from-nm",
+- "from-nv",
+- "from-oh",
+- "from-ok",
+- "from-or",
+- "from-pa",
+- "from-pr",
+- "from-ri",
+- "from-sc",
+- "from-sd",
+- "from-tn",
+- "from-tx",
+- "from-ut",
+- "from-va",
+- "from-vt",
+- "from-wa",
+- "from-wi",
+- "from-wv",
+- "from-wy",
+- "gb",
+- "getmyip",
+- "googleapis",
+- "googlecode",
+- "gotdns",
+- "gr",
+- "hobby-site",
+- "homelinux",
+- "homeunix",
+- "hu",
+- "iamallama",
+- "is-a-anarchist",
+- "is-a-blogger",
+- "is-a-bookkeeper",
+- "is-a-bulls-fan",
+- "is-a-caterer",
+- "is-a-chef",
+- "is-a-conservative",
+- "is-a-cpa",
+- "is-a-cubicle-slave",
+- "is-a-democrat",
+- "is-a-designer",
+- "is-a-doctor",
+- "is-a-financialadvisor",
+- "is-a-geek",
+- "is-a-green",
+- "is-a-guru",
+- "is-a-hard-worker",
+- "is-a-hunter",
+- "is-a-landscaper",
+- "is-a-lawyer",
+- "is-a-liberal",
+- "is-a-libertarian",
+- "is-a-llama",
+- "is-a-musician",
+- "is-a-nascarfan",
+- "is-a-nurse",
+- "is-a-painter",
+- "is-a-personaltrainer",
+- "is-a-photographer",
+- "is-a-player",
+- "is-a-republican",
+- "is-a-rockstar",
+- "is-a-socialist",
+- "is-a-student",
+- "is-a-teacher",
+- "is-a-techie",
+- "is-a-therapist",
+- "is-an-accountant",
+- "is-an-actor",
+- "is-an-actress",
+- "is-an-anarchist",
+- "is-an-artist",
+- "is-an-engineer",
+- "is-an-entertainer",
+- "is-certified",
+- "is-gone",
+- "is-into-anime",
+- "is-into-cars",
+- "is-into-cartoons",
+- "is-into-games",
+- "is-leet",
+- "is-not-certified",
+- "is-slick",
+- "is-uberleet",
+- "is-with-theband",
+- "isa-geek",
+- "isa-hockeynut",
+- "issmarterthanyou",
+- "jpn",
+- "kr",
+- "likes-pie",
+- "likescandy",
+- "neat-url",
+- "no",
+- "operaunite",
+- "qc",
+- "rhcloud",
+- "ru",
+- "sa",
+- "saves-the-whales",
+- "se",
+- "selfip",
+- "sells-for-less",
+- "sells-for-u",
+- "servebbs",
+- "simple-url",
+- "space-to-rent",
+- "teaches-yoga",
+- "uk",
+- "us",
+- "uy",
+- "writesthisblog",
+- "za",
+- "elb",
+- "s3",
+- "s3-ap-northeast-1",
+- "s3-ap-southeast-1",
+- "s3-ap-southeast-2",
+- "s3-eu-west-1",
+- "s3-fips-us-gov-west-1",
+- "s3-sa-east-1",
+- "s3-us-gov-west-1",
+- "s3-us-west-1",
+- "s3-us-west-2",
+- "s3-website-ap-northeast-1",
+- "s3-website-ap-southeast-1",
+- "s3-website-ap-southeast-2",
+- "s3-website-eu-west-1",
+- "s3-website-sa-east-1",
+- "s3-website-us-east-1",
+- "s3-website-us-gov-west-1",
+- "s3-website-us-west-1",
+- "s3-website-us-west-2",
+- "ac",
+- "co",
+- "ed",
+- "fi",
+- "go",
+- "or",
+- "sa",
+- "com",
+- "edu",
+- "gov",
+- "inf",
+- "net",
+- "org",
+- "blogspot",
+- "com",
+- "edu",
+- "net",
+- "org",
+- "ath",
+- "gov",
+- "blogspot",
+- "blogspot",
+- "com",
+- "fuettertdasnetz",
+- "isteingeek",
+- "istmein",
+- "lebtimnetz",
+- "leitungsen",
+- "traeumtgerade",
+- "blogspot",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "art",
+- "com",
+- "edu",
+- "gob",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "sld",
+- "web",
+- "art",
+- "asso",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "pol",
+- "com",
+- "edu",
+- "fin",
+- "gob",
+- "gov",
+- "info",
+- "k12",
+- "med",
+- "mil",
+- "net",
+- "org",
+- "pro",
+- "aip",
+- "com",
+- "edu",
+- "fie",
+- "gov",
+- "lib",
+- "med",
+- "org",
+- "pri",
+- "riik",
+- "com",
+- "edu",
+- "eun",
+- "gov",
+- "mil",
+- "name",
+- "net",
+- "org",
+- "sci",
+- "com",
+- "edu",
+- "gob",
+- "nom",
+- "org",
+- "blogspot",
+- "aland",
+- "blogspot",
+- "iki",
+- "aeroport",
+- "assedic",
+- "asso",
+- "avocat",
+- "avoues",
+- "blogspot",
+- "cci",
+- "chambagri",
+- "chirurgiens-dentistes",
+- "com",
+- "experts-comptables",
+- "geometre-expert",
+- "gouv",
+- "greta",
+- "huissier-justice",
+- "medecin",
+- "nom",
+- "notaires",
+- "pharmacien",
+- "port",
+- "prd",
+- "presse",
+- "tm",
+- "veterinaire",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "pvt",
+- "co",
+- "gov",
+- "net",
+- "org",
+- "sch",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "org",
+- "com",
+- "edu",
+- "gov",
+- "ltd",
+- "mod",
+- "org",
+- "ac",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "asso",
+- "com",
+- "edu",
+- "mobi",
+- "net",
+- "org",
+- "blogspot",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "com",
+- "edu",
+- "gob",
+- "ind",
+- "mil",
+- "net",
+- "org",
+- "co",
+- "com",
+- "net",
+- "blogspot",
+- "com",
+- "edu",
+- "gov",
+- "idv",
+- "net",
+- "org",
+- "xn--55qx5d",
+- "xn--ciqpn",
+- "xn--gmq050i",
+- "xn--gmqw5a",
+- "xn--io0a7i",
+- "xn--lcvr32d",
+- "xn--mk0axi",
+- "xn--mxtq1m",
+- "xn--od0alg",
+- "xn--od0aq3b",
+- "xn--tn0ag",
+- "xn--uc0atv",
+- "xn--uc0ay4a",
+- "xn--wcvs22d",
+- "xn--zf0avx",
+- "com",
+- "edu",
+- "gob",
+- "mil",
+- "net",
+- "org",
+- "com",
+- "from",
+- "iz",
+- "name",
+- "adult",
+- "art",
+- "asso",
+- "com",
+- "coop",
+- "edu",
+- "firm",
+- "gouv",
+- "info",
+- "med",
+- "net",
+- "org",
+- "perso",
+- "pol",
+- "pro",
+- "rel",
+- "shop",
+- "2000",
+- "agrar",
+- "blogspot",
+- "bolt",
+- "casino",
+- "city",
+- "co",
+- "erotica",
+- "erotika",
+- "film",
+- "forum",
+- "games",
+- "hotel",
+- "info",
+- "ingatlan",
+- "jogasz",
+- "konyvelo",
+- "lakas",
+- "media",
+- "news",
+- "org",
+- "priv",
+- "reklam",
+- "sex",
+- "shop",
+- "sport",
+- "suli",
+- "szex",
+- "tm",
+- "tozsde",
+- "utazas",
+- "video",
+- "ac",
+- "biz",
+- "co",
+- "go",
+- "mil",
+- "my",
+- "net",
+- "or",
+- "sch",
+- "web",
+- "blogspot",
+- "gov",
+- "co",
+- "blogspot",
+- "ac",
+- "co",
+- "gov",
+- "net",
+- "nic",
+- "org",
+- "ltd",
+- "plc",
+- "ac",
+- "blogspot",
+- "co",
+- "edu",
+- "firm",
+- "gen",
+- "gov",
+- "ind",
+- "mil",
+- "net",
+- "nic",
+- "org",
+- "res",
+- "barrel-of-knowledge",
+- "barrell-of-knowledge",
+- "dyndns",
+- "for-our",
+- "groks-the",
+- "groks-this",
+- "here-for-more",
+- "knowsitall",
+- "selfip",
+- "webhop",
+- "eu",
+- "com",
+- "github",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "ac",
+- "co",
+- "gov",
+- "id",
+- "net",
+- "org",
+- "sch",
+- "xn--mgba3a4f16a",
+- "xn--mgba3a4fra",
+- "com",
+- "edu",
+- "gov",
+- "int",
+- "net",
+- "org",
+- "ag",
+- "agrigento",
+- "al",
+- "alessandria",
+- "alto-adige",
+- "altoadige",
+- "an",
+- "ancona",
+- "andria-barletta-trani",
+- "andria-trani-barletta",
+- "andriabarlettatrani",
+- "andriatranibarletta",
+- "ao",
+- "aosta",
+- "aoste",
+- "ap",
+- "aq",
+- "aquila",
+- "ar",
+- "arezzo",
+- "ascoli-piceno",
+- "ascolipiceno",
+- "asti",
+- "at",
+- "av",
+- "avellino",
+- "ba",
+- "balsan",
+- "bari",
+- "barletta-trani-andria",
+- "barlettatraniandria",
+- "belluno",
+- "benevento",
+- "bergamo",
+- "bg",
+- "bi",
+- "biella",
+- "bl",
+- "blogspot",
+- "bn",
+- "bo",
+- "bologna",
+- "bolzano",
+- "bozen",
+- "br",
+- "brescia",
+- "brindisi",
+- "bs",
+- "bt",
+- "bz",
+- "ca",
+- "cagliari",
+- "caltanissetta",
+- "campidano-medio",
+- "campidanomedio",
+- "campobasso",
+- "carbonia-iglesias",
+- "carboniaiglesias",
+- "carrara-massa",
+- "carraramassa",
+- "caserta",
+- "catania",
+- "catanzaro",
+- "cb",
+- "ce",
+- "cesena-forli",
+- "cesenaforli",
+- "ch",
+- "chieti",
+- "ci",
+- "cl",
+- "cn",
+- "co",
+- "como",
+- "cosenza",
+- "cr",
+- "cremona",
+- "crotone",
+- "cs",
+- "ct",
+- "cuneo",
+- "cz",
+- "dell-ogliastra",
+- "dellogliastra",
+- "edu",
+- "en",
+- "enna",
+- "fc",
+- "fe",
+- "fermo",
+- "ferrara",
+- "fg",
+- "fi",
+- "firenze",
+- "florence",
+- "fm",
+- "foggia",
+- "forli-cesena",
+- "forlicesena",
+- "fr",
+- "frosinone",
+- "ge",
+- "genoa",
+- "genova",
+- "go",
+- "gorizia",
+- "gov",
+- "gr",
+- "grosseto",
+- "iglesias-carbonia",
+- "iglesiascarbonia",
+- "im",
+- "imperia",
+- "is",
+- "isernia",
+- "kr",
+- "la-spezia",
+- "laquila",
+- "laspezia",
+- "latina",
+- "lc",
+- "le",
+- "lecce",
+- "lecco",
+- "li",
+- "livorno",
+- "lo",
+- "lodi",
+- "lt",
+- "lu",
+- "lucca",
+- "macerata",
+- "mantova",
+- "massa-carrara",
+- "massacarrara",
+- "matera",
+- "mb",
+- "mc",
+- "me",
+- "medio-campidano",
+- "mediocampidano",
+- "messina",
+- "mi",
+- "milan",
+- "milano",
+- "mn",
+- "mo",
+- "modena",
+- "monza",
+- "monza-brianza",
+- "monza-e-della-brianza",
+- "monzabrianza",
+- "monzaebrianza",
+- "monzaedellabrianza",
+- "ms",
+- "mt",
+- "na",
+- "naples",
+- "napoli",
+- "no",
+- "novara",
+- "nu",
+- "nuoro",
+- "og",
+- "ogliastra",
+- "olbia-tempio",
+- "olbiatempio",
+- "or",
+- "oristano",
+- "ot",
+- "pa",
+- "padova",
+- "padua",
+- "palermo",
+- "parma",
+- "pavia",
+- "pc",
+- "pd",
+- "pe",
+- "perugia",
+- "pesaro-urbino",
+- "pesarourbino",
+- "pescara",
+- "pg",
+- "pi",
+- "piacenza",
+- "pisa",
+- "pistoia",
+- "pn",
+- "po",
+- "pordenone",
+- "potenza",
+- "pr",
+- "prato",
+- "pt",
+- "pu",
+- "pv",
+- "pz",
+- "ra",
+- "ragusa",
+- "ravenna",
+- "rc",
+- "re",
+- "reggio-calabria",
+- "reggio-emilia",
+- "reggiocalabria",
+- "reggioemilia",
+- "rg",
+- "ri",
+- "rieti",
+- "rimini",
+- "rm",
+- "rn",
+- "ro",
+- "roma",
+- "rome",
+- "rovigo",
+- "sa",
+- "salerno",
+- "sassari",
+- "savona",
+- "si",
+- "siena",
+- "siracusa",
+- "so",
+- "sondrio",
+- "sp",
+- "sr",
+- "ss",
+- "suedtirol",
+- "sv",
+- "ta",
+- "taranto",
+- "te",
+- "tempio-olbia",
+- "tempioolbia",
+- "teramo",
+- "terni",
+- "tn",
+- "to",
+- "torino",
+- "tp",
+- "tr",
+- "trani-andria-barletta",
+- "trani-barletta-andria",
+- "traniandriabarletta",
+- "tranibarlettaandria",
+- "trapani",
+- "trentino",
+- "trento",
+- "treviso",
+- "trieste",
+- "ts",
+- "turin",
+- "tv",
+- "ud",
+- "udine",
+- "urbino-pesaro",
+- "urbinopesaro",
+- "va",
+- "varese",
+- "vb",
+- "vc",
+- "ve",
+- "venezia",
+- "venice",
+- "verbania",
+- "vercelli",
+- "verona",
+- "vi",
+- "vibo-valentia",
+- "vibovalentia",
+- "vicenza",
+- "viterbo",
+- "vr",
+- "vs",
+- "vt",
+- "vv",
+- "co",
+- "gov",
+- "net",
+- "org",
+- "sch",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "name",
+- "net",
+- "org",
+- "sch",
+- "ac",
+- "ad",
+- "aichi",
+- "akita",
+- "aomori",
+- "blogspot",
+- "chiba",
+- "co",
+- "ed",
+- "ehime",
+- "fukui",
+- "fukuoka",
+- "fukushima",
+- "gifu",
+- "go",
+- "gr",
+- "gunma",
+- "hiroshima",
+- "hokkaido",
+- "hyogo",
+- "ibaraki",
+- "ishikawa",
+- "iwate",
+- "kagawa",
+- "kagoshima",
+- "kanagawa",
+- "kawasaki",
+- "kitakyushu",
+- "kobe",
+- "kochi",
+- "kumamoto",
+- "kyoto",
+- "lg",
+- "mie",
+- "miyagi",
+- "miyazaki",
+- "nagano",
+- "nagasaki",
+- "nagoya",
+- "nara",
+- "ne",
+- "niigata",
+- "oita",
+- "okayama",
+- "okinawa",
+- "or",
+- "osaka",
+- "saga",
+- "saitama",
+- "sapporo",
+- "sendai",
+- "shiga",
+- "shimane",
+- "shizuoka",
+- "tochigi",
+- "tokushima",
+- "tokyo",
+- "tottori",
+- "toyama",
+- "wakayama",
+- "yamagata",
+- "yamaguchi",
+- "yamanashi",
+- "yokohama",
+- "aisai",
+- "ama",
+- "anjo",
+- "asuke",
+- "chiryu",
+- "chita",
+- "fuso",
+- "gamagori",
+- "handa",
+- "hazu",
+- "hekinan",
+- "higashiura",
+- "ichinomiya",
+- "inazawa",
+- "inuyama",
+- "isshiki",
+- "iwakura",
+- "kanie",
+- "kariya",
+- "kasugai",
+- "kira",
+- "kiyosu",
+- "komaki",
+- "konan",
+- "kota",
+- "mihama",
+- "miyoshi",
+- "nagakute",
+- "nishio",
+- "nisshin",
+- "obu",
+- "oguchi",
+- "oharu",
+- "okazaki",
+- "owariasahi",
+- "seto",
+- "shikatsu",
+- "shinshiro",
+- "shitara",
+- "tahara",
+- "takahama",
+- "tobishima",
+- "toei",
+- "togo",
+- "tokai",
+- "tokoname",
+- "toyoake",
+- "toyohashi",
+- "toyokawa",
+- "toyone",
+- "toyota",
+- "tsushima",
+- "yatomi",
+- "akita",
+- "daisen",
+- "fujisato",
+- "gojome",
+- "hachirogata",
+- "happou",
+- "higashinaruse",
+- "honjo",
+- "honjyo",
+- "ikawa",
+- "kamikoani",
+- "kamioka",
+- "katagami",
+- "kazuno",
+- "kitaakita",
+- "kosaka",
+- "kyowa",
+- "misato",
+- "mitane",
+- "moriyoshi",
+- "nikaho",
+- "noshiro",
+- "odate",
+- "oga",
+- "ogata",
+- "semboku",
+- "yokote",
+- "yurihonjo",
+- "aomori",
+- "gonohe",
+- "hachinohe",
+- "hashikami",
+- "hiranai",
+- "hirosaki",
+- "itayanagi",
+- "kuroishi",
+- "misawa",
+- "mutsu",
+- "nakadomari",
+- "noheji",
+- "oirase",
+- "owani",
+- "rokunohe",
+- "sannohe",
+- "shichinohe",
+- "shingo",
+- "takko",
+- "towada",
+- "tsugaru",
+- "tsuruta",
+- "abiko",
+- "asahi",
+- "chonan",
+- "chosei",
+- "choshi",
+- "chuo",
+- "funabashi",
+- "futtsu",
+- "hanamigawa",
+- "ichihara",
+- "ichikawa",
+- "ichinomiya",
+- "inzai",
+- "isumi",
+- "kamagaya",
+- "kamogawa",
+- "kashiwa",
+- "katori",
+- "katsuura",
+- "kimitsu",
+- "kisarazu",
+- "kozaki",
+- "kujukuri",
+- "kyonan",
+- "matsudo",
+- "midori",
+- "mihama",
+- "minamiboso",
+- "mobara",
+- "mutsuzawa",
+- "nagara",
+- "nagareyama",
+- "narashino",
+- "narita",
+- "noda",
+- "oamishirasato",
+- "omigawa",
+- "onjuku",
+- "otaki",
+- "sakae",
+- "sakura",
+- "shimofusa",
+- "shirako",
+- "shiroi",
+- "shisui",
+- "sodegaura",
+- "sosa",
+- "tako",
+- "tateyama",
+- "togane",
+- "tohnosho",
+- "tomisato",
+- "urayasu",
+- "yachimata",
+- "yachiyo",
+- "yokaichiba",
+- "yokoshibahikari",
+- "yotsukaido",
+- "ainan",
+- "honai",
+- "ikata",
+- "imabari",
+- "iyo",
+- "kamijima",
+- "kihoku",
+- "kumakogen",
+- "masaki",
+- "matsuno",
+- "matsuyama",
+- "namikata",
+- "niihama",
+- "ozu",
+- "saijo",
+- "seiyo",
+- "shikokuchuo",
+- "tobe",
+- "toon",
+- "uchiko",
+- "uwajima",
+- "yawatahama",
+- "echizen",
+- "eiheiji",
+- "fukui",
+- "ikeda",
+- "katsuyama",
+- "mihama",
+- "minamiechizen",
+- "obama",
+- "ohi",
+- "ono",
+- "sabae",
+- "sakai",
+- "takahama",
+- "tsuruga",
+- "wakasa",
+- "ashiya",
+- "buzen",
+- "chikugo",
+- "chikuho",
+- "chikujo",
+- "chikushino",
+- "chikuzen",
+- "chuo",
+- "dazaifu",
+- "fukuchi",
+- "hakata",
+- "higashi",
+- "hirokawa",
+- "hisayama",
+- "iizuka",
+- "inatsuki",
+- "kaho",
+- "kasuga",
+- "kasuya",
+- "kawara",
+- "keisen",
+- "koga",
+- "kurate",
+- "kurogi",
+- "kurume",
+- "minami",
+- "miyako",
+- "miyama",
+- "miyawaka",
+- "mizumaki",
+- "munakata",
+- "nakagawa",
+- "nakama",
+- "nishi",
+- "nogata",
+- "ogori",
+- "okagaki",
+- "okawa",
+- "oki",
+- "omuta",
+- "onga",
+- "onojo",
+- "oto",
+- "saigawa",
+- "sasaguri",
+- "shingu",
+- "shinyoshitomi",
+- "shonai",
+- "soeda",
+- "sue",
+- "tachiarai",
+- "tagawa",
+- "takata",
+- "toho",
+- "toyotsu",
+- "tsuiki",
+- "ukiha",
+- "umi",
+- "usui",
+- "yamada",
+- "yame",
+- "yanagawa",
+- "yukuhashi",
+- "aizubange",
+- "aizumisato",
+- "aizuwakamatsu",
+- "asakawa",
+- "bandai",
+- "date",
+- "fukushima",
+- "furudono",
+- "futaba",
+- "hanawa",
+- "higashi",
+- "hirata",
+- "hirono",
+- "iitate",
+- "inawashiro",
+- "ishikawa",
+- "iwaki",
+- "izumizaki",
+- "kagamiishi",
+- "kaneyama",
+- "kawamata",
+- "kitakata",
+- "kitashiobara",
+- "koori",
+- "koriyama",
+- "kunimi",
+- "miharu",
+- "mishima",
+- "namie",
+- "nango",
+- "nishiaizu",
+- "nishigo",
+- "okuma",
+- "omotego",
+- "ono",
+- "otama",
+- "samegawa",
+- "shimogo",
+- "shirakawa",
+- "showa",
+- "soma",
+- "sukagawa",
+- "taishin",
+- "tamakawa",
+- "tanagura",
+- "tenei",
+- "yabuki",
+- "yamato",
+- "yamatsuri",
+- "yanaizu",
+- "yugawa",
+- "anpachi",
+- "ena",
+- "gifu",
+- "ginan",
+- "godo",
+- "gujo",
+- "hashima",
+- "hichiso",
+- "hida",
+- "higashishirakawa",
+- "ibigawa",
+- "ikeda",
+- "kakamigahara",
+- "kani",
+- "kasahara",
+- "kasamatsu",
+- "kawaue",
+- "kitagata",
+- "mino",
+- "minokamo",
+- "mitake",
+- "mizunami",
+- "motosu",
+- "nakatsugawa",
+- "ogaki",
+- "sakahogi",
+- "seki",
+- "sekigahara",
+- "shirakawa",
+- "tajimi",
+- "takayama",
+- "tarui",
+- "toki",
+- "tomika",
+- "wanouchi",
+- "yamagata",
+- "yaotsu",
+- "yoro",
+- "annaka",
+- "chiyoda",
+- "fujioka",
+- "higashiagatsuma",
+- "isesaki",
+- "itakura",
+- "kanna",
+- "kanra",
+- "katashina",
+- "kawaba",
+- "kiryu",
+- "kusatsu",
+- "maebashi",
+- "meiwa",
+- "midori",
+- "minakami",
+- "naganohara",
+- "nakanojo",
+- "nanmoku",
+- "numata",
+- "oizumi",
+- "ora",
+- "ota",
+- "shibukawa",
+- "shimonita",
+- "shinto",
+- "showa",
+- "takasaki",
+- "takayama",
+- "tamamura",
+- "tatebayashi",
+- "tomioka",
+- "tsukiyono",
+- "tsumagoi",
+- "ueno",
+- "yoshioka",
+- "asaminami",
+- "daiwa",
+- "etajima",
+- "fuchu",
+- "fukuyama",
+- "hatsukaichi",
+- "higashihiroshima",
+- "hongo",
+- "jinsekikogen",
+- "kaita",
+- "kui",
+- "kumano",
+- "kure",
+- "mihara",
+- "miyoshi",
+- "naka",
+- "onomichi",
+- "osakikamijima",
+- "otake",
+- "saka",
+- "sera",
+- "seranishi",
+- "shinichi",
+- "shobara",
+- "takehara",
+- "abashiri",
+- "abira",
+- "aibetsu",
+- "akabira",
+- "akkeshi",
+- "asahikawa",
+- "ashibetsu",
+- "ashoro",
+- "assabu",
+- "atsuma",
+- "bibai",
+- "biei",
+- "bifuka",
+- "bihoro",
+- "biratori",
+- "chippubetsu",
+- "chitose",
+- "date",
+- "ebetsu",
+- "embetsu",
+- "eniwa",
+- "erimo",
+- "esan",
+- "esashi",
+- "fukagawa",
+- "fukushima",
+- "furano",
+- "furubira",
+- "haboro",
+- "hakodate",
+- "hamatonbetsu",
+- "hidaka",
+- "higashikagura",
+- "higashikawa",
+- "hiroo",
+- "hokuryu",
+- "hokuto",
+- "honbetsu",
+- "horokanai",
+- "horonobe",
+- "ikeda",
+- "imakane",
+- "ishikari",
+- "iwamizawa",
+- "iwanai",
+- "kamifurano",
+- "kamikawa",
+- "kamishihoro",
+- "kamisunagawa",
+- "kamoenai",
+- "kayabe",
+- "kembuchi",
+- "kikonai",
+- "kimobetsu",
+- "kitahiroshima",
+- "kitami",
+- "kiyosato",
+- "koshimizu",
+- "kunneppu",
+- "kuriyama",
+- "kuromatsunai",
+- "kushiro",
+- "kutchan",
+- "kyowa",
+- "mashike",
+- "matsumae",
+- "mikasa",
+- "minamifurano",
+- "mombetsu",
+- "moseushi",
+- "mukawa",
+- "muroran",
+- "naie",
+- "nakagawa",
+- "nakasatsunai",
+- "nakatombetsu",
+- "nanae",
+- "nanporo",
+- "nayoro",
+- "nemuro",
+- "niikappu",
+- "niki",
+- "nishiokoppe",
+- "noboribetsu",
+- "numata",
+- "obihiro",
+- "obira",
+- "oketo",
+- "okoppe",
+- "otaru",
+- "otobe",
+- "otofuke",
+- "otoineppu",
+- "oumu",
+- "ozora",
+- "pippu",
+- "rankoshi",
+- "rebun",
+- "rikubetsu",
+- "rishiri",
+- "rishirifuji",
+- "saroma",
+- "sarufutsu",
+- "shakotan",
+- "shari",
+- "shibecha",
+- "shibetsu",
+- "shikabe",
+- "shikaoi",
+- "shimamaki",
+- "shimizu",
+- "shimokawa",
+- "shinshinotsu",
+- "shintoku",
+- "shiranuka",
+- "shiraoi",
+- "shiriuchi",
+- "sobetsu",
+- "sunagawa",
+- "taiki",
+- "takasu",
+- "takikawa",
+- "takinoue",
+- "teshikaga",
+- "tobetsu",
+- "tohma",
+- "tomakomai",
+- "tomari",
+- "toya",
+- "toyako",
+- "toyotomi",
+- "toyoura",
+- "tsubetsu",
+- "tsukigata",
+- "urakawa",
+- "urausu",
+- "uryu",
+- "utashinai",
+- "wakkanai",
+- "wassamu",
+- "yakumo",
+- "yoichi",
+- "aioi",
+- "akashi",
+- "ako",
+- "amagasaki",
+- "aogaki",
+- "asago",
+- "ashiya",
+- "awaji",
+- "fukusaki",
+- "goshiki",
+- "harima",
+- "himeji",
+- "ichikawa",
+- "inagawa",
+- "itami",
+- "kakogawa",
+- "kamigori",
+- "kamikawa",
+- "kasai",
+- "kasuga",
+- "kawanishi",
+- "miki",
+- "minamiawaji",
+- "nishinomiya",
+- "nishiwaki",
+- "ono",
+- "sanda",
+- "sannan",
+- "sasayama",
+- "sayo",
+- "shingu",
+- "shinonsen",
+- "shiso",
+- "sumoto",
+- "taishi",
+- "taka",
+- "takarazuka",
+- "takasago",
+- "takino",
+- "tamba",
+- "tatsuno",
+- "toyooka",
+- "yabu",
+- "yashiro",
+- "yoka",
+- "yokawa",
+- "ami",
+- "asahi",
+- "bando",
+- "chikusei",
+- "daigo",
+- "fujishiro",
+- "hitachi",
+- "hitachinaka",
+- "hitachiomiya",
+- "hitachiota",
+- "ibaraki",
+- "ina",
+- "inashiki",
+- "itako",
+- "iwama",
+- "joso",
+- "kamisu",
+- "kasama",
+- "kashima",
+- "kasumigaura",
+- "koga",
+- "miho",
+- "mito",
+- "moriya",
+- "naka",
+- "namegata",
+- "oarai",
+- "ogawa",
+- "omitama",
+- "ryugasaki",
+- "sakai",
+- "sakuragawa",
+- "shimodate",
+- "shimotsuma",
+- "shirosato",
+- "sowa",
+- "suifu",
+- "takahagi",
+- "tamatsukuri",
+- "tokai",
+- "tomobe",
+- "tone",
+- "toride",
+- "tsuchiura",
+- "tsukuba",
+- "uchihara",
+- "ushiku",
+- "yachiyo",
+- "yamagata",
+- "yawara",
+- "yuki",
+- "anamizu",
+- "hakui",
+- "hakusan",
+- "kaga",
+- "kahoku",
+- "kanazawa",
+- "kawakita",
+- "komatsu",
+- "nakanoto",
+- "nanao",
+- "nomi",
+- "nonoichi",
+- "noto",
+- "shika",
+- "suzu",
+- "tsubata",
+- "tsurugi",
+- "uchinada",
+- "wajima",
+- "fudai",
+- "fujisawa",
+- "hanamaki",
+- "hiraizumi",
+- "hirono",
+- "ichinohe",
+- "ichinoseki",
+- "iwaizumi",
+- "iwate",
+- "joboji",
+- "kamaishi",
+- "kanegasaki",
+- "karumai",
+- "kawai",
+- "kitakami",
+- "kuji",
+- "kunohe",
+- "kuzumaki",
+- "miyako",
+- "mizusawa",
+- "morioka",
+- "ninohe",
+- "noda",
+- "ofunato",
+- "oshu",
+- "otsuchi",
+- "rikuzentakata",
+- "shiwa",
+- "shizukuishi",
+- "sumita",
+- "takizawa",
+- "tanohata",
+- "tono",
+- "yahaba",
+- "yamada",
+- "ayagawa",
+- "higashikagawa",
+- "kanonji",
+- "kotohira",
+- "manno",
+- "marugame",
+- "mitoyo",
+- "naoshima",
+- "sanuki",
+- "tadotsu",
+- "takamatsu",
+- "tonosho",
+- "uchinomi",
+- "utazu",
+- "zentsuji",
+- "akune",
+- "amami",
+- "hioki",
+- "isa",
+- "isen",
+- "izumi",
+- "kagoshima",
+- "kanoya",
+- "kawanabe",
+- "kinko",
+- "kouyama",
+- "makurazaki",
+- "matsumoto",
+- "minamitane",
+- "nakatane",
+- "nishinoomote",
+- "satsumasendai",
+- "soo",
+- "tarumizu",
+- "yusui",
+- "aikawa",
+- "atsugi",
+- "ayase",
+- "chigasaki",
+- "ebina",
+- "fujisawa",
+- "hadano",
+- "hakone",
+- "hiratsuka",
+- "isehara",
+- "kaisei",
+- "kamakura",
+- "kiyokawa",
+- "matsuda",
+- "minamiashigara",
+- "miura",
+- "nakai",
+- "ninomiya",
+- "odawara",
+- "oi",
+- "oiso",
+- "sagamihara",
+- "samukawa",
+- "tsukui",
+- "yamakita",
+- "yamato",
+- "yokosuka",
+- "yugawara",
+- "zama",
+- "zushi",
+- "city",
+- "city",
+- "city",
+- "aki",
+- "geisei",
+- "hidaka",
+- "higashitsuno",
+- "ino",
+- "kagami",
+- "kami",
+- "kitagawa",
+- "kochi",
+- "mihara",
+- "motoyama",
+- "muroto",
+- "nahari",
+- "nakamura",
+- "nankoku",
+- "nishitosa",
+- "niyodogawa",
+- "ochi",
+- "okawa",
+- "otoyo",
+- "otsuki",
+- "sakawa",
+- "sukumo",
+- "susaki",
+- "tosa",
+- "tosashimizu",
+- "toyo",
+- "tsuno",
+- "umaji",
+- "yasuda",
+- "yusuhara",
+- "amakusa",
+- "arao",
+- "aso",
+- "choyo",
+- "gyokuto",
+- "hitoyoshi",
+- "kamiamakusa",
+- "kashima",
+- "kikuchi",
+- "kosa",
+- "kumamoto",
+- "mashiki",
+- "mifune",
+- "minamata",
+- "minamioguni",
+- "nagasu",
+- "nishihara",
+- "oguni",
+- "ozu",
+- "sumoto",
+- "takamori",
+- "uki",
+- "uto",
+- "yamaga",
+- "yamato",
+- "yatsushiro",
+- "ayabe",
+- "fukuchiyama",
+- "higashiyama",
+- "ide",
+- "ine",
+- "joyo",
+- "kameoka",
+- "kamo",
+- "kita",
+- "kizu",
+- "kumiyama",
+- "kyotamba",
+- "kyotanabe",
+- "kyotango",
+- "maizuru",
+- "minami",
+- "minamiyamashiro",
+- "miyazu",
+- "muko",
+- "nagaokakyo",
+- "nakagyo",
+- "nantan",
+- "oyamazaki",
+- "sakyo",
+- "seika",
+- "tanabe",
+- "uji",
+- "ujitawara",
+- "wazuka",
+- "yamashina",
+- "yawata",
+- "asahi",
+- "inabe",
+- "ise",
+- "kameyama",
+- "kawagoe",
+- "kiho",
+- "kisosaki",
+- "kiwa",
+- "komono",
+- "kumano",
+- "kuwana",
+- "matsusaka",
+- "meiwa",
+- "mihama",
+- "minamiise",
+- "misugi",
+- "miyama",
+- "nabari",
+- "shima",
+- "suzuka",
+- "tado",
+- "taiki",
+- "taki",
+- "tamaki",
+- "toba",
+- "tsu",
+- "udono",
+- "ureshino",
+- "watarai",
+- "yokkaichi",
+- "furukawa",
+- "higashimatsushima",
+- "ishinomaki",
+- "iwanuma",
+- "kakuda",
+- "kami",
+- "kawasaki",
+- "kesennuma",
+- "marumori",
+- "matsushima",
+- "minamisanriku",
+- "misato",
+- "murata",
+- "natori",
+- "ogawara",
+- "ohira",
+- "onagawa",
+- "osaki",
+- "rifu",
+- "semine",
+- "shibata",
+- "shichikashuku",
+- "shikama",
+- "shiogama",
+- "shiroishi",
+- "tagajo",
+- "taiwa",
+- "tome",
+- "tomiya",
+- "wakuya",
+- "watari",
+- "yamamoto",
+- "zao",
+- "aya",
+- "ebino",
+- "gokase",
+- "hyuga",
+- "kadogawa",
+- "kawaminami",
+- "kijo",
+- "kitagawa",
+- "kitakata",
+- "kitaura",
+- "kobayashi",
+- "kunitomi",
+- "kushima",
+- "mimata",
+- "miyakonojo",
+- "miyazaki",
+- "morotsuka",
+- "nichinan",
+- "nishimera",
+- "nobeoka",
+- "saito",
+- "shiiba",
+- "shintomi",
+- "takaharu",
+- "takanabe",
+- "takazaki",
+- "tsuno",
+- "achi",
+- "agematsu",
+- "anan",
+- "aoki",
+- "asahi",
+- "azumino",
+- "chikuhoku",
+- "chikuma",
+- "chino",
+- "fujimi",
+- "hakuba",
+- "hara",
+- "hiraya",
+- "iida",
+- "iijima",
+- "iiyama",
+- "iizuna",
+- "ikeda",
+- "ikusaka",
+- "ina",
+- "karuizawa",
+- "kawakami",
+- "kiso",
+- "kisofukushima",
+- "kitaaiki",
+- "komagane",
+- "komoro",
+- "matsukawa",
+- "matsumoto",
+- "miasa",
+- "minamiaiki",
+- "minamimaki",
+- "minamiminowa",
+- "minowa",
+- "miyada",
+- "miyota",
+- "mochizuki",
+- "nagano",
+- "nagawa",
+- "nagiso",
+- "nakagawa",
+- "nakano",
+- "nozawaonsen",
+- "obuse",
+- "ogawa",
+- "okaya",
+- "omachi",
+- "omi",
+- "ookuwa",
+- "ooshika",
+- "otaki",
+- "otari",
+- "sakae",
+- "sakaki",
+- "saku",
+- "sakuho",
+- "shimosuwa",
+- "shinanomachi",
+- "shiojiri",
+- "suwa",
+- "suzaka",
+- "takagi",
+- "takamori",
+- "takayama",
+- "tateshina",
+- "tatsuno",
+- "togakushi",
+- "togura",
+- "tomi",
+- "ueda",
+- "wada",
+- "yamagata",
+- "yamanouchi",
+- "yasaka",
+- "yasuoka",
+- "chijiwa",
+- "futsu",
+- "goto",
+- "hasami",
+- "hirado",
+- "iki",
+- "isahaya",
+- "kawatana",
+- "kuchinotsu",
+- "matsuura",
+- "nagasaki",
+- "obama",
+- "omura",
+- "oseto",
+- "saikai",
+- "sasebo",
+- "seihi",
+- "shimabara",
+- "shinkamigoto",
+- "togitsu",
+- "tsushima",
+- "unzen",
+- "city",
+- "ando",
+- "gose",
+- "heguri",
+- "higashiyoshino",
+- "ikaruga",
+- "ikoma",
+- "kamikitayama",
+- "kanmaki",
+- "kashiba",
+- "kashihara",
+- "katsuragi",
+- "kawai",
+- "kawakami",
+- "kawanishi",
+- "koryo",
+- "kurotaki",
+- "mitsue",
+- "miyake",
+- "nara",
+- "nosegawa",
+- "oji",
+- "ouda",
+- "oyodo",
+- "sakurai",
+- "sango",
+- "shimoichi",
+- "shimokitayama",
+- "shinjo",
+- "soni",
+- "takatori",
+- "tawaramoto",
+- "tenkawa",
+- "tenri",
+- "uda",
+- "yamatokoriyama",
+- "yamatotakada",
+- "yamazoe",
+- "yoshino",
+- "aga",
+- "agano",
+- "gosen",
+- "itoigawa",
+- "izumozaki",
+- "joetsu",
+- "kamo",
+- "kariwa",
+- "kashiwazaki",
+- "minamiuonuma",
+- "mitsuke",
+- "muika",
+- "murakami",
+- "myoko",
+- "nagaoka",
+- "niigata",
+- "ojiya",
+- "omi",
+- "sado",
+- "sanjo",
+- "seiro",
+- "seirou",
+- "sekikawa",
+- "shibata",
+- "tagami",
+- "tainai",
+- "tochio",
+- "tokamachi",
+- "tsubame",
+- "tsunan",
+- "uonuma",
+- "yahiko",
+- "yoita",
+- "yuzawa",
+- "beppu",
+- "bungoono",
+- "bungotakada",
+- "hasama",
+- "hiji",
+- "himeshima",
+- "hita",
+- "kamitsue",
+- "kokonoe",
+- "kuju",
+- "kunisaki",
+- "kusu",
+- "oita",
+- "saiki",
+- "taketa",
+- "tsukumi",
+- "usa",
+- "usuki",
+- "yufu",
+- "akaiwa",
+- "asakuchi",
+- "bizen",
+- "hayashima",
+- "ibara",
+- "kagamino",
+- "kasaoka",
+- "kibichuo",
+- "kumenan",
+- "kurashiki",
+- "maniwa",
+- "misaki",
+- "nagi",
+- "niimi",
+- "nishiawakura",
+- "okayama",
+- "satosho",
+- "setouchi",
+- "shinjo",
+- "shoo",
+- "soja",
+- "takahashi",
+- "tamano",
+- "tsuyama",
+- "wake",
+- "yakage",
+- "aguni",
+- "ginowan",
+- "ginoza",
+- "gushikami",
+- "haebaru",
+- "higashi",
+- "hirara",
+- "iheya",
+- "ishigaki",
+- "ishikawa",
+- "itoman",
+- "izena",
+- "kadena",
+- "kin",
+- "kitadaito",
+- "kitanakagusuku",
+- "kumejima",
+- "kunigami",
+- "minamidaito",
+- "motobu",
+- "nago",
+- "naha",
+- "nakagusuku",
+- "nakijin",
+- "nanjo",
+- "nishihara",
+- "ogimi",
+- "okinawa",
+- "onna",
+- "shimoji",
+- "taketomi",
+- "tarama",
+- "tokashiki",
+- "tomigusuku",
+- "tonaki",
+- "urasoe",
+- "uruma",
+- "yaese",
+- "yomitan",
+- "yonabaru",
+- "yonaguni",
+- "zamami",
+- "abeno",
+- "chihayaakasaka",
+- "chuo",
+- "daito",
+- "fujiidera",
+- "habikino",
+- "hannan",
+- "higashiosaka",
+- "higashisumiyoshi",
+- "higashiyodogawa",
+- "hirakata",
+- "ibaraki",
+- "ikeda",
+- "izumi",
+- "izumiotsu",
+- "izumisano",
+- "kadoma",
+- "kaizuka",
+- "kanan",
+- "kashiwara",
+- "katano",
+- "kawachinagano",
+- "kishiwada",
+- "kita",
+- "kumatori",
+- "matsubara",
+- "minato",
+- "minoh",
+- "misaki",
+- "moriguchi",
+- "neyagawa",
+- "nishi",
+- "nose",
+- "osakasayama",
+- "sakai",
+- "sayama",
+- "sennan",
+- "settsu",
+- "shijonawate",
+- "shimamoto",
+- "suita",
+- "tadaoka",
+- "taishi",
+- "tajiri",
+- "takaishi",
+- "takatsuki",
+- "tondabayashi",
+- "toyonaka",
+- "toyono",
+- "yao",
+- "ariake",
+- "arita",
+- "fukudomi",
+- "genkai",
+- "hamatama",
+- "hizen",
+- "imari",
+- "kamimine",
+- "kanzaki",
+- "karatsu",
+- "kashima",
+- "kitagata",
+- "kitahata",
+- "kiyama",
+- "kouhoku",
+- "kyuragi",
+- "nishiarita",
+- "ogi",
+- "omachi",
+- "ouchi",
+- "saga",
+- "shiroishi",
+- "taku",
+- "tara",
+- "tosu",
+- "yoshinogari",
+- "arakawa",
+- "asaka",
+- "chichibu",
+- "fujimi",
+- "fujimino",
+- "fukaya",
+- "hanno",
+- "hanyu",
+- "hasuda",
+- "hatogaya",
+- "hatoyama",
+- "hidaka",
+- "higashichichibu",
+- "higashimatsuyama",
+- "honjo",
+- "ina",
+- "iruma",
+- "iwatsuki",
+- "kamiizumi",
+- "kamikawa",
+- "kamisato",
+- "kasukabe",
+- "kawagoe",
+- "kawaguchi",
+- "kawajima",
+- "kazo",
+- "kitamoto",
+- "koshigaya",
+- "kounosu",
+- "kuki",
+- "kumagaya",
+- "matsubushi",
+- "minano",
+- "misato",
+- "miyashiro",
+- "miyoshi",
+- "moroyama",
+- "nagatoro",
+- "namegawa",
+- "niiza",
+- "ogano",
+- "ogawa",
+- "ogose",
+- "okegawa",
+- "omiya",
+- "otaki",
+- "ranzan",
+- "ryokami",
+- "saitama",
+- "sakado",
+- "satte",
+- "sayama",
+- "shiki",
+- "shiraoka",
+- "soka",
+- "sugito",
+- "toda",
+- "tokigawa",
+- "tokorozawa",
+- "tsurugashima",
+- "urawa",
+- "warabi",
+- "yashio",
+- "yokoze",
+- "yono",
+- "yorii",
+- "yoshida",
+- "yoshikawa",
+- "yoshimi",
+- "city",
+- "city",
+- "aisho",
+- "gamo",
+- "higashiomi",
+- "hikone",
+- "koka",
+- "konan",
+- "kosei",
+- "koto",
+- "kusatsu",
+- "maibara",
+- "moriyama",
+- "nagahama",
+- "nishiazai",
+- "notogawa",
+- "omihachiman",
+- "otsu",
+- "ritto",
+- "ryuoh",
+- "takashima",
+- "takatsuki",
+- "torahime",
+- "toyosato",
+- "yasu",
+- "akagi",
+- "ama",
+- "gotsu",
+- "hamada",
+- "higashiizumo",
+- "hikawa",
+- "hikimi",
+- "izumo",
+- "kakinoki",
+- "masuda",
+- "matsue",
+- "misato",
+- "nishinoshima",
+- "ohda",
+- "okinoshima",
+- "okuizumo",
+- "shimane",
+- "tamayu",
+- "tsuwano",
+- "unnan",
+- "yakumo",
+- "yasugi",
+- "yatsuka",
+- "arai",
+- "atami",
+- "fuji",
+- "fujieda",
+- "fujikawa",
+- "fujinomiya",
+- "fukuroi",
+- "gotemba",
+- "haibara",
+- "hamamatsu",
+- "higashiizu",
+- "ito",
+- "iwata",
+- "izu",
+- "izunokuni",
+- "kakegawa",
+- "kannami",
+- "kawanehon",
+- "kawazu",
+- "kikugawa",
+- "kosai",
+- "makinohara",
+- "matsuzaki",
+- "minamiizu",
+- "mishima",
+- "morimachi",
+- "nishiizu",
+- "numazu",
+- "omaezaki",
+- "shimada",
+- "shimizu",
+- "shimoda",
+- "shizuoka",
+- "susono",
+- "yaizu",
+- "yoshida",
+- "ashikaga",
+- "bato",
+- "haga",
+- "ichikai",
+- "iwafune",
+- "kaminokawa",
+- "kanuma",
+- "karasuyama",
+- "kuroiso",
+- "mashiko",
+- "mibu",
+- "moka",
+- "motegi",
+- "nasu",
+- "nasushiobara",
+- "nikko",
+- "nishikata",
+- "nogi",
+- "ohira",
+- "ohtawara",
+- "oyama",
+- "sakura",
+- "sano",
+- "shimotsuke",
+- "shioya",
+- "takanezawa",
+- "tochigi",
+- "tsuga",
+- "ujiie",
+- "utsunomiya",
+- "yaita",
+- "aizumi",
+- "anan",
+- "ichiba",
+- "itano",
+- "kainan",
+- "komatsushima",
+- "matsushige",
+- "mima",
+- "minami",
+- "miyoshi",
+- "mugi",
+- "nakagawa",
+- "naruto",
+- "sanagochi",
+- "shishikui",
+- "tokushima",
+- "wajiki",
+- "adachi",
+- "akiruno",
+- "akishima",
+- "aogashima",
+- "arakawa",
+- "bunkyo",
+- "chiyoda",
+- "chofu",
+- "chuo",
+- "edogawa",
+- "fuchu",
+- "fussa",
+- "hachijo",
+- "hachioji",
+- "hamura",
+- "higashikurume",
+- "higashimurayama",
+- "higashiyamato",
+- "hino",
+- "hinode",
+- "hinohara",
+- "inagi",
+- "itabashi",
+- "katsushika",
+- "kita",
+- "kiyose",
+- "kodaira",
+- "koganei",
+- "kokubunji",
+- "komae",
+- "koto",
+- "kouzushima",
+- "kunitachi",
+- "machida",
+- "meguro",
+- "minato",
+- "mitaka",
+- "mizuho",
+- "musashimurayama",
+- "musashino",
+- "nakano",
+- "nerima",
+- "ogasawara",
+- "okutama",
+- "ome",
+- "oshima",
+- "ota",
+- "setagaya",
+- "shibuya",
+- "shinagawa",
+- "shinjuku",
+- "suginami",
+- "sumida",
+- "tachikawa",
+- "taito",
+- "tama",
+- "toshima",
+- "chizu",
+- "hino",
+- "kawahara",
+- "koge",
+- "kotoura",
+- "misasa",
+- "nanbu",
+- "nichinan",
+- "sakaiminato",
+- "tottori",
+- "wakasa",
+- "yazu",
+- "yonago",
+- "asahi",
+- "fuchu",
+- "fukumitsu",
+- "funahashi",
+- "himi",
+- "imizu",
+- "inami",
+- "johana",
+- "kamiichi",
+- "kurobe",
+- "nakaniikawa",
+- "namerikawa",
+- "nanto",
+- "nyuzen",
+- "oyabe",
+- "taira",
+- "takaoka",
+- "tateyama",
+- "toga",
+- "tonami",
+- "toyama",
+- "unazuki",
+- "uozu",
+- "yamada",
+- "arida",
+- "aridagawa",
+- "gobo",
+- "hashimoto",
+- "hidaka",
+- "hirogawa",
+- "inami",
+- "iwade",
+- "kainan",
+- "kamitonda",
+- "katsuragi",
+- "kimino",
+- "kinokawa",
+- "kitayama",
+- "koya",
+- "koza",
+- "kozagawa",
+- "kudoyama",
+- "kushimoto",
+- "mihama",
+- "misato",
+- "nachikatsuura",
+- "shingu",
+- "shirahama",
+- "taiji",
+- "tanabe",
+- "wakayama",
+- "yuasa",
+- "yura",
+- "asahi",
+- "funagata",
+- "higashine",
+- "iide",
+- "kahoku",
+- "kaminoyama",
+- "kaneyama",
+- "kawanishi",
+- "mamurogawa",
+- "mikawa",
+- "murayama",
+- "nagai",
+- "nakayama",
+- "nanyo",
+- "nishikawa",
+- "obanazawa",
+- "oe",
+- "oguni",
+- "ohkura",
+- "oishida",
+- "sagae",
+- "sakata",
+- "sakegawa",
+- "shinjo",
+- "shirataka",
+- "shonai",
+- "takahata",
+- "tendo",
+- "tozawa",
+- "tsuruoka",
+- "yamagata",
+- "yamanobe",
+- "yonezawa",
+- "yuza",
+- "abu",
+- "hagi",
+- "hikari",
+- "hofu",
+- "iwakuni",
+- "kudamatsu",
+- "mitou",
+- "nagato",
+- "oshima",
+- "shimonoseki",
+- "shunan",
+- "tabuse",
+- "tokuyama",
+- "toyota",
+- "ube",
+- "yuu",
+- "chuo",
+- "doshi",
+- "fuefuki",
+- "fujikawa",
+- "fujikawaguchiko",
+- "fujiyoshida",
+- "hayakawa",
+- "hokuto",
+- "ichikawamisato",
+- "kai",
+- "kofu",
+- "koshu",
+- "kosuge",
+- "minami-alps",
+- "minobu",
+- "nakamichi",
+- "nanbu",
+- "narusawa",
+- "nirasaki",
+- "nishikatsura",
+- "oshino",
+- "otsuki",
+- "showa",
+- "tabayama",
+- "tsuru",
+- "uenohara",
+- "yamanakako",
+- "yamanashi",
+- "city",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "biz",
+- "com",
+- "edu",
+- "gov",
+- "info",
+- "net",
+- "org",
+- "ass",
+- "asso",
+- "com",
+- "coop",
+- "edu",
+- "gouv",
+- "gov",
+- "medecin",
+- "mil",
+- "nom",
+- "notaires",
+- "org",
+- "pharmaciens",
+- "prd",
+- "presse",
+- "tm",
+- "veterinaire",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "com",
+- "edu",
+- "gov",
+- "org",
+- "rep",
+- "tra",
+- "ac",
+- "blogspot",
+- "busan",
+- "chungbuk",
+- "chungnam",
+- "co",
+- "daegu",
+- "daejeon",
+- "es",
+- "gangwon",
+- "go",
+- "gwangju",
+- "gyeongbuk",
+- "gyeonggi",
+- "gyeongnam",
+- "hs",
+- "incheon",
+- "jeju",
+- "jeonbuk",
+- "jeonnam",
+- "kg",
+- "mil",
+- "ms",
+- "ne",
+- "or",
+- "pe",
+- "re",
+- "sc",
+- "seoul",
+- "ulsan",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "c",
+- "com",
+- "edu",
+- "gov",
+- "info",
+- "int",
+- "net",
+- "org",
+- "per",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "co",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "assn",
+- "com",
+- "edu",
+- "gov",
+- "grp",
+- "hotel",
+- "int",
+- "ltd",
+- "net",
+- "ngo",
+- "org",
+- "sch",
+- "soc",
+- "web",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "co",
+- "org",
+- "gov",
+- "asn",
+- "com",
+- "conf",
+- "edu",
+- "gov",
+- "id",
+- "mil",
+- "net",
+- "org",
+- "com",
+- "edu",
+- "gov",
+- "id",
+- "med",
+- "net",
+- "org",
+- "plc",
+- "sch",
+- "ac",
+- "co",
+- "gov",
+- "net",
+- "org",
+- "press",
+- "asso",
+- "tm",
+- "ac",
+- "co",
+- "edu",
+- "gov",
+- "its",
+- "net",
+- "org",
+- "priv",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "nom",
+- "org",
+- "prd",
+- "tm",
+- "com",
+- "edu",
+- "gov",
+- "inf",
+- "name",
+- "net",
+- "org",
+- "com",
+- "edu",
+- "gouv",
+- "gov",
+- "net",
+- "org",
+- "presse",
+- "edu",
+- "gov",
+- "nyc",
+- "org",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "blogspot",
+- "gov",
+- "ac",
+- "co",
+- "com",
+- "gov",
+- "net",
+- "or",
+- "org",
+- "academy",
+- "agriculture",
+- "air",
+- "airguard",
+- "alabama",
+- "alaska",
+- "amber",
+- "ambulance",
+- "american",
+- "americana",
+- "americanantiques",
+- "americanart",
+- "amsterdam",
+- "and",
+- "annefrank",
+- "anthro",
+- "anthropology",
+- "antiques",
+- "aquarium",
+- "arboretum",
+- "archaeological",
+- "archaeology",
+- "architecture",
+- "art",
+- "artanddesign",
+- "artcenter",
+- "artdeco",
+- "arteducation",
+- "artgallery",
+- "arts",
+- "artsandcrafts",
+- "asmatart",
+- "assassination",
+- "assisi",
+- "association",
+- "astronomy",
+- "atlanta",
+- "austin",
+- "australia",
+- "automotive",
+- "aviation",
+- "axis",
+- "badajoz",
+- "baghdad",
+- "bahn",
+- "bale",
+- "baltimore",
+- "barcelona",
+- "baseball",
+- "basel",
+- "baths",
+- "bauern",
+- "beauxarts",
+- "beeldengeluid",
+- "bellevue",
+- "bergbau",
+- "berkeley",
+- "berlin",
+- "bern",
+- "bible",
+- "bilbao",
+- "bill",
+- "birdart",
+- "birthplace",
+- "bonn",
+- "boston",
+- "botanical",
+- "botanicalgarden",
+- "botanicgarden",
+- "botany",
+- "brandywinevalley",
+- "brasil",
+- "bristol",
+- "british",
+- "britishcolumbia",
+- "broadcast",
+- "brunel",
+- "brussel",
+- "brussels",
+- "bruxelles",
+- "building",
+- "burghof",
+- "bus",
+- "bushey",
+- "cadaques",
+- "california",
+- "cambridge",
+- "can",
+- "canada",
+- "capebreton",
+- "carrier",
+- "cartoonart",
+- "casadelamoneda",
+- "castle",
+- "castres",
+- "celtic",
+- "center",
+- "chattanooga",
+- "cheltenham",
+- "chesapeakebay",
+- "chicago",
+- "children",
+- "childrens",
+- "childrensgarden",
+- "chiropractic",
+- "chocolate",
+- "christiansburg",
+- "cincinnati",
+- "cinema",
+- "circus",
+- "civilisation",
+- "civilization",
+- "civilwar",
+- "clinton",
+- "clock",
+- "coal",
+- "coastaldefence",
+- "cody",
+- "coldwar",
+- "collection",
+- "colonialwilliamsburg",
+- "coloradoplateau",
+- "columbia",
+- "columbus",
+- "communication",
+- "communications",
+- "community",
+- "computer",
+- "computerhistory",
+- "contemporary",
+- "contemporaryart",
+- "convent",
+- "copenhagen",
+- "corporation",
+- "corvette",
+- "costume",
+- "countryestate",
+- "county",
+- "crafts",
+- "cranbrook",
+- "creation",
+- "cultural",
+- "culturalcenter",
+- "culture",
+- "cyber",
+- "cymru",
+- "dali",
+- "dallas",
+- "database",
+- "ddr",
+- "decorativearts",
+- "delaware",
+- "delmenhorst",
+- "denmark",
+- "depot",
+- "design",
+- "detroit",
+- "dinosaur",
+- "discovery",
+- "dolls",
+- "donostia",
+- "durham",
+- "eastafrica",
+- "eastcoast",
+- "education",
+- "educational",
+- "egyptian",
+- "eisenbahn",
+- "elburg",
+- "elvendrell",
+- "embroidery",
+- "encyclopedic",
+- "england",
+- "entomology",
+- "environment",
+- "environmentalconservation",
+- "epilepsy",
+- "essex",
+- "estate",
+- "ethnology",
+- "exeter",
+- "exhibition",
+- "family",
+- "farm",
+- "farmequipment",
+- "farmers",
+- "farmstead",
+- "field",
+- "figueres",
+- "filatelia",
+- "film",
+- "fineart",
+- "finearts",
+- "finland",
+- "flanders",
+- "florida",
+- "force",
+- "fortmissoula",
+- "fortworth",
+- "foundation",
+- "francaise",
+- "frankfurt",
+- "franziskaner",
+- "freemasonry",
+- "freiburg",
+- "fribourg",
+- "frog",
+- "fundacio",
+- "furniture",
+- "gallery",
+- "garden",
+- "gateway",
+- "geelvinck",
+- "gemological",
+- "geology",
+- "georgia",
+- "giessen",
+- "glas",
+- "glass",
+- "gorge",
+- "grandrapids",
+- "graz",
+- "guernsey",
+- "halloffame",
+- "hamburg",
+- "handson",
+- "harvestcelebration",
+- "hawaii",
+- "health",
+- "heimatunduhren",
+- "hellas",
+- "helsinki",
+- "hembygdsforbund",
+- "heritage",
+- "histoire",
+- "historical",
+- "historicalsociety",
+- "historichouses",
+- "historisch",
+- "historisches",
+- "history",
+- "historyofscience",
+- "horology",
+- "house",
+- "humanities",
+- "illustration",
+- "imageandsound",
+- "indian",
+- "indiana",
+- "indianapolis",
+- "indianmarket",
+- "intelligence",
+- "interactive",
+- "iraq",
+- "iron",
+- "isleofman",
+- "jamison",
+- "jefferson",
+- "jerusalem",
+- "jewelry",
+- "jewish",
+- "jewishart",
+- "jfk",
+- "journalism",
+- "judaica",
+- "judygarland",
+- "juedisches",
+- "juif",
+- "karate",
+- "karikatur",
+- "kids",
+- "koebenhavn",
+- "koeln",
+- "kunst",
+- "kunstsammlung",
+- "kunstunddesign",
+- "labor",
+- "labour",
+- "lajolla",
+- "lancashire",
+- "landes",
+- "lans",
+- "larsson",
+- "lewismiller",
+- "lincoln",
+- "linz",
+- "living",
+- "livinghistory",
+- "localhistory",
+- "london",
+- "losangeles",
+- "louvre",
+- "loyalist",
+- "lucerne",
+- "luxembourg",
+- "luzern",
+- "mad",
+- "madrid",
+- "mallorca",
+- "manchester",
+- "mansion",
+- "mansions",
+- "manx",
+- "marburg",
+- "maritime",
+- "maritimo",
+- "maryland",
+- "marylhurst",
+- "media",
+- "medical",
+- "medizinhistorisches",
+- "meeres",
+- "memorial",
+- "mesaverde",
+- "michigan",
+- "midatlantic",
+- "military",
+- "mill",
+- "miners",
+- "mining",
+- "minnesota",
+- "missile",
+- "missoula",
+- "modern",
+- "moma",
+- "money",
+- "monmouth",
+- "monticello",
+- "montreal",
+- "moscow",
+- "motorcycle",
+- "muenchen",
+- "muenster",
+- "mulhouse",
+- "muncie",
+- "museet",
+- "museumcenter",
+- "museumvereniging",
+- "music",
+- "national",
+- "nationalfirearms",
+- "nationalheritage",
+- "nativeamerican",
+- "naturalhistory",
+- "naturalhistorymuseum",
+- "naturalsciences",
+- "nature",
+- "naturhistorisches",
+- "natuurwetenschappen",
+- "naumburg",
+- "naval",
+- "nebraska",
+- "neues",
+- "newhampshire",
+- "newjersey",
+- "newmexico",
+- "newport",
+- "newspaper",
+- "newyork",
+- "niepce",
+- "norfolk",
+- "north",
+- "nrw",
+- "nuernberg",
+- "nuremberg",
+- "nyc",
+- "nyny",
+- "oceanographic",
+- "oceanographique",
+- "omaha",
+- "online",
+- "ontario",
+- "openair",
+- "oregon",
+- "oregontrail",
+- "otago",
+- "oxford",
+- "pacific",
+- "paderborn",
+- "palace",
+- "paleo",
+- "palmsprings",
+- "panama",
+- "paris",
+- "pasadena",
+- "pharmacy",
+- "philadelphia",
+- "philadelphiaarea",
+- "philately",
+- "phoenix",
+- "photography",
+- "pilots",
+- "pittsburgh",
+- "planetarium",
+- "plantation",
+- "plants",
+- "plaza",
+- "portal",
+- "portland",
+- "portlligat",
+- "posts-and-telecommunications",
+- "preservation",
+- "presidio",
+- "press",
+- "project",
+- "public",
+- "pubol",
+- "quebec",
+- "railroad",
+- "railway",
+- "research",
+- "resistance",
+- "riodejaneiro",
+- "rochester",
+- "rockart",
+- "roma",
+- "russia",
+- "saintlouis",
+- "salem",
+- "salvadordali",
+- "salzburg",
+- "sandiego",
+- "sanfrancisco",
+- "santabarbara",
+- "santacruz",
+- "santafe",
+- "saskatchewan",
+- "satx",
+- "savannahga",
+- "schlesisches",
+- "schoenbrunn",
+- "schokoladen",
+- "school",
+- "schweiz",
+- "science",
+- "science-fiction",
+- "scienceandhistory",
+- "scienceandindustry",
+- "sciencecenter",
+- "sciencecenters",
+- "sciencehistory",
+- "sciences",
+- "sciencesnaturelles",
+- "scotland",
+- "seaport",
+- "settlement",
+- "settlers",
+- "shell",
+- "sherbrooke",
+- "sibenik",
+- "silk",
+- "ski",
+- "skole",
+- "society",
+- "sologne",
+- "soundandvision",
+- "southcarolina",
+- "southwest",
+- "space",
+- "spy",
+- "square",
+- "stadt",
+- "stalbans",
+- "starnberg",
+- "state",
+- "stateofdelaware",
+- "station",
+- "steam",
+- "steiermark",
+- "stjohn",
+- "stockholm",
+- "stpetersburg",
+- "stuttgart",
+- "suisse",
+- "surgeonshall",
+- "surrey",
+- "svizzera",
+- "sweden",
+- "sydney",
+- "tank",
+- "tcm",
+- "technology",
+- "telekommunikation",
+- "television",
+- "texas",
+- "textile",
+- "theater",
+- "time",
+- "timekeeping",
+- "topology",
+- "torino",
+- "touch",
+- "town",
+- "transport",
+- "tree",
+- "trolley",
+- "trust",
+- "trustee",
+- "uhren",
+- "ulm",
+- "undersea",
+- "university",
+- "usa",
+- "usantiques",
+- "usarts",
+- "uscountryestate",
+- "usculture",
+- "usdecorativearts",
+- "usgarden",
+- "ushistory",
+- "ushuaia",
+- "uslivinghistory",
+- "utah",
+- "uvic",
+- "valley",
+- "vantaa",
+- "versailles",
+- "viking",
+- "village",
+- "virginia",
+- "virtual",
+- "virtuel",
+- "vlaanderen",
+- "volkenkunde",
+- "wales",
+- "wallonie",
+- "war",
+- "washingtondc",
+- "watch-and-clock",
+- "watchandclock",
+- "western",
+- "westfalen",
+- "whaling",
+- "wildlife",
+- "williamsburg",
+- "windmill",
+- "workshop",
+- "xn--9dbhblg6di",
+- "xn--comunicaes-v6a2o",
+- "xn--correios-e-telecomunicaes-ghc29a",
+- "xn--h1aegh",
+- "xn--lns-qla",
+- "york",
+- "yorkshire",
+- "yosemite",
+- "youth",
+- "zoological",
+- "zoology",
+- "aero",
+- "biz",
+- "com",
+- "coop",
+- "edu",
+- "gov",
+- "info",
+- "int",
+- "mil",
+- "museum",
+- "name",
+- "net",
+- "org",
+- "pro",
+- "ac",
+- "biz",
+- "co",
+- "com",
+- "coop",
+- "edu",
+- "gov",
+- "int",
+- "museum",
+- "net",
+- "org",
+- "blogspot",
+- "com",
+- "edu",
+- "gob",
+- "net",
+- "org",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "name",
+- "net",
+- "org",
+- "teledata",
+- "ca",
+- "cc",
+- "co",
+- "com",
+- "dr",
+- "in",
+- "info",
+- "mobi",
+- "mx",
+- "name",
+- "or",
+- "org",
+- "pro",
+- "school",
+- "tv",
+- "us",
+- "ws",
+- "her",
+- "his",
+- "forgot",
+- "forgot",
+- "asso",
+- "at-band-camp",
+- "blogdns",
+- "broke-it",
+- "buyshouses",
+- "cloudfront",
+- "dnsalias",
+- "dnsdojo",
+- "does-it",
+- "dontexist",
+- "dynalias",
+- "dynathome",
+- "endofinternet",
+- "from-az",
+- "from-co",
+- "from-la",
+- "from-ny",
+- "gb",
+- "gets-it",
+- "ham-radio-op",
+- "homeftp",
+- "homeip",
+- "homelinux",
+- "homeunix",
+- "hu",
+- "in-the-band",
+- "is-a-chef",
+- "is-a-geek",
+- "isa-geek",
+- "jp",
+- "kicks-ass",
+- "office-on-the",
+- "podzone",
+- "scrapper-site",
+- "se",
+- "selfip",
+- "sells-it",
+- "servebbs",
+- "serveftp",
+- "thruhere",
+- "uk",
+- "webhop",
+- "za",
+- "arts",
+- "com",
+- "firm",
+- "info",
+- "net",
+- "other",
+- "per",
+- "rec",
+- "store",
+- "web",
+- "ac",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "blogspot",
+- "bv",
+- "co",
+- "aa",
+- "aarborte",
+- "aejrie",
+- "afjord",
+- "agdenes",
+- "ah",
+- "akershus",
+- "aknoluokta",
+- "akrehamn",
+- "al",
+- "alaheadju",
+- "alesund",
+- "algard",
+- "alstahaug",
+- "alta",
+- "alvdal",
+- "amli",
+- "amot",
+- "andasuolo",
+- "andebu",
+- "andoy",
+- "ardal",
+- "aremark",
+- "arendal",
+- "arna",
+- "aseral",
+- "asker",
+- "askim",
+- "askoy",
+- "askvoll",
+- "asnes",
+- "audnedaln",
+- "aukra",
+- "aure",
+- "aurland",
+- "aurskog-holand",
+- "austevoll",
+- "austrheim",
+- "averoy",
+- "badaddja",
+- "bahcavuotna",
+- "bahccavuotna",
+- "baidar",
+- "bajddar",
+- "balat",
+- "balestrand",
+- "ballangen",
+- "balsfjord",
+- "bamble",
+- "bardu",
+- "barum",
+- "batsfjord",
+- "bearalvahki",
+- "beardu",
+- "beiarn",
+- "berg",
+- "bergen",
+- "berlevag",
+- "bievat",
+- "bindal",
+- "birkenes",
+- "bjarkoy",
+- "bjerkreim",
+- "bjugn",
+- "blogspot",
+- "bodo",
+- "bokn",
+- "bomlo",
+- "bremanger",
+- "bronnoy",
+- "bronnoysund",
+- "brumunddal",
+- "bryne",
+- "bu",
+- "budejju",
+- "buskerud",
+- "bygland",
+- "bykle",
+- "cahcesuolo",
+- "co",
+- "davvenjarga",
+- "davvesiida",
+- "deatnu",
+- "dep",
+- "dielddanuorri",
+- "divtasvuodna",
+- "divttasvuotna",
+- "donna",
+- "dovre",
+- "drammen",
+- "drangedal",
+- "drobak",
+- "dyroy",
+- "egersund",
+- "eid",
+- "eidfjord",
+- "eidsberg",
+- "eidskog",
+- "eidsvoll",
+- "eigersund",
+- "elverum",
+- "enebakk",
+- "engerdal",
+- "etne",
+- "etnedal",
+- "evenassi",
+- "evenes",
+- "evje-og-hornnes",
+- "farsund",
+- "fauske",
+- "fedje",
+- "fet",
+- "fetsund",
+- "fhs",
+- "finnoy",
+- "fitjar",
+- "fjaler",
+- "fjell",
+- "fla",
+- "flakstad",
+- "flatanger",
+- "flekkefjord",
+- "flesberg",
+- "flora",
+- "floro",
+- "fm",
+- "folkebibl",
+- "folldal",
+- "forde",
+- "forsand",
+- "fosnes",
+- "frana",
+- "fredrikstad",
+- "frei",
+- "frogn",
+- "froland",
+- "frosta",
+- "froya",
+- "fuoisku",
+- "fuossko",
+- "fusa",
+- "fylkesbibl",
+- "fyresdal",
+- "gaivuotna",
+- "galsa",
+- "gamvik",
+- "gangaviika",
+- "gaular",
+- "gausdal",
+- "giehtavuoatna",
+- "gildeskal",
+- "giske",
+- "gjemnes",
+- "gjerdrum",
+- "gjerstad",
+- "gjesdal",
+- "gjovik",
+- "gloppen",
+- "gol",
+- "gran",
+- "grane",
+- "granvin",
+- "gratangen",
+- "grimstad",
+- "grong",
+- "grue",
+- "gulen",
+- "guovdageaidnu",
+- "ha",
+- "habmer",
+- "hadsel",
+- "hagebostad",
+- "halden",
+- "halsa",
+- "hamar",
+- "hamaroy",
+- "hammarfeasta",
+- "hammerfest",
+- "hapmir",
+- "haram",
+- "hareid",
+- "harstad",
+- "hasvik",
+- "hattfjelldal",
+- "haugesund",
+- "hedmark",
+- "hemne",
+- "hemnes",
+- "hemsedal",
+- "herad",
+- "hitra",
+- "hjartdal",
+- "hjelmeland",
+- "hl",
+- "hm",
+- "hobol",
+- "hof",
+- "hokksund",
+- "hol",
+- "hole",
+- "holmestrand",
+- "holtalen",
+- "honefoss",
+- "hordaland",
+- "hornindal",
+- "horten",
+- "hoyanger",
+- "hoylandet",
+- "hurdal",
+- "hurum",
+- "hvaler",
+- "hyllestad",
+- "ibestad",
+- "idrett",
+- "inderoy",
+- "iveland",
+- "ivgu",
+- "jan-mayen",
+- "jessheim",
+- "jevnaker",
+- "jolster",
+- "jondal",
+- "jorpeland",
+- "kafjord",
+- "karasjohka",
+- "karasjok",
+- "karlsoy",
+- "karmoy",
+- "kautokeino",
+- "kirkenes",
+- "klabu",
+- "klepp",
+- "kommune",
+- "kongsberg",
+- "kongsvinger",
+- "kopervik",
+- "kraanghke",
+- "kragero",
+- "kristiansand",
+- "kristiansund",
+- "krodsherad",
+- "krokstadelva",
+- "kvafjord",
+- "kvalsund",
+- "kvam",
+- "kvanangen",
+- "kvinesdal",
+- "kvinnherad",
+- "kviteseid",
+- "kvitsoy",
+- "laakesvuemie",
+- "lahppi",
+- "langevag",
+- "lardal",
+- "larvik",
+- "lavagis",
+- "lavangen",
+- "leangaviika",
+- "lebesby",
+- "leikanger",
+- "leirfjord",
+- "leirvik",
+- "leka",
+- "leksvik",
+- "lenvik",
+- "lerdal",
+- "lesja",
+- "levanger",
+- "lier",
+- "lierne",
+- "lillehammer",
+- "lillesand",
+- "lindas",
+- "lindesnes",
+- "loabat",
+- "lodingen",
+- "lom",
+- "loppa",
+- "lorenskog",
+- "loten",
+- "lund",
+- "lunner",
+- "luroy",
+- "luster",
+- "lyngdal",
+- "lyngen",
+- "malatvuopmi",
+- "malselv",
+- "malvik",
+- "mandal",
+- "marker",
+- "marnardal",
+- "masfjorden",
+- "masoy",
+- "matta-varjjat",
+- "meland",
+- "meldal",
+- "melhus",
+- "meloy",
+- "meraker",
+- "midsund",
+- "midtre-gauldal",
+- "mil",
+- "mjondalen",
+- "mo-i-rana",
+- "moareke",
+- "modalen",
+- "modum",
+- "molde",
+- "more-og-romsdal",
+- "mosjoen",
+- "moskenes",
+- "moss",
+- "mosvik",
+- "mr",
+- "muosat",
+- "museum",
+- "naamesjevuemie",
+- "namdalseid",
+- "namsos",
+- "namsskogan",
+- "nannestad",
+- "naroy",
+- "narviika",
+- "narvik",
+- "naustdal",
+- "navuotna",
+- "nedre-eiker",
+- "nesna",
+- "nesodden",
+- "nesoddtangen",
+- "nesseby",
+- "nesset",
+- "nissedal",
+- "nittedal",
+- "nl",
+- "nord-aurdal",
+- "nord-fron",
+- "nord-odal",
+- "norddal",
+- "nordkapp",
+- "nordland",
+- "nordre-land",
+- "nordreisa",
+- "nore-og-uvdal",
+- "notodden",
+- "notteroy",
+- "nt",
+- "odda",
+- "of",
+- "oksnes",
+- "ol",
+- "omasvuotna",
+- "oppdal",
+- "oppegard",
+- "orkanger",
+- "orkdal",
+- "orland",
+- "orskog",
+- "orsta",
+- "osen",
+- "oslo",
+- "osoyro",
+- "osteroy",
+- "ostfold",
+- "ostre-toten",
+- "overhalla",
+- "ovre-eiker",
+- "oyer",
+- "oygarden",
+- "oystre-slidre",
+- "porsanger",
+- "porsangu",
+- "porsgrunn",
+- "priv",
+- "rade",
+- "radoy",
+- "rahkkeravju",
+- "raholt",
+- "raisa",
+- "rakkestad",
+- "ralingen",
+- "rana",
+- "randaberg",
+- "rauma",
+- "rendalen",
+- "rennebu",
+- "rennesoy",
+- "rindal",
+- "ringebu",
+- "ringerike",
+- "ringsaker",
+- "risor",
+- "rissa",
+- "rl",
+- "roan",
+- "rodoy",
+- "rollag",
+- "romsa",
+- "romskog",
+- "roros",
+- "rost",
+- "royken",
+- "royrvik",
+- "ruovat",
+- "rygge",
+- "salangen",
+- "salat",
+- "saltdal",
+- "samnanger",
+- "sandefjord",
+- "sandnes",
+- "sandnessjoen",
+- "sandoy",
+- "sarpsborg",
+- "sauda",
+- "sauherad",
+- "sel",
+- "selbu",
+- "selje",
+- "seljord",
+- "sf",
+- "siellak",
+- "sigdal",
+- "siljan",
+- "sirdal",
+- "skanit",
+- "skanland",
+- "skaun",
+- "skedsmo",
+- "skedsmokorset",
+- "ski",
+- "skien",
+- "skierva",
+- "skiptvet",
+- "skjak",
+- "skjervoy",
+- "skodje",
+- "slattum",
+- "smola",
+- "snaase",
+- "snasa",
+- "snillfjord",
+- "snoasa",
+- "sogndal",
+- "sogne",
+- "sokndal",
+- "sola",
+- "solund",
+- "somna",
+- "sondre-land",
+- "songdalen",
+- "sor-aurdal",
+- "sor-fron",
+- "sor-odal",
+- "sor-varanger",
+- "sorfold",
+- "sorreisa",
+- "sortland",
+- "sorum",
+- "spjelkavik",
+- "spydeberg",
+- "st",
+- "stange",
+- "stat",
+- "stathelle",
+- "stavanger",
+- "stavern",
+- "steigen",
+- "steinkjer",
+- "stjordal",
+- "stjordalshalsen",
+- "stokke",
+- "stor-elvdal",
+- "stord",
+- "stordal",
+- "storfjord",
+- "strand",
+- "stranda",
+- "stryn",
+- "sula",
+- "suldal",
+- "sund",
+- "sunndal",
+- "surnadal",
+- "svalbard",
+- "sveio",
+- "svelvik",
+- "sykkylven",
+- "tana",
+- "tananger",
+- "telemark",
+- "time",
+- "tingvoll",
+- "tinn",
+- "tjeldsund",
+- "tjome",
+- "tm",
+- "tokke",
+- "tolga",
+- "tonsberg",
+- "torsken",
+- "tr",
+- "trana",
+- "tranby",
+- "tranoy",
+- "troandin",
+- "trogstad",
+- "tromsa",
+- "tromso",
+- "trondheim",
+- "trysil",
+- "tvedestrand",
+- "tydal",
+- "tynset",
+- "tysfjord",
+- "tysnes",
+- "tysvar",
+- "ullensaker",
+- "ullensvang",
+- "ulvik",
+- "unjarga",
+- "utsira",
+- "va",
+- "vaapste",
+- "vadso",
+- "vaga",
+- "vagan",
+- "vagsoy",
+- "vaksdal",
+- "valle",
+- "vang",
+- "vanylven",
+- "vardo",
+- "varggat",
+- "varoy",
+- "vefsn",
+- "vega",
+- "vegarshei",
+- "vennesla",
+- "verdal",
+- "verran",
+- "vestby",
+- "vestfold",
+- "vestnes",
+- "vestre-slidre",
+- "vestre-toten",
+- "vestvagoy",
+- "vevelstad",
+- "vf",
+- "vgs",
+- "vik",
+- "vikna",
+- "vindafjord",
+- "voagat",
+- "volda",
+- "voss",
+- "vossevangen",
+- "xn--andy-ira",
+- "xn--asky-ira",
+- "xn--aurskog-hland-jnb",
+- "xn--avery-yua",
+- "xn--bdddj-mrabd",
+- "xn--bearalvhki-y4a",
+- "xn--berlevg-jxa",
+- "xn--bhcavuotna-s4a",
+- "xn--bhccavuotna-k7a",
+- "xn--bidr-5nac",
+- "xn--bievt-0qa",
+- "xn--bjarky-fya",
+- "xn--bjddar-pta",
+- "xn--blt-elab",
+- "xn--bmlo-gra",
+- "xn--bod-2na",
+- "xn--brnny-wuac",
+- "xn--brnnysund-m8ac",
+- "xn--brum-voa",
+- "xn--btsfjord-9za",
+- "xn--davvenjrga-y4a",
+- "xn--dnna-gra",
+- "xn--drbak-wua",
+- "xn--dyry-ira",
+- "xn--eveni-0qa01ga",
+- "xn--finny-yua",
+- "xn--fjord-lra",
+- "xn--fl-zia",
+- "xn--flor-jra",
+- "xn--frde-gra",
+- "xn--frna-woa",
+- "xn--frya-hra",
+- "xn--ggaviika-8ya47h",
+- "xn--gildeskl-g0a",
+- "xn--givuotna-8ya",
+- "xn--gjvik-wua",
+- "xn--gls-elac",
+- "xn--h-2fa",
+- "xn--hbmer-xqa",
+- "xn--hcesuolo-7ya35b",
+- "xn--hgebostad-g3a",
+- "xn--hmmrfeasta-s4ac",
+- "xn--hnefoss-q1a",
+- "xn--hobl-ira",
+- "xn--holtlen-hxa",
+- "xn--hpmir-xqa",
+- "xn--hyanger-q1a",
+- "xn--hylandet-54a",
+- "xn--indery-fya",
+- "xn--jlster-bya",
+- "xn--jrpeland-54a",
+- "xn--karmy-yua",
+- "xn--kfjord-iua",
+- "xn--klbu-woa",
+- "xn--koluokta-7ya57h",
+- "xn--krager-gya",
+- "xn--kranghke-b0a",
+- "xn--krdsherad-m8a",
+- "xn--krehamn-dxa",
+- "xn--krjohka-hwab49j",
+- "xn--ksnes-uua",
+- "xn--kvfjord-nxa",
+- "xn--kvitsy-fya",
+- "xn--kvnangen-k0a",
+- "xn--l-1fa",
+- "xn--laheadju-7ya",
+- "xn--langevg-jxa",
+- "xn--ldingen-q1a",
+- "xn--leagaviika-52b",
+- "xn--lesund-hua",
+- "xn--lgrd-poac",
+- "xn--lhppi-xqa",
+- "xn--linds-pra",
+- "xn--loabt-0qa",
+- "xn--lrdal-sra",
+- "xn--lrenskog-54a",
+- "xn--lt-liac",
+- "xn--lten-gra",
+- "xn--lury-ira",
+- "xn--mely-ira",
+- "xn--merker-kua",
+- "xn--mjndalen-64a",
+- "xn--mlatvuopmi-s4a",
+- "xn--mli-tla",
+- "xn--mlselv-iua",
+- "xn--moreke-jua",
+- "xn--mosjen-eya",
+- "xn--mot-tla",
+- "xn--mre-og-romsdal-qqb",
+- "xn--msy-ula0h",
+- "xn--mtta-vrjjat-k7af",
+- "xn--muost-0qa",
+- "xn--nmesjevuemie-tcba",
+- "xn--nry-yla5g",
+- "xn--nttery-byae",
+- "xn--nvuotna-hwa",
+- "xn--oppegrd-ixa",
+- "xn--ostery-fya",
+- "xn--osyro-wua",
+- "xn--porsgu-sta26f",
+- "xn--rady-ira",
+- "xn--rdal-poa",
+- "xn--rde-ula",
+- "xn--rdy-0nab",
+- "xn--rennesy-v1a",
+- "xn--rhkkervju-01af",
+- "xn--rholt-mra",
+- "xn--risa-5na",
+- "xn--risr-ira",
+- "xn--rland-uua",
+- "xn--rlingen-mxa",
+- "xn--rmskog-bya",
+- "xn--rros-gra",
+- "xn--rskog-uua",
+- "xn--rst-0na",
+- "xn--rsta-fra",
+- "xn--ryken-vua",
+- "xn--ryrvik-bya",
+- "xn--s-1fa",
+- "xn--sandnessjen-ogb",
+- "xn--sandy-yua",
+- "xn--seral-lra",
+- "xn--sgne-gra",
+- "xn--skierv-uta",
+- "xn--skjervy-v1a",
+- "xn--skjk-soa",
+- "xn--sknit-yqa",
+- "xn--sknland-fxa",
+- "xn--slat-5na",
+- "xn--slt-elab",
+- "xn--smla-hra",
+- "xn--smna-gra",
+- "xn--snase-nra",
+- "xn--sndre-land-0cb",
+- "xn--snes-poa",
+- "xn--snsa-roa",
+- "xn--sr-aurdal-l8a",
+- "xn--sr-fron-q1a",
+- "xn--sr-odal-q1a",
+- "xn--sr-varanger-ggb",
+- "xn--srfold-bya",
+- "xn--srreisa-q1a",
+- "xn--srum-gra",
+- "xn--stfold-9xa",
+- "xn--stjrdal-s1a",
+- "xn--stjrdalshalsen-sqb",
+- "xn--stre-toten-zcb",
+- "xn--tjme-hra",
+- "xn--tnsberg-q1a",
+- "xn--trany-yua",
+- "xn--trgstad-r1a",
+- "xn--trna-woa",
+- "xn--troms-zua",
+- "xn--tysvr-vra",
+- "xn--unjrga-rta",
+- "xn--vads-jra",
+- "xn--vard-jra",
+- "xn--vegrshei-c0a",
+- "xn--vestvgy-ixa6o",
+- "xn--vg-yiab",
+- "xn--vgan-qoa",
+- "xn--vgsy-qoa0j",
+- "xn--vre-eiker-k8a",
+- "xn--vrggt-xqad",
+- "xn--vry-yla5g",
+- "xn--yer-zna",
+- "xn--ygarden-p1a",
+- "xn--ystre-slidre-ujb",
+- "gs",
+- "gs",
+- "nes",
+- "gs",
+- "nes",
+- "gs",
+- "os",
+- "valer",
+- "xn--vler-qoa",
+- "gs",
+- "gs",
+- "os",
+- "gs",
+- "heroy",
+- "sande",
+- "gs",
+- "gs",
+- "bo",
+- "heroy",
+- "xn--b-5ga",
+- "xn--hery-ira",
+- "gs",
+- "gs",
+- "gs",
+- "gs",
+- "valer",
+- "gs",
+- "gs",
+- "gs",
+- "gs",
+- "bo",
+- "xn--b-5ga",
+- "gs",
+- "gs",
+- "gs",
+- "sande",
+- "gs",
+- "sande",
+- "xn--hery-ira",
+- "xn--vler-qoa",
+- "biz",
+- "com",
+- "edu",
+- "gov",
+- "info",
+- "net",
+- "org",
+- "merseine",
+- "mine",
+- "shacknet",
+- "co",
+- "blogspot",
+- "mediaphone",
+- "nawras",
+- "nawrastelecom",
+- "omanmobile",
+- "omanpost",
+- "omantel",
+- "rakpetroleum",
+- "siemens",
+- "songfest",
+- "statecouncil",
+- "ae",
+- "blogdns",
+- "blogsite",
+- "boldlygoingnowhere",
+- "dnsalias",
+- "dnsdojo",
+- "doesntexist",
+- "dontexist",
+- "doomdns",
+- "dvrdns",
+- "dynalias",
+- "dyndns",
+- "endofinternet",
+- "endoftheinternet",
+- "from-me",
+- "game-host",
+- "gotdns",
+- "hobby-site",
+- "homedns",
+- "homeftp",
+- "homelinux",
+- "homeunix",
+- "is-a-bruinsfan",
+- "is-a-candidate",
+- "is-a-celticsfan",
+- "is-a-chef",
+- "is-a-geek",
+- "is-a-knight",
+- "is-a-linux-user",
+- "is-a-patsfan",
+- "is-a-soxfan",
+- "is-found",
+- "is-lost",
+- "is-saved",
+- "is-very-bad",
+- "is-very-evil",
+- "is-very-good",
+- "is-very-nice",
+- "is-very-sweet",
+- "isa-geek",
+- "kicks-ass",
+- "misconfused",
+- "podzone",
+- "readmyblog",
+- "selfip",
+- "sellsyourhome",
+- "servebbs",
+- "serveftp",
+- "servegame",
+- "stuff-4-sale",
+- "us",
+- "webhop",
+- "za",
+- "go",
+- "home",
+- "abo",
+- "ac",
+- "com",
+- "edu",
+- "gob",
+- "ing",
+- "med",
+- "net",
+- "nom",
+- "org",
+- "sld",
+- "com",
+- "edu",
+- "gob",
+- "mil",
+- "net",
+- "nom",
+- "org",
+- "com",
+- "edu",
+- "org",
+- "com",
+- "edu",
+- "gov",
+- "i",
+- "mil",
+- "net",
+- "ngo",
+- "org",
+- "biz",
+- "com",
+- "edu",
+- "fam",
+- "gob",
+- "gok",
+- "gon",
+- "gop",
+- "gos",
+- "gov",
+- "info",
+- "net",
+- "org",
+- "web",
+- "6bone",
+- "agro",
+- "aid",
+- "art",
+- "atm",
+- "augustow",
+- "auto",
+- "babia-gora",
+- "bedzin",
+- "beskidy",
+- "bialowieza",
+- "bialystok",
+- "bielawa",
+- "bieszczady",
+- "biz",
+- "boleslawiec",
+- "bydgoszcz",
+- "bytom",
+- "cieszyn",
+- "co",
+- "com",
+- "czeladz",
+- "czest",
+- "dlugoleka",
+- "edu",
+- "elblag",
+- "elk",
+- "gda",
+- "gdansk",
+- "gdynia",
+- "gliwice",
+- "glogow",
+- "gmina",
+- "gniezno",
+- "gorlice",
+- "gov",
+- "grajewo",
+- "gsm",
+- "ilawa",
+- "info",
+- "irc",
+- "jaworzno",
+- "jelenia-gora",
+- "jgora",
+- "kalisz",
+- "karpacz",
+- "kartuzy",
+- "kaszuby",
+- "katowice",
+- "kazimierz-dolny",
+- "kepno",
+- "ketrzyn",
+- "klodzko",
+- "kobierzyce",
+- "kolobrzeg",
+- "konin",
+- "konskowola",
+- "krakow",
+- "kutno",
+- "lapy",
+- "lebork",
+- "legnica",
+- "lezajsk",
+- "limanowa",
+- "lomza",
+- "lowicz",
+- "lubin",
+- "lukow",
+- "mail",
+- "malbork",
+- "malopolska",
+- "mazowsze",
+- "mazury",
+- "mbone",
+- "med",
+- "media",
+- "miasta",
+- "mielec",
+- "mielno",
+- "mil",
+- "mragowo",
+- "naklo",
+- "net",
+- "ngo",
+- "nieruchomosci",
+- "nom",
+- "nowaruda",
+- "nysa",
+- "olawa",
+- "olecko",
+- "olkusz",
+- "olsztyn",
+- "opoczno",
+- "opole",
+- "org",
+- "ostroda",
+- "ostroleka",
+- "ostrowiec",
+- "ostrowwlkp",
+- "pc",
+- "pila",
+- "pisz",
+- "podhale",
+- "podlasie",
+- "polkowice",
+- "pomorskie",
+- "pomorze",
+- "powiat",
+- "poznan",
+- "priv",
+- "prochowice",
+- "pruszkow",
+- "przeworsk",
+- "pulawy",
+- "radom",
+- "rawa-maz",
+- "realestate",
+- "rel",
+- "rybnik",
+- "rzeszow",
+- "sanok",
+- "sejny",
+- "sex",
+- "shop",
+- "siedlce",
+- "sklep",
+- "skoczow",
+- "slask",
+- "slupsk",
+- "sopot",
+- "sos",
+- "sosnowiec",
+- "stalowa-wola",
+- "starachowice",
+- "stargard",
+- "suwalki",
+- "swidnica",
+- "swiebodzin",
+- "swinoujscie",
+- "szczecin",
+- "szczytno",
+- "szkola",
+- "targi",
+- "tarnobrzeg",
+- "tgory",
+- "tm",
+- "tourism",
+- "travel",
+- "turek",
+- "turystyka",
+- "tychy",
+- "usenet",
+- "ustka",
+- "walbrzych",
+- "warmia",
+- "warszawa",
+- "waw",
+- "wegrow",
+- "wielun",
+- "wlocl",
+- "wloclawek",
+- "wodzislaw",
+- "wolomin",
+- "wroc",
+- "wroclaw",
+- "zachpomor",
+- "zagan",
+- "zakopane",
+- "zarow",
+- "zgora",
+- "zgorzelec",
+- "pa",
+- "po",
+- "so",
+- "sr",
+- "starostwo",
+- "ug",
+- "um",
+- "upow",
+- "uw",
+- "co",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "ac",
+- "biz",
+- "com",
+- "edu",
+- "est",
+- "gov",
+- "info",
+- "isla",
+- "name",
+- "net",
+- "org",
+- "pro",
+- "prof",
+- "aca",
+- "bar",
+- "cpa",
+- "eng",
+- "jur",
+- "law",
+- "med",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "plo",
+- "sec",
+- "blogspot",
+- "com",
+- "edu",
+- "gov",
+- "int",
+- "net",
+- "nome",
+- "org",
+- "publ",
+- "belau",
+- "co",
+- "ed",
+- "go",
+- "ne",
+- "or",
+- "com",
+- "coop",
+- "edu",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "name",
+- "net",
+- "org",
+- "sch",
+- "asso",
+- "blogspot",
+- "com",
+- "nom",
+- "arts",
+- "blogspot",
+- "com",
+- "firm",
+- "info",
+- "nom",
+- "nt",
+- "org",
+- "rec",
+- "store",
+- "tm",
+- "www",
+- "ac",
+- "co",
+- "edu",
+- "gov",
+- "in",
+- "org",
+- "ac",
+- "adygeya",
+- "altai",
+- "amur",
+- "amursk",
+- "arkhangelsk",
+- "astrakhan",
+- "baikal",
+- "bashkiria",
+- "belgorod",
+- "bir",
+- "bryansk",
+- "buryatia",
+- "cbg",
+- "chel",
+- "chelyabinsk",
+- "chita",
+- "chukotka",
+- "chuvashia",
+- "cmw",
+- "com",
+- "dagestan",
+- "dudinka",
+- "e-burg",
+- "edu",
+- "fareast",
+- "gov",
+- "grozny",
+- "int",
+- "irkutsk",
+- "ivanovo",
+- "izhevsk",
+- "jamal",
+- "jar",
+- "joshkar-ola",
+- "k-uralsk",
+- "kalmykia",
+- "kaluga",
+- "kamchatka",
+- "karelia",
+- "kazan",
+- "kchr",
+- "kemerovo",
+- "khabarovsk",
+- "khakassia",
+- "khv",
+- "kirov",
+- "kms",
+- "koenig",
+- "komi",
+- "kostroma",
+- "krasnoyarsk",
+- "kuban",
+- "kurgan",
+- "kursk",
+- "kustanai",
+- "kuzbass",
+- "lipetsk",
+- "magadan",
+- "magnitka",
+- "mari",
+- "mari-el",
+- "marine",
+- "mil",
+- "mordovia",
+- "mosreg",
+- "msk",
+- "murmansk",
+- "mytis",
+- "nakhodka",
+- "nalchik",
+- "net",
+- "nkz",
+- "nnov",
+- "norilsk",
+- "nov",
+- "novosibirsk",
+- "nsk",
+- "omsk",
+- "orenburg",
+- "org",
+- "oryol",
+- "oskol",
+- "palana",
+- "penza",
+- "perm",
+- "pp",
+- "pskov",
+- "ptz",
+- "pyatigorsk",
+- "rnd",
+- "rubtsovsk",
+- "ryazan",
+- "sakhalin",
+- "samara",
+- "saratov",
+- "simbirsk",
+- "smolensk",
+- "snz",
+- "spb",
+- "stavropol",
+- "stv",
+- "surgut",
+- "syzran",
+- "tambov",
+- "tatarstan",
+- "test",
+- "tom",
+- "tomsk",
+- "tsaritsyn",
+- "tsk",
+- "tula",
+- "tuva",
+- "tver",
+- "tyumen",
+- "udm",
+- "udmurtia",
+- "ulan-ude",
+- "vdonsk",
+- "vladikavkaz",
+- "vladimir",
+- "vladivostok",
+- "volgograd",
+- "vologda",
+- "voronezh",
+- "vrn",
+- "vyatka",
+- "yakutia",
+- "yamal",
+- "yaroslavl",
+- "yekaterinburg",
+- "yuzhno-sakhalinsk",
+- "zgrad",
+- "ac",
+- "co",
+- "com",
+- "edu",
+- "gouv",
+- "gov",
+- "int",
+- "mil",
+- "net",
+- "com",
+- "edu",
+- "gov",
+- "med",
+- "net",
+- "org",
+- "pub",
+- "sch",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "com",
+- "edu",
+- "gov",
+- "info",
+- "med",
+- "net",
+- "org",
+- "tv",
+- "a",
+- "ac",
+- "b",
+- "bd",
+- "blogspot",
+- "brand",
+- "c",
+- "d",
+- "e",
+- "f",
+- "fh",
+- "fhsk",
+- "fhv",
+- "g",
+- "h",
+- "i",
+- "k",
+- "komforb",
+- "kommunalforbund",
+- "komvux",
+- "l",
+- "lanbib",
+- "m",
+- "n",
+- "naturbruksgymn",
+- "o",
+- "org",
+- "p",
+- "parti",
+- "pp",
+- "press",
+- "r",
+- "s",
+- "sshn",
+- "t",
+- "tm",
+- "u",
+- "w",
+- "x",
+- "y",
+- "z",
+- "blogspot",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "per",
+- "com",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "blogspot",
+- "com",
+- "edu",
+- "gov",
+- "net",
+- "org",
+- "art",
+- "com",
+- "edu",
+- "gouv",
+- "org",
+- "perso",
+- "univ",
+- "com",
+- "net",
+- "org",
+- "co",
+- "com",
+- "consulado",
+- "edu",
+- "embaixada",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "principe",
+- "saotome",
+- "store",
+- "gov",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "ac",
+- "co",
+- "org",
+- "blogspot",
+- "ac",
+- "co",
+- "go",
+- "in",
+- "mi",
+- "net",
+- "or",
+- "ac",
+- "biz",
+- "co",
+- "com",
+- "edu",
+- "go",
+- "gov",
+- "int",
+- "mil",
+- "name",
+- "net",
+- "nic",
+- "org",
+- "test",
+- "web",
+- "gov",
+- "co",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "net",
+- "nom",
+- "org",
+- "agrinet",
+- "com",
+- "defense",
+- "edunet",
+- "ens",
+- "fin",
+- "gov",
+- "ind",
+- "info",
+- "intl",
+- "mincom",
+- "nat",
+- "net",
+- "org",
+- "perso",
+- "rnrt",
+- "rns",
+- "rnu",
+- "tourism",
+- "turen",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "nc",
+- "nic",
+- "gov",
+- "aero",
+- "biz",
+- "co",
+- "com",
+- "coop",
+- "edu",
+- "gov",
+- "info",
+- "int",
+- "jobs",
+- "mobi",
+- "museum",
+- "name",
+- "net",
+- "org",
+- "pro",
+- "travel",
+- "better-than",
+- "dyndns",
+- "on-the-web",
+- "worse-than",
+- "blogspot",
+- "club",
+- "com",
+- "ebiz",
+- "edu",
+- "game",
+- "gov",
+- "idv",
+- "mil",
+- "net",
+- "org",
+- "xn--czrw28b",
+- "xn--uc0atv",
+- "xn--zf0ao64a",
+- "ac",
+- "co",
+- "go",
+- "hotel",
+- "info",
+- "me",
+- "mil",
+- "mobi",
+- "ne",
+- "or",
+- "sc",
+- "tv",
+- "cherkassy",
+- "cherkasy",
+- "chernigov",
+- "chernihiv",
+- "chernivtsi",
+- "chernovtsy",
+- "ck",
+- "cn",
+- "co",
+- "com",
+- "cr",
+- "crimea",
+- "cv",
+- "dn",
+- "dnepropetrovsk",
+- "dnipropetrovsk",
+- "dominic",
+- "donetsk",
+- "dp",
+- "edu",
+- "gov",
+- "if",
+- "in",
+- "ivano-frankivsk",
+- "kh",
+- "kharkiv",
+- "kharkov",
+- "kherson",
+- "khmelnitskiy",
+- "khmelnytskyi",
+- "kiev",
+- "kirovograd",
+- "km",
+- "kr",
+- "krym",
+- "ks",
+- "kv",
+- "kyiv",
+- "lg",
+- "lt",
+- "lugansk",
+- "lutsk",
+- "lv",
+- "lviv",
+- "mk",
+- "mykolaiv",
+- "net",
+- "nikolaev",
+- "od",
+- "odesa",
+- "odessa",
+- "org",
+- "pl",
+- "poltava",
+- "pp",
+- "rivne",
+- "rovno",
+- "rv",
+- "sb",
+- "sebastopol",
+- "sevastopol",
+- "sm",
+- "sumy",
+- "te",
+- "ternopil",
+- "uz",
+- "uzhgorod",
+- "vinnica",
+- "vinnytsia",
+- "vn",
+- "volyn",
+- "yalta",
+- "zaporizhzhe",
+- "zaporizhzhia",
+- "zhitomir",
+- "zhytomyr",
+- "zp",
+- "zt",
+- "ac",
+- "co",
+- "com",
+- "go",
+- "ne",
+- "or",
+- "org",
+- "sc",
+- "bl",
+- "british-library",
+- "co",
+- "jet",
+- "mod",
+- "national-library-scotland",
+- "nel",
+- "nic",
+- "nls",
+- "parliament",
+- "sch",
+- "blogspot",
+- "ak",
+- "al",
+- "ar",
+- "as",
+- "az",
+- "ca",
+- "co",
+- "ct",
+- "dc",
+- "de",
+- "dni",
+- "fed",
+- "fl",
+- "ga",
+- "gu",
+- "hi",
+- "ia",
+- "id",
+- "il",
+- "in",
+- "is-by",
+- "isa",
+- "kids",
+- "ks",
+- "ky",
+- "la",
+- "land-4-sale",
+- "ma",
+- "md",
+- "me",
+- "mi",
+- "mn",
+- "mo",
+- "ms",
+- "mt",
+- "nc",
+- "nd",
+- "ne",
+- "nh",
+- "nj",
+- "nm",
+- "nsn",
+- "nv",
+- "ny",
+- "oh",
+- "ok",
+- "or",
+- "pa",
+- "pr",
+- "ri",
+- "sc",
+- "sd",
+- "stuff-4-sale",
+- "tn",
+- "tx",
+- "ut",
+- "va",
+- "vi",
+- "vt",
+- "wa",
+- "wi",
+- "wv",
+- "wy",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "chtr",
+- "paroch",
+- "pvt",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "cc",
+- "k12",
+- "lib",
+- "com",
+- "edu",
+- "gub",
+- "mil",
+- "net",
+- "org",
+- "co",
+- "com",
+- "net",
+- "org",
+- "com",
+- "edu",
+- "gov",
+- "mil",
+- "net",
+- "org",
+- "co",
+- "com",
+- "e12",
+- "edu",
+- "gov",
+- "info",
+- "mil",
+- "net",
+- "org",
+- "web",
+- "co",
+- "com",
+- "k12",
+- "net",
+- "org",
+- "ac",
+- "biz",
+- "com",
+- "edu",
+- "gov",
+- "health",
+- "info",
+- "int",
+- "name",
+- "net",
+- "org",
+- "pro",
+- "com",
+- "dyndns",
+- "edu",
+- "gov",
+- "mypets",
+- "net",
+- "org",
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/README docker-devmapper/vendor/src/code.google.com/p/go.net/README
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/README 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/README 1969-12-31 18:00:00.000000000 -0600
+@@ -1,3 +0,0 @@
+-This repository holds supplementary Go networking libraries.
+-
+-To submit changes to this repository, see http://golang.org/doc/contribute.html.
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/spdy/dictionary.go docker-devmapper/vendor/src/code.google.com/p/go.net/spdy/dictionary.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/spdy/dictionary.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/spdy/dictionary.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,187 +0,0 @@
+-// Copyright 2013 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 spdy
+-
+-// headerDictionary is the dictionary sent to the zlib compressor/decompressor.
+-var headerDictionary = []byte{
+- 0x00, 0x00, 0x00, 0x07, 0x6f, 0x70, 0x74, 0x69,
+- 0x6f, 0x6e, 0x73, 0x00, 0x00, 0x00, 0x04, 0x68,
+- 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x04, 0x70,
+- 0x6f, 0x73, 0x74, 0x00, 0x00, 0x00, 0x03, 0x70,
+- 0x75, 0x74, 0x00, 0x00, 0x00, 0x06, 0x64, 0x65,
+- 0x6c, 0x65, 0x74, 0x65, 0x00, 0x00, 0x00, 0x05,
+- 0x74, 0x72, 0x61, 0x63, 0x65, 0x00, 0x00, 0x00,
+- 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x00,
+- 0x00, 0x00, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70,
+- 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65,
+- 0x74, 0x00, 0x00, 0x00, 0x0f, 0x61, 0x63, 0x63,
+- 0x65, 0x70, 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f,
+- 0x64, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x0f,
+- 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x6c,
+- 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x00,
+- 0x00, 0x00, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x70,
+- 0x74, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73,
+- 0x00, 0x00, 0x00, 0x03, 0x61, 0x67, 0x65, 0x00,
+- 0x00, 0x00, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
+- 0x00, 0x00, 0x00, 0x0d, 0x61, 0x75, 0x74, 0x68,
+- 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
+- 0x6e, 0x00, 0x00, 0x00, 0x0d, 0x63, 0x61, 0x63,
+- 0x68, 0x65, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72,
+- 0x6f, 0x6c, 0x00, 0x00, 0x00, 0x0a, 0x63, 0x6f,
+- 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+- 0x00, 0x00, 0x00, 0x0c, 0x63, 0x6f, 0x6e, 0x74,
+- 0x65, 0x6e, 0x74, 0x2d, 0x62, 0x61, 0x73, 0x65,
+- 0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, 0x6e, 0x74,
+- 0x65, 0x6e, 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f,
+- 0x64, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10,
+- 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d,
+- 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65,
+- 0x00, 0x00, 0x00, 0x0e, 0x63, 0x6f, 0x6e, 0x74,
+- 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x65, 0x6e, 0x67,
+- 0x74, 0x68, 0x00, 0x00, 0x00, 0x10, 0x63, 0x6f,
+- 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x6f,
+- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00,
+- 0x00, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+- 0x74, 0x2d, 0x6d, 0x64, 0x35, 0x00, 0x00, 0x00,
+- 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
+- 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x00,
+- 0x00, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+- 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x00, 0x00,
+- 0x00, 0x04, 0x64, 0x61, 0x74, 0x65, 0x00, 0x00,
+- 0x00, 0x04, 0x65, 0x74, 0x61, 0x67, 0x00, 0x00,
+- 0x00, 0x06, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74,
+- 0x00, 0x00, 0x00, 0x07, 0x65, 0x78, 0x70, 0x69,
+- 0x72, 0x65, 0x73, 0x00, 0x00, 0x00, 0x04, 0x66,
+- 0x72, 0x6f, 0x6d, 0x00, 0x00, 0x00, 0x04, 0x68,
+- 0x6f, 0x73, 0x74, 0x00, 0x00, 0x00, 0x08, 0x69,
+- 0x66, 0x2d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00,
+- 0x00, 0x00, 0x11, 0x69, 0x66, 0x2d, 0x6d, 0x6f,
+- 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2d, 0x73,
+- 0x69, 0x6e, 0x63, 0x65, 0x00, 0x00, 0x00, 0x0d,
+- 0x69, 0x66, 0x2d, 0x6e, 0x6f, 0x6e, 0x65, 0x2d,
+- 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00, 0x00, 0x00,
+- 0x08, 0x69, 0x66, 0x2d, 0x72, 0x61, 0x6e, 0x67,
+- 0x65, 0x00, 0x00, 0x00, 0x13, 0x69, 0x66, 0x2d,
+- 0x75, 0x6e, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69,
+- 0x65, 0x64, 0x2d, 0x73, 0x69, 0x6e, 0x63, 0x65,
+- 0x00, 0x00, 0x00, 0x0d, 0x6c, 0x61, 0x73, 0x74,
+- 0x2d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65,
+- 0x64, 0x00, 0x00, 0x00, 0x08, 0x6c, 0x6f, 0x63,
+- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00,
+- 0x0c, 0x6d, 0x61, 0x78, 0x2d, 0x66, 0x6f, 0x72,
+- 0x77, 0x61, 0x72, 0x64, 0x73, 0x00, 0x00, 0x00,
+- 0x06, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x00,
+- 0x00, 0x00, 0x12, 0x70, 0x72, 0x6f, 0x78, 0x79,
+- 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74,
+- 0x69, 0x63, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00,
+- 0x13, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2d, 0x61,
+- 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61,
+- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05,
+- 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x00, 0x00,
+- 0x07, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72,
+- 0x00, 0x00, 0x00, 0x0b, 0x72, 0x65, 0x74, 0x72,
+- 0x79, 0x2d, 0x61, 0x66, 0x74, 0x65, 0x72, 0x00,
+- 0x00, 0x00, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65,
+- 0x72, 0x00, 0x00, 0x00, 0x02, 0x74, 0x65, 0x00,
+- 0x00, 0x00, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c,
+- 0x65, 0x72, 0x00, 0x00, 0x00, 0x11, 0x74, 0x72,
+- 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2d, 0x65,
+- 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x00,
+- 0x00, 0x00, 0x07, 0x75, 0x70, 0x67, 0x72, 0x61,
+- 0x64, 0x65, 0x00, 0x00, 0x00, 0x0a, 0x75, 0x73,
+- 0x65, 0x72, 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74,
+- 0x00, 0x00, 0x00, 0x04, 0x76, 0x61, 0x72, 0x79,
+- 0x00, 0x00, 0x00, 0x03, 0x76, 0x69, 0x61, 0x00,
+- 0x00, 0x00, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69,
+- 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, 0x77, 0x77,
+- 0x77, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e,
+- 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x00, 0x00,
+- 0x00, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64,
+- 0x00, 0x00, 0x00, 0x03, 0x67, 0x65, 0x74, 0x00,
+- 0x00, 0x00, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
+- 0x73, 0x00, 0x00, 0x00, 0x06, 0x32, 0x30, 0x30,
+- 0x20, 0x4f, 0x4b, 0x00, 0x00, 0x00, 0x07, 0x76,
+- 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x00,
+- 0x00, 0x08, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31,
+- 0x2e, 0x31, 0x00, 0x00, 0x00, 0x03, 0x75, 0x72,
+- 0x6c, 0x00, 0x00, 0x00, 0x06, 0x70, 0x75, 0x62,
+- 0x6c, 0x69, 0x63, 0x00, 0x00, 0x00, 0x0a, 0x73,
+- 0x65, 0x74, 0x2d, 0x63, 0x6f, 0x6f, 0x6b, 0x69,
+- 0x65, 0x00, 0x00, 0x00, 0x0a, 0x6b, 0x65, 0x65,
+- 0x70, 0x2d, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x00,
+- 0x00, 0x00, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69,
+- 0x6e, 0x31, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32,
+- 0x30, 0x31, 0x32, 0x30, 0x32, 0x32, 0x30, 0x35,
+- 0x32, 0x30, 0x36, 0x33, 0x30, 0x30, 0x33, 0x30,
+- 0x32, 0x33, 0x30, 0x33, 0x33, 0x30, 0x34, 0x33,
+- 0x30, 0x35, 0x33, 0x30, 0x36, 0x33, 0x30, 0x37,
+- 0x34, 0x30, 0x32, 0x34, 0x30, 0x35, 0x34, 0x30,
+- 0x36, 0x34, 0x30, 0x37, 0x34, 0x30, 0x38, 0x34,
+- 0x30, 0x39, 0x34, 0x31, 0x30, 0x34, 0x31, 0x31,
+- 0x34, 0x31, 0x32, 0x34, 0x31, 0x33, 0x34, 0x31,
+- 0x34, 0x34, 0x31, 0x35, 0x34, 0x31, 0x36, 0x34,
+- 0x31, 0x37, 0x35, 0x30, 0x32, 0x35, 0x30, 0x34,
+- 0x35, 0x30, 0x35, 0x32, 0x30, 0x33, 0x20, 0x4e,
+- 0x6f, 0x6e, 0x2d, 0x41, 0x75, 0x74, 0x68, 0x6f,
+- 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65,
+- 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61,
+- 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x30, 0x34, 0x20,
+- 0x4e, 0x6f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65,
+- 0x6e, 0x74, 0x33, 0x30, 0x31, 0x20, 0x4d, 0x6f,
+- 0x76, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x6d,
+- 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x34,
+- 0x30, 0x30, 0x20, 0x42, 0x61, 0x64, 0x20, 0x52,
+- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x34, 0x30,
+- 0x31, 0x20, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68,
+- 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x34, 0x30,
+- 0x33, 0x20, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64,
+- 0x64, 0x65, 0x6e, 0x34, 0x30, 0x34, 0x20, 0x4e,
+- 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64,
+- 0x35, 0x30, 0x30, 0x20, 0x49, 0x6e, 0x74, 0x65,
+- 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x53, 0x65, 0x72,
+- 0x76, 0x65, 0x72, 0x20, 0x45, 0x72, 0x72, 0x6f,
+- 0x72, 0x35, 0x30, 0x31, 0x20, 0x4e, 0x6f, 0x74,
+- 0x20, 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65,
+- 0x6e, 0x74, 0x65, 0x64, 0x35, 0x30, 0x33, 0x20,
+- 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20,
+- 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61,
+- 0x62, 0x6c, 0x65, 0x4a, 0x61, 0x6e, 0x20, 0x46,
+- 0x65, 0x62, 0x20, 0x4d, 0x61, 0x72, 0x20, 0x41,
+- 0x70, 0x72, 0x20, 0x4d, 0x61, 0x79, 0x20, 0x4a,
+- 0x75, 0x6e, 0x20, 0x4a, 0x75, 0x6c, 0x20, 0x41,
+- 0x75, 0x67, 0x20, 0x53, 0x65, 0x70, 0x74, 0x20,
+- 0x4f, 0x63, 0x74, 0x20, 0x4e, 0x6f, 0x76, 0x20,
+- 0x44, 0x65, 0x63, 0x20, 0x30, 0x30, 0x3a, 0x30,
+- 0x30, 0x3a, 0x30, 0x30, 0x20, 0x4d, 0x6f, 0x6e,
+- 0x2c, 0x20, 0x54, 0x75, 0x65, 0x2c, 0x20, 0x57,
+- 0x65, 0x64, 0x2c, 0x20, 0x54, 0x68, 0x75, 0x2c,
+- 0x20, 0x46, 0x72, 0x69, 0x2c, 0x20, 0x53, 0x61,
+- 0x74, 0x2c, 0x20, 0x53, 0x75, 0x6e, 0x2c, 0x20,
+- 0x47, 0x4d, 0x54, 0x63, 0x68, 0x75, 0x6e, 0x6b,
+- 0x65, 0x64, 0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f,
+- 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x69, 0x6d, 0x61,
+- 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0x2c, 0x69,
+- 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x67,
+- 0x2c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67,
+- 0x69, 0x66, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69,
+- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78,
+- 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69,
+- 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78,
+- 0x68, 0x74, 0x6d, 0x6c, 0x2b, 0x78, 0x6d, 0x6c,
+- 0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c,
+- 0x61, 0x69, 0x6e, 0x2c, 0x74, 0x65, 0x78, 0x74,
+- 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72,
+- 0x69, 0x70, 0x74, 0x2c, 0x70, 0x75, 0x62, 0x6c,
+- 0x69, 0x63, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74,
+- 0x65, 0x6d, 0x61, 0x78, 0x2d, 0x61, 0x67, 0x65,
+- 0x3d, 0x67, 0x7a, 0x69, 0x70, 0x2c, 0x64, 0x65,
+- 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64,
+- 0x63, 0x68, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65,
+- 0x74, 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x63,
+- 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x69,
+- 0x73, 0x6f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d,
+- 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x2c, 0x2a,
+- 0x2c, 0x65, 0x6e, 0x71, 0x3d, 0x30, 0x2e,
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/spdy/read.go docker-devmapper/vendor/src/code.google.com/p/go.net/spdy/read.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/spdy/read.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/spdy/read.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,348 +0,0 @@
+-// Copyright 2011 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 spdy
+-
+-import (
+- "compress/zlib"
+- "encoding/binary"
+- "io"
+- "net/http"
+- "strings"
+-)
+-
+-func (frame *SynStreamFrame) read(h ControlFrameHeader, f *Framer) error {
+- return f.readSynStreamFrame(h, frame)
+-}
+-
+-func (frame *SynReplyFrame) read(h ControlFrameHeader, f *Framer) error {
+- return f.readSynReplyFrame(h, frame)
+-}
+-
+-func (frame *RstStreamFrame) read(h ControlFrameHeader, f *Framer) error {
+- frame.CFHeader = h
+- if err := binary.Read(f.r, binary.BigEndian, &frame.StreamId); err != nil {
+- return err
+- }
+- if err := binary.Read(f.r, binary.BigEndian, &frame.Status); err != nil {
+- return err
+- }
+- if frame.Status == 0 {
+- return &Error{InvalidControlFrame, frame.StreamId}
+- }
+- if frame.StreamId == 0 {
+- return &Error{ZeroStreamId, 0}
+- }
+- return nil
+-}
+-
+-func (frame *SettingsFrame) read(h ControlFrameHeader, f *Framer) error {
+- frame.CFHeader = h
+- var numSettings uint32
+- if err := binary.Read(f.r, binary.BigEndian, &numSettings); err != nil {
+- return err
+- }
+- frame.FlagIdValues = make([]SettingsFlagIdValue, numSettings)
+- for i := uint32(0); i < numSettings; i++ {
+- if err := binary.Read(f.r, binary.BigEndian, &frame.FlagIdValues[i].Id); err != nil {
+- return err
+- }
+- frame.FlagIdValues[i].Flag = SettingsFlag((frame.FlagIdValues[i].Id & 0xff000000) >> 24)
+- frame.FlagIdValues[i].Id &= 0xffffff
+- if err := binary.Read(f.r, binary.BigEndian, &frame.FlagIdValues[i].Value); err != nil {
+- return err
+- }
+- }
+- return nil
+-}
+-
+-func (frame *PingFrame) read(h ControlFrameHeader, f *Framer) error {
+- frame.CFHeader = h
+- if err := binary.Read(f.r, binary.BigEndian, &frame.Id); err != nil {
+- return err
+- }
+- if frame.Id == 0 {
+- return &Error{ZeroStreamId, 0}
+- }
+- if frame.CFHeader.Flags != 0 {
+- return &Error{InvalidControlFrame, StreamId(frame.Id)}
+- }
+- return nil
+-}
+-
+-func (frame *GoAwayFrame) read(h ControlFrameHeader, f *Framer) error {
+- frame.CFHeader = h
+- if err := binary.Read(f.r, binary.BigEndian, &frame.LastGoodStreamId); err != nil {
+- return err
+- }
+- if frame.CFHeader.Flags != 0 {
+- return &Error{InvalidControlFrame, frame.LastGoodStreamId}
+- }
+- if frame.CFHeader.length != 8 {
+- return &Error{InvalidControlFrame, frame.LastGoodStreamId}
+- }
+- if err := binary.Read(f.r, binary.BigEndian, &frame.Status); err != nil {
+- return err
+- }
+- return nil
+-}
+-
+-func (frame *HeadersFrame) read(h ControlFrameHeader, f *Framer) error {
+- return f.readHeadersFrame(h, frame)
+-}
+-
+-func (frame *WindowUpdateFrame) read(h ControlFrameHeader, f *Framer) error {
+- frame.CFHeader = h
+- if err := binary.Read(f.r, binary.BigEndian, &frame.StreamId); err != nil {
+- return err
+- }
+- if frame.CFHeader.Flags != 0 {
+- return &Error{InvalidControlFrame, frame.StreamId}
+- }
+- if frame.CFHeader.length != 8 {
+- return &Error{InvalidControlFrame, frame.StreamId}
+- }
+- if err := binary.Read(f.r, binary.BigEndian, &frame.DeltaWindowSize); err != nil {
+- return err
+- }
+- return nil
+-}
+-
+-func newControlFrame(frameType ControlFrameType) (controlFrame, error) {
+- ctor, ok := cframeCtor[frameType]
+- if !ok {
+- return nil, &Error{Err: InvalidControlFrame}
+- }
+- return ctor(), nil
+-}
+-
+-var cframeCtor = map[ControlFrameType]func() controlFrame{
+- TypeSynStream: func() controlFrame { return new(SynStreamFrame) },
+- TypeSynReply: func() controlFrame { return new(SynReplyFrame) },
+- TypeRstStream: func() controlFrame { return new(RstStreamFrame) },
+- TypeSettings: func() controlFrame { return new(SettingsFrame) },
+- TypePing: func() controlFrame { return new(PingFrame) },
+- TypeGoAway: func() controlFrame { return new(GoAwayFrame) },
+- TypeHeaders: func() controlFrame { return new(HeadersFrame) },
+- TypeWindowUpdate: func() controlFrame { return new(WindowUpdateFrame) },
+-}
+-
+-func (f *Framer) uncorkHeaderDecompressor(payloadSize int64) error {
+- if f.headerDecompressor != nil {
+- f.headerReader.N = payloadSize
+- return nil
+- }
+- f.headerReader = io.LimitedReader{R: f.r, N: payloadSize}
+- decompressor, err := zlib.NewReaderDict(&f.headerReader, []byte(headerDictionary))
+- if err != nil {
+- return err
+- }
+- f.headerDecompressor = decompressor
+- return nil
+-}
+-
+-// ReadFrame reads SPDY encoded data and returns a decompressed Frame.
+-func (f *Framer) ReadFrame() (Frame, error) {
+- var firstWord uint32
+- if err := binary.Read(f.r, binary.BigEndian, &firstWord); err != nil {
+- return nil, err
+- }
+- if firstWord&0x80000000 != 0 {
+- frameType := ControlFrameType(firstWord & 0xffff)
+- version := uint16(firstWord >> 16 & 0x7fff)
+- return f.parseControlFrame(version, frameType)
+- }
+- return f.parseDataFrame(StreamId(firstWord & 0x7fffffff))
+-}
+-
+-func (f *Framer) parseControlFrame(version uint16, frameType ControlFrameType) (Frame, error) {
+- var length uint32
+- if err := binary.Read(f.r, binary.BigEndian, &length); err != nil {
+- return nil, err
+- }
+- flags := ControlFlags((length & 0xff000000) >> 24)
+- length &= 0xffffff
+- header := ControlFrameHeader{version, frameType, flags, length}
+- cframe, err := newControlFrame(frameType)
+- if err != nil {
+- return nil, err
+- }
+- if err = cframe.read(header, f); err != nil {
+- return nil, err
+- }
+- return cframe, nil
+-}
+-
+-func parseHeaderValueBlock(r io.Reader, streamId StreamId) (http.Header, error) {
+- var numHeaders uint32
+- if err := binary.Read(r, binary.BigEndian, &numHeaders); err != nil {
+- return nil, err
+- }
+- var e error
+- h := make(http.Header, int(numHeaders))
+- for i := 0; i < int(numHeaders); i++ {
+- var length uint32
+- if err := binary.Read(r, binary.BigEndian, &length); err != nil {
+- return nil, err
+- }
+- nameBytes := make([]byte, length)
+- if _, err := io.ReadFull(r, nameBytes); err != nil {
+- return nil, err
+- }
+- name := string(nameBytes)
+- if name != strings.ToLower(name) {
+- e = &Error{UnlowercasedHeaderName, streamId}
+- name = strings.ToLower(name)
+- }
+- if h[name] != nil {
+- e = &Error{DuplicateHeaders, streamId}
+- }
+- if err := binary.Read(r, binary.BigEndian, &length); err != nil {
+- return nil, err
+- }
+- value := make([]byte, length)
+- if _, err := io.ReadFull(r, value); err != nil {
+- return nil, err
+- }
+- valueList := strings.Split(string(value), headerValueSeparator)
+- for _, v := range valueList {
+- h.Add(name, v)
+- }
+- }
+- if e != nil {
+- return h, e
+- }
+- return h, nil
+-}
+-
+-func (f *Framer) readSynStreamFrame(h ControlFrameHeader, frame *SynStreamFrame) error {
+- frame.CFHeader = h
+- var err error
+- if err = binary.Read(f.r, binary.BigEndian, &frame.StreamId); err != nil {
+- return err
+- }
+- if err = binary.Read(f.r, binary.BigEndian, &frame.AssociatedToStreamId); err != nil {
+- return err
+- }
+- if err = binary.Read(f.r, binary.BigEndian, &frame.Priority); err != nil {
+- return err
+- }
+- frame.Priority >>= 5
+- if err = binary.Read(f.r, binary.BigEndian, &frame.Slot); err != nil {
+- return err
+- }
+- reader := f.r
+- if !f.headerCompressionDisabled {
+- err := f.uncorkHeaderDecompressor(int64(h.length - 10))
+- if err != nil {
+- return err
+- }
+- reader = f.headerDecompressor
+- }
+- frame.Headers, err = parseHeaderValueBlock(reader, frame.StreamId)
+- if !f.headerCompressionDisabled && (err == io.EOF && f.headerReader.N == 0 || f.headerReader.N != 0) {
+- err = &Error{WrongCompressedPayloadSize, 0}
+- }
+- if err != nil {
+- return err
+- }
+- for h := range frame.Headers {
+- if invalidReqHeaders[h] {
+- return &Error{InvalidHeaderPresent, frame.StreamId}
+- }
+- }
+- if frame.StreamId == 0 {
+- return &Error{ZeroStreamId, 0}
+- }
+- return nil
+-}
+-
+-func (f *Framer) readSynReplyFrame(h ControlFrameHeader, frame *SynReplyFrame) error {
+- frame.CFHeader = h
+- var err error
+- if err = binary.Read(f.r, binary.BigEndian, &frame.StreamId); err != nil {
+- return err
+- }
+- reader := f.r
+- if !f.headerCompressionDisabled {
+- err := f.uncorkHeaderDecompressor(int64(h.length - 4))
+- if err != nil {
+- return err
+- }
+- reader = f.headerDecompressor
+- }
+- frame.Headers, err = parseHeaderValueBlock(reader, frame.StreamId)
+- if !f.headerCompressionDisabled && (err == io.EOF && f.headerReader.N == 0 || f.headerReader.N != 0) {
+- err = &Error{WrongCompressedPayloadSize, 0}
+- }
+- if err != nil {
+- return err
+- }
+- for h := range frame.Headers {
+- if invalidRespHeaders[h] {
+- return &Error{InvalidHeaderPresent, frame.StreamId}
+- }
+- }
+- if frame.StreamId == 0 {
+- return &Error{ZeroStreamId, 0}
+- }
+- return nil
+-}
+-
+-func (f *Framer) readHeadersFrame(h ControlFrameHeader, frame *HeadersFrame) error {
+- frame.CFHeader = h
+- var err error
+- if err = binary.Read(f.r, binary.BigEndian, &frame.StreamId); err != nil {
+- return err
+- }
+- reader := f.r
+- if !f.headerCompressionDisabled {
+- err := f.uncorkHeaderDecompressor(int64(h.length - 4))
+- if err != nil {
+- return err
+- }
+- reader = f.headerDecompressor
+- }
+- frame.Headers, err = parseHeaderValueBlock(reader, frame.StreamId)
+- if !f.headerCompressionDisabled && (err == io.EOF && f.headerReader.N == 0 || f.headerReader.N != 0) {
+- err = &Error{WrongCompressedPayloadSize, 0}
+- }
+- if err != nil {
+- return err
+- }
+- var invalidHeaders map[string]bool
+- if frame.StreamId%2 == 0 {
+- invalidHeaders = invalidReqHeaders
+- } else {
+- invalidHeaders = invalidRespHeaders
+- }
+- for h := range frame.Headers {
+- if invalidHeaders[h] {
+- return &Error{InvalidHeaderPresent, frame.StreamId}
+- }
+- }
+- if frame.StreamId == 0 {
+- return &Error{ZeroStreamId, 0}
+- }
+- return nil
+-}
+-
+-func (f *Framer) parseDataFrame(streamId StreamId) (*DataFrame, error) {
+- var length uint32
+- if err := binary.Read(f.r, binary.BigEndian, &length); err != nil {
+- return nil, err
+- }
+- var frame DataFrame
+- frame.StreamId = streamId
+- frame.Flags = DataFlags(length >> 24)
+- length &= 0xffffff
+- frame.Data = make([]byte, length)
+- if _, err := io.ReadFull(f.r, frame.Data); err != nil {
+- return nil, err
+- }
+- if frame.StreamId == 0 {
+- return nil, &Error{ZeroStreamId, 0}
+- }
+- return &frame, nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/spdy/spdy_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/spdy/spdy_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/spdy/spdy_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/spdy/spdy_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,644 +0,0 @@
+-// Copyright 2011 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 spdy
+-
+-import (
+- "bytes"
+- "compress/zlib"
+- "encoding/base64"
+- "io"
+- "io/ioutil"
+- "net/http"
+- "reflect"
+- "testing"
+-)
+-
+-var HeadersFixture = http.Header{
+- "Url": []string{"http://www.google.com/"},
+- "Method": []string{"get"},
+- "Version": []string{"http/1.1"},
+-}
+-
+-func TestHeaderParsing(t *testing.T) {
+- var headerValueBlockBuf bytes.Buffer
+- writeHeaderValueBlock(&headerValueBlockBuf, HeadersFixture)
+- const bogusStreamId = 1
+- newHeaders, err := parseHeaderValueBlock(&headerValueBlockBuf, bogusStreamId)
+- if err != nil {
+- t.Fatal("parseHeaderValueBlock:", err)
+- }
+- if !reflect.DeepEqual(HeadersFixture, newHeaders) {
+- t.Fatal("got: ", newHeaders, "\nwant: ", HeadersFixture)
+- }
+-}
+-
+-func TestCreateParseSynStreamFrameCompressionDisable(t *testing.T) {
+- buffer := new(bytes.Buffer)
+- // Fixture framer for no compression test.
+- framer := &Framer{
+- headerCompressionDisabled: true,
+- w: buffer,
+- headerBuf: new(bytes.Buffer),
+- r: buffer,
+- }
+- synStreamFrame := SynStreamFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypeSynStream,
+- },
+- StreamId: 2,
+- Headers: HeadersFixture,
+- }
+- if err := framer.WriteFrame(&synStreamFrame); err != nil {
+- t.Fatal("WriteFrame without compression:", err)
+- }
+- frame, err := framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame without compression:", err)
+- }
+- parsedSynStreamFrame, ok := frame.(*SynStreamFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type:", frame)
+- }
+- if !reflect.DeepEqual(synStreamFrame, *parsedSynStreamFrame) {
+- t.Fatal("got: ", *parsedSynStreamFrame, "\nwant: ", synStreamFrame)
+- }
+-}
+-
+-func TestCreateParseSynStreamFrameCompressionEnable(t *testing.T) {
+- buffer := new(bytes.Buffer)
+- framer, err := NewFramer(buffer, buffer)
+- synStreamFrame := SynStreamFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypeSynStream,
+- },
+- StreamId: 2,
+- Headers: HeadersFixture,
+- }
+- if err != nil {
+- t.Fatal("Failed to create new framer:", err)
+- }
+- if err := framer.WriteFrame(&synStreamFrame); err != nil {
+- t.Fatal("WriteFrame with compression:", err)
+- }
+- frame, err := framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame with compression:", err)
+- }
+- parsedSynStreamFrame, ok := frame.(*SynStreamFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type:", frame)
+- }
+- if !reflect.DeepEqual(synStreamFrame, *parsedSynStreamFrame) {
+- t.Fatal("got: ", *parsedSynStreamFrame, "\nwant: ", synStreamFrame)
+- }
+-}
+-
+-func TestCreateParseSynReplyFrameCompressionDisable(t *testing.T) {
+- buffer := new(bytes.Buffer)
+- framer := &Framer{
+- headerCompressionDisabled: true,
+- w: buffer,
+- headerBuf: new(bytes.Buffer),
+- r: buffer,
+- }
+- synReplyFrame := SynReplyFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypeSynReply,
+- },
+- StreamId: 2,
+- Headers: HeadersFixture,
+- }
+- if err := framer.WriteFrame(&synReplyFrame); err != nil {
+- t.Fatal("WriteFrame without compression:", err)
+- }
+- frame, err := framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame without compression:", err)
+- }
+- parsedSynReplyFrame, ok := frame.(*SynReplyFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type:", frame)
+- }
+- if !reflect.DeepEqual(synReplyFrame, *parsedSynReplyFrame) {
+- t.Fatal("got: ", *parsedSynReplyFrame, "\nwant: ", synReplyFrame)
+- }
+-}
+-
+-func TestCreateParseSynReplyFrameCompressionEnable(t *testing.T) {
+- buffer := new(bytes.Buffer)
+- framer, err := NewFramer(buffer, buffer)
+- synReplyFrame := SynReplyFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypeSynReply,
+- },
+- StreamId: 2,
+- Headers: HeadersFixture,
+- }
+- if err != nil {
+- t.Fatal("Failed to create new framer:", err)
+- }
+- if err := framer.WriteFrame(&synReplyFrame); err != nil {
+- t.Fatal("WriteFrame with compression:", err)
+- }
+- frame, err := framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame with compression:", err)
+- }
+- parsedSynReplyFrame, ok := frame.(*SynReplyFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type:", frame)
+- }
+- if !reflect.DeepEqual(synReplyFrame, *parsedSynReplyFrame) {
+- t.Fatal("got: ", *parsedSynReplyFrame, "\nwant: ", synReplyFrame)
+- }
+-}
+-
+-func TestCreateParseRstStream(t *testing.T) {
+- buffer := new(bytes.Buffer)
+- framer, err := NewFramer(buffer, buffer)
+- if err != nil {
+- t.Fatal("Failed to create new framer:", err)
+- }
+- rstStreamFrame := RstStreamFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypeRstStream,
+- },
+- StreamId: 1,
+- Status: InvalidStream,
+- }
+- if err := framer.WriteFrame(&rstStreamFrame); err != nil {
+- t.Fatal("WriteFrame:", err)
+- }
+- frame, err := framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame:", err)
+- }
+- parsedRstStreamFrame, ok := frame.(*RstStreamFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type:", frame)
+- }
+- if !reflect.DeepEqual(rstStreamFrame, *parsedRstStreamFrame) {
+- t.Fatal("got: ", *parsedRstStreamFrame, "\nwant: ", rstStreamFrame)
+- }
+-}
+-
+-func TestCreateParseSettings(t *testing.T) {
+- buffer := new(bytes.Buffer)
+- framer, err := NewFramer(buffer, buffer)
+- if err != nil {
+- t.Fatal("Failed to create new framer:", err)
+- }
+- settingsFrame := SettingsFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypeSettings,
+- },
+- FlagIdValues: []SettingsFlagIdValue{
+- {FlagSettingsPersistValue, SettingsCurrentCwnd, 10},
+- {FlagSettingsPersisted, SettingsUploadBandwidth, 1},
+- },
+- }
+- if err := framer.WriteFrame(&settingsFrame); err != nil {
+- t.Fatal("WriteFrame:", err)
+- }
+- frame, err := framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame:", err)
+- }
+- parsedSettingsFrame, ok := frame.(*SettingsFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type:", frame)
+- }
+- if !reflect.DeepEqual(settingsFrame, *parsedSettingsFrame) {
+- t.Fatal("got: ", *parsedSettingsFrame, "\nwant: ", settingsFrame)
+- }
+-}
+-
+-func TestCreateParsePing(t *testing.T) {
+- buffer := new(bytes.Buffer)
+- framer, err := NewFramer(buffer, buffer)
+- if err != nil {
+- t.Fatal("Failed to create new framer:", err)
+- }
+- pingFrame := PingFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypePing,
+- },
+- Id: 31337,
+- }
+- if err := framer.WriteFrame(&pingFrame); err != nil {
+- t.Fatal("WriteFrame:", err)
+- }
+- if pingFrame.CFHeader.Flags != 0 {
+- t.Fatal("Incorrect frame type:", pingFrame)
+- }
+- frame, err := framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame:", err)
+- }
+- parsedPingFrame, ok := frame.(*PingFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type:", frame)
+- }
+- if parsedPingFrame.CFHeader.Flags != 0 {
+- t.Fatal("Parsed incorrect frame type:", parsedPingFrame)
+- }
+- if !reflect.DeepEqual(pingFrame, *parsedPingFrame) {
+- t.Fatal("got: ", *parsedPingFrame, "\nwant: ", pingFrame)
+- }
+-}
+-
+-func TestCreateParseGoAway(t *testing.T) {
+- buffer := new(bytes.Buffer)
+- framer, err := NewFramer(buffer, buffer)
+- if err != nil {
+- t.Fatal("Failed to create new framer:", err)
+- }
+- goAwayFrame := GoAwayFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypeGoAway,
+- },
+- LastGoodStreamId: 31337,
+- Status: 1,
+- }
+- if err := framer.WriteFrame(&goAwayFrame); err != nil {
+- t.Fatal("WriteFrame:", err)
+- }
+- if goAwayFrame.CFHeader.Flags != 0 {
+- t.Fatal("Incorrect frame type:", goAwayFrame)
+- }
+- if goAwayFrame.CFHeader.length != 8 {
+- t.Fatal("Incorrect frame type:", goAwayFrame)
+- }
+- frame, err := framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame:", err)
+- }
+- parsedGoAwayFrame, ok := frame.(*GoAwayFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type:", frame)
+- }
+- if parsedGoAwayFrame.CFHeader.Flags != 0 {
+- t.Fatal("Incorrect frame type:", parsedGoAwayFrame)
+- }
+- if parsedGoAwayFrame.CFHeader.length != 8 {
+- t.Fatal("Incorrect frame type:", parsedGoAwayFrame)
+- }
+- if !reflect.DeepEqual(goAwayFrame, *parsedGoAwayFrame) {
+- t.Fatal("got: ", *parsedGoAwayFrame, "\nwant: ", goAwayFrame)
+- }
+-}
+-
+-func TestCreateParseHeadersFrame(t *testing.T) {
+- buffer := new(bytes.Buffer)
+- framer := &Framer{
+- headerCompressionDisabled: true,
+- w: buffer,
+- headerBuf: new(bytes.Buffer),
+- r: buffer,
+- }
+- headersFrame := HeadersFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypeHeaders,
+- },
+- StreamId: 2,
+- }
+- headersFrame.Headers = HeadersFixture
+- if err := framer.WriteFrame(&headersFrame); err != nil {
+- t.Fatal("WriteFrame without compression:", err)
+- }
+- frame, err := framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame without compression:", err)
+- }
+- parsedHeadersFrame, ok := frame.(*HeadersFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type:", frame)
+- }
+- if !reflect.DeepEqual(headersFrame, *parsedHeadersFrame) {
+- t.Fatal("got: ", *parsedHeadersFrame, "\nwant: ", headersFrame)
+- }
+-}
+-
+-func TestCreateParseHeadersFrameCompressionEnable(t *testing.T) {
+- buffer := new(bytes.Buffer)
+- headersFrame := HeadersFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypeHeaders,
+- },
+- StreamId: 2,
+- }
+- headersFrame.Headers = HeadersFixture
+-
+- framer, err := NewFramer(buffer, buffer)
+- if err := framer.WriteFrame(&headersFrame); err != nil {
+- t.Fatal("WriteFrame with compression:", err)
+- }
+- frame, err := framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame with compression:", err)
+- }
+- parsedHeadersFrame, ok := frame.(*HeadersFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type:", frame)
+- }
+- if !reflect.DeepEqual(headersFrame, *parsedHeadersFrame) {
+- t.Fatal("got: ", *parsedHeadersFrame, "\nwant: ", headersFrame)
+- }
+-}
+-
+-func TestCreateParseWindowUpdateFrame(t *testing.T) {
+- buffer := new(bytes.Buffer)
+- framer, err := NewFramer(buffer, buffer)
+- if err != nil {
+- t.Fatal("Failed to create new framer:", err)
+- }
+- windowUpdateFrame := WindowUpdateFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypeWindowUpdate,
+- },
+- StreamId: 31337,
+- DeltaWindowSize: 1,
+- }
+- if err := framer.WriteFrame(&windowUpdateFrame); err != nil {
+- t.Fatal("WriteFrame:", err)
+- }
+- if windowUpdateFrame.CFHeader.Flags != 0 {
+- t.Fatal("Incorrect frame type:", windowUpdateFrame)
+- }
+- if windowUpdateFrame.CFHeader.length != 8 {
+- t.Fatal("Incorrect frame type:", windowUpdateFrame)
+- }
+- frame, err := framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame:", err)
+- }
+- parsedWindowUpdateFrame, ok := frame.(*WindowUpdateFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type:", frame)
+- }
+- if parsedWindowUpdateFrame.CFHeader.Flags != 0 {
+- t.Fatal("Incorrect frame type:", parsedWindowUpdateFrame)
+- }
+- if parsedWindowUpdateFrame.CFHeader.length != 8 {
+- t.Fatal("Incorrect frame type:", parsedWindowUpdateFrame)
+- }
+- if !reflect.DeepEqual(windowUpdateFrame, *parsedWindowUpdateFrame) {
+- t.Fatal("got: ", *parsedWindowUpdateFrame, "\nwant: ", windowUpdateFrame)
+- }
+-}
+-
+-func TestCreateParseDataFrame(t *testing.T) {
+- buffer := new(bytes.Buffer)
+- framer, err := NewFramer(buffer, buffer)
+- if err != nil {
+- t.Fatal("Failed to create new framer:", err)
+- }
+- dataFrame := DataFrame{
+- StreamId: 1,
+- Data: []byte{'h', 'e', 'l', 'l', 'o'},
+- }
+- if err := framer.WriteFrame(&dataFrame); err != nil {
+- t.Fatal("WriteFrame:", err)
+- }
+- frame, err := framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame:", err)
+- }
+- parsedDataFrame, ok := frame.(*DataFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type:", frame)
+- }
+- if !reflect.DeepEqual(dataFrame, *parsedDataFrame) {
+- t.Fatal("got: ", *parsedDataFrame, "\nwant: ", dataFrame)
+- }
+-}
+-
+-func TestCompressionContextAcrossFrames(t *testing.T) {
+- buffer := new(bytes.Buffer)
+- framer, err := NewFramer(buffer, buffer)
+- if err != nil {
+- t.Fatal("Failed to create new framer:", err)
+- }
+- headersFrame := HeadersFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypeHeaders,
+- },
+- StreamId: 2,
+- Headers: HeadersFixture,
+- }
+- if err := framer.WriteFrame(&headersFrame); err != nil {
+- t.Fatal("WriteFrame (HEADERS):", err)
+- }
+- synStreamFrame := SynStreamFrame{
+- ControlFrameHeader{
+- Version,
+- TypeSynStream,
+- 0, // Flags
+- 0, // length
+- },
+- 2, // StreamId
+- 0, // AssociatedTOStreamID
+- 0, // Priority
+- 1, // Slot
+- nil, // Headers
+- }
+- synStreamFrame.Headers = HeadersFixture
+-
+- if err := framer.WriteFrame(&synStreamFrame); err != nil {
+- t.Fatal("WriteFrame (SYN_STREAM):", err)
+- }
+- frame, err := framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame (HEADERS):", err, buffer.Bytes())
+- }
+- parsedHeadersFrame, ok := frame.(*HeadersFrame)
+- if !ok {
+- t.Fatalf("expected HeadersFrame; got %T %v", frame, frame)
+- }
+- if !reflect.DeepEqual(headersFrame, *parsedHeadersFrame) {
+- t.Fatal("got: ", *parsedHeadersFrame, "\nwant: ", headersFrame)
+- }
+- frame, err = framer.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame (SYN_STREAM):", err, buffer.Bytes())
+- }
+- parsedSynStreamFrame, ok := frame.(*SynStreamFrame)
+- if !ok {
+- t.Fatalf("expected SynStreamFrame; got %T %v", frame, frame)
+- }
+- if !reflect.DeepEqual(synStreamFrame, *parsedSynStreamFrame) {
+- t.Fatal("got: ", *parsedSynStreamFrame, "\nwant: ", synStreamFrame)
+- }
+-}
+-
+-func TestMultipleSPDYFrames(t *testing.T) {
+- // Initialize the framers.
+- pr1, pw1 := io.Pipe()
+- pr2, pw2 := io.Pipe()
+- writer, err := NewFramer(pw1, pr2)
+- if err != nil {
+- t.Fatal("Failed to create writer:", err)
+- }
+- reader, err := NewFramer(pw2, pr1)
+- if err != nil {
+- t.Fatal("Failed to create reader:", err)
+- }
+-
+- // Set up the frames we're actually transferring.
+- headersFrame := HeadersFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypeHeaders,
+- },
+- StreamId: 2,
+- Headers: HeadersFixture,
+- }
+- synStreamFrame := SynStreamFrame{
+- CFHeader: ControlFrameHeader{
+- version: Version,
+- frameType: TypeSynStream,
+- },
+- StreamId: 2,
+- Headers: HeadersFixture,
+- }
+-
+- // Start the goroutines to write the frames.
+- go func() {
+- if err := writer.WriteFrame(&headersFrame); err != nil {
+- t.Fatal("WriteFrame (HEADERS): ", err)
+- }
+- if err := writer.WriteFrame(&synStreamFrame); err != nil {
+- t.Fatal("WriteFrame (SYN_STREAM): ", err)
+- }
+- }()
+-
+- // Read the frames and verify they look as expected.
+- frame, err := reader.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame (HEADERS): ", err)
+- }
+- parsedHeadersFrame, ok := frame.(*HeadersFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type:", frame)
+- }
+- if !reflect.DeepEqual(headersFrame, *parsedHeadersFrame) {
+- t.Fatal("got: ", *parsedHeadersFrame, "\nwant: ", headersFrame)
+- }
+- frame, err = reader.ReadFrame()
+- if err != nil {
+- t.Fatal("ReadFrame (SYN_STREAM):", err)
+- }
+- parsedSynStreamFrame, ok := frame.(*SynStreamFrame)
+- if !ok {
+- t.Fatal("Parsed incorrect frame type.")
+- }
+- if !reflect.DeepEqual(synStreamFrame, *parsedSynStreamFrame) {
+- t.Fatal("got: ", *parsedSynStreamFrame, "\nwant: ", synStreamFrame)
+- }
+-}
+-
+-func TestReadMalformedZlibHeader(t *testing.T) {
+- // These were constructed by corrupting the first byte of the zlib
+- // header after writing.
+- malformedStructs := map[string]string{
+- "SynStreamFrame": "gAIAAQAAABgAAAACAAAAAAAAF/nfolGyYmAAAAAA//8=",
+- "SynReplyFrame": "gAIAAgAAABQAAAACAAAX+d+iUbJiYAAAAAD//w==",
+- "HeadersFrame": "gAIACAAAABQAAAACAAAX+d+iUbJiYAAAAAD//w==",
+- }
+- for name, bad := range malformedStructs {
+- b, err := base64.StdEncoding.DecodeString(bad)
+- if err != nil {
+- t.Errorf("Unable to decode base64 encoded frame %s: %v", name, err)
+- }
+- buf := bytes.NewBuffer(b)
+- reader, err := NewFramer(buf, buf)
+- if err != nil {
+- t.Fatalf("NewFramer: %v", err)
+- }
+- _, err = reader.ReadFrame()
+- if err != zlib.ErrHeader {
+- t.Errorf("Frame %s, expected: %#v, actual: %#v", name, zlib.ErrHeader, err)
+- }
+- }
+-}
+-
+-// TODO: these tests are too weak for updating SPDY spec. Fix me.
+-
+-type zeroStream struct {
+- frame Frame
+- encoded string
+-}
+-
+-var streamIdZeroFrames = map[string]zeroStream{
+- "SynStreamFrame": {
+- &SynStreamFrame{StreamId: 0},
+- "gAIAAQAAABgAAAAAAAAAAAAAePnfolGyYmAAAAAA//8=",
+- },
+- "SynReplyFrame": {
+- &SynReplyFrame{StreamId: 0},
+- "gAIAAgAAABQAAAAAAAB4+d+iUbJiYAAAAAD//w==",
+- },
+- "RstStreamFrame": {
+- &RstStreamFrame{StreamId: 0},
+- "gAIAAwAAAAgAAAAAAAAAAA==",
+- },
+- "HeadersFrame": {
+- &HeadersFrame{StreamId: 0},
+- "gAIACAAAABQAAAAAAAB4+d+iUbJiYAAAAAD//w==",
+- },
+- "DataFrame": {
+- &DataFrame{StreamId: 0},
+- "AAAAAAAAAAA=",
+- },
+- "PingFrame": {
+- &PingFrame{Id: 0},
+- "gAIABgAAAAQAAAAA",
+- },
+-}
+-
+-func TestNoZeroStreamId(t *testing.T) {
+- t.Log("skipping") // TODO: update to work with SPDY3
+- return
+-
+- for name, f := range streamIdZeroFrames {
+- b, err := base64.StdEncoding.DecodeString(f.encoded)
+- if err != nil {
+- t.Errorf("Unable to decode base64 encoded frame %s: %v", f, err)
+- continue
+- }
+- framer, err := NewFramer(ioutil.Discard, bytes.NewReader(b))
+- if err != nil {
+- t.Fatalf("NewFramer: %v", err)
+- }
+- err = framer.WriteFrame(f.frame)
+- checkZeroStreamId(t, name, "WriteFrame", err)
+-
+- _, err = framer.ReadFrame()
+- checkZeroStreamId(t, name, "ReadFrame", err)
+- }
+-}
+-
+-func checkZeroStreamId(t *testing.T, frame string, method string, err error) {
+- if err == nil {
+- t.Errorf("%s ZeroStreamId, no error on %s", method, frame)
+- return
+- }
+- eerr, ok := err.(*Error)
+- if !ok || eerr.Err != ZeroStreamId {
+- t.Errorf("%s ZeroStreamId, incorrect error %#v, frame %s", method, eerr, frame)
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/spdy/types.go docker-devmapper/vendor/src/code.google.com/p/go.net/spdy/types.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/spdy/types.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/spdy/types.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,275 +0,0 @@
+-// Copyright 2011 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 spdy implements the SPDY protocol (currently SPDY/3), described in
+-// http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3.
+-package spdy
+-
+-import (
+- "bytes"
+- "compress/zlib"
+- "io"
+- "net/http"
+-)
+-
+-// Version is the protocol version number that this package implements.
+-const Version = 3
+-
+-// ControlFrameType stores the type field in a control frame header.
+-type ControlFrameType uint16
+-
+-const (
+- TypeSynStream ControlFrameType = 0x0001
+- TypeSynReply = 0x0002
+- TypeRstStream = 0x0003
+- TypeSettings = 0x0004
+- TypePing = 0x0006
+- TypeGoAway = 0x0007
+- TypeHeaders = 0x0008
+- TypeWindowUpdate = 0x0009
+-)
+-
+-// ControlFlags are the flags that can be set on a control frame.
+-type ControlFlags uint8
+-
+-const (
+- ControlFlagFin ControlFlags = 0x01
+- ControlFlagUnidirectional = 0x02
+- ControlFlagSettingsClearSettings = 0x01
+-)
+-
+-// DataFlags are the flags that can be set on a data frame.
+-type DataFlags uint8
+-
+-const (
+- DataFlagFin DataFlags = 0x01
+-)
+-
+-// MaxDataLength is the maximum number of bytes that can be stored in one frame.
+-const MaxDataLength = 1<<24 - 1
+-
+-// headerValueSepator separates multiple header values.
+-const headerValueSeparator = "\x00"
+-
+-// Frame is a single SPDY frame in its unpacked in-memory representation. Use
+-// Framer to read and write it.
+-type Frame interface {
+- write(f *Framer) error
+-}
+-
+-// ControlFrameHeader contains all the fields in a control frame header,
+-// in its unpacked in-memory representation.
+-type ControlFrameHeader struct {
+- // Note, high bit is the "Control" bit.
+- version uint16 // spdy version number
+- frameType ControlFrameType
+- Flags ControlFlags
+- length uint32 // length of data field
+-}
+-
+-type controlFrame interface {
+- Frame
+- read(h ControlFrameHeader, f *Framer) error
+-}
+-
+-// StreamId represents a 31-bit value identifying the stream.
+-type StreamId uint32
+-
+-// SynStreamFrame is the unpacked, in-memory representation of a SYN_STREAM
+-// frame.
+-type SynStreamFrame struct {
+- CFHeader ControlFrameHeader
+- StreamId StreamId
+- AssociatedToStreamId StreamId // stream id for a stream which this stream is associated to
+- Priority uint8 // priority of this frame (3-bit)
+- Slot uint8 // index in the server's credential vector of the client certificate
+- Headers http.Header
+-}
+-
+-// SynReplyFrame is the unpacked, in-memory representation of a SYN_REPLY frame.
+-type SynReplyFrame struct {
+- CFHeader ControlFrameHeader
+- StreamId StreamId
+- Headers http.Header
+-}
+-
+-// RstStreamStatus represents the status that led to a RST_STREAM.
+-type RstStreamStatus uint32
+-
+-const (
+- ProtocolError RstStreamStatus = iota + 1
+- InvalidStream
+- RefusedStream
+- UnsupportedVersion
+- Cancel
+- InternalError
+- FlowControlError
+- StreamInUse
+- StreamAlreadyClosed
+- InvalidCredentials
+- FrameTooLarge
+-)
+-
+-// RstStreamFrame is the unpacked, in-memory representation of a RST_STREAM
+-// frame.
+-type RstStreamFrame struct {
+- CFHeader ControlFrameHeader
+- StreamId StreamId
+- Status RstStreamStatus
+-}
+-
+-// SettingsFlag represents a flag in a SETTINGS frame.
+-type SettingsFlag uint8
+-
+-const (
+- FlagSettingsPersistValue SettingsFlag = 0x1
+- FlagSettingsPersisted = 0x2
+-)
+-
+-// SettingsFlag represents the id of an id/value pair in a SETTINGS frame.
+-type SettingsId uint32
+-
+-const (
+- SettingsUploadBandwidth SettingsId = iota + 1
+- SettingsDownloadBandwidth
+- SettingsRoundTripTime
+- SettingsMaxConcurrentStreams
+- SettingsCurrentCwnd
+- SettingsDownloadRetransRate
+- SettingsInitialWindowSize
+- SettingsClientCretificateVectorSize
+-)
+-
+-// SettingsFlagIdValue is the unpacked, in-memory representation of the
+-// combined flag/id/value for a setting in a SETTINGS frame.
+-type SettingsFlagIdValue struct {
+- Flag SettingsFlag
+- Id SettingsId
+- Value uint32
+-}
+-
+-// SettingsFrame is the unpacked, in-memory representation of a SPDY
+-// SETTINGS frame.
+-type SettingsFrame struct {
+- CFHeader ControlFrameHeader
+- FlagIdValues []SettingsFlagIdValue
+-}
+-
+-// PingFrame is the unpacked, in-memory representation of a PING frame.
+-type PingFrame struct {
+- CFHeader ControlFrameHeader
+- Id uint32 // unique id for this ping, from server is even, from client is odd.
+-}
+-
+-// GoAwayStatus represents the status in a GoAwayFrame.
+-type GoAwayStatus uint32
+-
+-const (
+- GoAwayOK GoAwayStatus = iota
+- GoAwayProtocolError
+- GoAwayInternalError
+-)
+-
+-// GoAwayFrame is the unpacked, in-memory representation of a GOAWAY frame.
+-type GoAwayFrame struct {
+- CFHeader ControlFrameHeader
+- LastGoodStreamId StreamId // last stream id which was accepted by sender
+- Status GoAwayStatus
+-}
+-
+-// HeadersFrame is the unpacked, in-memory representation of a HEADERS frame.
+-type HeadersFrame struct {
+- CFHeader ControlFrameHeader
+- StreamId StreamId
+- Headers http.Header
+-}
+-
+-// WindowUpdateFrame is the unpacked, in-memory representation of a
+-// WINDOW_UPDATE frame.
+-type WindowUpdateFrame struct {
+- CFHeader ControlFrameHeader
+- StreamId StreamId
+- DeltaWindowSize uint32 // additional number of bytes to existing window size
+-}
+-
+-// TODO: Implement credential frame and related methods.
+-
+-// DataFrame is the unpacked, in-memory representation of a DATA frame.
+-type DataFrame struct {
+- // Note, high bit is the "Control" bit. Should be 0 for data frames.
+- StreamId StreamId
+- Flags DataFlags
+- Data []byte // payload data of this frame
+-}
+-
+-// A SPDY specific error.
+-type ErrorCode string
+-
+-const (
+- UnlowercasedHeaderName ErrorCode = "header was not lowercased"
+- DuplicateHeaders = "multiple headers with same name"
+- WrongCompressedPayloadSize = "compressed payload size was incorrect"
+- UnknownFrameType = "unknown frame type"
+- InvalidControlFrame = "invalid control frame"
+- InvalidDataFrame = "invalid data frame"
+- InvalidHeaderPresent = "frame contained invalid header"
+- ZeroStreamId = "stream id zero is disallowed"
+-)
+-
+-// Error contains both the type of error and additional values. StreamId is 0
+-// if Error is not associated with a stream.
+-type Error struct {
+- Err ErrorCode
+- StreamId StreamId
+-}
+-
+-func (e *Error) Error() string {
+- return string(e.Err)
+-}
+-
+-var invalidReqHeaders = map[string]bool{
+- "Connection": true,
+- "Host": true,
+- "Keep-Alive": true,
+- "Proxy-Connection": true,
+- "Transfer-Encoding": true,
+-}
+-
+-var invalidRespHeaders = map[string]bool{
+- "Connection": true,
+- "Keep-Alive": true,
+- "Proxy-Connection": true,
+- "Transfer-Encoding": true,
+-}
+-
+-// Framer handles serializing/deserializing SPDY frames, including compressing/
+-// decompressing payloads.
+-type Framer struct {
+- headerCompressionDisabled bool
+- w io.Writer
+- headerBuf *bytes.Buffer
+- headerCompressor *zlib.Writer
+- r io.Reader
+- headerReader io.LimitedReader
+- headerDecompressor io.ReadCloser
+-}
+-
+-// NewFramer allocates a new Framer for a given SPDY connection, repesented by
+-// a io.Writer and io.Reader. Note that Framer will read and write individual fields
+-// from/to the Reader and Writer, so the caller should pass in an appropriately
+-// buffered implementation to optimize performance.
+-func NewFramer(w io.Writer, r io.Reader) (*Framer, error) {
+- compressBuf := new(bytes.Buffer)
+- compressor, err := zlib.NewWriterLevelDict(compressBuf, zlib.BestCompression, []byte(headerDictionary))
+- if err != nil {
+- return nil, err
+- }
+- framer := &Framer{
+- w: w,
+- headerBuf: compressBuf,
+- headerCompressor: compressor,
+- r: r,
+- }
+- return framer, nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/spdy/write.go docker-devmapper/vendor/src/code.google.com/p/go.net/spdy/write.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/spdy/write.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/spdy/write.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,318 +0,0 @@
+-// Copyright 2011 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 spdy
+-
+-import (
+- "encoding/binary"
+- "io"
+- "net/http"
+- "strings"
+-)
+-
+-func (frame *SynStreamFrame) write(f *Framer) error {
+- return f.writeSynStreamFrame(frame)
+-}
+-
+-func (frame *SynReplyFrame) write(f *Framer) error {
+- return f.writeSynReplyFrame(frame)
+-}
+-
+-func (frame *RstStreamFrame) write(f *Framer) (err error) {
+- if frame.StreamId == 0 {
+- return &Error{ZeroStreamId, 0}
+- }
+- frame.CFHeader.version = Version
+- frame.CFHeader.frameType = TypeRstStream
+- frame.CFHeader.Flags = 0
+- frame.CFHeader.length = 8
+-
+- // Serialize frame to Writer.
+- if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
+- return
+- }
+- if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil {
+- return
+- }
+- if frame.Status == 0 {
+- return &Error{InvalidControlFrame, frame.StreamId}
+- }
+- if err = binary.Write(f.w, binary.BigEndian, frame.Status); err != nil {
+- return
+- }
+- return
+-}
+-
+-func (frame *SettingsFrame) write(f *Framer) (err error) {
+- frame.CFHeader.version = Version
+- frame.CFHeader.frameType = TypeSettings
+- frame.CFHeader.length = uint32(len(frame.FlagIdValues)*8 + 4)
+-
+- // Serialize frame to Writer.
+- if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
+- return
+- }
+- if err = binary.Write(f.w, binary.BigEndian, uint32(len(frame.FlagIdValues))); err != nil {
+- return
+- }
+- for _, flagIdValue := range frame.FlagIdValues {
+- flagId := uint32(flagIdValue.Flag)<<24 | uint32(flagIdValue.Id)
+- if err = binary.Write(f.w, binary.BigEndian, flagId); err != nil {
+- return
+- }
+- if err = binary.Write(f.w, binary.BigEndian, flagIdValue.Value); err != nil {
+- return
+- }
+- }
+- return
+-}
+-
+-func (frame *PingFrame) write(f *Framer) (err error) {
+- if frame.Id == 0 {
+- return &Error{ZeroStreamId, 0}
+- }
+- frame.CFHeader.version = Version
+- frame.CFHeader.frameType = TypePing
+- frame.CFHeader.Flags = 0
+- frame.CFHeader.length = 4
+-
+- // Serialize frame to Writer.
+- if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
+- return
+- }
+- if err = binary.Write(f.w, binary.BigEndian, frame.Id); err != nil {
+- return
+- }
+- return
+-}
+-
+-func (frame *GoAwayFrame) write(f *Framer) (err error) {
+- frame.CFHeader.version = Version
+- frame.CFHeader.frameType = TypeGoAway
+- frame.CFHeader.Flags = 0
+- frame.CFHeader.length = 8
+-
+- // Serialize frame to Writer.
+- if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
+- return
+- }
+- if err = binary.Write(f.w, binary.BigEndian, frame.LastGoodStreamId); err != nil {
+- return
+- }
+- if err = binary.Write(f.w, binary.BigEndian, frame.Status); err != nil {
+- return
+- }
+- return nil
+-}
+-
+-func (frame *HeadersFrame) write(f *Framer) error {
+- return f.writeHeadersFrame(frame)
+-}
+-
+-func (frame *WindowUpdateFrame) write(f *Framer) (err error) {
+- frame.CFHeader.version = Version
+- frame.CFHeader.frameType = TypeWindowUpdate
+- frame.CFHeader.Flags = 0
+- frame.CFHeader.length = 8
+-
+- // Serialize frame to Writer.
+- if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
+- return
+- }
+- if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil {
+- return
+- }
+- if err = binary.Write(f.w, binary.BigEndian, frame.DeltaWindowSize); err != nil {
+- return
+- }
+- return nil
+-}
+-
+-func (frame *DataFrame) write(f *Framer) error {
+- return f.writeDataFrame(frame)
+-}
+-
+-// WriteFrame writes a frame.
+-func (f *Framer) WriteFrame(frame Frame) error {
+- return frame.write(f)
+-}
+-
+-func writeControlFrameHeader(w io.Writer, h ControlFrameHeader) error {
+- if err := binary.Write(w, binary.BigEndian, 0x8000|h.version); err != nil {
+- return err
+- }
+- if err := binary.Write(w, binary.BigEndian, h.frameType); err != nil {
+- return err
+- }
+- flagsAndLength := uint32(h.Flags)<<24 | h.length
+- if err := binary.Write(w, binary.BigEndian, flagsAndLength); err != nil {
+- return err
+- }
+- return nil
+-}
+-
+-func writeHeaderValueBlock(w io.Writer, h http.Header) (n int, err error) {
+- n = 0
+- if err = binary.Write(w, binary.BigEndian, uint32(len(h))); err != nil {
+- return
+- }
+- n += 2
+- for name, values := range h {
+- if err = binary.Write(w, binary.BigEndian, uint32(len(name))); err != nil {
+- return
+- }
+- n += 2
+- name = strings.ToLower(name)
+- if _, err = io.WriteString(w, name); err != nil {
+- return
+- }
+- n += len(name)
+- v := strings.Join(values, headerValueSeparator)
+- if err = binary.Write(w, binary.BigEndian, uint32(len(v))); err != nil {
+- return
+- }
+- n += 2
+- if _, err = io.WriteString(w, v); err != nil {
+- return
+- }
+- n += len(v)
+- }
+- return
+-}
+-
+-func (f *Framer) writeSynStreamFrame(frame *SynStreamFrame) (err error) {
+- if frame.StreamId == 0 {
+- return &Error{ZeroStreamId, 0}
+- }
+- // Marshal the headers.
+- var writer io.Writer = f.headerBuf
+- if !f.headerCompressionDisabled {
+- writer = f.headerCompressor
+- }
+- if _, err = writeHeaderValueBlock(writer, frame.Headers); err != nil {
+- return
+- }
+- if !f.headerCompressionDisabled {
+- f.headerCompressor.Flush()
+- }
+-
+- // Set ControlFrameHeader.
+- frame.CFHeader.version = Version
+- frame.CFHeader.frameType = TypeSynStream
+- frame.CFHeader.length = uint32(len(f.headerBuf.Bytes()) + 10)
+-
+- // Serialize frame to Writer.
+- if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
+- return err
+- }
+- if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil {
+- return err
+- }
+- if err = binary.Write(f.w, binary.BigEndian, frame.AssociatedToStreamId); err != nil {
+- return err
+- }
+- if err = binary.Write(f.w, binary.BigEndian, frame.Priority<<5); err != nil {
+- return err
+- }
+- if err = binary.Write(f.w, binary.BigEndian, frame.Slot); err != nil {
+- return err
+- }
+- if _, err = f.w.Write(f.headerBuf.Bytes()); err != nil {
+- return err
+- }
+- f.headerBuf.Reset()
+- return nil
+-}
+-
+-func (f *Framer) writeSynReplyFrame(frame *SynReplyFrame) (err error) {
+- if frame.StreamId == 0 {
+- return &Error{ZeroStreamId, 0}
+- }
+- // Marshal the headers.
+- var writer io.Writer = f.headerBuf
+- if !f.headerCompressionDisabled {
+- writer = f.headerCompressor
+- }
+- if _, err = writeHeaderValueBlock(writer, frame.Headers); err != nil {
+- return
+- }
+- if !f.headerCompressionDisabled {
+- f.headerCompressor.Flush()
+- }
+-
+- // Set ControlFrameHeader.
+- frame.CFHeader.version = Version
+- frame.CFHeader.frameType = TypeSynReply
+- frame.CFHeader.length = uint32(len(f.headerBuf.Bytes()) + 4)
+-
+- // Serialize frame to Writer.
+- if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
+- return
+- }
+- if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil {
+- return
+- }
+- if _, err = f.w.Write(f.headerBuf.Bytes()); err != nil {
+- return
+- }
+- f.headerBuf.Reset()
+- return
+-}
+-
+-func (f *Framer) writeHeadersFrame(frame *HeadersFrame) (err error) {
+- if frame.StreamId == 0 {
+- return &Error{ZeroStreamId, 0}
+- }
+- // Marshal the headers.
+- var writer io.Writer = f.headerBuf
+- if !f.headerCompressionDisabled {
+- writer = f.headerCompressor
+- }
+- if _, err = writeHeaderValueBlock(writer, frame.Headers); err != nil {
+- return
+- }
+- if !f.headerCompressionDisabled {
+- f.headerCompressor.Flush()
+- }
+-
+- // Set ControlFrameHeader.
+- frame.CFHeader.version = Version
+- frame.CFHeader.frameType = TypeHeaders
+- frame.CFHeader.length = uint32(len(f.headerBuf.Bytes()) + 4)
+-
+- // Serialize frame to Writer.
+- if err = writeControlFrameHeader(f.w, frame.CFHeader); err != nil {
+- return
+- }
+- if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil {
+- return
+- }
+- if _, err = f.w.Write(f.headerBuf.Bytes()); err != nil {
+- return
+- }
+- f.headerBuf.Reset()
+- return
+-}
+-
+-func (f *Framer) writeDataFrame(frame *DataFrame) (err error) {
+- if frame.StreamId == 0 {
+- return &Error{ZeroStreamId, 0}
+- }
+- if frame.StreamId&0x80000000 != 0 || len(frame.Data) > MaxDataLength {
+- return &Error{InvalidDataFrame, frame.StreamId}
+- }
+-
+- // Serialize frame to Writer.
+- if err = binary.Write(f.w, binary.BigEndian, frame.StreamId); err != nil {
+- return
+- }
+- flagsAndLength := uint32(frame.Flags)<<24 | uint32(len(frame.Data))
+- if err = binary.Write(f.w, binary.BigEndian, flagsAndLength); err != nil {
+- return
+- }
+- if _, err = f.w.Write(frame.Data); err != nil {
+- return
+- }
+- return nil
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/client.go docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/client.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/client.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/client.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,112 +0,0 @@
+-// Copyright 2009 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 websocket
+-
+-import (
+- "bufio"
+- "crypto/tls"
+- "io"
+- "net"
+- "net/http"
+- "net/url"
+-)
+-
+-// DialError is an error that occurs while dialling a websocket server.
+-type DialError struct {
+- *Config
+- Err error
+-}
+-
+-func (e *DialError) Error() string {
+- return "websocket.Dial " + e.Config.Location.String() + ": " + e.Err.Error()
+-}
+-
+-// NewConfig creates a new WebSocket config for client connection.
+-func NewConfig(server, origin string) (config *Config, err error) {
+- config = new(Config)
+- config.Version = ProtocolVersionHybi13
+- config.Location, err = url.ParseRequestURI(server)
+- if err != nil {
+- return
+- }
+- config.Origin, err = url.ParseRequestURI(origin)
+- if err != nil {
+- return
+- }
+- config.Header = http.Header(make(map[string][]string))
+- return
+-}
+-
+-// NewClient creates a new WebSocket client connection over rwc.
+-func NewClient(config *Config, rwc io.ReadWriteCloser) (ws *Conn, err error) {
+- br := bufio.NewReader(rwc)
+- bw := bufio.NewWriter(rwc)
+- switch config.Version {
+- case ProtocolVersionHixie75:
+- err = hixie75ClientHandshake(config, br, bw)
+- case ProtocolVersionHixie76, ProtocolVersionHybi00:
+- err = hixie76ClientHandshake(config, br, bw)
+- case ProtocolVersionHybi08, ProtocolVersionHybi13:
+- err = hybiClientHandshake(config, br, bw)
+- default:
+- err = ErrBadProtocolVersion
+- }
+- if err != nil {
+- return
+- }
+- buf := bufio.NewReadWriter(br, bw)
+- switch config.Version {
+- case ProtocolVersionHixie75, ProtocolVersionHixie76, ProtocolVersionHybi00:
+- ws = newHixieClientConn(config, buf, rwc)
+- case ProtocolVersionHybi08, ProtocolVersionHybi13:
+- ws = newHybiClientConn(config, buf, rwc)
+- }
+- return
+-}
+-
+-// Dial opens a new client connection to a WebSocket.
+-func Dial(url_, protocol, origin string) (ws *Conn, err error) {
+- config, err := NewConfig(url_, origin)
+- if err != nil {
+- return nil, err
+- }
+- if protocol != "" {
+- config.Protocol = []string{protocol}
+- }
+- return DialConfig(config)
+-}
+-
+-// DialConfig opens a new client connection to a WebSocket with a config.
+-func DialConfig(config *Config) (ws *Conn, err error) {
+- var client net.Conn
+- if config.Location == nil {
+- return nil, &DialError{config, ErrBadWebSocketLocation}
+- }
+- if config.Origin == nil {
+- return nil, &DialError{config, ErrBadWebSocketOrigin}
+- }
+- switch config.Location.Scheme {
+- case "ws":
+- client, err = net.Dial("tcp", config.Location.Host)
+-
+- case "wss":
+- client, err = tls.Dial("tcp", config.Location.Host, config.TlsConfig)
+-
+- default:
+- err = ErrBadScheme
+- }
+- if err != nil {
+- goto Error
+- }
+-
+- ws, err = NewClient(config, client)
+- if err != nil {
+- goto Error
+- }
+- return
+-
+-Error:
+- return nil, &DialError{config, err}
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/exampledial_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/exampledial_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/exampledial_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/exampledial_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,31 +0,0 @@
+-// Copyright 2012 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 websocket_test
+-
+-import (
+- "fmt"
+- "log"
+-
+- "code.google.com/p/go.net/websocket"
+-)
+-
+-// This example demonstrates a trivial client.
+-func ExampleDial() {
+- origin := "http://localhost/"
+- url := "ws://localhost:12345/ws"
+- ws, err := websocket.Dial(url, "", origin)
+- if err != nil {
+- log.Fatal(err)
+- }
+- if _, err := ws.Write([]byte("hello, world!\n")); err != nil {
+- log.Fatal(err)
+- }
+- var msg = make([]byte, 512)
+- var n int
+- if n, err = ws.Read(msg); err != nil {
+- log.Fatal(err)
+- }
+- fmt.Printf("Received: %s.\n", msg[:n])
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/examplehandler_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/examplehandler_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/examplehandler_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/examplehandler_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,26 +0,0 @@
+-// Copyright 2012 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 websocket_test
+-
+-import (
+- "io"
+- "net/http"
+-
+- "code.google.com/p/go.net/websocket"
+-)
+-
+-// Echo the data received on the WebSocket.
+-func EchoServer(ws *websocket.Conn) {
+- io.Copy(ws, ws)
+-}
+-
+-// This example demonstrates a trivial echo server.
+-func ExampleHandler() {
+- http.Handle("/echo", websocket.Handler(EchoServer))
+- err := http.ListenAndServe(":12345", nil)
+- if err != nil {
+- panic("ListenAndServe: " + err.Error())
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/hixie.go docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/hixie.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/hixie.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/hixie.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,695 +0,0 @@
+-// Copyright 2009 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 websocket
+-
+-// This file implements a protocol of Hixie draft version 75 and 76
+-// (draft 76 equals to hybi 00)
+-
+-import (
+- "bufio"
+- "bytes"
+- "crypto/md5"
+- "encoding/binary"
+- "fmt"
+- "io"
+- "io/ioutil"
+- "math/rand"
+- "net/http"
+- "net/url"
+- "strconv"
+- "strings"
+-)
+-
+-// An array of characters to be randomly inserted to construct Sec-WebSocket-Key
+-// value. It holds characters from ranges U+0021 to U+002F and U+003A to U+007E.
+-// See Step 21 in Section 4.1 Opening handshake.
+-// http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-00#page-22
+-var secKeyRandomChars [0x30 - 0x21 + 0x7F - 0x3A]byte
+-
+-func init() {
+- i := 0
+- for ch := byte(0x21); ch < 0x30; ch++ {
+- secKeyRandomChars[i] = ch
+- i++
+- }
+- for ch := byte(0x3a); ch < 0x7F; ch++ {
+- secKeyRandomChars[i] = ch
+- i++
+- }
+-}
+-
+-type byteReader interface {
+- ReadByte() (byte, error)
+-}
+-
+-// readHixieLength reads frame length for frame type 0x80-0xFF
+-// as defined in Hixie draft.
+-// See section 4.2 Data framing.
+-// http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-00#section-4.2
+-func readHixieLength(r byteReader) (length int64, lengthFields []byte, err error) {
+- for {
+- c, err := r.ReadByte()
+- if err != nil {
+- return 0, nil, err
+- }
+- lengthFields = append(lengthFields, c)
+- length = length*128 + int64(c&0x7f)
+- if c&0x80 == 0 {
+- break
+- }
+- }
+- return
+-}
+-
+-// A hixieLengthFrameReader is a reader for frame type 0x80-0xFF
+-// as defined in hixie draft.
+-type hixieLengthFrameReader struct {
+- reader io.Reader
+- FrameType byte
+- Length int64
+- header *bytes.Buffer
+- length int
+-}
+-
+-func (frame *hixieLengthFrameReader) Read(msg []byte) (n int, err error) {
+- return frame.reader.Read(msg)
+-}
+-
+-func (frame *hixieLengthFrameReader) PayloadType() byte {
+- if frame.FrameType == '\xff' && frame.Length == 0 {
+- return CloseFrame
+- }
+- return UnknownFrame
+-}
+-
+-func (frame *hixieLengthFrameReader) HeaderReader() io.Reader {
+- if frame.header == nil {
+- return nil
+- }
+- if frame.header.Len() == 0 {
+- frame.header = nil
+- return nil
+- }
+- return frame.header
+-}
+-
+-func (frame *hixieLengthFrameReader) TrailerReader() io.Reader { return nil }
+-
+-func (frame *hixieLengthFrameReader) Len() (n int) { return frame.length }
+-
+-// A HixieSentinelFrameReader is a reader for frame type 0x00-0x7F
+-// as defined in hixie draft.
+-type hixieSentinelFrameReader struct {
+- reader *bufio.Reader
+- FrameType byte
+- header *bytes.Buffer
+- data []byte
+- seenTrailer bool
+- trailer *bytes.Buffer
+-}
+-
+-func (frame *hixieSentinelFrameReader) Read(msg []byte) (n int, err error) {
+- if len(frame.data) == 0 {
+- if frame.seenTrailer {
+- return 0, io.EOF
+- }
+- frame.data, err = frame.reader.ReadSlice('\xff')
+- if err == nil {
+- frame.seenTrailer = true
+- frame.data = frame.data[:len(frame.data)-1] // trim \xff
+- frame.trailer = bytes.NewBuffer([]byte{0xff})
+- }
+- }
+- n = copy(msg, frame.data)
+- frame.data = frame.data[n:]
+- return n, err
+-}
+-
+-func (frame *hixieSentinelFrameReader) PayloadType() byte {
+- if frame.FrameType == 0 {
+- return TextFrame
+- }
+- return UnknownFrame
+-}
+-
+-func (frame *hixieSentinelFrameReader) HeaderReader() io.Reader {
+- if frame.header == nil {
+- return nil
+- }
+- if frame.header.Len() == 0 {
+- frame.header = nil
+- return nil
+- }
+- return frame.header
+-}
+-
+-func (frame *hixieSentinelFrameReader) TrailerReader() io.Reader {
+- if frame.trailer == nil {
+- return nil
+- }
+- if frame.trailer.Len() == 0 {
+- frame.trailer = nil
+- return nil
+- }
+- return frame.trailer
+-}
+-
+-func (frame *hixieSentinelFrameReader) Len() int { return -1 }
+-
+-// A HixieFrameReaderFactory creates new frame reader based on its frame type.
+-type hixieFrameReaderFactory struct {
+- *bufio.Reader
+-}
+-
+-func (buf hixieFrameReaderFactory) NewFrameReader() (r frameReader, err error) {
+- var header []byte
+- var b byte
+- b, err = buf.ReadByte()
+- if err != nil {
+- return
+- }
+- header = append(header, b)
+- if b&0x80 == 0x80 {
+- length, lengthFields, err := readHixieLength(buf.Reader)
+- if err != nil {
+- return nil, err
+- }
+- if length == 0 {
+- return nil, io.EOF
+- }
+- header = append(header, lengthFields...)
+- return &hixieLengthFrameReader{
+- reader: io.LimitReader(buf.Reader, length),
+- FrameType: b,
+- Length: length,
+- header: bytes.NewBuffer(header)}, err
+- }
+- return &hixieSentinelFrameReader{
+- reader: buf.Reader,
+- FrameType: b,
+- header: bytes.NewBuffer(header)}, err
+-}
+-
+-type hixiFrameWriter struct {
+- writer *bufio.Writer
+-}
+-
+-func (frame *hixiFrameWriter) Write(msg []byte) (n int, err error) {
+- frame.writer.WriteByte(0)
+- frame.writer.Write(msg)
+- frame.writer.WriteByte(0xff)
+- err = frame.writer.Flush()
+- return len(msg), err
+-}
+-
+-func (frame *hixiFrameWriter) Close() error { return nil }
+-
+-type hixiFrameWriterFactory struct {
+- *bufio.Writer
+-}
+-
+-func (buf hixiFrameWriterFactory) NewFrameWriter(payloadType byte) (frame frameWriter, err error) {
+- if payloadType != TextFrame {
+- return nil, ErrNotSupported
+- }
+- return &hixiFrameWriter{writer: buf.Writer}, nil
+-}
+-
+-type hixiFrameHandler struct {
+- conn *Conn
+-}
+-
+-func (handler *hixiFrameHandler) HandleFrame(frame frameReader) (r frameReader, err error) {
+- if header := frame.HeaderReader(); header != nil {
+- io.Copy(ioutil.Discard, header)
+- }
+- if frame.PayloadType() != TextFrame {
+- io.Copy(ioutil.Discard, frame)
+- return nil, nil
+- }
+- return frame, nil
+-}
+-
+-func (handler *hixiFrameHandler) WriteClose(_ int) (err error) {
+- handler.conn.wio.Lock()
+- defer handler.conn.wio.Unlock()
+- closingFrame := []byte{'\xff', '\x00'}
+- handler.conn.buf.Write(closingFrame)
+- return handler.conn.buf.Flush()
+-}
+-
+-// newHixiConn creates a new WebSocket connection speaking hixie draft protocol.
+-func newHixieConn(config *Config, buf *bufio.ReadWriter, rwc io.ReadWriteCloser, request *http.Request) *Conn {
+- if buf == nil {
+- br := bufio.NewReader(rwc)
+- bw := bufio.NewWriter(rwc)
+- buf = bufio.NewReadWriter(br, bw)
+- }
+- ws := &Conn{config: config, request: request, buf: buf, rwc: rwc,
+- frameReaderFactory: hixieFrameReaderFactory{buf.Reader},
+- frameWriterFactory: hixiFrameWriterFactory{buf.Writer},
+- PayloadType: TextFrame}
+- ws.frameHandler = &hixiFrameHandler{ws}
+- return ws
+-}
+-
+-// getChallengeResponse computes the expected response from the
+-// challenge as described in section 5.1 Opening Handshake steps 42 to
+-// 43 of http://www.whatwg.org/specs/web-socket-protocol/
+-func getChallengeResponse(number1, number2 uint32, key3 []byte) (expected []byte, err error) {
+- // 41. Let /challenge/ be the concatenation of /number_1/, expressed
+- // a big-endian 32 bit integer, /number_2/, expressed in a big-
+- // endian 32 bit integer, and the eight bytes of /key_3/ in the
+- // order they were sent to the wire.
+- challenge := make([]byte, 16)
+- binary.BigEndian.PutUint32(challenge[0:], number1)
+- binary.BigEndian.PutUint32(challenge[4:], number2)
+- copy(challenge[8:], key3)
+-
+- // 42. Let /expected/ be the MD5 fingerprint of /challenge/ as a big-
+- // endian 128 bit string.
+- h := md5.New()
+- if _, err = h.Write(challenge); err != nil {
+- return
+- }
+- expected = h.Sum(nil)
+- return
+-}
+-
+-// Generates handshake key as described in 4.1 Opening handshake step 16 to 22.
+-// cf. http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-00
+-func generateKeyNumber() (key string, number uint32) {
+- // 16. Let /spaces_n/ be a random integer from 1 to 12 inclusive.
+- spaces := rand.Intn(12) + 1
+-
+- // 17. Let /max_n/ be the largest integer not greater than
+- // 4,294,967,295 divided by /spaces_n/
+- max := int(4294967295 / uint32(spaces))
+-
+- // 18. Let /number_n/ be a random integer from 0 to /max_n/ inclusive.
+- number = uint32(rand.Intn(max + 1))
+-
+- // 19. Let /product_n/ be the result of multiplying /number_n/ and
+- // /spaces_n/ together.
+- product := number * uint32(spaces)
+-
+- // 20. Let /key_n/ be a string consisting of /product_n/, expressed
+- // in base ten using the numerals in the range U+0030 DIGIT ZERO (0)
+- // to U+0039 DIGIT NINE (9).
+- key = fmt.Sprintf("%d", product)
+-
+- // 21. Insert between one and twelve random characters from the ranges
+- // U+0021 to U+002F and U+003A to U+007E into /key_n/ at random
+- // positions.
+- n := rand.Intn(12) + 1
+- for i := 0; i < n; i++ {
+- pos := rand.Intn(len(key)) + 1
+- ch := secKeyRandomChars[rand.Intn(len(secKeyRandomChars))]
+- key = key[0:pos] + string(ch) + key[pos:]
+- }
+-
+- // 22. Insert /spaces_n/ U+0020 SPACE characters into /key_n/ at random
+- // positions other than the start or end of the string.
+- for i := 0; i < spaces; i++ {
+- pos := rand.Intn(len(key)-1) + 1
+- key = key[0:pos] + " " + key[pos:]
+- }
+-
+- return
+-}
+-
+-// Generates handshake key_3 as described in 4.1 Opening handshake step 26.
+-// cf. http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-00
+-func generateKey3() (key []byte) {
+- // 26. Let /key3/ be a string consisting of eight random bytes (or
+- // equivalently, a random 64 bit integer encoded in big-endian order).
+- key = make([]byte, 8)
+- for i := 0; i < 8; i++ {
+- key[i] = byte(rand.Intn(256))
+- }
+- return
+-}
+-
+-// Client handshake described in (soon obsolete)
+-// draft-ietf-hybi-thewebsocket-protocol-00
+-// (draft-hixie-thewebsocket-protocol-76)
+-func hixie76ClientHandshake(config *Config, br *bufio.Reader, bw *bufio.Writer) (err error) {
+- switch config.Version {
+- case ProtocolVersionHixie76, ProtocolVersionHybi00:
+- default:
+- panic("wrong protocol version.")
+- }
+- // 4.1. Opening handshake.
+- // Step 5. send a request line.
+- bw.WriteString("GET " + config.Location.RequestURI() + " HTTP/1.1\r\n")
+-
+- // Step 6-14. push request headers in fields.
+- fields := []string{
+- "Upgrade: WebSocket\r\n",
+- "Connection: Upgrade\r\n",
+- "Host: " + config.Location.Host + "\r\n",
+- "Origin: " + config.Origin.String() + "\r\n",
+- }
+- if len(config.Protocol) > 0 {
+- if len(config.Protocol) != 1 {
+- return ErrBadWebSocketProtocol
+- }
+- fields = append(fields, "Sec-WebSocket-Protocol: "+config.Protocol[0]+"\r\n")
+- }
+- // TODO(ukai): Step 15. send cookie if any.
+-
+- // Step 16-23. generate keys and push Sec-WebSocket-Key<n> in fields.
+- key1, number1 := generateKeyNumber()
+- key2, number2 := generateKeyNumber()
+- if config.handshakeData != nil {
+- key1 = config.handshakeData["key1"]
+- n, err := strconv.ParseUint(config.handshakeData["number1"], 10, 32)
+- if err != nil {
+- panic(err)
+- }
+- number1 = uint32(n)
+- key2 = config.handshakeData["key2"]
+- n, err = strconv.ParseUint(config.handshakeData["number2"], 10, 32)
+- if err != nil {
+- panic(err)
+- }
+- number2 = uint32(n)
+- }
+- fields = append(fields, "Sec-WebSocket-Key1: "+key1+"\r\n")
+- fields = append(fields, "Sec-WebSocket-Key2: "+key2+"\r\n")
+-
+- // Step 24. shuffle fields and send them out.
+- for i := 1; i < len(fields); i++ {
+- j := rand.Intn(i)
+- fields[i], fields[j] = fields[j], fields[i]
+- }
+- for i := 0; i < len(fields); i++ {
+- bw.WriteString(fields[i])
+- }
+- // Step 25. send CRLF.
+- bw.WriteString("\r\n")
+-
+- // Step 26. generate 8 bytes random key.
+- key3 := generateKey3()
+- if config.handshakeData != nil {
+- key3 = []byte(config.handshakeData["key3"])
+- }
+- // Step 27. send it out.
+- bw.Write(key3)
+- if err = bw.Flush(); err != nil {
+- return
+- }
+-
+- // Step 28-29, 32-40. read response from server.
+- resp, err := http.ReadResponse(br, &http.Request{Method: "GET"})
+- if err != nil {
+- return err
+- }
+- // Step 30. check response code is 101.
+- if resp.StatusCode != 101 {
+- return ErrBadStatus
+- }
+-
+- // Step 41. check websocket headers.
+- if resp.Header.Get("Upgrade") != "WebSocket" ||
+- strings.ToLower(resp.Header.Get("Connection")) != "upgrade" {
+- return ErrBadUpgrade
+- }
+-
+- if resp.Header.Get("Sec-Websocket-Origin") != config.Origin.String() {
+- return ErrBadWebSocketOrigin
+- }
+-
+- if resp.Header.Get("Sec-Websocket-Location") != config.Location.String() {
+- return ErrBadWebSocketLocation
+- }
+-
+- if len(config.Protocol) > 0 && resp.Header.Get("Sec-Websocket-Protocol") != config.Protocol[0] {
+- return ErrBadWebSocketProtocol
+- }
+-
+- // Step 42-43. get expected data from challenge data.
+- expected, err := getChallengeResponse(number1, number2, key3)
+- if err != nil {
+- return err
+- }
+-
+- // Step 44. read 16 bytes from server.
+- reply := make([]byte, 16)
+- if _, err = io.ReadFull(br, reply); err != nil {
+- return err
+- }
+-
+- // Step 45. check the reply equals to expected data.
+- if !bytes.Equal(expected, reply) {
+- return ErrChallengeResponse
+- }
+- // WebSocket connection is established.
+- return
+-}
+-
+-// Client Handshake described in (soon obsolete)
+-// draft-hixie-thewebsocket-protocol-75.
+-func hixie75ClientHandshake(config *Config, br *bufio.Reader, bw *bufio.Writer) (err error) {
+- if config.Version != ProtocolVersionHixie75 {
+- panic("wrong protocol version.")
+- }
+- bw.WriteString("GET " + config.Location.RequestURI() + " HTTP/1.1\r\n")
+- bw.WriteString("Upgrade: WebSocket\r\n")
+- bw.WriteString("Connection: Upgrade\r\n")
+- bw.WriteString("Host: " + config.Location.Host + "\r\n")
+- bw.WriteString("Origin: " + config.Origin.String() + "\r\n")
+- if len(config.Protocol) > 0 {
+- if len(config.Protocol) != 1 {
+- return ErrBadWebSocketProtocol
+- }
+- bw.WriteString("WebSocket-Protocol: " + config.Protocol[0] + "\r\n")
+- }
+- bw.WriteString("\r\n")
+- bw.Flush()
+- resp, err := http.ReadResponse(br, &http.Request{Method: "GET"})
+- if err != nil {
+- return
+- }
+- if resp.Status != "101 Web Socket Protocol Handshake" {
+- return ErrBadStatus
+- }
+- if resp.Header.Get("Upgrade") != "WebSocket" ||
+- resp.Header.Get("Connection") != "Upgrade" {
+- return ErrBadUpgrade
+- }
+- if resp.Header.Get("Websocket-Origin") != config.Origin.String() {
+- return ErrBadWebSocketOrigin
+- }
+- if resp.Header.Get("Websocket-Location") != config.Location.String() {
+- return ErrBadWebSocketLocation
+- }
+- if len(config.Protocol) > 0 && resp.Header.Get("Websocket-Protocol") != config.Protocol[0] {
+- return ErrBadWebSocketProtocol
+- }
+- return
+-}
+-
+-// newHixieClientConn returns new WebSocket connection speaking hixie draft protocol.
+-func newHixieClientConn(config *Config, buf *bufio.ReadWriter, rwc io.ReadWriteCloser) *Conn {
+- return newHixieConn(config, buf, rwc, nil)
+-}
+-
+-// Gets key number from Sec-WebSocket-Key<n>: field as described
+-// in 5.2 Sending the server's opening handshake, 4.
+-func getKeyNumber(s string) (r uint32) {
+- // 4. Let /key-number_n/ be the digits (characters in the range
+- // U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9)) in /key_1/,
+- // interpreted as a base ten integer, ignoring all other characters
+- // in /key_n/.
+- r = 0
+- for i := 0; i < len(s); i++ {
+- if s[i] >= '0' && s[i] <= '9' {
+- r = r*10 + uint32(s[i]) - '0'
+- }
+- }
+- return
+-}
+-
+-// A Hixie76ServerHandshaker performs a server handshake using
+-// hixie draft 76 protocol.
+-type hixie76ServerHandshaker struct {
+- *Config
+- challengeResponse []byte
+-}
+-
+-func (c *hixie76ServerHandshaker) ReadHandshake(buf *bufio.Reader, req *http.Request) (code int, err error) {
+- c.Version = ProtocolVersionHybi00
+- if req.Method != "GET" {
+- return http.StatusMethodNotAllowed, ErrBadRequestMethod
+- }
+- // HTTP version can be safely ignored.
+-
+- if strings.ToLower(req.Header.Get("Upgrade")) != "websocket" ||
+- strings.ToLower(req.Header.Get("Connection")) != "upgrade" {
+- return http.StatusBadRequest, ErrNotWebSocket
+- }
+-
+- // TODO(ukai): check Host
+- c.Origin, err = url.ParseRequestURI(req.Header.Get("Origin"))
+- if err != nil {
+- return http.StatusBadRequest, err
+- }
+-
+- key1 := req.Header.Get("Sec-Websocket-Key1")
+- if key1 == "" {
+- return http.StatusBadRequest, ErrChallengeResponse
+- }
+- key2 := req.Header.Get("Sec-Websocket-Key2")
+- if key2 == "" {
+- return http.StatusBadRequest, ErrChallengeResponse
+- }
+- key3 := make([]byte, 8)
+- if _, err := io.ReadFull(buf, key3); err != nil {
+- return http.StatusBadRequest, ErrChallengeResponse
+- }
+-
+- var scheme string
+- if req.TLS != nil {
+- scheme = "wss"
+- } else {
+- scheme = "ws"
+- }
+- c.Location, err = url.ParseRequestURI(scheme + "://" + req.Host + req.URL.RequestURI())
+- if err != nil {
+- return http.StatusBadRequest, err
+- }
+-
+- // Step 4. get key number in Sec-WebSocket-Key<n> fields.
+- keyNumber1 := getKeyNumber(key1)
+- keyNumber2 := getKeyNumber(key2)
+-
+- // Step 5. get number of spaces in Sec-WebSocket-Key<n> fields.
+- space1 := uint32(strings.Count(key1, " "))
+- space2 := uint32(strings.Count(key2, " "))
+- if space1 == 0 || space2 == 0 {
+- return http.StatusBadRequest, ErrChallengeResponse
+- }
+-
+- // Step 6. key number must be an integral multiple of spaces.
+- if keyNumber1%space1 != 0 || keyNumber2%space2 != 0 {
+- return http.StatusBadRequest, ErrChallengeResponse
+- }
+-
+- // Step 7. let part be key number divided by spaces.
+- part1 := keyNumber1 / space1
+- part2 := keyNumber2 / space2
+-
+- // Step 8. let challenge be concatenation of part1, part2 and key3.
+- // Step 9. get MD5 fingerprint of challenge.
+- c.challengeResponse, err = getChallengeResponse(part1, part2, key3)
+- if err != nil {
+- return http.StatusInternalServerError, err
+- }
+- protocol := strings.TrimSpace(req.Header.Get("Sec-Websocket-Protocol"))
+- protocols := strings.Split(protocol, ",")
+- for i := 0; i < len(protocols); i++ {
+- c.Protocol = append(c.Protocol, strings.TrimSpace(protocols[i]))
+- }
+-
+- return http.StatusSwitchingProtocols, nil
+-}
+-
+-func (c *hixie76ServerHandshaker) AcceptHandshake(buf *bufio.Writer) (err error) {
+- if len(c.Protocol) > 0 {
+- if len(c.Protocol) != 1 {
+- return ErrBadWebSocketProtocol
+- }
+- }
+-
+- // Step 10. send response status line.
+- buf.WriteString("HTTP/1.1 101 WebSocket Protocol Handshake\r\n")
+- // Step 11. send response headers.
+- buf.WriteString("Upgrade: WebSocket\r\n")
+- buf.WriteString("Connection: Upgrade\r\n")
+- buf.WriteString("Sec-WebSocket-Origin: " + c.Origin.String() + "\r\n")
+- buf.WriteString("Sec-WebSocket-Location: " + c.Location.String() + "\r\n")
+- if len(c.Protocol) > 0 {
+- buf.WriteString("Sec-WebSocket-Protocol: " + c.Protocol[0] + "\r\n")
+- }
+- // Step 12. send CRLF.
+- buf.WriteString("\r\n")
+- // Step 13. send response data.
+- buf.Write(c.challengeResponse)
+- return buf.Flush()
+-}
+-
+-func (c *hixie76ServerHandshaker) NewServerConn(buf *bufio.ReadWriter, rwc io.ReadWriteCloser, request *http.Request) (conn *Conn) {
+- return newHixieServerConn(c.Config, buf, rwc, request)
+-}
+-
+-// A hixie75ServerHandshaker performs a server handshake using
+-// hixie draft 75 protocol.
+-type hixie75ServerHandshaker struct {
+- *Config
+-}
+-
+-func (c *hixie75ServerHandshaker) ReadHandshake(buf *bufio.Reader, req *http.Request) (code int, err error) {
+- c.Version = ProtocolVersionHixie75
+- if req.Method != "GET" || req.Proto != "HTTP/1.1" {
+- return http.StatusMethodNotAllowed, ErrBadRequestMethod
+- }
+- if req.Header.Get("Upgrade") != "WebSocket" {
+- return http.StatusBadRequest, ErrNotWebSocket
+- }
+- if req.Header.Get("Connection") != "Upgrade" {
+- return http.StatusBadRequest, ErrNotWebSocket
+- }
+- c.Origin, err = url.ParseRequestURI(strings.TrimSpace(req.Header.Get("Origin")))
+- if err != nil {
+- return http.StatusBadRequest, err
+- }
+-
+- var scheme string
+- if req.TLS != nil {
+- scheme = "wss"
+- } else {
+- scheme = "ws"
+- }
+- c.Location, err = url.ParseRequestURI(scheme + "://" + req.Host + req.URL.RequestURI())
+- if err != nil {
+- return http.StatusBadRequest, err
+- }
+- protocol := strings.TrimSpace(req.Header.Get("Websocket-Protocol"))
+- protocols := strings.Split(protocol, ",")
+- for i := 0; i < len(protocols); i++ {
+- c.Protocol = append(c.Protocol, strings.TrimSpace(protocols[i]))
+- }
+-
+- return http.StatusSwitchingProtocols, nil
+-}
+-
+-func (c *hixie75ServerHandshaker) AcceptHandshake(buf *bufio.Writer) (err error) {
+- if len(c.Protocol) > 0 {
+- if len(c.Protocol) != 1 {
+- return ErrBadWebSocketProtocol
+- }
+- }
+-
+- buf.WriteString("HTTP/1.1 101 Web Socket Protocol Handshake\r\n")
+- buf.WriteString("Upgrade: WebSocket\r\n")
+- buf.WriteString("Connection: Upgrade\r\n")
+- buf.WriteString("WebSocket-Origin: " + c.Origin.String() + "\r\n")
+- buf.WriteString("WebSocket-Location: " + c.Location.String() + "\r\n")
+- if len(c.Protocol) > 0 {
+- buf.WriteString("WebSocket-Protocol: " + c.Protocol[0] + "\r\n")
+- }
+- buf.WriteString("\r\n")
+- return buf.Flush()
+-}
+-
+-func (c *hixie75ServerHandshaker) NewServerConn(buf *bufio.ReadWriter, rwc io.ReadWriteCloser, request *http.Request) (conn *Conn) {
+- return newHixieServerConn(c.Config, buf, rwc, request)
+-}
+-
+-// newHixieServerConn returns a new WebSocket connection speaking hixie draft protocol.
+-func newHixieServerConn(config *Config, buf *bufio.ReadWriter, rwc io.ReadWriteCloser, request *http.Request) *Conn {
+- return newHixieConn(config, buf, rwc, request)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/hixie_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/hixie_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/hixie_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/hixie_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,201 +0,0 @@
+-// Copyright 2011 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 websocket
+-
+-import (
+- "bufio"
+- "bytes"
+- "fmt"
+- "io"
+- "net/http"
+- "net/url"
+- "strings"
+- "testing"
+-)
+-
+-// Test the getChallengeResponse function with values from section
+-// 5.1 of the specification steps 18, 26, and 43 from
+-// http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-00
+-func TestHixie76Challenge(t *testing.T) {
+- var part1 uint32 = 777007543
+- var part2 uint32 = 114997259
+- key3 := []byte{0x47, 0x30, 0x22, 0x2D, 0x5A, 0x3F, 0x47, 0x58}
+- expected := []byte("0st3Rl&q-2ZU^weu")
+-
+- response, err := getChallengeResponse(part1, part2, key3)
+- if err != nil {
+- t.Errorf("getChallengeResponse: returned error %v", err)
+- return
+- }
+- if !bytes.Equal(expected, response) {
+- t.Errorf("getChallengeResponse: expected %q got %q", expected, response)
+- }
+-}
+-
+-func TestHixie76ClientHandshake(t *testing.T) {
+- b := bytes.NewBuffer([]byte{})
+- bw := bufio.NewWriter(b)
+- br := bufio.NewReader(strings.NewReader(`HTTP/1.1 101 WebSocket Protocol Handshake
+-Upgrade: WebSocket
+-Connection: Upgrade
+-Sec-WebSocket-Origin: http://example.com
+-Sec-WebSocket-Location: ws://example.com/demo
+-Sec-WebSocket-Protocol: sample
+-
+-8jKS'y:G*Co,Wxa-`))
+-
+- var err error
+- config := new(Config)
+- config.Location, err = url.ParseRequestURI("ws://example.com/demo")
+- if err != nil {
+- t.Fatal("location url", err)
+- }
+- config.Origin, err = url.ParseRequestURI("http://example.com")
+- if err != nil {
+- t.Fatal("origin url", err)
+- }
+- config.Protocol = append(config.Protocol, "sample")
+- config.Version = ProtocolVersionHixie76
+-
+- config.handshakeData = map[string]string{
+- "key1": "4 @1 46546xW%0l 1 5",
+- "number1": "829309203",
+- "key2": "12998 5 Y3 1 .P00",
+- "number2": "259970620",
+- "key3": "^n:ds[4U",
+- }
+- err = hixie76ClientHandshake(config, br, bw)
+- if err != nil {
+- t.Errorf("handshake failed: %v", err)
+- }
+- req, err := http.ReadRequest(bufio.NewReader(b))
+- if err != nil {
+- t.Fatalf("read request: %v", err)
+- }
+- if req.Method != "GET" {
+- t.Errorf("request method expected GET, but got %q", req.Method)
+- }
+- if req.URL.Path != "/demo" {
+- t.Errorf("request path expected /demo, but got %q", req.URL.Path)
+- }
+- if req.Proto != "HTTP/1.1" {
+- t.Errorf("request proto expected HTTP/1.1, but got %q", req.Proto)
+- }
+- if req.Host != "example.com" {
+- t.Errorf("request Host expected example.com, but got %v", req.Host)
+- }
+- var expectedHeader = map[string]string{
+- "Connection": "Upgrade",
+- "Upgrade": "WebSocket",
+- "Origin": "http://example.com",
+- "Sec-Websocket-Key1": config.handshakeData["key1"],
+- "Sec-Websocket-Key2": config.handshakeData["key2"],
+- "Sec-WebSocket-Protocol": config.Protocol[0],
+- }
+- for k, v := range expectedHeader {
+- if req.Header.Get(k) != v {
+- t.Errorf(fmt.Sprintf("%s expected %q but got %q", k, v, req.Header.Get(k)))
+- }
+- }
+-}
+-
+-func TestHixie76ServerHandshake(t *testing.T) {
+- config := new(Config)
+- handshaker := &hixie76ServerHandshaker{Config: config}
+- br := bufio.NewReader(strings.NewReader(`GET /demo HTTP/1.1
+-Host: example.com
+-Connection: Upgrade
+-Sec-WebSocket-Key2: 12998 5 Y3 1 .P00
+-Sec-WebSocket-Protocol: sample
+-Upgrade: WebSocket
+-Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5
+-Origin: http://example.com
+-
+-^n:ds[4U`))
+- req, err := http.ReadRequest(br)
+- if err != nil {
+- t.Fatal("request", err)
+- }
+- code, err := handshaker.ReadHandshake(br, req)
+- if err != nil {
+- t.Errorf("handshake failed: %v", err)
+- }
+- if code != http.StatusSwitchingProtocols {
+- t.Errorf("status expected %q but got %q", http.StatusSwitchingProtocols, code)
+- }
+- b := bytes.NewBuffer([]byte{})
+- bw := bufio.NewWriter(b)
+-
+- err = handshaker.AcceptHandshake(bw)
+- if err != nil {
+- t.Errorf("handshake response failed: %v", err)
+- }
+- expectedResponse := strings.Join([]string{
+- "HTTP/1.1 101 WebSocket Protocol Handshake",
+- "Upgrade: WebSocket",
+- "Connection: Upgrade",
+- "Sec-WebSocket-Origin: http://example.com",
+- "Sec-WebSocket-Location: ws://example.com/demo",
+- "Sec-WebSocket-Protocol: sample",
+- "", ""}, "\r\n") + "8jKS'y:G*Co,Wxa-"
+- if b.String() != expectedResponse {
+- t.Errorf("handshake expected %q but got %q", expectedResponse, b.String())
+- }
+-}
+-
+-func TestHixie76SkipLengthFrame(t *testing.T) {
+- b := []byte{'\x80', '\x01', 'x', 0, 'h', 'e', 'l', 'l', 'o', '\xff'}
+- buf := bytes.NewBuffer(b)
+- br := bufio.NewReader(buf)
+- bw := bufio.NewWriter(buf)
+- config := newConfig(t, "/")
+- ws := newHixieConn(config, bufio.NewReadWriter(br, bw), nil, nil)
+- msg := make([]byte, 5)
+- n, err := ws.Read(msg)
+- if err != nil {
+- t.Errorf("Read: %v", err)
+- }
+- if !bytes.Equal(b[4:9], msg[0:n]) {
+- t.Errorf("Read: expected %q got %q", b[4:9], msg[0:n])
+- }
+-}
+-
+-func TestHixie76SkipNoUTF8Frame(t *testing.T) {
+- b := []byte{'\x01', 'n', '\xff', 0, 'h', 'e', 'l', 'l', 'o', '\xff'}
+- buf := bytes.NewBuffer(b)
+- br := bufio.NewReader(buf)
+- bw := bufio.NewWriter(buf)
+- config := newConfig(t, "/")
+- ws := newHixieConn(config, bufio.NewReadWriter(br, bw), nil, nil)
+- msg := make([]byte, 5)
+- n, err := ws.Read(msg)
+- if err != nil {
+- t.Errorf("Read: %v", err)
+- }
+- if !bytes.Equal(b[4:9], msg[0:n]) {
+- t.Errorf("Read: expected %q got %q", b[4:9], msg[0:n])
+- }
+-}
+-
+-func TestHixie76ClosingFrame(t *testing.T) {
+- b := []byte{0, 'h', 'e', 'l', 'l', 'o', '\xff'}
+- buf := bytes.NewBuffer(b)
+- br := bufio.NewReader(buf)
+- bw := bufio.NewWriter(buf)
+- config := newConfig(t, "/")
+- ws := newHixieConn(config, bufio.NewReadWriter(br, bw), nil, nil)
+- msg := make([]byte, 5)
+- n, err := ws.Read(msg)
+- if err != nil {
+- t.Errorf("read: %v", err)
+- }
+- if !bytes.Equal(b[1:6], msg[0:n]) {
+- t.Errorf("Read: expected %q got %q", b[1:6], msg[0:n])
+- }
+- n, err = ws.Read(msg)
+- if err != io.EOF {
+- t.Errorf("read: %v", err)
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/hybi.go docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/hybi.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/hybi.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/hybi.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,580 +0,0 @@
+-// Copyright 2011 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 websocket
+-
+-// This file implements a protocol of hybi draft.
+-// http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17
+-
+-import (
+- "bufio"
+- "bytes"
+- "crypto/rand"
+- "crypto/sha1"
+- "encoding/base64"
+- "encoding/binary"
+- "fmt"
+- "io"
+- "io/ioutil"
+- "net/http"
+- "net/url"
+- "strings"
+-)
+-
+-const (
+- websocketGUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
+-
+- closeStatusNormal = 1000
+- closeStatusGoingAway = 1001
+- closeStatusProtocolError = 1002
+- closeStatusUnsupportedData = 1003
+- closeStatusFrameTooLarge = 1004
+- closeStatusNoStatusRcvd = 1005
+- closeStatusAbnormalClosure = 1006
+- closeStatusBadMessageData = 1007
+- closeStatusPolicyViolation = 1008
+- closeStatusTooBigData = 1009
+- closeStatusExtensionMismatch = 1010
+-
+- maxControlFramePayloadLength = 125
+-)
+-
+-var (
+- ErrBadMaskingKey = &ProtocolError{"bad masking key"}
+- ErrBadPongMessage = &ProtocolError{"bad pong message"}
+- ErrBadClosingStatus = &ProtocolError{"bad closing status"}
+- ErrUnsupportedExtensions = &ProtocolError{"unsupported extensions"}
+- ErrNotImplemented = &ProtocolError{"not implemented"}
+-
+- handshakeHeader = map[string]bool{
+- "Host": true,
+- "Upgrade": true,
+- "Connection": true,
+- "Sec-Websocket-Key": true,
+- "Sec-Websocket-Origin": true,
+- "Sec-Websocket-Version": true,
+- "Sec-Websocket-Protocol": true,
+- "Sec-Websocket-Accept": true,
+- }
+-)
+-
+-// A hybiFrameHeader is a frame header as defined in hybi draft.
+-type hybiFrameHeader struct {
+- Fin bool
+- Rsv [3]bool
+- OpCode byte
+- Length int64
+- MaskingKey []byte
+-
+- data *bytes.Buffer
+-}
+-
+-// A hybiFrameReader is a reader for hybi frame.
+-type hybiFrameReader struct {
+- reader io.Reader
+-
+- header hybiFrameHeader
+- pos int64
+- length int
+-}
+-
+-func (frame *hybiFrameReader) Read(msg []byte) (n int, err error) {
+- n, err = frame.reader.Read(msg)
+- if err != nil {
+- return 0, err
+- }
+- if frame.header.MaskingKey != nil {
+- for i := 0; i < n; i++ {
+- msg[i] = msg[i] ^ frame.header.MaskingKey[frame.pos%4]
+- frame.pos++
+- }
+- }
+- return n, err
+-}
+-
+-func (frame *hybiFrameReader) PayloadType() byte { return frame.header.OpCode }
+-
+-func (frame *hybiFrameReader) HeaderReader() io.Reader {
+- if frame.header.data == nil {
+- return nil
+- }
+- if frame.header.data.Len() == 0 {
+- return nil
+- }
+- return frame.header.data
+-}
+-
+-func (frame *hybiFrameReader) TrailerReader() io.Reader { return nil }
+-
+-func (frame *hybiFrameReader) Len() (n int) { return frame.length }
+-
+-// A hybiFrameReaderFactory creates new frame reader based on its frame type.
+-type hybiFrameReaderFactory struct {
+- *bufio.Reader
+-}
+-
+-// NewFrameReader reads a frame header from the connection, and creates new reader for the frame.
+-// See Section 5.2 Base Framing protocol for detail.
+-// http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17#section-5.2
+-func (buf hybiFrameReaderFactory) NewFrameReader() (frame frameReader, err error) {
+- hybiFrame := new(hybiFrameReader)
+- frame = hybiFrame
+- var header []byte
+- var b byte
+- // First byte. FIN/RSV1/RSV2/RSV3/OpCode(4bits)
+- b, err = buf.ReadByte()
+- if err != nil {
+- return
+- }
+- header = append(header, b)
+- hybiFrame.header.Fin = ((header[0] >> 7) & 1) != 0
+- for i := 0; i < 3; i++ {
+- j := uint(6 - i)
+- hybiFrame.header.Rsv[i] = ((header[0] >> j) & 1) != 0
+- }
+- hybiFrame.header.OpCode = header[0] & 0x0f
+-
+- // Second byte. Mask/Payload len(7bits)
+- b, err = buf.ReadByte()
+- if err != nil {
+- return
+- }
+- header = append(header, b)
+- mask := (b & 0x80) != 0
+- b &= 0x7f
+- lengthFields := 0
+- switch {
+- case b <= 125: // Payload length 7bits.
+- hybiFrame.header.Length = int64(b)
+- case b == 126: // Payload length 7+16bits
+- lengthFields = 2
+- case b == 127: // Payload length 7+64bits
+- lengthFields = 8
+- }
+- for i := 0; i < lengthFields; i++ {
+- b, err = buf.ReadByte()
+- if err != nil {
+- return
+- }
+- header = append(header, b)
+- hybiFrame.header.Length = hybiFrame.header.Length*256 + int64(b)
+- }
+- if mask {
+- // Masking key. 4 bytes.
+- for i := 0; i < 4; i++ {
+- b, err = buf.ReadByte()
+- if err != nil {
+- return
+- }
+- header = append(header, b)
+- hybiFrame.header.MaskingKey = append(hybiFrame.header.MaskingKey, b)
+- }
+- }
+- hybiFrame.reader = io.LimitReader(buf.Reader, hybiFrame.header.Length)
+- hybiFrame.header.data = bytes.NewBuffer(header)
+- hybiFrame.length = len(header) + int(hybiFrame.header.Length)
+- return
+-}
+-
+-// A HybiFrameWriter is a writer for hybi frame.
+-type hybiFrameWriter struct {
+- writer *bufio.Writer
+-
+- header *hybiFrameHeader
+-}
+-
+-func (frame *hybiFrameWriter) Write(msg []byte) (n int, err error) {
+- var header []byte
+- var b byte
+- if frame.header.Fin {
+- b |= 0x80
+- }
+- for i := 0; i < 3; i++ {
+- if frame.header.Rsv[i] {
+- j := uint(6 - i)
+- b |= 1 << j
+- }
+- }
+- b |= frame.header.OpCode
+- header = append(header, b)
+- if frame.header.MaskingKey != nil {
+- b = 0x80
+- } else {
+- b = 0
+- }
+- lengthFields := 0
+- length := len(msg)
+- switch {
+- case length <= 125:
+- b |= byte(length)
+- case length < 65536:
+- b |= 126
+- lengthFields = 2
+- default:
+- b |= 127
+- lengthFields = 8
+- }
+- header = append(header, b)
+- for i := 0; i < lengthFields; i++ {
+- j := uint((lengthFields - i - 1) * 8)
+- b = byte((length >> j) & 0xff)
+- header = append(header, b)
+- }
+- if frame.header.MaskingKey != nil {
+- if len(frame.header.MaskingKey) != 4 {
+- return 0, ErrBadMaskingKey
+- }
+- header = append(header, frame.header.MaskingKey...)
+- frame.writer.Write(header)
+- data := make([]byte, length)
+- for i := range data {
+- data[i] = msg[i] ^ frame.header.MaskingKey[i%4]
+- }
+- frame.writer.Write(data)
+- err = frame.writer.Flush()
+- return length, err
+- }
+- frame.writer.Write(header)
+- frame.writer.Write(msg)
+- err = frame.writer.Flush()
+- return length, err
+-}
+-
+-func (frame *hybiFrameWriter) Close() error { return nil }
+-
+-type hybiFrameWriterFactory struct {
+- *bufio.Writer
+- needMaskingKey bool
+-}
+-
+-func (buf hybiFrameWriterFactory) NewFrameWriter(payloadType byte) (frame frameWriter, err error) {
+- frameHeader := &hybiFrameHeader{Fin: true, OpCode: payloadType}
+- if buf.needMaskingKey {
+- frameHeader.MaskingKey, err = generateMaskingKey()
+- if err != nil {
+- return nil, err
+- }
+- }
+- return &hybiFrameWriter{writer: buf.Writer, header: frameHeader}, nil
+-}
+-
+-type hybiFrameHandler struct {
+- conn *Conn
+- payloadType byte
+-}
+-
+-func (handler *hybiFrameHandler) HandleFrame(frame frameReader) (r frameReader, err error) {
+- if handler.conn.IsServerConn() {
+- // The client MUST mask all frames sent to the server.
+- if frame.(*hybiFrameReader).header.MaskingKey == nil {
+- handler.WriteClose(closeStatusProtocolError)
+- return nil, io.EOF
+- }
+- } else {
+- // The server MUST NOT mask all frames.
+- if frame.(*hybiFrameReader).header.MaskingKey != nil {
+- handler.WriteClose(closeStatusProtocolError)
+- return nil, io.EOF
+- }
+- }
+- if header := frame.HeaderReader(); header != nil {
+- io.Copy(ioutil.Discard, header)
+- }
+- switch frame.PayloadType() {
+- case ContinuationFrame:
+- frame.(*hybiFrameReader).header.OpCode = handler.payloadType
+- case TextFrame, BinaryFrame:
+- handler.payloadType = frame.PayloadType()
+- case CloseFrame:
+- return nil, io.EOF
+- case PingFrame:
+- pingMsg := make([]byte, maxControlFramePayloadLength)
+- n, err := io.ReadFull(frame, pingMsg)
+- if err != nil && err != io.ErrUnexpectedEOF {
+- return nil, err
+- }
+- io.Copy(ioutil.Discard, frame)
+- n, err = handler.WritePong(pingMsg[:n])
+- if err != nil {
+- return nil, err
+- }
+- return nil, nil
+- case PongFrame:
+- return nil, ErrNotImplemented
+- }
+- return frame, nil
+-}
+-
+-func (handler *hybiFrameHandler) WriteClose(status int) (err error) {
+- handler.conn.wio.Lock()
+- defer handler.conn.wio.Unlock()
+- w, err := handler.conn.frameWriterFactory.NewFrameWriter(CloseFrame)
+- if err != nil {
+- return err
+- }
+- msg := make([]byte, 2)
+- binary.BigEndian.PutUint16(msg, uint16(status))
+- _, err = w.Write(msg)
+- w.Close()
+- return err
+-}
+-
+-func (handler *hybiFrameHandler) WritePong(msg []byte) (n int, err error) {
+- handler.conn.wio.Lock()
+- defer handler.conn.wio.Unlock()
+- w, err := handler.conn.frameWriterFactory.NewFrameWriter(PongFrame)
+- if err != nil {
+- return 0, err
+- }
+- n, err = w.Write(msg)
+- w.Close()
+- return n, err
+-}
+-
+-// newHybiConn creates a new WebSocket connection speaking hybi draft protocol.
+-func newHybiConn(config *Config, buf *bufio.ReadWriter, rwc io.ReadWriteCloser, request *http.Request) *Conn {
+- if buf == nil {
+- br := bufio.NewReader(rwc)
+- bw := bufio.NewWriter(rwc)
+- buf = bufio.NewReadWriter(br, bw)
+- }
+- ws := &Conn{config: config, request: request, buf: buf, rwc: rwc,
+- frameReaderFactory: hybiFrameReaderFactory{buf.Reader},
+- frameWriterFactory: hybiFrameWriterFactory{
+- buf.Writer, request == nil},
+- PayloadType: TextFrame,
+- defaultCloseStatus: closeStatusNormal}
+- ws.frameHandler = &hybiFrameHandler{conn: ws}
+- return ws
+-}
+-
+-// generateMaskingKey generates a masking key for a frame.
+-func generateMaskingKey() (maskingKey []byte, err error) {
+- maskingKey = make([]byte, 4)
+- if _, err = io.ReadFull(rand.Reader, maskingKey); err != nil {
+- return
+- }
+- return
+-}
+-
+-// generateNonce generates a nonce consisting of a randomly selected 16-byte
+-// value that has been base64-encoded.
+-func generateNonce() (nonce []byte) {
+- key := make([]byte, 16)
+- if _, err := io.ReadFull(rand.Reader, key); err != nil {
+- panic(err)
+- }
+- nonce = make([]byte, 24)
+- base64.StdEncoding.Encode(nonce, key)
+- return
+-}
+-
+-// getNonceAccept computes the base64-encoded SHA-1 of the concatenation of
+-// the nonce ("Sec-WebSocket-Key" value) with the websocket GUID string.
+-func getNonceAccept(nonce []byte) (expected []byte, err error) {
+- h := sha1.New()
+- if _, err = h.Write(nonce); err != nil {
+- return
+- }
+- if _, err = h.Write([]byte(websocketGUID)); err != nil {
+- return
+- }
+- expected = make([]byte, 28)
+- base64.StdEncoding.Encode(expected, h.Sum(nil))
+- return
+-}
+-
+-func isHybiVersion(version int) bool {
+- switch version {
+- case ProtocolVersionHybi08, ProtocolVersionHybi13:
+- return true
+- default:
+- }
+- return false
+-}
+-
+-// Client handshake described in draft-ietf-hybi-thewebsocket-protocol-17
+-func hybiClientHandshake(config *Config, br *bufio.Reader, bw *bufio.Writer) (err error) {
+- if !isHybiVersion(config.Version) {
+- panic("wrong protocol version.")
+- }
+-
+- bw.WriteString("GET " + config.Location.RequestURI() + " HTTP/1.1\r\n")
+-
+- bw.WriteString("Host: " + config.Location.Host + "\r\n")
+- bw.WriteString("Upgrade: websocket\r\n")
+- bw.WriteString("Connection: Upgrade\r\n")
+- nonce := generateNonce()
+- if config.handshakeData != nil {
+- nonce = []byte(config.handshakeData["key"])
+- }
+- bw.WriteString("Sec-WebSocket-Key: " + string(nonce) + "\r\n")
+- if config.Version == ProtocolVersionHybi13 {
+- bw.WriteString("Origin: " + strings.ToLower(config.Origin.String()) + "\r\n")
+- } else if config.Version == ProtocolVersionHybi08 {
+- bw.WriteString("Sec-WebSocket-Origin: " + strings.ToLower(config.Origin.String()) + "\r\n")
+- }
+- bw.WriteString("Sec-WebSocket-Version: " + fmt.Sprintf("%d", config.Version) + "\r\n")
+- if len(config.Protocol) > 0 {
+- bw.WriteString("Sec-WebSocket-Protocol: " + strings.Join(config.Protocol, ", ") + "\r\n")
+- }
+- // TODO(ukai): send Sec-WebSocket-Extensions.
+- err = config.Header.WriteSubset(bw, handshakeHeader)
+- if err != nil {
+- return err
+- }
+-
+- bw.WriteString("\r\n")
+- if err = bw.Flush(); err != nil {
+- return err
+- }
+-
+- resp, err := http.ReadResponse(br, &http.Request{Method: "GET"})
+- if err != nil {
+- return err
+- }
+- if resp.StatusCode != 101 {
+- return ErrBadStatus
+- }
+- if strings.ToLower(resp.Header.Get("Upgrade")) != "websocket" ||
+- strings.ToLower(resp.Header.Get("Connection")) != "upgrade" {
+- return ErrBadUpgrade
+- }
+- expectedAccept, err := getNonceAccept(nonce)
+- if err != nil {
+- return err
+- }
+- if resp.Header.Get("Sec-WebSocket-Accept") != string(expectedAccept) {
+- return ErrChallengeResponse
+- }
+- if resp.Header.Get("Sec-WebSocket-Extensions") != "" {
+- return ErrUnsupportedExtensions
+- }
+- offeredProtocol := resp.Header.Get("Sec-WebSocket-Protocol")
+- if offeredProtocol != "" {
+- protocolMatched := false
+- for i := 0; i < len(config.Protocol); i++ {
+- if config.Protocol[i] == offeredProtocol {
+- protocolMatched = true
+- break
+- }
+- }
+- if !protocolMatched {
+- return ErrBadWebSocketProtocol
+- }
+- config.Protocol = []string{offeredProtocol}
+- }
+-
+- return nil
+-}
+-
+-// newHybiClientConn creates a client WebSocket connection after handshake.
+-func newHybiClientConn(config *Config, buf *bufio.ReadWriter, rwc io.ReadWriteCloser) *Conn {
+- return newHybiConn(config, buf, rwc, nil)
+-}
+-
+-// A HybiServerHandshaker performs a server handshake using hybi draft protocol.
+-type hybiServerHandshaker struct {
+- *Config
+- accept []byte
+-}
+-
+-func (c *hybiServerHandshaker) ReadHandshake(buf *bufio.Reader, req *http.Request) (code int, err error) {
+- c.Version = ProtocolVersionHybi13
+- if req.Method != "GET" {
+- return http.StatusMethodNotAllowed, ErrBadRequestMethod
+- }
+- // HTTP version can be safely ignored.
+-
+- if strings.ToLower(req.Header.Get("Upgrade")) != "websocket" ||
+- !strings.Contains(strings.ToLower(req.Header.Get("Connection")), "upgrade") {
+- return http.StatusBadRequest, ErrNotWebSocket
+- }
+-
+- key := req.Header.Get("Sec-Websocket-Key")
+- if key == "" {
+- return http.StatusBadRequest, ErrChallengeResponse
+- }
+- version := req.Header.Get("Sec-Websocket-Version")
+- switch version {
+- case "13":
+- c.Version = ProtocolVersionHybi13
+- case "8":
+- c.Version = ProtocolVersionHybi08
+- default:
+- return http.StatusBadRequest, ErrBadWebSocketVersion
+- }
+- var scheme string
+- if req.TLS != nil {
+- scheme = "wss"
+- } else {
+- scheme = "ws"
+- }
+- c.Location, err = url.ParseRequestURI(scheme + "://" + req.Host + req.URL.RequestURI())
+- if err != nil {
+- return http.StatusBadRequest, err
+- }
+- protocol := strings.TrimSpace(req.Header.Get("Sec-Websocket-Protocol"))
+- if protocol != "" {
+- protocols := strings.Split(protocol, ",")
+- for i := 0; i < len(protocols); i++ {
+- c.Protocol = append(c.Protocol, strings.TrimSpace(protocols[i]))
+- }
+- }
+- c.accept, err = getNonceAccept([]byte(key))
+- if err != nil {
+- return http.StatusInternalServerError, err
+- }
+- return http.StatusSwitchingProtocols, nil
+-}
+-
+-// Origin parses Origin header in "req".
+-// If origin is "null", returns (nil, nil).
+-func Origin(config *Config, req *http.Request) (*url.URL, error) {
+- var origin string
+- switch config.Version {
+- case ProtocolVersionHybi13:
+- origin = req.Header.Get("Origin")
+- case ProtocolVersionHybi08:
+- origin = req.Header.Get("Sec-Websocket-Origin")
+- }
+- if origin == "null" {
+- return nil, nil
+- }
+- return url.ParseRequestURI(origin)
+-}
+-
+-func (c *hybiServerHandshaker) AcceptHandshake(buf *bufio.Writer) (err error) {
+- if len(c.Protocol) > 0 {
+- if len(c.Protocol) != 1 {
+- // You need choose a Protocol in Handshake func in Server.
+- return ErrBadWebSocketProtocol
+- }
+- }
+- buf.WriteString("HTTP/1.1 101 Switching Protocols\r\n")
+- buf.WriteString("Upgrade: websocket\r\n")
+- buf.WriteString("Connection: Upgrade\r\n")
+- buf.WriteString("Sec-WebSocket-Accept: " + string(c.accept) + "\r\n")
+- if len(c.Protocol) > 0 {
+- buf.WriteString("Sec-WebSocket-Protocol: " + c.Protocol[0] + "\r\n")
+- }
+- // TODO(ukai): send Sec-WebSocket-Extensions.
+- if c.Header != nil {
+- err := c.Header.WriteSubset(buf, handshakeHeader)
+- if err != nil {
+- return err
+- }
+- }
+- buf.WriteString("\r\n")
+- return buf.Flush()
+-}
+-
+-func (c *hybiServerHandshaker) NewServerConn(buf *bufio.ReadWriter, rwc io.ReadWriteCloser, request *http.Request) *Conn {
+- return newHybiServerConn(c.Config, buf, rwc, request)
+-}
+-
+-// newHybiServerConn returns a new WebSocket connection speaking hybi draft protocol.
+-func newHybiServerConn(config *Config, buf *bufio.ReadWriter, rwc io.ReadWriteCloser, request *http.Request) *Conn {
+- return newHybiConn(config, buf, rwc, request)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/hybi_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/hybi_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/hybi_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/hybi_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,698 +0,0 @@
+-// Copyright 2011 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 websocket
+-
+-import (
+- "bufio"
+- "bytes"
+- "fmt"
+- "io"
+- "net/http"
+- "net/url"
+- "strings"
+- "testing"
+-)
+-
+-// Test the getNonceAccept function with values in
+-// http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17
+-func TestSecWebSocketAccept(t *testing.T) {
+- nonce := []byte("dGhlIHNhbXBsZSBub25jZQ==")
+- expected := []byte("s3pPLMBiTxaQ9kYGzzhZRbK+xOo=")
+- accept, err := getNonceAccept(nonce)
+- if err != nil {
+- t.Errorf("getNonceAccept: returned error %v", err)
+- return
+- }
+- if !bytes.Equal(expected, accept) {
+- t.Errorf("getNonceAccept: expected %q got %q", expected, accept)
+- }
+-}
+-
+-func TestHybiClientHandshake(t *testing.T) {
+- b := bytes.NewBuffer([]byte{})
+- bw := bufio.NewWriter(b)
+- br := bufio.NewReader(strings.NewReader(`HTTP/1.1 101 Switching Protocols
+-Upgrade: websocket
+-Connection: Upgrade
+-Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
+-Sec-WebSocket-Protocol: chat
+-
+-`))
+- var err error
+- config := new(Config)
+- config.Location, err = url.ParseRequestURI("ws://server.example.com/chat")
+- if err != nil {
+- t.Fatal("location url", err)
+- }
+- config.Origin, err = url.ParseRequestURI("http://example.com")
+- if err != nil {
+- t.Fatal("origin url", err)
+- }
+- config.Protocol = append(config.Protocol, "chat")
+- config.Protocol = append(config.Protocol, "superchat")
+- config.Version = ProtocolVersionHybi13
+-
+- config.handshakeData = map[string]string{
+- "key": "dGhlIHNhbXBsZSBub25jZQ==",
+- }
+- err = hybiClientHandshake(config, br, bw)
+- if err != nil {
+- t.Errorf("handshake failed: %v", err)
+- }
+- req, err := http.ReadRequest(bufio.NewReader(b))
+- if err != nil {
+- t.Fatalf("read request: %v", err)
+- }
+- if req.Method != "GET" {
+- t.Errorf("request method expected GET, but got %q", req.Method)
+- }
+- if req.URL.Path != "/chat" {
+- t.Errorf("request path expected /chat, but got %q", req.URL.Path)
+- }
+- if req.Proto != "HTTP/1.1" {
+- t.Errorf("request proto expected HTTP/1.1, but got %q", req.Proto)
+- }
+- if req.Host != "server.example.com" {
+- t.Errorf("request Host expected server.example.com, but got %v", req.Host)
+- }
+- var expectedHeader = map[string]string{
+- "Connection": "Upgrade",
+- "Upgrade": "websocket",
+- "Sec-Websocket-Key": config.handshakeData["key"],
+- "Origin": config.Origin.String(),
+- "Sec-Websocket-Protocol": "chat, superchat",
+- "Sec-Websocket-Version": fmt.Sprintf("%d", ProtocolVersionHybi13),
+- }
+- for k, v := range expectedHeader {
+- if req.Header.Get(k) != v {
+- t.Errorf(fmt.Sprintf("%s expected %q but got %q", k, v, req.Header.Get(k)))
+- }
+- }
+-}
+-
+-func TestHybiClientHandshakeWithHeader(t *testing.T) {
+- b := bytes.NewBuffer([]byte{})
+- bw := bufio.NewWriter(b)
+- br := bufio.NewReader(strings.NewReader(`HTTP/1.1 101 Switching Protocols
+-Upgrade: websocket
+-Connection: Upgrade
+-Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
+-Sec-WebSocket-Protocol: chat
+-
+-`))
+- var err error
+- config := new(Config)
+- config.Location, err = url.ParseRequestURI("ws://server.example.com/chat")
+- if err != nil {
+- t.Fatal("location url", err)
+- }
+- config.Origin, err = url.ParseRequestURI("http://example.com")
+- if err != nil {
+- t.Fatal("origin url", err)
+- }
+- config.Protocol = append(config.Protocol, "chat")
+- config.Protocol = append(config.Protocol, "superchat")
+- config.Version = ProtocolVersionHybi13
+- config.Header = http.Header(make(map[string][]string))
+- config.Header.Add("User-Agent", "test")
+-
+- config.handshakeData = map[string]string{
+- "key": "dGhlIHNhbXBsZSBub25jZQ==",
+- }
+- err = hybiClientHandshake(config, br, bw)
+- if err != nil {
+- t.Errorf("handshake failed: %v", err)
+- }
+- req, err := http.ReadRequest(bufio.NewReader(b))
+- if err != nil {
+- t.Fatalf("read request: %v", err)
+- }
+- if req.Method != "GET" {
+- t.Errorf("request method expected GET, but got %q", req.Method)
+- }
+- if req.URL.Path != "/chat" {
+- t.Errorf("request path expected /chat, but got %q", req.URL.Path)
+- }
+- if req.Proto != "HTTP/1.1" {
+- t.Errorf("request proto expected HTTP/1.1, but got %q", req.Proto)
+- }
+- if req.Host != "server.example.com" {
+- t.Errorf("request Host expected server.example.com, but got %v", req.Host)
+- }
+- var expectedHeader = map[string]string{
+- "Connection": "Upgrade",
+- "Upgrade": "websocket",
+- "Sec-Websocket-Key": config.handshakeData["key"],
+- "Origin": config.Origin.String(),
+- "Sec-Websocket-Protocol": "chat, superchat",
+- "Sec-Websocket-Version": fmt.Sprintf("%d", ProtocolVersionHybi13),
+- "User-Agent": "test",
+- }
+- for k, v := range expectedHeader {
+- if req.Header.Get(k) != v {
+- t.Errorf(fmt.Sprintf("%s expected %q but got %q", k, v, req.Header.Get(k)))
+- }
+- }
+-}
+-
+-func TestHybiClientHandshakeHybi08(t *testing.T) {
+- b := bytes.NewBuffer([]byte{})
+- bw := bufio.NewWriter(b)
+- br := bufio.NewReader(strings.NewReader(`HTTP/1.1 101 Switching Protocols
+-Upgrade: websocket
+-Connection: Upgrade
+-Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
+-Sec-WebSocket-Protocol: chat
+-
+-`))
+- var err error
+- config := new(Config)
+- config.Location, err = url.ParseRequestURI("ws://server.example.com/chat")
+- if err != nil {
+- t.Fatal("location url", err)
+- }
+- config.Origin, err = url.ParseRequestURI("http://example.com")
+- if err != nil {
+- t.Fatal("origin url", err)
+- }
+- config.Protocol = append(config.Protocol, "chat")
+- config.Protocol = append(config.Protocol, "superchat")
+- config.Version = ProtocolVersionHybi08
+-
+- config.handshakeData = map[string]string{
+- "key": "dGhlIHNhbXBsZSBub25jZQ==",
+- }
+- err = hybiClientHandshake(config, br, bw)
+- if err != nil {
+- t.Errorf("handshake failed: %v", err)
+- }
+- req, err := http.ReadRequest(bufio.NewReader(b))
+- if err != nil {
+- t.Fatalf("read request: %v", err)
+- }
+- if req.Method != "GET" {
+- t.Errorf("request method expected GET, but got %q", req.Method)
+- }
+- if req.URL.Path != "/chat" {
+- t.Errorf("request path expected /demo, but got %q", req.URL.Path)
+- }
+- if req.Proto != "HTTP/1.1" {
+- t.Errorf("request proto expected HTTP/1.1, but got %q", req.Proto)
+- }
+- if req.Host != "server.example.com" {
+- t.Errorf("request Host expected example.com, but got %v", req.Host)
+- }
+- var expectedHeader = map[string]string{
+- "Connection": "Upgrade",
+- "Upgrade": "websocket",
+- "Sec-Websocket-Key": config.handshakeData["key"],
+- "Sec-Websocket-Origin": config.Origin.String(),
+- "Sec-Websocket-Protocol": "chat, superchat",
+- "Sec-Websocket-Version": fmt.Sprintf("%d", ProtocolVersionHybi08),
+- }
+- for k, v := range expectedHeader {
+- if req.Header.Get(k) != v {
+- t.Errorf(fmt.Sprintf("%s expected %q but got %q", k, v, req.Header.Get(k)))
+- }
+- }
+-}
+-
+-func TestHybiServerHandshake(t *testing.T) {
+- config := new(Config)
+- handshaker := &hybiServerHandshaker{Config: config}
+- br := bufio.NewReader(strings.NewReader(`GET /chat HTTP/1.1
+-Host: server.example.com
+-Upgrade: websocket
+-Connection: Upgrade
+-Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
+-Origin: http://example.com
+-Sec-WebSocket-Protocol: chat, superchat
+-Sec-WebSocket-Version: 13
+-
+-`))
+- req, err := http.ReadRequest(br)
+- if err != nil {
+- t.Fatal("request", err)
+- }
+- code, err := handshaker.ReadHandshake(br, req)
+- if err != nil {
+- t.Errorf("handshake failed: %v", err)
+- }
+- if code != http.StatusSwitchingProtocols {
+- t.Errorf("status expected %q but got %q", http.StatusSwitchingProtocols, code)
+- }
+- expectedProtocols := []string{"chat", "superchat"}
+- if fmt.Sprintf("%v", config.Protocol) != fmt.Sprintf("%v", expectedProtocols) {
+- t.Errorf("protocol expected %q but got %q", expectedProtocols, config.Protocol)
+- }
+- b := bytes.NewBuffer([]byte{})
+- bw := bufio.NewWriter(b)
+-
+- config.Protocol = config.Protocol[:1]
+-
+- err = handshaker.AcceptHandshake(bw)
+- if err != nil {
+- t.Errorf("handshake response failed: %v", err)
+- }
+- expectedResponse := strings.Join([]string{
+- "HTTP/1.1 101 Switching Protocols",
+- "Upgrade: websocket",
+- "Connection: Upgrade",
+- "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=",
+- "Sec-WebSocket-Protocol: chat",
+- "", ""}, "\r\n")
+-
+- if b.String() != expectedResponse {
+- t.Errorf("handshake expected %q but got %q", expectedResponse, b.String())
+- }
+-}
+-
+-func TestHybiServerHandshakeNoSubProtocol(t *testing.T) {
+- config := new(Config)
+- handshaker := &hybiServerHandshaker{Config: config}
+- br := bufio.NewReader(strings.NewReader(`GET /chat HTTP/1.1
+-Host: server.example.com
+-Upgrade: websocket
+-Connection: Upgrade
+-Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
+-Origin: http://example.com
+-Sec-WebSocket-Version: 13
+-
+-`))
+- req, err := http.ReadRequest(br)
+- if err != nil {
+- t.Fatal("request", err)
+- }
+- code, err := handshaker.ReadHandshake(br, req)
+- if err != nil {
+- t.Errorf("handshake failed: %v", err)
+- }
+- if code != http.StatusSwitchingProtocols {
+- t.Errorf("status expected %q but got %q", http.StatusSwitchingProtocols, code)
+- }
+- if len(config.Protocol) != 0 {
+- t.Errorf("len(config.Protocol) expected 0, but got %q", len(config.Protocol))
+- }
+- b := bytes.NewBuffer([]byte{})
+- bw := bufio.NewWriter(b)
+-
+- err = handshaker.AcceptHandshake(bw)
+- if err != nil {
+- t.Errorf("handshake response failed: %v", err)
+- }
+- expectedResponse := strings.Join([]string{
+- "HTTP/1.1 101 Switching Protocols",
+- "Upgrade: websocket",
+- "Connection: Upgrade",
+- "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=",
+- "", ""}, "\r\n")
+-
+- if b.String() != expectedResponse {
+- t.Errorf("handshake expected %q but got %q", expectedResponse, b.String())
+- }
+-}
+-
+-func TestHybiServerHandshakeHybi08(t *testing.T) {
+- config := new(Config)
+- handshaker := &hybiServerHandshaker{Config: config}
+- br := bufio.NewReader(strings.NewReader(`GET /chat HTTP/1.1
+-Host: server.example.com
+-Upgrade: websocket
+-Connection: Upgrade
+-Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
+-Sec-WebSocket-Origin: http://example.com
+-Sec-WebSocket-Protocol: chat, superchat
+-Sec-WebSocket-Version: 8
+-
+-`))
+- req, err := http.ReadRequest(br)
+- if err != nil {
+- t.Fatal("request", err)
+- }
+- code, err := handshaker.ReadHandshake(br, req)
+- if err != nil {
+- t.Errorf("handshake failed: %v", err)
+- }
+- if code != http.StatusSwitchingProtocols {
+- t.Errorf("status expected %q but got %q", http.StatusSwitchingProtocols, code)
+- }
+- b := bytes.NewBuffer([]byte{})
+- bw := bufio.NewWriter(b)
+-
+- config.Protocol = []string{"chat"}
+-
+- err = handshaker.AcceptHandshake(bw)
+- if err != nil {
+- t.Errorf("handshake response failed: %v", err)
+- }
+- expectedResponse := strings.Join([]string{
+- "HTTP/1.1 101 Switching Protocols",
+- "Upgrade: websocket",
+- "Connection: Upgrade",
+- "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=",
+- "Sec-WebSocket-Protocol: chat",
+- "", ""}, "\r\n")
+-
+- if b.String() != expectedResponse {
+- t.Errorf("handshake expected %q but got %q", expectedResponse, b.String())
+- }
+-}
+-
+-func TestHybiServerHandshakeHybiBadVersion(t *testing.T) {
+- config := new(Config)
+- handshaker := &hybiServerHandshaker{Config: config}
+- br := bufio.NewReader(strings.NewReader(`GET /chat HTTP/1.1
+-Host: server.example.com
+-Upgrade: websocket
+-Connection: Upgrade
+-Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
+-Sec-WebSocket-Origin: http://example.com
+-Sec-WebSocket-Protocol: chat, superchat
+-Sec-WebSocket-Version: 9
+-
+-`))
+- req, err := http.ReadRequest(br)
+- if err != nil {
+- t.Fatal("request", err)
+- }
+- code, err := handshaker.ReadHandshake(br, req)
+- if err != ErrBadWebSocketVersion {
+- t.Errorf("handshake expected err %q but got %q", ErrBadWebSocketVersion, err)
+- }
+- if code != http.StatusBadRequest {
+- t.Errorf("status expected %q but got %q", http.StatusBadRequest, code)
+- }
+-}
+-
+-func testHybiFrame(t *testing.T, testHeader, testPayload, testMaskedPayload []byte, frameHeader *hybiFrameHeader) {
+- b := bytes.NewBuffer([]byte{})
+- frameWriterFactory := &hybiFrameWriterFactory{bufio.NewWriter(b), false}
+- w, _ := frameWriterFactory.NewFrameWriter(TextFrame)
+- w.(*hybiFrameWriter).header = frameHeader
+- _, err := w.Write(testPayload)
+- w.Close()
+- if err != nil {
+- t.Errorf("Write error %q", err)
+- }
+- var expectedFrame []byte
+- expectedFrame = append(expectedFrame, testHeader...)
+- expectedFrame = append(expectedFrame, testMaskedPayload...)
+- if !bytes.Equal(expectedFrame, b.Bytes()) {
+- t.Errorf("frame expected %q got %q", expectedFrame, b.Bytes())
+- }
+- frameReaderFactory := &hybiFrameReaderFactory{bufio.NewReader(b)}
+- r, err := frameReaderFactory.NewFrameReader()
+- if err != nil {
+- t.Errorf("Read error %q", err)
+- }
+- if header := r.HeaderReader(); header == nil {
+- t.Errorf("no header")
+- } else {
+- actualHeader := make([]byte, r.Len())
+- n, err := header.Read(actualHeader)
+- if err != nil {
+- t.Errorf("Read header error %q", err)
+- } else {
+- if n < len(testHeader) {
+- t.Errorf("header too short %q got %q", testHeader, actualHeader[:n])
+- }
+- if !bytes.Equal(testHeader, actualHeader[:n]) {
+- t.Errorf("header expected %q got %q", testHeader, actualHeader[:n])
+- }
+- }
+- }
+- if trailer := r.TrailerReader(); trailer != nil {
+- t.Errorf("unexpected trailer %q", trailer)
+- }
+- frame := r.(*hybiFrameReader)
+- if frameHeader.Fin != frame.header.Fin ||
+- frameHeader.OpCode != frame.header.OpCode ||
+- len(testPayload) != int(frame.header.Length) {
+- t.Errorf("mismatch %v (%d) vs %v", frameHeader, len(testPayload), frame)
+- }
+- payload := make([]byte, len(testPayload))
+- _, err = r.Read(payload)
+- if err != nil {
+- t.Errorf("read %v", err)
+- }
+- if !bytes.Equal(testPayload, payload) {
+- t.Errorf("payload %q vs %q", testPayload, payload)
+- }
+-}
+-
+-func TestHybiShortTextFrame(t *testing.T) {
+- frameHeader := &hybiFrameHeader{Fin: true, OpCode: TextFrame}
+- payload := []byte("hello")
+- testHybiFrame(t, []byte{0x81, 0x05}, payload, payload, frameHeader)
+-
+- payload = make([]byte, 125)
+- testHybiFrame(t, []byte{0x81, 125}, payload, payload, frameHeader)
+-}
+-
+-func TestHybiShortMaskedTextFrame(t *testing.T) {
+- frameHeader := &hybiFrameHeader{Fin: true, OpCode: TextFrame,
+- MaskingKey: []byte{0xcc, 0x55, 0x80, 0x20}}
+- payload := []byte("hello")
+- maskedPayload := []byte{0xa4, 0x30, 0xec, 0x4c, 0xa3}
+- header := []byte{0x81, 0x85}
+- header = append(header, frameHeader.MaskingKey...)
+- testHybiFrame(t, header, payload, maskedPayload, frameHeader)
+-}
+-
+-func TestHybiShortBinaryFrame(t *testing.T) {
+- frameHeader := &hybiFrameHeader{Fin: true, OpCode: BinaryFrame}
+- payload := []byte("hello")
+- testHybiFrame(t, []byte{0x82, 0x05}, payload, payload, frameHeader)
+-
+- payload = make([]byte, 125)
+- testHybiFrame(t, []byte{0x82, 125}, payload, payload, frameHeader)
+-}
+-
+-func TestHybiControlFrame(t *testing.T) {
+- frameHeader := &hybiFrameHeader{Fin: true, OpCode: PingFrame}
+- payload := []byte("hello")
+- testHybiFrame(t, []byte{0x89, 0x05}, payload, payload, frameHeader)
+-
+- frameHeader = &hybiFrameHeader{Fin: true, OpCode: PongFrame}
+- testHybiFrame(t, []byte{0x8A, 0x05}, payload, payload, frameHeader)
+-
+- frameHeader = &hybiFrameHeader{Fin: true, OpCode: CloseFrame}
+- payload = []byte{0x03, 0xe8} // 1000
+- testHybiFrame(t, []byte{0x88, 0x02}, payload, payload, frameHeader)
+-}
+-
+-func TestHybiLongFrame(t *testing.T) {
+- frameHeader := &hybiFrameHeader{Fin: true, OpCode: TextFrame}
+- payload := make([]byte, 126)
+- testHybiFrame(t, []byte{0x81, 126, 0x00, 126}, payload, payload, frameHeader)
+-
+- payload = make([]byte, 65535)
+- testHybiFrame(t, []byte{0x81, 126, 0xff, 0xff}, payload, payload, frameHeader)
+-
+- payload = make([]byte, 65536)
+- testHybiFrame(t, []byte{0x81, 127, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}, payload, payload, frameHeader)
+-}
+-
+-func TestHybiClientRead(t *testing.T) {
+- wireData := []byte{0x81, 0x05, 'h', 'e', 'l', 'l', 'o',
+- 0x89, 0x05, 'h', 'e', 'l', 'l', 'o', // ping
+- 0x81, 0x05, 'w', 'o', 'r', 'l', 'd'}
+- br := bufio.NewReader(bytes.NewBuffer(wireData))
+- bw := bufio.NewWriter(bytes.NewBuffer([]byte{}))
+- conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, nil)
+-
+- msg := make([]byte, 512)
+- n, err := conn.Read(msg)
+- if err != nil {
+- t.Errorf("read 1st frame, error %q", err)
+- }
+- if n != 5 {
+- t.Errorf("read 1st frame, expect 5, got %d", n)
+- }
+- if !bytes.Equal(wireData[2:7], msg[:n]) {
+- t.Errorf("read 1st frame %v, got %v", wireData[2:7], msg[:n])
+- }
+- n, err = conn.Read(msg)
+- if err != nil {
+- t.Errorf("read 2nd frame, error %q", err)
+- }
+- if n != 5 {
+- t.Errorf("read 2nd frame, expect 5, got %d", n)
+- }
+- if !bytes.Equal(wireData[16:21], msg[:n]) {
+- t.Errorf("read 2nd frame %v, got %v", wireData[16:21], msg[:n])
+- }
+- n, err = conn.Read(msg)
+- if err == nil {
+- t.Errorf("read not EOF")
+- }
+- if n != 0 {
+- t.Errorf("expect read 0, got %d", n)
+- }
+-}
+-
+-func TestHybiShortRead(t *testing.T) {
+- wireData := []byte{0x81, 0x05, 'h', 'e', 'l', 'l', 'o',
+- 0x89, 0x05, 'h', 'e', 'l', 'l', 'o', // ping
+- 0x81, 0x05, 'w', 'o', 'r', 'l', 'd'}
+- br := bufio.NewReader(bytes.NewBuffer(wireData))
+- bw := bufio.NewWriter(bytes.NewBuffer([]byte{}))
+- conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, nil)
+-
+- step := 0
+- pos := 0
+- expectedPos := []int{2, 5, 16, 19}
+- expectedLen := []int{3, 2, 3, 2}
+- for {
+- msg := make([]byte, 3)
+- n, err := conn.Read(msg)
+- if step >= len(expectedPos) {
+- if err == nil {
+- t.Errorf("read not EOF")
+- }
+- if n != 0 {
+- t.Errorf("expect read 0, got %d", n)
+- }
+- return
+- }
+- pos = expectedPos[step]
+- endPos := pos + expectedLen[step]
+- if err != nil {
+- t.Errorf("read from %d, got error %q", pos, err)
+- return
+- }
+- if n != endPos-pos {
+- t.Errorf("read from %d, expect %d, got %d", pos, endPos-pos, n)
+- }
+- if !bytes.Equal(wireData[pos:endPos], msg[:n]) {
+- t.Errorf("read from %d, frame %v, got %v", pos, wireData[pos:endPos], msg[:n])
+- }
+- step++
+- }
+-}
+-
+-func TestHybiServerRead(t *testing.T) {
+- wireData := []byte{0x81, 0x85, 0xcc, 0x55, 0x80, 0x20,
+- 0xa4, 0x30, 0xec, 0x4c, 0xa3, // hello
+- 0x89, 0x85, 0xcc, 0x55, 0x80, 0x20,
+- 0xa4, 0x30, 0xec, 0x4c, 0xa3, // ping: hello
+- 0x81, 0x85, 0xed, 0x83, 0xb4, 0x24,
+- 0x9a, 0xec, 0xc6, 0x48, 0x89, // world
+- }
+- br := bufio.NewReader(bytes.NewBuffer(wireData))
+- bw := bufio.NewWriter(bytes.NewBuffer([]byte{}))
+- conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, new(http.Request))
+-
+- expected := [][]byte{[]byte("hello"), []byte("world")}
+-
+- msg := make([]byte, 512)
+- n, err := conn.Read(msg)
+- if err != nil {
+- t.Errorf("read 1st frame, error %q", err)
+- }
+- if n != 5 {
+- t.Errorf("read 1st frame, expect 5, got %d", n)
+- }
+- if !bytes.Equal(expected[0], msg[:n]) {
+- t.Errorf("read 1st frame %q, got %q", expected[0], msg[:n])
+- }
+-
+- n, err = conn.Read(msg)
+- if err != nil {
+- t.Errorf("read 2nd frame, error %q", err)
+- }
+- if n != 5 {
+- t.Errorf("read 2nd frame, expect 5, got %d", n)
+- }
+- if !bytes.Equal(expected[1], msg[:n]) {
+- t.Errorf("read 2nd frame %q, got %q", expected[1], msg[:n])
+- }
+-
+- n, err = conn.Read(msg)
+- if err == nil {
+- t.Errorf("read not EOF")
+- }
+- if n != 0 {
+- t.Errorf("expect read 0, got %d", n)
+- }
+-}
+-
+-func TestHybiServerReadWithoutMasking(t *testing.T) {
+- wireData := []byte{0x81, 0x05, 'h', 'e', 'l', 'l', 'o'}
+- br := bufio.NewReader(bytes.NewBuffer(wireData))
+- bw := bufio.NewWriter(bytes.NewBuffer([]byte{}))
+- conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, new(http.Request))
+- // server MUST close the connection upon receiving a non-masked frame.
+- msg := make([]byte, 512)
+- _, err := conn.Read(msg)
+- if err != io.EOF {
+- t.Errorf("read 1st frame, expect %q, but got %q", io.EOF, err)
+- }
+-}
+-
+-func TestHybiClientReadWithMasking(t *testing.T) {
+- wireData := []byte{0x81, 0x85, 0xcc, 0x55, 0x80, 0x20,
+- 0xa4, 0x30, 0xec, 0x4c, 0xa3, // hello
+- }
+- br := bufio.NewReader(bytes.NewBuffer(wireData))
+- bw := bufio.NewWriter(bytes.NewBuffer([]byte{}))
+- conn := newHybiConn(newConfig(t, "/"), bufio.NewReadWriter(br, bw), nil, nil)
+-
+- // client MUST close the connection upon receiving a masked frame.
+- msg := make([]byte, 512)
+- _, err := conn.Read(msg)
+- if err != io.EOF {
+- t.Errorf("read 1st frame, expect %q, but got %q", io.EOF, err)
+- }
+-}
+-
+-// Test the hybiServerHandshaker supports firefox implementation and
+-// checks Connection request header include (but it's not necessary
+-// equal to) "upgrade"
+-func TestHybiServerFirefoxHandshake(t *testing.T) {
+- config := new(Config)
+- handshaker := &hybiServerHandshaker{Config: config}
+- br := bufio.NewReader(strings.NewReader(`GET /chat HTTP/1.1
+-Host: server.example.com
+-Upgrade: websocket
+-Connection: keep-alive, upgrade
+-Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
+-Origin: http://example.com
+-Sec-WebSocket-Protocol: chat, superchat
+-Sec-WebSocket-Version: 13
+-
+-`))
+- req, err := http.ReadRequest(br)
+- if err != nil {
+- t.Fatal("request", err)
+- }
+- code, err := handshaker.ReadHandshake(br, req)
+- if err != nil {
+- t.Errorf("handshake failed: %v", err)
+- }
+- if code != http.StatusSwitchingProtocols {
+- t.Errorf("status expected %q but got %q", http.StatusSwitchingProtocols, code)
+- }
+- b := bytes.NewBuffer([]byte{})
+- bw := bufio.NewWriter(b)
+-
+- config.Protocol = []string{"chat"}
+-
+- err = handshaker.AcceptHandshake(bw)
+- if err != nil {
+- t.Errorf("handshake response failed: %v", err)
+- }
+- expectedResponse := strings.Join([]string{
+- "HTTP/1.1 101 Switching Protocols",
+- "Upgrade: websocket",
+- "Connection: Upgrade",
+- "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=",
+- "Sec-WebSocket-Protocol: chat",
+- "", ""}, "\r\n")
+-
+- if b.String() != expectedResponse {
+- t.Errorf("handshake expected %q but got %q", expectedResponse, b.String())
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/server.go docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/server.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/server.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/server.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,122 +0,0 @@
+-// Copyright 2009 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 websocket
+-
+-import (
+- "bufio"
+- "fmt"
+- "io"
+- "net/http"
+-)
+-
+-func newServerConn(rwc io.ReadWriteCloser, buf *bufio.ReadWriter, req *http.Request, config *Config, handshake func(*Config, *http.Request) error) (conn *Conn, err error) {
+- var hs serverHandshaker = &hybiServerHandshaker{Config: config}
+- code, err := hs.ReadHandshake(buf.Reader, req)
+- if err == ErrBadWebSocketVersion {
+- fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code))
+- fmt.Fprintf(buf, "Sec-WebSocket-Version: %s\r\n", SupportedProtocolVersion)
+- buf.WriteString("\r\n")
+- buf.WriteString(err.Error())
+- buf.Flush()
+- return
+- }
+- if err != nil {
+- hs = &hixie76ServerHandshaker{Config: config}
+- code, err = hs.ReadHandshake(buf.Reader, req)
+- }
+- if err != nil {
+- hs = &hixie75ServerHandshaker{Config: config}
+- code, err = hs.ReadHandshake(buf.Reader, req)
+- }
+- if err != nil {
+- fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code))
+- buf.WriteString("\r\n")
+- buf.WriteString(err.Error())
+- buf.Flush()
+- return
+- }
+- if handshake != nil {
+- err = handshake(config, req)
+- if err != nil {
+- code = http.StatusForbidden
+- fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code))
+- buf.WriteString("\r\n")
+- buf.Flush()
+- return
+- }
+- }
+- err = hs.AcceptHandshake(buf.Writer)
+- if err != nil {
+- code = http.StatusBadRequest
+- fmt.Fprintf(buf, "HTTP/1.1 %03d %s\r\n", code, http.StatusText(code))
+- buf.WriteString("\r\n")
+- buf.Flush()
+- return
+- }
+- conn = hs.NewServerConn(buf, rwc, req)
+- return
+-}
+-
+-// Server represents a server of a WebSocket.
+-type Server struct {
+- // Config is a WebSocket configuration for new WebSocket connection.
+- Config
+-
+- // Handshake is an optional function in WebSocket handshake.
+- // For example, you can check, or don't check Origin header.
+- // Another example, you can select config.Protocol.
+- Handshake func(*Config, *http.Request) error
+-
+- // Handler handles a WebSocket connection.
+- Handler
+-}
+-
+-// ServeHTTP implements the http.Handler interface for a WebSocket
+-func (s Server) ServeHTTP(w http.ResponseWriter, req *http.Request) {
+- s.serveWebSocket(w, req)
+-}
+-
+-func (s Server) serveWebSocket(w http.ResponseWriter, req *http.Request) {
+- rwc, buf, err := w.(http.Hijacker).Hijack()
+- if err != nil {
+- panic("Hijack failed: " + err.Error())
+- return
+- }
+- // The server should abort the WebSocket connection if it finds
+- // the client did not send a handshake that matches with protocol
+- // specification.
+- defer rwc.Close()
+- conn, err := newServerConn(rwc, buf, req, &s.Config, s.Handshake)
+- if err != nil {
+- return
+- }
+- if conn == nil {
+- panic("unexpected nil conn")
+- }
+- s.Handler(conn)
+-}
+-
+-// Handler is a simple interface to a WebSocket browser client.
+-// It checks if Origin header is valid URL by default.
+-// You might want to verify websocket.Conn.Config().Origin in the func.
+-// If you use Server instead of Handler, you could call websocket.Origin and
+-// check the origin in your Handshake func. So, if you want to accept
+-// non-browser client, which doesn't send Origin header, you could use Server
+-//. that doesn't check origin in its Handshake.
+-type Handler func(*Conn)
+-
+-func checkOrigin(config *Config, req *http.Request) (err error) {
+- config.Origin, err = Origin(config, req)
+- if err == nil && config.Origin == nil {
+- return fmt.Errorf("null origin")
+- }
+- return err
+-}
+-
+-// ServeHTTP implements the http.Handler interface for a WebSocket
+-func (h Handler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
+- s := Server{Handler: h, Handshake: checkOrigin}
+- s.serveWebSocket(w, req)
+-}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/websocket.go docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/websocket.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/websocket.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/websocket.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,415 +0,0 @@
+-// Copyright 2009 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 websocket implements a client and server for the WebSocket protocol
+-// as specified in RFC 6455.
+-package websocket
+-
+-import (
+- "bufio"
+- "crypto/tls"
+- "encoding/json"
+- "errors"
+- "io"
+- "io/ioutil"
+- "net"
+- "net/http"
+- "net/url"
+- "sync"
+- "time"
+-)
+-
+-const (
+- ProtocolVersionHixie75 = -75
+- ProtocolVersionHixie76 = -76
+- ProtocolVersionHybi00 = 0
+- ProtocolVersionHybi08 = 8
+- ProtocolVersionHybi13 = 13
+- ProtocolVersionHybi = ProtocolVersionHybi13
+- SupportedProtocolVersion = "13, 8"
+-
+- ContinuationFrame = 0
+- TextFrame = 1
+- BinaryFrame = 2
+- CloseFrame = 8
+- PingFrame = 9
+- PongFrame = 10
+- UnknownFrame = 255
+-)
+-
+-// ProtocolError represents WebSocket protocol errors.
+-type ProtocolError struct {
+- ErrorString string
+-}
+-
+-func (err *ProtocolError) Error() string { return err.ErrorString }
+-
+-var (
+- ErrBadProtocolVersion = &ProtocolError{"bad protocol version"}
+- ErrBadScheme = &ProtocolError{"bad scheme"}
+- ErrBadStatus = &ProtocolError{"bad status"}
+- ErrBadUpgrade = &ProtocolError{"missing or bad upgrade"}
+- ErrBadWebSocketOrigin = &ProtocolError{"missing or bad WebSocket-Origin"}
+- ErrBadWebSocketLocation = &ProtocolError{"missing or bad WebSocket-Location"}
+- ErrBadWebSocketProtocol = &ProtocolError{"missing or bad WebSocket-Protocol"}
+- ErrBadWebSocketVersion = &ProtocolError{"missing or bad WebSocket Version"}
+- ErrChallengeResponse = &ProtocolError{"mismatch challenge/response"}
+- ErrBadFrame = &ProtocolError{"bad frame"}
+- ErrBadFrameBoundary = &ProtocolError{"not on frame boundary"}
+- ErrNotWebSocket = &ProtocolError{"not websocket protocol"}
+- ErrBadRequestMethod = &ProtocolError{"bad method"}
+- ErrNotSupported = &ProtocolError{"not supported"}
+-)
+-
+-// Addr is an implementation of net.Addr for WebSocket.
+-type Addr struct {
+- *url.URL
+-}
+-
+-// Network returns the network type for a WebSocket, "websocket".
+-func (addr *Addr) Network() string { return "websocket" }
+-
+-// Config is a WebSocket configuration
+-type Config struct {
+- // A WebSocket server address.
+- Location *url.URL
+-
+- // A Websocket client origin.
+- Origin *url.URL
+-
+- // WebSocket subprotocols.
+- Protocol []string
+-
+- // WebSocket protocol version.
+- Version int
+-
+- // TLS config for secure WebSocket (wss).
+- TlsConfig *tls.Config
+-
+- // Additional header fields to be sent in WebSocket opening handshake.
+- Header http.Header
+-
+- handshakeData map[string]string
+-}
+-
+-// serverHandshaker is an interface to handle WebSocket server side handshake.
+-type serverHandshaker interface {
+- // ReadHandshake reads handshake request message from client.
+- // Returns http response code and error if any.
+- ReadHandshake(buf *bufio.Reader, req *http.Request) (code int, err error)
+-
+- // AcceptHandshake accepts the client handshake request and sends
+- // handshake response back to client.
+- AcceptHandshake(buf *bufio.Writer) (err error)
+-
+- // NewServerConn creates a new WebSocket connection.
+- NewServerConn(buf *bufio.ReadWriter, rwc io.ReadWriteCloser, request *http.Request) (conn *Conn)
+-}
+-
+-// frameReader is an interface to read a WebSocket frame.
+-type frameReader interface {
+- // Reader is to read payload of the frame.
+- io.Reader
+-
+- // PayloadType returns payload type.
+- PayloadType() byte
+-
+- // HeaderReader returns a reader to read header of the frame.
+- HeaderReader() io.Reader
+-
+- // TrailerReader returns a reader to read trailer of the frame.
+- // If it returns nil, there is no trailer in the frame.
+- TrailerReader() io.Reader
+-
+- // Len returns total length of the frame, including header and trailer.
+- Len() int
+-}
+-
+-// frameReaderFactory is an interface to creates new frame reader.
+-type frameReaderFactory interface {
+- NewFrameReader() (r frameReader, err error)
+-}
+-
+-// frameWriter is an interface to write a WebSocket frame.
+-type frameWriter interface {
+- // Writer is to write playload of the frame.
+- io.WriteCloser
+-}
+-
+-// frameWriterFactory is an interface to create new frame writer.
+-type frameWriterFactory interface {
+- NewFrameWriter(payloadType byte) (w frameWriter, err error)
+-}
+-
+-type frameHandler interface {
+- HandleFrame(frame frameReader) (r frameReader, err error)
+- WriteClose(status int) (err error)
+-}
+-
+-// Conn represents a WebSocket connection.
+-type Conn struct {
+- config *Config
+- request *http.Request
+-
+- buf *bufio.ReadWriter
+- rwc io.ReadWriteCloser
+-
+- rio sync.Mutex
+- frameReaderFactory
+- frameReader
+-
+- wio sync.Mutex
+- frameWriterFactory
+-
+- frameHandler
+- PayloadType byte
+- defaultCloseStatus int
+-}
+-
+-// Read implements the io.Reader interface:
+-// it reads data of a frame from the WebSocket connection.
+-// if msg is not large enough for the frame data, it fills the msg and next Read
+-// will read the rest of the frame data.
+-// it reads Text frame or Binary frame.
+-func (ws *Conn) Read(msg []byte) (n int, err error) {
+- ws.rio.Lock()
+- defer ws.rio.Unlock()
+-again:
+- if ws.frameReader == nil {
+- frame, err := ws.frameReaderFactory.NewFrameReader()
+- if err != nil {
+- return 0, err
+- }
+- ws.frameReader, err = ws.frameHandler.HandleFrame(frame)
+- if err != nil {
+- return 0, err
+- }
+- if ws.frameReader == nil {
+- goto again
+- }
+- }
+- n, err = ws.frameReader.Read(msg)
+- if err == io.EOF {
+- if trailer := ws.frameReader.TrailerReader(); trailer != nil {
+- io.Copy(ioutil.Discard, trailer)
+- }
+- ws.frameReader = nil
+- goto again
+- }
+- return n, err
+-}
+-
+-// Write implements the io.Writer interface:
+-// it writes data as a frame to the WebSocket connection.
+-func (ws *Conn) Write(msg []byte) (n int, err error) {
+- ws.wio.Lock()
+- defer ws.wio.Unlock()
+- w, err := ws.frameWriterFactory.NewFrameWriter(ws.PayloadType)
+- if err != nil {
+- return 0, err
+- }
+- n, err = w.Write(msg)
+- w.Close()
+- if err != nil {
+- return n, err
+- }
+- return n, err
+-}
+-
+-// Close implements the io.Closer interface.
+-func (ws *Conn) Close() error {
+- err := ws.frameHandler.WriteClose(ws.defaultCloseStatus)
+- if err != nil {
+- return err
+- }
+- return ws.rwc.Close()
+-}
+-
+-func (ws *Conn) IsClientConn() bool { return ws.request == nil }
+-func (ws *Conn) IsServerConn() bool { return ws.request != nil }
+-
+-// LocalAddr returns the WebSocket Origin for the connection for client, or
+-// the WebSocket location for server.
+-func (ws *Conn) LocalAddr() net.Addr {
+- if ws.IsClientConn() {
+- return &Addr{ws.config.Origin}
+- }
+- return &Addr{ws.config.Location}
+-}
+-
+-// RemoteAddr returns the WebSocket location for the connection for client, or
+-// the Websocket Origin for server.
+-func (ws *Conn) RemoteAddr() net.Addr {
+- if ws.IsClientConn() {
+- return &Addr{ws.config.Location}
+- }
+- return &Addr{ws.config.Origin}
+-}
+-
+-var errSetDeadline = errors.New("websocket: cannot set deadline: not using a net.Conn")
+-
+-// SetDeadline sets the connection's network read & write deadlines.
+-func (ws *Conn) SetDeadline(t time.Time) error {
+- if conn, ok := ws.rwc.(net.Conn); ok {
+- return conn.SetDeadline(t)
+- }
+- return errSetDeadline
+-}
+-
+-// SetReadDeadline sets the connection's network read deadline.
+-func (ws *Conn) SetReadDeadline(t time.Time) error {
+- if conn, ok := ws.rwc.(net.Conn); ok {
+- return conn.SetReadDeadline(t)
+- }
+- return errSetDeadline
+-}
+-
+-// SetWriteDeadline sets the connection's network write deadline.
+-func (ws *Conn) SetWriteDeadline(t time.Time) error {
+- if conn, ok := ws.rwc.(net.Conn); ok {
+- return conn.SetWriteDeadline(t)
+- }
+- return errSetDeadline
+-}
+-
+-// Config returns the WebSocket config.
+-func (ws *Conn) Config() *Config { return ws.config }
+-
+-// Request returns the http request upgraded to the WebSocket.
+-// It is nil for client side.
+-func (ws *Conn) Request() *http.Request { return ws.request }
+-
+-// Codec represents a symmetric pair of functions that implement a codec.
+-type Codec struct {
+- Marshal func(v interface{}) (data []byte, payloadType byte, err error)
+- Unmarshal func(data []byte, payloadType byte, v interface{}) (err error)
+-}
+-
+-// Send sends v marshaled by cd.Marshal as single frame to ws.
+-func (cd Codec) Send(ws *Conn, v interface{}) (err error) {
+- data, payloadType, err := cd.Marshal(v)
+- if err != nil {
+- return err
+- }
+- ws.wio.Lock()
+- defer ws.wio.Unlock()
+- w, err := ws.frameWriterFactory.NewFrameWriter(payloadType)
+- if err != nil {
+- return err
+- }
+- _, err = w.Write(data)
+- w.Close()
+- return err
+-}
+-
+-// Receive receives single frame from ws, unmarshaled by cd.Unmarshal and stores in v.
+-func (cd Codec) Receive(ws *Conn, v interface{}) (err error) {
+- ws.rio.Lock()
+- defer ws.rio.Unlock()
+- if ws.frameReader != nil {
+- _, err = io.Copy(ioutil.Discard, ws.frameReader)
+- if err != nil {
+- return err
+- }
+- ws.frameReader = nil
+- }
+-again:
+- frame, err := ws.frameReaderFactory.NewFrameReader()
+- if err != nil {
+- return err
+- }
+- frame, err = ws.frameHandler.HandleFrame(frame)
+- if err != nil {
+- return err
+- }
+- if frame == nil {
+- goto again
+- }
+- payloadType := frame.PayloadType()
+- data, err := ioutil.ReadAll(frame)
+- if err != nil {
+- return err
+- }
+- return cd.Unmarshal(data, payloadType, v)
+-}
+-
+-func marshal(v interface{}) (msg []byte, payloadType byte, err error) {
+- switch data := v.(type) {
+- case string:
+- return []byte(data), TextFrame, nil
+- case []byte:
+- return data, BinaryFrame, nil
+- }
+- return nil, UnknownFrame, ErrNotSupported
+-}
+-
+-func unmarshal(msg []byte, payloadType byte, v interface{}) (err error) {
+- switch data := v.(type) {
+- case *string:
+- *data = string(msg)
+- return nil
+- case *[]byte:
+- *data = msg
+- return nil
+- }
+- return ErrNotSupported
+-}
+-
+-/*
+-Message is a codec to send/receive text/binary data in a frame on WebSocket connection.
+-To send/receive text frame, use string type.
+-To send/receive binary frame, use []byte type.
+-
+-Trivial usage:
+-
+- import "websocket"
+-
+- // receive text frame
+- var message string
+- websocket.Message.Receive(ws, &message)
+-
+- // send text frame
+- message = "hello"
+- websocket.Message.Send(ws, message)
+-
+- // receive binary frame
+- var data []byte
+- websocket.Message.Receive(ws, &data)
+-
+- // send binary frame
+- data = []byte{0, 1, 2}
+- websocket.Message.Send(ws, data)
+-
+-*/
+-var Message = Codec{marshal, unmarshal}
+-
+-func jsonMarshal(v interface{}) (msg []byte, payloadType byte, err error) {
+- msg, err = json.Marshal(v)
+- return msg, TextFrame, err
+-}
+-
+-func jsonUnmarshal(msg []byte, payloadType byte, v interface{}) (err error) {
+- return json.Unmarshal(msg, v)
+-}
+-
+-/*
+-JSON is a codec to send/receive JSON data in a frame from a WebSocket connection.
+-
+-Trivial usage:
+-
+- import "websocket"
+-
+- type T struct {
+- Msg string
+- Count int
+- }
+-
+- // receive JSON type T
+- var data T
+- websocket.JSON.Receive(ws, &data)
+-
+- // send JSON type T
+- websocket.JSON.Send(ws, data)
+-*/
+-var JSON = Codec{jsonMarshal, jsonUnmarshal}
+diff -uNr docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/websocket_test.go docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/websocket_test.go
+--- docker-0.6.2/vendor/src/code.google.com/p/go.net/websocket/websocket_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/code.google.com/p/go.net/websocket/websocket_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,327 +0,0 @@
+-// Copyright 2009 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 websocket
+-
+-import (
+- "bytes"
+- "fmt"
+- "io"
+- "log"
+- "net"
+- "net/http"
+- "net/http/httptest"
+- "net/url"
+- "strings"
+- "sync"
+- "testing"
+-)
+-
+-var serverAddr string
+-var once sync.Once
+-
+-func echoServer(ws *Conn) { io.Copy(ws, ws) }
+-
+-type Count struct {
+- S string
+- N int
+-}
+-
+-func countServer(ws *Conn) {
+- for {
+- var count Count
+- err := JSON.Receive(ws, &count)
+- if err != nil {
+- return
+- }
+- count.N++
+- count.S = strings.Repeat(count.S, count.N)
+- err = JSON.Send(ws, count)
+- if err != nil {
+- return
+- }
+- }
+-}
+-
+-func subProtocolHandshake(config *Config, req *http.Request) error {
+- for _, proto := range config.Protocol {
+- if proto == "chat" {
+- config.Protocol = []string{proto}
+- return nil
+- }
+- }
+- return ErrBadWebSocketProtocol
+-}
+-
+-func subProtoServer(ws *Conn) {
+- for _, proto := range ws.Config().Protocol {
+- io.WriteString(ws, proto)
+- }
+-}
+-
+-func startServer() {
+- http.Handle("/echo", Handler(echoServer))
+- http.Handle("/count", Handler(countServer))
+- subproto := Server{
+- Handshake: subProtocolHandshake,
+- Handler: Handler(subProtoServer),
+- }
+- http.Handle("/subproto", subproto)
+- server := httptest.NewServer(nil)
+- serverAddr = server.Listener.Addr().String()
+- log.Print("Test WebSocket server listening on ", serverAddr)
+-}
+-
+-func newConfig(t *testing.T, path string) *Config {
+- config, _ := NewConfig(fmt.Sprintf("ws://%s%s", serverAddr, path), "http://localhost")
+- return config
+-}
+-
+-func TestEcho(t *testing.T) {
+- once.Do(startServer)
+-
+- // websocket.Dial()
+- client, err := net.Dial("tcp", serverAddr)
+- if err != nil {
+- t.Fatal("dialing", err)
+- }
+- conn, err := NewClient(newConfig(t, "/echo"), client)
+- if err != nil {
+- t.Errorf("WebSocket handshake error: %v", err)
+- return
+- }
+-
+- msg := []byte("hello, world\n")
+- if _, err := conn.Write(msg); err != nil {
+- t.Errorf("Write: %v", err)
+- }
+- var actual_msg = make([]byte, 512)
+- n, err := conn.Read(actual_msg)
+- if err != nil {
+- t.Errorf("Read: %v", err)
+- }
+- actual_msg = actual_msg[0:n]
+- if !bytes.Equal(msg, actual_msg) {
+- t.Errorf("Echo: expected %q got %q", msg, actual_msg)
+- }
+- conn.Close()
+-}
+-
+-func TestAddr(t *testing.T) {
+- once.Do(startServer)
+-
+- // websocket.Dial()
+- client, err := net.Dial("tcp", serverAddr)
+- if err != nil {
+- t.Fatal("dialing", err)
+- }
+- conn, err := NewClient(newConfig(t, "/echo"), client)
+- if err != nil {
+- t.Errorf("WebSocket handshake error: %v", err)
+- return
+- }
+-
+- ra := conn.RemoteAddr().String()
+- if !strings.HasPrefix(ra, "ws://") || !strings.HasSuffix(ra, "/echo") {
+- t.Errorf("Bad remote addr: %v", ra)
+- }
+- la := conn.LocalAddr().String()
+- if !strings.HasPrefix(la, "http://") {
+- t.Errorf("Bad local addr: %v", la)
+- }
+- conn.Close()
+-}
+-
+-func TestCount(t *testing.T) {
+- once.Do(startServer)
+-
+- // websocket.Dial()
+- client, err := net.Dial("tcp", serverAddr)
+- if err != nil {
+- t.Fatal("dialing", err)
+- }
+- conn, err := NewClient(newConfig(t, "/count"), client)
+- if err != nil {
+- t.Errorf("WebSocket handshake error: %v", err)
+- return
+- }
+-
+- var count Count
+- count.S = "hello"
+- if err := JSON.Send(conn, count); err != nil {
+- t.Errorf("Write: %v", err)
+- }
+- if err := JSON.Receive(conn, &count); err != nil {
+- t.Errorf("Read: %v", err)
+- }
+- if count.N != 1 {
+- t.Errorf("count: expected %d got %d", 1, count.N)
+- }
+- if count.S != "hello" {
+- t.Errorf("count: expected %q got %q", "hello", count.S)
+- }
+- if err := JSON.Send(conn, count); err != nil {
+- t.Errorf("Write: %v", err)
+- }
+- if err := JSON.Receive(conn, &count); err != nil {
+- t.Errorf("Read: %v", err)
+- }
+- if count.N != 2 {
+- t.Errorf("count: expected %d got %d", 2, count.N)
+- }
+- if count.S != "hellohello" {
+- t.Errorf("count: expected %q got %q", "hellohello", count.S)
+- }
+- conn.Close()
+-}
+-
+-func TestWithQuery(t *testing.T) {
+- once.Do(startServer)
+-
+- client, err := net.Dial("tcp", serverAddr)
+- if err != nil {
+- t.Fatal("dialing", err)
+- }
+-
+- config := newConfig(t, "/echo")
+- config.Location, err = url.ParseRequestURI(fmt.Sprintf("ws://%s/echo?q=v", serverAddr))
+- if err != nil {
+- t.Fatal("location url", err)
+- }
+-
+- ws, err := NewClient(config, client)
+- if err != nil {
+- t.Errorf("WebSocket handshake: %v", err)
+- return
+- }
+- ws.Close()
+-}
+-
+-func testWithProtocol(t *testing.T, subproto []string) (string, error) {
+- once.Do(startServer)
+-
+- client, err := net.Dial("tcp", serverAddr)
+- if err != nil {
+- t.Fatal("dialing", err)
+- }
+-
+- config := newConfig(t, "/subproto")
+- config.Protocol = subproto
+-
+- ws, err := NewClient(config, client)
+- if err != nil {
+- return "", err
+- }
+- msg := make([]byte, 16)
+- n, err := ws.Read(msg)
+- if err != nil {
+- return "", err
+- }
+- ws.Close()
+- return string(msg[:n]), nil
+-}
+-
+-func TestWithProtocol(t *testing.T) {
+- proto, err := testWithProtocol(t, []string{"chat"})
+- if err != nil {
+- t.Errorf("SubProto: unexpected error: %v", err)
+- }
+- if proto != "chat" {
+- t.Errorf("SubProto: expected %q, got %q", "chat", proto)
+- }
+-}
+-
+-func TestWithTwoProtocol(t *testing.T) {
+- proto, err := testWithProtocol(t, []string{"test", "chat"})
+- if err != nil {
+- t.Errorf("SubProto: unexpected error: %v", err)
+- }
+- if proto != "chat" {
+- t.Errorf("SubProto: expected %q, got %q", "chat", proto)
+- }
+-}
+-
+-func TestWithBadProtocol(t *testing.T) {
+- _, err := testWithProtocol(t, []string{"test"})
+- if err != ErrBadStatus {
+- t.Errorf("SubProto: expected %q, got %q", ErrBadStatus)
+- }
+-}
+-
+-func TestHTTP(t *testing.T) {
+- once.Do(startServer)
+-
+- // If the client did not send a handshake that matches the protocol
+- // specification, the server MUST return an HTTP response with an
+- // appropriate error code (such as 400 Bad Request)
+- resp, err := http.Get(fmt.Sprintf("http://%s/echo", serverAddr))
+- if err != nil {
+- t.Errorf("Get: error %#v", err)
+- return
+- }
+- if resp == nil {
+- t.Error("Get: resp is null")
+- return
+- }
+- if resp.StatusCode != http.StatusBadRequest {
+- t.Errorf("Get: expected %q got %q", http.StatusBadRequest, resp.StatusCode)
+- }
+-}
+-
+-func TestTrailingSpaces(t *testing.T) {
+- // http://code.google.com/p/go/issues/detail?id=955
+- // The last runs of this create keys with trailing spaces that should not be
+- // generated by the client.
+- once.Do(startServer)
+- config := newConfig(t, "/echo")
+- for i := 0; i < 30; i++ {
+- // body
+- ws, err := DialConfig(config)
+- if err != nil {
+- t.Errorf("Dial #%d failed: %v", i, err)
+- break
+- }
+- ws.Close()
+- }
+-}
+-
+-func TestSmallBuffer(t *testing.T) {
+- // http://code.google.com/p/go/issues/detail?id=1145
+- // Read should be able to handle reading a fragment of a frame.
+- once.Do(startServer)
+-
+- // websocket.Dial()
+- client, err := net.Dial("tcp", serverAddr)
+- if err != nil {
+- t.Fatal("dialing", err)
+- }
+- conn, err := NewClient(newConfig(t, "/echo"), client)
+- if err != nil {
+- t.Errorf("WebSocket handshake error: %v", err)
+- return
+- }
+-
+- msg := []byte("hello, world\n")
+- if _, err := conn.Write(msg); err != nil {
+- t.Errorf("Write: %v", err)
+- }
+- var small_msg = make([]byte, 8)
+- n, err := conn.Read(small_msg)
+- if err != nil {
+- t.Errorf("Read: %v", err)
+- }
+- if !bytes.Equal(msg[:len(small_msg)], small_msg) {
+- t.Errorf("Echo: expected %q got %q", msg[:len(small_msg)], small_msg)
+- }
+- var second_msg = make([]byte, len(msg))
+- n, err = conn.Read(second_msg)
+- if err != nil {
+- t.Errorf("Read: %v", err)
+- }
+- second_msg = second_msg[0:n]
+- if !bytes.Equal(msg[len(small_msg):], second_msg) {
+- t.Errorf("Echo: expected %q got %q", msg[len(small_msg):], second_msg)
+- }
+- conn.Close()
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/common.go docker-devmapper/vendor/src/github.com/dotcloud/tar/common.go
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/common.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/common.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,310 +0,0 @@
+-// Copyright 2009 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 tar implements access to tar archives.
+-// It aims to cover most of the variations, including those produced
+-// by GNU and BSD tars.
+-//
+-// References:
+-// http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=5
+-// http://www.gnu.org/software/tar/manual/html_node/Standard.html
+-// http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html
+-package tar
+-
+-import (
+- "bytes"
+- "errors"
+- "fmt"
+- "os"
+- "path"
+- "time"
+-)
+-
+-const (
+- blockSize = 512
+-
+- // Types
+- TypeReg = '0' // regular file
+- TypeRegA = '\x00' // regular file
+- TypeLink = '1' // hard link
+- TypeSymlink = '2' // symbolic link
+- TypeChar = '3' // character device node
+- TypeBlock = '4' // block device node
+- TypeDir = '5' // directory
+- TypeFifo = '6' // fifo node
+- TypeCont = '7' // reserved
+- TypeXHeader = 'x' // extended header
+- TypeXGlobalHeader = 'g' // global extended header
+- TypeGNULongName = 'L' // Next file has a long name
+- TypeGNULongLink = 'K' // Next file symlinks to a file w/ a long name
+-)
+-
+-// A Header represents a single header in a tar archive.
+-// Some fields may not be populated.
+-type Header struct {
+- Name string // name of header file entry
+- Mode int64 // permission and mode bits
+- Uid int // user id of owner
+- Gid int // group id of owner
+- Size int64 // length in bytes
+- ModTime time.Time // modified time
+- Typeflag byte // type of header entry
+- Linkname string // target name of link
+- Uname string // user name of owner
+- Gname string // group name of owner
+- Devmajor int64 // major number of character or block device
+- Devminor int64 // minor number of character or block device
+- AccessTime time.Time // access time
+- ChangeTime time.Time // status change time
+-}
+-
+-// File name constants from the tar spec.
+-const (
+- fileNameSize = 100 // Maximum number of bytes in a standard tar name.
+- fileNamePrefixSize = 155 // Maximum number of ustar extension bytes.
+-)
+-
+-// FileInfo returns an os.FileInfo for the Header.
+-func (h *Header) FileInfo() os.FileInfo {
+- return headerFileInfo{h}
+-}
+-
+-// headerFileInfo implements os.FileInfo.
+-type headerFileInfo struct {
+- h *Header
+-}
+-
+-func (fi headerFileInfo) Size() int64 { return fi.h.Size }
+-func (fi headerFileInfo) IsDir() bool { return fi.Mode().IsDir() }
+-func (fi headerFileInfo) ModTime() time.Time { return fi.h.ModTime }
+-func (fi headerFileInfo) Sys() interface{} { return fi.h }
+-
+-// Name returns the base name of the file.
+-func (fi headerFileInfo) Name() string {
+- if fi.IsDir() {
+- return path.Clean(fi.h.Name)
+- }
+- return fi.h.Name
+-}
+-
+-// Mode returns the permission and mode bits for the headerFileInfo.
+-func (fi headerFileInfo) Mode() (mode os.FileMode) {
+- // Set file permission bits.
+- mode = os.FileMode(fi.h.Mode).Perm()
+-
+- // Set setuid, setgid and sticky bits.
+- if fi.h.Mode&c_ISUID != 0 {
+- // setuid
+- mode |= os.ModeSetuid
+- }
+- if fi.h.Mode&c_ISGID != 0 {
+- // setgid
+- mode |= os.ModeSetgid
+- }
+- if fi.h.Mode&c_ISVTX != 0 {
+- // sticky
+- mode |= os.ModeSticky
+- }
+-
+- // Set file mode bits.
+- // clear perm, setuid, setgid and sticky bits.
+- m := os.FileMode(fi.h.Mode) &^ 07777
+- if m == c_ISDIR {
+- // directory
+- mode |= os.ModeDir
+- }
+- if m == c_ISFIFO {
+- // named pipe (FIFO)
+- mode |= os.ModeNamedPipe
+- }
+- if m == c_ISLNK {
+- // symbolic link
+- mode |= os.ModeSymlink
+- }
+- if m == c_ISBLK {
+- // device file
+- mode |= os.ModeDevice
+- }
+- if m == c_ISCHR {
+- // Unix character device
+- mode |= os.ModeDevice
+- mode |= os.ModeCharDevice
+- }
+- if m == c_ISSOCK {
+- // Unix domain socket
+- mode |= os.ModeSocket
+- }
+-
+- switch fi.h.Typeflag {
+- case TypeLink, TypeSymlink:
+- // hard link, symbolic link
+- mode |= os.ModeSymlink
+- case TypeChar:
+- // character device node
+- mode |= os.ModeDevice
+- mode |= os.ModeCharDevice
+- case TypeBlock:
+- // block device node
+- mode |= os.ModeDevice
+- case TypeDir:
+- // directory
+- mode |= os.ModeDir
+- case TypeFifo:
+- // fifo node
+- mode |= os.ModeNamedPipe
+- }
+-
+- return mode
+-}
+-
+-// sysStat, if non-nil, populates h from system-dependent fields of fi.
+-var sysStat func(fi os.FileInfo, h *Header) error
+-
+-// Mode constants from the tar spec.
+-const (
+- c_ISUID = 04000 // Set uid
+- c_ISGID = 02000 // Set gid
+- c_ISVTX = 01000 // Save text (sticky bit)
+- c_ISDIR = 040000 // Directory
+- c_ISFIFO = 010000 // FIFO
+- c_ISREG = 0100000 // Regular file
+- c_ISLNK = 0120000 // Symbolic link
+- c_ISBLK = 060000 // Block special file
+- c_ISCHR = 020000 // Character special file
+- c_ISSOCK = 0140000 // Socket
+-)
+-
+-// Keywords for the PAX Extended Header
+-const (
+- PAX_ATIME = "atime"
+- PAX_CHARSET = "charset"
+- PAX_COMMENT = "comment"
+- PAX_CTIME = "ctime" // please note that ctime is not a valid pax header.
+- PAX_GID = "gid"
+- PAX_GNAME = "gname"
+- PAX_LINKPATH = "linkpath"
+- PAX_MTIME = "mtime"
+- PAX_PATH = "path"
+- PAX_SIZE = "size"
+- PAX_UID = "uid"
+- PAX_UNAME = "uname"
+-)
+-
+-// FileInfoHeader creates a partially-populated Header from fi.
+-// If fi describes a symlink, FileInfoHeader records link as the link target.
+-// If fi describes a directory, a slash is appended to the name.
+-func FileInfoHeader(fi os.FileInfo, link string) (*Header, error) {
+- if fi == nil {
+- return nil, errors.New("tar: FileInfo is nil")
+- }
+- fm := fi.Mode()
+- h := &Header{
+- Name: fi.Name(),
+- ModTime: fi.ModTime(),
+- Mode: int64(fm.Perm()), // or'd with c_IS* constants later
+- }
+- switch {
+- case fm.IsRegular():
+- h.Mode |= c_ISREG
+- h.Typeflag = TypeReg
+- h.Size = fi.Size()
+- case fi.IsDir():
+- h.Typeflag = TypeDir
+- h.Mode |= c_ISDIR
+- h.Name += "/"
+- case fm&os.ModeSymlink != 0:
+- h.Typeflag = TypeSymlink
+- h.Mode |= c_ISLNK
+- h.Linkname = link
+- case fm&os.ModeDevice != 0:
+- if fm&os.ModeCharDevice != 0 {
+- h.Mode |= c_ISCHR
+- h.Typeflag = TypeChar
+- } else {
+- h.Mode |= c_ISBLK
+- h.Typeflag = TypeBlock
+- }
+- case fm&os.ModeNamedPipe != 0:
+- h.Typeflag = TypeFifo
+- h.Mode |= c_ISFIFO
+- case fm&os.ModeSocket != 0:
+- h.Mode |= c_ISSOCK
+- default:
+- return nil, fmt.Errorf("archive/tar: unknown file mode %v", fm)
+- }
+- if fm&os.ModeSetuid != 0 {
+- h.Mode |= c_ISUID
+- }
+- if fm&os.ModeSetgid != 0 {
+- h.Mode |= c_ISGID
+- }
+- if fm&os.ModeSticky != 0 {
+- h.Mode |= c_ISVTX
+- }
+- if sysStat != nil {
+- return h, sysStat(fi, h)
+- }
+- return h, nil
+-}
+-
+-var zeroBlock = make([]byte, blockSize)
+-
+-// POSIX specifies a sum of the unsigned byte values, but the Sun tar uses signed byte values.
+-// We compute and return both.
+-func checksum(header []byte) (unsigned int64, signed int64) {
+- for i := 0; i < len(header); i++ {
+- if i == 148 {
+- // The chksum field (header[148:156]) is special: it should be treated as space bytes.
+- unsigned += ' ' * 8
+- signed += ' ' * 8
+- i += 7
+- continue
+- }
+- unsigned += int64(header[i])
+- signed += int64(int8(header[i]))
+- }
+- return
+-}
+-
+-type slicer []byte
+-
+-func (sp *slicer) next(n int) (b []byte) {
+- s := *sp
+- b, *sp = s[0:n], s[n:]
+- return
+-}
+-
+-func isASCII7Bit(s string) bool {
+- for _, character := range s {
+- if (character & 0x7f) != character {
+- return false
+- }
+- }
+- return true
+-}
+-
+-func stripTo7Bits(s string) string {
+- var buffer bytes.Buffer
+- for _, character := range s {
+- if (character & 0x7f) == character {
+- buffer.WriteRune(character)
+- }
+- }
+- return buffer.String()
+-}
+-
+-func stripTo7BitsAndShorten(s string, maxLen int) string {
+- var buffer bytes.Buffer
+- count := 0
+- for _, character := range s {
+- if count == maxLen {
+- break
+- }
+- if (character & 0x7f) == character {
+- buffer.WriteRune(character)
+- count++
+- }
+- }
+- return buffer.String()
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/example_test.go docker-devmapper/vendor/src/github.com/dotcloud/tar/example_test.go
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/example_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/example_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,79 +0,0 @@
+-// Copyright 2013 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 tar_test
+-
+-import (
+- "archive/tar"
+- "bytes"
+- "fmt"
+- "io"
+- "log"
+- "os"
+-)
+-
+-func Example() {
+- // Create a buffer to write our archive to.
+- buf := new(bytes.Buffer)
+-
+- // Create a new tar archive.
+- tw := tar.NewWriter(buf)
+-
+- // Add some files to the archive.
+- var files = []struct {
+- Name, Body string
+- }{
+- {"readme.txt", "This archive contains some text files."},
+- {"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},
+- {"todo.txt", "Get animal handling licence."},
+- }
+- for _, file := range files {
+- hdr := &tar.Header{
+- Name: file.Name,
+- Size: int64(len(file.Body)),
+- }
+- if err := tw.WriteHeader(hdr); err != nil {
+- log.Fatalln(err)
+- }
+- if _, err := tw.Write([]byte(file.Body)); err != nil {
+- log.Fatalln(err)
+- }
+- }
+- // Make sure to check the error on Close.
+- if err := tw.Close(); err != nil {
+- log.Fatalln(err)
+- }
+-
+- // Open the tar archive for reading.
+- r := bytes.NewReader(buf.Bytes())
+- tr := tar.NewReader(r)
+-
+- // Iterate through the files in the archive.
+- for {
+- hdr, err := tr.Next()
+- if err == io.EOF {
+- // end of tar archive
+- break
+- }
+- if err != nil {
+- log.Fatalln(err)
+- }
+- fmt.Printf("Contents of %s:\n", hdr.Name)
+- if _, err := io.Copy(os.Stdout, tr); err != nil {
+- log.Fatalln(err)
+- }
+- fmt.Println()
+- }
+-
+- // Output:
+- // Contents of readme.txt:
+- // This archive contains some text files.
+- // Contents of gopher.txt:
+- // Gopher names:
+- // George
+- // Geoffrey
+- // Gonzo
+- // Contents of todo.txt:
+- // Get animal handling licence.
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/LICENSE docker-devmapper/vendor/src/github.com/dotcloud/tar/LICENSE
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/LICENSE 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/LICENSE 1969-12-31 18:00:00.000000000 -0600
+@@ -1,27 +0,0 @@
+-Copyright (c) 2012 The Go Authors. All rights reserved.
+-
+-Redistribution and use in source and binary forms, with or without
+-modification, are permitted provided that the following conditions are
+-met:
+-
+- * Redistributions of source code must retain the above copyright
+-notice, this list of conditions and the following disclaimer.
+- * Redistributions in binary form must reproduce the above
+-copyright notice, this list of conditions and the following disclaimer
+-in the documentation and/or other materials provided with the
+-distribution.
+- * Neither the name of Google Inc. nor the names of its
+-contributors may be used to endorse or promote products derived from
+-this software without specific prior written permission.
+-
+-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/reader.go docker-devmapper/vendor/src/github.com/dotcloud/tar/reader.go
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/reader.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/reader.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,394 +0,0 @@
+-// Copyright 2009 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 tar
+-
+-// TODO(dsymonds):
+-// - pax extensions
+-
+-import (
+- "bytes"
+- "errors"
+- "io"
+- "io/ioutil"
+- "os"
+- "strconv"
+- "strings"
+- "time"
+-)
+-
+-var (
+- ErrHeader = errors.New("archive/tar: invalid tar header")
+-)
+-
+-const maxNanoSecondIntSize = 9
+-
+-// A Reader provides sequential access to the contents of a tar archive.
+-// A tar archive consists of a sequence of files.
+-// The Next method advances to the next file in the archive (including the first),
+-// and then it can be treated as an io.Reader to access the file's data.
+-type Reader struct {
+- r io.Reader
+- err error
+- nb int64 // number of unread bytes for current file entry
+- pad int64 // amount of padding (ignored) after current file entry
+-}
+-
+-// NewReader creates a new Reader reading from r.
+-func NewReader(r io.Reader) *Reader { return &Reader{r: r} }
+-
+-// Next advances to the next entry in the tar archive.
+-func (tr *Reader) Next() (*Header, error) {
+- var hdr *Header
+- if tr.err == nil {
+- tr.skipUnread()
+- }
+- if tr.err != nil {
+- return hdr, tr.err
+- }
+- hdr = tr.readHeader()
+- if hdr == nil {
+- return hdr, tr.err
+- }
+- // Check for PAX/GNU header.
+- switch hdr.Typeflag {
+- case TypeXHeader:
+- // PAX extended header
+- headers, err := parsePAX(tr)
+- if err != nil {
+- return nil, err
+- }
+- // We actually read the whole file,
+- // but this skips alignment padding
+- tr.skipUnread()
+- hdr = tr.readHeader()
+- mergePAX(hdr, headers)
+- return hdr, nil
+- case TypeGNULongName:
+- // We have a GNU long name header. Its contents are the real file name.
+- realname, err := ioutil.ReadAll(tr)
+- if err != nil {
+- return nil, err
+- }
+- hdr, err := tr.Next()
+- hdr.Name = cString(realname)
+- return hdr, err
+- case TypeGNULongLink:
+- // We have a GNU long link header.
+- realname, err := ioutil.ReadAll(tr)
+- if err != nil {
+- return nil, err
+- }
+- hdr, err := tr.Next()
+- hdr.Linkname = cString(realname)
+- return hdr, err
+- }
+- return hdr, tr.err
+-}
+-
+-// mergePAX merges well known headers according to PAX standard.
+-// In general headers with the same name as those found
+-// in the header struct overwrite those found in the header
+-// struct with higher precision or longer values. Esp. useful
+-// for name and linkname fields.
+-func mergePAX(hdr *Header, headers map[string]string) error {
+- for k, v := range headers {
+- switch k {
+- case PAX_PATH:
+- hdr.Name = v
+- case PAX_LINKPATH:
+- hdr.Linkname = v
+- case PAX_GNAME:
+- hdr.Gname = v
+- case PAX_UNAME:
+- hdr.Uname = v
+- case PAX_UID:
+- uid, err := strconv.ParseInt(v, 10, 0)
+- if err != nil {
+- return err
+- }
+- hdr.Uid = int(uid)
+- case PAX_GID:
+- gid, err := strconv.ParseInt(v, 10, 0)
+- if err != nil {
+- return err
+- }
+- hdr.Gid = int(gid)
+- case PAX_ATIME:
+- t, err := parsePAXTime(v)
+- if err != nil {
+- return err
+- }
+- hdr.AccessTime = t
+- case PAX_MTIME:
+- t, err := parsePAXTime(v)
+- if err != nil {
+- return err
+- }
+- hdr.ModTime = t
+- case PAX_CTIME:
+- t, err := parsePAXTime(v)
+- if err != nil {
+- return err
+- }
+- hdr.ChangeTime = t
+- case PAX_SIZE:
+- size, err := strconv.ParseInt(v, 10, 0)
+- if err != nil {
+- return err
+- }
+- hdr.Size = int64(size)
+- }
+-
+- }
+- return nil
+-}
+-
+-// parsePAXTime takes a string of the form %d.%d as described in
+-// the PAX specification.
+-func parsePAXTime(t string) (time.Time, error) {
+- buf := []byte(t)
+- pos := bytes.IndexByte(buf, '.')
+- var seconds, nanoseconds int64
+- var err error
+- if pos == -1 {
+- seconds, err = strconv.ParseInt(t, 10, 0)
+- if err != nil {
+- return time.Time{}, err
+- }
+- } else {
+- seconds, err = strconv.ParseInt(string(buf[:pos]), 10, 0)
+- if err != nil {
+- return time.Time{}, err
+- }
+- nano_buf := string(buf[pos+1:])
+- // Pad as needed before converting to a decimal.
+- // For example .030 -> .030000000 -> 30000000 nanoseconds
+- if len(nano_buf) < maxNanoSecondIntSize {
+- // Right pad
+- nano_buf += strings.Repeat("0", maxNanoSecondIntSize-len(nano_buf))
+- } else if len(nano_buf) > maxNanoSecondIntSize {
+- // Right truncate
+- nano_buf = nano_buf[:maxNanoSecondIntSize]
+- }
+- nanoseconds, err = strconv.ParseInt(string(nano_buf), 10, 0)
+- if err != nil {
+- return time.Time{}, err
+- }
+- }
+- ts := time.Unix(seconds, nanoseconds)
+- return ts, nil
+-}
+-
+-// parsePAX parses PAX headers.
+-// If an extended header (type 'x') is invalid, ErrHeader is returned
+-func parsePAX(r io.Reader) (map[string]string, error) {
+- buf, err := ioutil.ReadAll(r)
+- if err != nil {
+- return nil, err
+- }
+- headers := make(map[string]string)
+- // Each record is constructed as
+- // "%d %s=%s\n", length, keyword, value
+- for len(buf) > 0 {
+- // or the header was empty to start with.
+- var sp int
+- // The size field ends at the first space.
+- sp = bytes.IndexByte(buf, ' ')
+- if sp == -1 {
+- return nil, ErrHeader
+- }
+- // Parse the first token as a decimal integer.
+- n, err := strconv.ParseInt(string(buf[:sp]), 10, 0)
+- if err != nil {
+- return nil, ErrHeader
+- }
+- // Extract everything between the decimal and the n -1 on the
+- // beginning to to eat the ' ', -1 on the end to skip the newline.
+- var record []byte
+- record, buf = buf[sp+1:n-1], buf[n:]
+- // The first equals is guaranteed to mark the end of the key.
+- // Everything else is value.
+- eq := bytes.IndexByte(record, '=')
+- if eq == -1 {
+- return nil, ErrHeader
+- }
+- key, value := record[:eq], record[eq+1:]
+- headers[string(key)] = string(value)
+- }
+- return headers, nil
+-}
+-
+-// cString parses bytes as a NUL-terminated C-style string.
+-// If a NUL byte is not found then the whole slice is returned as a string.
+-func cString(b []byte) string {
+- n := 0
+- for n < len(b) && b[n] != 0 {
+- n++
+- }
+- return string(b[0:n])
+-}
+-
+-func (tr *Reader) octal(b []byte) int64 {
+- // Check for binary format first.
+- if len(b) > 0 && b[0]&0x80 != 0 {
+- var x int64
+- for i, c := range b {
+- if i == 0 {
+- c &= 0x7f // ignore signal bit in first byte
+- }
+- x = x<<8 | int64(c)
+- }
+- return x
+- }
+-
+- // Removing leading spaces.
+- for len(b) > 0 && b[0] == ' ' {
+- b = b[1:]
+- }
+- // Removing trailing NULs and spaces.
+- for len(b) > 0 && (b[len(b)-1] == ' ' || b[len(b)-1] == '\x00') {
+- b = b[0 : len(b)-1]
+- }
+- x, err := strconv.ParseUint(cString(b), 8, 64)
+- if err != nil {
+- tr.err = err
+- }
+- return int64(x)
+-}
+-
+-// skipUnread skips any unread bytes in the existing file entry, as well as any alignment padding.
+-func (tr *Reader) skipUnread() {
+- nr := tr.nb + tr.pad // number of bytes to skip
+- tr.nb, tr.pad = 0, 0
+- if sr, ok := tr.r.(io.Seeker); ok {
+- if _, err := sr.Seek(nr, os.SEEK_CUR); err == nil {
+- return
+- }
+- }
+- _, tr.err = io.CopyN(ioutil.Discard, tr.r, nr)
+-}
+-
+-func (tr *Reader) verifyChecksum(header []byte) bool {
+- if tr.err != nil {
+- return false
+- }
+-
+- given := tr.octal(header[148:156])
+- unsigned, signed := checksum(header)
+- return given == unsigned || given == signed
+-}
+-
+-func (tr *Reader) readHeader() *Header {
+- header := make([]byte, blockSize)
+- if _, tr.err = io.ReadFull(tr.r, header); tr.err != nil {
+- return nil
+- }
+-
+- // Two blocks of zero bytes marks the end of the archive.
+- if bytes.Equal(header, zeroBlock[0:blockSize]) {
+- if _, tr.err = io.ReadFull(tr.r, header); tr.err != nil {
+- return nil
+- }
+- if bytes.Equal(header, zeroBlock[0:blockSize]) {
+- tr.err = io.EOF
+- } else {
+- tr.err = ErrHeader // zero block and then non-zero block
+- }
+- return nil
+- }
+-
+- if !tr.verifyChecksum(header) {
+- tr.err = ErrHeader
+- return nil
+- }
+-
+- // Unpack
+- hdr := new(Header)
+- s := slicer(header)
+-
+- hdr.Name = cString(s.next(100))
+- hdr.Mode = tr.octal(s.next(8))
+- hdr.Uid = int(tr.octal(s.next(8)))
+- hdr.Gid = int(tr.octal(s.next(8)))
+- hdr.Size = tr.octal(s.next(12))
+- hdr.ModTime = time.Unix(tr.octal(s.next(12)), 0)
+- s.next(8) // chksum
+- hdr.Typeflag = s.next(1)[0]
+- hdr.Linkname = cString(s.next(100))
+-
+- // The remainder of the header depends on the value of magic.
+- // The original (v7) version of tar had no explicit magic field,
+- // so its magic bytes, like the rest of the block, are NULs.
+- magic := string(s.next(8)) // contains version field as well.
+- var format string
+- switch magic {
+- case "ustar\x0000": // POSIX tar (1003.1-1988)
+- if string(header[508:512]) == "tar\x00" {
+- format = "star"
+- } else {
+- format = "posix"
+- }
+- case "ustar \x00": // old GNU tar
+- format = "gnu"
+- }
+-
+- switch format {
+- case "posix", "gnu", "star":
+- hdr.Uname = cString(s.next(32))
+- hdr.Gname = cString(s.next(32))
+- devmajor := s.next(8)
+- devminor := s.next(8)
+- if hdr.Typeflag == TypeChar || hdr.Typeflag == TypeBlock {
+- hdr.Devmajor = tr.octal(devmajor)
+- hdr.Devminor = tr.octal(devminor)
+- }
+- var prefix string
+- switch format {
+- case "posix", "gnu":
+- prefix = cString(s.next(155))
+- case "star":
+- prefix = cString(s.next(131))
+- hdr.AccessTime = time.Unix(tr.octal(s.next(12)), 0)
+- hdr.ChangeTime = time.Unix(tr.octal(s.next(12)), 0)
+- }
+- if len(prefix) > 0 {
+- hdr.Name = prefix + "/" + hdr.Name
+- }
+- }
+-
+- if tr.err != nil {
+- tr.err = ErrHeader
+- return nil
+- }
+-
+- // Maximum value of hdr.Size is 64 GB (12 octal digits),
+- // so there's no risk of int64 overflowing.
+- tr.nb = int64(hdr.Size)
+- tr.pad = -tr.nb & (blockSize - 1) // blockSize is a power of two
+-
+- return hdr
+-}
+-
+-// Read reads from the current entry in the tar archive.
+-// It returns 0, io.EOF when it reaches the end of that entry,
+-// until Next is called to advance to the next entry.
+-func (tr *Reader) Read(b []byte) (n int, err error) {
+- if tr.nb == 0 {
+- // file consumed
+- return 0, io.EOF
+- }
+-
+- if int64(len(b)) > tr.nb {
+- b = b[0:tr.nb]
+- }
+- n, err = tr.r.Read(b)
+- tr.nb -= int64(n)
+-
+- if err == io.EOF && tr.nb > 0 {
+- err = io.ErrUnexpectedEOF
+- }
+- tr.err = err
+- return
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/reader_test.go docker-devmapper/vendor/src/github.com/dotcloud/tar/reader_test.go
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/reader_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/reader_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,366 +0,0 @@
+-// Copyright 2009 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 tar
+-
+-import (
+- "bytes"
+- "crypto/md5"
+- "fmt"
+- "io"
+- "os"
+- "reflect"
+- "strings"
+- "testing"
+- "time"
+-)
+-
+-type untarTest struct {
+- file string
+- headers []*Header
+- cksums []string
+-}
+-
+-var gnuTarTest = &untarTest{
+- file: "testdata/gnu.tar",
+- headers: []*Header{
+- {
+- Name: "small.txt",
+- Mode: 0640,
+- Uid: 73025,
+- Gid: 5000,
+- Size: 5,
+- ModTime: time.Unix(1244428340, 0),
+- Typeflag: '0',
+- Uname: "dsymonds",
+- Gname: "eng",
+- },
+- {
+- Name: "small2.txt",
+- Mode: 0640,
+- Uid: 73025,
+- Gid: 5000,
+- Size: 11,
+- ModTime: time.Unix(1244436044, 0),
+- Typeflag: '0',
+- Uname: "dsymonds",
+- Gname: "eng",
+- },
+- },
+- cksums: []string{
+- "e38b27eaccb4391bdec553a7f3ae6b2f",
+- "c65bd2e50a56a2138bf1716f2fd56fe9",
+- },
+-}
+-
+-var untarTests = []*untarTest{
+- gnuTarTest,
+- {
+- file: "testdata/star.tar",
+- headers: []*Header{
+- {
+- Name: "small.txt",
+- Mode: 0640,
+- Uid: 73025,
+- Gid: 5000,
+- Size: 5,
+- ModTime: time.Unix(1244592783, 0),
+- Typeflag: '0',
+- Uname: "dsymonds",
+- Gname: "eng",
+- AccessTime: time.Unix(1244592783, 0),
+- ChangeTime: time.Unix(1244592783, 0),
+- },
+- {
+- Name: "small2.txt",
+- Mode: 0640,
+- Uid: 73025,
+- Gid: 5000,
+- Size: 11,
+- ModTime: time.Unix(1244592783, 0),
+- Typeflag: '0',
+- Uname: "dsymonds",
+- Gname: "eng",
+- AccessTime: time.Unix(1244592783, 0),
+- ChangeTime: time.Unix(1244592783, 0),
+- },
+- },
+- },
+- {
+- file: "testdata/v7.tar",
+- headers: []*Header{
+- {
+- Name: "small.txt",
+- Mode: 0444,
+- Uid: 73025,
+- Gid: 5000,
+- Size: 5,
+- ModTime: time.Unix(1244593104, 0),
+- Typeflag: '\x00',
+- },
+- {
+- Name: "small2.txt",
+- Mode: 0444,
+- Uid: 73025,
+- Gid: 5000,
+- Size: 11,
+- ModTime: time.Unix(1244593104, 0),
+- Typeflag: '\x00',
+- },
+- },
+- },
+- {
+- file: "testdata/pax.tar",
+- headers: []*Header{
+- {
+- Name: "a/123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100",
+- Mode: 0664,
+- Uid: 1000,
+- Gid: 1000,
+- Uname: "shane",
+- Gname: "shane",
+- Size: 7,
+- ModTime: time.Unix(1350244992, 23960108),
+- ChangeTime: time.Unix(1350244992, 23960108),
+- AccessTime: time.Unix(1350244992, 23960108),
+- Typeflag: TypeReg,
+- },
+- {
+- Name: "a/b",
+- Mode: 0777,
+- Uid: 1000,
+- Gid: 1000,
+- Uname: "shane",
+- Gname: "shane",
+- Size: 0,
+- ModTime: time.Unix(1350266320, 910238425),
+- ChangeTime: time.Unix(1350266320, 910238425),
+- AccessTime: time.Unix(1350266320, 910238425),
+- Typeflag: TypeSymlink,
+- Linkname: "123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100",
+- },
+- },
+- },
+-}
+-
+-func TestReader(t *testing.T) {
+-testLoop:
+- for i, test := range untarTests {
+- f, err := os.Open(test.file)
+- if err != nil {
+- t.Errorf("test %d: Unexpected error: %v", i, err)
+- continue
+- }
+- tr := NewReader(f)
+- for j, header := range test.headers {
+- hdr, err := tr.Next()
+- if err != nil || hdr == nil {
+- t.Errorf("test %d, entry %d: Didn't get entry: %v", i, j, err)
+- f.Close()
+- continue testLoop
+- }
+- if *hdr != *header {
+- t.Errorf("test %d, entry %d: Incorrect header:\nhave %+v\nwant %+v",
+- i, j, *hdr, *header)
+- }
+- }
+- hdr, err := tr.Next()
+- if err == io.EOF {
+- continue testLoop
+- }
+- if hdr != nil || err != nil {
+- t.Errorf("test %d: Unexpected entry or error: hdr=%v err=%v", i, hdr, err)
+- }
+- f.Close()
+- }
+-}
+-
+-func TestPartialRead(t *testing.T) {
+- f, err := os.Open("testdata/gnu.tar")
+- if err != nil {
+- t.Fatalf("Unexpected error: %v", err)
+- }
+- defer f.Close()
+-
+- tr := NewReader(f)
+-
+- // Read the first four bytes; Next() should skip the last byte.
+- hdr, err := tr.Next()
+- if err != nil || hdr == nil {
+- t.Fatalf("Didn't get first file: %v", err)
+- }
+- buf := make([]byte, 4)
+- if _, err := io.ReadFull(tr, buf); err != nil {
+- t.Fatalf("Unexpected error: %v", err)
+- }
+- if expected := []byte("Kilt"); !bytes.Equal(buf, expected) {
+- t.Errorf("Contents = %v, want %v", buf, expected)
+- }
+-
+- // Second file
+- hdr, err = tr.Next()
+- if err != nil || hdr == nil {
+- t.Fatalf("Didn't get second file: %v", err)
+- }
+- buf = make([]byte, 6)
+- if _, err := io.ReadFull(tr, buf); err != nil {
+- t.Fatalf("Unexpected error: %v", err)
+- }
+- if expected := []byte("Google"); !bytes.Equal(buf, expected) {
+- t.Errorf("Contents = %v, want %v", buf, expected)
+- }
+-}
+-
+-func TestIncrementalRead(t *testing.T) {
+- test := gnuTarTest
+- f, err := os.Open(test.file)
+- if err != nil {
+- t.Fatalf("Unexpected error: %v", err)
+- }
+- defer f.Close()
+-
+- tr := NewReader(f)
+-
+- headers := test.headers
+- cksums := test.cksums
+- nread := 0
+-
+- // loop over all files
+- for ; ; nread++ {
+- hdr, err := tr.Next()
+- if hdr == nil || err == io.EOF {
+- break
+- }
+-
+- // check the header
+- if *hdr != *headers[nread] {
+- t.Errorf("Incorrect header:\nhave %+v\nwant %+v",
+- *hdr, headers[nread])
+- }
+-
+- // read file contents in little chunks EOF,
+- // checksumming all the way
+- h := md5.New()
+- rdbuf := make([]uint8, 8)
+- for {
+- nr, err := tr.Read(rdbuf)
+- if err == io.EOF {
+- break
+- }
+- if err != nil {
+- t.Errorf("Read: unexpected error %v\n", err)
+- break
+- }
+- h.Write(rdbuf[0:nr])
+- }
+- // verify checksum
+- have := fmt.Sprintf("%x", h.Sum(nil))
+- want := cksums[nread]
+- if want != have {
+- t.Errorf("Bad checksum on file %s:\nhave %+v\nwant %+v", hdr.Name, have, want)
+- }
+- }
+- if nread != len(headers) {
+- t.Errorf("Didn't process all files\nexpected: %d\nprocessed %d\n", len(headers), nread)
+- }
+-}
+-
+-func TestNonSeekable(t *testing.T) {
+- test := gnuTarTest
+- f, err := os.Open(test.file)
+- if err != nil {
+- t.Fatalf("Unexpected error: %v", err)
+- }
+- defer f.Close()
+-
+- type readerOnly struct {
+- io.Reader
+- }
+- tr := NewReader(readerOnly{f})
+- nread := 0
+-
+- for ; ; nread++ {
+- _, err := tr.Next()
+- if err == io.EOF {
+- break
+- }
+- if err != nil {
+- t.Fatalf("Unexpected error: %v", err)
+- }
+- }
+-
+- if nread != len(test.headers) {
+- t.Errorf("Didn't process all files\nexpected: %d\nprocessed %d\n", len(test.headers), nread)
+- }
+-}
+-
+-func TestParsePAXHeader(t *testing.T) {
+- paxTests := [][3]string{
+- {"a", "a=name", "10 a=name\n"}, // Test case involving multiple acceptable lengths
+- {"a", "a=name", "9 a=name\n"}, // Test case involving multiple acceptable length
+- {"mtime", "mtime=1350244992.023960108", "30 mtime=1350244992.023960108\n"}}
+- for _, test := range paxTests {
+- key, expected, raw := test[0], test[1], test[2]
+- reader := bytes.NewBuffer([]byte(raw))
+- headers, err := parsePAX(reader)
+- if err != nil {
+- t.Errorf("Couldn't parse correctly formatted headers: %v", err)
+- continue
+- }
+- if strings.EqualFold(headers[key], expected) {
+- t.Errorf("mtime header incorrectly parsed: got %s, wanted %s", headers[key], expected)
+- continue
+- }
+- trailer := make([]byte, 100)
+- n, err := reader.Read(trailer)
+- if err != io.EOF || n != 0 {
+- t.Error("Buffer wasn't consumed")
+- }
+- }
+- badHeader := bytes.NewBuffer([]byte("3 somelongkey="))
+- if _, err := parsePAX(badHeader); err != ErrHeader {
+- t.Fatal("Unexpected success when parsing bad header")
+- }
+-}
+-
+-func TestParsePAXTime(t *testing.T) {
+- // Some valid PAX time values
+- timestamps := map[string]time.Time{
+- "1350244992.023960108": time.Unix(1350244992, 23960108), // The commoon case
+- "1350244992.02396010": time.Unix(1350244992, 23960100), // Lower precision value
+- "1350244992.0239601089": time.Unix(1350244992, 23960108), // Higher precision value
+- "1350244992": time.Unix(1350244992, 0), // Low precision value
+- }
+- for input, expected := range timestamps {
+- ts, err := parsePAXTime(input)
+- if err != nil {
+- t.Fatal(err)
+- }
+- if !ts.Equal(expected) {
+- t.Fatalf("Time parsing failure %s %s", ts, expected)
+- }
+- }
+-}
+-
+-func TestMergePAX(t *testing.T) {
+- hdr := new(Header)
+- // Test a string, integer, and time based value.
+- headers := map[string]string{
+- "path": "a/b/c",
+- "uid": "1000",
+- "mtime": "1350244992.023960108",
+- }
+- err := mergePAX(hdr, headers)
+- if err != nil {
+- t.Fatal(err)
+- }
+- want := &Header{
+- Name: "a/b/c",
+- Uid: 1000,
+- ModTime: time.Unix(1350244992, 23960108),
+- }
+- if !reflect.DeepEqual(hdr, want) {
+- t.Errorf("incorrect merge: got %+v, want %+v", hdr, want)
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/README docker-devmapper/vendor/src/github.com/dotcloud/tar/README
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/README 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/README 1969-12-31 18:00:00.000000000 -0600
+@@ -1,3 +0,0 @@
+-This is a fork of the upstream Go [archive/tar](http://golang.org/pkg/archive/tar/) package to add PAX header support.
+-
+-You can monitor the upstream pull request [here](https://codereview.appspot.com/12561043/).
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/stat_atimespec.go docker-devmapper/vendor/src/github.com/dotcloud/tar/stat_atimespec.go
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/stat_atimespec.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/stat_atimespec.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,20 +0,0 @@
+-// Copyright 2012 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 darwin freebsd netbsd
+-
+-package tar
+-
+-import (
+- "syscall"
+- "time"
+-)
+-
+-func statAtime(st *syscall.Stat_t) time.Time {
+- return time.Unix(st.Atimespec.Unix())
+-}
+-
+-func statCtime(st *syscall.Stat_t) time.Time {
+- return time.Unix(st.Ctimespec.Unix())
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/stat_atim.go docker-devmapper/vendor/src/github.com/dotcloud/tar/stat_atim.go
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/stat_atim.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/stat_atim.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,20 +0,0 @@
+-// Copyright 2012 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 linux openbsd
+-
+-package tar
+-
+-import (
+- "syscall"
+- "time"
+-)
+-
+-func statAtime(st *syscall.Stat_t) time.Time {
+- return time.Unix(st.Atim.Unix())
+-}
+-
+-func statCtime(st *syscall.Stat_t) time.Time {
+- return time.Unix(st.Ctim.Unix())
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/stat_unix.go docker-devmapper/vendor/src/github.com/dotcloud/tar/stat_unix.go
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/stat_unix.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/stat_unix.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,32 +0,0 @@
+-// Copyright 2012 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 linux darwin freebsd openbsd netbsd
+-
+-package tar
+-
+-import (
+- "os"
+- "syscall"
+-)
+-
+-func init() {
+- sysStat = statUnix
+-}
+-
+-func statUnix(fi os.FileInfo, h *Header) error {
+- sys, ok := fi.Sys().(*syscall.Stat_t)
+- if !ok {
+- return nil
+- }
+- h.Uid = int(sys.Uid)
+- h.Gid = int(sys.Gid)
+- // TODO(bradfitz): populate username & group. os/user
+- // doesn't cache LookupId lookups, and lacks group
+- // lookup functions.
+- h.AccessTime = statAtime(sys)
+- h.ChangeTime = statCtime(sys)
+- // TODO(bradfitz): major/minor device numbers?
+- return nil
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/tar_test.go docker-devmapper/vendor/src/github.com/dotcloud/tar/tar_test.go
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/tar_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/tar_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,271 +0,0 @@
+-// Copyright 2012 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 tar
+-
+-import (
+- "bytes"
+- "io/ioutil"
+- "os"
+- "reflect"
+- "testing"
+- "time"
+-)
+-
+-func TestFileInfoHeader(t *testing.T) {
+- fi, err := os.Stat("testdata/small.txt")
+- if err != nil {
+- t.Fatal(err)
+- }
+- h, err := FileInfoHeader(fi, "")
+- if err != nil {
+- t.Fatalf("FileInfoHeader: %v", err)
+- }
+- if g, e := h.Name, "small.txt"; g != e {
+- t.Errorf("Name = %q; want %q", g, e)
+- }
+- if g, e := h.Mode, int64(fi.Mode().Perm())|c_ISREG; g != e {
+- t.Errorf("Mode = %#o; want %#o", g, e)
+- }
+- if g, e := h.Size, int64(5); g != e {
+- t.Errorf("Size = %v; want %v", g, e)
+- }
+- if g, e := h.ModTime, fi.ModTime(); !g.Equal(e) {
+- t.Errorf("ModTime = %v; want %v", g, e)
+- }
+-}
+-
+-func TestFileInfoHeaderDir(t *testing.T) {
+- fi, err := os.Stat("testdata")
+- if err != nil {
+- t.Fatal(err)
+- }
+- h, err := FileInfoHeader(fi, "")
+- if err != nil {
+- t.Fatalf("FileInfoHeader: %v", err)
+- }
+- if g, e := h.Name, "testdata/"; g != e {
+- t.Errorf("Name = %q; want %q", g, e)
+- }
+- // Ignoring c_ISGID for golang.org/issue/4867
+- if g, e := h.Mode&^c_ISGID, int64(fi.Mode().Perm())|c_ISDIR; g != e {
+- t.Errorf("Mode = %#o; want %#o", g, e)
+- }
+- if g, e := h.Size, int64(0); g != e {
+- t.Errorf("Size = %v; want %v", g, e)
+- }
+- if g, e := h.ModTime, fi.ModTime(); !g.Equal(e) {
+- t.Errorf("ModTime = %v; want %v", g, e)
+- }
+-}
+-
+-func TestFileInfoHeaderSymlink(t *testing.T) {
+- h, err := FileInfoHeader(symlink{}, "some-target")
+- if err != nil {
+- t.Fatal(err)
+- }
+- if g, e := h.Name, "some-symlink"; g != e {
+- t.Errorf("Name = %q; want %q", g, e)
+- }
+- if g, e := h.Linkname, "some-target"; g != e {
+- t.Errorf("Linkname = %q; want %q", g, e)
+- }
+-}
+-
+-type symlink struct{}
+-
+-func (symlink) Name() string { return "some-symlink" }
+-func (symlink) Size() int64 { return 0 }
+-func (symlink) Mode() os.FileMode { return os.ModeSymlink }
+-func (symlink) ModTime() time.Time { return time.Time{} }
+-func (symlink) IsDir() bool { return false }
+-func (symlink) Sys() interface{} { return nil }
+-
+-func TestRoundTrip(t *testing.T) {
+- data := []byte("some file contents")
+-
+- var b bytes.Buffer
+- tw := NewWriter(&b)
+- hdr := &Header{
+- Name: "file.txt",
+- Uid: 1 << 21, // too big for 8 octal digits
+- Size: int64(len(data)),
+- ModTime: time.Now(),
+- }
+- // tar only supports second precision.
+- hdr.ModTime = hdr.ModTime.Add(-time.Duration(hdr.ModTime.Nanosecond()) * time.Nanosecond)
+- if err := tw.WriteHeader(hdr); err != nil {
+- t.Fatalf("tw.WriteHeader: %v", err)
+- }
+- if _, err := tw.Write(data); err != nil {
+- t.Fatalf("tw.Write: %v", err)
+- }
+- if err := tw.Close(); err != nil {
+- t.Fatalf("tw.Close: %v", err)
+- }
+-
+- // Read it back.
+- tr := NewReader(&b)
+- rHdr, err := tr.Next()
+- if err != nil {
+- t.Fatalf("tr.Next: %v", err)
+- }
+- if !reflect.DeepEqual(rHdr, hdr) {
+- t.Errorf("Header mismatch.\n got %+v\nwant %+v", rHdr, hdr)
+- }
+- rData, err := ioutil.ReadAll(tr)
+- if err != nil {
+- t.Fatalf("Read: %v", err)
+- }
+- if !bytes.Equal(rData, data) {
+- t.Errorf("Data mismatch.\n got %q\nwant %q", rData, data)
+- }
+-}
+-
+-type headerRoundTripTest struct {
+- h *Header
+- fm os.FileMode
+-}
+-
+-func TestHeaderRoundTrip(t *testing.T) {
+- golden := []headerRoundTripTest{
+- // regular file.
+- {
+- h: &Header{
+- Name: "test.txt",
+- Mode: 0644 | c_ISREG,
+- Size: 12,
+- ModTime: time.Unix(1360600916, 0),
+- Typeflag: TypeReg,
+- },
+- fm: 0644,
+- },
+- // hard link.
+- {
+- h: &Header{
+- Name: "hard.txt",
+- Mode: 0644 | c_ISLNK,
+- Size: 0,
+- ModTime: time.Unix(1360600916, 0),
+- Typeflag: TypeLink,
+- },
+- fm: 0644 | os.ModeSymlink,
+- },
+- // symbolic link.
+- {
+- h: &Header{
+- Name: "link.txt",
+- Mode: 0777 | c_ISLNK,
+- Size: 0,
+- ModTime: time.Unix(1360600852, 0),
+- Typeflag: TypeSymlink,
+- },
+- fm: 0777 | os.ModeSymlink,
+- },
+- // character device node.
+- {
+- h: &Header{
+- Name: "dev/null",
+- Mode: 0666 | c_ISCHR,
+- Size: 0,
+- ModTime: time.Unix(1360578951, 0),
+- Typeflag: TypeChar,
+- },
+- fm: 0666 | os.ModeDevice | os.ModeCharDevice,
+- },
+- // block device node.
+- {
+- h: &Header{
+- Name: "dev/sda",
+- Mode: 0660 | c_ISBLK,
+- Size: 0,
+- ModTime: time.Unix(1360578954, 0),
+- Typeflag: TypeBlock,
+- },
+- fm: 0660 | os.ModeDevice,
+- },
+- // directory.
+- {
+- h: &Header{
+- Name: "dir/",
+- Mode: 0755 | c_ISDIR,
+- Size: 0,
+- ModTime: time.Unix(1360601116, 0),
+- Typeflag: TypeDir,
+- },
+- fm: 0755 | os.ModeDir,
+- },
+- // fifo node.
+- {
+- h: &Header{
+- Name: "dev/initctl",
+- Mode: 0600 | c_ISFIFO,
+- Size: 0,
+- ModTime: time.Unix(1360578949, 0),
+- Typeflag: TypeFifo,
+- },
+- fm: 0600 | os.ModeNamedPipe,
+- },
+- // setuid.
+- {
+- h: &Header{
+- Name: "bin/su",
+- Mode: 0755 | c_ISREG | c_ISUID,
+- Size: 23232,
+- ModTime: time.Unix(1355405093, 0),
+- Typeflag: TypeReg,
+- },
+- fm: 0755 | os.ModeSetuid,
+- },
+- // setguid.
+- {
+- h: &Header{
+- Name: "group.txt",
+- Mode: 0750 | c_ISREG | c_ISGID,
+- Size: 0,
+- ModTime: time.Unix(1360602346, 0),
+- Typeflag: TypeReg,
+- },
+- fm: 0750 | os.ModeSetgid,
+- },
+- // sticky.
+- {
+- h: &Header{
+- Name: "sticky.txt",
+- Mode: 0600 | c_ISREG | c_ISVTX,
+- Size: 7,
+- ModTime: time.Unix(1360602540, 0),
+- Typeflag: TypeReg,
+- },
+- fm: 0600 | os.ModeSticky,
+- },
+- }
+-
+- for i, g := range golden {
+- fi := g.h.FileInfo()
+- h2, err := FileInfoHeader(fi, "")
+- if err != nil {
+- t.Error(err)
+- continue
+- }
+- if got, want := h2.Name, g.h.Name; got != want {
+- t.Errorf("i=%d: Name: got %v, want %v", i, got, want)
+- }
+- if got, want := h2.Size, g.h.Size; got != want {
+- t.Errorf("i=%d: Size: got %v, want %v", i, got, want)
+- }
+- if got, want := h2.Mode, g.h.Mode; got != want {
+- t.Errorf("i=%d: Mode: got %o, want %o", i, got, want)
+- }
+- if got, want := fi.Mode(), g.fm; got != want {
+- t.Errorf("i=%d: fi.Mode: got %o, want %o", i, got, want)
+- }
+- if got, want := h2.ModTime, g.h.ModTime; got != want {
+- t.Errorf("i=%d: ModTime: got %v, want %v", i, got, want)
+- }
+- if sysh, ok := fi.Sys().(*Header); !ok || sysh != g.h {
+- t.Errorf("i=%d: Sys didn't return original *Header", i)
+- }
+- }
+-}
+Binary files docker-0.6.2/vendor/src/github.com/dotcloud/tar/testdata/gnu.tar and docker-devmapper/vendor/src/github.com/dotcloud/tar/testdata/gnu.tar differ
+Binary files docker-0.6.2/vendor/src/github.com/dotcloud/tar/testdata/pax.tar and docker-devmapper/vendor/src/github.com/dotcloud/tar/testdata/pax.tar differ
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/testdata/small2.txt docker-devmapper/vendor/src/github.com/dotcloud/tar/testdata/small2.txt
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/testdata/small2.txt 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/testdata/small2.txt 1969-12-31 18:00:00.000000000 -0600
+@@ -1 +0,0 @@
+-Google.com
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/testdata/small.txt docker-devmapper/vendor/src/github.com/dotcloud/tar/testdata/small.txt
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/testdata/small.txt 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/testdata/small.txt 1969-12-31 18:00:00.000000000 -0600
+@@ -1 +0,0 @@
+-Kilts
+\ No newline at end of file
+Binary files docker-0.6.2/vendor/src/github.com/dotcloud/tar/testdata/star.tar and docker-devmapper/vendor/src/github.com/dotcloud/tar/testdata/star.tar differ
+Binary files docker-0.6.2/vendor/src/github.com/dotcloud/tar/testdata/ustar.tar and docker-devmapper/vendor/src/github.com/dotcloud/tar/testdata/ustar.tar differ
+Binary files docker-0.6.2/vendor/src/github.com/dotcloud/tar/testdata/v7.tar and docker-devmapper/vendor/src/github.com/dotcloud/tar/testdata/v7.tar differ
+Binary files docker-0.6.2/vendor/src/github.com/dotcloud/tar/testdata/writer-big.tar and docker-devmapper/vendor/src/github.com/dotcloud/tar/testdata/writer-big.tar differ
+Binary files docker-0.6.2/vendor/src/github.com/dotcloud/tar/testdata/writer.tar and docker-devmapper/vendor/src/github.com/dotcloud/tar/testdata/writer.tar differ
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/writer.go docker-devmapper/vendor/src/github.com/dotcloud/tar/writer.go
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/writer.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/writer.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,390 +0,0 @@
+-// Copyright 2009 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 tar
+-
+-// TODO(dsymonds):
+-// - catch more errors (no first header, etc.)
+-
+-import (
+- "bytes"
+- "errors"
+- "fmt"
+- "io"
+- "os"
+- "path"
+- "strconv"
+- "strings"
+- "time"
+-)
+-
+-var (
+- ErrWriteTooLong = errors.New("archive/tar: write too long")
+- ErrFieldTooLong = errors.New("archive/tar: header field too long")
+- ErrWriteAfterClose = errors.New("archive/tar: write after close")
+- errNameTooLong = errors.New("archive/tar: name too long")
+- errFieldTooLongNoAscii = errors.New("archive/tar: header field too long or contains invalid values")
+-)
+-
+-// A Writer provides sequential writing of a tar archive in POSIX.1 format.
+-// A tar archive consists of a sequence of files.
+-// Call WriteHeader to begin a new file, and then call Write to supply that file's data,
+-// writing at most hdr.Size bytes in total.
+-type Writer struct {
+- w io.Writer
+- err error
+- nb int64 // number of unwritten bytes for current file entry
+- pad int64 // amount of padding to write after current file entry
+- closed bool
+- usedBinary bool // whether the binary numeric field extension was used
+- preferPax bool // use pax header instead of binary numeric header
+-}
+-
+-// NewWriter creates a new Writer writing to w.
+-func NewWriter(w io.Writer) *Writer { return &Writer{w: w} }
+-
+-// Flush finishes writing the current file (optional).
+-func (tw *Writer) Flush() error {
+- if tw.nb > 0 {
+- tw.err = fmt.Errorf("archive/tar: missed writing %d bytes", tw.nb)
+- return tw.err
+- }
+-
+- n := tw.nb + tw.pad
+- for n > 0 && tw.err == nil {
+- nr := n
+- if nr > blockSize {
+- nr = blockSize
+- }
+- var nw int
+- nw, tw.err = tw.w.Write(zeroBlock[0:nr])
+- n -= int64(nw)
+- }
+- tw.nb = 0
+- tw.pad = 0
+- return tw.err
+-}
+-
+-// Write s into b, terminating it with a NUL if there is room.
+-func (tw *Writer) cString(b []byte, s string) {
+- if len(s) > len(b) {
+- if tw.err == nil {
+- tw.err = ErrFieldTooLong
+- }
+- return
+- }
+- copy(b, s)
+- if len(s) < len(b) {
+- b[len(s)] = 0
+- }
+-}
+-
+-// Write s into b, terminating it with a NUL if there is room. If the value is too long for the field add a paxheader record instead
+-func (tw *Writer) fillHeaderField(b []byte, paxHeader map[string]string, paxKeyword string, s string) {
+- needsPaxHeader := len(s) > len(b) || !isASCII7Bit(s)
+- if needsPaxHeader {
+- paxHeader[paxKeyword] = s
+- return
+- }
+- copy(b, stripTo7BitsAndShorten(s, len(b)))
+- if len(s) < len(b) {
+- b[len(s)] = 0
+- }
+-}
+-
+-// Encode x as an octal ASCII string and write it into b with leading zeros.
+-func (tw *Writer) octal(b []byte, x int64) {
+- s := strconv.FormatInt(x, 8)
+- // leading zeros, but leave room for a NUL.
+- for len(s)+1 < len(b) {
+- s = "0" + s
+- }
+- tw.cString(b, s)
+-}
+-
+-// Write x into b, either as octal or as binary (GNUtar/star extension).
+-func (tw *Writer) numeric(b []byte, x int64) {
+- // Try octal first.
+- s := strconv.FormatInt(x, 8)
+- if len(s) < len(b) {
+- tw.octal(b, x)
+- return
+- }
+- // Too big: use binary (big-endian).
+- tw.usedBinary = true
+- for i := len(b) - 1; x > 0 && i >= 0; i-- {
+- b[i] = byte(x)
+- x >>= 8
+- }
+- b[0] |= 0x80 // highest bit indicates binary format
+-}
+-
+-// Write x into b, if it is smaller than 2097151. If the value is too long for the field add a paxheader record instead
+-func (tw *Writer) fillNumericHeaderField(b []byte, paxHeader map[string]string, paxKeyword string, x int64) {
+- if tw.preferPax && x > 2097151 {
+- s := strconv.FormatInt(x, 10)
+- paxHeader[paxKeyword] = s
+- tw.numeric(b, 0)
+- } else {
+- tw.numeric(b, x)
+- }
+-}
+-
+-// Write x into b, if it is smaller than 2097151. If the value is too long for the field add a paxheader record instead
+-func (tw *Writer) fillNumericLongHeaderField(b []byte, paxHeader map[string]string, paxKeyword string, x int64) {
+- if tw.preferPax && x > 8589934591 {
+- s := strconv.FormatInt(x, 10)
+- paxHeader[paxKeyword] = s
+- tw.numeric(b, 0)
+- } else {
+- tw.numeric(b, x)
+- }
+-}
+-
+-var (
+- minTime = time.Unix(0, 0)
+- // There is room for 11 octal digits (33 bits) of mtime.
+- maxTime = minTime.Add((1<<33 - 1) * time.Second)
+-)
+-
+-// WriteHeader writes hdr and prepares to accept the file's contents.
+-// WriteHeader calls Flush if it is not the first header.
+-// Calling after a Close will return ErrWriteAfterClose.
+-func (tw *Writer) WriteHeader(hdr *Header) error {
+- return tw.writeHeader(hdr, true)
+-}
+-
+-// WriteHeader writes hdr and prepares to accept the file's contents.
+-// WriteHeader calls Flush if it is not the first header.
+-// Calling after a Close will return ErrWriteAfterClose.
+-// As this method is called internally by writePax header it allows to
+-// suppress writing the pax header.
+-func (tw *Writer) writeHeader(hdr *Header, allowPax bool) error {
+- if tw.closed {
+- return ErrWriteAfterClose
+- }
+- if tw.err == nil {
+- tw.Flush()
+- }
+- if tw.err != nil {
+- return tw.err
+- }
+-
+- // a map to hold pax header records, if any are needed
+- paxHeaderRecords := make(map[string]string)
+-
+- // TODO(shanemhansen): we might want to use PAX headers for
+- // subsecond time resolution, but for now let's just capture
+- // too long fields or non ascii characters
+-
+- header := make([]byte, blockSize)
+- s := slicer(header)
+-
+- // keep a reference to the filename to allow to overwrite it later if we detect that we can use ustar longnames instead of pax
+- pathHeaderBytes := s.next(fileNameSize)
+-
+- tw.fillHeaderField(pathHeaderBytes, paxHeaderRecords, PAX_PATH, hdr.Name)
+-
+- // Handle out of range ModTime carefully.
+- var modTime int64
+- if !hdr.ModTime.Before(minTime) && !hdr.ModTime.After(maxTime) {
+- modTime = hdr.ModTime.Unix()
+- }
+-
+- tw.octal(s.next(8), hdr.Mode) // 100:108
+- tw.fillNumericHeaderField(s.next(8), paxHeaderRecords, PAX_UID, int64(hdr.Uid)) // 108:116
+- tw.fillNumericHeaderField(s.next(8), paxHeaderRecords, PAX_GID, int64(hdr.Gid)) // 116:124
+- tw.fillNumericLongHeaderField(s.next(12), paxHeaderRecords, PAX_SIZE, hdr.Size) // 124:136
+- tw.numeric(s.next(12), modTime) // 136:148 --- consider using pax for finer granularity
+- s.next(8) // chksum (148:156)
+- s.next(1)[0] = hdr.Typeflag // 156:157
+-
+- tw.fillHeaderField(s.next(100), paxHeaderRecords, PAX_LINKPATH, hdr.Linkname)
+-
+- copy(s.next(8), []byte("ustar\x0000")) // 257:265
+- tw.fillHeaderField(s.next(32), paxHeaderRecords, PAX_UNAME, hdr.Uname) // 265:297
+- tw.fillHeaderField(s.next(32), paxHeaderRecords, PAX_GNAME, hdr.Gname) // 297:329
+- tw.numeric(s.next(8), hdr.Devmajor) // 329:337
+- tw.numeric(s.next(8), hdr.Devminor) // 337:345
+-
+- // keep a reference to the prefix to allow to overwrite it later if we detect that we can use ustar longnames instead of pax
+- prefixHeaderBytes := s.next(155)
+- tw.cString(prefixHeaderBytes, "") // 345:500 prefix
+-
+- // Use the GNU magic instead of POSIX magic if we used any GNU extensions.
+- if tw.usedBinary {
+- copy(header[257:265], []byte("ustar \x00"))
+- }
+-
+- _, paxPathUsed := paxHeaderRecords[PAX_PATH]
+- // try to use a ustar header when only the name is too long
+- if !tw.preferPax && len(paxHeaderRecords) == 1 && paxPathUsed {
+- suffix := hdr.Name
+- prefix := ""
+- if len(hdr.Name) > fileNameSize && isASCII7Bit(hdr.Name) {
+- var err error
+- prefix, suffix, err = tw.splitUSTARLongName(hdr.Name)
+- if err == nil {
+- // ok we can use a ustar long name instead of pax, now correct the fields
+-
+- // remove the path field from the pax header. this will suppress the pax header
+- delete(paxHeaderRecords, PAX_PATH)
+-
+- // update the path fields
+- tw.cString(pathHeaderBytes, suffix)
+- tw.cString(prefixHeaderBytes, prefix)
+-
+- // Use the ustar magic if we used ustar long names.
+- if len(prefix) > 0 {
+- copy(header[257:265], []byte("ustar\000"))
+- }
+- }
+- }
+- }
+-
+- // The chksum field is terminated by a NUL and a space.
+- // This is different from the other octal fields.
+- chksum, _ := checksum(header)
+- tw.octal(header[148:155], chksum)
+- header[155] = ' '
+-
+- if tw.err != nil {
+- // problem with header; probably integer too big for a field.
+- return tw.err
+- }
+-
+- if len(paxHeaderRecords) > 0 {
+- if allowPax {
+- if err := tw.writePAXHeader(hdr, paxHeaderRecords); err != nil {
+- return err
+- }
+- } else {
+- return errFieldTooLongNoAscii
+- }
+- }
+- tw.nb = int64(hdr.Size)
+- tw.pad = -tw.nb & (blockSize - 1) // blockSize is a power of two
+-
+- _, tw.err = tw.w.Write(header)
+- return tw.err
+-}
+-
+-// writeUSTARLongName splits a USTAR long name hdr.Name.
+-// name must be < 256 characters. errNameTooLong is returned
+-// if hdr.Name can't be split. The splitting heuristic
+-// is compatible with gnu tar.
+-func (tw *Writer) splitUSTARLongName(name string) (prefix, suffix string, err error) {
+- length := len(name)
+- if length > fileNamePrefixSize+1 {
+- length = fileNamePrefixSize + 1
+- } else if name[length-1] == '/' {
+- length--
+- }
+- i := strings.LastIndex(name[:length], "/")
+- nlen := length - i - 1
+- if i <= 0 || nlen > fileNameSize || nlen == 0 {
+- err = errNameTooLong
+- return
+- }
+- prefix, suffix = name[:i], name[i+1:]
+- return
+-}
+-
+-// writePaxHeader writes an extended pax header to the
+-// archive.
+-func (tw *Writer) writePAXHeader(hdr *Header, paxHeaderRecords map[string]string) error {
+- // Prepare extended header
+- ext := new(Header)
+- ext.Typeflag = TypeXHeader
+- // Setting ModTime is required for reader parsing to
+- // succeed, and seems harmless enough.
+- ext.ModTime = hdr.ModTime
+- // The spec asks that we namespace our pseudo files
+- // with the current pid.
+- pid := os.Getpid()
+- dir, file := path.Split(hdr.Name)
+- fullName := path.Join(dir,
+- fmt.Sprintf("PaxHeaders.%d", pid), file)
+-
+- ext.Name = stripTo7BitsAndShorten(fullName, 100)
+- // Construct the body
+- var buf bytes.Buffer
+-
+- for k, v := range paxHeaderRecords {
+- fmt.Fprint(&buf, paxHeader(k, v))
+- }
+-
+- ext.Size = int64(len(buf.Bytes()))
+- if err := tw.writeHeader(ext, false); err != nil {
+- return err
+- }
+- if _, err := tw.Write(buf.Bytes()); err != nil {
+- return err
+- }
+- if err := tw.Flush(); err != nil {
+- return err
+- }
+- return nil
+-}
+-
+-// paxHeader formats a single pax record, prefixing it with the appropriate length
+-func paxHeader(keyword string, value string) string {
+-
+- const padding = 3 // Extra padding for space and newline
+- size := len(keyword) + len(value) + padding
+- size += len(strconv.Itoa(size))
+- record := fmt.Sprintf("%d %s=%s\n", size, keyword, value)
+- if len(record) != size {
+- // Final adjustment if adding size increased
+- // the number of digits in size
+- size = len(record)
+- record = fmt.Sprintf("%d %s=%s\n", size, keyword, value)
+- }
+- return record
+-}
+-
+-// Write writes to the current entry in the tar archive.
+-// Write returns the error ErrWriteTooLong if more than
+-// hdr.Size bytes are written after WriteHeader.
+-func (tw *Writer) Write(b []byte) (n int, err error) {
+- if tw.closed {
+- err = ErrWriteTooLong
+- return
+- }
+- overwrite := false
+- if int64(len(b)) > tw.nb {
+- b = b[0:tw.nb]
+- overwrite = true
+- }
+- n, err = tw.w.Write(b)
+- tw.nb -= int64(n)
+- if err == nil && overwrite {
+- err = ErrWriteTooLong
+- return
+- }
+- tw.err = err
+- return
+-}
+-
+-// Close closes the tar archive, flushing any unwritten
+-// data to the underlying writer.
+-func (tw *Writer) Close() error {
+- if tw.err != nil || tw.closed {
+- return tw.err
+- }
+- tw.Flush()
+- tw.closed = true
+- if tw.err != nil {
+- return tw.err
+- }
+-
+- // trailer: two zero blocks
+- for i := 0; i < 2; i++ {
+- _, tw.err = tw.w.Write(zeroBlock)
+- if tw.err != nil {
+- break
+- }
+- }
+- return tw.err
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/dotcloud/tar/writer_test.go docker-devmapper/vendor/src/github.com/dotcloud/tar/writer_test.go
+--- docker-0.6.2/vendor/src/github.com/dotcloud/tar/writer_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/dotcloud/tar/writer_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,357 +0,0 @@
+-// Copyright 2009 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 tar
+-
+-import (
+- "bytes"
+- "fmt"
+- "io"
+- "io/ioutil"
+- "os"
+- "strings"
+- "testing"
+- "testing/iotest"
+- "time"
+-)
+-
+-type writerTestEntry struct {
+- header *Header
+- contents string
+-}
+-
+-type writerTest struct {
+- file string // filename of expected output
+- entries []*writerTestEntry
+-}
+-
+-var writerTests = []*writerTest{
+- // The writer test file was produced with this command:
+- // tar (GNU tar) 1.26
+- // ln -s small.txt link.txt
+- // tar -b 1 --format=ustar -c -f writer.tar small.txt small2.txt link.txt
+- {
+- file: "testdata/writer.tar",
+- entries: []*writerTestEntry{
+- {
+- header: &Header{
+- Name: "small.txt",
+- Mode: 0640,
+- Uid: 73025,
+- Gid: 5000,
+- Size: 5,
+- ModTime: time.Unix(1246508266, 0),
+- Typeflag: '0',
+- Uname: "dsymonds",
+- Gname: "eng",
+- },
+- contents: "Kilts",
+- },
+- {
+- header: &Header{
+- Name: "small2.txt",
+- Mode: 0640,
+- Uid: 73025,
+- Gid: 5000,
+- Size: 11,
+- ModTime: time.Unix(1245217492, 0),
+- Typeflag: '0',
+- Uname: "dsymonds",
+- Gname: "eng",
+- },
+- contents: "Google.com\n",
+- },
+- {
+- header: &Header{
+- Name: "link.txt",
+- Mode: 0777,
+- Uid: 1000,
+- Gid: 1000,
+- Size: 0,
+- ModTime: time.Unix(1314603082, 0),
+- Typeflag: '2',
+- Linkname: "small.txt",
+- Uname: "strings",
+- Gname: "strings",
+- },
+- // no contents
+- },
+- },
+- },
+- // The truncated test file was produced using these commands:
+- // dd if=/dev/zero bs=1048576 count=16384 > /tmp/16gig.txt
+- // tar -b 1 -c -f- /tmp/16gig.txt | dd bs=512 count=8 > writer-big.tar
+- {
+- file: "testdata/writer-big.tar",
+- entries: []*writerTestEntry{
+- {
+- header: &Header{
+- Name: "tmp/16gig.txt",
+- Mode: 0640,
+- Uid: 73025,
+- Gid: 5000,
+- Size: 16 << 30,
+- ModTime: time.Unix(1254699560, 0),
+- Typeflag: '0',
+- Uname: "dsymonds",
+- Gname: "eng",
+- },
+- // fake contents
+- contents: strings.Repeat("\x00", 4<<10),
+- },
+- },
+- },
+- // This file was produced using gnu tar 1.17
+- // gnutar -b 4 --format=ustar (longname/)*15 + file.txt
+- {
+- file: "testdata/ustar.tar",
+- entries: []*writerTestEntry{
+- {
+- header: &Header{
+- Name: strings.Repeat("longname/", 15) + "file.txt",
+- Mode: 0644,
+- Uid: 0765,
+- Gid: 024,
+- Size: 06,
+- ModTime: time.Unix(1360135598, 0),
+- Typeflag: '0',
+- Uname: "shane",
+- Gname: "staff",
+- },
+- contents: "hello\n",
+- },
+- },
+- },
+-}
+-
+-// Render byte array in a two-character hexadecimal string, spaced for easy visual inspection.
+-func bytestr(offset int, b []byte) string {
+- const rowLen = 32
+- s := fmt.Sprintf("%04x ", offset)
+- for _, ch := range b {
+- switch {
+- case '0' <= ch && ch <= '9', 'A' <= ch && ch <= 'Z', 'a' <= ch && ch <= 'z':
+- s += fmt.Sprintf(" %c", ch)
+- default:
+- s += fmt.Sprintf(" %02x", ch)
+- }
+- }
+- return s
+-}
+-
+-// Render a pseudo-diff between two blocks of bytes.
+-func bytediff(a []byte, b []byte) string {
+- const rowLen = 32
+- s := fmt.Sprintf("(%d bytes vs. %d bytes)\n", len(a), len(b))
+- for offset := 0; len(a)+len(b) > 0; offset += rowLen {
+- na, nb := rowLen, rowLen
+- if na > len(a) {
+- na = len(a)
+- }
+- if nb > len(b) {
+- nb = len(b)
+- }
+- sa := bytestr(offset, a[0:na])
+- sb := bytestr(offset, b[0:nb])
+- if sa != sb {
+- s += fmt.Sprintf("-%v\n+%v\n", sa, sb)
+- }
+- a = a[na:]
+- b = b[nb:]
+- }
+- return s
+-}
+-
+-func TestWriter(t *testing.T) {
+-testLoop:
+- for i, test := range writerTests {
+- expected, err := ioutil.ReadFile(test.file)
+- if err != nil {
+- t.Errorf("test %d: Unexpected error: %v", i, err)
+- continue
+- }
+-
+- buf := new(bytes.Buffer)
+- tw := NewWriter(iotest.TruncateWriter(buf, 4<<10)) // only catch the first 4 KB
+- big := false
+- for j, entry := range test.entries {
+- big = big || entry.header.Size > 1<<10
+- if err := tw.WriteHeader(entry.header); err != nil {
+- t.Errorf("test %d, entry %d: Failed writing header: %v", i, j, err)
+- continue testLoop
+- }
+- if _, err := io.WriteString(tw, entry.contents); err != nil {
+- t.Errorf("test %d, entry %d: Failed writing contents: %v", i, j, err)
+- continue testLoop
+- }
+- }
+- // Only interested in Close failures for the small tests.
+- if err := tw.Close(); err != nil && !big {
+- t.Errorf("test %d: Failed closing archive: %v", i, err)
+- continue testLoop
+- }
+-
+- actual := buf.Bytes()
+- if !bytes.Equal(expected, actual) {
+- t.Errorf("test %d: Incorrect result: (-=expected, +=actual)\n%v",
+- i, bytediff(expected, actual))
+- }
+- if testing.Short() { // The second test is expensive.
+- break
+- }
+- }
+-}
+-
+-func TestPax(t *testing.T) {
+- // Create an archive with a large name
+- fileinfo, err := os.Stat("testdata/small.txt")
+- if err != nil {
+- t.Fatal(err)
+- }
+- hdr, err := FileInfoHeader(fileinfo, "")
+- if err != nil {
+- t.Fatalf("os.Stat: %v", err)
+- }
+- // Force a PAX long name to be written
+- longName := strings.Repeat("ab", 100)
+- contents := strings.Repeat(" ", int(hdr.Size))
+- hdr.Name = longName
+- var buf bytes.Buffer
+- writer := NewWriter(&buf)
+- if err := writer.WriteHeader(hdr); err != nil {
+- t.Fatal(err)
+- }
+- if _, err = writer.Write([]byte(contents)); err != nil {
+- t.Fatal(err)
+- }
+- if err := writer.Close(); err != nil {
+- t.Fatal(err)
+- }
+- // Simple test to make sure PAX extensions are in effect
+- if !bytes.Contains(buf.Bytes(), []byte("PaxHeaders.")) {
+- t.Fatal("Expected at least one PAX header to be written.")
+- }
+- // Test that we can get a long name back out of the archive.
+- reader := NewReader(&buf)
+- hdr, err = reader.Next()
+- if err != nil {
+- t.Fatal(err)
+- }
+- if hdr.Name != longName {
+- t.Fatal("Couldn't recover long file name")
+- }
+-}
+-
+-func TestPaxSymlink(t *testing.T) {
+- // Create an archive with a large linkname
+- fileinfo, err := os.Stat("testdata/small.txt")
+- if err != nil {
+- t.Fatal(err)
+- }
+- hdr, err := FileInfoHeader(fileinfo, "")
+- hdr.Typeflag = TypeSymlink
+- if err != nil {
+- t.Fatalf("os.Stat:1 %v", err)
+- }
+- // Force a PAX long linkname to be written
+- longLinkname := strings.Repeat("1234567890/1234567890", 10)
+- hdr.Linkname = longLinkname
+-
+- hdr.Size = 0
+- var buf bytes.Buffer
+- writer := NewWriter(&buf)
+- if err := writer.WriteHeader(hdr); err != nil {
+- t.Fatal(err)
+- }
+- if err := writer.Close(); err != nil {
+- t.Fatal(err)
+- }
+- // Simple test to make sure PAX extensions are in effect
+- if !bytes.Contains(buf.Bytes(), []byte("PaxHeaders.")) {
+- t.Fatal("Expected at least one PAX header to be written.")
+- }
+- // Test that we can get a long name back out of the archive.
+- reader := NewReader(&buf)
+- hdr, err = reader.Next()
+- if err != nil {
+- t.Fatal(err)
+- }
+- if hdr.Linkname != longLinkname {
+- t.Fatal("Couldn't recover long link name")
+- }
+-}
+-
+-func TestPaxNonAscii(t *testing.T) {
+- // Create an archive with non ascii. These should trigger a pax header
+- // because pax headers have a defined utf-8 encoding.
+- fileinfo, err := os.Stat("testdata/small.txt")
+- if err != nil {
+- t.Fatal(err)
+- }
+-
+- hdr, err := FileInfoHeader(fileinfo, "")
+- if err != nil {
+- t.Fatalf("os.Stat:1 %v", err)
+- }
+-
+- // some sample data
+- chineseFilename := "文件名"
+- chineseGroupname := "組"
+- chineseUsername := "用戶名"
+-
+- hdr.Name = chineseFilename
+- hdr.Gname = chineseGroupname
+- hdr.Uname = chineseUsername
+-
+- contents := strings.Repeat(" ", int(hdr.Size))
+-
+- var buf bytes.Buffer
+- writer := NewWriter(&buf)
+- if err := writer.WriteHeader(hdr); err != nil {
+- t.Fatal(err)
+- }
+- if _, err = writer.Write([]byte(contents)); err != nil {
+- t.Fatal(err)
+- }
+- if err := writer.Close(); err != nil {
+- t.Fatal(err)
+- }
+- // Simple test to make sure PAX extensions are in effect
+- if !bytes.Contains(buf.Bytes(), []byte("PaxHeaders.")) {
+- t.Fatal("Expected at least one PAX header to be written.")
+- }
+- // Test that we can get a long name back out of the archive.
+- reader := NewReader(&buf)
+- hdr, err = reader.Next()
+- if err != nil {
+- t.Fatal(err)
+- }
+- if hdr.Name != chineseFilename {
+- t.Fatal("Couldn't recover unicode name")
+- }
+- if hdr.Gname != chineseGroupname {
+- t.Fatal("Couldn't recover unicode group")
+- }
+- if hdr.Uname != chineseUsername {
+- t.Fatal("Couldn't recover unicode user")
+- }
+-}
+-
+-func TestPAXHeader(t *testing.T) {
+- medName := strings.Repeat("CD", 50)
+- longName := strings.Repeat("AB", 100)
+- paxTests := [][3]string{
+- {PAX_PATH, "/etc/hosts", "19 path=/etc/hosts\n"},
+- {"a", "b", "6 a=b\n"}, // Single digit length
+- {"a", "names", "11 a=names\n"}, // Test case involving carries
+- {PAX_PATH, longName, fmt.Sprintf("210 path=%s\n", longName)},
+- {PAX_PATH, medName, fmt.Sprintf("110 path=%s\n", medName)}}
+-
+- for _, test := range paxTests {
+- field, key, expected := test[0], test[1], test[2]
+- if result := paxHeader(field, key); result != expected {
+- t.Fatalf("paxHeader: got %s, expected %s", result, expected)
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/context/context.go docker-devmapper/vendor/src/github.com/gorilla/context/context.go
+--- docker-0.6.2/vendor/src/github.com/gorilla/context/context.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/context/context.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,112 +0,0 @@
+-// Copyright 2012 The Gorilla 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 context
+-
+-import (
+- "net/http"
+- "sync"
+- "time"
+-)
+-
+-var (
+- mutex sync.Mutex
+- data = make(map[*http.Request]map[interface{}]interface{})
+- datat = make(map[*http.Request]int64)
+-)
+-
+-// Set stores a value for a given key in a given request.
+-func Set(r *http.Request, key, val interface{}) {
+- mutex.Lock()
+- defer mutex.Unlock()
+- if data[r] == nil {
+- data[r] = make(map[interface{}]interface{})
+- datat[r] = time.Now().Unix()
+- }
+- data[r][key] = val
+-}
+-
+-// Get returns a value stored for a given key in a given request.
+-func Get(r *http.Request, key interface{}) interface{} {
+- mutex.Lock()
+- defer mutex.Unlock()
+- if data[r] != nil {
+- return data[r][key]
+- }
+- return nil
+-}
+-
+-// GetOk returns stored value and presence state like multi-value return of map access.
+-func GetOk(r *http.Request, key interface{}) (interface{}, bool) {
+- mutex.Lock()
+- defer mutex.Unlock()
+- if _, ok := data[r]; ok {
+- value, ok := data[r][key]
+- return value, ok
+- }
+- return nil, false
+-}
+-
+-// Delete removes a value stored for a given key in a given request.
+-func Delete(r *http.Request, key interface{}) {
+- mutex.Lock()
+- defer mutex.Unlock()
+- if data[r] != nil {
+- delete(data[r], key)
+- }
+-}
+-
+-// Clear removes all values stored for a given request.
+-//
+-// This is usually called by a handler wrapper to clean up request
+-// variables at the end of a request lifetime. See ClearHandler().
+-func Clear(r *http.Request) {
+- mutex.Lock()
+- defer mutex.Unlock()
+- clear(r)
+-}
+-
+-// clear is Clear without the lock.
+-func clear(r *http.Request) {
+- delete(data, r)
+- delete(datat, r)
+-}
+-
+-// Purge removes request data stored for longer than maxAge, in seconds.
+-// It returns the amount of requests removed.
+-//
+-// If maxAge <= 0, all request data is removed.
+-//
+-// This is only used for sanity check: in case context cleaning was not
+-// properly set some request data can be kept forever, consuming an increasing
+-// amount of memory. In case this is detected, Purge() must be called
+-// periodically until the problem is fixed.
+-func Purge(maxAge int) int {
+- mutex.Lock()
+- defer mutex.Unlock()
+- count := 0
+- if maxAge <= 0 {
+- count = len(data)
+- data = make(map[*http.Request]map[interface{}]interface{})
+- datat = make(map[*http.Request]int64)
+- } else {
+- min := time.Now().Unix() - int64(maxAge)
+- for r, _ := range data {
+- if datat[r] < min {
+- clear(r)
+- count++
+- }
+- }
+- }
+- return count
+-}
+-
+-// ClearHandler wraps an http.Handler and clears request values at the end
+-// of a request lifetime.
+-func ClearHandler(h http.Handler) http.Handler {
+- return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+- defer Clear(r)
+- h.ServeHTTP(w, r)
+- })
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/context/context_test.go docker-devmapper/vendor/src/github.com/gorilla/context/context_test.go
+--- docker-0.6.2/vendor/src/github.com/gorilla/context/context_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/context/context_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,66 +0,0 @@
+-// Copyright 2012 The Gorilla 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 context
+-
+-import (
+- "net/http"
+- "testing"
+-)
+-
+-type keyType int
+-
+-const (
+- key1 keyType = iota
+- key2
+-)
+-
+-func TestContext(t *testing.T) {
+- assertEqual := func(val interface{}, exp interface{}) {
+- if val != exp {
+- t.Errorf("Expected %v, got %v.", exp, val)
+- }
+- }
+-
+- r, _ := http.NewRequest("GET", "http://localhost:8080/", nil)
+-
+- // Get()
+- assertEqual(Get(r, key1), nil)
+-
+- // Set()
+- Set(r, key1, "1")
+- assertEqual(Get(r, key1), "1")
+- assertEqual(len(data[r]), 1)
+-
+- Set(r, key2, "2")
+- assertEqual(Get(r, key2), "2")
+- assertEqual(len(data[r]), 2)
+-
+- //GetOk
+- value, ok := GetOk(r, key1)
+- assertEqual(value, "1")
+- assertEqual(ok, true)
+-
+- value, ok = GetOk(r, "not exists")
+- assertEqual(value, nil)
+- assertEqual(ok, false)
+-
+- Set(r, "nil value", nil)
+- value, ok = GetOk(r, "nil value")
+- assertEqual(value, nil)
+- assertEqual(ok, true)
+-
+- // Delete()
+- Delete(r, key1)
+- assertEqual(Get(r, key1), nil)
+- assertEqual(len(data[r]), 2)
+-
+- Delete(r, key2)
+- assertEqual(Get(r, key2), nil)
+- assertEqual(len(data[r]), 1)
+-
+- // Clear()
+- Clear(r)
+- assertEqual(len(data), 0)
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/context/doc.go docker-devmapper/vendor/src/github.com/gorilla/context/doc.go
+--- docker-0.6.2/vendor/src/github.com/gorilla/context/doc.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/context/doc.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,82 +0,0 @@
+-// Copyright 2012 The Gorilla 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 gorilla/context stores values shared during a request lifetime.
+-
+-For example, a router can set variables extracted from the URL and later
+-application handlers can access those values, or it can be used to store
+-sessions values to be saved at the end of a request. There are several
+-others common uses.
+-
+-The idea was posted by Brad Fitzpatrick to the go-nuts mailing list:
+-
+- http://groups.google.com/group/golang-nuts/msg/e2d679d303aa5d53
+-
+-Here's the basic usage: first define the keys that you will need. The key
+-type is interface{} so a key can be of any type that supports equality.
+-Here we define a key using a custom int type to avoid name collisions:
+-
+- package foo
+-
+- import (
+- "github.com/gorilla/context"
+- )
+-
+- type key int
+-
+- const MyKey key = 0
+-
+-Then set a variable. Variables are bound to an http.Request object, so you
+-need a request instance to set a value:
+-
+- context.Set(r, MyKey, "bar")
+-
+-The application can later access the variable using the same key you provided:
+-
+- func MyHandler(w http.ResponseWriter, r *http.Request) {
+- // val is "bar".
+- val := context.Get(r, foo.MyKey)
+-
+- // returns ("bar", true)
+- val, ok := context.GetOk(r, foo.MyKey)
+- // ...
+- }
+-
+-And that's all about the basic usage. We discuss some other ideas below.
+-
+-Any type can be stored in the context. To enforce a given type, make the key
+-private and wrap Get() and Set() to accept and return values of a specific
+-type:
+-
+- type key int
+-
+- const mykey key = 0
+-
+- // GetMyKey returns a value for this package from the request values.
+- func GetMyKey(r *http.Request) SomeType {
+- if rv := context.Get(r, mykey); rv != nil {
+- return rv.(SomeType)
+- }
+- return nil
+- }
+-
+- // SetMyKey sets a value for this package in the request values.
+- func SetMyKey(r *http.Request, val SomeType) {
+- context.Set(r, mykey, val)
+- }
+-
+-Variables must be cleared at the end of a request, to remove all values
+-that were stored. This can be done in an http.Handler, after a request was
+-served. Just call Clear() passing the request:
+-
+- context.Clear(r)
+-
+-...or use ClearHandler(), which conveniently wraps an http.Handler to clear
+-variables at the end of a request lifetime.
+-
+-The Routers from the packages gorilla/mux and gorilla/pat call Clear()
+-so if you are using either of them you don't need to clear the context manually.
+-*/
+-package context
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/context/LICENSE docker-devmapper/vendor/src/github.com/gorilla/context/LICENSE
+--- docker-0.6.2/vendor/src/github.com/gorilla/context/LICENSE 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/context/LICENSE 1969-12-31 18:00:00.000000000 -0600
+@@ -1,27 +0,0 @@
+-Copyright (c) 2012 Rodrigo Moraes. All rights reserved.
+-
+-Redistribution and use in source and binary forms, with or without
+-modification, are permitted provided that the following conditions are
+-met:
+-
+- * Redistributions of source code must retain the above copyright
+-notice, this list of conditions and the following disclaimer.
+- * Redistributions in binary form must reproduce the above
+-copyright notice, this list of conditions and the following disclaimer
+-in the documentation and/or other materials provided with the
+-distribution.
+- * Neither the name of Google Inc. nor the names of its
+-contributors may be used to endorse or promote products derived from
+-this software without specific prior written permission.
+-
+-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/context/README.md docker-devmapper/vendor/src/github.com/gorilla/context/README.md
+--- docker-0.6.2/vendor/src/github.com/gorilla/context/README.md 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/context/README.md 1969-12-31 18:00:00.000000000 -0600
+@@ -1,6 +0,0 @@
+-context
+-=======
+-
+-gorilla/context is a general purpose registry for global request variables.
+-
+-Read the full documentation here: http://www.gorillatoolkit.org/pkg/context
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/mux/bench_test.go docker-devmapper/vendor/src/github.com/gorilla/mux/bench_test.go
+--- docker-0.6.2/vendor/src/github.com/gorilla/mux/bench_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/mux/bench_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,21 +0,0 @@
+-// Copyright 2012 The Gorilla 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 mux
+-
+-import (
+- "net/http"
+- "testing"
+-)
+-
+-func BenchmarkMux(b *testing.B) {
+- router := new(Router)
+- handler := func(w http.ResponseWriter, r *http.Request) {}
+- router.HandleFunc("/v1/{v1}", handler)
+-
+- request, _ := http.NewRequest("GET", "/v1/anything", nil)
+- for i := 0; i < b.N; i++ {
+- router.ServeHTTP(nil, request)
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/mux/doc.go docker-devmapper/vendor/src/github.com/gorilla/mux/doc.go
+--- docker-0.6.2/vendor/src/github.com/gorilla/mux/doc.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/mux/doc.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,199 +0,0 @@
+-// Copyright 2012 The Gorilla 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 gorilla/mux implements a request router and dispatcher.
+-
+-The name mux stands for "HTTP request multiplexer". Like the standard
+-http.ServeMux, mux.Router matches incoming requests against a list of
+-registered routes and calls a handler for the route that matches the URL
+-or other conditions. The main features are:
+-
+- * Requests can be matched based on URL host, path, path prefix, schemes,
+- header and query values, HTTP methods or using custom matchers.
+- * URL hosts and paths can have variables with an optional regular
+- expression.
+- * Registered URLs can be built, or "reversed", which helps maintaining
+- references to resources.
+- * Routes can be used as subrouters: nested routes are only tested if the
+- parent route matches. This is useful to define groups of routes that
+- share common conditions like a host, a path prefix or other repeated
+- attributes. As a bonus, this optimizes request matching.
+- * It implements the http.Handler interface so it is compatible with the
+- standard http.ServeMux.
+-
+-Let's start registering a couple of URL paths and handlers:
+-
+- func main() {
+- r := mux.NewRouter()
+- r.HandleFunc("/", HomeHandler)
+- r.HandleFunc("/products", ProductsHandler)
+- r.HandleFunc("/articles", ArticlesHandler)
+- http.Handle("/", r)
+- }
+-
+-Here we register three routes mapping URL paths to handlers. This is
+-equivalent to how http.HandleFunc() works: if an incoming request URL matches
+-one of the paths, the corresponding handler is called passing
+-(http.ResponseWriter, *http.Request) as parameters.
+-
+-Paths can have variables. They are defined using the format {name} or
+-{name:pattern}. If a regular expression pattern is not defined, the matched
+-variable will be anything until the next slash. For example:
+-
+- r := mux.NewRouter()
+- r.HandleFunc("/products/{key}", ProductHandler)
+- r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler)
+- r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler)
+-
+-The names are used to create a map of route variables which can be retrieved
+-calling mux.Vars():
+-
+- vars := mux.Vars(request)
+- category := vars["category"]
+-
+-And this is all you need to know about the basic usage. More advanced options
+-are explained below.
+-
+-Routes can also be restricted to a domain or subdomain. Just define a host
+-pattern to be matched. They can also have variables:
+-
+- r := mux.NewRouter()
+- // Only matches if domain is "www.domain.com".
+- r.Host("www.domain.com")
+- // Matches a dynamic subdomain.
+- r.Host("{subdomain:[a-z]+}.domain.com")
+-
+-There are several other matchers that can be added. To match path prefixes:
+-
+- r.PathPrefix("/products/")
+-
+-...or HTTP methods:
+-
+- r.Methods("GET", "POST")
+-
+-...or URL schemes:
+-
+- r.Schemes("https")
+-
+-...or header values:
+-
+- r.Headers("X-Requested-With", "XMLHttpRequest")
+-
+-...or query values:
+-
+- r.Queries("key", "value")
+-
+-...or to use a custom matcher function:
+-
+- r.MatcherFunc(func(r *http.Request, rm *RouteMatch) bool {
+- return r.ProtoMajor == 0
+- })
+-
+-...and finally, it is possible to combine several matchers in a single route:
+-
+- r.HandleFunc("/products", ProductsHandler).
+- Host("www.domain.com").
+- Methods("GET").
+- Schemes("http")
+-
+-Setting the same matching conditions again and again can be boring, so we have
+-a way to group several routes that share the same requirements.
+-We call it "subrouting".
+-
+-For example, let's say we have several URLs that should only match when the
+-host is "www.domain.com". Create a route for that host and get a "subrouter"
+-from it:
+-
+- r := mux.NewRouter()
+- s := r.Host("www.domain.com").Subrouter()
+-
+-Then register routes in the subrouter:
+-
+- s.HandleFunc("/products/", ProductsHandler)
+- s.HandleFunc("/products/{key}", ProductHandler)
+- s.HandleFunc("/articles/{category}/{id:[0-9]+}"), ArticleHandler)
+-
+-The three URL paths we registered above will only be tested if the domain is
+-"www.domain.com", because the subrouter is tested first. This is not
+-only convenient, but also optimizes request matching. You can create
+-subrouters combining any attribute matchers accepted by a route.
+-
+-Subrouters can be used to create domain or path "namespaces": you define
+-subrouters in a central place and then parts of the app can register its
+-paths relatively to a given subrouter.
+-
+-There's one more thing about subroutes. When a subrouter has a path prefix,
+-the inner routes use it as base for their paths:
+-
+- r := mux.NewRouter()
+- s := r.PathPrefix("/products").Subrouter()
+- // "/products/"
+- s.HandleFunc("/", ProductsHandler)
+- // "/products/{key}/"
+- s.HandleFunc("/{key}/", ProductHandler)
+- // "/products/{key}/details"
+- s.HandleFunc("/{key}/details"), ProductDetailsHandler)
+-
+-Now let's see how to build registered URLs.
+-
+-Routes can be named. All routes that define a name can have their URLs built,
+-or "reversed". We define a name calling Name() on a route. For example:
+-
+- r := mux.NewRouter()
+- r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler).
+- Name("article")
+-
+-To build a URL, get the route and call the URL() method, passing a sequence of
+-key/value pairs for the route variables. For the previous route, we would do:
+-
+- url, err := r.Get("article").URL("category", "technology", "id", "42")
+-
+-...and the result will be a url.URL with the following path:
+-
+- "/articles/technology/42"
+-
+-This also works for host variables:
+-
+- r := mux.NewRouter()
+- r.Host("{subdomain}.domain.com").
+- Path("/articles/{category}/{id:[0-9]+}").
+- HandlerFunc(ArticleHandler).
+- Name("article")
+-
+- // url.String() will be "http://news.domain.com/articles/technology/42"
+- url, err := r.Get("article").URL("subdomain", "news",
+- "category", "technology",
+- "id", "42")
+-
+-All variables defined in the route are required, and their values must
+-conform to the corresponding patterns. These requirements guarantee that a
+-generated URL will always match a registered route -- the only exception is
+-for explicitly defined "build-only" routes which never match.
+-
+-There's also a way to build only the URL host or path for a route:
+-use the methods URLHost() or URLPath() instead. For the previous route,
+-we would do:
+-
+- // "http://news.domain.com/"
+- host, err := r.Get("article").URLHost("subdomain", "news")
+-
+- // "/articles/technology/42"
+- path, err := r.Get("article").URLPath("category", "technology", "id", "42")
+-
+-And if you use subrouters, host and path defined separately can be built
+-as well:
+-
+- r := mux.NewRouter()
+- s := r.Host("{subdomain}.domain.com").Subrouter()
+- s.Path("/articles/{category}/{id:[0-9]+}").
+- HandlerFunc(ArticleHandler).
+- Name("article")
+-
+- // "http://news.domain.com/articles/technology/42"
+- url, err := r.Get("article").URL("subdomain", "news",
+- "category", "technology",
+- "id", "42")
+-*/
+-package mux
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/mux/LICENSE docker-devmapper/vendor/src/github.com/gorilla/mux/LICENSE
+--- docker-0.6.2/vendor/src/github.com/gorilla/mux/LICENSE 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/mux/LICENSE 1969-12-31 18:00:00.000000000 -0600
+@@ -1,27 +0,0 @@
+-Copyright (c) 2012 Rodrigo Moraes. All rights reserved.
+-
+-Redistribution and use in source and binary forms, with or without
+-modification, are permitted provided that the following conditions are
+-met:
+-
+- * Redistributions of source code must retain the above copyright
+-notice, this list of conditions and the following disclaimer.
+- * Redistributions in binary form must reproduce the above
+-copyright notice, this list of conditions and the following disclaimer
+-in the documentation and/or other materials provided with the
+-distribution.
+- * Neither the name of Google Inc. nor the names of its
+-contributors may be used to endorse or promote products derived from
+-this software without specific prior written permission.
+-
+-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/mux/mux.go docker-devmapper/vendor/src/github.com/gorilla/mux/mux.go
+--- docker-0.6.2/vendor/src/github.com/gorilla/mux/mux.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/mux/mux.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,335 +0,0 @@
+-// Copyright 2012 The Gorilla 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 mux
+-
+-import (
+- "fmt"
+- "net/http"
+- "path"
+-
+- "github.com/gorilla/context"
+-)
+-
+-// NewRouter returns a new router instance.
+-func NewRouter() *Router {
+- return &Router{namedRoutes: make(map[string]*Route)}
+-}
+-
+-// Router registers routes to be matched and dispatches a handler.
+-//
+-// It implements the http.Handler interface, so it can be registered to serve
+-// requests:
+-//
+-// var router = mux.NewRouter()
+-//
+-// func main() {
+-// http.Handle("/", router)
+-// }
+-//
+-// Or, for Google App Engine, register it in a init() function:
+-//
+-// func init() {
+-// http.Handle("/", router)
+-// }
+-//
+-// This will send all incoming requests to the router.
+-type Router struct {
+- // Configurable Handler to be used when no route matches.
+- NotFoundHandler http.Handler
+- // Parent route, if this is a subrouter.
+- parent parentRoute
+- // Routes to be matched, in order.
+- routes []*Route
+- // Routes by name for URL building.
+- namedRoutes map[string]*Route
+- // See Router.StrictSlash(). This defines the flag for new routes.
+- strictSlash bool
+-}
+-
+-// Match matches registered routes against the request.
+-func (r *Router) Match(req *http.Request, match *RouteMatch) bool {
+- for _, route := range r.routes {
+- if route.Match(req, match) {
+- return true
+- }
+- }
+- return false
+-}
+-
+-// ServeHTTP dispatches the handler registered in the matched route.
+-//
+-// When there is a match, the route variables can be retrieved calling
+-// mux.Vars(request).
+-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 {
+- w.Header().Set("Location", p)
+- w.WriteHeader(http.StatusMovedPermanently)
+- return
+- }
+- var match RouteMatch
+- var handler http.Handler
+- if r.Match(req, &match) {
+- handler = match.Handler
+- setVars(req, match.Vars)
+- setCurrentRoute(req, match.Route)
+- }
+- if handler == nil {
+- if r.NotFoundHandler == nil {
+- r.NotFoundHandler = http.NotFoundHandler()
+- }
+- handler = r.NotFoundHandler
+- }
+- defer context.Clear(req)
+- handler.ServeHTTP(w, req)
+-}
+-
+-// Get returns a route registered with the given name.
+-func (r *Router) Get(name string) *Route {
+- return r.getNamedRoutes()[name]
+-}
+-
+-// GetRoute returns a route registered with the given name. This method
+-// was renamed to Get() and remains here for backwards compatibility.
+-func (r *Router) GetRoute(name string) *Route {
+- return r.getNamedRoutes()[name]
+-}
+-
+-// StrictSlash defines the slash behavior for new routes.
+-//
+-// When true, if the route path is "/path/", accessing "/path" will redirect
+-// to the former and vice versa.
+-//
+-// Special case: when a route sets a path prefix, strict slash is
+-// automatically set to false for that route because the redirect behavior
+-// can't be determined for prefixes.
+-func (r *Router) StrictSlash(value bool) *Router {
+- r.strictSlash = value
+- return r
+-}
+-
+-// ----------------------------------------------------------------------------
+-// parentRoute
+-// ----------------------------------------------------------------------------
+-
+-// getNamedRoutes returns the map where named routes are registered.
+-func (r *Router) getNamedRoutes() map[string]*Route {
+- if r.namedRoutes == nil {
+- if r.parent != nil {
+- r.namedRoutes = r.parent.getNamedRoutes()
+- } else {
+- r.namedRoutes = make(map[string]*Route)
+- }
+- }
+- return r.namedRoutes
+-}
+-
+-// getRegexpGroup returns regexp definitions from the parent route, if any.
+-func (r *Router) getRegexpGroup() *routeRegexpGroup {
+- if r.parent != nil {
+- return r.parent.getRegexpGroup()
+- }
+- return nil
+-}
+-
+-// ----------------------------------------------------------------------------
+-// Route factories
+-// ----------------------------------------------------------------------------
+-
+-// NewRoute registers an empty route.
+-func (r *Router) NewRoute() *Route {
+- route := &Route{parent: r, strictSlash: r.strictSlash}
+- r.routes = append(r.routes, route)
+- return route
+-}
+-
+-// Handle registers a new route with a matcher for the URL path.
+-// See Route.Path() and Route.Handler().
+-func (r *Router) Handle(path string, handler http.Handler) *Route {
+- return r.NewRoute().Path(path).Handler(handler)
+-}
+-
+-// HandleFunc registers a new route with a matcher for the URL path.
+-// See Route.Path() and Route.HandlerFunc().
+-func (r *Router) HandleFunc(path string, f func(http.ResponseWriter,
+- *http.Request)) *Route {
+- return r.NewRoute().Path(path).HandlerFunc(f)
+-}
+-
+-// Headers registers a new route with a matcher for request header values.
+-// See Route.Headers().
+-func (r *Router) Headers(pairs ...string) *Route {
+- return r.NewRoute().Headers(pairs...)
+-}
+-
+-// Host registers a new route with a matcher for the URL host.
+-// See Route.Host().
+-func (r *Router) Host(tpl string) *Route {
+- return r.NewRoute().Host(tpl)
+-}
+-
+-// MatcherFunc registers a new route with a custom matcher function.
+-// See Route.MatcherFunc().
+-func (r *Router) MatcherFunc(f MatcherFunc) *Route {
+- return r.NewRoute().MatcherFunc(f)
+-}
+-
+-// Methods registers a new route with a matcher for HTTP methods.
+-// See Route.Methods().
+-func (r *Router) Methods(methods ...string) *Route {
+- return r.NewRoute().Methods(methods...)
+-}
+-
+-// Path registers a new route with a matcher for the URL path.
+-// See Route.Path().
+-func (r *Router) Path(tpl string) *Route {
+- return r.NewRoute().Path(tpl)
+-}
+-
+-// PathPrefix registers a new route with a matcher for the URL path prefix.
+-// See Route.PathPrefix().
+-func (r *Router) PathPrefix(tpl string) *Route {
+- return r.NewRoute().PathPrefix(tpl)
+-}
+-
+-// Queries registers a new route with a matcher for URL query values.
+-// See Route.Queries().
+-func (r *Router) Queries(pairs ...string) *Route {
+- return r.NewRoute().Queries(pairs...)
+-}
+-
+-// Schemes registers a new route with a matcher for URL schemes.
+-// See Route.Schemes().
+-func (r *Router) Schemes(schemes ...string) *Route {
+- return r.NewRoute().Schemes(schemes...)
+-}
+-
+-// ----------------------------------------------------------------------------
+-// Context
+-// ----------------------------------------------------------------------------
+-
+-// RouteMatch stores information about a matched route.
+-type RouteMatch struct {
+- Route *Route
+- Handler http.Handler
+- Vars map[string]string
+-}
+-
+-type contextKey int
+-
+-const (
+- varsKey contextKey = iota
+- routeKey
+-)
+-
+-// Vars returns the route variables for the current request, if any.
+-func Vars(r *http.Request) map[string]string {
+- if rv := context.Get(r, varsKey); rv != nil {
+- return rv.(map[string]string)
+- }
+- return nil
+-}
+-
+-// CurrentRoute returns the matched route for the current request, if any.
+-func CurrentRoute(r *http.Request) *Route {
+- if rv := context.Get(r, routeKey); rv != nil {
+- return rv.(*Route)
+- }
+- return nil
+-}
+-
+-func setVars(r *http.Request, val interface{}) {
+- context.Set(r, varsKey, val)
+-}
+-
+-func setCurrentRoute(r *http.Request, val interface{}) {
+- context.Set(r, routeKey, val)
+-}
+-
+-// ----------------------------------------------------------------------------
+-// Helpers
+-// ----------------------------------------------------------------------------
+-
+-// cleanPath returns the canonical path for p, eliminating . and .. elements.
+-// Borrowed from the net/http package.
+-func cleanPath(p string) string {
+- if p == "" {
+- return "/"
+- }
+- if p[0] != '/' {
+- p = "/" + p
+- }
+- np := path.Clean(p)
+- // path.Clean removes trailing slash except for root;
+- // put the trailing slash back if necessary.
+- if p[len(p)-1] == '/' && np != "/" {
+- np += "/"
+- }
+- return np
+-}
+-
+-// uniqueVars returns an error if two slices contain duplicated strings.
+-func uniqueVars(s1, s2 []string) error {
+- for _, v1 := range s1 {
+- for _, v2 := range s2 {
+- if v1 == v2 {
+- return fmt.Errorf("mux: duplicated route variable %q", v2)
+- }
+- }
+- }
+- return nil
+-}
+-
+-// mapFromPairs converts variadic string parameters to a string map.
+-func mapFromPairs(pairs ...string) (map[string]string, error) {
+- length := len(pairs)
+- if length%2 != 0 {
+- return nil, fmt.Errorf(
+- "mux: number of parameters must be multiple of 2, got %v", pairs)
+- }
+- m := make(map[string]string, length/2)
+- for i := 0; i < length; i += 2 {
+- m[pairs[i]] = pairs[i+1]
+- }
+- return m, nil
+-}
+-
+-// matchInArray returns true if the given string value is in the array.
+-func matchInArray(arr []string, value string) bool {
+- for _, v := range arr {
+- if v == value {
+- return true
+- }
+- }
+- return false
+-}
+-
+-// matchMap returns true if the given key/value pairs exist in a given map.
+-func matchMap(toCheck map[string]string, toMatch map[string][]string,
+- canonicalKey bool) bool {
+- for k, v := range toCheck {
+- // Check if key exists.
+- if canonicalKey {
+- k = http.CanonicalHeaderKey(k)
+- }
+- if values := toMatch[k]; values == nil {
+- return false
+- } else if v != "" {
+- // If value was defined as an empty string we only check that the
+- // key exists. Otherwise we also check for equality.
+- valueExists := false
+- for _, value := range values {
+- if v == value {
+- valueExists = true
+- break
+- }
+- }
+- if !valueExists {
+- return false
+- }
+- }
+- }
+- return true
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/mux/mux_test.go docker-devmapper/vendor/src/github.com/gorilla/mux/mux_test.go
+--- docker-0.6.2/vendor/src/github.com/gorilla/mux/mux_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/mux/mux_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,723 +0,0 @@
+-// Copyright 2012 The Gorilla 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 mux
+-
+-import (
+- "fmt"
+- "net/http"
+- "testing"
+-)
+-
+-type routeTest struct {
+- title string // title of the test
+- route *Route // the route being tested
+- request *http.Request // a request to test the route
+- vars map[string]string // the expected vars of the match
+- host string // the expected host of the match
+- path string // the expected path of the match
+- shouldMatch bool // whether the request is expected to match the route at all
+-}
+-
+-func TestHost(t *testing.T) {
+- // newRequestHost a new request with a method, url, and host header
+- newRequestHost := func(method, url, host string) *http.Request {
+- req, err := http.NewRequest(method, url, nil)
+- if err != nil {
+- panic(err)
+- }
+- req.Host = host
+- return req
+- }
+-
+- tests := []routeTest{
+- {
+- title: "Host route match",
+- route: new(Route).Host("aaa.bbb.ccc"),
+- request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"),
+- vars: map[string]string{},
+- host: "aaa.bbb.ccc",
+- path: "",
+- shouldMatch: true,
+- },
+- {
+- title: "Host route, wrong host in request URL",
+- route: new(Route).Host("aaa.bbb.ccc"),
+- request: newRequest("GET", "http://aaa.222.ccc/111/222/333"),
+- vars: map[string]string{},
+- host: "aaa.bbb.ccc",
+- path: "",
+- shouldMatch: false,
+- },
+- {
+- title: "Host route with port, match",
+- route: new(Route).Host("aaa.bbb.ccc:1234"),
+- request: newRequest("GET", "http://aaa.bbb.ccc:1234/111/222/333"),
+- vars: map[string]string{},
+- host: "aaa.bbb.ccc:1234",
+- path: "",
+- shouldMatch: true,
+- },
+- {
+- title: "Host route with port, wrong port in request URL",
+- route: new(Route).Host("aaa.bbb.ccc:1234"),
+- request: newRequest("GET", "http://aaa.bbb.ccc:9999/111/222/333"),
+- vars: map[string]string{},
+- host: "aaa.bbb.ccc:1234",
+- path: "",
+- shouldMatch: false,
+- },
+- {
+- title: "Host route, match with host in request header",
+- route: new(Route).Host("aaa.bbb.ccc"),
+- request: newRequestHost("GET", "/111/222/333", "aaa.bbb.ccc"),
+- vars: map[string]string{},
+- host: "aaa.bbb.ccc",
+- path: "",
+- shouldMatch: true,
+- },
+- {
+- title: "Host route, wrong host in request header",
+- route: new(Route).Host("aaa.bbb.ccc"),
+- request: newRequestHost("GET", "/111/222/333", "aaa.222.ccc"),
+- vars: map[string]string{},
+- host: "aaa.bbb.ccc",
+- path: "",
+- shouldMatch: false,
+- },
+- // BUG {new(Route).Host("aaa.bbb.ccc:1234"), newRequestHost("GET", "/111/222/333", "aaa.bbb.ccc:1234"), map[string]string{}, "aaa.bbb.ccc:1234", "", true},
+- {
+- title: "Host route with port, wrong host in request header",
+- route: new(Route).Host("aaa.bbb.ccc:1234"),
+- request: newRequestHost("GET", "/111/222/333", "aaa.bbb.ccc:9999"),
+- vars: map[string]string{},
+- host: "aaa.bbb.ccc:1234",
+- path: "",
+- shouldMatch: false,
+- },
+- {
+- title: "Host route with pattern, match",
+- route: new(Route).Host("aaa.{v1:[a-z]{3}}.ccc"),
+- request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"),
+- vars: map[string]string{"v1": "bbb"},
+- host: "aaa.bbb.ccc",
+- path: "",
+- shouldMatch: true,
+- },
+- {
+- title: "Host route with pattern, wrong host in request URL",
+- route: new(Route).Host("aaa.{v1:[a-z]{3}}.ccc"),
+- request: newRequest("GET", "http://aaa.222.ccc/111/222/333"),
+- vars: map[string]string{"v1": "bbb"},
+- host: "aaa.bbb.ccc",
+- path: "",
+- shouldMatch: false,
+- },
+- {
+- title: "Host route with multiple patterns, match",
+- route: new(Route).Host("{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}"),
+- request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"),
+- vars: map[string]string{"v1": "aaa", "v2": "bbb", "v3": "ccc"},
+- host: "aaa.bbb.ccc",
+- path: "",
+- shouldMatch: true,
+- },
+- {
+- title: "Host route with multiple patterns, wrong host in request URL",
+- route: new(Route).Host("{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}"),
+- request: newRequest("GET", "http://aaa.222.ccc/111/222/333"),
+- vars: map[string]string{"v1": "aaa", "v2": "bbb", "v3": "ccc"},
+- host: "aaa.bbb.ccc",
+- path: "",
+- shouldMatch: false,
+- },
+- }
+- for _, test := range tests {
+- testRoute(t, test)
+- }
+-}
+-
+-func TestPath(t *testing.T) {
+- tests := []routeTest{
+- {
+- title: "Path route, match",
+- route: new(Route).Path("/111/222/333"),
+- request: newRequest("GET", "http://localhost/111/222/333"),
+- vars: map[string]string{},
+- host: "",
+- path: "/111/222/333",
+- shouldMatch: true,
+- },
+- {
+- title: "Path route, wrong path in request in request URL",
+- route: new(Route).Path("/111/222/333"),
+- request: newRequest("GET", "http://localhost/1/2/3"),
+- vars: map[string]string{},
+- host: "",
+- path: "/111/222/333",
+- shouldMatch: false,
+- },
+- {
+- title: "Path route with pattern, match",
+- route: new(Route).Path("/111/{v1:[0-9]{3}}/333"),
+- request: newRequest("GET", "http://localhost/111/222/333"),
+- vars: map[string]string{"v1": "222"},
+- host: "",
+- path: "/111/222/333",
+- shouldMatch: true,
+- },
+- {
+- title: "Path route with pattern, URL in request does not match",
+- route: new(Route).Path("/111/{v1:[0-9]{3}}/333"),
+- request: newRequest("GET", "http://localhost/111/aaa/333"),
+- vars: map[string]string{"v1": "222"},
+- host: "",
+- path: "/111/222/333",
+- shouldMatch: false,
+- },
+- {
+- title: "Path route with multiple patterns, match",
+- route: new(Route).Path("/{v1:[0-9]{3}}/{v2:[0-9]{3}}/{v3:[0-9]{3}}"),
+- request: newRequest("GET", "http://localhost/111/222/333"),
+- vars: map[string]string{"v1": "111", "v2": "222", "v3": "333"},
+- host: "",
+- path: "/111/222/333",
+- shouldMatch: true,
+- },
+- {
+- title: "Path route with multiple patterns, URL in request does not match",
+- route: new(Route).Path("/{v1:[0-9]{3}}/{v2:[0-9]{3}}/{v3:[0-9]{3}}"),
+- request: newRequest("GET", "http://localhost/111/aaa/333"),
+- vars: map[string]string{"v1": "111", "v2": "222", "v3": "333"},
+- host: "",
+- path: "/111/222/333",
+- shouldMatch: false,
+- },
+- }
+-
+- for _, test := range tests {
+- testRoute(t, test)
+- }
+-}
+-
+-func TestPathPrefix(t *testing.T) {
+- tests := []routeTest{
+- {
+- title: "PathPrefix route, match",
+- route: new(Route).PathPrefix("/111"),
+- request: newRequest("GET", "http://localhost/111/222/333"),
+- vars: map[string]string{},
+- host: "",
+- path: "/111",
+- shouldMatch: true,
+- },
+- {
+- title: "PathPrefix route, URL prefix in request does not match",
+- route: new(Route).PathPrefix("/111"),
+- request: newRequest("GET", "http://localhost/1/2/3"),
+- vars: map[string]string{},
+- host: "",
+- path: "/111",
+- shouldMatch: false,
+- },
+- {
+- title: "PathPrefix route with pattern, match",
+- route: new(Route).PathPrefix("/111/{v1:[0-9]{3}}"),
+- request: newRequest("GET", "http://localhost/111/222/333"),
+- vars: map[string]string{"v1": "222"},
+- host: "",
+- path: "/111/222",
+- shouldMatch: true,
+- },
+- {
+- title: "PathPrefix route with pattern, URL prefix in request does not match",
+- route: new(Route).PathPrefix("/111/{v1:[0-9]{3}}"),
+- request: newRequest("GET", "http://localhost/111/aaa/333"),
+- vars: map[string]string{"v1": "222"},
+- host: "",
+- path: "/111/222",
+- shouldMatch: false,
+- },
+- {
+- title: "PathPrefix route with multiple patterns, match",
+- route: new(Route).PathPrefix("/{v1:[0-9]{3}}/{v2:[0-9]{3}}"),
+- request: newRequest("GET", "http://localhost/111/222/333"),
+- vars: map[string]string{"v1": "111", "v2": "222"},
+- host: "",
+- path: "/111/222",
+- shouldMatch: true,
+- },
+- {
+- title: "PathPrefix route with multiple patterns, URL prefix in request does not match",
+- route: new(Route).PathPrefix("/{v1:[0-9]{3}}/{v2:[0-9]{3}}"),
+- request: newRequest("GET", "http://localhost/111/aaa/333"),
+- vars: map[string]string{"v1": "111", "v2": "222"},
+- host: "",
+- path: "/111/222",
+- shouldMatch: false,
+- },
+- }
+-
+- for _, test := range tests {
+- testRoute(t, test)
+- }
+-}
+-
+-func TestHostPath(t *testing.T) {
+- tests := []routeTest{
+- {
+- title: "Host and Path route, match",
+- route: new(Route).Host("aaa.bbb.ccc").Path("/111/222/333"),
+- request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: true,
+- },
+- {
+- title: "Host and Path route, wrong host in request URL",
+- route: new(Route).Host("aaa.bbb.ccc").Path("/111/222/333"),
+- request: newRequest("GET", "http://aaa.222.ccc/111/222/333"),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: false,
+- },
+- {
+- title: "Host and Path route with pattern, match",
+- route: new(Route).Host("aaa.{v1:[a-z]{3}}.ccc").Path("/111/{v2:[0-9]{3}}/333"),
+- request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"),
+- vars: map[string]string{"v1": "bbb", "v2": "222"},
+- host: "aaa.bbb.ccc",
+- path: "/111/222/333",
+- shouldMatch: true,
+- },
+- {
+- title: "Host and Path route with pattern, URL in request does not match",
+- route: new(Route).Host("aaa.{v1:[a-z]{3}}.ccc").Path("/111/{v2:[0-9]{3}}/333"),
+- request: newRequest("GET", "http://aaa.222.ccc/111/222/333"),
+- vars: map[string]string{"v1": "bbb", "v2": "222"},
+- host: "aaa.bbb.ccc",
+- path: "/111/222/333",
+- shouldMatch: false,
+- },
+- {
+- title: "Host and Path route with multiple patterns, match",
+- route: new(Route).Host("{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}").Path("/{v4:[0-9]{3}}/{v5:[0-9]{3}}/{v6:[0-9]{3}}"),
+- request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"),
+- vars: map[string]string{"v1": "aaa", "v2": "bbb", "v3": "ccc", "v4": "111", "v5": "222", "v6": "333"},
+- host: "aaa.bbb.ccc",
+- path: "/111/222/333",
+- shouldMatch: true,
+- },
+- {
+- title: "Host and Path route with multiple patterns, URL in request does not match",
+- route: new(Route).Host("{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}").Path("/{v4:[0-9]{3}}/{v5:[0-9]{3}}/{v6:[0-9]{3}}"),
+- request: newRequest("GET", "http://aaa.222.ccc/111/222/333"),
+- vars: map[string]string{"v1": "aaa", "v2": "bbb", "v3": "ccc", "v4": "111", "v5": "222", "v6": "333"},
+- host: "aaa.bbb.ccc",
+- path: "/111/222/333",
+- shouldMatch: false,
+- },
+- }
+-
+- for _, test := range tests {
+- testRoute(t, test)
+- }
+-}
+-
+-func TestHeaders(t *testing.T) {
+- // newRequestHeaders creates a new request with a method, url, and headers
+- newRequestHeaders := func(method, url string, headers map[string]string) *http.Request {
+- req, err := http.NewRequest(method, url, nil)
+- if err != nil {
+- panic(err)
+- }
+- for k, v := range headers {
+- req.Header.Add(k, v)
+- }
+- return req
+- }
+-
+- tests := []routeTest{
+- {
+- title: "Headers route, match",
+- route: new(Route).Headers("foo", "bar", "baz", "ding"),
+- request: newRequestHeaders("GET", "http://localhost", map[string]string{"foo": "bar", "baz": "ding"}),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: true,
+- },
+- {
+- title: "Headers route, bad header values",
+- route: new(Route).Headers("foo", "bar", "baz", "ding"),
+- request: newRequestHeaders("GET", "http://localhost", map[string]string{"foo": "bar", "baz": "dong"}),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: false,
+- },
+- }
+-
+- for _, test := range tests {
+- testRoute(t, test)
+- }
+-
+-}
+-
+-func TestMethods(t *testing.T) {
+- tests := []routeTest{
+- {
+- title: "Methods route, match GET",
+- route: new(Route).Methods("GET", "POST"),
+- request: newRequest("GET", "http://localhost"),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: true,
+- },
+- {
+- title: "Methods route, match POST",
+- route: new(Route).Methods("GET", "POST"),
+- request: newRequest("POST", "http://localhost"),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: true,
+- },
+- {
+- title: "Methods route, bad method",
+- route: new(Route).Methods("GET", "POST"),
+- request: newRequest("PUT", "http://localhost"),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: false,
+- },
+- }
+-
+- for _, test := range tests {
+- testRoute(t, test)
+- }
+-}
+-
+-func TestQueries(t *testing.T) {
+- tests := []routeTest{
+- {
+- title: "Queries route, match",
+- route: new(Route).Queries("foo", "bar", "baz", "ding"),
+- request: newRequest("GET", "http://localhost?foo=bar&baz=ding"),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: true,
+- },
+- {
+- title: "Queries route, bad query",
+- route: new(Route).Queries("foo", "bar", "baz", "ding"),
+- request: newRequest("GET", "http://localhost?foo=bar&baz=dong"),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: false,
+- },
+- }
+-
+- for _, test := range tests {
+- testRoute(t, test)
+- }
+-}
+-
+-func TestSchemes(t *testing.T) {
+- tests := []routeTest{
+- // Schemes
+- {
+- title: "Schemes route, match https",
+- route: new(Route).Schemes("https", "ftp"),
+- request: newRequest("GET", "https://localhost"),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: true,
+- },
+- {
+- title: "Schemes route, match ftp",
+- route: new(Route).Schemes("https", "ftp"),
+- request: newRequest("GET", "ftp://localhost"),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: true,
+- },
+- {
+- title: "Schemes route, bad scheme",
+- route: new(Route).Schemes("https", "ftp"),
+- request: newRequest("GET", "http://localhost"),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: false,
+- },
+- }
+- for _, test := range tests {
+- testRoute(t, test)
+- }
+-}
+-
+-func TestMatcherFunc(t *testing.T) {
+- m := func(r *http.Request, m *RouteMatch) bool {
+- if r.URL.Host == "aaa.bbb.ccc" {
+- return true
+- }
+- return false
+- }
+-
+- tests := []routeTest{
+- {
+- title: "MatchFunc route, match",
+- route: new(Route).MatcherFunc(m),
+- request: newRequest("GET", "http://aaa.bbb.ccc"),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: true,
+- },
+- {
+- title: "MatchFunc route, non-match",
+- route: new(Route).MatcherFunc(m),
+- request: newRequest("GET", "http://aaa.222.ccc"),
+- vars: map[string]string{},
+- host: "",
+- path: "",
+- shouldMatch: false,
+- },
+- }
+-
+- for _, test := range tests {
+- testRoute(t, test)
+- }
+-}
+-
+-func TestSubRouter(t *testing.T) {
+- subrouter1 := new(Route).Host("{v1:[a-z]+}.google.com").Subrouter()
+- subrouter2 := new(Route).PathPrefix("/foo/{v1}").Subrouter()
+-
+- tests := []routeTest{
+- {
+- route: subrouter1.Path("/{v2:[a-z]+}"),
+- request: newRequest("GET", "http://aaa.google.com/bbb"),
+- vars: map[string]string{"v1": "aaa", "v2": "bbb"},
+- host: "aaa.google.com",
+- path: "/bbb",
+- shouldMatch: true,
+- },
+- {
+- route: subrouter1.Path("/{v2:[a-z]+}"),
+- request: newRequest("GET", "http://111.google.com/111"),
+- vars: map[string]string{"v1": "aaa", "v2": "bbb"},
+- host: "aaa.google.com",
+- path: "/bbb",
+- shouldMatch: false,
+- },
+- {
+- route: subrouter2.Path("/baz/{v2}"),
+- request: newRequest("GET", "http://localhost/foo/bar/baz/ding"),
+- vars: map[string]string{"v1": "bar", "v2": "ding"},
+- host: "",
+- path: "/foo/bar/baz/ding",
+- shouldMatch: true,
+- },
+- {
+- route: subrouter2.Path("/baz/{v2}"),
+- request: newRequest("GET", "http://localhost/foo/bar"),
+- vars: map[string]string{"v1": "bar", "v2": "ding"},
+- host: "",
+- path: "/foo/bar/baz/ding",
+- shouldMatch: false,
+- },
+- }
+-
+- for _, test := range tests {
+- testRoute(t, test)
+- }
+-}
+-
+-func TestNamedRoutes(t *testing.T) {
+- r1 := NewRouter()
+- r1.NewRoute().Name("a")
+- r1.NewRoute().Name("b")
+- r1.NewRoute().Name("c")
+-
+- r2 := r1.NewRoute().Subrouter()
+- r2.NewRoute().Name("d")
+- r2.NewRoute().Name("e")
+- r2.NewRoute().Name("f")
+-
+- r3 := r2.NewRoute().Subrouter()
+- r3.NewRoute().Name("g")
+- r3.NewRoute().Name("h")
+- r3.NewRoute().Name("i")
+-
+- if r1.namedRoutes == nil || len(r1.namedRoutes) != 9 {
+- t.Errorf("Expected 9 named routes, got %v", r1.namedRoutes)
+- } else if r1.Get("i") == nil {
+- t.Errorf("Subroute name not registered")
+- }
+-}
+-
+-func TestStrictSlash(t *testing.T) {
+- var r *Router
+- var req *http.Request
+- var route *Route
+- var match *RouteMatch
+- var matched bool
+-
+- // StrictSlash should be ignored for path prefix.
+- // So we register a route ending in slash but it doesn't attempt to add
+- // the slash for a path not ending in slash.
+- r = NewRouter()
+- r.StrictSlash(true)
+- route = r.NewRoute().PathPrefix("/static/")
+- req, _ = http.NewRequest("GET", "http://localhost/static/logo.png", nil)
+- match = new(RouteMatch)
+- matched = r.Match(req, match)
+- if !matched {
+- t.Errorf("Should match request %q -- %v", req.URL.Path, getRouteTemplate(route))
+- }
+- if match.Handler != nil {
+- t.Errorf("Should not redirect")
+- }
+-}
+-
+-// ----------------------------------------------------------------------------
+-// Helpers
+-// ----------------------------------------------------------------------------
+-
+-func getRouteTemplate(route *Route) string {
+- host, path := "none", "none"
+- if route.regexp != nil {
+- if route.regexp.host != nil {
+- host = route.regexp.host.template
+- }
+- if route.regexp.path != nil {
+- path = route.regexp.path.template
+- }
+- }
+- return fmt.Sprintf("Host: %v, Path: %v", host, path)
+-}
+-
+-func testRoute(t *testing.T, test routeTest) {
+- request := test.request
+- route := test.route
+- vars := test.vars
+- shouldMatch := test.shouldMatch
+- host := test.host
+- path := test.path
+- url := test.host + test.path
+-
+- var match RouteMatch
+- ok := route.Match(request, &match)
+- if ok != shouldMatch {
+- msg := "Should match"
+- if !shouldMatch {
+- msg = "Should not match"
+- }
+- t.Errorf("(%v) %v:\nRoute: %#v\nRequest: %#v\nVars: %v\n", test.title, msg, route, request, vars)
+- return
+- }
+- if shouldMatch {
+- if test.vars != nil && !stringMapEqual(test.vars, match.Vars) {
+- t.Errorf("(%v) Vars not equal: expected %v, got %v", test.title, vars, match.Vars)
+- return
+- }
+- if host != "" {
+- u, _ := test.route.URLHost(mapToPairs(match.Vars)...)
+- if host != u.Host {
+- t.Errorf("(%v) URLHost not equal: expected %v, got %v -- %v", test.title, host, u.Host, getRouteTemplate(route))
+- return
+- }
+- }
+- if path != "" {
+- u, _ := route.URLPath(mapToPairs(match.Vars)...)
+- if path != u.Path {
+- t.Errorf("(%v) URLPath not equal: expected %v, got %v -- %v", test.title, path, u.Path, getRouteTemplate(route))
+- return
+- }
+- }
+- if url != "" {
+- u, _ := route.URL(mapToPairs(match.Vars)...)
+- if url != u.Host+u.Path {
+- t.Errorf("(%v) URL not equal: expected %v, got %v -- %v", test.title, url, u.Host+u.Path, getRouteTemplate(route))
+- return
+- }
+- }
+- }
+-}
+-
+-// https://plus.google.com/101022900381697718949/posts/eWy6DjFJ6uW
+-func TestSubrouterHeader(t *testing.T) {
+- expected := "func1 response"
+- func1 := func(w http.ResponseWriter, r *http.Request) {
+- fmt.Fprint(w, expected)
+- }
+- func2 := func(http.ResponseWriter, *http.Request) {}
+-
+- r := NewRouter()
+- s := r.Headers("SomeSpecialHeader", "").Subrouter()
+- s.HandleFunc("/", func1).Name("func1")
+- r.HandleFunc("/", func2).Name("func2")
+-
+- req, _ := http.NewRequest("GET", "http://localhost/", nil)
+- req.Header.Add("SomeSpecialHeader", "foo")
+- match := new(RouteMatch)
+- matched := r.Match(req, match)
+- if !matched {
+- t.Errorf("Should match request")
+- }
+- if match.Route.GetName() != "func1" {
+- t.Errorf("Expecting func1 handler, got %s", match.Route.GetName())
+- }
+- resp := NewRecorder()
+- match.Handler.ServeHTTP(resp, req)
+- if resp.Body.String() != expected {
+- t.Errorf("Expecting %q", expected)
+- }
+-}
+-
+-// mapToPairs converts a string map to a slice of string pairs
+-func mapToPairs(m map[string]string) []string {
+- var i int
+- p := make([]string, len(m)*2)
+- for k, v := range m {
+- p[i] = k
+- p[i+1] = v
+- i += 2
+- }
+- return p
+-}
+-
+-// stringMapEqual checks the equality of two string maps
+-func stringMapEqual(m1, m2 map[string]string) bool {
+- nil1 := m1 == nil
+- nil2 := m2 == nil
+- if nil1 != nil2 || len(m1) != len(m2) {
+- return false
+- }
+- for k, v := range m1 {
+- if v != m2[k] {
+- return false
+- }
+- }
+- return true
+-}
+-
+-// newRequest is a helper function to create a new request with a method and url
+-func newRequest(method, url string) *http.Request {
+- req, err := http.NewRequest(method, url, nil)
+- if err != nil {
+- panic(err)
+- }
+- return req
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/mux/old_test.go docker-devmapper/vendor/src/github.com/gorilla/mux/old_test.go
+--- docker-0.6.2/vendor/src/github.com/gorilla/mux/old_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/mux/old_test.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,758 +0,0 @@
+-// Old tests ported to Go1. This is a mess. Want to drop it one day.
+-
+-// Copyright 2011 Gorilla 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 mux
+-
+-import (
+- "bytes"
+- "net/http"
+- "testing"
+-)
+-
+-// ----------------------------------------------------------------------------
+-// ResponseRecorder
+-// ----------------------------------------------------------------------------
+-// Copyright 2009 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.
+-
+-// ResponseRecorder is an implementation of http.ResponseWriter that
+-// records its mutations for later inspection in tests.
+-type ResponseRecorder struct {
+- Code int // the HTTP response code from WriteHeader
+- HeaderMap http.Header // the HTTP response headers
+- Body *bytes.Buffer // if non-nil, the bytes.Buffer to append written data to
+- Flushed bool
+-}
+-
+-// NewRecorder returns an initialized ResponseRecorder.
+-func NewRecorder() *ResponseRecorder {
+- return &ResponseRecorder{
+- HeaderMap: make(http.Header),
+- Body: new(bytes.Buffer),
+- }
+-}
+-
+-// DefaultRemoteAddr is the default remote address to return in RemoteAddr if
+-// an explicit DefaultRemoteAddr isn't set on ResponseRecorder.
+-const DefaultRemoteAddr = "1.2.3.4"
+-
+-// Header returns the response headers.
+-func (rw *ResponseRecorder) Header() http.Header {
+- return rw.HeaderMap
+-}
+-
+-// Write always succeeds and writes to rw.Body, if not nil.
+-func (rw *ResponseRecorder) Write(buf []byte) (int, error) {
+- if rw.Body != nil {
+- rw.Body.Write(buf)
+- }
+- if rw.Code == 0 {
+- rw.Code = http.StatusOK
+- }
+- return len(buf), nil
+-}
+-
+-// WriteHeader sets rw.Code.
+-func (rw *ResponseRecorder) WriteHeader(code int) {
+- rw.Code = code
+-}
+-
+-// Flush sets rw.Flushed to true.
+-func (rw *ResponseRecorder) Flush() {
+- rw.Flushed = true
+-}
+-
+-// ----------------------------------------------------------------------------
+-
+-func TestRouteMatchers(t *testing.T) {
+- var scheme, host, path, query, method string
+- var headers map[string]string
+- var resultVars map[bool]map[string]string
+-
+- router := NewRouter()
+- router.NewRoute().Host("{var1}.google.com").
+- Path("/{var2:[a-z]+}/{var3:[0-9]+}").
+- Queries("foo", "bar").
+- Methods("GET").
+- Schemes("https").
+- Headers("x-requested-with", "XMLHttpRequest")
+- router.NewRoute().Host("www.{var4}.com").
+- PathPrefix("/foo/{var5:[a-z]+}/{var6:[0-9]+}").
+- Queries("baz", "ding").
+- Methods("POST").
+- Schemes("http").
+- Headers("Content-Type", "application/json")
+-
+- reset := func() {
+- // Everything match.
+- scheme = "https"
+- host = "www.google.com"
+- path = "/product/42"
+- query = "?foo=bar"
+- method = "GET"
+- headers = map[string]string{"X-Requested-With": "XMLHttpRequest"}
+- resultVars = map[bool]map[string]string{
+- true: map[string]string{"var1": "www", "var2": "product", "var3": "42"},
+- false: map[string]string{},
+- }
+- }
+-
+- reset2 := func() {
+- // Everything match.
+- scheme = "http"
+- host = "www.google.com"
+- path = "/foo/product/42/path/that/is/ignored"
+- query = "?baz=ding"
+- method = "POST"
+- headers = map[string]string{"Content-Type": "application/json"}
+- resultVars = map[bool]map[string]string{
+- true: map[string]string{"var4": "google", "var5": "product", "var6": "42"},
+- false: map[string]string{},
+- }
+- }
+-
+- match := func(shouldMatch bool) {
+- url := scheme + "://" + host + path + query
+- request, _ := http.NewRequest(method, url, nil)
+- for key, value := range headers {
+- request.Header.Add(key, value)
+- }
+-
+- var routeMatch RouteMatch
+- matched := router.Match(request, &routeMatch)
+- if matched != shouldMatch {
+- // Need better messages. :)
+- if matched {
+- t.Errorf("Should match.")
+- } else {
+- t.Errorf("Should not match.")
+- }
+- }
+-
+- if matched {
+- currentRoute := routeMatch.Route
+- if currentRoute == nil {
+- t.Errorf("Expected a current route.")
+- }
+- vars := routeMatch.Vars
+- expectedVars := resultVars[shouldMatch]
+- if len(vars) != len(expectedVars) {
+- t.Errorf("Expected vars: %v Got: %v.", expectedVars, vars)
+- }
+- for name, value := range vars {
+- if expectedVars[name] != value {
+- t.Errorf("Expected vars: %v Got: %v.", expectedVars, vars)
+- }
+- }
+- }
+- }
+-
+- // 1st route --------------------------------------------------------------
+-
+- // Everything match.
+- reset()
+- match(true)
+-
+- // Scheme doesn't match.
+- reset()
+- scheme = "http"
+- match(false)
+-
+- // Host doesn't match.
+- reset()
+- host = "www.mygoogle.com"
+- match(false)
+-
+- // Path doesn't match.
+- reset()
+- path = "/product/notdigits"
+- match(false)
+-
+- // Query doesn't match.
+- reset()
+- query = "?foo=baz"
+- match(false)
+-
+- // Method doesn't match.
+- reset()
+- method = "POST"
+- match(false)
+-
+- // Header doesn't match.
+- reset()
+- headers = map[string]string{}
+- match(false)
+-
+- // Everything match, again.
+- reset()
+- match(true)
+-
+- // 2nd route --------------------------------------------------------------
+-
+- // Everything match.
+- reset2()
+- match(true)
+-
+- // Scheme doesn't match.
+- reset2()
+- scheme = "https"
+- match(false)
+-
+- // Host doesn't match.
+- reset2()
+- host = "sub.google.com"
+- match(false)
+-
+- // Path doesn't match.
+- reset2()
+- path = "/bar/product/42"
+- match(false)
+-
+- // Query doesn't match.
+- reset2()
+- query = "?foo=baz"
+- match(false)
+-
+- // Method doesn't match.
+- reset2()
+- method = "GET"
+- match(false)
+-
+- // Header doesn't match.
+- reset2()
+- headers = map[string]string{}
+- match(false)
+-
+- // Everything match, again.
+- reset2()
+- match(true)
+-}
+-
+-type headerMatcherTest struct {
+- matcher headerMatcher
+- headers map[string]string
+- result bool
+-}
+-
+-var headerMatcherTests = []headerMatcherTest{
+- {
+- matcher: headerMatcher(map[string]string{"x-requested-with": "XMLHttpRequest"}),
+- headers: map[string]string{"X-Requested-With": "XMLHttpRequest"},
+- result: true,
+- },
+- {
+- matcher: headerMatcher(map[string]string{"x-requested-with": ""}),
+- headers: map[string]string{"X-Requested-With": "anything"},
+- result: true,
+- },
+- {
+- matcher: headerMatcher(map[string]string{"x-requested-with": "XMLHttpRequest"}),
+- headers: map[string]string{},
+- result: false,
+- },
+-}
+-
+-type hostMatcherTest struct {
+- matcher *Route
+- url string
+- vars map[string]string
+- result bool
+-}
+-
+-var hostMatcherTests = []hostMatcherTest{
+- {
+- matcher: NewRouter().NewRoute().Host("{foo:[a-z][a-z][a-z]}.{bar:[a-z][a-z][a-z]}.{baz:[a-z][a-z][a-z]}"),
+- url: "http://abc.def.ghi/",
+- vars: map[string]string{"foo": "abc", "bar": "def", "baz": "ghi"},
+- result: true,
+- },
+- {
+- matcher: NewRouter().NewRoute().Host("{foo:[a-z][a-z][a-z]}.{bar:[a-z][a-z][a-z]}.{baz:[a-z][a-z][a-z]}"),
+- url: "http://a.b.c/",
+- vars: map[string]string{"foo": "abc", "bar": "def", "baz": "ghi"},
+- result: false,
+- },
+-}
+-
+-type methodMatcherTest struct {
+- matcher methodMatcher
+- method string
+- result bool
+-}
+-
+-var methodMatcherTests = []methodMatcherTest{
+- {
+- matcher: methodMatcher([]string{"GET", "POST", "PUT"}),
+- method: "GET",
+- result: true,
+- },
+- {
+- matcher: methodMatcher([]string{"GET", "POST", "PUT"}),
+- method: "POST",
+- result: true,
+- },
+- {
+- matcher: methodMatcher([]string{"GET", "POST", "PUT"}),
+- method: "PUT",
+- result: true,
+- },
+- {
+- matcher: methodMatcher([]string{"GET", "POST", "PUT"}),
+- method: "DELETE",
+- result: false,
+- },
+-}
+-
+-type pathMatcherTest struct {
+- matcher *Route
+- url string
+- vars map[string]string
+- result bool
+-}
+-
+-var pathMatcherTests = []pathMatcherTest{
+- {
+- matcher: NewRouter().NewRoute().Path("/{foo:[0-9][0-9][0-9]}/{bar:[0-9][0-9][0-9]}/{baz:[0-9][0-9][0-9]}"),
+- url: "http://localhost:8080/123/456/789",
+- vars: map[string]string{"foo": "123", "bar": "456", "baz": "789"},
+- result: true,
+- },
+- {
+- matcher: NewRouter().NewRoute().Path("/{foo:[0-9][0-9][0-9]}/{bar:[0-9][0-9][0-9]}/{baz:[0-9][0-9][0-9]}"),
+- url: "http://localhost:8080/1/2/3",
+- vars: map[string]string{"foo": "123", "bar": "456", "baz": "789"},
+- result: false,
+- },
+-}
+-
+-type queryMatcherTest struct {
+- matcher queryMatcher
+- url string
+- result bool
+-}
+-
+-var queryMatcherTests = []queryMatcherTest{
+- {
+- matcher: queryMatcher(map[string]string{"foo": "bar", "baz": "ding"}),
+- url: "http://localhost:8080/?foo=bar&baz=ding",
+- result: true,
+- },
+- {
+- matcher: queryMatcher(map[string]string{"foo": "", "baz": ""}),
+- url: "http://localhost:8080/?foo=anything&baz=anything",
+- result: true,
+- },
+- {
+- matcher: queryMatcher(map[string]string{"foo": "ding", "baz": "bar"}),
+- url: "http://localhost:8080/?foo=bar&baz=ding",
+- result: false,
+- },
+- {
+- matcher: queryMatcher(map[string]string{"bar": "foo", "ding": "baz"}),
+- url: "http://localhost:8080/?foo=bar&baz=ding",
+- result: false,
+- },
+-}
+-
+-type schemeMatcherTest struct {
+- matcher schemeMatcher
+- url string
+- result bool
+-}
+-
+-var schemeMatcherTests = []schemeMatcherTest{
+- {
+- matcher: schemeMatcher([]string{"http", "https"}),
+- url: "http://localhost:8080/",
+- result: true,
+- },
+- {
+- matcher: schemeMatcher([]string{"http", "https"}),
+- url: "https://localhost:8080/",
+- result: true,
+- },
+- {
+- matcher: schemeMatcher([]string{"https"}),
+- url: "http://localhost:8080/",
+- result: false,
+- },
+- {
+- matcher: schemeMatcher([]string{"http"}),
+- url: "https://localhost:8080/",
+- result: false,
+- },
+-}
+-
+-type urlBuildingTest struct {
+- route *Route
+- vars []string
+- url string
+-}
+-
+-var urlBuildingTests = []urlBuildingTest{
+- {
+- route: new(Route).Host("foo.domain.com"),
+- vars: []string{},
+- url: "http://foo.domain.com",
+- },
+- {
+- route: new(Route).Host("{subdomain}.domain.com"),
+- vars: []string{"subdomain", "bar"},
+- url: "http://bar.domain.com",
+- },
+- {
+- route: new(Route).Host("foo.domain.com").Path("/articles"),
+- vars: []string{},
+- url: "http://foo.domain.com/articles",
+- },
+- {
+- route: new(Route).Path("/articles"),
+- vars: []string{},
+- url: "/articles",
+- },
+- {
+- route: new(Route).Path("/articles/{category}/{id:[0-9]+}"),
+- vars: []string{"category", "technology", "id", "42"},
+- url: "/articles/technology/42",
+- },
+- {
+- route: new(Route).Host("{subdomain}.domain.com").Path("/articles/{category}/{id:[0-9]+}"),
+- vars: []string{"subdomain", "foo", "category", "technology", "id", "42"},
+- url: "http://foo.domain.com/articles/technology/42",
+- },
+-}
+-
+-func TestHeaderMatcher(t *testing.T) {
+- for _, v := range headerMatcherTests {
+- request, _ := http.NewRequest("GET", "http://localhost:8080/", nil)
+- for key, value := range v.headers {
+- request.Header.Add(key, value)
+- }
+- var routeMatch RouteMatch
+- result := v.matcher.Match(request, &routeMatch)
+- if result != v.result {
+- if v.result {
+- t.Errorf("%#v: should match %v.", v.matcher, request.Header)
+- } else {
+- t.Errorf("%#v: should not match %v.", v.matcher, request.Header)
+- }
+- }
+- }
+-}
+-
+-func TestHostMatcher(t *testing.T) {
+- for _, v := range hostMatcherTests {
+- request, _ := http.NewRequest("GET", v.url, nil)
+- var routeMatch RouteMatch
+- result := v.matcher.Match(request, &routeMatch)
+- vars := routeMatch.Vars
+- if result != v.result {
+- if v.result {
+- t.Errorf("%#v: should match %v.", v.matcher, v.url)
+- } else {
+- t.Errorf("%#v: should not match %v.", v.matcher, v.url)
+- }
+- }
+- if result {
+- if len(vars) != len(v.vars) {
+- t.Errorf("%#v: vars length should be %v, got %v.", v.matcher, len(v.vars), len(vars))
+- }
+- for name, value := range vars {
+- if v.vars[name] != value {
+- t.Errorf("%#v: expected value %v for key %v, got %v.", v.matcher, v.vars[name], name, value)
+- }
+- }
+- } else {
+- if len(vars) != 0 {
+- t.Errorf("%#v: vars length should be 0, got %v.", v.matcher, len(vars))
+- }
+- }
+- }
+-}
+-
+-func TestMethodMatcher(t *testing.T) {
+- for _, v := range methodMatcherTests {
+- request, _ := http.NewRequest(v.method, "http://localhost:8080/", nil)
+- var routeMatch RouteMatch
+- result := v.matcher.Match(request, &routeMatch)
+- if result != v.result {
+- if v.result {
+- t.Errorf("%#v: should match %v.", v.matcher, v.method)
+- } else {
+- t.Errorf("%#v: should not match %v.", v.matcher, v.method)
+- }
+- }
+- }
+-}
+-
+-func TestPathMatcher(t *testing.T) {
+- for _, v := range pathMatcherTests {
+- request, _ := http.NewRequest("GET", v.url, nil)
+- var routeMatch RouteMatch
+- result := v.matcher.Match(request, &routeMatch)
+- vars := routeMatch.Vars
+- if result != v.result {
+- if v.result {
+- t.Errorf("%#v: should match %v.", v.matcher, v.url)
+- } else {
+- t.Errorf("%#v: should not match %v.", v.matcher, v.url)
+- }
+- }
+- if result {
+- if len(vars) != len(v.vars) {
+- t.Errorf("%#v: vars length should be %v, got %v.", v.matcher, len(v.vars), len(vars))
+- }
+- for name, value := range vars {
+- if v.vars[name] != value {
+- t.Errorf("%#v: expected value %v for key %v, got %v.", v.matcher, v.vars[name], name, value)
+- }
+- }
+- } else {
+- if len(vars) != 0 {
+- t.Errorf("%#v: vars length should be 0, got %v.", v.matcher, len(vars))
+- }
+- }
+- }
+-}
+-
+-func TestQueryMatcher(t *testing.T) {
+- for _, v := range queryMatcherTests {
+- request, _ := http.NewRequest("GET", v.url, nil)
+- var routeMatch RouteMatch
+- result := v.matcher.Match(request, &routeMatch)
+- if result != v.result {
+- if v.result {
+- t.Errorf("%#v: should match %v.", v.matcher, v.url)
+- } else {
+- t.Errorf("%#v: should not match %v.", v.matcher, v.url)
+- }
+- }
+- }
+-}
+-
+-func TestSchemeMatcher(t *testing.T) {
+- for _, v := range queryMatcherTests {
+- request, _ := http.NewRequest("GET", v.url, nil)
+- var routeMatch RouteMatch
+- result := v.matcher.Match(request, &routeMatch)
+- if result != v.result {
+- if v.result {
+- t.Errorf("%#v: should match %v.", v.matcher, v.url)
+- } else {
+- t.Errorf("%#v: should not match %v.", v.matcher, v.url)
+- }
+- }
+- }
+-}
+-
+-func TestUrlBuilding(t *testing.T) {
+-
+- for _, v := range urlBuildingTests {
+- u, _ := v.route.URL(v.vars...)
+- url := u.String()
+- if url != v.url {
+- t.Errorf("expected %v, got %v", v.url, url)
+- /*
+- reversePath := ""
+- reverseHost := ""
+- if v.route.pathTemplate != nil {
+- reversePath = v.route.pathTemplate.Reverse
+- }
+- if v.route.hostTemplate != nil {
+- reverseHost = v.route.hostTemplate.Reverse
+- }
+-
+- t.Errorf("%#v:\nexpected: %q\ngot: %q\nreverse path: %q\nreverse host: %q", v.route, v.url, url, reversePath, reverseHost)
+- */
+- }
+- }
+-
+- ArticleHandler := func(w http.ResponseWriter, r *http.Request) {
+- }
+-
+- router := NewRouter()
+- router.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler).Name("article")
+-
+- url, _ := router.Get("article").URL("category", "technology", "id", "42")
+- expected := "/articles/technology/42"
+- if url.String() != expected {
+- t.Errorf("Expected %v, got %v", expected, url.String())
+- }
+-}
+-
+-func TestMatchedRouteName(t *testing.T) {
+- routeName := "stock"
+- router := NewRouter()
+- route := router.NewRoute().Path("/products/").Name(routeName)
+-
+- url := "http://www.domain.com/products/"
+- request, _ := http.NewRequest("GET", url, nil)
+- var rv RouteMatch
+- ok := router.Match(request, &rv)
+-
+- if !ok || rv.Route != route {
+- t.Errorf("Expected same route, got %+v.", rv.Route)
+- }
+-
+- retName := rv.Route.GetName()
+- if retName != routeName {
+- t.Errorf("Expected %q, got %q.", routeName, retName)
+- }
+-}
+-
+-func TestSubRouting(t *testing.T) {
+- // Example from docs.
+- router := NewRouter()
+- subrouter := router.NewRoute().Host("www.domain.com").Subrouter()
+- route := subrouter.NewRoute().Path("/products/").Name("products")
+-
+- url := "http://www.domain.com/products/"
+- request, _ := http.NewRequest("GET", url, nil)
+- var rv RouteMatch
+- ok := router.Match(request, &rv)
+-
+- if !ok || rv.Route != route {
+- t.Errorf("Expected same route, got %+v.", rv.Route)
+- }
+-
+- u, _ := router.Get("products").URL()
+- builtUrl := u.String()
+- // Yay, subroute aware of the domain when building!
+- if builtUrl != url {
+- t.Errorf("Expected %q, got %q.", url, builtUrl)
+- }
+-}
+-
+-func TestVariableNames(t *testing.T) {
+- route := new(Route).Host("{arg1}.domain.com").Path("/{arg1}/{arg2:[0-9]+}")
+- if route.err == nil {
+- t.Errorf("Expected error for duplicated variable names")
+- }
+-}
+-
+-func TestRedirectSlash(t *testing.T) {
+- var route *Route
+- var routeMatch RouteMatch
+- r := NewRouter()
+-
+- r.StrictSlash(false)
+- route = r.NewRoute()
+- if route.strictSlash != false {
+- t.Errorf("Expected false redirectSlash.")
+- }
+-
+- r.StrictSlash(true)
+- route = r.NewRoute()
+- if route.strictSlash != true {
+- t.Errorf("Expected true redirectSlash.")
+- }
+-
+- route = new(Route)
+- route.strictSlash = true
+- route.Path("/{arg1}/{arg2:[0-9]+}/")
+- request, _ := http.NewRequest("GET", "http://localhost/foo/123", nil)
+- routeMatch = RouteMatch{}
+- _ = route.Match(request, &routeMatch)
+- vars := routeMatch.Vars
+- if vars["arg1"] != "foo" {
+- t.Errorf("Expected foo.")
+- }
+- if vars["arg2"] != "123" {
+- t.Errorf("Expected 123.")
+- }
+- rsp := NewRecorder()
+- routeMatch.Handler.ServeHTTP(rsp, request)
+- if rsp.HeaderMap.Get("Location") != "http://localhost/foo/123/" {
+- t.Errorf("Expected redirect header.")
+- }
+-
+- route = new(Route)
+- route.strictSlash = true
+- route.Path("/{arg1}/{arg2:[0-9]+}")
+- request, _ = http.NewRequest("GET", "http://localhost/foo/123/", nil)
+- routeMatch = RouteMatch{}
+- _ = route.Match(request, &routeMatch)
+- vars = routeMatch.Vars
+- if vars["arg1"] != "foo" {
+- t.Errorf("Expected foo.")
+- }
+- if vars["arg2"] != "123" {
+- t.Errorf("Expected 123.")
+- }
+- rsp = NewRecorder()
+- routeMatch.Handler.ServeHTTP(rsp, request)
+- if rsp.HeaderMap.Get("Location") != "http://localhost/foo/123" {
+- t.Errorf("Expected redirect header.")
+- }
+-}
+-
+-// Test for the new regexp library, still not available in stable Go.
+-func TestNewRegexp(t *testing.T) {
+- var p *routeRegexp
+- var matches []string
+-
+- tests := map[string]map[string][]string{
+- "/{foo:a{2}}": {
+- "/a": nil,
+- "/aa": {"aa"},
+- "/aaa": nil,
+- "/aaaa": nil,
+- },
+- "/{foo:a{2,}}": {
+- "/a": nil,
+- "/aa": {"aa"},
+- "/aaa": {"aaa"},
+- "/aaaa": {"aaaa"},
+- },
+- "/{foo:a{2,3}}": {
+- "/a": nil,
+- "/aa": {"aa"},
+- "/aaa": {"aaa"},
+- "/aaaa": nil,
+- },
+- "/{foo:[a-z]{3}}/{bar:[a-z]{2}}": {
+- "/a": nil,
+- "/ab": nil,
+- "/abc": nil,
+- "/abcd": nil,
+- "/abc/ab": {"abc", "ab"},
+- "/abc/abc": nil,
+- "/abcd/ab": nil,
+- },
+- `/{foo:\w{3,}}/{bar:\d{2,}}`: {
+- "/a": nil,
+- "/ab": nil,
+- "/abc": nil,
+- "/abc/1": nil,
+- "/abc/12": {"abc", "12"},
+- "/abcd/12": {"abcd", "12"},
+- "/abcd/123": {"abcd", "123"},
+- },
+- }
+-
+- for pattern, paths := range tests {
+- p, _ = newRouteRegexp(pattern, false, false, false)
+- for path, result := range paths {
+- matches = p.regexp.FindStringSubmatch(path)
+- if result == nil {
+- if matches != nil {
+- t.Errorf("%v should not match %v.", pattern, path)
+- }
+- } else {
+- if len(matches) != len(result)+1 {
+- t.Errorf("Expected %v matches, got %v.", len(result)+1, len(matches))
+- } else {
+- for k, v := range result {
+- if matches[k+1] != v {
+- t.Errorf("Expected %v, got %v.", v, matches[k+1])
+- }
+- }
+- }
+- }
+- }
+- }
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/mux/README.md docker-devmapper/vendor/src/github.com/gorilla/mux/README.md
+--- docker-0.6.2/vendor/src/github.com/gorilla/mux/README.md 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/mux/README.md 1969-12-31 18:00:00.000000000 -0600
+@@ -1,6 +0,0 @@
+-mux
+-===
+-
+-gorilla/mux is a powerful URL router and dispatcher.
+-
+-Read the full documentation here: http://www.gorillatoolkit.org/pkg/mux
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/mux/regexp.go docker-devmapper/vendor/src/github.com/gorilla/mux/regexp.go
+--- docker-0.6.2/vendor/src/github.com/gorilla/mux/regexp.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/mux/regexp.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,247 +0,0 @@
+-// Copyright 2012 The Gorilla 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 mux
+-
+-import (
+- "bytes"
+- "fmt"
+- "net/http"
+- "net/url"
+- "regexp"
+- "strings"
+-)
+-
+-// newRouteRegexp parses a route template and returns a routeRegexp,
+-// used to match a host or path.
+-//
+-// It will extract named variables, assemble a regexp to be matched, create
+-// a "reverse" template to build URLs and compile regexps to validate variable
+-// values used in URL building.
+-//
+-// Previously we accepted only Python-like identifiers for variable
+-// names ([a-zA-Z_][a-zA-Z0-9_]*), but currently the only restriction is that
+-// name and pattern can't be empty, and names can't contain a colon.
+-func newRouteRegexp(tpl string, matchHost, matchPrefix, strictSlash bool) (*routeRegexp, error) {
+- // Check if it is well-formed.
+- idxs, errBraces := braceIndices(tpl)
+- if errBraces != nil {
+- return nil, errBraces
+- }
+- // Backup the original.
+- template := tpl
+- // Now let's parse it.
+- defaultPattern := "[^/]+"
+- if matchHost {
+- defaultPattern = "[^.]+"
+- matchPrefix, strictSlash = false, false
+- }
+- if matchPrefix {
+- strictSlash = false
+- }
+- // Set a flag for strictSlash.
+- endSlash := false
+- if strictSlash && strings.HasSuffix(tpl, "/") {
+- tpl = tpl[:len(tpl)-1]
+- endSlash = true
+- }
+- varsN := make([]string, len(idxs)/2)
+- varsR := make([]*regexp.Regexp, len(idxs)/2)
+- pattern := bytes.NewBufferString("^")
+- reverse := bytes.NewBufferString("")
+- var end int
+- var err error
+- for i := 0; i < len(idxs); i += 2 {
+- // Set all values we are interested in.
+- raw := tpl[end:idxs[i]]
+- end = idxs[i+1]
+- parts := strings.SplitN(tpl[idxs[i]+1:end-1], ":", 2)
+- name := parts[0]
+- patt := defaultPattern
+- if len(parts) == 2 {
+- patt = parts[1]
+- }
+- // Name or pattern can't be empty.
+- if name == "" || patt == "" {
+- return nil, fmt.Errorf("mux: missing name or pattern in %q",
+- tpl[idxs[i]:end])
+- }
+- // Build the regexp pattern.
+- fmt.Fprintf(pattern, "%s(%s)", regexp.QuoteMeta(raw), patt)
+- // Build the reverse template.
+- fmt.Fprintf(reverse, "%s%%s", raw)
+- // Append variable name and compiled pattern.
+- varsN[i/2] = name
+- varsR[i/2], err = regexp.Compile(fmt.Sprintf("^%s$", patt))
+- if err != nil {
+- return nil, err
+- }
+- }
+- // Add the remaining.
+- raw := tpl[end:]
+- pattern.WriteString(regexp.QuoteMeta(raw))
+- if strictSlash {
+- pattern.WriteString("[/]?")
+- }
+- if !matchPrefix {
+- pattern.WriteByte('$')
+- }
+- reverse.WriteString(raw)
+- if endSlash {
+- reverse.WriteByte('/')
+- }
+- // Compile full regexp.
+- reg, errCompile := regexp.Compile(pattern.String())
+- if errCompile != nil {
+- return nil, errCompile
+- }
+- // Done!
+- return &routeRegexp{
+- template: template,
+- matchHost: matchHost,
+- regexp: reg,
+- reverse: reverse.String(),
+- varsN: varsN,
+- varsR: varsR,
+- }, nil
+-}
+-
+-// routeRegexp stores a regexp to match a host or path and information to
+-// collect and validate route variables.
+-type routeRegexp struct {
+- // The unmodified template.
+- template string
+- // True for host match, false for path match.
+- matchHost bool
+- // Expanded regexp.
+- regexp *regexp.Regexp
+- // Reverse template.
+- reverse string
+- // Variable names.
+- varsN []string
+- // Variable regexps (validators).
+- varsR []*regexp.Regexp
+-}
+-
+-// Match matches the regexp against the URL host or path.
+-func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool {
+- if !r.matchHost {
+- return r.regexp.MatchString(req.URL.Path)
+- }
+- return r.regexp.MatchString(getHost(req))
+-}
+-
+-// url builds a URL part using the given values.
+-func (r *routeRegexp) url(pairs ...string) (string, error) {
+- values, err := mapFromPairs(pairs...)
+- if err != nil {
+- return "", err
+- }
+- urlValues := make([]interface{}, len(r.varsN))
+- for k, v := range r.varsN {
+- value, ok := values[v]
+- if !ok {
+- return "", fmt.Errorf("mux: missing route variable %q", v)
+- }
+- urlValues[k] = value
+- }
+- rv := fmt.Sprintf(r.reverse, urlValues...)
+- if !r.regexp.MatchString(rv) {
+- // The URL is checked against the full regexp, instead of checking
+- // individual variables. This is faster but to provide a good error
+- // message, we check individual regexps if the URL doesn't match.
+- for k, v := range r.varsN {
+- if !r.varsR[k].MatchString(values[v]) {
+- return "", fmt.Errorf(
+- "mux: variable %q doesn't match, expected %q", values[v],
+- r.varsR[k].String())
+- }
+- }
+- }
+- return rv, nil
+-}
+-
+-// braceIndices returns the first level curly brace indices from a string.
+-// It returns an error in case of unbalanced braces.
+-func braceIndices(s string) ([]int, error) {
+- var level, idx int
+- idxs := make([]int, 0)
+- for i := 0; i < len(s); i++ {
+- switch s[i] {
+- case '{':
+- if level++; level == 1 {
+- idx = i
+- }
+- case '}':
+- if level--; level == 0 {
+- idxs = append(idxs, idx, i+1)
+- } else if level < 0 {
+- return nil, fmt.Errorf("mux: unbalanced braces in %q", s)
+- }
+- }
+- }
+- if level != 0 {
+- return nil, fmt.Errorf("mux: unbalanced braces in %q", s)
+- }
+- return idxs, nil
+-}
+-
+-// ----------------------------------------------------------------------------
+-// routeRegexpGroup
+-// ----------------------------------------------------------------------------
+-
+-// routeRegexpGroup groups the route matchers that carry variables.
+-type routeRegexpGroup struct {
+- host *routeRegexp
+- path *routeRegexp
+-}
+-
+-// setMatch extracts the variables from the URL once a route matches.
+-func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) {
+- // Store host variables.
+- if v.host != nil {
+- hostVars := v.host.regexp.FindStringSubmatch(getHost(req))
+- if hostVars != nil {
+- for k, v := range v.host.varsN {
+- m.Vars[v] = hostVars[k+1]
+- }
+- }
+- }
+- // Store path variables.
+- if v.path != nil {
+- pathVars := v.path.regexp.FindStringSubmatch(req.URL.Path)
+- if pathVars != nil {
+- for k, v := range v.path.varsN {
+- m.Vars[v] = pathVars[k+1]
+- }
+- // Check if we should redirect.
+- if r.strictSlash {
+- p1 := strings.HasSuffix(req.URL.Path, "/")
+- p2 := strings.HasSuffix(v.path.template, "/")
+- if p1 != p2 {
+- u, _ := url.Parse(req.URL.String())
+- if p1 {
+- u.Path = u.Path[:len(u.Path)-1]
+- } else {
+- u.Path += "/"
+- }
+- m.Handler = http.RedirectHandler(u.String(), 301)
+- }
+- }
+- }
+- }
+-}
+-
+-// getHost tries its best to return the request host.
+-func getHost(r *http.Request) string {
+- if !r.URL.IsAbs() {
+- host := r.Host
+- // Slice off any port information.
+- if i := strings.Index(host, ":"); i != -1 {
+- host = host[:i]
+- }
+- return host
+- }
+- return r.URL.Host
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/gorilla/mux/route.go docker-devmapper/vendor/src/github.com/gorilla/mux/route.go
+--- docker-0.6.2/vendor/src/github.com/gorilla/mux/route.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/gorilla/mux/route.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,499 +0,0 @@
+-// Copyright 2012 The Gorilla 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 mux
+-
+-import (
+- "errors"
+- "fmt"
+- "net/http"
+- "net/url"
+- "strings"
+-)
+-
+-// Route stores information to match a request and build URLs.
+-type Route struct {
+- // Parent where the route was registered (a Router).
+- parent parentRoute
+- // Request handler for the route.
+- handler http.Handler
+- // List of matchers.
+- matchers []matcher
+- // Manager for the variables from host and path.
+- regexp *routeRegexpGroup
+- // If true, when the path pattern is "/path/", accessing "/path" will
+- // redirect to the former and vice versa.
+- strictSlash bool
+- // If true, this route never matches: it is only used to build URLs.
+- buildOnly bool
+- // The name used to build URLs.
+- name string
+- // Error resulted from building a route.
+- err error
+-}
+-
+-// Match matches the route against the request.
+-func (r *Route) Match(req *http.Request, match *RouteMatch) bool {
+- if r.buildOnly || r.err != nil {
+- return false
+- }
+- // Match everything.
+- for _, m := range r.matchers {
+- if matched := m.Match(req, match); !matched {
+- return false
+- }
+- }
+- // Yay, we have a match. Let's collect some info about it.
+- if match.Route == nil {
+- match.Route = r
+- }
+- if match.Handler == nil {
+- match.Handler = r.handler
+- }
+- if match.Vars == nil {
+- match.Vars = make(map[string]string)
+- }
+- // Set variables.
+- if r.regexp != nil {
+- r.regexp.setMatch(req, match, r)
+- }
+- return true
+-}
+-
+-// ----------------------------------------------------------------------------
+-// Route attributes
+-// ----------------------------------------------------------------------------
+-
+-// GetError returns an error resulted from building the route, if any.
+-func (r *Route) GetError() error {
+- return r.err
+-}
+-
+-// BuildOnly sets the route to never match: it is only used to build URLs.
+-func (r *Route) BuildOnly() *Route {
+- r.buildOnly = true
+- return r
+-}
+-
+-// Handler --------------------------------------------------------------------
+-
+-// Handler sets a handler for the route.
+-func (r *Route) Handler(handler http.Handler) *Route {
+- if r.err == nil {
+- r.handler = handler
+- }
+- return r
+-}
+-
+-// HandlerFunc sets a handler function for the route.
+-func (r *Route) HandlerFunc(f func(http.ResponseWriter, *http.Request)) *Route {
+- return r.Handler(http.HandlerFunc(f))
+-}
+-
+-// GetHandler returns the handler for the route, if any.
+-func (r *Route) GetHandler() http.Handler {
+- return r.handler
+-}
+-
+-// Name -----------------------------------------------------------------------
+-
+-// Name sets the name for the route, used to build URLs.
+-// If the name was registered already it will be overwritten.
+-func (r *Route) Name(name string) *Route {
+- if r.name != "" {
+- r.err = fmt.Errorf("mux: route already has name %q, can't set %q",
+- r.name, name)
+- }
+- if r.err == nil {
+- r.name = name
+- r.getNamedRoutes()[name] = r
+- }
+- return r
+-}
+-
+-// GetName returns the name for the route, if any.
+-func (r *Route) GetName() string {
+- return r.name
+-}
+-
+-// ----------------------------------------------------------------------------
+-// Matchers
+-// ----------------------------------------------------------------------------
+-
+-// matcher types try to match a request.
+-type matcher interface {
+- Match(*http.Request, *RouteMatch) bool
+-}
+-
+-// addMatcher adds a matcher to the route.
+-func (r *Route) addMatcher(m matcher) *Route {
+- if r.err == nil {
+- r.matchers = append(r.matchers, m)
+- }
+- return r
+-}
+-
+-// addRegexpMatcher adds a host or path matcher and builder to a route.
+-func (r *Route) addRegexpMatcher(tpl string, matchHost, matchPrefix bool) error {
+- if r.err != nil {
+- return r.err
+- }
+- r.regexp = r.getRegexpGroup()
+- if !matchHost {
+- if len(tpl) == 0 || tpl[0] != '/' {
+- return fmt.Errorf("mux: path must start with a slash, got %q", tpl)
+- }
+- if r.regexp.path != nil {
+- tpl = strings.TrimRight(r.regexp.path.template, "/") + tpl
+- }
+- }
+- rr, err := newRouteRegexp(tpl, matchHost, matchPrefix, r.strictSlash)
+- if err != nil {
+- return err
+- }
+- if matchHost {
+- if r.regexp.path != nil {
+- if err = uniqueVars(rr.varsN, r.regexp.path.varsN); err != nil {
+- return err
+- }
+- }
+- r.regexp.host = rr
+- } else {
+- if r.regexp.host != nil {
+- if err = uniqueVars(rr.varsN, r.regexp.host.varsN); err != nil {
+- return err
+- }
+- }
+- r.regexp.path = rr
+- }
+- r.addMatcher(rr)
+- return nil
+-}
+-
+-// Headers --------------------------------------------------------------------
+-
+-// headerMatcher matches the request against header values.
+-type headerMatcher map[string]string
+-
+-func (m headerMatcher) Match(r *http.Request, match *RouteMatch) bool {
+- return matchMap(m, r.Header, true)
+-}
+-
+-// Headers adds a matcher for request header values.
+-// It accepts a sequence of key/value pairs to be matched. For example:
+-//
+-// r := mux.NewRouter()
+-// r.Headers("Content-Type", "application/json",
+-// "X-Requested-With", "XMLHttpRequest")
+-//
+-// The above route will only match if both request header values match.
+-//
+-// It the value is an empty string, it will match any value if the key is set.
+-func (r *Route) Headers(pairs ...string) *Route {
+- if r.err == nil {
+- var headers map[string]string
+- headers, r.err = mapFromPairs(pairs...)
+- return r.addMatcher(headerMatcher(headers))
+- }
+- return r
+-}
+-
+-// Host -----------------------------------------------------------------------
+-
+-// Host adds a matcher for the URL host.
+-// It accepts a template with zero or more URL variables enclosed by {}.
+-// Variables can define an optional regexp pattern to me matched:
+-//
+-// - {name} matches anything until the next dot.
+-//
+-// - {name:pattern} matches the given regexp pattern.
+-//
+-// For example:
+-//
+-// r := mux.NewRouter()
+-// r.Host("www.domain.com")
+-// r.Host("{subdomain}.domain.com")
+-// r.Host("{subdomain:[a-z]+}.domain.com")
+-//
+-// Variable names must be unique in a given route. They can be retrieved
+-// calling mux.Vars(request).
+-func (r *Route) Host(tpl string) *Route {
+- r.err = r.addRegexpMatcher(tpl, true, false)
+- return r
+-}
+-
+-// MatcherFunc ----------------------------------------------------------------
+-
+-// MatcherFunc is the function signature used by custom matchers.
+-type MatcherFunc func(*http.Request, *RouteMatch) bool
+-
+-func (m MatcherFunc) Match(r *http.Request, match *RouteMatch) bool {
+- return m(r, match)
+-}
+-
+-// MatcherFunc adds a custom function to be used as request matcher.
+-func (r *Route) MatcherFunc(f MatcherFunc) *Route {
+- return r.addMatcher(f)
+-}
+-
+-// Methods --------------------------------------------------------------------
+-
+-// methodMatcher matches the request against HTTP methods.
+-type methodMatcher []string
+-
+-func (m methodMatcher) Match(r *http.Request, match *RouteMatch) bool {
+- return matchInArray(m, r.Method)
+-}
+-
+-// Methods adds a matcher for HTTP methods.
+-// It accepts a sequence of one or more methods to be matched, e.g.:
+-// "GET", "POST", "PUT".
+-func (r *Route) Methods(methods ...string) *Route {
+- for k, v := range methods {
+- methods[k] = strings.ToUpper(v)
+- }
+- return r.addMatcher(methodMatcher(methods))
+-}
+-
+-// Path -----------------------------------------------------------------------
+-
+-// Path adds a matcher for the URL path.
+-// It accepts a template with zero or more URL variables enclosed by {}.
+-// Variables can define an optional regexp pattern to me matched:
+-//
+-// - {name} matches anything until the next slash.
+-//
+-// - {name:pattern} matches the given regexp pattern.
+-//
+-// For example:
+-//
+-// r := mux.NewRouter()
+-// r.Path("/products/").Handler(ProductsHandler)
+-// r.Path("/products/{key}").Handler(ProductsHandler)
+-// r.Path("/articles/{category}/{id:[0-9]+}").
+-// Handler(ArticleHandler)
+-//
+-// Variable names must be unique in a given route. They can be retrieved
+-// calling mux.Vars(request).
+-func (r *Route) Path(tpl string) *Route {
+- r.err = r.addRegexpMatcher(tpl, false, false)
+- return r
+-}
+-
+-// PathPrefix -----------------------------------------------------------------
+-
+-// PathPrefix adds a matcher for the URL path prefix.
+-func (r *Route) PathPrefix(tpl string) *Route {
+- r.strictSlash = false
+- r.err = r.addRegexpMatcher(tpl, false, true)
+- return r
+-}
+-
+-// Query ----------------------------------------------------------------------
+-
+-// queryMatcher matches the request against URL queries.
+-type queryMatcher map[string]string
+-
+-func (m queryMatcher) Match(r *http.Request, match *RouteMatch) bool {
+- return matchMap(m, r.URL.Query(), false)
+-}
+-
+-// Queries adds a matcher for URL query values.
+-// It accepts a sequence of key/value pairs. For example:
+-//
+-// r := mux.NewRouter()
+-// r.Queries("foo", "bar", "baz", "ding")
+-//
+-// The above route will only match if the URL contains the defined queries
+-// values, e.g.: ?foo=bar&baz=ding.
+-//
+-// It the value is an empty string, it will match any value if the key is set.
+-func (r *Route) Queries(pairs ...string) *Route {
+- if r.err == nil {
+- var queries map[string]string
+- queries, r.err = mapFromPairs(pairs...)
+- return r.addMatcher(queryMatcher(queries))
+- }
+- return r
+-}
+-
+-// Schemes --------------------------------------------------------------------
+-
+-// schemeMatcher matches the request against URL schemes.
+-type schemeMatcher []string
+-
+-func (m schemeMatcher) Match(r *http.Request, match *RouteMatch) bool {
+- return matchInArray(m, r.URL.Scheme)
+-}
+-
+-// Schemes adds a matcher for URL schemes.
+-// It accepts a sequence schemes to be matched, e.g.: "http", "https".
+-func (r *Route) Schemes(schemes ...string) *Route {
+- for k, v := range schemes {
+- schemes[k] = strings.ToLower(v)
+- }
+- return r.addMatcher(schemeMatcher(schemes))
+-}
+-
+-// Subrouter ------------------------------------------------------------------
+-
+-// Subrouter creates a subrouter for the route.
+-//
+-// It will test the inner routes only if the parent route matched. For example:
+-//
+-// r := mux.NewRouter()
+-// s := r.Host("www.domain.com").Subrouter()
+-// s.HandleFunc("/products/", ProductsHandler)
+-// s.HandleFunc("/products/{key}", ProductHandler)
+-// s.HandleFunc("/articles/{category}/{id:[0-9]+}"), ArticleHandler)
+-//
+-// Here, the routes registered in the subrouter won't be tested if the host
+-// doesn't match.
+-func (r *Route) Subrouter() *Router {
+- router := &Router{parent: r, strictSlash: r.strictSlash}
+- r.addMatcher(router)
+- return router
+-}
+-
+-// ----------------------------------------------------------------------------
+-// URL building
+-// ----------------------------------------------------------------------------
+-
+-// URL builds a URL for the route.
+-//
+-// It accepts a sequence of key/value pairs for the route variables. For
+-// example, given this route:
+-//
+-// r := mux.NewRouter()
+-// r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler).
+-// Name("article")
+-//
+-// ...a URL for it can be built using:
+-//
+-// url, err := r.Get("article").URL("category", "technology", "id", "42")
+-//
+-// ...which will return an url.URL with the following path:
+-//
+-// "/articles/technology/42"
+-//
+-// This also works for host variables:
+-//
+-// r := mux.NewRouter()
+-// r.Host("{subdomain}.domain.com").
+-// HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler).
+-// Name("article")
+-//
+-// // url.String() will be "http://news.domain.com/articles/technology/42"
+-// url, err := r.Get("article").URL("subdomain", "news",
+-// "category", "technology",
+-// "id", "42")
+-//
+-// All variables defined in the route are required, and their values must
+-// conform to the corresponding patterns.
+-func (r *Route) URL(pairs ...string) (*url.URL, error) {
+- if r.err != nil {
+- return nil, r.err
+- }
+- if r.regexp == nil {
+- return nil, errors.New("mux: route doesn't have a host or path")
+- }
+- var scheme, host, path string
+- var err error
+- if r.regexp.host != nil {
+- // Set a default scheme.
+- scheme = "http"
+- if host, err = r.regexp.host.url(pairs...); err != nil {
+- return nil, err
+- }
+- }
+- if r.regexp.path != nil {
+- if path, err = r.regexp.path.url(pairs...); err != nil {
+- return nil, err
+- }
+- }
+- return &url.URL{
+- Scheme: scheme,
+- Host: host,
+- Path: path,
+- }, nil
+-}
+-
+-// URLHost builds the host part of the URL for a route. See Route.URL().
+-//
+-// The route must have a host defined.
+-func (r *Route) URLHost(pairs ...string) (*url.URL, error) {
+- if r.err != nil {
+- return nil, r.err
+- }
+- if r.regexp == nil || r.regexp.host == nil {
+- return nil, errors.New("mux: route doesn't have a host")
+- }
+- host, err := r.regexp.host.url(pairs...)
+- if err != nil {
+- return nil, err
+- }
+- return &url.URL{
+- Scheme: "http",
+- Host: host,
+- }, nil
+-}
+-
+-// URLPath builds the path part of the URL for a route. See Route.URL().
+-//
+-// The route must have a path defined.
+-func (r *Route) URLPath(pairs ...string) (*url.URL, error) {
+- if r.err != nil {
+- return nil, r.err
+- }
+- if r.regexp == nil || r.regexp.path == nil {
+- return nil, errors.New("mux: route doesn't have a path")
+- }
+- path, err := r.regexp.path.url(pairs...)
+- if err != nil {
+- return nil, err
+- }
+- return &url.URL{
+- Path: path,
+- }, nil
+-}
+-
+-// ----------------------------------------------------------------------------
+-// parentRoute
+-// ----------------------------------------------------------------------------
+-
+-// parentRoute allows routes to know about parent host and path definitions.
+-type parentRoute interface {
+- getNamedRoutes() map[string]*Route
+- getRegexpGroup() *routeRegexpGroup
+-}
+-
+-// getNamedRoutes returns the map where named routes are registered.
+-func (r *Route) getNamedRoutes() map[string]*Route {
+- if r.parent == nil {
+- // During tests router is not always set.
+- r.parent = NewRouter()
+- }
+- return r.parent.getNamedRoutes()
+-}
+-
+-// getRegexpGroup returns regexp definitions from this route.
+-func (r *Route) getRegexpGroup() *routeRegexpGroup {
+- if r.regexp == nil {
+- if r.parent == nil {
+- // During tests router is not always set.
+- r.parent = NewRouter()
+- }
+- regexp := r.parent.getRegexpGroup()
+- if regexp == nil {
+- r.regexp = new(routeRegexpGroup)
+- } else {
+- // Copy.
+- r.regexp = &routeRegexpGroup{
+- host: regexp.host,
+- path: regexp.path,
+- }
+- }
+- }
+- return r.regexp
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/kr/pty/doc.go docker-devmapper/vendor/src/github.com/kr/pty/doc.go
+--- docker-0.6.2/vendor/src/github.com/kr/pty/doc.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/kr/pty/doc.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,11 +0,0 @@
+-// Package pty provides functions for working with Unix terminals.
+-package pty
+-
+-import (
+- "os"
+-)
+-
+-// Opens a pty and its corresponding tty.
+-func Open() (pty, tty *os.File, err error) {
+- return open()
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/kr/pty/.gitignore docker-devmapper/vendor/src/github.com/kr/pty/.gitignore
+--- docker-0.6.2/vendor/src/github.com/kr/pty/.gitignore 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/kr/pty/.gitignore 1969-12-31 18:00:00.000000000 -0600
+@@ -1,4 +0,0 @@
+-[568].out
+-_go*
+-_test*
+-_obj
+diff -uNr docker-0.6.2/vendor/src/github.com/kr/pty/License docker-devmapper/vendor/src/github.com/kr/pty/License
+--- docker-0.6.2/vendor/src/github.com/kr/pty/License 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/kr/pty/License 1969-12-31 18:00:00.000000000 -0600
+@@ -1,23 +0,0 @@
+-Copyright (c) 2011 Keith Rarick
+-
+-Permission is hereby granted, free of charge, to any person
+-obtaining a copy of this software and associated
+-documentation files (the "Software"), to deal in the
+-Software without restriction, including without limitation
+-the rights to use, copy, modify, merge, publish, distribute,
+-sublicense, and/or sell copies of the Software, and to
+-permit persons to whom the Software is furnished to do so,
+-subject to the following conditions:
+-
+-The above copyright notice and this permission notice shall
+-be included in all copies or substantial portions of the
+-Software.
+-
+-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+-KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+-PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+-OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+diff -uNr docker-0.6.2/vendor/src/github.com/kr/pty/pty_darwin.go docker-devmapper/vendor/src/github.com/kr/pty/pty_darwin.go
+--- docker-0.6.2/vendor/src/github.com/kr/pty/pty_darwin.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/kr/pty/pty_darwin.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,69 +0,0 @@
+-package pty
+-
+-import (
+- "errors"
+- "os"
+- "syscall"
+- "unsafe"
+-)
+-
+-// see ioccom.h
+-const sys_IOCPARM_MASK = 0x1fff
+-
+-func open() (pty, tty *os.File, err error) {
+- p, err := os.OpenFile("/dev/ptmx", os.O_RDWR, 0)
+- if err != nil {
+- return nil, nil, err
+- }
+-
+- sname, err := ptsname(p)
+- if err != nil {
+- return nil, nil, err
+- }
+-
+- err = grantpt(p)
+- if err != nil {
+- return nil, nil, err
+- }
+-
+- err = unlockpt(p)
+- if err != nil {
+- return nil, nil, err
+- }
+-
+- t, err := os.OpenFile(sname, os.O_RDWR, 0)
+- if err != nil {
+- return nil, nil, err
+- }
+- return p, t, nil
+-}
+-
+-func ptsname(f *os.File) (string, error) {
+- var n [(syscall.TIOCPTYGNAME >> 16) & sys_IOCPARM_MASK]byte
+-
+- ioctl(f.Fd(), syscall.TIOCPTYGNAME, uintptr(unsafe.Pointer(&n)))
+- for i, c := range n {
+- if c == 0 {
+- return string(n[:i]), nil
+- }
+- }
+- return "", errors.New("TIOCPTYGNAME string not NUL-terminated")
+-}
+-
+-func grantpt(f *os.File) error {
+- var u int
+- return ioctl(f.Fd(), syscall.TIOCPTYGRANT, uintptr(unsafe.Pointer(&u)))
+-}
+-
+-func unlockpt(f *os.File) error {
+- var u int
+- return ioctl(f.Fd(), syscall.TIOCPTYUNLK, uintptr(unsafe.Pointer(&u)))
+-}
+-
+-func ioctl(fd, cmd, ptr uintptr) error {
+- _, _, e := syscall.Syscall(syscall.SYS_IOCTL, fd, cmd, ptr)
+- if e != 0 {
+- return syscall.ENOTTY
+- }
+- return nil
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/kr/pty/pty_linux.go docker-devmapper/vendor/src/github.com/kr/pty/pty_linux.go
+--- docker-0.6.2/vendor/src/github.com/kr/pty/pty_linux.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/kr/pty/pty_linux.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,63 +0,0 @@
+-package pty
+-
+-import (
+- "os"
+- "strconv"
+- "syscall"
+- "unsafe"
+-)
+-
+-const (
+- sys_TIOCGPTN = 0x80045430
+- sys_TIOCSPTLCK = 0x40045431
+-)
+-
+-func open() (pty, tty *os.File, err error) {
+- p, err := os.OpenFile("/dev/ptmx", os.O_RDWR, 0)
+- if err != nil {
+- return nil, nil, err
+- }
+-
+- sname, err := ptsname(p)
+- if err != nil {
+- return nil, nil, err
+- }
+-
+- err = unlockpt(p)
+- if err != nil {
+- return nil, nil, err
+- }
+-
+- t, err := os.OpenFile(sname, os.O_RDWR, 0)
+- if err != nil {
+- return nil, nil, err
+- }
+- return p, t, nil
+-}
+-
+-func ptsname(f *os.File) (string, error) {
+- var n int
+- err := ioctl(f.Fd(), sys_TIOCGPTN, &n)
+- if err != nil {
+- return "", err
+- }
+- return "/dev/pts/" + strconv.Itoa(n), nil
+-}
+-
+-func unlockpt(f *os.File) error {
+- var u int
+- return ioctl(f.Fd(), sys_TIOCSPTLCK, &u)
+-}
+-
+-func ioctl(fd uintptr, cmd uintptr, data *int) error {
+- _, _, e := syscall.Syscall(
+- syscall.SYS_IOCTL,
+- fd,
+- cmd,
+- uintptr(unsafe.Pointer(data)),
+- )
+- if e != 0 {
+- return syscall.ENOTTY
+- }
+- return nil
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/kr/pty/README.md docker-devmapper/vendor/src/github.com/kr/pty/README.md
+--- docker-0.6.2/vendor/src/github.com/kr/pty/README.md 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/kr/pty/README.md 1969-12-31 18:00:00.000000000 -0600
+@@ -1,36 +0,0 @@
+-# pty
+-
+-Pty is a Go package for using unix pseudo-terminals.
+-
+-## Install
+-
+- go get github.com/kr/pty
+-
+-## Example
+-
+-```go
+-package main
+-
+-import (
+- "github.com/kr/pty"
+- "io"
+- "os"
+- "os/exec"
+-)
+-
+-func main() {
+- c := exec.Command("grep", "--color=auto", "bar")
+- f, err := pty.Start(c)
+- if err != nil {
+- panic(err)
+- }
+-
+- go func() {
+- f.Write([]byte("foo\n"))
+- f.Write([]byte("bar\n"))
+- f.Write([]byte("baz\n"))
+- f.Write([]byte{4}) // EOT
+- }()
+- io.Copy(os.Stdout, f)
+-}
+-```
+diff -uNr docker-0.6.2/vendor/src/github.com/kr/pty/run.go docker-devmapper/vendor/src/github.com/kr/pty/run.go
+--- docker-0.6.2/vendor/src/github.com/kr/pty/run.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/kr/pty/run.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,28 +0,0 @@
+-package pty
+-
+-import (
+- "os"
+- "os/exec"
+- "syscall"
+-)
+-
+-// Start assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout,
+-// and c.Stderr, calls c.Start, and returns the File of the tty's
+-// corresponding pty.
+-func Start(c *exec.Cmd) (pty *os.File, err error) {
+- pty, tty, err := Open()
+- if err != nil {
+- return nil, err
+- }
+- defer tty.Close()
+- c.Stdout = tty
+- c.Stdin = tty
+- c.Stderr = tty
+- c.SysProcAttr = &syscall.SysProcAttr{Setctty: true, Setsid: true}
+- err = c.Start()
+- if err != nil {
+- pty.Close()
+- return nil, err
+- }
+- return pty, err
+-}
+diff -uNr docker-0.6.2/vendor/src/github.com/kr/pty/util.go docker-devmapper/vendor/src/github.com/kr/pty/util.go
+--- docker-0.6.2/vendor/src/github.com/kr/pty/util.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/vendor/src/github.com/kr/pty/util.go 1969-12-31 18:00:00.000000000 -0600
+@@ -1,35 +0,0 @@
+-package pty
+-
+-import (
+- "os"
+- "syscall"
+- "unsafe"
+-)
+-
+-// Getsize returns the number of rows (lines) and cols (positions
+-// in each line) in terminal t.
+-func Getsize(t *os.File) (rows, cols int, err error) {
+- var ws winsize
+- err = windowrect(&ws, t.Fd())
+- return int(ws.ws_row), int(ws.ws_col), err
+-}
+-
+-type winsize struct {
+- ws_row uint16
+- ws_col uint16
+- ws_xpixel uint16
+- ws_ypixel uint16
+-}
+-
+-func windowrect(ws *winsize, fd uintptr) error {
+- _, _, errno := syscall.Syscall(
+- syscall.SYS_IOCTL,
+- fd,
+- syscall.TIOCGWINSZ,
+- uintptr(unsafe.Pointer(ws)),
+- )
+- if errno != 0 {
+- return syscall.Errno(errno)
+- }
+- return nil
+-}
+diff -uNr docker-0.6.2/VERSION docker-devmapper/VERSION
+--- docker-0.6.2/VERSION 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/VERSION 2013-09-23 10:37:39.632304302 -0500
+@@ -1 +1 @@
+-0.6.2
++0.6.1-dev
+diff -uNr docker-0.6.2/z_final_test.go docker-devmapper/z_final_test.go
+--- docker-0.6.2/z_final_test.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-devmapper/z_final_test.go 2013-09-23 10:37:39.601304388 -0500
+@@ -11,7 +11,7 @@
+ }
+
+ func TestFinal(t *testing.T) {
+- cleanup(globalRuntime)
++ cleanupLast(globalRuntime)
+ t.Logf("Start Fds: %d, Start Goroutines: %d", startFds, startGoroutines)
+ displayFdGoroutines(t)
+ }
diff --git a/docker-0.6.2-remove-dotcloud-tar.patch b/docker-0.6.2-remove-dotcloud-tar.patch
new file mode 100644
index 0000000..d9ee0bb
--- /dev/null
+++ b/docker-0.6.2-remove-dotcloud-tar.patch
@@ -0,0 +1,12 @@
+diff -uNr docker-0.6.2/utils/tarsum.go docker-0.6.2-1/utils/tarsum.go
+--- docker-0.6.2/utils/tarsum.go 2013-09-17 13:11:39.000000000 -0500
++++ docker-0.6.2-1/utils/tarsum.go 2013-09-23 09:37:07.711724687 -0500
+@@ -5,7 +5,7 @@
+ "compress/gzip"
+ "crypto/sha256"
+ "encoding/hex"
+- "github.com/dotcloud/tar"
++ "archive/tar"
+ "hash"
+ "io"
+ "sort"
diff --git a/docker-io.spec b/docker-io.spec
new file mode 100644
index 0000000..f6f1ea6
--- /dev/null
+++ b/docker-io.spec
@@ -0,0 +1,163 @@
+%global debug_package %{nil}
+%global commit ca5913ff3ec0648d6ad9887abc6cf986fddee1a2
+%global gopath %{_datadir}/gocode
+
+Name: docker-io
+Version: 0.6.2
+Release: 14.devicemapper%{?dist}
+Summary: Automates deployment of containerized applications
+License: ASL 2.0
+
+Patch0: docker-%{version}-alexl-devmapper.patch
+Patch1: docker-%{version}-remove-dotcloud-tar.patch
+URL: http://www.docker.io
+Source0: https://github.com/dotcloud/docker/archive/v%{version}.tar.gz
+Source1: docker.service
+BuildRequires: golang("github.com/gorilla/mux")
+BuildRequires: golang("github.com/kr/pty")
+BuildRequires: golang("code.google.com/p/go.net/websocket")
+BuildRequires: device-mapper-devel
+BuildRequires: python-sphinxcontrib-httpdomain
+BuildRequires: pkgconfig(systemd)
+Requires: systemd-units
+Requires: lxc
+Requires: tar
+Provides: lxc-docker
+
+%description
+Docker is an open-source engine that automates the deployment of any
+application as a lightweight, portable, self-sufficient container that will
+run virtually anywhere.
+
+Docker containers can encapsulate any payload, and will run consistently on
+and between virtually any server. The same container that a developer builds
+and tests on a laptop will run at scale, in production*, on VMs, bare-metal
+servers, OpenStack clusters, public instances, or combinations of the above.
+
+%prep
+%setup -q -n docker-%{version}
+%patch0 -p1 -b docker-%{version}-alexl-devmapper.patch
+%patch1 -p1 -b docker-%{version}-remove-dotcloud-tar.patch
+
+%build
+mkdir _build
+pushd _build
+
+mkdir -p src/github.com/dotcloud
+ln -s $(dirs +1 -l) src/github.com/dotcloud/docker
+export GOPATH=$(pwd):%{gopath}
+go build -v -a github.com/dotcloud/docker/docker
+go build -v -a github.com/dotcloud/docker/docker-init
+
+popd
+
+make -C docs/ man
+
+%install
+install -d %{buildroot}%{_bindir}
+install -d %{buildroot}%{_mandir}/man1
+install -d %{buildroot}%{_unitdir}
+install -d %{buildroot}%{_sysconfdir}/bash_completion.d
+install -d -m 700 %{buildroot}%{_sharedstatedir}/docker
+install -p -m 755 _build/docker %{buildroot}%{_bindir}
+install -p -m 755 _build/docker-init %{buildroot}%{_bindir}
+install -p -m 644 docs/_build/man/docker.1 %{buildroot}%{_mandir}/man1
+install -p -m 644 %{SOURCE1} %{buildroot}%{_unitdir}
+install -p -m 644 contrib/docker.bash %{buildroot}%{_sysconfdir}/bash_completion.d/
+
+%pre
+getent group docker > /dev/null || %{_sbindir}/groupadd -r docker
+getent passwd docker > /dev/null || %{_sbindir}/useradd -r -g docker\
+ -d %{_localstatedir}/lib/docker -s %{_sbindir}/nologin -c\
+ "Docker User" docker
+exit 0
+
+%post
+%systemd_post docker.service
+
+%preun
+%systemd_preun docker.service
+
+%postun
+%systemd_postun_with_restart docker.service
+
+%files
+%defattr(-,root,root,-)
+%doc AUTHORS CHANGELOG.md CONTRIBUTING.md FIXME LICENSE MAINTAINERS NOTICE README.md
+%{_mandir}/man1/docker.1.gz
+%{_bindir}/docker
+%{_bindir}/docker-init
+%{_unitdir}/docker.service
+%dir %{_sysconfdir}/bash_completion.d
+%{_sysconfdir}/bash_completion.d/docker.bash
+%dir %{_sharedstatedir}/docker
+
+%changelog
+* Tue Sep 24 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.6.2-14.devicemapper
+- package requires lxc
+
+* Tue Sep 24 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.6.2-13.devicemapper
+- package requires tar
+
+* Tue Sep 24 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.6.2-12.devicemapper
+- /var/lib/docker installed
+- package also provides lxc-docker
+
+* Mon Sep 23 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.6.2-11.devicemapper
+- better looking url
+
+* Mon Sep 23 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.6.2-10.devicemapper
+- release tag changed to denote devicemapper patch
+
+* Mon Sep 23 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.6.2-9
+- device-mapper-devel is a buildrequires for alex's code
+- docker.service listed as a separate source file
+
+* Sun Sep 22 2013 Matthew Miller <mattdm at fedoraproject.org> 0.6.2-8
+- install bash completion
+- use -v for go build to show progress
+
+* Sun Sep 22 2013 Matthew Miller <mattdm at fedoraproject.org> 0.6.2-7
+- build and install separate docker-init
+
+* Sun Sep 22 2013 Matthew Miller <mattdm at fedoraproject.org> 0.6.2-4
+- update to use new source-only golang lib packages
+
+* Sat Sep 21 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.6.2-3
+- man page generation from docs/.
+- systemd service file created
+- dotcloud/tar no longer required
+
+* Fri Sep 20 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.6.2-2
+- patched with alex larsson's devmapper code
+
+* Wed Sep 18 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.6.2-1
+- Version bump
+
+* Tue Sep 10 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.6.1-2
+- buildrequires updated
+- package renamed to docker-io
+
+* Fri Aug 30 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.6.1-1
+- Version bump
+- Package name change from lxc-docker to docker
+- Makefile patched from 0.5.3
+
+* Wed Aug 28 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.5.3-5
+- File permissions settings included
+
+* Wed Aug 28 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.5.3-4
+- Credits in changelog modified as per reference's request
+
+* Tue Aug 27 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.5.3-3
+- Dependencies listed as rpm packages instead of tars
+- Install section added
+
+* Mon Aug 26 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.5.3-2
+- Github packaging
+- Deps not downloaded at build time courtesy Elan Ruusamäe
+- Manpage and other docs installed
+
+* Fri Aug 23 2013 Lokesh Mandvekar <lsm5 at redhat.com> 0.5.3-1
+- Initial fedora package
+- Some credit to Elan Ruusamäe (glen at pld-linux.org)
diff --git a/docker.service b/docker.service
new file mode 100644
index 0000000..805afd1
--- /dev/null
+++ b/docker.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Docker container management daemon
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/docker -d
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
diff --git a/sources b/sources
index e69de29..6d1e6f6 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+41df68b4b4f1e03ab1d0964f4b73f440 v0.6.2.tar.gz
More information about the scm-commits
mailing list