golang.org/x/net: Update net package to fix race test failure.
TestLimitListener has been flaky. A fix was pushed to the net package.
This change updates our net package to have this fix.
Change-Id: If087a3025c998709335e1918e054fff7643d54a4
diff --git a/go/src/golang.org/x/net/.gitattributes b/go/src/golang.org/x/net/.gitattributes
new file mode 100644
index 0000000..d2f212e
--- /dev/null
+++ b/go/src/golang.org/x/net/.gitattributes
@@ -0,0 +1,10 @@
+# Treat all files in this repo as binary, with no git magic updating
+# line endings. Windows users contributing to Go will need to use a
+# modern version of git and editors capable of LF line endings.
+#
+# We'll prevent accidental CRLF line endings from entering the repo
+# via the git-review gofmt checks.
+#
+# See golang.org/issue/9281
+
+* -text
diff --git a/go/src/golang.org/x/net/CONTRIBUTING.md b/go/src/golang.org/x/net/CONTRIBUTING.md
new file mode 100644
index 0000000..88dff59
--- /dev/null
+++ b/go/src/golang.org/x/net/CONTRIBUTING.md
@@ -0,0 +1,31 @@
+# Contributing to Go
+
+Go is an open source project.
+
+It is the work of hundreds of contributors. We appreciate your help!
+
+
+## Filing issues
+
+When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions:
+
+1. What version of Go are you using (`go version`)?
+2. What operating system and processor architecture are you using?
+3. What did you do?
+4. What did you expect to see?
+5. What did you see instead?
+
+General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker.
+The gophers there will answer or ask you to file an issue if you've tripped over a bug.
+
+## Contributing code
+
+Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html)
+before sending patches.
+
+**We do not accept GitHub pull requests**
+(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review).
+
+Unless otherwise noted, the Go source files are distributed under
+the BSD-style license found in the LICENSE file.
+
diff --git a/go/src/golang.org/x/net/README.google b/go/src/golang.org/x/net/README.google
index 88c05df..1fb83b0 100644
--- a/go/src/golang.org/x/net/README.google
+++ b/go/src/golang.org/x/net/README.google
@@ -1,5 +1,5 @@
-URL: https://go.googlesource.com/net/+archive/cbcac7bb8415db9b6cb4d1ebab1dc9afbd688b97.tar.gz
-Version: cbcac7bb8415db9b6cb4d1ebab1dc9afbd688b97
+URL: https://go.googlesource.com/net/+archive/d9558e5c97f85372afee28cf2b6059d7d3818919.tar.gz
+Version: d9558e5c97f85372afee28cf2b6059d7d3818919
License: New BSD
License File: LICENSE
diff --git a/go/src/golang.org/x/net/codereview.cfg b/go/src/golang.org/x/net/codereview.cfg
new file mode 100644
index 0000000..3f8b14b
--- /dev/null
+++ b/go/src/golang.org/x/net/codereview.cfg
@@ -0,0 +1 @@
+issuerepo: golang/go
diff --git a/go/src/golang.org/x/net/context/context.go b/go/src/golang.org/x/net/context/context.go
index 490245d..e7ee376 100644
--- a/go/src/golang.org/x/net/context/context.go
+++ b/go/src/golang.org/x/net/context/context.go
@@ -64,18 +64,21 @@
//
// Done is provided for use in select statements:
//
- // // DoSomething calls DoSomethingSlow and returns as soon as
- // // it returns or ctx.Done is closed.
- // func DoSomething(ctx context.Context) (Result, error) {
- // c := make(chan Result, 1)
- // go func() { c <- DoSomethingSlow(ctx) }()
- // select {
- // case res := <-c:
- // return res, nil
- // case <-ctx.Done():
- // return nil, ctx.Err()
- // }
- // }
+ // // Stream generates values with DoSomething and sends them to out
+ // // until DoSomething returns an error or ctx.Done is closed.
+ // func Stream(ctx context.Context, out <-chan Value) error {
+ // for {
+ // v, err := DoSomething(ctx)
+ // if err != nil {
+ // return err
+ // }
+ // select {
+ // case <-ctx.Done():
+ // return ctx.Err()
+ // case out <- v:
+ // }
+ // }
+ // }
//
// See http://blog.golang.org/pipelines for more examples of how to use
// a Done channel for cancelation.
@@ -202,6 +205,9 @@
// WithCancel returns a copy of parent with a new Done channel. The returned
// context's Done channel is closed when the returned cancel function is called
// or when the parent context's Done channel is closed, whichever happens first.
+//
+// Canceling this context releases resources associated with it, so code should
+// call cancel as soon as the operations running in this Context complete.
func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
c := newCancelCtx(parent)
propagateCancel(parent, &c)
@@ -262,6 +268,19 @@
}
}
+// removeChild removes a context from its parent.
+func removeChild(parent Context, child canceler) {
+ p, ok := parentCancelCtx(parent)
+ if !ok {
+ return
+ }
+ p.mu.Lock()
+ if p.children != nil {
+ delete(p.children, child)
+ }
+ p.mu.Unlock()
+}
+
// A canceler is a context type that can be canceled directly. The
// implementations are *cancelCtx and *timerCtx.
type canceler interface {
@@ -316,13 +335,7 @@
c.mu.Unlock()
if removeFromParent {
- if p, ok := parentCancelCtx(c.Context); ok {
- p.mu.Lock()
- if p.children != nil {
- delete(p.children, c)
- }
- p.mu.Unlock()
- }
+ removeChild(c.Context, c)
}
}
@@ -333,9 +346,8 @@
// cancel function is called, or when the parent context's Done channel is
// closed, whichever happens first.
//
-// Canceling this context releases resources associated with the deadline
-// timer, so code should call cancel as soon as the operations running in this
-// Context complete.
+// Canceling this context releases resources associated with it, so code should
+// call cancel as soon as the operations running in this Context complete.
func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {
if cur, ok := parent.Deadline(); ok && cur.Before(deadline) {
// The current deadline is already sooner than the new one.
@@ -380,7 +392,11 @@
}
func (c *timerCtx) cancel(removeFromParent bool, err error) {
- c.cancelCtx.cancel(removeFromParent, err)
+ c.cancelCtx.cancel(false, err)
+ if removeFromParent {
+ // Remove this timerCtx from its parent cancelCtx's children.
+ removeChild(c.cancelCtx.Context, c)
+ }
c.mu.Lock()
if c.timer != nil {
c.timer.Stop()
@@ -391,9 +407,8 @@
// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).
//
-// Canceling this context releases resources associated with the deadline
-// timer, so code should call cancel as soon as the operations running in this
-// Context complete:
+// Canceling this context releases resources associated with it, so code should
+// call cancel as soon as the operations running in this Context complete:
//
// func slowOperationWithTimeout(ctx context.Context) (Result, error) {
// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond)
diff --git a/go/src/golang.org/x/net/context/context_test.go b/go/src/golang.org/x/net/context/context_test.go
index 82d2494..faf6772 100644
--- a/go/src/golang.org/x/net/context/context_test.go
+++ b/go/src/golang.org/x/net/context/context_test.go
@@ -551,3 +551,25 @@
checkValues("after cancel")
}
}
+
+func TestCancelRemoves(t *testing.T) {
+ checkChildren := func(when string, ctx Context, want int) {
+ if got := len(ctx.(*cancelCtx).children); got != want {
+ t.Errorf("%s: context has %d children, want %d", when, got, want)
+ }
+ }
+
+ ctx, _ := WithCancel(Background())
+ checkChildren("after creation", ctx, 0)
+ _, cancel := WithCancel(ctx)
+ checkChildren("with WithCancel child ", ctx, 1)
+ cancel()
+ checkChildren("after cancelling WithCancel child", ctx, 0)
+
+ ctx, _ = WithCancel(Background())
+ checkChildren("after creation", ctx, 0)
+ _, cancel = WithTimeout(ctx, 60*time.Minute)
+ checkChildren("with WithTimeout child ", ctx, 1)
+ cancel()
+ checkChildren("after cancelling WithTimeout child", ctx, 0)
+}
diff --git a/go/src/golang.org/x/net/html/atom/gen.go b/go/src/golang.org/x/net/html/atom/gen.go
index 9958a71..6bfa866 100644
--- a/go/src/golang.org/x/net/html/atom/gen.go
+++ b/go/src/golang.org/x/net/html/atom/gen.go
@@ -284,8 +284,8 @@
}
// 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.
+// https://html.spec.whatwg.org/multipage/indices.html#index
+// as of the "HTML Living Standard - Last Updated 21 February 2015" version.
var elements = []string{
"a",
@@ -352,6 +352,7 @@
"map",
"mark",
"menu",
+ "menuitem",
"meta",
"meter",
"nav",
@@ -385,6 +386,7 @@
"table",
"tbody",
"td",
+ "template",
"textarea",
"tfoot",
"th",
@@ -400,7 +402,10 @@
"wbr",
}
+// https://html.spec.whatwg.org/multipage/indices.html#attributes-3
+
var attributes = []string{
+ "abbr",
"accept",
"accept-charset",
"accesskey",
@@ -410,7 +415,6 @@
"autocomplete",
"autofocus",
"autoplay",
- "border",
"challenge",
"charset",
"checked",
@@ -452,7 +456,7 @@
"http-equiv",
"icon",
"id",
- "inert",
+ "inputmode",
"ismap",
"itemid",
"itemprop",
@@ -473,6 +477,7 @@
"mediagroup",
"method",
"min",
+ "minlength",
"multiple",
"muted",
"name",
@@ -500,6 +505,8 @@
"shape",
"size",
"sizes",
+ "sortable",
+ "sorted",
"span",
"src",
"srcdoc",
@@ -521,6 +528,8 @@
var eventHandlers = []string{
"onabort",
+ "onautocomplete",
+ "onautocompleteerror",
"onafterprint",
"onbeforeprint",
"onbeforeunload",
@@ -552,6 +561,7 @@
"onkeydown",
"onkeypress",
"onkeyup",
+ "onlanguagechange",
"onload",
"onloadeddata",
"onloadedmetadata",
@@ -580,11 +590,13 @@
"onseeking",
"onselect",
"onshow",
+ "onsort",
"onstalled",
"onstorage",
"onsubmit",
"onsuspend",
"ontimeupdate",
+ "ontoggle",
"onunload",
"onvolumechange",
"onwaiting",
diff --git a/go/src/golang.org/x/net/html/atom/table.go b/go/src/golang.org/x/net/html/atom/table.go
index 20b8b8a..2605ba3 100644
--- a/go/src/golang.org/x/net/html/atom/table.go
+++ b/go/src/golang.org/x/net/html/atom/table.go
@@ -3,692 +3,711 @@
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
+ A Atom = 0x1
+ Abbr Atom = 0x4
+ Accept Atom = 0x2106
+ AcceptCharset Atom = 0x210e
+ Accesskey Atom = 0x3309
+ Action Atom = 0x1f606
+ Address Atom = 0x4f307
+ Align Atom = 0x1105
+ Alt Atom = 0x4503
+ Annotation Atom = 0x1670a
+ AnnotationXml Atom = 0x1670e
+ Applet Atom = 0x2b306
+ Area Atom = 0x2fa04
+ Article Atom = 0x38807
+ Aside Atom = 0x8305
+ Async Atom = 0x7b05
+ Audio Atom = 0xa605
+ Autocomplete Atom = 0x1fc0c
+ Autofocus Atom = 0xb309
+ Autoplay Atom = 0xce08
+ B Atom = 0x101
+ Base Atom = 0xd604
+ Basefont Atom = 0xd608
+ Bdi Atom = 0x1a03
+ Bdo Atom = 0xe703
+ Bgsound Atom = 0x11807
+ Big Atom = 0x12403
+ Blink Atom = 0x12705
+ Blockquote Atom = 0x12c0a
+ Body Atom = 0x2f04
+ Br Atom = 0x202
+ Button Atom = 0x13606
+ Canvas Atom = 0x7f06
+ Caption Atom = 0x1bb07
+ Center Atom = 0x5b506
+ Challenge Atom = 0x21f09
+ Charset Atom = 0x2807
+ Checked Atom = 0x32807
+ Cite Atom = 0x3c804
+ Class Atom = 0x4de05
+ Code Atom = 0x14904
+ Col Atom = 0x15003
+ Colgroup Atom = 0x15008
+ Color Atom = 0x15d05
+ Cols Atom = 0x16204
+ Colspan Atom = 0x16207
+ Command Atom = 0x17507
+ Content Atom = 0x42307
+ Contenteditable Atom = 0x4230f
+ Contextmenu Atom = 0x3310b
+ Controls Atom = 0x18808
+ Coords Atom = 0x19406
+ Crossorigin Atom = 0x19f0b
+ Data Atom = 0x44a04
+ Datalist Atom = 0x44a08
+ Datetime Atom = 0x23c08
+ Dd Atom = 0x26702
+ Default Atom = 0x8607
+ Defer Atom = 0x14b05
+ Del Atom = 0x3ef03
+ Desc Atom = 0x4db04
+ Details Atom = 0x4807
+ Dfn Atom = 0x6103
+ Dialog Atom = 0x1b06
+ Dir Atom = 0x6903
+ Dirname Atom = 0x6907
+ Disabled Atom = 0x10c08
+ Div Atom = 0x11303
+ Dl Atom = 0x11e02
+ Download Atom = 0x40008
+ Draggable Atom = 0x17b09
+ Dropzone Atom = 0x39108
+ Dt Atom = 0x50902
+ Em Atom = 0x6502
+ Embed Atom = 0x6505
+ Enctype Atom = 0x21107
+ Face Atom = 0x5b304
+ Fieldset Atom = 0x1b008
+ Figcaption Atom = 0x1b80a
+ Figure Atom = 0x1cc06
+ Font Atom = 0xda04
+ Footer Atom = 0x8d06
+ For Atom = 0x1d803
+ ForeignObject Atom = 0x1d80d
+ Foreignobject Atom = 0x1e50d
+ Form Atom = 0x1f204
+ Formaction Atom = 0x1f20a
+ Formenctype Atom = 0x20d0b
+ Formmethod Atom = 0x2280a
+ Formnovalidate Atom = 0x2320e
+ Formtarget Atom = 0x2470a
+ Frame Atom = 0x9a05
+ Frameset Atom = 0x9a08
+ H1 Atom = 0x26e02
+ H2 Atom = 0x29402
+ H3 Atom = 0x2a702
+ H4 Atom = 0x2e902
+ H5 Atom = 0x2f302
+ H6 Atom = 0x50b02
+ Head Atom = 0x2d504
+ Header Atom = 0x2d506
+ Headers Atom = 0x2d507
+ Height Atom = 0x25106
+ Hgroup Atom = 0x25906
+ Hidden Atom = 0x26506
+ High Atom = 0x26b04
+ Hr Atom = 0x27002
+ Href Atom = 0x27004
+ Hreflang Atom = 0x27008
+ Html Atom = 0x25504
+ HttpEquiv Atom = 0x2780a
+ I Atom = 0x601
+ Icon Atom = 0x42204
+ Id Atom = 0x8502
+ Iframe Atom = 0x29606
+ Image Atom = 0x29c05
+ Img Atom = 0x2a103
+ Input Atom = 0x3e805
+ Inputmode Atom = 0x3e809
+ Ins Atom = 0x1a803
+ Isindex Atom = 0x2a907
+ Ismap Atom = 0x2b005
+ Itemid Atom = 0x33c06
+ Itemprop Atom = 0x3c908
+ Itemref Atom = 0x5ad07
+ Itemscope Atom = 0x2b909
+ Itemtype Atom = 0x2c308
+ Kbd Atom = 0x1903
+ Keygen Atom = 0x3906
+ Keytype Atom = 0x53707
+ Kind Atom = 0x10904
+ Label Atom = 0xf005
+ Lang Atom = 0x27404
+ Legend Atom = 0x18206
+ Li Atom = 0x1202
+ Link Atom = 0x12804
+ List Atom = 0x44e04
+ Listing Atom = 0x44e07
+ Loop Atom = 0xf404
+ Low Atom = 0x11f03
+ Malignmark Atom = 0x100a
+ Manifest Atom = 0x5f108
+ Map Atom = 0x2b203
+ Mark Atom = 0x1604
+ Marquee Atom = 0x2cb07
+ Math Atom = 0x2d204
+ Max Atom = 0x2e103
+ Maxlength Atom = 0x2e109
+ Media Atom = 0x6e05
+ Mediagroup Atom = 0x6e0a
+ Menu Atom = 0x33804
+ Menuitem Atom = 0x33808
+ Meta Atom = 0x45d04
+ Meter Atom = 0x24205
+ Method Atom = 0x22c06
+ Mglyph Atom = 0x2a206
+ Mi Atom = 0x2eb02
+ Min Atom = 0x2eb03
+ Minlength Atom = 0x2eb09
+ Mn Atom = 0x23502
+ Mo Atom = 0x3ed02
+ Ms Atom = 0x2bc02
+ Mtext Atom = 0x2f505
+ Multiple Atom = 0x30308
+ Muted Atom = 0x30b05
+ Name Atom = 0x6c04
+ Nav Atom = 0x3e03
+ Nobr Atom = 0x5704
+ Noembed Atom = 0x6307
+ Noframes Atom = 0x9808
+ Noscript Atom = 0x3d208
+ Novalidate Atom = 0x2360a
+ Object Atom = 0x1ec06
+ Ol Atom = 0xc902
+ Onabort Atom = 0x13a07
+ Onafterprint Atom = 0x1c00c
+ Onautocomplete Atom = 0x1fa0e
+ Onautocompleteerror Atom = 0x1fa13
+ Onbeforeprint Atom = 0x6040d
+ Onbeforeunload Atom = 0x4e70e
+ Onblur Atom = 0xaa06
+ Oncancel Atom = 0xe908
+ Oncanplay Atom = 0x28509
+ Oncanplaythrough Atom = 0x28510
+ Onchange Atom = 0x3a708
+ Onclick Atom = 0x31007
+ Onclose Atom = 0x31707
+ Oncontextmenu Atom = 0x32f0d
+ Oncuechange Atom = 0x3420b
+ Ondblclick Atom = 0x34d0a
+ Ondrag Atom = 0x35706
+ Ondragend Atom = 0x35709
+ Ondragenter Atom = 0x3600b
+ Ondragleave Atom = 0x36b0b
+ Ondragover Atom = 0x3760a
+ Ondragstart Atom = 0x3800b
+ Ondrop Atom = 0x38f06
+ Ondurationchange Atom = 0x39f10
+ Onemptied Atom = 0x39609
+ Onended Atom = 0x3af07
+ Onerror Atom = 0x3b607
+ Onfocus Atom = 0x3bd07
+ Onhashchange Atom = 0x3da0c
+ Oninput Atom = 0x3e607
+ Oninvalid Atom = 0x3f209
+ Onkeydown Atom = 0x3fb09
+ Onkeypress Atom = 0x4080a
+ Onkeyup Atom = 0x41807
+ Onlanguagechange Atom = 0x43210
+ Onload Atom = 0x44206
+ Onloadeddata Atom = 0x4420c
+ Onloadedmetadata Atom = 0x45510
+ Onloadstart Atom = 0x46b0b
+ Onmessage Atom = 0x47609
+ Onmousedown Atom = 0x47f0b
+ Onmousemove Atom = 0x48a0b
+ Onmouseout Atom = 0x4950a
+ Onmouseover Atom = 0x4a20b
+ Onmouseup Atom = 0x4ad09
+ Onmousewheel Atom = 0x4b60c
+ Onoffline Atom = 0x4c209
+ Ononline Atom = 0x4cb08
+ Onpagehide Atom = 0x4d30a
+ Onpageshow Atom = 0x4fe0a
+ Onpause Atom = 0x50d07
+ Onplay Atom = 0x51706
+ Onplaying Atom = 0x51709
+ Onpopstate Atom = 0x5200a
+ Onprogress Atom = 0x52a0a
+ Onratechange Atom = 0x53e0c
+ Onreset Atom = 0x54a07
+ Onresize Atom = 0x55108
+ Onscroll Atom = 0x55f08
+ Onseeked Atom = 0x56708
+ Onseeking Atom = 0x56f09
+ Onselect Atom = 0x57808
+ Onshow Atom = 0x58206
+ Onsort Atom = 0x58b06
+ Onstalled Atom = 0x59509
+ Onstorage Atom = 0x59e09
+ Onsubmit Atom = 0x5a708
+ Onsuspend Atom = 0x5bb09
+ Ontimeupdate Atom = 0xdb0c
+ Ontoggle Atom = 0x5c408
+ Onunload Atom = 0x5cc08
+ Onvolumechange Atom = 0x5d40e
+ Onwaiting Atom = 0x5e209
+ Open Atom = 0x3cf04
+ Optgroup Atom = 0xf608
+ Optimum Atom = 0x5eb07
+ Option Atom = 0x60006
+ Output Atom = 0x49c06
+ P Atom = 0xc01
+ Param Atom = 0xc05
+ Pattern Atom = 0x5107
+ Ping Atom = 0x7704
+ Placeholder Atom = 0xc30b
+ Plaintext Atom = 0xfd09
+ Poster Atom = 0x15706
+ Pre Atom = 0x25e03
+ Preload Atom = 0x25e07
+ Progress Atom = 0x52c08
+ Prompt Atom = 0x5fa06
+ Public Atom = 0x41e06
+ Q Atom = 0x13101
+ Radiogroup Atom = 0x30a
+ Readonly Atom = 0x2fb08
+ Rel Atom = 0x25f03
+ Required Atom = 0x1d008
+ Reversed Atom = 0x5a08
+ Rows Atom = 0x9204
+ Rowspan Atom = 0x9207
+ Rp Atom = 0x1c602
+ Rt Atom = 0x13f02
+ Ruby Atom = 0xaf04
+ S Atom = 0x2c01
+ Samp Atom = 0x4e04
+ Sandbox Atom = 0xbb07
+ Scope Atom = 0x2bd05
+ Scoped Atom = 0x2bd06
+ Script Atom = 0x3d406
+ Seamless Atom = 0x31c08
+ Section Atom = 0x4e207
+ Select Atom = 0x57a06
+ Selected Atom = 0x57a08
+ Shape Atom = 0x4f905
+ Size Atom = 0x55504
+ Sizes Atom = 0x55505
+ Small Atom = 0x18f05
+ Sortable Atom = 0x58d08
+ Sorted Atom = 0x19906
+ Source Atom = 0x1aa06
+ Spacer Atom = 0x2db06
+ Span Atom = 0x9504
+ Spellcheck Atom = 0x3230a
+ Src Atom = 0x3c303
+ Srcdoc Atom = 0x3c306
+ Srclang Atom = 0x41107
+ Start Atom = 0x38605
+ Step Atom = 0x5f704
+ Strike Atom = 0x53306
+ Strong Atom = 0x55906
+ Style Atom = 0x61105
+ Sub Atom = 0x5a903
+ Summary Atom = 0x61607
+ Sup Atom = 0x61d03
+ Svg Atom = 0x62003
+ System Atom = 0x62306
+ Tabindex Atom = 0x46308
+ Table Atom = 0x42d05
+ Target Atom = 0x24b06
+ Tbody Atom = 0x2e05
+ Td Atom = 0x4702
+ Template Atom = 0x62608
+ Textarea Atom = 0x2f608
+ Tfoot Atom = 0x8c05
+ Th Atom = 0x22e02
+ Thead Atom = 0x2d405
+ Time Atom = 0xdd04
+ Title Atom = 0xa105
+ Tr Atom = 0x10502
+ Track Atom = 0x10505
+ Translate Atom = 0x14009
+ Tt Atom = 0x5302
+ Type Atom = 0x21404
+ Typemustmatch Atom = 0x2140d
+ U Atom = 0xb01
+ Ul Atom = 0x8a02
+ Usemap Atom = 0x51106
+ Value Atom = 0x4005
+ Var Atom = 0x11503
+ Video Atom = 0x28105
+ Wbr Atom = 0x12103
+ Width Atom = 0x50705
+ Wrap Atom = 0x58704
+ Xmp Atom = 0xc103
)
const hash0 = 0xc17da63e
-const maxAtomLen = 16
+const maxAtomLen = 19
var table = [1 << 9]Atom{
- 0x1: 0x4830b, // onmousemove
- 0x2: 0x5a709, // onwaiting
- 0x4: 0x5bf06, // prompt
- 0x7: 0x5b007, // optimum
+ 0x1: 0x48a0b, // onmousemove
+ 0x2: 0x5e209, // onwaiting
+ 0x3: 0x1fa13, // onautocompleteerror
+ 0x4: 0x5fa06, // prompt
+ 0x7: 0x5eb07, // optimum
0x8: 0x1604, // mark
- 0xa: 0x2d707, // itemref
- 0xb: 0x4d90a, // onpageshow
- 0xc: 0x55506, // select
- 0xd: 0x1a109, // draggable
+ 0xa: 0x5ad07, // itemref
+ 0xb: 0x4fe0a, // onpageshow
+ 0xc: 0x57a06, // select
+ 0xd: 0x17b09, // draggable
0xe: 0x3e03, // nav
- 0xf: 0x19b07, // command
+ 0xf: 0x17507, // 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
+ 0x14: 0x2d507, // headers
+ 0x15: 0x44a08, // datalist
+ 0x17: 0x4e04, // samp
+ 0x1a: 0x3fb09, // onkeydown
+ 0x1b: 0x55f08, // onscroll
+ 0x1c: 0x15003, // col
+ 0x20: 0x3c908, // itemprop
+ 0x21: 0x2780a, // http-equiv
+ 0x22: 0x61d03, // sup
+ 0x24: 0x1d008, // required
+ 0x2b: 0x25e07, // preload
+ 0x2c: 0x6040d, // onbeforeprint
+ 0x2d: 0x3600b, // ondragenter
+ 0x2e: 0x50902, // dt
+ 0x2f: 0x5a708, // onsubmit
+ 0x30: 0x27002, // hr
+ 0x31: 0x32f0d, // oncontextmenu
+ 0x33: 0x29c05, // image
+ 0x34: 0x50d07, // onpause
+ 0x35: 0x25906, // hgroup
+ 0x36: 0x7704, // ping
+ 0x37: 0x57808, // onselect
+ 0x3a: 0x11303, // div
+ 0x3b: 0x1fa0e, // onautocomplete
+ 0x40: 0x2eb02, // mi
+ 0x41: 0x31c08, // seamless
0x42: 0x2807, // charset
- 0x43: 0x5102, // id
- 0x44: 0x4fb0a, // onpopstate
- 0x45: 0x4d603, // del
- 0x46: 0x5f207, // marquee
+ 0x43: 0x8502, // id
+ 0x44: 0x5200a, // onpopstate
+ 0x45: 0x3ef03, // del
+ 0x46: 0x2cb07, // marquee
0x47: 0x3309, // accesskey
- 0x49: 0x5906, // footer
- 0x4a: 0x2d106, // applet
- 0x4b: 0x2ce05, // ismap
- 0x51: 0x34f04, // menu
+ 0x49: 0x8d06, // footer
+ 0x4a: 0x44e04, // list
+ 0x4b: 0x2b005, // ismap
+ 0x51: 0x33804, // 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
+ 0x55: 0x9a08, // frameset
+ 0x56: 0x54a07, // onreset
+ 0x57: 0x12705, // blink
+ 0x58: 0xa105, // title
+ 0x59: 0x38807, // article
+ 0x5b: 0x22e02, // th
+ 0x5d: 0x13101, // q
+ 0x5e: 0x3cf04, // open
+ 0x5f: 0x2fa04, // area
+ 0x61: 0x44206, // onload
+ 0x62: 0xda04, // font
+ 0x63: 0xd604, // base
+ 0x64: 0x16207, // colspan
+ 0x65: 0x53707, // keytype
+ 0x66: 0x11e02, // dl
+ 0x68: 0x1b008, // fieldset
+ 0x6a: 0x2eb03, // min
+ 0x6b: 0x11503, // var
+ 0x6f: 0x2d506, // header
+ 0x70: 0x13f02, // rt
+ 0x71: 0x15008, // colgroup
+ 0x72: 0x23502, // mn
+ 0x74: 0x13a07, // 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
+ 0x76: 0x4c209, // onoffline
+ 0x77: 0x21f09, // challenge
+ 0x78: 0x2b203, // map
+ 0x7a: 0x2e902, // h4
+ 0x7b: 0x3b607, // onerror
+ 0x7c: 0x2e109, // maxlength
+ 0x7d: 0x2f505, // mtext
+ 0x7e: 0xbb07, // sandbox
+ 0x7f: 0x58b06, // onsort
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
+ 0x81: 0x45d04, // meta
+ 0x82: 0x7b05, // async
+ 0x83: 0x2a702, // h3
+ 0x84: 0x26702, // dd
+ 0x85: 0x27004, // href
+ 0x86: 0x6e0a, // mediagroup
+ 0x87: 0x19406, // coords
+ 0x88: 0x41107, // srclang
+ 0x89: 0x34d0a, // 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
+ 0x8c: 0xe908, // oncancel
+ 0x8e: 0x3230a, // spellcheck
+ 0x8f: 0x9a05, // frame
+ 0x91: 0x12403, // big
+ 0x94: 0x1f606, // action
+ 0x95: 0x6903, // dir
+ 0x97: 0x2fb08, // readonly
+ 0x99: 0x42d05, // table
+ 0x9a: 0x61607, // summary
+ 0x9b: 0x12103, // 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
+ 0x9d: 0x6c04, // name
+ 0x9f: 0x62306, // system
+ 0xa1: 0x15d05, // color
+ 0xa2: 0x7f06, // canvas
+ 0xa3: 0x25504, // html
+ 0xa5: 0x56f09, // onseeking
+ 0xac: 0x4f905, // shape
+ 0xad: 0x25f03, // rel
+ 0xae: 0x28510, // oncanplaythrough
+ 0xaf: 0x3760a, // ondragover
+ 0xb0: 0x62608, // template
+ 0xb1: 0x1d80d, // foreignObject
+ 0xb3: 0x9204, // rows
+ 0xb6: 0x44e07, // listing
+ 0xb7: 0x49c06, // output
+ 0xb9: 0x3310b, // contextmenu
+ 0xbb: 0x11f03, // low
+ 0xbc: 0x1c602, // rp
+ 0xbd: 0x5bb09, // onsuspend
+ 0xbe: 0x13606, // button
+ 0xbf: 0x4db04, // desc
+ 0xc1: 0x4e207, // section
+ 0xc2: 0x52a0a, // onprogress
+ 0xc3: 0x59e09, // onstorage
+ 0xc4: 0x2d204, // math
+ 0xc5: 0x4503, // alt
+ 0xc7: 0x8a02, // ul
+ 0xc8: 0x5107, // pattern
+ 0xc9: 0x4b60c, // onmousewheel
+ 0xca: 0x35709, // ondragend
+ 0xcb: 0xaf04, // ruby
0xcc: 0xc01, // p
- 0xcd: 0x32e07, // onclose
- 0xce: 0x26105, // meter
- 0xcf: 0x13807, // bgsound
- 0xd2: 0x27206, // height
+ 0xcd: 0x31707, // onclose
+ 0xce: 0x24205, // meter
+ 0xcf: 0x11807, // bgsound
+ 0xd2: 0x25106, // 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
+ 0xd5: 0x2c308, // itemtype
+ 0xd8: 0x1bb07, // caption
+ 0xd9: 0x10c08, // disabled
+ 0xdb: 0x33808, // menuitem
+ 0xdc: 0x62003, // svg
+ 0xdd: 0x18f05, // small
+ 0xde: 0x44a04, // data
+ 0xe0: 0x4cb08, // ononline
+ 0xe1: 0x2a206, // mglyph
+ 0xe3: 0x6505, // embed
+ 0xe4: 0x10502, // tr
+ 0xe5: 0x46b0b, // onloadstart
+ 0xe7: 0x3c306, // srcdoc
+ 0xeb: 0x5c408, // ontoggle
+ 0xed: 0xe703, // bdo
0xee: 0x4702, // td
- 0xef: 0x4f05, // aside
- 0xf0: 0x29602, // h2
- 0xf1: 0x50708, // progress
- 0xf2: 0x14c0a, // blockquote
- 0xf4: 0xba05, // label
+ 0xef: 0x8305, // aside
+ 0xf0: 0x29402, // h2
+ 0xf1: 0x52c08, // progress
+ 0xf2: 0x12c0a, // blockquote
+ 0xf4: 0xf005, // 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
+ 0xf7: 0x9207, // rowspan
+ 0xfb: 0x51709, // onplaying
+ 0xfd: 0x2a103, // img
+ 0xfe: 0xf608, // optgroup
+ 0xff: 0x42307, // content
+ 0x101: 0x53e0c, // onratechange
+ 0x103: 0x3da0c, // onhashchange
+ 0x104: 0x4807, // details
+ 0x106: 0x40008, // download
+ 0x109: 0x14009, // translate
+ 0x10b: 0x4230f, // contenteditable
+ 0x10d: 0x36b0b, // 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
+ 0x10f: 0x57a08, // selected
+ 0x112: 0x1f20a, // formaction
+ 0x113: 0x5b506, // center
+ 0x115: 0x45510, // onloadedmetadata
+ 0x116: 0x12804, // link
+ 0x117: 0xdd04, // time
+ 0x118: 0x19f0b, // crossorigin
+ 0x119: 0x3bd07, // onfocus
+ 0x11a: 0x58704, // wrap
+ 0x11b: 0x42204, // icon
+ 0x11d: 0x28105, // video
+ 0x11e: 0x4de05, // class
+ 0x121: 0x5d40e, // onvolumechange
+ 0x122: 0xaa06, // onblur
+ 0x123: 0x2b909, // itemscope
+ 0x124: 0x61105, // style
+ 0x127: 0x41e06, // public
+ 0x129: 0x2320e, // formnovalidate
+ 0x12a: 0x58206, // onshow
+ 0x12c: 0x51706, // onplay
+ 0x12d: 0x3c804, // cite
+ 0x12e: 0x2bc02, // ms
+ 0x12f: 0xdb0c, // ontimeupdate
+ 0x130: 0x10904, // kind
+ 0x131: 0x2470a, // formtarget
+ 0x135: 0x3af07, // onended
+ 0x136: 0x26506, // 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
+ 0x139: 0x2280a, // formmethod
+ 0x13a: 0x3e805, // input
+ 0x13c: 0x50b02, // h6
+ 0x13d: 0xc902, // ol
+ 0x13e: 0x3420b, // oncuechange
+ 0x13f: 0x1e50d, // foreignobject
+ 0x143: 0x4e70e, // onbeforeunload
+ 0x144: 0x2bd05, // scope
+ 0x145: 0x39609, // onemptied
+ 0x146: 0x14b05, // defer
+ 0x147: 0xc103, // xmp
+ 0x148: 0x39f10, // ondurationchange
0x149: 0x1903, // kbd
- 0x14c: 0x46f09, // onmessage
- 0x14d: 0x5c506, // option
- 0x14e: 0x4503, // alt
- 0x14f: 0x33f07, // checked
- 0x150: 0x10c08, // autoplay
+ 0x14c: 0x47609, // onmessage
+ 0x14d: 0x60006, // option
+ 0x14e: 0x2eb09, // minlength
+ 0x14f: 0x32807, // checked
+ 0x150: 0xce08, // 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
+ 0x153: 0x2360a, // novalidate
+ 0x156: 0x6307, // noembed
+ 0x159: 0x31007, // onclick
+ 0x15a: 0x47f0b, // onmousedown
+ 0x15b: 0x3a708, // onchange
+ 0x15e: 0x3f209, // oninvalid
+ 0x15f: 0x2bd06, // scoped
+ 0x160: 0x18808, // controls
+ 0x161: 0x30b05, // muted
+ 0x162: 0x58d08, // sortable
+ 0x163: 0x51106, // usemap
+ 0x164: 0x1b80a, // figcaption
+ 0x165: 0x35706, // ondrag
+ 0x166: 0x26b04, // high
+ 0x168: 0x3c303, // src
+ 0x169: 0x15706, // poster
+ 0x16b: 0x1670e, // annotation-xml
+ 0x16c: 0x5f704, // 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
+ 0x172: 0x3ed02, // mo
+ 0x175: 0x1d803, // for
+ 0x176: 0x1a803, // ins
+ 0x178: 0x55504, // size
+ 0x179: 0x43210, // onlanguagechange
+ 0x17a: 0x8607, // 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
+ 0x17c: 0x4d30a, // onpagehide
+ 0x17d: 0x6907, // dirname
+ 0x17e: 0x21404, // type
+ 0x17f: 0x1f204, // form
+ 0x181: 0x28509, // oncanplay
+ 0x182: 0x6103, // dfn
+ 0x183: 0x46308, // tabindex
+ 0x186: 0x6502, // em
+ 0x187: 0x27404, // lang
+ 0x189: 0x39108, // dropzone
+ 0x18a: 0x4080a, // onkeypress
+ 0x18b: 0x23c08, // datetime
+ 0x18c: 0x16204, // cols
0x18d: 0x1, // a
- 0x18e: 0x43b0c, // onloadeddata
- 0x191: 0x15606, // border
+ 0x18e: 0x4420c, // onloadeddata
+ 0x190: 0xa605, // audio
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
+ 0x193: 0x22c06, // method
+ 0x195: 0xf404, // loop
+ 0x196: 0x29606, // iframe
+ 0x198: 0x2d504, // head
+ 0x19e: 0x5f108, // manifest
+ 0x19f: 0xb309, // autofocus
+ 0x1a0: 0x14904, // code
+ 0x1a1: 0x55906, // strong
+ 0x1a2: 0x30308, // 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
+ 0x1a6: 0x21107, // enctype
+ 0x1a7: 0x5b304, // face
+ 0x1a8: 0xfd09, // plaintext
+ 0x1a9: 0x26e02, // h1
+ 0x1aa: 0x59509, // onstalled
+ 0x1ad: 0x3d406, // script
+ 0x1ae: 0x2db06, // spacer
+ 0x1af: 0x55108, // onresize
+ 0x1b0: 0x4a20b, // onmouseover
+ 0x1b1: 0x5cc08, // onunload
+ 0x1b2: 0x56708, // onseeked
+ 0x1b4: 0x2140d, // typemustmatch
+ 0x1b5: 0x1cc06, // figure
+ 0x1b6: 0x4950a, // onmouseout
+ 0x1b7: 0x25e03, // pre
+ 0x1b8: 0x50705, // width
+ 0x1b9: 0x19906, // sorted
+ 0x1bb: 0x5704, // nobr
+ 0x1be: 0x5302, // tt
0x1bf: 0x1105, // align
- 0x1c0: 0x3f407, // oninput
- 0x1c3: 0x42107, // onkeyup
- 0x1c6: 0x1e50c, // onafterprint
+ 0x1c0: 0x3e607, // oninput
+ 0x1c3: 0x41807, // onkeyup
+ 0x1c6: 0x1c00c, // 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
+ 0x1c8: 0x33c06, // itemid
+ 0x1c9: 0x3e809, // inputmode
+ 0x1cb: 0x53306, // strike
+ 0x1cc: 0x5a903, // sub
+ 0x1cd: 0x10505, // track
+ 0x1ce: 0x38605, // start
+ 0x1d0: 0xd608, // basefont
+ 0x1d6: 0x1aa06, // source
+ 0x1d7: 0x18206, // legend
+ 0x1d8: 0x2d405, // thead
+ 0x1da: 0x8c05, // tfoot
+ 0x1dd: 0x1ec06, // object
+ 0x1de: 0x6e05, // media
+ 0x1df: 0x1670a, // annotation
+ 0x1e0: 0x20d0b, // formenctype
+ 0x1e2: 0x3d208, // noscript
+ 0x1e4: 0x55505, // sizes
+ 0x1e5: 0x1fc0c, // autocomplete
+ 0x1e6: 0x9504, // span
+ 0x1e7: 0x9808, // noframes
+ 0x1e8: 0x24b06, // target
+ 0x1e9: 0x38f06, // ondrop
+ 0x1ea: 0x2b306, // applet
+ 0x1ec: 0x5a08, // reversed
+ 0x1f0: 0x2a907, // isindex
+ 0x1f3: 0x27008, // hreflang
+ 0x1f5: 0x2f302, // h5
+ 0x1f6: 0x4f307, // address
+ 0x1fa: 0x2e103, // max
+ 0x1fb: 0xc30b, // placeholder
+ 0x1fc: 0x2f608, // textarea
+ 0x1fe: 0x4ad09, // onmouseup
+ 0x1ff: 0x3800b, // 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"
+ "genavaluealtdetailsampatternobreversedfnoembedirnamediagroup" +
+ "ingasyncanvasidefaultfooterowspanoframesetitleaudionblurubya" +
+ "utofocusandboxmplaceholderautoplaybasefontimeupdatebdoncance" +
+ "labelooptgrouplaintextrackindisabledivarbgsoundlowbrbigblink" +
+ "blockquotebuttonabortranslatecodefercolgroupostercolorcolspa" +
+ "nnotation-xmlcommandraggablegendcontrolsmallcoordsortedcross" +
+ "originsourcefieldsetfigcaptionafterprintfigurequiredforeignO" +
+ "bjectforeignobjectformactionautocompleteerrorformenctypemust" +
+ "matchallengeformmethodformnovalidatetimeterformtargetheightm" +
+ "lhgroupreloadhiddenhigh1hreflanghttp-equivideoncanplaythroug" +
+ "h2iframeimageimglyph3isindexismappletitemscopeditemtypemarqu" +
+ "eematheaderspacermaxlength4minlength5mtextareadonlymultiplem" +
+ "utedonclickoncloseamlesspellcheckedoncontextmenuitemidoncuec" +
+ "hangeondblclickondragendondragenterondragleaveondragoverondr" +
+ "agstarticleondropzonemptiedondurationchangeonendedonerroronf" +
+ "ocusrcdocitempropenoscriptonhashchangeoninputmodeloninvalido" +
+ "nkeydownloadonkeypressrclangonkeyupublicontenteditableonlang" +
+ "uagechangeonloadeddatalistingonloadedmetadatabindexonloadsta" +
+ "rtonmessageonmousedownonmousemoveonmouseoutputonmouseoveronm" +
+ "ouseuponmousewheelonofflineononlineonpagehidesclassectionbef" +
+ "oreunloaddresshapeonpageshowidth6onpausemaponplayingonpopsta" +
+ "teonprogresstrikeytypeonratechangeonresetonresizestrongonscr" +
+ "ollonseekedonseekingonselectedonshowraponsortableonstalledon" +
+ "storageonsubmitemrefacenteronsuspendontoggleonunloadonvolume" +
+ "changeonwaitingoptimumanifestepromptoptionbeforeprintstylesu" +
+ "mmarysupsvgsystemplate"
diff --git a/go/src/golang.org/x/net/html/atom/table_test.go b/go/src/golang.org/x/net/html/atom/table_test.go
index db016a1..0f2ecce 100644
--- a/go/src/golang.org/x/net/html/atom/table_test.go
+++ b/go/src/golang.org/x/net/html/atom/table_test.go
@@ -5,6 +5,7 @@
var testAtomList = []string{
"a",
"abbr",
+ "abbr",
"accept",
"accept-charset",
"accesskey",
@@ -33,7 +34,6 @@
"blink",
"blockquote",
"body",
- "border",
"br",
"button",
"canvas",
@@ -125,8 +125,8 @@
"iframe",
"image",
"img",
- "inert",
"input",
+ "inputmode",
"ins",
"isindex",
"ismap",
@@ -160,12 +160,14 @@
"media",
"mediagroup",
"menu",
+ "menuitem",
"meta",
"meter",
"method",
"mglyph",
"mi",
"min",
+ "minlength",
"mn",
"mo",
"ms",
@@ -183,6 +185,8 @@
"ol",
"onabort",
"onafterprint",
+ "onautocomplete",
+ "onautocompleteerror",
"onbeforeprint",
"onbeforeunload",
"onblur",
@@ -213,6 +217,7 @@
"onkeydown",
"onkeypress",
"onkeyup",
+ "onlanguagechange",
"onload",
"onloadeddata",
"onloadedmetadata",
@@ -241,11 +246,13 @@
"onseeking",
"onselect",
"onshow",
+ "onsort",
"onstalled",
"onstorage",
"onsubmit",
"onsuspend",
"ontimeupdate",
+ "ontoggle",
"onunload",
"onvolumechange",
"onwaiting",
@@ -291,6 +298,8 @@
"size",
"sizes",
"small",
+ "sortable",
+ "sorted",
"source",
"spacer",
"span",
@@ -315,6 +324,7 @@
"target",
"tbody",
"td",
+ "template",
"textarea",
"tfoot",
"th",
diff --git a/go/src/golang.org/x/net/html/charset/charset.go b/go/src/golang.org/x/net/html/charset/charset.go
index 2e5f9ba..464c821 100644
--- a/go/src/golang.org/x/net/html/charset/charset.go
+++ b/go/src/golang.org/x/net/html/charset/charset.go
@@ -5,11 +5,12 @@
// Package charset provides common text encodings for HTML documents.
//
// The mapping from encoding labels to encodings is defined at
-// http://encoding.spec.whatwg.org.
+// https://encoding.spec.whatwg.org/.
package charset // import "golang.org/x/net/html/charset"
import (
"bytes"
+ "fmt"
"io"
"mime"
"strings"
@@ -110,6 +111,18 @@
return r, nil
}
+// NewReaderLabel returns a reader that converts from the specified charset to
+// UTF-8. It uses Lookup to find the encoding that corresponds to label, and
+// returns an error if Lookup returns nil. It is suitable for use as
+// encoding/xml.Decoder's CharsetReader function.
+func NewReaderLabel(label string, input io.Reader) (io.Reader, error) {
+ e, _ := Lookup(label)
+ if e == nil {
+ return nil, fmt.Errorf("unsupported charset: %q", label)
+ }
+ return transform.NewReader(input, e.NewDecoder()), nil
+}
+
func prescan(content []byte) (e encoding.Encoding, name string) {
z := html.NewTokenizer(bytes.NewReader(content))
for {
diff --git a/go/src/golang.org/x/net/html/charset/charset_test.go b/go/src/golang.org/x/net/html/charset/charset_test.go
index d309f75..8b10399 100644
--- a/go/src/golang.org/x/net/html/charset/charset_test.go
+++ b/go/src/golang.org/x/net/html/charset/charset_test.go
@@ -6,6 +6,7 @@
import (
"bytes"
+ "encoding/xml"
"io/ioutil"
"runtime"
"strings"
@@ -213,3 +214,23 @@
}
}
}
+
+func TestXML(t *testing.T) {
+ const s = "<?xml version=\"1.0\" encoding=\"windows-1252\"?><a><Word>r\xe9sum\xe9</Word></a>"
+
+ d := xml.NewDecoder(strings.NewReader(s))
+ d.CharsetReader = NewReaderLabel
+
+ var a struct {
+ Word string
+ }
+ err := d.Decode(&a)
+ if err != nil {
+ t.Fatalf("Decode: %v", err)
+ }
+
+ want := "résumé"
+ if a.Word != want {
+ t.Errorf("got %q, want %q", a.Word, want)
+ }
+}
diff --git a/go/src/golang.org/x/net/html/charset/gen.go b/go/src/golang.org/x/net/html/charset/gen.go
index 8b76909..828347f 100644
--- a/go/src/golang.org/x/net/html/charset/gen.go
+++ b/go/src/golang.org/x/net/html/charset/gen.go
@@ -6,7 +6,7 @@
package main
-// Download http://encoding.spec.whatwg.org/encodings.json and use it to
+// Download https://encoding.spec.whatwg.org/encodings.json and use it to
// generate table.go.
import (
@@ -27,7 +27,7 @@
Heading string
}
-const specURL = "http://encoding.spec.whatwg.org/encodings.json"
+const specURL = "https://encoding.spec.whatwg.org/encodings.json"
func main() {
resp, err := http.Get(specURL)
diff --git a/go/src/golang.org/x/net/html/charset/testdata/README b/go/src/golang.org/x/net/html/charset/testdata/README
index a8e1fa4..38ef0f9 100644
--- a/go/src/golang.org/x/net/html/charset/testdata/README
+++ b/go/src/golang.org/x/net/html/charset/testdata/README
@@ -1 +1,9 @@
-These test cases come from http://www.w3.org/International/tests/html5/the-input-byte-stream/results-basics
+These test cases come from
+http://www.w3.org/International/tests/repository/html5/the-input-byte-stream/results-basics
+
+Distributed under both the W3C Test Suite License
+(http://www.w3.org/Consortium/Legal/2008/04-testsuite-license)
+and the W3C 3-clause BSD License
+(http://www.w3.org/Consortium/Legal/2008/03-bsd-license).
+To contribute to a W3C Test Suite, see the policies and contribution
+forms (http://www.w3.org/2004/10/27-testcases).
diff --git a/go/src/golang.org/x/net/html/const.go b/go/src/golang.org/x/net/html/const.go
index d7cc8bb..52f651f 100644
--- a/go/src/golang.org/x/net/html/const.go
+++ b/go/src/golang.org/x/net/html/const.go
@@ -6,7 +6,7 @@
// 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
+// https://html.spec.whatwg.org/multipage/syntax.html#the-stack-of-open-elements
var isSpecialElementMap = map[string]bool{
"address": true,
"applet": true,
@@ -24,7 +24,6 @@
"center": true,
"col": true,
"colgroup": true,
- "command": true,
"dd": true,
"details": true,
"dir": true,
@@ -73,17 +72,20 @@
"script": true,
"section": true,
"select": true,
+ "source": true,
"style": true,
"summary": true,
"table": true,
"tbody": true,
"td": true,
+ "template": true,
"textarea": true,
"tfoot": true,
"th": true,
"thead": true,
"title": true,
"tr": true,
+ "track": true,
"ul": true,
"wbr": true,
"xmp": true,
diff --git a/go/src/golang.org/x/net/html/doc.go b/go/src/golang.org/x/net/html/doc.go
index 32379a3..94f4968 100644
--- a/go/src/golang.org/x/net/html/doc.go
+++ b/go/src/golang.org/x/net/html/doc.go
@@ -90,8 +90,8 @@
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
+https://html.spec.whatwg.org/multipage/syntax.html and
+https://html.spec.whatwg.org/multipage/syntax.html#tokenization
*/
package html // import "golang.org/x/net/html"
diff --git a/go/src/golang.org/x/net/html/entity.go b/go/src/golang.org/x/net/html/entity.go
index af8a007..a50c04c 100644
--- a/go/src/golang.org/x/net/html/entity.go
+++ b/go/src/golang.org/x/net/html/entity.go
@@ -8,7 +8,7 @@
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
+// https://html.spec.whatwg.org/multipage/syntax.html#named-character-references
// lists both "amp" and "amp;" as two separate entries.
//
// Note that the HTML5 list is larger than the HTML4 list at
diff --git a/go/src/golang.org/x/net/html/escape.go b/go/src/golang.org/x/net/html/escape.go
index 75bddff..d856139 100644
--- a/go/src/golang.org/x/net/html/escape.go
+++ b/go/src/golang.org/x/net/html/escape.go
@@ -12,7 +12,7 @@
// 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
+// https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference
var replacementTable = [...]rune{
'\u20AC', // First entry is what 0x80 should be replaced with.
'\u0081',
@@ -55,7 +55,7 @@
// 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
+ // https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference
// i starts at 1 because we already know that s[0] == '&'.
i, s := 1, b[src:]
diff --git a/go/src/golang.org/x/net/html/parse.go b/go/src/golang.org/x/net/html/parse.go
index b42a323..be4b2bf 100644
--- a/go/src/golang.org/x/net/html/parse.go
+++ b/go/src/golang.org/x/net/html/parse.go
@@ -14,7 +14,7 @@
)
// A parser implements the HTML5 parsing algorithm:
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#tree-construction
+// https://html.spec.whatwg.org/multipage/syntax.html#tree-construction
type parser struct {
// tokenizer provides the tokens for the parser.
tokenizer *Tokenizer
@@ -59,7 +59,7 @@
// 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},
+ "": {a.Applet, a.Caption, a.Html, a.Table, a.Td, a.Th, a.Marquee, a.Object, a.Template},
"math": {a.AnnotationXml, a.Mi, a.Mn, a.Mo, a.Ms, a.Mtext},
"svg": {a.Desc, a.ForeignObject, a.Title},
}
@@ -1037,15 +1037,15 @@
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
+ // https://html.spec.whatwg.org/multipage/syntax.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.
+ // Steps 1-4. The outer loop.
for i := 0; i < 8; i++ {
- // Step 4. Find the formatting element.
+ // Step 5. Find the formatting element.
var formattingElement *Node
for j := len(p.afe) - 1; j >= 0; j-- {
if p.afe[j].Type == scopeMarkerNode {
@@ -1070,7 +1070,7 @@
return
}
- // Steps 5-6. Find the furthest block.
+ // Steps 9-10. Find the furthest block.
var furthestBlock *Node
for _, e := range p.oe[feIndex:] {
if isSpecialElement(e) {
@@ -1087,47 +1087,47 @@
return
}
- // Steps 7-8. Find the common ancestor and bookmark node.
+ // Steps 11-12. 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.
+ // Step 13. The inner loop. Find the lastNode to reparent.
lastNode := furthestBlock
node := furthestBlock
x := p.oe.index(node)
- // Steps 9.1-9.3.
+ // Steps 13.1-13.2
for j := 0; j < 3; j++ {
- // Step 9.4.
+ // Step 13.3.
x--
node = p.oe[x]
- // Step 9.5.
+ // Step 13.4 - 13.5.
if p.afe.index(node) == -1 {
p.oe.remove(node)
continue
}
- // Step 9.6.
+ // Step 13.6.
if node == formattingElement {
break
}
- // Step 9.7.
+ // Step 13.7.
clone := node.clone()
p.afe[p.afe.index(node)] = clone
p.oe[p.oe.index(node)] = clone
node = clone
- // Step 9.8.
+ // Step 13.8.
if lastNode == furthestBlock {
bookmark = p.afe.index(node) + 1
}
- // Step 9.9.
+ // Step 13.9.
if lastNode.Parent != nil {
lastNode.Parent.RemoveChild(lastNode)
}
node.AppendChild(lastNode)
- // Step 9.10.
+ // Step 13.10.
lastNode = node
}
- // Step 10. Reparent lastNode to the common ancestor,
+ // Step 14. Reparent lastNode to the common ancestor,
// or for misnested table nodes, to the foster parent.
if lastNode.Parent != nil {
lastNode.Parent.RemoveChild(lastNode)
@@ -1139,13 +1139,13 @@
commonAncestor.AppendChild(lastNode)
}
- // Steps 11-13. Reparent nodes from the furthest block's children
+ // Steps 15-17. 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.
+ // Step 18. 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--
@@ -1153,13 +1153,15 @@
p.afe.remove(formattingElement)
p.afe.insert(bookmark, clone)
- // Step 15. Fix up the stack of open elements.
+ // Step 19. 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.
+// "Any other end tag" handling from 12.2.5.5 The rules for parsing tokens in foreign content
+// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inforeign
func (p *parser) inBodyEndTagOther(tagAtom a.Atom) {
for i := len(p.oe) - 1; i >= 0; i-- {
if p.oe[i].DataAtom == tagAtom {
diff --git a/go/src/golang.org/x/net/html/render.go b/go/src/golang.org/x/net/html/render.go
index 4a833b4..d34564f 100644
--- a/go/src/golang.org/x/net/html/render.go
+++ b/go/src/golang.org/x/net/html/render.go
@@ -14,7 +14,7 @@
type writer interface {
io.Writer
- WriteByte(c byte) error // in Go 1.1, use io.ByteWriter
+ io.ByteWriter
WriteString(string) (int, error)
}
diff --git a/go/src/golang.org/x/net/html/token_test.go b/go/src/golang.org/x/net/html/token_test.go
index f6988a8..20221c3 100644
--- a/go/src/golang.org/x/net/html/token_test.go
+++ b/go/src/golang.org/x/net/html/token_test.go
@@ -392,7 +392,7 @@
"½",
},
// Attribute tests:
- // http://dev.w3.org/html5/spec/Overview.html#attributes-0
+ // http://dev.w3.org/html5/pf-summary/Overview.html#attributes
{
"Empty attribute",
`<input disabled FOO>`,
diff --git a/go/src/golang.org/x/net/icmp/dstunreach.go b/go/src/golang.org/x/net/icmp/dstunreach.go
index 8241017..01dc660 100644
--- a/go/src/golang.org/x/net/icmp/dstunreach.go
+++ b/go/src/golang.org/x/net/icmp/dstunreach.go
@@ -7,35 +7,35 @@
// A DstUnreach represents an ICMP destination unreachable message
// body.
type DstUnreach struct {
- Data []byte // data
+ Data []byte // data, known as original datagram field
+ Extensions []Extension // extensions
}
// Len implements the Len method of MessageBody interface.
-func (p *DstUnreach) Len() int {
+func (p *DstUnreach) Len(proto int) int {
if p == nil {
return 0
}
- return 4 + len(p.Data)
+ l, _ := multipartMessageBodyDataLen(proto, p.Data, p.Extensions)
+ return l
}
// Marshal implements the Marshal method of MessageBody interface.
-func (p *DstUnreach) Marshal() ([]byte, error) {
- b := make([]byte, 4+len(p.Data))
- copy(b[4:], p.Data)
- return b, nil
+func (p *DstUnreach) Marshal(proto int) ([]byte, error) {
+ return marshalMultipartMessageBody(proto, p.Data, p.Extensions)
}
// parseDstUnreach parses b as an ICMP destination unreachable message
// body.
-func parseDstUnreach(b []byte) (MessageBody, error) {
- bodyLen := len(b)
- if bodyLen < 4 {
+func parseDstUnreach(proto int, b []byte) (MessageBody, error) {
+ if len(b) < 4 {
return nil, errMessageTooShort
}
p := &DstUnreach{}
- if bodyLen > 4 {
- p.Data = make([]byte, bodyLen-4)
- copy(p.Data, b[4:])
+ var err error
+ p.Data, p.Extensions, err = parseMultipartMessageBody(proto, b)
+ if err != nil {
+ return nil, err
}
return p, nil
}
diff --git a/go/src/golang.org/x/net/icmp/echo.go b/go/src/golang.org/x/net/icmp/echo.go
index dfac9cb..8943eab 100644
--- a/go/src/golang.org/x/net/icmp/echo.go
+++ b/go/src/golang.org/x/net/icmp/echo.go
@@ -12,7 +12,7 @@
}
// Len implements the Len method of MessageBody interface.
-func (p *Echo) Len() int {
+func (p *Echo) Len(proto int) int {
if p == nil {
return 0
}
@@ -20,7 +20,7 @@
}
// Marshal implements the Marshal method of MessageBody interface.
-func (p *Echo) Marshal() ([]byte, error) {
+func (p *Echo) Marshal(proto int) ([]byte, error) {
b := make([]byte, 4+len(p.Data))
b[0], b[1] = byte(p.ID>>8), byte(p.ID)
b[2], b[3] = byte(p.Seq>>8), byte(p.Seq)
@@ -29,7 +29,7 @@
}
// parseEcho parses b as an ICMP echo request or reply message body.
-func parseEcho(b []byte) (MessageBody, error) {
+func parseEcho(proto int, b []byte) (MessageBody, error) {
bodyLen := len(b)
if bodyLen < 4 {
return nil, errMessageTooShort
diff --git a/go/src/golang.org/x/net/icmp/endpoint.go b/go/src/golang.org/x/net/icmp/endpoint.go
index 5bf2cfe..3de49e6 100644
--- a/go/src/golang.org/x/net/icmp/endpoint.go
+++ b/go/src/golang.org/x/net/icmp/endpoint.go
@@ -6,6 +6,7 @@
import (
"net"
+ "runtime"
"syscall"
"time"
@@ -51,6 +52,15 @@
if !c.ok() {
return 0, nil, syscall.EINVAL
}
+ // Please be informed that ipv4.NewPacketConn enables
+ // IP_STRIPHDR option by default on Darwin.
+ // See golang.org/issue/9395 for futher information.
+ if runtime.GOOS == "darwin" {
+ if p, _ := c.ipc.(*ipv4.PacketConn); p != nil {
+ n, _, peer, err := p.ReadFrom(b)
+ return n, peer, err
+ }
+ }
return c.c.ReadFrom(b)
}
diff --git a/go/src/golang.org/x/net/icmp/extension.go b/go/src/golang.org/x/net/icmp/extension.go
new file mode 100644
index 0000000..720e167
--- /dev/null
+++ b/go/src/golang.org/x/net/icmp/extension.go
@@ -0,0 +1,87 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package icmp
+
+// An Extension represents an ICMP extension.
+type Extension interface {
+ // Len returns the length of ICMP extension.
+ // Proto must be either the ICMPv4 or ICMPv6 protocol number.
+ Len(proto int) int
+
+ // Marshal returns the binary enconding of ICMP extension.
+ // Proto must be either the ICMPv4 or ICMPv6 protocol number.
+ Marshal(proto int) ([]byte, error)
+}
+
+const extensionVersion = 2
+
+func validExtensionHeader(b []byte) bool {
+ v := int(b[0]&0xf0) >> 4
+ s := uint16(b[2])<<8 | uint16(b[3])
+ if s != 0 {
+ s = checksum(b)
+ }
+ if v != extensionVersion || s != 0 {
+ return false
+ }
+ return true
+}
+
+// parseExtensions parses b as a list of ICMP extensions.
+// The length attribute l must be the length attribute field in
+// received icmp messages.
+//
+// It will return a list of ICMP extensions and an adjusted length
+// attribute that represents the length of the padded original
+// datagram field. Otherwise, it returns an error.
+func parseExtensions(b []byte, l int) ([]Extension, int, error) {
+ // Still a lot of non-RFC 4884 compliant implementations are
+ // out there. Set the length attribute l to 128 when it looks
+ // inappropriate for backwards compatibility.
+ //
+ // A minimal extension at least requires 8 octets; 4 octets
+ // for an extension header, and 4 octets for a single object
+ // header.
+ //
+ // See RFC 4884 for further information.
+ if 128 > l || l+8 > len(b) {
+ l = 128
+ }
+ if l+8 > len(b) {
+ return nil, -1, errNoExtension
+ }
+ if !validExtensionHeader(b[l:]) {
+ if l == 128 {
+ return nil, -1, errNoExtension
+ }
+ l = 128
+ if !validExtensionHeader(b[l:]) {
+ return nil, -1, errNoExtension
+ }
+ }
+ var exts []Extension
+ for b = b[l+4:]; len(b) >= 4; {
+ ol := int(b[0])<<8 | int(b[1])
+ if 4 > ol || ol > len(b) {
+ break
+ }
+ switch b[2] {
+ case classMPLSLabelStack:
+ ext, err := parseMPLSLabelStack(b[:ol])
+ if err != nil {
+ return nil, -1, err
+ }
+ exts = append(exts, ext)
+ case classInterfaceInfo:
+ ext, err := parseInterfaceInfo(b[:ol])
+ if err != nil {
+ return nil, -1, err
+ }
+ exts = append(exts, ext)
+ }
+ b = b[ol:]
+ }
+ return exts, l, nil
+}
diff --git a/go/src/golang.org/x/net/icmp/extension_test.go b/go/src/golang.org/x/net/icmp/extension_test.go
new file mode 100644
index 0000000..0b3f7b9
--- /dev/null
+++ b/go/src/golang.org/x/net/icmp/extension_test.go
@@ -0,0 +1,259 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package icmp
+
+import (
+ "net"
+ "reflect"
+ "testing"
+
+ "golang.org/x/net/internal/iana"
+)
+
+var marshalAndParseExtensionTests = []struct {
+ proto int
+ hdr []byte
+ obj []byte
+ exts []Extension
+}{
+ // MPLS label stack with no label
+ {
+ proto: iana.ProtocolICMP,
+ hdr: []byte{
+ 0x20, 0x00, 0x00, 0x00,
+ },
+ obj: []byte{
+ 0x00, 0x04, 0x01, 0x01,
+ },
+ exts: []Extension{
+ &MPLSLabelStack{
+ Class: classMPLSLabelStack,
+ Type: typeIncomingMPLSLabelStack,
+ },
+ },
+ },
+ // MPLS label stack with a single label
+ {
+ proto: iana.ProtocolIPv6ICMP,
+ hdr: []byte{
+ 0x20, 0x00, 0x00, 0x00,
+ },
+ obj: []byte{
+ 0x00, 0x08, 0x01, 0x01,
+ 0x03, 0xe8, 0xe9, 0xff,
+ },
+ exts: []Extension{
+ &MPLSLabelStack{
+ Class: classMPLSLabelStack,
+ Type: typeIncomingMPLSLabelStack,
+ Labels: []MPLSLabel{
+ {
+ Label: 16014,
+ TC: 0x4,
+ S: true,
+ TTL: 255,
+ },
+ },
+ },
+ },
+ },
+ // MPLS label stack with multiple labels
+ {
+ proto: iana.ProtocolICMP,
+ hdr: []byte{
+ 0x20, 0x00, 0x00, 0x00,
+ },
+ obj: []byte{
+ 0x00, 0x0c, 0x01, 0x01,
+ 0x03, 0xe8, 0xde, 0xfe,
+ 0x03, 0xe8, 0xe1, 0xff,
+ },
+ exts: []Extension{
+ &MPLSLabelStack{
+ Class: classMPLSLabelStack,
+ Type: typeIncomingMPLSLabelStack,
+ Labels: []MPLSLabel{
+ {
+ Label: 16013,
+ TC: 0x7,
+ S: false,
+ TTL: 254,
+ },
+ {
+ Label: 16014,
+ TC: 0,
+ S: true,
+ TTL: 255,
+ },
+ },
+ },
+ },
+ },
+ // Interface information with no attribute
+ {
+ proto: iana.ProtocolICMP,
+ hdr: []byte{
+ 0x20, 0x00, 0x00, 0x00,
+ },
+ obj: []byte{
+ 0x00, 0x04, 0x02, 0x00,
+ },
+ exts: []Extension{
+ &InterfaceInfo{
+ Class: classInterfaceInfo,
+ },
+ },
+ },
+ // Interface information with ifIndex and name
+ {
+ proto: iana.ProtocolICMP,
+ hdr: []byte{
+ 0x20, 0x00, 0x00, 0x00,
+ },
+ obj: []byte{
+ 0x00, 0x10, 0x02, 0x0a,
+ 0x00, 0x00, 0x00, 0x10,
+ 0x08, byte('e'), byte('n'), byte('1'),
+ byte('0'), byte('1'), 0x00, 0x00,
+ },
+ exts: []Extension{
+ &InterfaceInfo{
+ Class: classInterfaceInfo,
+ Type: 0x0a,
+ Interface: &net.Interface{
+ Index: 16,
+ Name: "en101",
+ },
+ },
+ },
+ },
+ // Interface information with ifIndex, IPAddr, name and MTU
+ {
+ proto: iana.ProtocolIPv6ICMP,
+ hdr: []byte{
+ 0x20, 0x00, 0x00, 0x00,
+ },
+ obj: []byte{
+ 0x00, 0x28, 0x02, 0x0f,
+ 0x00, 0x00, 0x00, 0x0f,
+ 0x00, 0x02, 0x00, 0x00,
+ 0xfe, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01,
+ 0x08, byte('e'), byte('n'), byte('1'),
+ byte('0'), byte('1'), 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x00,
+ },
+ exts: []Extension{
+ &InterfaceInfo{
+ Class: classInterfaceInfo,
+ Type: 0x0f,
+ Interface: &net.Interface{
+ Index: 15,
+ Name: "en101",
+ MTU: 8192,
+ },
+ Addr: &net.IPAddr{
+ IP: net.ParseIP("fe80::1"),
+ Zone: "en101",
+ },
+ },
+ },
+ },
+}
+
+func TestMarshalAndParseExtension(t *testing.T) {
+ for i, tt := range marshalAndParseExtensionTests {
+ for j, ext := range tt.exts {
+ var err error
+ var b []byte
+ switch ext := ext.(type) {
+ case *MPLSLabelStack:
+ b, err = ext.Marshal(tt.proto)
+ if err != nil {
+ t.Errorf("#%v/%v: %v", i, j, err)
+ continue
+ }
+ case *InterfaceInfo:
+ b, err = ext.Marshal(tt.proto)
+ if err != nil {
+ t.Errorf("#%v/%v: %v", i, j, err)
+ continue
+ }
+ }
+ if !reflect.DeepEqual(b, tt.obj) {
+ t.Errorf("#%v/%v: got %#v; want %#v", i, j, b, tt.obj)
+ continue
+ }
+ }
+
+ for j, wire := range []struct {
+ data []byte // original datagram
+ inlattr int // length of padded original datagram, a hint
+ outlattr int // length of padded original datagram, a want
+ err error
+ }{
+ {nil, 0, -1, errNoExtension},
+ {make([]byte, 127), 128, -1, errNoExtension},
+
+ {make([]byte, 128), 127, -1, errNoExtension},
+ {make([]byte, 128), 128, -1, errNoExtension},
+ {make([]byte, 128), 129, -1, errNoExtension},
+
+ {append(make([]byte, 128), append(tt.hdr, tt.obj...)...), 127, 128, nil},
+ {append(make([]byte, 128), append(tt.hdr, tt.obj...)...), 128, 128, nil},
+ {append(make([]byte, 128), append(tt.hdr, tt.obj...)...), 129, 128, nil},
+
+ {append(make([]byte, 512), append(tt.hdr, tt.obj...)...), 511, -1, errNoExtension},
+ {append(make([]byte, 512), append(tt.hdr, tt.obj...)...), 512, 512, nil},
+ {append(make([]byte, 512), append(tt.hdr, tt.obj...)...), 513, -1, errNoExtension},
+ } {
+ exts, l, err := parseExtensions(wire.data, wire.inlattr)
+ if err != wire.err {
+ t.Errorf("#%v/%v: got %v; want %v", i, j, err, wire.err)
+ continue
+ }
+ if wire.err != nil {
+ continue
+ }
+ if l != wire.outlattr {
+ t.Errorf("#%v/%v: got %v; want %v", i, j, l, wire.outlattr)
+ }
+ if !reflect.DeepEqual(exts, tt.exts) {
+ for j, ext := range exts {
+ switch ext := ext.(type) {
+ case *MPLSLabelStack:
+ want := tt.exts[j].(*MPLSLabelStack)
+ t.Errorf("#%v/%v: got %#v; want %#v", i, j, ext, want)
+ case *InterfaceInfo:
+ want := tt.exts[j].(*InterfaceInfo)
+ t.Errorf("#%v/%v: got %#v; want %#v", i, j, ext, want)
+ }
+ }
+ continue
+ }
+ }
+ }
+}
+
+var parseInterfaceNameTests = []struct {
+ b []byte
+ error
+}{
+ {[]byte{0, 'e', 'n', '0'}, errInvalidExtension},
+ {[]byte{4, 'e', 'n', '0'}, nil},
+ {[]byte{7, 'e', 'n', '0', 0xff, 0xff, 0xff, 0xff}, errInvalidExtension},
+ {[]byte{8, 'e', 'n', '0', 0xff, 0xff, 0xff}, errMessageTooShort},
+}
+
+func TestParseInterfaceName(t *testing.T) {
+ ifi := InterfaceInfo{Interface: &net.Interface{}}
+ for i, tt := range parseInterfaceNameTests {
+ if _, err := ifi.parseName(tt.b); err != tt.error {
+ t.Errorf("#%d: got %v; want %v", i, err, tt.error)
+ }
+ }
+}
diff --git a/go/src/golang.org/x/net/icmp/helper_unix.go b/go/src/golang.org/x/net/icmp/helper_posix.go
similarity index 95%
rename from go/src/golang.org/x/net/icmp/helper_unix.go
rename to go/src/golang.org/x/net/icmp/helper_posix.go
index ced835c..398fd38 100644
--- a/go/src/golang.org/x/net/icmp/helper_unix.go
+++ b/go/src/golang.org/x/net/icmp/helper_posix.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
package icmp
diff --git a/go/src/golang.org/x/net/icmp/interface.go b/go/src/golang.org/x/net/icmp/interface.go
new file mode 100644
index 0000000..c7bf8dd
--- /dev/null
+++ b/go/src/golang.org/x/net/icmp/interface.go
@@ -0,0 +1,235 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package icmp
+
+import (
+ "net"
+ "strings"
+
+ "golang.org/x/net/internal/iana"
+)
+
+const (
+ classInterfaceInfo = 2
+
+ afiIPv4 = 1
+ afiIPv6 = 2
+)
+
+const (
+ attrMTU = 1 << iota
+ attrName
+ attrIPAddr
+ attrIfIndex
+)
+
+// An InterfaceInfo represents interface and next-hop identification.
+type InterfaceInfo struct {
+ Class int // extension object class number
+ Type int // extension object sub-type
+ Interface *net.Interface
+ Addr *net.IPAddr
+}
+
+func (ifi *InterfaceInfo) nameLen() int {
+ if len(ifi.Interface.Name) > 63 {
+ return 64
+ }
+ l := 1 + len(ifi.Interface.Name)
+ return (l + 3) &^ 3
+}
+
+func (ifi *InterfaceInfo) attrsAndLen(proto int) (attrs, l int) {
+ l = 4
+ if ifi.Interface != nil && ifi.Interface.Index > 0 {
+ attrs |= attrIfIndex
+ l += 4
+ if len(ifi.Interface.Name) > 0 {
+ attrs |= attrName
+ l += ifi.nameLen()
+ }
+ if ifi.Interface.MTU > 0 {
+ attrs |= attrMTU
+ l += 4
+ }
+ }
+ if ifi.Addr != nil {
+ switch proto {
+ case iana.ProtocolICMP:
+ if ifi.Addr.IP.To4() != nil {
+ attrs |= attrIPAddr
+ l += 4 + net.IPv4len
+ }
+ case iana.ProtocolIPv6ICMP:
+ if ifi.Addr.IP.To16() != nil && ifi.Addr.IP.To4() == nil {
+ attrs |= attrIPAddr
+ l += 4 + net.IPv6len
+ }
+ }
+ }
+ return
+}
+
+// Len implements the Len method of Extension interface.
+func (ifi *InterfaceInfo) Len(proto int) int {
+ _, l := ifi.attrsAndLen(proto)
+ return l
+}
+
+// Marshal implements the Marshal method of Extension interface.
+func (ifi *InterfaceInfo) Marshal(proto int) ([]byte, error) {
+ attrs, l := ifi.attrsAndLen(proto)
+ b := make([]byte, l)
+ if err := ifi.marshal(proto, b, attrs, l); err != nil {
+ return nil, err
+ }
+ return b, nil
+}
+
+func (ifi *InterfaceInfo) marshal(proto int, b []byte, attrs, l int) error {
+ b[0], b[1] = byte(l>>8), byte(l)
+ b[2], b[3] = classInterfaceInfo, byte(ifi.Type)
+ for b = b[4:]; len(b) > 0 && attrs != 0; {
+ switch {
+ case attrs&attrIfIndex != 0:
+ b = ifi.marshalIfIndex(proto, b)
+ attrs &^= attrIfIndex
+ case attrs&attrIPAddr != 0:
+ b = ifi.marshalIPAddr(proto, b)
+ attrs &^= attrIPAddr
+ case attrs&attrName != 0:
+ b = ifi.marshalName(proto, b)
+ attrs &^= attrName
+ case attrs&attrMTU != 0:
+ b = ifi.marshalMTU(proto, b)
+ attrs &^= attrMTU
+ }
+ }
+ return nil
+}
+
+func (ifi *InterfaceInfo) marshalIfIndex(proto int, b []byte) []byte {
+ b[0], b[1], b[2], b[3] = byte(ifi.Interface.Index>>24), byte(ifi.Interface.Index>>16), byte(ifi.Interface.Index>>8), byte(ifi.Interface.Index)
+ return b[4:]
+}
+
+func (ifi *InterfaceInfo) parseIfIndex(b []byte) ([]byte, error) {
+ if len(b) < 4 {
+ return nil, errMessageTooShort
+ }
+ ifi.Interface.Index = int(b[0])<<24 | int(b[1])<<16 | int(b[2])<<8 | int(b[3])
+ return b[4:], nil
+}
+
+func (ifi *InterfaceInfo) marshalIPAddr(proto int, b []byte) []byte {
+ switch proto {
+ case iana.ProtocolICMP:
+ b[0], b[1] = byte(afiIPv4>>8), byte(afiIPv4)
+ copy(b[4:4+net.IPv4len], ifi.Addr.IP.To4())
+ b = b[4+net.IPv4len:]
+ case iana.ProtocolIPv6ICMP:
+ b[0], b[1] = byte(afiIPv6>>8), byte(afiIPv6)
+ copy(b[4:4+net.IPv6len], ifi.Addr.IP.To16())
+ b = b[4+net.IPv6len:]
+ }
+ return b
+}
+
+func (ifi *InterfaceInfo) parseIPAddr(b []byte) ([]byte, error) {
+ if len(b) < 4 {
+ return nil, errMessageTooShort
+ }
+ afi := int(b[0])<<8 | int(b[1])
+ b = b[4:]
+ switch afi {
+ case afiIPv4:
+ if len(b) < net.IPv4len {
+ return nil, errMessageTooShort
+ }
+ ifi.Addr.IP = make(net.IP, net.IPv4len)
+ copy(ifi.Addr.IP, b[:net.IPv4len])
+ b = b[net.IPv4len:]
+ case afiIPv6:
+ if len(b) < net.IPv6len {
+ return nil, errMessageTooShort
+ }
+ ifi.Addr.IP = make(net.IP, net.IPv6len)
+ copy(ifi.Addr.IP, b[:net.IPv6len])
+ b = b[net.IPv6len:]
+ }
+ return b, nil
+}
+
+func (ifi *InterfaceInfo) marshalName(proto int, b []byte) []byte {
+ l := byte(ifi.nameLen())
+ b[0] = l
+ copy(b[1:], []byte(ifi.Interface.Name))
+ return b[l:]
+}
+
+func (ifi *InterfaceInfo) parseName(b []byte) ([]byte, error) {
+ if 4 > len(b) || len(b) < int(b[0]) {
+ return nil, errMessageTooShort
+ }
+ l := int(b[0])
+ if l%4 != 0 || 4 > l || l > 64 {
+ return nil, errInvalidExtension
+ }
+ var name [63]byte
+ copy(name[:], b[1:l])
+ ifi.Interface.Name = strings.Trim(string(name[:]), "\000")
+ return b[l:], nil
+}
+
+func (ifi *InterfaceInfo) marshalMTU(proto int, b []byte) []byte {
+ b[0], b[1], b[2], b[3] = byte(ifi.Interface.MTU>>24), byte(ifi.Interface.MTU>>16), byte(ifi.Interface.MTU>>8), byte(ifi.Interface.MTU)
+ return b[4:]
+}
+
+func (ifi *InterfaceInfo) parseMTU(b []byte) ([]byte, error) {
+ if len(b) < 4 {
+ return nil, errMessageTooShort
+ }
+ ifi.Interface.MTU = int(b[0])<<24 | int(b[1])<<16 | int(b[2])<<8 | int(b[3])
+ return b[4:], nil
+}
+
+func parseInterfaceInfo(b []byte) (Extension, error) {
+ ifi := &InterfaceInfo{
+ Class: int(b[2]),
+ Type: int(b[3]),
+ }
+ if ifi.Type&(attrIfIndex|attrName|attrMTU) != 0 {
+ ifi.Interface = &net.Interface{}
+ }
+ if ifi.Type&attrIPAddr != 0 {
+ ifi.Addr = &net.IPAddr{}
+ }
+ attrs := ifi.Type & (attrIfIndex | attrIPAddr | attrName | attrMTU)
+ for b = b[4:]; len(b) > 0 && attrs != 0; {
+ var err error
+ switch {
+ case attrs&attrIfIndex != 0:
+ b, err = ifi.parseIfIndex(b)
+ attrs &^= attrIfIndex
+ case attrs&attrIPAddr != 0:
+ b, err = ifi.parseIPAddr(b)
+ attrs &^= attrIPAddr
+ case attrs&attrName != 0:
+ b, err = ifi.parseName(b)
+ attrs &^= attrName
+ case attrs&attrMTU != 0:
+ b, err = ifi.parseMTU(b)
+ attrs &^= attrMTU
+ }
+ if err != nil {
+ return nil, err
+ }
+ }
+ if ifi.Interface != nil && ifi.Interface.Name != "" && ifi.Addr != nil && ifi.Addr.IP.To16() != nil && ifi.Addr.IP.To4() == nil {
+ ifi.Addr.Zone = ifi.Interface.Name
+ }
+ return ifi, nil
+}
diff --git a/go/src/golang.org/x/net/icmp/listen_unix.go b/go/src/golang.org/x/net/icmp/listen_posix.go
similarity index 92%
rename from go/src/golang.org/x/net/icmp/listen_unix.go
rename to go/src/golang.org/x/net/icmp/listen_posix.go
index e99e67d..fa1653b 100644
--- a/go/src/golang.org/x/net/icmp/listen_unix.go
+++ b/go/src/golang.org/x/net/icmp/listen_posix.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows
package icmp
@@ -57,7 +57,7 @@
proto = iana.ProtocolIPv6ICMP
}
}
- var err error
+ var cerr error
var c net.PacketConn
switch family {
case syscall.AF_INET, syscall.AF_INET6:
@@ -80,12 +80,12 @@
}
f := os.NewFile(uintptr(s), "datagram-oriented icmp")
defer f.Close()
- c, err = net.FilePacketConn(f)
+ c, cerr = net.FilePacketConn(f)
default:
- c, err = net.ListenPacket(network, address)
+ c, cerr = net.ListenPacket(network, address)
}
- if err != nil {
- return nil, err
+ if cerr != nil {
+ return nil, cerr
}
switch proto {
case iana.ProtocolICMP:
diff --git a/go/src/golang.org/x/net/icmp/listen_stub.go b/go/src/golang.org/x/net/icmp/listen_stub.go
index 396a556..668728d 100644
--- a/go/src/golang.org/x/net/icmp/listen_stub.go
+++ b/go/src/golang.org/x/net/icmp/listen_stub.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build nacl plan9 windows
+// +build nacl plan9
package icmp
diff --git a/go/src/golang.org/x/net/icmp/message.go b/go/src/golang.org/x/net/icmp/message.go
index 3d89108..3f9ccb1 100644
--- a/go/src/golang.org/x/net/icmp/message.go
+++ b/go/src/golang.org/x/net/icmp/message.go
@@ -7,6 +7,10 @@
// ICMPv4 and ICMPv6.
//
// ICMPv4 and ICMPv6 are defined in RFC 792 and RFC 4443.
+// Multi-part message support for ICMP is defined in RFC 4884.
+// ICMP extensions for MPLS are defined in RFC 4950.
+// ICMP extensions for interface and next-hop identification are
+// defined in RFC 5837.
package icmp // import "golang.org/x/net/icmp"
import (
@@ -20,12 +24,28 @@
)
var (
- errMessageTooShort = errors.New("message too short")
- errHeaderTooShort = errors.New("header too short")
- errBufferTooShort = errors.New("buffer too short")
- errOpNoSupport = errors.New("operation not supported")
+ errMessageTooShort = errors.New("message too short")
+ errHeaderTooShort = errors.New("header too short")
+ errBufferTooShort = errors.New("buffer too short")
+ errOpNoSupport = errors.New("operation not supported")
+ errNoExtension = errors.New("no extension")
+ errInvalidExtension = errors.New("invalid extension")
)
+func checksum(b []byte) uint16 {
+ 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
+ return ^uint16(s)
+}
+
// A Type represents an ICMP message type.
type Type interface {
Protocol() int
@@ -62,8 +82,8 @@
if m.Type.Protocol() == iana.ProtocolIPv6ICMP && psh != nil {
b = append(psh, b...)
}
- if m.Body != nil && m.Body.Len() != 0 {
- mb, err := m.Body.Marshal()
+ if m.Body != nil && m.Body.Len(m.Type.Protocol()) != 0 {
+ mb, err := m.Body.Marshal(m.Type.Protocol())
if err != nil {
return nil, err
}
@@ -76,24 +96,15 @@
off, l := 2*net.IPv6len, len(b)-len(psh)
b[off], b[off+1], b[off+2], b[off+3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l)
}
- 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
+ s := checksum(b)
// Place checksum back in header; using ^= avoids the
// assumption the checksum bytes are zero.
- b[len(psh)+2] ^= byte(^s)
- b[len(psh)+3] ^= byte(^s >> 8)
+ b[len(psh)+2] ^= byte(s)
+ b[len(psh)+3] ^= byte(s >> 8)
return b[len(psh):], nil
}
-var parseFns = map[Type]func([]byte) (MessageBody, error){
+var parseFns = map[Type]func(int, []byte) (MessageBody, error){
ipv4.ICMPTypeDestinationUnreachable: parseDstUnreach,
ipv4.ICMPTypeTimeExceeded: parseTimeExceeded,
ipv4.ICMPTypeParameterProblem: parseParamProb,
@@ -127,9 +138,9 @@
return nil, syscall.EINVAL
}
if fn, ok := parseFns[m.Type]; !ok {
- m.Body, err = parseDefaultMessageBody(b[4:])
+ m.Body, err = parseDefaultMessageBody(proto, b[4:])
} else {
- m.Body, err = fn(b[4:])
+ m.Body, err = fn(proto, b[4:])
}
if err != nil {
return nil, err
diff --git a/go/src/golang.org/x/net/icmp/message_test.go b/go/src/golang.org/x/net/icmp/message_test.go
index 162bf7f..5d2605f 100644
--- a/go/src/golang.org/x/net/icmp/message_test.go
+++ b/go/src/golang.org/x/net/icmp/message_test.go
@@ -51,7 +51,7 @@
}
func TestMarshalAndParseMessageForIPv4(t *testing.T) {
- for _, tt := range marshalAndParseMessageForIPv4Tests {
+ for i, tt := range marshalAndParseMessageForIPv4Tests {
b, err := tt.Marshal(nil)
if err != nil {
t.Fatal(err)
@@ -61,10 +61,10 @@
t.Fatal(err)
}
if m.Type != tt.Type || m.Code != tt.Code {
- t.Errorf("got %v; want %v", m, &tt)
+ t.Errorf("#%v: got %v; want %v", i, m, &tt)
}
if !reflect.DeepEqual(m.Body, tt.Body) {
- t.Errorf("got %v; want %v", m.Body, tt.Body)
+ t.Errorf("#%v: got %v; want %v", i, m.Body, tt.Body)
}
}
}
@@ -113,7 +113,7 @@
func TestMarshalAndParseMessageForIPv6(t *testing.T) {
pshicmp := icmp.IPv6PseudoHeader(net.ParseIP("fe80::1"), net.ParseIP("ff02::1"))
- for _, tt := range marshalAndParseMessageForIPv6Tests {
+ for i, tt := range marshalAndParseMessageForIPv6Tests {
for _, psh := range [][]byte{pshicmp, nil} {
b, err := tt.Marshal(psh)
if err != nil {
@@ -124,10 +124,10 @@
t.Fatal(err)
}
if m.Type != tt.Type || m.Code != tt.Code {
- t.Errorf("got %v; want %v", m, &tt)
+ t.Errorf("#%v: got %v; want %v", i, m, &tt)
}
if !reflect.DeepEqual(m.Body, tt.Body) {
- t.Errorf("got %v; want %v", m.Body, tt.Body)
+ t.Errorf("#%v: got %v; want %v", i, m.Body, tt.Body)
}
}
}
diff --git a/go/src/golang.org/x/net/icmp/messagebody.go b/go/src/golang.org/x/net/icmp/messagebody.go
index f653ab6..d314480 100644
--- a/go/src/golang.org/x/net/icmp/messagebody.go
+++ b/go/src/golang.org/x/net/icmp/messagebody.go
@@ -7,10 +7,12 @@
// A MessageBody represents an ICMP message body.
type MessageBody interface {
// Len returns the length of ICMP message body.
- Len() int
+ // Proto must be either the ICMPv4 or ICMPv6 protocol number.
+ Len(proto int) int
// Marshal returns the binary enconding of ICMP message body.
- Marshal() ([]byte, error)
+ // Proto must be either the ICMPv4 or ICMPv6 protocol number.
+ Marshal(proto int) ([]byte, error)
}
// A DefaultMessageBody represents the default message body.
@@ -19,7 +21,7 @@
}
// Len implements the Len method of MessageBody interface.
-func (p *DefaultMessageBody) Len() int {
+func (p *DefaultMessageBody) Len(proto int) int {
if p == nil {
return 0
}
@@ -27,12 +29,12 @@
}
// Marshal implements the Marshal method of MessageBody interface.
-func (p *DefaultMessageBody) Marshal() ([]byte, error) {
+func (p *DefaultMessageBody) Marshal(proto int) ([]byte, error) {
return p.Data, nil
}
// parseDefaultMessageBody parses b as an ICMP message body.
-func parseDefaultMessageBody(b []byte) (MessageBody, error) {
+func parseDefaultMessageBody(proto int, b []byte) (MessageBody, error) {
p := &DefaultMessageBody{Data: make([]byte, len(b))}
copy(p.Data, b)
return p, nil
diff --git a/go/src/golang.org/x/net/icmp/mpls.go b/go/src/golang.org/x/net/icmp/mpls.go
new file mode 100644
index 0000000..31bcfe8
--- /dev/null
+++ b/go/src/golang.org/x/net/icmp/mpls.go
@@ -0,0 +1,75 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package icmp
+
+// A MPLSLabel represents a MPLS label stack entry.
+type MPLSLabel struct {
+ Label int // label value
+ TC int // traffic class; formerly experimental use
+ S bool // bottom of stack
+ TTL int // time to live
+}
+
+const (
+ classMPLSLabelStack = 1
+ typeIncomingMPLSLabelStack = 1
+)
+
+// A MPLSLabelStack represents a MPLS label stack.
+type MPLSLabelStack struct {
+ Class int // extension object class number
+ Type int // extension object sub-type
+ Labels []MPLSLabel
+}
+
+// Len implements the Len method of Extension interface.
+func (ls *MPLSLabelStack) Len(proto int) int {
+ return 4 + (4 * len(ls.Labels))
+}
+
+// Marshal implements the Marshal method of Extension interface.
+func (ls *MPLSLabelStack) Marshal(proto int) ([]byte, error) {
+ b := make([]byte, ls.Len(proto))
+ if err := ls.marshal(proto, b); err != nil {
+ return nil, err
+ }
+ return b, nil
+}
+
+func (ls *MPLSLabelStack) marshal(proto int, b []byte) error {
+ l := ls.Len(proto)
+ b[0], b[1] = byte(l>>8), byte(l)
+ b[2], b[3] = classMPLSLabelStack, typeIncomingMPLSLabelStack
+ off := 4
+ for _, ll := range ls.Labels {
+ b[off], b[off+1], b[off+2] = byte(ll.Label>>12), byte(ll.Label>>4&0xff), byte(ll.Label<<4&0xf0)
+ b[off+2] |= byte(ll.TC << 1 & 0x0e)
+ if ll.S {
+ b[off+2] |= 0x1
+ }
+ b[off+3] = byte(ll.TTL)
+ off += 4
+ }
+ return nil
+}
+
+func parseMPLSLabelStack(b []byte) (Extension, error) {
+ ls := &MPLSLabelStack{
+ Class: int(b[2]),
+ Type: int(b[3]),
+ }
+ for b = b[4:]; len(b) >= 4; b = b[4:] {
+ ll := MPLSLabel{
+ Label: int(b[0])<<12 | int(b[1])<<4 | int(b[2])>>4,
+ TC: int(b[2]&0x0e) >> 1,
+ TTL: int(b[3]),
+ }
+ if b[2]&0x1 != 0 {
+ ll.S = true
+ }
+ ls.Labels = append(ls.Labels, ll)
+ }
+ return ls, nil
+}
diff --git a/go/src/golang.org/x/net/icmp/multipart.go b/go/src/golang.org/x/net/icmp/multipart.go
new file mode 100644
index 0000000..54ac8bc
--- /dev/null
+++ b/go/src/golang.org/x/net/icmp/multipart.go
@@ -0,0 +1,109 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package icmp
+
+import "golang.org/x/net/internal/iana"
+
+// multipartMessageBodyDataLen takes b as an original datagram and
+// exts as extensions, and returns a required length for message body
+// and a required length for a padded original datagram in wire
+// format.
+func multipartMessageBodyDataLen(proto int, b []byte, exts []Extension) (bodyLen, dataLen int) {
+ for _, ext := range exts {
+ bodyLen += ext.Len(proto)
+ }
+ if bodyLen > 0 {
+ dataLen = multipartMessageOrigDatagramLen(proto, b)
+ bodyLen += 4 // length of extension header
+ } else {
+ dataLen = len(b)
+ }
+ bodyLen += dataLen
+ return bodyLen, dataLen
+}
+
+// multipartMessageOrigDatagramLen takes b as an original datagram,
+// and returns a required length for a padded orignal datagram in wire
+// format.
+func multipartMessageOrigDatagramLen(proto int, b []byte) int {
+ roundup := func(b []byte, align int) int {
+ // According to RFC 4884, the padded original datagram
+ // field must contain at least 128 octets.
+ if len(b) < 128 {
+ return 128
+ }
+ r := len(b)
+ return (r + align) &^ (align - 1)
+ }
+ switch proto {
+ case iana.ProtocolICMP:
+ return roundup(b, 4)
+ case iana.ProtocolIPv6ICMP:
+ return roundup(b, 8)
+ default:
+ return len(b)
+ }
+}
+
+// marshalMultipartMessageBody takes data as an original datagram and
+// exts as extesnsions, and returns a binary encoding of message body.
+// It can be used for non-multipart message bodies when exts is nil.
+func marshalMultipartMessageBody(proto int, data []byte, exts []Extension) ([]byte, error) {
+ bodyLen, dataLen := multipartMessageBodyDataLen(proto, data, exts)
+ b := make([]byte, 4+bodyLen)
+ copy(b[4:], data)
+ off := dataLen + 4
+ if len(exts) > 0 {
+ b[dataLen+4] = byte(extensionVersion << 4)
+ off += 4 // length of object header
+ for _, ext := range exts {
+ switch ext := ext.(type) {
+ case *MPLSLabelStack:
+ if err := ext.marshal(proto, b[off:]); err != nil {
+ return nil, err
+ }
+ off += ext.Len(proto)
+ case *InterfaceInfo:
+ attrs, l := ext.attrsAndLen(proto)
+ if err := ext.marshal(proto, b[off:], attrs, l); err != nil {
+ return nil, err
+ }
+ off += ext.Len(proto)
+ }
+ }
+ s := checksum(b[dataLen+4:])
+ b[dataLen+4+2] ^= byte(s)
+ b[dataLen+4+3] ^= byte(s >> 8)
+ switch proto {
+ case iana.ProtocolICMP:
+ b[1] = byte(dataLen / 4)
+ case iana.ProtocolIPv6ICMP:
+ b[0] = byte(dataLen / 8)
+ }
+ }
+ return b, nil
+}
+
+// parseMultipartMessageBody parses b as either a non-multipart
+// message body or a multipart message body.
+func parseMultipartMessageBody(proto int, b []byte) ([]byte, []Extension, error) {
+ var l int
+ switch proto {
+ case iana.ProtocolICMP:
+ l = 4 * int(b[1])
+ case iana.ProtocolIPv6ICMP:
+ l = 8 * int(b[0])
+ }
+ if len(b) == 4 {
+ return nil, nil, nil
+ }
+ exts, l, err := parseExtensions(b[4:], l)
+ if err != nil {
+ l = len(b) - 4
+ }
+ data := make([]byte, l)
+ copy(data, b[4:])
+ return data, exts, nil
+}
diff --git a/go/src/golang.org/x/net/icmp/multipart_test.go b/go/src/golang.org/x/net/icmp/multipart_test.go
new file mode 100644
index 0000000..9248e47
--- /dev/null
+++ b/go/src/golang.org/x/net/icmp/multipart_test.go
@@ -0,0 +1,315 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package icmp_test
+
+import (
+ "fmt"
+ "net"
+ "reflect"
+ "testing"
+
+ "golang.org/x/net/icmp"
+ "golang.org/x/net/internal/iana"
+ "golang.org/x/net/ipv4"
+ "golang.org/x/net/ipv6"
+)
+
+var marshalAndParseMultipartMessageForIPv4Tests = []icmp.Message{
+ {
+ Type: ipv4.ICMPTypeDestinationUnreachable, Code: 15,
+ Body: &icmp.DstUnreach{
+ Data: []byte("ERROR-INVOKING-PACKET"),
+ Extensions: []icmp.Extension{
+ &icmp.MPLSLabelStack{
+ Class: 1,
+ Type: 1,
+ Labels: []icmp.MPLSLabel{
+ {
+ Label: 16014,
+ TC: 0x4,
+ S: true,
+ TTL: 255,
+ },
+ },
+ },
+ &icmp.InterfaceInfo{
+ Class: 2,
+ Type: 0x0f,
+ Interface: &net.Interface{
+ Index: 15,
+ Name: "en101",
+ MTU: 8192,
+ },
+ Addr: &net.IPAddr{
+ IP: net.IPv4(192, 168, 0, 1).To4(),
+ },
+ },
+ },
+ },
+ },
+ {
+ Type: ipv4.ICMPTypeTimeExceeded, Code: 1,
+ Body: &icmp.TimeExceeded{
+ Data: []byte("ERROR-INVOKING-PACKET"),
+ Extensions: []icmp.Extension{
+ &icmp.InterfaceInfo{
+ Class: 2,
+ Type: 0x0f,
+ Interface: &net.Interface{
+ Index: 15,
+ Name: "en101",
+ MTU: 8192,
+ },
+ Addr: &net.IPAddr{
+ IP: net.IPv4(192, 168, 0, 1).To4(),
+ },
+ },
+ &icmp.MPLSLabelStack{
+ Class: 1,
+ Type: 1,
+ Labels: []icmp.MPLSLabel{
+ {
+ Label: 16014,
+ TC: 0x4,
+ S: true,
+ TTL: 255,
+ },
+ },
+ },
+ },
+ },
+ },
+ {
+ Type: ipv4.ICMPTypeParameterProblem, Code: 2,
+ Body: &icmp.ParamProb{
+ Pointer: 8,
+ Data: []byte("ERROR-INVOKING-PACKET"),
+ Extensions: []icmp.Extension{
+ &icmp.MPLSLabelStack{
+ Class: 1,
+ Type: 1,
+ Labels: []icmp.MPLSLabel{
+ {
+ Label: 16014,
+ TC: 0x4,
+ S: true,
+ TTL: 255,
+ },
+ },
+ },
+ &icmp.InterfaceInfo{
+ Class: 2,
+ Type: 0x0f,
+ Interface: &net.Interface{
+ Index: 15,
+ Name: "en101",
+ MTU: 8192,
+ },
+ Addr: &net.IPAddr{
+ IP: net.IPv4(192, 168, 0, 1).To4(),
+ },
+ },
+ &icmp.InterfaceInfo{
+ Class: 2,
+ Type: 0x2f,
+ Interface: &net.Interface{
+ Index: 16,
+ Name: "en102",
+ MTU: 8192,
+ },
+ Addr: &net.IPAddr{
+ IP: net.IPv4(192, 168, 0, 2).To4(),
+ },
+ },
+ },
+ },
+ },
+}
+
+func TestMarshalAndParseMultipartMessageForIPv4(t *testing.T) {
+ for i, tt := range marshalAndParseMultipartMessageForIPv4Tests {
+ b, err := tt.Marshal(nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if b[5] != 32 {
+ t.Errorf("#%v: got %v; want 32", i, b[5])
+ }
+ m, err := icmp.ParseMessage(iana.ProtocolICMP, b)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if m.Type != tt.Type || m.Code != tt.Code {
+ t.Errorf("#%v: got %v; want %v", i, m, &tt)
+ }
+ switch m.Type {
+ case ipv4.ICMPTypeDestinationUnreachable:
+ got, want := m.Body.(*icmp.DstUnreach), tt.Body.(*icmp.DstUnreach)
+ if !reflect.DeepEqual(got.Extensions, want.Extensions) {
+ t.Error(dumpExtensions(i, got.Extensions, want.Extensions))
+ }
+ if len(got.Data) != 128 {
+ t.Errorf("#%v: got %v; want 128", i, len(got.Data))
+ }
+ case ipv4.ICMPTypeTimeExceeded:
+ got, want := m.Body.(*icmp.TimeExceeded), tt.Body.(*icmp.TimeExceeded)
+ if !reflect.DeepEqual(got.Extensions, want.Extensions) {
+ t.Error(dumpExtensions(i, got.Extensions, want.Extensions))
+ }
+ if len(got.Data) != 128 {
+ t.Errorf("#%v: got %v; want 128", i, len(got.Data))
+ }
+ case ipv4.ICMPTypeParameterProblem:
+ got, want := m.Body.(*icmp.ParamProb), tt.Body.(*icmp.ParamProb)
+ if !reflect.DeepEqual(got.Extensions, want.Extensions) {
+ t.Error(dumpExtensions(i, got.Extensions, want.Extensions))
+ }
+ if len(got.Data) != 128 {
+ t.Errorf("#%v: got %v; want 128", i, len(got.Data))
+ }
+ }
+ }
+}
+
+var marshalAndParseMultipartMessageForIPv6Tests = []icmp.Message{
+ {
+ Type: ipv6.ICMPTypeDestinationUnreachable, Code: 6,
+ Body: &icmp.DstUnreach{
+ Data: []byte("ERROR-INVOKING-PACKET"),
+ Extensions: []icmp.Extension{
+ &icmp.MPLSLabelStack{
+ Class: 1,
+ Type: 1,
+ Labels: []icmp.MPLSLabel{
+ {
+ Label: 16014,
+ TC: 0x4,
+ S: true,
+ TTL: 255,
+ },
+ },
+ },
+ &icmp.InterfaceInfo{
+ Class: 2,
+ Type: 0x0f,
+ Interface: &net.Interface{
+ Index: 15,
+ Name: "en101",
+ MTU: 8192,
+ },
+ Addr: &net.IPAddr{
+ IP: net.ParseIP("fe80::1"),
+ Zone: "en101",
+ },
+ },
+ },
+ },
+ },
+ {
+ Type: ipv6.ICMPTypeTimeExceeded, Code: 1,
+ Body: &icmp.TimeExceeded{
+ Data: []byte("ERROR-INVOKING-PACKET"),
+ Extensions: []icmp.Extension{
+ &icmp.InterfaceInfo{
+ Class: 2,
+ Type: 0x0f,
+ Interface: &net.Interface{
+ Index: 15,
+ Name: "en101",
+ MTU: 8192,
+ },
+ Addr: &net.IPAddr{
+ IP: net.ParseIP("fe80::1"),
+ Zone: "en101",
+ },
+ },
+ &icmp.MPLSLabelStack{
+ Class: 1,
+ Type: 1,
+ Labels: []icmp.MPLSLabel{
+ {
+ Label: 16014,
+ TC: 0x4,
+ S: true,
+ TTL: 255,
+ },
+ },
+ },
+ &icmp.InterfaceInfo{
+ Class: 2,
+ Type: 0x2f,
+ Interface: &net.Interface{
+ Index: 16,
+ Name: "en102",
+ MTU: 8192,
+ },
+ Addr: &net.IPAddr{
+ IP: net.ParseIP("fe80::1"),
+ Zone: "en102",
+ },
+ },
+ },
+ },
+ },
+}
+
+func TestMarshalAndParseMultipartMessageForIPv6(t *testing.T) {
+ pshicmp := icmp.IPv6PseudoHeader(net.ParseIP("fe80::1"), net.ParseIP("ff02::1"))
+ for i, tt := range marshalAndParseMultipartMessageForIPv6Tests {
+ for _, psh := range [][]byte{pshicmp, nil} {
+ b, err := tt.Marshal(psh)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if b[4] != 16 {
+ t.Errorf("#%v: got %v; want 16", i, b[4])
+ }
+ m, err := icmp.ParseMessage(iana.ProtocolIPv6ICMP, b)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if m.Type != tt.Type || m.Code != tt.Code {
+ t.Errorf("#%v: got %v; want %v", i, m, &tt)
+ }
+ switch m.Type {
+ case ipv6.ICMPTypeDestinationUnreachable:
+ got, want := m.Body.(*icmp.DstUnreach), tt.Body.(*icmp.DstUnreach)
+ if !reflect.DeepEqual(got.Extensions, want.Extensions) {
+ t.Error(dumpExtensions(i, got.Extensions, want.Extensions))
+ }
+ if len(got.Data) != 128 {
+ t.Errorf("#%v: got %v; want 128", i, len(got.Data))
+ }
+ case ipv6.ICMPTypeTimeExceeded:
+ got, want := m.Body.(*icmp.TimeExceeded), tt.Body.(*icmp.TimeExceeded)
+ if !reflect.DeepEqual(got.Extensions, want.Extensions) {
+ t.Error(dumpExtensions(i, got.Extensions, want.Extensions))
+ }
+ if len(got.Data) != 128 {
+ t.Errorf("#%v: got %v; want 128", i, len(got.Data))
+ }
+ }
+ }
+ }
+}
+
+func dumpExtensions(i int, gotExts, wantExts []icmp.Extension) string {
+ var s string
+ for j, got := range gotExts {
+ switch got := got.(type) {
+ case *icmp.MPLSLabelStack:
+ want := wantExts[j].(*icmp.MPLSLabelStack)
+ if !reflect.DeepEqual(got, want) {
+ s += fmt.Sprintf("#%v/%v: got %#v; want %#v\n", i, j, got, want)
+ }
+ case *icmp.InterfaceInfo:
+ want := wantExts[j].(*icmp.InterfaceInfo)
+ if !reflect.DeepEqual(got, want) {
+ s += fmt.Sprintf("#%v/%v: got %#v, %#v, %#v; want %#v, %#v, %#v\n", i, j, got, got.Interface, got.Addr, want, want.Interface, want.Addr)
+ }
+ }
+ }
+ return s[:len(s)-1]
+}
diff --git a/go/src/golang.org/x/net/icmp/packettoobig.go b/go/src/golang.org/x/net/icmp/packettoobig.go
index fc10192..91d289b 100644
--- a/go/src/golang.org/x/net/icmp/packettoobig.go
+++ b/go/src/golang.org/x/net/icmp/packettoobig.go
@@ -7,11 +7,11 @@
// A PacketTooBig represents an ICMP packet too big message body.
type PacketTooBig struct {
MTU int // maximum transmission unit of the nexthop link
- Data []byte // data
+ Data []byte // data, known as original datagram field
}
// Len implements the Len method of MessageBody interface.
-func (p *PacketTooBig) Len() int {
+func (p *PacketTooBig) Len(proto int) int {
if p == nil {
return 0
}
@@ -19,7 +19,7 @@
}
// Marshal implements the Marshal method of MessageBody interface.
-func (p *PacketTooBig) Marshal() ([]byte, error) {
+func (p *PacketTooBig) Marshal(proto int) ([]byte, error) {
b := make([]byte, 4+len(p.Data))
b[0], b[1], b[2], b[3] = byte(p.MTU>>24), byte(p.MTU>>16), byte(p.MTU>>8), byte(p.MTU)
copy(b[4:], p.Data)
@@ -27,7 +27,7 @@
}
// parsePacketTooBig parses b as an ICMP packet too big message body.
-func parsePacketTooBig(b []byte) (MessageBody, error) {
+func parsePacketTooBig(proto int, b []byte) (MessageBody, error) {
bodyLen := len(b)
if bodyLen < 4 {
return nil, errMessageTooShort
diff --git a/go/src/golang.org/x/net/icmp/paramprob.go b/go/src/golang.org/x/net/icmp/paramprob.go
index be32ce0..f200a7c 100644
--- a/go/src/golang.org/x/net/icmp/paramprob.go
+++ b/go/src/golang.org/x/net/icmp/paramprob.go
@@ -4,38 +4,57 @@
package icmp
+import "golang.org/x/net/internal/iana"
+
// A ParamProb represents an ICMP parameter problem message body.
type ParamProb struct {
- Pointer uintptr // offset within the data where the error was detected
- Data []byte // data
+ Pointer uintptr // offset within the data where the error was detected
+ Data []byte // data, known as original datagram field
+ Extensions []Extension // extensions
}
// Len implements the Len method of MessageBody interface.
-func (p *ParamProb) Len() int {
+func (p *ParamProb) Len(proto int) int {
if p == nil {
return 0
}
- return 4 + len(p.Data)
+ l, _ := multipartMessageBodyDataLen(proto, p.Data, p.Extensions)
+ return l
}
// Marshal implements the Marshal method of MessageBody interface.
-func (p *ParamProb) Marshal() ([]byte, error) {
- b := make([]byte, 4+len(p.Data))
- b[0], b[1], b[2], b[3] = byte(p.Pointer>>24), byte(p.Pointer>>16), byte(p.Pointer>>8), byte(p.Pointer)
- copy(b[4:], p.Data)
+func (p *ParamProb) Marshal(proto int) ([]byte, error) {
+ if proto == iana.ProtocolIPv6ICMP {
+ b := make([]byte, 4+p.Len(proto))
+ b[0], b[1], b[2], b[3] = byte(p.Pointer>>24), byte(p.Pointer>>16), byte(p.Pointer>>8), byte(p.Pointer)
+ copy(b[4:], p.Data)
+ return b, nil
+ }
+ b, err := marshalMultipartMessageBody(proto, p.Data, p.Extensions)
+ if err != nil {
+ return nil, err
+ }
+ b[0] = byte(p.Pointer)
return b, nil
}
// parseParamProb parses b as an ICMP parameter problem message body.
-func parseParamProb(b []byte) (MessageBody, error) {
- bodyLen := len(b)
- if bodyLen < 4 {
+func parseParamProb(proto int, b []byte) (MessageBody, error) {
+ if len(b) < 4 {
return nil, errMessageTooShort
}
- p := &ParamProb{Pointer: uintptr(b[0])<<24 | uintptr(b[1])<<16 | uintptr(b[2])<<8 | uintptr(b[3])}
- if bodyLen > 4 {
- p.Data = make([]byte, bodyLen-4)
+ p := &ParamProb{}
+ if proto == iana.ProtocolIPv6ICMP {
+ p.Pointer = uintptr(b[0])<<24 | uintptr(b[1])<<16 | uintptr(b[2])<<8 | uintptr(b[3])
+ p.Data = make([]byte, len(b)-4)
copy(p.Data, b[4:])
+ return p, nil
+ }
+ p.Pointer = uintptr(b[0])
+ var err error
+ p.Data, p.Extensions, err = parseMultipartMessageBody(proto, b)
+ if err != nil {
+ return nil, err
}
return p, nil
}
diff --git a/go/src/golang.org/x/net/icmp/ping_test.go b/go/src/golang.org/x/net/icmp/ping_test.go
index f72c21c..be7d537 100644
--- a/go/src/golang.org/x/net/icmp/ping_test.go
+++ b/go/src/golang.org/x/net/icmp/ping_test.go
@@ -6,13 +6,16 @@
import (
"errors"
+ "fmt"
"net"
"os"
"runtime"
"testing"
+ "time"
"golang.org/x/net/icmp"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/nettest"
"golang.org/x/net/ipv4"
"golang.org/x/net/ipv6"
)
@@ -48,83 +51,116 @@
return nil, errors.New("no A or AAAA record")
}
-var pingGoogleTests = []struct {
+type pingTest struct {
network, address string
protocol int
mtype icmp.Type
-}{
- {"udp4", "0.0.0.0", iana.ProtocolICMP, ipv4.ICMPTypeEcho},
- {"ip4:icmp", "0.0.0.0", iana.ProtocolICMP, ipv4.ICMPTypeEcho},
-
- {"udp6", "::", iana.ProtocolIPv6ICMP, ipv6.ICMPTypeEchoRequest},
- {"ip6:ipv6-icmp", "::", iana.ProtocolIPv6ICMP, ipv6.ICMPTypeEchoRequest},
}
-func TestPingGoogle(t *testing.T) {
+var nonPrivilegedPingTests = []pingTest{
+ {"udp4", "0.0.0.0", iana.ProtocolICMP, ipv4.ICMPTypeEcho},
+
+ {"udp6", "::", iana.ProtocolIPv6ICMP, ipv6.ICMPTypeEchoRequest},
+}
+
+func TestNonPrivilegedPing(t *testing.T) {
if testing.Short() {
- t.Skip("to avoid external network")
+ t.Skip("avoid external network")
}
switch runtime.GOOS {
case "darwin":
case "linux":
t.Log("you may need to adjust the net.ipv4.ping_group_range kernel state")
default:
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
- for i, tt := range pingGoogleTests {
- if tt.network[:2] == "ip" && os.Getuid() != 0 {
- continue
- }
- c, err := icmp.ListenPacket(tt.network, tt.address)
- if err != nil {
+ for i, tt := range nonPrivilegedPingTests {
+ if err := doPing(tt, i); err != nil {
t.Error(err)
- continue
}
- defer c.Close()
+ }
+}
- dst, err := googleAddr(c, tt.protocol)
- if err != nil {
- t.Error(err)
- continue
- }
+var privilegedPingTests = []pingTest{
+ {"ip4:icmp", "0.0.0.0", iana.ProtocolICMP, ipv4.ICMPTypeEcho},
- wm := icmp.Message{
- Type: tt.mtype, Code: 0,
- Body: &icmp.Echo{
- ID: os.Getpid() & 0xffff, Seq: 1 << uint(i),
- Data: []byte("HELLO-R-U-THERE"),
- },
- }
- wb, err := wm.Marshal(nil)
- if err != nil {
- t.Error(err)
- continue
- }
- if n, err := c.WriteTo(wb, dst); err != nil {
- t.Error(err, dst)
- continue
- } else if n != len(wb) {
- t.Errorf("got %v; want %v", n, len(wb))
- continue
- }
+ {"ip6:ipv6-icmp", "::", iana.ProtocolIPv6ICMP, ipv6.ICMPTypeEchoRequest},
+}
- rb := make([]byte, 1500)
- n, peer, err := c.ReadFrom(rb)
- if err != nil {
+func TestPrivilegedPing(t *testing.T) {
+ if testing.Short() {
+ t.Skip("avoid external network")
+ }
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
+ }
+
+ for i, tt := range privilegedPingTests {
+ if err := doPing(tt, i); err != nil {
t.Error(err)
- continue
}
- rm, err := icmp.ParseMessage(tt.protocol, rb[:n])
- if err != nil {
- t.Error(err)
- continue
+ }
+}
+
+func doPing(tt pingTest, seq int) error {
+ c, err := icmp.ListenPacket(tt.network, tt.address)
+ if err != nil {
+ return err
+ }
+ defer c.Close()
+
+ dst, err := googleAddr(c, tt.protocol)
+ if err != nil {
+ return err
+ }
+
+ if tt.protocol == iana.ProtocolIPv6ICMP {
+ var f ipv6.ICMPFilter
+ f.SetAll(true)
+ f.Accept(ipv6.ICMPTypeDestinationUnreachable)
+ f.Accept(ipv6.ICMPTypePacketTooBig)
+ f.Accept(ipv6.ICMPTypeTimeExceeded)
+ f.Accept(ipv6.ICMPTypeParameterProblem)
+ f.Accept(ipv6.ICMPTypeEchoReply)
+ if err := c.IPv6PacketConn().SetICMPFilter(&f); err != nil {
+ return err
}
- switch rm.Type {
- case ipv4.ICMPTypeEchoReply, ipv6.ICMPTypeEchoReply:
- t.Logf("got reflection from %v", peer)
- default:
- t.Errorf("got %+v; want echo reply", rm)
- }
+ }
+
+ wm := icmp.Message{
+ Type: tt.mtype, Code: 0,
+ Body: &icmp.Echo{
+ ID: os.Getpid() & 0xffff, Seq: 1 << uint(seq),
+ Data: []byte("HELLO-R-U-THERE"),
+ },
+ }
+ wb, err := wm.Marshal(nil)
+ if err != nil {
+ return err
+ }
+ if n, err := c.WriteTo(wb, dst); err != nil {
+ return err
+ } else if n != len(wb) {
+ return fmt.Errorf("got %v; want %v", n, len(wb))
+ }
+
+ rb := make([]byte, 1500)
+ if err := c.SetReadDeadline(time.Now().Add(3 * time.Second)); err != nil {
+ return err
+ }
+ n, peer, err := c.ReadFrom(rb)
+ if err != nil {
+ return err
+ }
+ rm, err := icmp.ParseMessage(tt.protocol, rb[:n])
+ if err != nil {
+ return err
+ }
+ switch rm.Type {
+ case ipv4.ICMPTypeEchoReply, ipv6.ICMPTypeEchoReply:
+ return nil
+ default:
+ return fmt.Errorf("got %+v from %v; want echo reply", rm, peer)
}
}
diff --git a/go/src/golang.org/x/net/icmp/timeexceeded.go b/go/src/golang.org/x/net/icmp/timeexceeded.go
index 993a150..18628c8 100644
--- a/go/src/golang.org/x/net/icmp/timeexceeded.go
+++ b/go/src/golang.org/x/net/icmp/timeexceeded.go
@@ -6,34 +6,34 @@
// A TimeExceeded represents an ICMP time exceeded message body.
type TimeExceeded struct {
- Data []byte // data
+ Data []byte // data, known as original datagram field
+ Extensions []Extension // extensions
}
// Len implements the Len method of MessageBody interface.
-func (p *TimeExceeded) Len() int {
+func (p *TimeExceeded) Len(proto int) int {
if p == nil {
return 0
}
- return 4 + len(p.Data)
+ l, _ := multipartMessageBodyDataLen(proto, p.Data, p.Extensions)
+ return l
}
// Marshal implements the Marshal method of MessageBody interface.
-func (p *TimeExceeded) Marshal() ([]byte, error) {
- b := make([]byte, 4+len(p.Data))
- copy(b[4:], p.Data)
- return b, nil
+func (p *TimeExceeded) Marshal(proto int) ([]byte, error) {
+ return marshalMultipartMessageBody(proto, p.Data, p.Extensions)
}
// parseTimeExceeded parses b as an ICMP time exceeded message body.
-func parseTimeExceeded(b []byte) (MessageBody, error) {
- bodyLen := len(b)
- if bodyLen < 4 {
+func parseTimeExceeded(proto int, b []byte) (MessageBody, error) {
+ if len(b) < 4 {
return nil, errMessageTooShort
}
p := &TimeExceeded{}
- if bodyLen > 4 {
- p.Data = make([]byte, bodyLen-4)
- copy(p.Data, b[4:])
+ var err error
+ p.Data, p.Extensions, err = parseMultipartMessageBody(proto, b)
+ if err != nil {
+ return nil, err
}
return p, nil
}
diff --git a/go/src/golang.org/x/net/internal/iana/const.go b/go/src/golang.org/x/net/internal/iana/const.go
index 1140ed7..110be4f 100644
--- a/go/src/golang.org/x/net/internal/iana/const.go
+++ b/go/src/golang.org/x/net/internal/iana/const.go
@@ -38,7 +38,7 @@
CongestionExperienced = 0x3 // CE (Congestion Experienced)
)
-// Protocol Numbers, Updated: 2014-08-12
+// Protocol Numbers, Updated: 2015-01-06
const (
ProtocolIP = 0 // IPv4 encapsulation, pseudo protocol number
ProtocolHOPOPT = 0 // IPv6 Hop-by-Hop Option
@@ -94,7 +94,6 @@
ProtocolESP = 50 // Encap Security Payload
ProtocolAH = 51 // Authentication Header
ProtocolINLSP = 52 // Integrated Net Layer Security TUBA
- ProtocolSWIPE = 53 // IP with Encryption
ProtocolNARP = 54 // NBMA Address Resolution Protocol
ProtocolMOBILE = 55 // IP Mobility
ProtocolTLSP = 56 // Transport Layer Security Protocol using Kryptonet key management
@@ -134,7 +133,6 @@
ProtocolMTP = 92 // Multicast Transport Protocol
ProtocolAX25 = 93 // AX.25 Frames
ProtocolIPIP = 94 // IP-within-IP Encapsulation Protocol
- ProtocolMICP = 95 // Mobile Internetworking Control Pro.
ProtocolSCCSP = 96 // Semaphore Communications Sec. Pro.
ProtocolETHERIP = 97 // Ethernet-within-IP Encapsulation
ProtocolENCAP = 98 // Encapsulation Header
diff --git a/go/src/golang.org/x/net/internal/iana/gen.go b/go/src/golang.org/x/net/internal/iana/gen.go
index c808bde..2d8c07c 100644
--- a/go/src/golang.org/x/net/internal/iana/gen.go
+++ b/go/src/golang.org/x/net/internal/iana/gen.go
@@ -264,6 +264,10 @@
" ", "",
)
for i, pr := range pn.Records {
+ if strings.Contains(pr.Name, "Deprecated") ||
+ strings.Contains(pr.Name, "deprecated") {
+ continue
+ }
prs[i].OrigName = pr.Name
s := strings.TrimSpace(pr.Name)
switch pr.Name {
diff --git a/go/src/golang.org/x/net/internal/nettest/rlimit.go b/go/src/golang.org/x/net/internal/nettest/rlimit.go
new file mode 100644
index 0000000..bb34aec
--- /dev/null
+++ b/go/src/golang.org/x/net/internal/nettest/rlimit.go
@@ -0,0 +1,11 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package nettest
+
+const defaultMaxOpenFiles = 256
+
+// MaxOpenFiles returns the maximum number of open files for the
+// caller's process.
+func MaxOpenFiles() int { return maxOpenFiles() }
diff --git a/go/src/golang.org/x/net/internal/nettest/rlimit_stub.go b/go/src/golang.org/x/net/internal/nettest/rlimit_stub.go
new file mode 100644
index 0000000..102bef9
--- /dev/null
+++ b/go/src/golang.org/x/net/internal/nettest/rlimit_stub.go
@@ -0,0 +1,9 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build nacl plan9
+
+package nettest
+
+func maxOpenFiles() int { return defaultMaxOpenFiles }
diff --git a/go/src/golang.org/x/net/internal/nettest/rlimit_unix.go b/go/src/golang.org/x/net/internal/nettest/rlimit_unix.go
new file mode 100644
index 0000000..eb4312c
--- /dev/null
+++ b/go/src/golang.org/x/net/internal/nettest/rlimit_unix.go
@@ -0,0 +1,17 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+
+package nettest
+
+import "syscall"
+
+func maxOpenFiles() int {
+ var rlim syscall.Rlimit
+ if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rlim); err != nil {
+ return defaultMaxOpenFiles
+ }
+ return int(rlim.Cur)
+}
diff --git a/go/src/golang.org/x/net/internal/nettest/rlimit_windows.go b/go/src/golang.org/x/net/internal/nettest/rlimit_windows.go
new file mode 100644
index 0000000..de927b5
--- /dev/null
+++ b/go/src/golang.org/x/net/internal/nettest/rlimit_windows.go
@@ -0,0 +1,7 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package nettest
+
+func maxOpenFiles() int { return 4 * defaultMaxOpenFiles /* actually it's 16581375 */ }
diff --git a/go/src/golang.org/x/net/internal/nettest/stack_stub.go b/go/src/golang.org/x/net/internal/nettest/stack_stub.go
new file mode 100644
index 0000000..1b5fde1
--- /dev/null
+++ b/go/src/golang.org/x/net/internal/nettest/stack_stub.go
@@ -0,0 +1,18 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build nacl plan9
+
+package nettest
+
+import (
+ "fmt"
+ "runtime"
+)
+
+// SupportsRawIPSocket reports whether the platform supports raw IP
+// sockets.
+func SupportsRawIPSocket() (string, bool) {
+ return fmt.Sprintf("not supported on %s", runtime.GOOS), false
+}
diff --git a/go/src/golang.org/x/net/internal/nettest/stack_unix.go b/go/src/golang.org/x/net/internal/nettest/stack_unix.go
new file mode 100644
index 0000000..af89229
--- /dev/null
+++ b/go/src/golang.org/x/net/internal/nettest/stack_unix.go
@@ -0,0 +1,22 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+
+package nettest
+
+import (
+ "fmt"
+ "os"
+ "runtime"
+)
+
+// SupportsRawIPSocket reports whether the platform supports raw IP
+// sockets.
+func SupportsRawIPSocket() (string, bool) {
+ if os.Getuid() != 0 {
+ return fmt.Sprintf("must be root on %s", runtime.GOOS), false
+ }
+ return "", true
+}
diff --git a/go/src/golang.org/x/net/internal/nettest/stack_windows.go b/go/src/golang.org/x/net/internal/nettest/stack_windows.go
new file mode 100644
index 0000000..a21f499
--- /dev/null
+++ b/go/src/golang.org/x/net/internal/nettest/stack_windows.go
@@ -0,0 +1,32 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package nettest
+
+import (
+ "fmt"
+ "runtime"
+ "syscall"
+)
+
+// SupportsRawIPSocket reports whether the platform supports raw IP
+// sockets.
+func SupportsRawIPSocket() (string, bool) {
+ // From http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548.aspx:
+ // Note: To use a socket of type SOCK_RAW requires administrative privileges.
+ // Users running Winsock applications that use raw sockets must be a member of
+ // the Administrators group on the local computer, otherwise raw socket calls
+ // will fail with an error code of WSAEACCES. On Windows Vista and later, access
+ // for raw sockets is enforced at socket creation. In earlier versions of Windows,
+ // access for raw sockets is enforced during other socket operations.
+ s, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, 0)
+ if err == syscall.WSAEACCES {
+ return fmt.Sprintf("no access to raw socket allowed on %s", runtime.GOOS), false
+ }
+ if err != nil {
+ return err.Error(), false
+ }
+ syscall.Closesocket(s)
+ return "", true
+}
diff --git a/go/src/golang.org/x/net/internal/timeseries/timeseries.go b/go/src/golang.org/x/net/internal/timeseries/timeseries.go
new file mode 100644
index 0000000..1119f34
--- /dev/null
+++ b/go/src/golang.org/x/net/internal/timeseries/timeseries.go
@@ -0,0 +1,525 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package timeseries implements a time series structure for stats collection.
+package timeseries // import "golang.org/x/net/internal/timeseries"
+
+import (
+ "fmt"
+ "log"
+ "time"
+)
+
+const (
+ timeSeriesNumBuckets = 64
+ minuteHourSeriesNumBuckets = 60
+)
+
+var timeSeriesResolutions = []time.Duration{
+ 1 * time.Second,
+ 10 * time.Second,
+ 1 * time.Minute,
+ 10 * time.Minute,
+ 1 * time.Hour,
+ 6 * time.Hour,
+ 24 * time.Hour, // 1 day
+ 7 * 24 * time.Hour, // 1 week
+ 4 * 7 * 24 * time.Hour, // 4 weeks
+ 16 * 7 * 24 * time.Hour, // 16 weeks
+}
+
+var minuteHourSeriesResolutions = []time.Duration{
+ 1 * time.Second,
+ 1 * time.Minute,
+}
+
+// An Observable is a kind of data that can be aggregated in a time series.
+type Observable interface {
+ Multiply(ratio float64) // Multiplies the data in self by a given ratio
+ Add(other Observable) // Adds the data from a different observation to self
+ Clear() // Clears the observation so it can be reused.
+ CopyFrom(other Observable) // Copies the contents of a given observation to self
+}
+
+// Float attaches the methods of Observable to a float64.
+type Float float64
+
+// NewFloat returns a Float.
+func NewFloat() Observable {
+ f := Float(0)
+ return &f
+}
+
+// String returns the float as a string.
+func (f *Float) String() string { return fmt.Sprintf("%g", f.Value()) }
+
+// Value returns the float's value.
+func (f *Float) Value() float64 { return float64(*f) }
+
+func (f *Float) Multiply(ratio float64) { *f *= Float(ratio) }
+
+func (f *Float) Add(other Observable) {
+ o := other.(*Float)
+ *f += *o
+}
+
+func (f *Float) Clear() { *f = 0 }
+
+func (f *Float) CopyFrom(other Observable) {
+ o := other.(*Float)
+ *f = *o
+}
+
+// A Clock tells the current time.
+type Clock interface {
+ Time() time.Time
+}
+
+type defaultClock int
+
+var defaultClockInstance defaultClock
+
+func (defaultClock) Time() time.Time { return time.Now() }
+
+// Information kept per level. Each level consists of a circular list of
+// observations. The start of the level may be derived from end and the
+// len(buckets) * sizeInMillis.
+type tsLevel struct {
+ oldest int // index to oldest bucketed Observable
+ newest int // index to newest bucketed Observable
+ end time.Time // end timestamp for this level
+ size time.Duration // duration of the bucketed Observable
+ buckets []Observable // collections of observations
+ provider func() Observable // used for creating new Observable
+}
+
+func (l *tsLevel) Clear() {
+ l.oldest = 0
+ l.newest = len(l.buckets) - 1
+ l.end = time.Time{}
+ for i := range l.buckets {
+ if l.buckets[i] != nil {
+ l.buckets[i].Clear()
+ l.buckets[i] = nil
+ }
+ }
+}
+
+func (l *tsLevel) InitLevel(size time.Duration, numBuckets int, f func() Observable) {
+ l.size = size
+ l.provider = f
+ l.buckets = make([]Observable, numBuckets)
+}
+
+// Keeps a sequence of levels. Each level is responsible for storing data at
+// a given resolution. For example, the first level stores data at a one
+// minute resolution while the second level stores data at a one hour
+// resolution.
+
+// Each level is represented by a sequence of buckets. Each bucket spans an
+// interval equal to the resolution of the level. New observations are added
+// to the last bucket.
+type timeSeries struct {
+ provider func() Observable // make more Observable
+ numBuckets int // number of buckets in each level
+ levels []*tsLevel // levels of bucketed Observable
+ lastAdd time.Time // time of last Observable tracked
+ total Observable // convenient aggregation of all Observable
+ clock Clock // Clock for getting current time
+ pending Observable // observations not yet bucketed
+ pendingTime time.Time // what time are we keeping in pending
+ dirty bool // if there are pending observations
+}
+
+// init initializes a level according to the supplied criteria.
+func (ts *timeSeries) init(resolutions []time.Duration, f func() Observable, numBuckets int, clock Clock) {
+ ts.provider = f
+ ts.numBuckets = numBuckets
+ ts.clock = clock
+ ts.levels = make([]*tsLevel, len(resolutions))
+
+ for i := range resolutions {
+ if i > 0 && resolutions[i-1] >= resolutions[i] {
+ log.Print("timeseries: resolutions must be monotonically increasing")
+ break
+ }
+ newLevel := new(tsLevel)
+ newLevel.InitLevel(resolutions[i], ts.numBuckets, ts.provider)
+ ts.levels[i] = newLevel
+ }
+
+ ts.Clear()
+}
+
+// Clear removes all observations from the time series.
+func (ts *timeSeries) Clear() {
+ ts.lastAdd = time.Time{}
+ ts.total = ts.resetObservation(ts.total)
+ ts.pending = ts.resetObservation(ts.pending)
+ ts.pendingTime = time.Time{}
+ ts.dirty = false
+
+ for i := range ts.levels {
+ ts.levels[i].Clear()
+ }
+}
+
+// Add records an observation at the current time.
+func (ts *timeSeries) Add(observation Observable) {
+ ts.AddWithTime(observation, ts.clock.Time())
+}
+
+// AddWithTime records an observation at the specified time.
+func (ts *timeSeries) AddWithTime(observation Observable, t time.Time) {
+
+ smallBucketDuration := ts.levels[0].size
+
+ if t.After(ts.lastAdd) {
+ ts.lastAdd = t
+ }
+
+ if t.After(ts.pendingTime) {
+ ts.advance(t)
+ ts.mergePendingUpdates()
+ ts.pendingTime = ts.levels[0].end
+ ts.pending.CopyFrom(observation)
+ ts.dirty = true
+ } else if t.After(ts.pendingTime.Add(-1 * smallBucketDuration)) {
+ // The observation is close enough to go into the pending bucket.
+ // This compensates for clock skewing and small scheduling delays
+ // by letting the update stay in the fast path.
+ ts.pending.Add(observation)
+ ts.dirty = true
+ } else {
+ ts.mergeValue(observation, t)
+ }
+}
+
+// mergeValue inserts the observation at the specified time in the past into all levels.
+func (ts *timeSeries) mergeValue(observation Observable, t time.Time) {
+ for _, level := range ts.levels {
+ index := (ts.numBuckets - 1) - int(level.end.Sub(t)/level.size)
+ if 0 <= index && index < ts.numBuckets {
+ bucketNumber := (level.oldest + index) % ts.numBuckets
+ if level.buckets[bucketNumber] == nil {
+ level.buckets[bucketNumber] = level.provider()
+ }
+ level.buckets[bucketNumber].Add(observation)
+ }
+ }
+ ts.total.Add(observation)
+}
+
+// mergePendingUpdates applies the pending updates into all levels.
+func (ts *timeSeries) mergePendingUpdates() {
+ if ts.dirty {
+ ts.mergeValue(ts.pending, ts.pendingTime)
+ ts.pending = ts.resetObservation(ts.pending)
+ ts.dirty = false
+ }
+}
+
+// advance cycles the buckets at each level until the latest bucket in
+// each level can hold the time specified.
+func (ts *timeSeries) advance(t time.Time) {
+ if !t.After(ts.levels[0].end) {
+ return
+ }
+ for i := 0; i < len(ts.levels); i++ {
+ level := ts.levels[i]
+ if !level.end.Before(t) {
+ break
+ }
+
+ // If the time is sufficiently far, just clear the level and advance
+ // directly.
+ if !t.Before(level.end.Add(level.size * time.Duration(ts.numBuckets))) {
+ for _, b := range level.buckets {
+ ts.resetObservation(b)
+ }
+ level.end = time.Unix(0, (t.UnixNano()/level.size.Nanoseconds())*level.size.Nanoseconds())
+ }
+
+ for t.After(level.end) {
+ level.end = level.end.Add(level.size)
+ level.newest = level.oldest
+ level.oldest = (level.oldest + 1) % ts.numBuckets
+ ts.resetObservation(level.buckets[level.newest])
+ }
+
+ t = level.end
+ }
+}
+
+// Latest returns the sum of the num latest buckets from the level.
+func (ts *timeSeries) Latest(level, num int) Observable {
+ now := ts.clock.Time()
+ if ts.levels[0].end.Before(now) {
+ ts.advance(now)
+ }
+
+ ts.mergePendingUpdates()
+
+ result := ts.provider()
+ l := ts.levels[level]
+ index := l.newest
+
+ for i := 0; i < num; i++ {
+ if l.buckets[index] != nil {
+ result.Add(l.buckets[index])
+ }
+ if index == 0 {
+ index = ts.numBuckets
+ }
+ index--
+ }
+
+ return result
+}
+
+// LatestBuckets returns a copy of the num latest buckets from level.
+func (ts *timeSeries) LatestBuckets(level, num int) []Observable {
+ if level < 0 || level > len(ts.levels) {
+ log.Print("timeseries: bad level argument: ", level)
+ return nil
+ }
+ if num < 0 || num >= ts.numBuckets {
+ log.Print("timeseries: bad num argument: ", num)
+ return nil
+ }
+
+ results := make([]Observable, num)
+ now := ts.clock.Time()
+ if ts.levels[0].end.Before(now) {
+ ts.advance(now)
+ }
+
+ ts.mergePendingUpdates()
+
+ l := ts.levels[level]
+ index := l.newest
+
+ for i := 0; i < num; i++ {
+ result := ts.provider()
+ results[i] = result
+ if l.buckets[index] != nil {
+ result.CopyFrom(l.buckets[index])
+ }
+
+ if index == 0 {
+ index = ts.numBuckets
+ }
+ index -= 1
+ }
+ return results
+}
+
+// ScaleBy updates observations by scaling by factor.
+func (ts *timeSeries) ScaleBy(factor float64) {
+ for _, l := range ts.levels {
+ for i := 0; i < ts.numBuckets; i++ {
+ l.buckets[i].Multiply(factor)
+ }
+ }
+
+ ts.total.Multiply(factor)
+ ts.pending.Multiply(factor)
+}
+
+// Range returns the sum of observations added over the specified time range.
+// If start or finish times don't fall on bucket boundaries of the same
+// level, then return values are approximate answers.
+func (ts *timeSeries) Range(start, finish time.Time) Observable {
+ return ts.ComputeRange(start, finish, 1)[0]
+}
+
+// Recent returns the sum of observations from the last delta.
+func (ts *timeSeries) Recent(delta time.Duration) Observable {
+ now := ts.clock.Time()
+ return ts.Range(now.Add(-delta), now)
+}
+
+// Total returns the total of all observations.
+func (ts *timeSeries) Total() Observable {
+ ts.mergePendingUpdates()
+ return ts.total
+}
+
+// ComputeRange computes a specified number of values into a slice using
+// the observations recorded over the specified time period. The return
+// values are approximate if the start or finish times don't fall on the
+// bucket boundaries at the same level or if the number of buckets spanning
+// the range is not an integral multiple of num.
+func (ts *timeSeries) ComputeRange(start, finish time.Time, num int) []Observable {
+ if start.After(finish) {
+ log.Printf("timeseries: start > finish, %v>%v", start, finish)
+ return nil
+ }
+
+ if num < 0 {
+ log.Printf("timeseries: num < 0, %v", num)
+ return nil
+ }
+
+ results := make([]Observable, num)
+
+ for _, l := range ts.levels {
+ if !start.Before(l.end.Add(-l.size * time.Duration(ts.numBuckets))) {
+ ts.extract(l, start, finish, num, results)
+ return results
+ }
+ }
+
+ // Failed to find a level that covers the desired range. So just
+ // extract from the last level, even if it doesn't cover the entire
+ // desired range.
+ ts.extract(ts.levels[len(ts.levels)-1], start, finish, num, results)
+
+ return results
+}
+
+// RecentList returns the specified number of values in slice over the most
+// recent time period of the specified range.
+func (ts *timeSeries) RecentList(delta time.Duration, num int) []Observable {
+ if delta < 0 {
+ return nil
+ }
+ now := ts.clock.Time()
+ return ts.ComputeRange(now.Add(-delta), now, num)
+}
+
+// extract returns a slice of specified number of observations from a given
+// level over a given range.
+func (ts *timeSeries) extract(l *tsLevel, start, finish time.Time, num int, results []Observable) {
+ ts.mergePendingUpdates()
+
+ srcInterval := l.size
+ dstInterval := finish.Sub(start) / time.Duration(num)
+ dstStart := start
+ srcStart := l.end.Add(-srcInterval * time.Duration(ts.numBuckets))
+
+ srcIndex := 0
+
+ // Where should scanning start?
+ if dstStart.After(srcStart) {
+ advance := dstStart.Sub(srcStart) / srcInterval
+ srcIndex += int(advance)
+ srcStart = srcStart.Add(advance * srcInterval)
+ }
+
+ // The i'th value is computed as show below.
+ // interval = (finish/start)/num
+ // i'th value = sum of observation in range
+ // [ start + i * interval,
+ // start + (i + 1) * interval )
+ for i := 0; i < num; i++ {
+ results[i] = ts.resetObservation(results[i])
+ dstEnd := dstStart.Add(dstInterval)
+ for srcIndex < ts.numBuckets && srcStart.Before(dstEnd) {
+ srcEnd := srcStart.Add(srcInterval)
+ if srcEnd.After(ts.lastAdd) {
+ srcEnd = ts.lastAdd
+ }
+
+ if !srcEnd.Before(dstStart) {
+ srcValue := l.buckets[(srcIndex+l.oldest)%ts.numBuckets]
+ if !srcStart.Before(dstStart) && !srcEnd.After(dstEnd) {
+ // dst completely contains src.
+ if srcValue != nil {
+ results[i].Add(srcValue)
+ }
+ } else {
+ // dst partially overlaps src.
+ overlapStart := maxTime(srcStart, dstStart)
+ overlapEnd := minTime(srcEnd, dstEnd)
+ base := srcEnd.Sub(srcStart)
+ fraction := overlapEnd.Sub(overlapStart).Seconds() / base.Seconds()
+
+ used := ts.provider()
+ if srcValue != nil {
+ used.CopyFrom(srcValue)
+ }
+ used.Multiply(fraction)
+ results[i].Add(used)
+ }
+
+ if srcEnd.After(dstEnd) {
+ break
+ }
+ }
+ srcIndex++
+ srcStart = srcStart.Add(srcInterval)
+ }
+ dstStart = dstStart.Add(dstInterval)
+ }
+}
+
+// resetObservation clears the content so the struct may be reused.
+func (ts *timeSeries) resetObservation(observation Observable) Observable {
+ if observation == nil {
+ observation = ts.provider()
+ } else {
+ observation.Clear()
+ }
+ return observation
+}
+
+// TimeSeries tracks data at granularities from 1 second to 16 weeks.
+type TimeSeries struct {
+ timeSeries
+}
+
+// NewTimeSeries creates a new TimeSeries using the function provided for creating new Observable.
+func NewTimeSeries(f func() Observable) *TimeSeries {
+ return NewTimeSeriesWithClock(f, defaultClockInstance)
+}
+
+// NewTimeSeriesWithClock creates a new TimeSeries using the function provided for creating new Observable and the clock for
+// assigning timestamps.
+func NewTimeSeriesWithClock(f func() Observable, clock Clock) *TimeSeries {
+ ts := new(TimeSeries)
+ ts.timeSeries.init(timeSeriesResolutions, f, timeSeriesNumBuckets, clock)
+ return ts
+}
+
+// MinuteHourSeries tracks data at granularities of 1 minute and 1 hour.
+type MinuteHourSeries struct {
+ timeSeries
+}
+
+// NewMinuteHourSeries creates a new MinuteHourSeries using the function provided for creating new Observable.
+func NewMinuteHourSeries(f func() Observable) *MinuteHourSeries {
+ return NewMinuteHourSeriesWithClock(f, defaultClockInstance)
+}
+
+// NewMinuteHourSeriesWithClock creates a new MinuteHourSeries using the function provided for creating new Observable and the clock for
+// assigning timestamps.
+func NewMinuteHourSeriesWithClock(f func() Observable, clock Clock) *MinuteHourSeries {
+ ts := new(MinuteHourSeries)
+ ts.timeSeries.init(minuteHourSeriesResolutions, f,
+ minuteHourSeriesNumBuckets, clock)
+ return ts
+}
+
+func (ts *MinuteHourSeries) Minute() Observable {
+ return ts.timeSeries.Latest(0, 60)
+}
+
+func (ts *MinuteHourSeries) Hour() Observable {
+ return ts.timeSeries.Latest(1, 60)
+}
+
+func minTime(a, b time.Time) time.Time {
+ if a.Before(b) {
+ return a
+ }
+ return b
+}
+
+func maxTime(a, b time.Time) time.Time {
+ if a.After(b) {
+ return a
+ }
+ return b
+}
diff --git a/go/src/golang.org/x/net/internal/timeseries/timeseries_test.go b/go/src/golang.org/x/net/internal/timeseries/timeseries_test.go
new file mode 100644
index 0000000..66325a9
--- /dev/null
+++ b/go/src/golang.org/x/net/internal/timeseries/timeseries_test.go
@@ -0,0 +1,170 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package timeseries
+
+import (
+ "math"
+ "testing"
+ "time"
+)
+
+func isNear(x *Float, y float64, tolerance float64) bool {
+ return math.Abs(x.Value()-y) < tolerance
+}
+
+func isApproximate(x *Float, y float64) bool {
+ return isNear(x, y, 1e-2)
+}
+
+func checkApproximate(t *testing.T, o Observable, y float64) {
+ x := o.(*Float)
+ if !isApproximate(x, y) {
+ t.Errorf("Wanted %g, got %g", y, x.Value())
+ }
+}
+
+func checkNear(t *testing.T, o Observable, y, tolerance float64) {
+ x := o.(*Float)
+ if !isNear(x, y, tolerance) {
+ t.Errorf("Wanted %g +- %g, got %g", y, tolerance, x.Value())
+ }
+}
+
+var baseTime = time.Date(2013, 1, 1, 0, 0, 0, 0, time.UTC)
+
+func tu(s int64) time.Time {
+ return baseTime.Add(time.Duration(s) * time.Second)
+}
+
+func tu2(s int64, ns int64) time.Time {
+ return baseTime.Add(time.Duration(s)*time.Second + time.Duration(ns)*time.Nanosecond)
+}
+
+func TestBasicTimeSeries(t *testing.T) {
+ ts := NewTimeSeries(NewFloat)
+ fo := new(Float)
+ *fo = Float(10)
+ ts.AddWithTime(fo, tu(1))
+ ts.AddWithTime(fo, tu(1))
+ ts.AddWithTime(fo, tu(1))
+ ts.AddWithTime(fo, tu(1))
+ checkApproximate(t, ts.Range(tu(0), tu(1)), 40)
+ checkApproximate(t, ts.Total(), 40)
+ ts.AddWithTime(fo, tu(3))
+ ts.AddWithTime(fo, tu(3))
+ ts.AddWithTime(fo, tu(3))
+ checkApproximate(t, ts.Range(tu(0), tu(2)), 40)
+ checkApproximate(t, ts.Range(tu(2), tu(4)), 30)
+ checkApproximate(t, ts.Total(), 70)
+ ts.AddWithTime(fo, tu(1))
+ ts.AddWithTime(fo, tu(1))
+ checkApproximate(t, ts.Range(tu(0), tu(2)), 60)
+ checkApproximate(t, ts.Range(tu(2), tu(4)), 30)
+ checkApproximate(t, ts.Total(), 90)
+ *fo = Float(100)
+ ts.AddWithTime(fo, tu(100))
+ checkApproximate(t, ts.Range(tu(99), tu(100)), 100)
+ checkApproximate(t, ts.Range(tu(0), tu(4)), 36)
+ checkApproximate(t, ts.Total(), 190)
+ *fo = Float(10)
+ ts.AddWithTime(fo, tu(1))
+ ts.AddWithTime(fo, tu(1))
+ checkApproximate(t, ts.Range(tu(0), tu(4)), 44)
+ checkApproximate(t, ts.Range(tu(37), tu2(100, 100e6)), 100)
+ checkApproximate(t, ts.Range(tu(50), tu2(100, 100e6)), 100)
+ checkApproximate(t, ts.Range(tu(99), tu2(100, 100e6)), 100)
+ checkApproximate(t, ts.Total(), 210)
+
+ for i, l := range ts.ComputeRange(tu(36), tu(100), 64) {
+ if i == 63 {
+ checkApproximate(t, l, 100)
+ } else {
+ checkApproximate(t, l, 0)
+ }
+ }
+
+ checkApproximate(t, ts.Range(tu(0), tu(100)), 210)
+ checkApproximate(t, ts.Range(tu(10), tu(100)), 100)
+
+ for i, l := range ts.ComputeRange(tu(0), tu(100), 100) {
+ if i < 10 {
+ checkApproximate(t, l, 11)
+ } else if i >= 90 {
+ checkApproximate(t, l, 10)
+ } else {
+ checkApproximate(t, l, 0)
+ }
+ }
+}
+
+func TestFloat(t *testing.T) {
+ f := Float(1)
+ if g, w := f.String(), "1"; g != w {
+ t.Errorf("Float(1).String = %q; want %q", g, w)
+ }
+ f2 := Float(2)
+ var o Observable = &f2
+ f.Add(o)
+ if g, w := f.Value(), 3.0; g != w {
+ t.Errorf("Float post-add = %v; want %v", g, w)
+ }
+ f.Multiply(2)
+ if g, w := f.Value(), 6.0; g != w {
+ t.Errorf("Float post-multiply = %v; want %v", g, w)
+ }
+ f.Clear()
+ if g, w := f.Value(), 0.0; g != w {
+ t.Errorf("Float post-clear = %v; want %v", g, w)
+ }
+ f.CopyFrom(&f2)
+ if g, w := f.Value(), 2.0; g != w {
+ t.Errorf("Float post-CopyFrom = %v; want %v", g, w)
+ }
+}
+
+type mockClock struct {
+ time time.Time
+}
+
+func (m *mockClock) Time() time.Time { return m.time }
+func (m *mockClock) Set(t time.Time) { m.time = t }
+
+const buckets = 6
+
+var testResolutions = []time.Duration{
+ 10 * time.Second, // level holds one minute of observations
+ 100 * time.Second, // level holds ten minutes of observations
+ 10 * time.Minute, // level holds one hour of observations
+}
+
+// TestTimeSeries uses a small number of buckets to force a higher
+// error rate on approximations from the timeseries.
+type TestTimeSeries struct {
+ timeSeries
+}
+
+func TestExpectedErrorRate(t *testing.T) {
+ ts := new(TestTimeSeries)
+ fake := new(mockClock)
+ fake.Set(time.Now())
+ ts.timeSeries.init(testResolutions, NewFloat, buckets, fake)
+ for i := 1; i <= 61*61; i++ {
+ fake.Set(fake.Time().Add(1 * time.Second))
+ ob := Float(1)
+ ts.AddWithTime(&ob, fake.Time())
+
+ // The results should be accurate within one missing bucket (1/6) of the observations recorded.
+ checkNear(t, ts.Latest(0, buckets), min(float64(i), 60), 10)
+ checkNear(t, ts.Latest(1, buckets), min(float64(i), 600), 100)
+ checkNear(t, ts.Latest(2, buckets), min(float64(i), 3600), 600)
+ }
+}
+
+func min(a, b float64) float64 {
+ if a < b {
+ return a
+ }
+ return b
+}
diff --git a/go/src/golang.org/x/net/ipv4/doc.go b/go/src/golang.org/x/net/ipv4/doc.go
index 688bc8f..45090e5 100644
--- a/go/src/golang.org/x/net/ipv4/doc.go
+++ b/go/src/golang.org/x/net/ipv4/doc.go
@@ -6,9 +6,15 @@
// 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, RFC 1122,
-// RFC 3678 and RFC 4607.
+// manipulation of IPv4 facilities.
+//
+// The IPv4 protocol and basic host requirements for IPv4 are defined
+// in RFC 791 and RFC 1122.
+// Host extensions for multicasting and socket interface extensions
+// for multicast source filters are defined in RFC 1112 and RFC 3678.
+// IGMPv1, IGMPv2 and IGMPv3 are defined in RFC 1112, RFC 2236 and RFC
+// 3376.
+// Source-specific multicast is defined in RFC 4607.
//
//
// Unicasting
@@ -198,10 +204,9 @@
// Source-specific multicasting
//
// An application that uses PacketConn or RawConn on IGMPv3 supported
-// platform is able to join source-specific multicast groups as
-// described in RFC 3678. The application may use
-// JoinSourceSpecificGroup and LeaveSourceSpecificGroup for the
-// operation known as "include" mode,
+// platform is able to join source-specific multicast groups.
+// The application may use JoinSourceSpecificGroup and
+// LeaveSourceSpecificGroup for the operation known as "include" mode,
//
// ssmgroup := net.UDPAddr{IP: net.IPv4(232, 7, 8, 9)}
// ssmsource := net.UDPAddr{IP: net.IPv4(192, 168, 0, 1)})
@@ -231,7 +236,7 @@
// when an application which runs on IGMPv3 unsupported platform uses
// JoinSourceSpecificGroup and LeaveSourceSpecificGroup.
// In general the platform tries to fall back to conversations using
-// IGMPv1 or IGMP2 and starts to listen to multicast traffic.
+// IGMPv1 or IGMPv2 and starts to listen to multicast traffic.
// In the fallback case, ExcludeSourceSpecificGroup and
// IncludeSourceSpecificGroup may return an error.
package ipv4 // import "golang.org/x/net/ipv4"
diff --git a/go/src/golang.org/x/net/ipv4/gen.go b/go/src/golang.org/x/net/ipv4/gen.go
index 09dcd03..8cef7b3 100644
--- a/go/src/golang.org/x/net/ipv4/gen.go
+++ b/go/src/golang.org/x/net/ipv4/gen.go
@@ -52,12 +52,14 @@
if err != nil {
return err
}
- switch runtime.GOOS {
- case "dragonfly", "solaris":
- // The ipv4 pacakge still supports go1.2, and so we
- // need to take care of additional platforms in go1.3
- // and above for working with go1.2.
+ // The ipv4 pacakge still supports go1.2, and so we need to
+ // take care of additional platforms in go1.3 and above for
+ // working with go1.2.
+ switch {
+ case runtime.GOOS == "dragonfly" || runtime.GOOS == "solaris":
b = bytes.Replace(b, []byte("package ipv4\n"), []byte("// +build "+runtime.GOOS+"\n\npackage ipv4\n"), 1)
+ case runtime.GOOS == "linux" && (runtime.GOARCH == "arm64" || runtime.GOARCH == "ppc64" || runtime.GOARCH == "ppc64le"):
+ b = bytes.Replace(b, []byte("package ipv4\n"), []byte("// +build "+runtime.GOOS+","+runtime.GOARCH+"\n\npackage ipv4\n"), 1)
}
b, err = format.Source(b)
if err != nil {
diff --git a/go/src/golang.org/x/net/ipv4/header.go b/go/src/golang.org/x/net/ipv4/header.go
index ba09d75..b22336c 100644
--- a/go/src/golang.org/x/net/ipv4/header.go
+++ b/go/src/golang.org/x/net/ipv4/header.go
@@ -21,37 +21,12 @@
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
-// RFC 3678 Socket Interface Extensions for Multicast Source Filters
-// http://tools.ietf.org/html/rfc3678
-// RFC 4607 Source-Specific Multicast for IP
-// http://tools.ietf.org/html/rfc4607
-
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
)
-const (
- posTOS = 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
-)
-
type HeaderFlags int
const (
@@ -83,10 +58,6 @@
return fmt.Sprintf("ver: %v, hdrlen: %v, tos: %#x, totallen: %v, id: %#x, flags: %#x, fragoff: %#x, ttl: %v, proto: %v, cksum: %#x, src: %v, dst: %v", h.Version, h.Len, h.TOS, h.TotalLen, h.ID, h.Flags, 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 {
@@ -98,25 +69,26 @@
hdrlen := HeaderLen + len(h.Options)
b := make([]byte, hdrlen)
b[0] = byte(Version<<4 | (hdrlen >> 2 & 0x0f))
- b[posTOS] = byte(h.TOS)
+ b[1] = byte(h.TOS)
flagsAndFragOff := (h.FragOff & 0x1fff) | int(h.Flags<<13)
- if supportsNewIPInput {
- b[posTotalLen], b[posTotalLen+1] = byte(h.TotalLen>>8), byte(h.TotalLen)
- b[posFragOff], b[posFragOff+1] = byte(flagsAndFragOff>>8), byte(flagsAndFragOff)
- } else {
+ switch runtime.GOOS {
+ case "darwin", "dragonfly", "freebsd", "netbsd":
// TODO(mikio): fix potential misaligned memory access
- *(*uint16)(unsafe.Pointer(&b[posTotalLen : posTotalLen+1][0])) = uint16(h.TotalLen)
- *(*uint16)(unsafe.Pointer(&b[posFragOff : posFragOff+1][0])) = uint16(flagsAndFragOff)
+ *(*uint16)(unsafe.Pointer(&b[2:3][0])) = uint16(h.TotalLen)
+ *(*uint16)(unsafe.Pointer(&b[6:7][0])) = uint16(flagsAndFragOff)
+ default:
+ b[2], b[3] = byte(h.TotalLen>>8), byte(h.TotalLen)
+ b[6], b[7] = byte(flagsAndFragOff>>8), byte(flagsAndFragOff)
}
- 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)
+ b[4], b[5] = byte(h.ID>>8), byte(h.ID)
+ b[8] = byte(h.TTL)
+ b[9] = byte(h.Protocol)
+ b[10], b[11] = byte(h.Checksum>>8), byte(h.Checksum)
if ip := h.Src.To4(); ip != nil {
- copy(b[posSrc:posSrc+net.IPv4len], ip[:net.IPv4len])
+ copy(b[12:16], ip[:net.IPv4len])
}
if ip := h.Dst.To4(); ip != nil {
- copy(b[posDst:posDst+net.IPv4len], ip[:net.IPv4len])
+ copy(b[16:20], ip[:net.IPv4len])
} else {
return nil, errMissingAddress
}
@@ -138,30 +110,37 @@
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 := &Header{
+ Version: int(b[0] >> 4),
+ Len: hdrlen,
+ TOS: int(b[1]),
+ ID: int(b[4])<<8 | int(b[5]),
+ TTL: int(b[8]),
+ Protocol: int(b[9]),
+ Checksum: int(b[10])<<8 | int(b[11]),
+ Src: net.IPv4(b[12], b[13], b[14], b[15]),
+ Dst: net.IPv4(b[16], b[17], b[18], b[19]),
+ }
+ switch runtime.GOOS {
+ case "darwin", "dragonfly", "netbsd":
// TODO(mikio): fix potential misaligned memory access
- h.TotalLen = int(*(*uint16)(unsafe.Pointer(&b[posTotalLen : posTotalLen+1][0])))
- if runtime.GOOS != "freebsd" || freebsdVersion < 1000000 {
+ h.TotalLen = int(*(*uint16)(unsafe.Pointer(&b[2:3][0]))) + hdrlen
+ // TODO(mikio): fix potential misaligned memory access
+ h.FragOff = int(*(*uint16)(unsafe.Pointer(&b[6:7][0])))
+ case "freebsd":
+ // TODO(mikio): fix potential misaligned memory access
+ h.TotalLen = int(*(*uint16)(unsafe.Pointer(&b[2:3][0])))
+ if freebsdVersion < 1000000 {
h.TotalLen += hdrlen
}
// TODO(mikio): fix potential misaligned memory access
- h.FragOff = int(*(*uint16)(unsafe.Pointer(&b[posFragOff : posFragOff+1][0])))
+ h.FragOff = int(*(*uint16)(unsafe.Pointer(&b[6:7][0])))
+ default:
+ h.TotalLen = int(b[2])<<8 | int(b[3])
+ h.FragOff = int(b[6])<<8 | int(b[7])
}
h.Flags = HeaderFlags(h.FragOff&0xe000) >> 13
h.FragOff = h.FragOff & 0x1fff
- 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:])
diff --git a/go/src/golang.org/x/net/ipv4/header_test.go b/go/src/golang.org/x/net/ipv4/header_test.go
index 05e3135..416be6b 100644
--- a/go/src/golang.org/x/net/ipv4/header_test.go
+++ b/go/src/golang.org/x/net/ipv4/header_test.go
@@ -73,10 +73,17 @@
t.Fatal(err)
}
var wh []byte
- if supportsNewIPInput {
- wh = wireHeaderToKernel[:]
- } else {
+ switch runtime.GOOS {
+ case "darwin", "dragonfly", "netbsd":
wh = wireHeaderToTradBSDKernel[:]
+ case "freebsd":
+ if freebsdVersion < 1000000 {
+ wh = wireHeaderToTradBSDKernel[:]
+ } else {
+ wh = wireHeaderFromFreeBSD10Kernel[:]
+ }
+ default:
+ wh = wireHeaderToKernel[:]
}
if !bytes.Equal(b, wh) {
t.Fatalf("got %#v; want %#v", b, wh)
@@ -85,14 +92,17 @@
func TestParseHeader(t *testing.T) {
var wh []byte
- if supportsNewIPInput {
- wh = wireHeaderFromKernel[:]
- } else {
- if runtime.GOOS == "freebsd" && freebsdVersion >= 1000000 {
- wh = wireHeaderFromFreeBSD10Kernel[:]
- } else {
+ switch runtime.GOOS {
+ case "darwin", "dragonfly", "netbsd":
+ wh = wireHeaderFromTradBSDKernel[:]
+ case "freebsd":
+ if freebsdVersion < 1000000 {
wh = wireHeaderFromTradBSDKernel[:]
+ } else {
+ wh = wireHeaderFromFreeBSD10Kernel[:]
}
+ default:
+ wh = wireHeaderFromKernel[:]
}
h, err := ParseHeader(wh)
if err != nil {
diff --git a/go/src/golang.org/x/net/ipv4/icmp_test.go b/go/src/golang.org/x/net/ipv4/icmp_test.go
index d398f5b..3324b54 100644
--- a/go/src/golang.org/x/net/ipv4/icmp_test.go
+++ b/go/src/golang.org/x/net/ipv4/icmp_test.go
@@ -6,11 +6,11 @@
import (
"net"
- "os"
"reflect"
"runtime"
"testing"
+ "golang.org/x/net/internal/nettest"
"golang.org/x/net/ipv4"
)
@@ -36,7 +36,7 @@
switch runtime.GOOS {
case "linux":
default:
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
var f ipv4.ICMPFilter
@@ -64,10 +64,10 @@
switch runtime.GOOS {
case "linux":
default:
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
c, err := net.ListenPacket("ip4:icmp", "127.0.0.1")
diff --git a/go/src/golang.org/x/net/ipv4/multicast_test.go b/go/src/golang.org/x/net/ipv4/multicast_test.go
index d9f3f0d..3f03048 100644
--- a/go/src/golang.org/x/net/ipv4/multicast_test.go
+++ b/go/src/golang.org/x/net/ipv4/multicast_test.go
@@ -30,11 +30,11 @@
func TestPacketConnReadWriteMulticastUDP(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
for _, tt := range packetConnReadWriteMulticastUDPTests {
@@ -58,7 +58,7 @@
switch runtime.GOOS {
case "freebsd", "linux":
default: // platforms that don't support IGMPv2/3 fail here
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
@@ -83,7 +83,7 @@
for i, toggle := range []bool{true, false, true} {
if err := p.SetControlMessage(cf, toggle); err != nil {
if nettest.ProtocolNotSupported(err) {
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
@@ -120,14 +120,14 @@
func TestPacketConnReadWriteMulticastICMP(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
for _, tt := range packetConnReadWriteMulticastICMPTests {
@@ -149,7 +149,7 @@
switch runtime.GOOS {
case "freebsd", "linux":
default: // platforms that don't support IGMPv2/3 fail here
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
@@ -183,7 +183,7 @@
}
if err := p.SetControlMessage(cf, toggle); err != nil {
if nettest.ProtocolNotSupported(err) {
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
@@ -229,12 +229,12 @@
if testing.Short() {
t.Skip("to avoid external network")
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
for _, tt := range rawConnReadWriteMulticastICMPTests {
@@ -259,7 +259,7 @@
switch runtime.GOOS {
case "freebsd", "linux":
default: // platforms that don't support IGMPv2/3 fail here
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
@@ -301,7 +301,7 @@
}
if err := r.SetControlMessage(cf, toggle); err != nil {
if nettest.ProtocolNotSupported(err) {
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
diff --git a/go/src/golang.org/x/net/ipv4/multicastlistener_test.go b/go/src/golang.org/x/net/ipv4/multicastlistener_test.go
index f9d7791..e342bf1 100644
--- a/go/src/golang.org/x/net/ipv4/multicastlistener_test.go
+++ b/go/src/golang.org/x/net/ipv4/multicastlistener_test.go
@@ -6,7 +6,6 @@
import (
"net"
- "os"
"runtime"
"testing"
@@ -23,7 +22,7 @@
func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if testing.Short() {
t.Skip("to avoid external network")
@@ -63,7 +62,7 @@
func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if testing.Short() {
t.Skip("to avoid external network")
@@ -115,7 +114,7 @@
func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if testing.Short() {
t.Skip("to avoid external network")
@@ -158,13 +157,13 @@
func TestIPSingleRawConnWithSingleGroupListener(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if testing.Short() {
t.Skip("to avoid external network")
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
c, err := net.ListenPacket("ip4:icmp", "0.0.0.0") // wildcard address
@@ -203,13 +202,13 @@
func TestIPPerInterfaceSingleRawConnWithSingleGroupListener(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if testing.Short() {
t.Skip("to avoid external network")
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
gaddr := net.IPAddr{IP: net.IPv4(224, 0, 0, 254)} // see RFC 4727
diff --git a/go/src/golang.org/x/net/ipv4/multicastsockopt_test.go b/go/src/golang.org/x/net/ipv4/multicastsockopt_test.go
index 7235d68..c76dbe4 100644
--- a/go/src/golang.org/x/net/ipv4/multicastsockopt_test.go
+++ b/go/src/golang.org/x/net/ipv4/multicastsockopt_test.go
@@ -6,7 +6,6 @@
import (
"net"
- "os"
"runtime"
"testing"
@@ -28,16 +27,17 @@
func TestPacketConnMulticastSocketOptions(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
+ m, ok := nettest.SupportsRawIPSocket()
for _, tt := range packetConnMulticastSocketOptionTests {
- if tt.net == "ip4" && os.Getuid() != 0 {
- t.Log("must be root")
+ if tt.net == "ip4" && !ok {
+ t.Log(m)
continue
}
c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
@@ -67,14 +67,14 @@
func TestRawConnMulticastSocketOptions(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
for _, tt := range rawConnMulticastSocketOptionTests {
@@ -158,7 +158,7 @@
switch runtime.GOOS {
case "freebsd", "linux":
default: // platforms that don't support IGMPv2/3 fail here
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
return
}
t.Error(err)
diff --git a/go/src/golang.org/x/net/ipv4/readwrite_test.go b/go/src/golang.org/x/net/ipv4/readwrite_test.go
index e595443..5e6533e 100644
--- a/go/src/golang.org/x/net/ipv4/readwrite_test.go
+++ b/go/src/golang.org/x/net/ipv4/readwrite_test.go
@@ -91,7 +91,7 @@
func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
c, err := net.ListenPacket("udp4", "127.0.0.1:0")
@@ -113,7 +113,7 @@
if err := p.SetControlMessage(cf, true); err != nil { // probe before test
if nettest.ProtocolNotSupported(err) {
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
t.Fatal(err)
}
diff --git a/go/src/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go b/go/src/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go
index 08a6eaa..6f647bc 100644
--- a/go/src/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go
+++ b/go/src/golang.org/x/net/ipv4/sockopt_ssmreq_unix.go
@@ -14,13 +14,28 @@
"golang.org/x/net/internal/iana"
)
+var freebsd32o64 bool
+
func setsockoptGroupReq(fd, name int, ifi *net.Interface, grp net.IP) error {
var gr sysGroupReq
if ifi != nil {
gr.Interface = uint32(ifi.Index)
}
gr.setGroup(grp)
- return os.NewSyscallError("setsockopt", setsockopt(fd, iana.ProtocolIP, name, unsafe.Pointer(&gr), sysSizeofGroupReq))
+ var p unsafe.Pointer
+ var l sysSockoptLen
+ if freebsd32o64 {
+ var d [sysSizeofGroupReq + 4]byte
+ s := (*[sysSizeofGroupReq]byte)(unsafe.Pointer(&gr))
+ copy(d[:4], s[:4])
+ copy(d[8:], s[4:])
+ p = unsafe.Pointer(&d[0])
+ l = sysSizeofGroupReq + 4
+ } else {
+ p = unsafe.Pointer(&gr)
+ l = sysSizeofGroupReq
+ }
+ return os.NewSyscallError("setsockopt", setsockopt(fd, iana.ProtocolIP, name, p, l))
}
func setsockoptGroupSourceReq(fd, name int, ifi *net.Interface, grp, src net.IP) error {
@@ -29,5 +44,18 @@
gsr.Interface = uint32(ifi.Index)
}
gsr.setSourceGroup(grp, src)
- return os.NewSyscallError("setsockopt", setsockopt(fd, iana.ProtocolIP, name, unsafe.Pointer(&gsr), sysSizeofGroupSourceReq))
+ var p unsafe.Pointer
+ var l sysSockoptLen
+ if freebsd32o64 {
+ var d [sysSizeofGroupSourceReq + 4]byte
+ s := (*[sysSizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))
+ copy(d[:4], s[:4])
+ copy(d[8:], s[4:])
+ p = unsafe.Pointer(&d[0])
+ l = sysSizeofGroupSourceReq + 4
+ } else {
+ p = unsafe.Pointer(&gsr)
+ l = sysSizeofGroupSourceReq
+ }
+ return os.NewSyscallError("setsockopt", setsockopt(fd, iana.ProtocolIP, name, p, l))
}
diff --git a/go/src/golang.org/x/net/ipv4/sys_freebsd.go b/go/src/golang.org/x/net/ipv4/sys_freebsd.go
index 7df658c..09ef491 100644
--- a/go/src/golang.org/x/net/ipv4/sys_freebsd.go
+++ b/go/src/golang.org/x/net/ipv4/sys_freebsd.go
@@ -6,6 +6,8 @@
import (
"net"
+ "runtime"
+ "strings"
"syscall"
"unsafe"
)
@@ -43,6 +45,15 @@
if freebsdVersion >= 1000000 {
sockOpts[ssoMulticastInterface].typ = ssoTypeIPMreqn
}
+ if runtime.GOOS == "freebsd" && runtime.GOARCH == "386" {
+ archs, _ := syscall.Sysctl("kern.supported_archs")
+ for _, s := range strings.Fields(archs) {
+ if s == "amd64" {
+ freebsd32o64 = true
+ break
+ }
+ }
+ }
}
func (gr *sysGroupReq) setGroup(grp net.IP) {
diff --git a/go/src/golang.org/x/net/ipv4/syscall_unix.go b/go/src/golang.org/x/net/ipv4/syscall_unix.go
index 29e8f16..5fe8e83 100644
--- a/go/src/golang.org/x/net/ipv4/syscall_unix.go
+++ b/go/src/golang.org/x/net/ipv4/syscall_unix.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux,amd64 linux,arm netbsd openbsd
+// +build darwin dragonfly freebsd linux,!386 netbsd openbsd
package ipv4
diff --git a/go/src/golang.org/x/net/ipv4/unicast_test.go b/go/src/golang.org/x/net/ipv4/unicast_test.go
index dfe8b72..255096a 100644
--- a/go/src/golang.org/x/net/ipv4/unicast_test.go
+++ b/go/src/golang.org/x/net/ipv4/unicast_test.go
@@ -21,11 +21,11 @@
func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
c, err := net.ListenPacket("udp4", "127.0.0.1:0")
@@ -46,7 +46,7 @@
for i, toggle := range []bool{true, false, true} {
if err := p.SetControlMessage(cf, toggle); err != nil {
if nettest.ProtocolNotSupported(err) {
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
@@ -77,14 +77,14 @@
func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
@@ -114,7 +114,7 @@
}
if err := p.SetControlMessage(cf, toggle); err != nil {
if nettest.ProtocolNotSupported(err) {
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
@@ -136,7 +136,7 @@
if n, cm, _, err := p.ReadFrom(rb); err != nil {
switch runtime.GOOS {
case "darwin": // older darwin kernels have some limitation on receiving icmp packet through raw socket
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
@@ -160,14 +160,14 @@
func TestRawConnReadWriteUnicastICMP(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
@@ -209,7 +209,7 @@
}
if err := r.SetControlMessage(cf, toggle); err != nil {
if nettest.ProtocolNotSupported(err) {
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
@@ -228,7 +228,7 @@
if _, b, cm, err := r.ReadFrom(rb); err != nil {
switch runtime.GOOS {
case "darwin": // older darwin kernels have some limitation on receiving icmp packet through raw socket
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
diff --git a/go/src/golang.org/x/net/ipv4/unicastsockopt_test.go b/go/src/golang.org/x/net/ipv4/unicastsockopt_test.go
index 7474510..25606f2 100644
--- a/go/src/golang.org/x/net/ipv4/unicastsockopt_test.go
+++ b/go/src/golang.org/x/net/ipv4/unicastsockopt_test.go
@@ -6,7 +6,6 @@
import (
"net"
- "os"
"runtime"
"testing"
@@ -18,11 +17,11 @@
func TestConnUnicastSocketOptions(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
ln, err := net.Listen("tcp4", "127.0.0.1:0")
@@ -55,16 +54,17 @@
func TestPacketConnUnicastSocketOptions(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
+ m, ok := nettest.SupportsRawIPSocket()
for _, tt := range packetConnUnicastSocketOptionTests {
- if tt.net == "ip4" && os.Getuid() != 0 {
- t.Log("must be root")
+ if tt.net == "ip4" && !ok {
+ t.Log(m)
continue
}
c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
@@ -80,14 +80,14 @@
func TestRawConnUnicastSocketOptions(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
ifi := nettest.RoutedInterface("ip4", net.FlagUp|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
c, err := net.ListenPacket("ip4:icmp", "127.0.0.1")
@@ -116,7 +116,7 @@
switch runtime.GOOS {
case "windows":
// IP_TOS option is supported on Windows 8 and beyond.
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if err := c.SetTOS(tos); err != nil {
diff --git a/go/src/golang.org/x/net/ipv4/zsys_freebsd_arm.go b/go/src/golang.org/x/net/ipv4/zsys_freebsd_arm.go
index 6fd67e1..ebac6d7 100644
--- a/go/src/golang.org/x/net/ipv4/zsys_freebsd_arm.go
+++ b/go/src/golang.org/x/net/ipv4/zsys_freebsd_arm.go
@@ -44,8 +44,8 @@
sysSizeofIPMreq = 0x8
sysSizeofIPMreqn = 0xc
sysSizeofIPMreqSource = 0xc
- sysSizeofGroupReq = 0x84
- sysSizeofGroupSourceReq = 0x104
+ sysSizeofGroupReq = 0x88
+ sysSizeofGroupSourceReq = 0x108
)
type sysSockaddrStorage struct {
@@ -83,11 +83,13 @@
type sysGroupReq struct {
Interface uint32
+ Pad_cgo_0 [4]byte
Group sysSockaddrStorage
}
type sysGroupSourceReq struct {
Interface uint32
+ Pad_cgo_0 [4]byte
Group sysSockaddrStorage
Source sysSockaddrStorage
}
diff --git a/go/src/golang.org/x/net/ipv4/zsys_linux_arm64.go b/go/src/golang.org/x/net/ipv4/zsys_linux_arm64.go
new file mode 100644
index 0000000..ce4194a
--- /dev/null
+++ b/go/src/golang.org/x/net/ipv4/zsys_linux_arm64.go
@@ -0,0 +1,134 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+// +build linux,arm64
+
+package ipv4
+
+const (
+ sysIP_TOS = 0x1
+ sysIP_TTL = 0x2
+ sysIP_HDRINCL = 0x3
+ sysIP_OPTIONS = 0x4
+ sysIP_ROUTER_ALERT = 0x5
+ sysIP_RECVOPTS = 0x6
+ sysIP_RETOPTS = 0x7
+ sysIP_PKTINFO = 0x8
+ sysIP_PKTOPTIONS = 0x9
+ sysIP_MTU_DISCOVER = 0xa
+ sysIP_RECVERR = 0xb
+ sysIP_RECVTTL = 0xc
+ sysIP_RECVTOS = 0xd
+ sysIP_MTU = 0xe
+ sysIP_FREEBIND = 0xf
+ sysIP_TRANSPARENT = 0x13
+ sysIP_RECVRETOPTS = 0x7
+ sysIP_ORIGDSTADDR = 0x14
+ sysIP_RECVORIGDSTADDR = 0x14
+ sysIP_MINTTL = 0x15
+ sysIP_NODEFRAG = 0x16
+ sysIP_UNICAST_IF = 0x32
+
+ sysIP_MULTICAST_IF = 0x20
+ sysIP_MULTICAST_TTL = 0x21
+ sysIP_MULTICAST_LOOP = 0x22
+ sysIP_ADD_MEMBERSHIP = 0x23
+ sysIP_DROP_MEMBERSHIP = 0x24
+ sysIP_UNBLOCK_SOURCE = 0x25
+ sysIP_BLOCK_SOURCE = 0x26
+ sysIP_ADD_SOURCE_MEMBERSHIP = 0x27
+ sysIP_DROP_SOURCE_MEMBERSHIP = 0x28
+ sysIP_MSFILTER = 0x29
+ sysMCAST_JOIN_GROUP = 0x2a
+ sysMCAST_LEAVE_GROUP = 0x2d
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
+ sysMCAST_BLOCK_SOURCE = 0x2b
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
+ sysMCAST_MSFILTER = 0x30
+ sysIP_MULTICAST_ALL = 0x31
+
+ sysICMP_FILTER = 0x1
+
+ sysSO_EE_ORIGIN_NONE = 0x0
+ sysSO_EE_ORIGIN_LOCAL = 0x1
+ sysSO_EE_ORIGIN_ICMP = 0x2
+ sysSO_EE_ORIGIN_ICMP6 = 0x3
+ sysSO_EE_ORIGIN_TXSTATUS = 0x4
+ sysSO_EE_ORIGIN_TIMESTAMPING = 0x4
+
+ sysSizeofKernelSockaddrStorage = 0x80
+ sysSizeofSockaddrInet = 0x10
+ sysSizeofInetPktinfo = 0xc
+ sysSizeofSockExtendedErr = 0x10
+
+ sysSizeofIPMreq = 0x8
+ sysSizeofIPMreqn = 0xc
+ sysSizeofIPMreqSource = 0xc
+ sysSizeofGroupReq = 0x88
+ sysSizeofGroupSourceReq = 0x108
+
+ sysSizeofICMPFilter = 0x4
+)
+
+type sysKernelSockaddrStorage struct {
+ Family uint16
+ X__data [126]int8
+}
+
+type sysSockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sysInetPktinfo struct {
+ Ifindex int32
+ Spec_dst [4]byte /* in_addr */
+ Addr [4]byte /* in_addr */
+}
+
+type sysSockExtendedErr struct {
+ Errno uint32
+ Origin uint8
+ Type uint8
+ Code uint8
+ Pad uint8
+ Info uint32
+ Data uint32
+}
+
+type sysIPMreq struct {
+ Multiaddr [4]byte /* in_addr */
+ Interface [4]byte /* in_addr */
+}
+
+type sysIPMreqn struct {
+ Multiaddr [4]byte /* in_addr */
+ Address [4]byte /* in_addr */
+ Ifindex int32
+}
+
+type sysIPMreqSource struct {
+ Multiaddr uint32
+ Interface uint32
+ Sourceaddr uint32
+}
+
+type sysGroupReq struct {
+ Interface uint32
+ Pad_cgo_0 [4]byte
+ Group sysKernelSockaddrStorage
+}
+
+type sysGroupSourceReq struct {
+ Interface uint32
+ Pad_cgo_0 [4]byte
+ Group sysKernelSockaddrStorage
+ Source sysKernelSockaddrStorage
+}
+
+type sysICMPFilter struct {
+ Data uint32
+}
diff --git a/go/src/golang.org/x/net/ipv4/zsys_linux_ppc64.go b/go/src/golang.org/x/net/ipv4/zsys_linux_ppc64.go
new file mode 100644
index 0000000..9fe5ee2
--- /dev/null
+++ b/go/src/golang.org/x/net/ipv4/zsys_linux_ppc64.go
@@ -0,0 +1,134 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+// +build linux,ppc64
+
+package ipv4
+
+const (
+ sysIP_TOS = 0x1
+ sysIP_TTL = 0x2
+ sysIP_HDRINCL = 0x3
+ sysIP_OPTIONS = 0x4
+ sysIP_ROUTER_ALERT = 0x5
+ sysIP_RECVOPTS = 0x6
+ sysIP_RETOPTS = 0x7
+ sysIP_PKTINFO = 0x8
+ sysIP_PKTOPTIONS = 0x9
+ sysIP_MTU_DISCOVER = 0xa
+ sysIP_RECVERR = 0xb
+ sysIP_RECVTTL = 0xc
+ sysIP_RECVTOS = 0xd
+ sysIP_MTU = 0xe
+ sysIP_FREEBIND = 0xf
+ sysIP_TRANSPARENT = 0x13
+ sysIP_RECVRETOPTS = 0x7
+ sysIP_ORIGDSTADDR = 0x14
+ sysIP_RECVORIGDSTADDR = 0x14
+ sysIP_MINTTL = 0x15
+ sysIP_NODEFRAG = 0x16
+ sysIP_UNICAST_IF = 0x32
+
+ sysIP_MULTICAST_IF = 0x20
+ sysIP_MULTICAST_TTL = 0x21
+ sysIP_MULTICAST_LOOP = 0x22
+ sysIP_ADD_MEMBERSHIP = 0x23
+ sysIP_DROP_MEMBERSHIP = 0x24
+ sysIP_UNBLOCK_SOURCE = 0x25
+ sysIP_BLOCK_SOURCE = 0x26
+ sysIP_ADD_SOURCE_MEMBERSHIP = 0x27
+ sysIP_DROP_SOURCE_MEMBERSHIP = 0x28
+ sysIP_MSFILTER = 0x29
+ sysMCAST_JOIN_GROUP = 0x2a
+ sysMCAST_LEAVE_GROUP = 0x2d
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
+ sysMCAST_BLOCK_SOURCE = 0x2b
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
+ sysMCAST_MSFILTER = 0x30
+ sysIP_MULTICAST_ALL = 0x31
+
+ sysICMP_FILTER = 0x1
+
+ sysSO_EE_ORIGIN_NONE = 0x0
+ sysSO_EE_ORIGIN_LOCAL = 0x1
+ sysSO_EE_ORIGIN_ICMP = 0x2
+ sysSO_EE_ORIGIN_ICMP6 = 0x3
+ sysSO_EE_ORIGIN_TXSTATUS = 0x4
+ sysSO_EE_ORIGIN_TIMESTAMPING = 0x4
+
+ sysSizeofKernelSockaddrStorage = 0x80
+ sysSizeofSockaddrInet = 0x10
+ sysSizeofInetPktinfo = 0xc
+ sysSizeofSockExtendedErr = 0x10
+
+ sysSizeofIPMreq = 0x8
+ sysSizeofIPMreqn = 0xc
+ sysSizeofIPMreqSource = 0xc
+ sysSizeofGroupReq = 0x88
+ sysSizeofGroupSourceReq = 0x108
+
+ sysSizeofICMPFilter = 0x4
+)
+
+type sysKernelSockaddrStorage struct {
+ Family uint16
+ X__data [126]int8
+}
+
+type sysSockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sysInetPktinfo struct {
+ Ifindex int32
+ Spec_dst [4]byte /* in_addr */
+ Addr [4]byte /* in_addr */
+}
+
+type sysSockExtendedErr struct {
+ Errno uint32
+ Origin uint8
+ Type uint8
+ Code uint8
+ Pad uint8
+ Info uint32
+ Data uint32
+}
+
+type sysIPMreq struct {
+ Multiaddr [4]byte /* in_addr */
+ Interface [4]byte /* in_addr */
+}
+
+type sysIPMreqn struct {
+ Multiaddr [4]byte /* in_addr */
+ Address [4]byte /* in_addr */
+ Ifindex int32
+}
+
+type sysIPMreqSource struct {
+ Multiaddr uint32
+ Interface uint32
+ Sourceaddr uint32
+}
+
+type sysGroupReq struct {
+ Interface uint32
+ Pad_cgo_0 [4]byte
+ Group sysKernelSockaddrStorage
+}
+
+type sysGroupSourceReq struct {
+ Interface uint32
+ Pad_cgo_0 [4]byte
+ Group sysKernelSockaddrStorage
+ Source sysKernelSockaddrStorage
+}
+
+type sysICMPFilter struct {
+ Data uint32
+}
diff --git a/go/src/golang.org/x/net/ipv4/zsys_linux_ppc64le.go b/go/src/golang.org/x/net/ipv4/zsys_linux_ppc64le.go
new file mode 100644
index 0000000..3891f54
--- /dev/null
+++ b/go/src/golang.org/x/net/ipv4/zsys_linux_ppc64le.go
@@ -0,0 +1,134 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+// +build linux,ppc64le
+
+package ipv4
+
+const (
+ sysIP_TOS = 0x1
+ sysIP_TTL = 0x2
+ sysIP_HDRINCL = 0x3
+ sysIP_OPTIONS = 0x4
+ sysIP_ROUTER_ALERT = 0x5
+ sysIP_RECVOPTS = 0x6
+ sysIP_RETOPTS = 0x7
+ sysIP_PKTINFO = 0x8
+ sysIP_PKTOPTIONS = 0x9
+ sysIP_MTU_DISCOVER = 0xa
+ sysIP_RECVERR = 0xb
+ sysIP_RECVTTL = 0xc
+ sysIP_RECVTOS = 0xd
+ sysIP_MTU = 0xe
+ sysIP_FREEBIND = 0xf
+ sysIP_TRANSPARENT = 0x13
+ sysIP_RECVRETOPTS = 0x7
+ sysIP_ORIGDSTADDR = 0x14
+ sysIP_RECVORIGDSTADDR = 0x14
+ sysIP_MINTTL = 0x15
+ sysIP_NODEFRAG = 0x16
+ sysIP_UNICAST_IF = 0x32
+
+ sysIP_MULTICAST_IF = 0x20
+ sysIP_MULTICAST_TTL = 0x21
+ sysIP_MULTICAST_LOOP = 0x22
+ sysIP_ADD_MEMBERSHIP = 0x23
+ sysIP_DROP_MEMBERSHIP = 0x24
+ sysIP_UNBLOCK_SOURCE = 0x25
+ sysIP_BLOCK_SOURCE = 0x26
+ sysIP_ADD_SOURCE_MEMBERSHIP = 0x27
+ sysIP_DROP_SOURCE_MEMBERSHIP = 0x28
+ sysIP_MSFILTER = 0x29
+ sysMCAST_JOIN_GROUP = 0x2a
+ sysMCAST_LEAVE_GROUP = 0x2d
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
+ sysMCAST_BLOCK_SOURCE = 0x2b
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
+ sysMCAST_MSFILTER = 0x30
+ sysIP_MULTICAST_ALL = 0x31
+
+ sysICMP_FILTER = 0x1
+
+ sysSO_EE_ORIGIN_NONE = 0x0
+ sysSO_EE_ORIGIN_LOCAL = 0x1
+ sysSO_EE_ORIGIN_ICMP = 0x2
+ sysSO_EE_ORIGIN_ICMP6 = 0x3
+ sysSO_EE_ORIGIN_TXSTATUS = 0x4
+ sysSO_EE_ORIGIN_TIMESTAMPING = 0x4
+
+ sysSizeofKernelSockaddrStorage = 0x80
+ sysSizeofSockaddrInet = 0x10
+ sysSizeofInetPktinfo = 0xc
+ sysSizeofSockExtendedErr = 0x10
+
+ sysSizeofIPMreq = 0x8
+ sysSizeofIPMreqn = 0xc
+ sysSizeofIPMreqSource = 0xc
+ sysSizeofGroupReq = 0x88
+ sysSizeofGroupSourceReq = 0x108
+
+ sysSizeofICMPFilter = 0x4
+)
+
+type sysKernelSockaddrStorage struct {
+ Family uint16
+ X__data [126]int8
+}
+
+type sysSockaddrInet struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ X__pad [8]uint8
+}
+
+type sysInetPktinfo struct {
+ Ifindex int32
+ Spec_dst [4]byte /* in_addr */
+ Addr [4]byte /* in_addr */
+}
+
+type sysSockExtendedErr struct {
+ Errno uint32
+ Origin uint8
+ Type uint8
+ Code uint8
+ Pad uint8
+ Info uint32
+ Data uint32
+}
+
+type sysIPMreq struct {
+ Multiaddr [4]byte /* in_addr */
+ Interface [4]byte /* in_addr */
+}
+
+type sysIPMreqn struct {
+ Multiaddr [4]byte /* in_addr */
+ Address [4]byte /* in_addr */
+ Ifindex int32
+}
+
+type sysIPMreqSource struct {
+ Multiaddr uint32
+ Interface uint32
+ Sourceaddr uint32
+}
+
+type sysGroupReq struct {
+ Interface uint32
+ Pad_cgo_0 [4]byte
+ Group sysKernelSockaddrStorage
+}
+
+type sysGroupSourceReq struct {
+ Interface uint32
+ Pad_cgo_0 [4]byte
+ Group sysKernelSockaddrStorage
+ Source sysKernelSockaddrStorage
+}
+
+type sysICMPFilter struct {
+ Data uint32
+}
diff --git a/go/src/golang.org/x/net/ipv6/control.go b/go/src/golang.org/x/net/ipv6/control.go
index 44861be..27f1d2f 100644
--- a/go/src/golang.org/x/net/ipv6/control.go
+++ b/go/src/golang.org/x/net/ipv6/control.go
@@ -17,21 +17,6 @@
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
-// RFC 3678 Socket Interface Extensions for Multicast Source Filters
-// http://tools.ietf.org/html/rfc3678
-// RFC 4607 Source-Specific Multicast for IP
-// http://tools.ietf.org/html/rfc4607
-//
// Note that RFC 3542 obsoletes 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
diff --git a/go/src/golang.org/x/net/ipv6/doc.go b/go/src/golang.org/x/net/ipv6/doc.go
index 6b1b782..d536bcb 100644
--- a/go/src/golang.org/x/net/ipv6/doc.go
+++ b/go/src/golang.org/x/net/ipv6/doc.go
@@ -6,9 +6,15 @@
// 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, RFC 3542, RFC 3678 and RFC
-// 4607.
+// manipulation of IPv6 facilities.
+//
+// The IPv6 protocol is defined in RFC 2460.
+// Basic and advanced socket interface extensions are defined in RFC
+// 3493 and RFC 3542.
+// Socket interface extensions for multicast source filters are
+// defined in RFC 3678.
+// MLDv1 and MLDv2 are defined in RFC 2710 and RFC 3810.
+// Source-specific multicast is defined in RFC 4607.
//
//
// Unicasting
@@ -196,8 +202,8 @@
// Source-specific multicasting
//
// An application that uses PacketConn on MLDv2 supported platform is
-// able to join source-specific multicast groups as described in RFC
-// 3678. The application may use JoinSourceSpecificGroup and
+// able to join source-specific multicast groups.
+// The application may use JoinSourceSpecificGroup and
// LeaveSourceSpecificGroup for the operation known as "include" mode,
//
// ssmgroup := net.UDPAddr{IP: net.ParseIP("ff32::8000:9")}
diff --git a/go/src/golang.org/x/net/ipv6/gen.go b/go/src/golang.org/x/net/ipv6/gen.go
index 329cf1d..d9186c5 100644
--- a/go/src/golang.org/x/net/ipv6/gen.go
+++ b/go/src/golang.org/x/net/ipv6/gen.go
@@ -52,12 +52,14 @@
if err != nil {
return err
}
- switch runtime.GOOS {
- case "dragonfly", "solaris":
- // The ipv6 pacakge still supports go1.2, and so we
- // need to take care of additional platforms in go1.3
- // and above for working with go1.2.
+ // The ipv6 pacakge still supports go1.2, and so we need to
+ // take care of additional platforms in go1.3 and above for
+ // working with go1.2.
+ switch {
+ case runtime.GOOS == "dragonfly" || runtime.GOOS == "solaris":
b = bytes.Replace(b, []byte("package ipv6\n"), []byte("// +build "+runtime.GOOS+"\n\npackage ipv6\n"), 1)
+ case runtime.GOOS == "linux" && (runtime.GOARCH == "arm64" || runtime.GOARCH == "ppc64" || runtime.GOARCH == "ppc64le"):
+ b = bytes.Replace(b, []byte("package ipv6\n"), []byte("// +build "+runtime.GOOS+","+runtime.GOARCH+"\n\npackage ipv6\n"), 1)
}
b, err = format.Source(b)
if err != nil {
diff --git a/go/src/golang.org/x/net/ipv6/icmp_test.go b/go/src/golang.org/x/net/ipv6/icmp_test.go
index 76e02dc..e192d6d 100644
--- a/go/src/golang.org/x/net/ipv6/icmp_test.go
+++ b/go/src/golang.org/x/net/ipv6/icmp_test.go
@@ -6,11 +6,11 @@
import (
"net"
- "os"
"reflect"
"runtime"
"testing"
+ "golang.org/x/net/internal/nettest"
"golang.org/x/net/ipv6"
)
@@ -35,7 +35,7 @@
func TestICMPFilter(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
var f ipv6.ICMPFilter
@@ -62,13 +62,13 @@
func TestSetICMPFilter(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
c, err := net.ListenPacket("ip6:ipv6-icmp", "::1")
diff --git a/go/src/golang.org/x/net/ipv6/multicast_test.go b/go/src/golang.org/x/net/ipv6/multicast_test.go
index 768f404..fc10ce1 100644
--- a/go/src/golang.org/x/net/ipv6/multicast_test.go
+++ b/go/src/golang.org/x/net/ipv6/multicast_test.go
@@ -31,16 +31,16 @@
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)
+ t.Skipf("not supported on %s", runtime.GOOS)
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
}
ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
for _, tt := range packetConnReadWriteMulticastUDPTests {
@@ -64,7 +64,7 @@
switch runtime.GOOS {
case "freebsd", "linux":
default: // platforms that don't support MLDv2 fail here
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
@@ -95,7 +95,7 @@
for i, toggle := range []bool{true, false, true} {
if err := p.SetControlMessage(cf, toggle); err != nil {
if nettest.ProtocolNotSupported(err) {
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
@@ -133,19 +133,19 @@
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)
+ t.Skipf("not supported on %s", runtime.GOOS)
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
for _, tt := range packetConnReadWriteMulticastICMPTests {
@@ -168,7 +168,7 @@
switch runtime.GOOS {
case "freebsd", "linux":
default: // platforms that don't support MLDv2 fail here
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
@@ -228,7 +228,7 @@
}
if err := p.SetControlMessage(cf, toggle); err != nil {
if nettest.ProtocolNotSupported(err) {
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
@@ -246,7 +246,7 @@
if n, cm, _, err := p.ReadFrom(rb); err != nil {
switch runtime.GOOS {
case "darwin": // older darwin kernels have some limitation on receiving icmp packet through raw socket
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
diff --git a/go/src/golang.org/x/net/ipv6/multicastlistener_test.go b/go/src/golang.org/x/net/ipv6/multicastlistener_test.go
index 78393bf..9711f75 100644
--- a/go/src/golang.org/x/net/ipv6/multicastlistener_test.go
+++ b/go/src/golang.org/x/net/ipv6/multicastlistener_test.go
@@ -7,7 +7,6 @@
import (
"fmt"
"net"
- "os"
"runtime"
"testing"
@@ -24,7 +23,7 @@
func TestUDPSinglePacketConnWithMultipleGroupListeners(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
@@ -64,7 +63,7 @@
func TestUDPMultiplePacketConnWithMultipleGroupListeners(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
@@ -116,7 +115,7 @@
func TestUDPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
@@ -159,13 +158,13 @@
func TestIPSinglePacketConnWithSingleGroupListener(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
c, err := net.ListenPacket("ip6:ipv6-icmp", "::") // wildcard address
@@ -201,15 +200,15 @@
func TestIPPerInterfaceSinglePacketConnWithSingleGroupListener(t *testing.T) {
switch runtime.GOOS {
case "darwin", "dragonfly", "openbsd": // platforms that return fe80::1%lo0: bind: can't assign requested address
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
gaddr := net.IPAddr{IP: net.ParseIP("ff02::114")} // see RFC 4727
diff --git a/go/src/golang.org/x/net/ipv6/multicastsockopt_test.go b/go/src/golang.org/x/net/ipv6/multicastsockopt_test.go
index 72e68a0..fe0e6e1 100644
--- a/go/src/golang.org/x/net/ipv6/multicastsockopt_test.go
+++ b/go/src/golang.org/x/net/ipv6/multicastsockopt_test.go
@@ -6,7 +6,6 @@
import (
"net"
- "os"
"runtime"
"testing"
@@ -28,19 +27,20 @@
func TestPacketConnMulticastSocketOptions(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
}
ifi := nettest.RoutedInterface("ip6", net.FlagUp|net.FlagMulticast|net.FlagLoopback)
if ifi == nil {
- t.Skipf("not available on %q", runtime.GOOS)
+ t.Skipf("not available on %s", runtime.GOOS)
}
+ m, ok := nettest.SupportsRawIPSocket()
for _, tt := range packetConnMulticastSocketOptionTests {
- if tt.net == "ip6" && os.Getuid() != 0 {
- t.Log("must be root")
+ if tt.net == "ip6" && !ok {
+ t.Log(m)
continue
}
c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
@@ -120,7 +120,7 @@
switch runtime.GOOS {
case "freebsd", "linux":
default: // platforms that don't support MLDv2 fail here
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
return
}
t.Error(err)
diff --git a/go/src/golang.org/x/net/ipv6/readwrite_test.go b/go/src/golang.org/x/net/ipv6/readwrite_test.go
index c5d295c..ff4ea2b 100644
--- a/go/src/golang.org/x/net/ipv6/readwrite_test.go
+++ b/go/src/golang.org/x/net/ipv6/readwrite_test.go
@@ -102,7 +102,7 @@
func TestPacketConnConcurrentReadWriteUnicastUDP(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
@@ -127,7 +127,7 @@
if err := p.SetControlMessage(cf, true); err != nil { // probe before test
if nettest.ProtocolNotSupported(err) {
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
t.Fatal(err)
}
diff --git a/go/src/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go b/go/src/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go
index 8e1dcef..c64d6d5 100644
--- a/go/src/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go
+++ b/go/src/golang.org/x/net/ipv6/sockopt_ssmreq_unix.go
@@ -12,13 +12,28 @@
"unsafe"
)
+var freebsd32o64 bool
+
func setsockoptGroupReq(fd int, opt *sockOpt, ifi *net.Interface, grp net.IP) error {
var gr sysGroupReq
if ifi != nil {
gr.Interface = uint32(ifi.Index)
}
gr.setGroup(grp)
- return os.NewSyscallError("setsockopt", setsockopt(fd, opt.level, opt.name, unsafe.Pointer(&gr), sysSizeofGroupReq))
+ var p unsafe.Pointer
+ var l sysSockoptLen
+ if freebsd32o64 {
+ var d [sysSizeofGroupReq + 4]byte
+ s := (*[sysSizeofGroupReq]byte)(unsafe.Pointer(&gr))
+ copy(d[:4], s[:4])
+ copy(d[8:], s[4:])
+ p = unsafe.Pointer(&d[0])
+ l = sysSizeofGroupReq + 4
+ } else {
+ p = unsafe.Pointer(&gr)
+ l = sysSizeofGroupReq
+ }
+ return os.NewSyscallError("setsockopt", setsockopt(fd, opt.level, opt.name, p, l))
}
func setsockoptGroupSourceReq(fd int, opt *sockOpt, ifi *net.Interface, grp, src net.IP) error {
@@ -27,5 +42,18 @@
gsr.Interface = uint32(ifi.Index)
}
gsr.setSourceGroup(grp, src)
- return os.NewSyscallError("setsockopt", setsockopt(fd, opt.level, opt.name, unsafe.Pointer(&gsr), sysSizeofGroupSourceReq))
+ var p unsafe.Pointer
+ var l sysSockoptLen
+ if freebsd32o64 {
+ var d [sysSizeofGroupSourceReq + 4]byte
+ s := (*[sysSizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))
+ copy(d[:4], s[:4])
+ copy(d[8:], s[4:])
+ p = unsafe.Pointer(&d[0])
+ l = sysSizeofGroupSourceReq + 4
+ } else {
+ p = unsafe.Pointer(&gsr)
+ l = sysSizeofGroupSourceReq
+ }
+ return os.NewSyscallError("setsockopt", setsockopt(fd, opt.level, opt.name, p, l))
}
diff --git a/go/src/golang.org/x/net/ipv6/sockopt_test.go b/go/src/golang.org/x/net/ipv6/sockopt_test.go
index 96048bf..9c21903 100644
--- a/go/src/golang.org/x/net/ipv6/sockopt_test.go
+++ b/go/src/golang.org/x/net/ipv6/sockopt_test.go
@@ -7,7 +7,6 @@
import (
"fmt"
"net"
- "os"
"runtime"
"testing"
@@ -21,7 +20,7 @@
func TestConnInitiatorPathMTU(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
@@ -45,7 +44,7 @@
if pmtu, err := ipv6.NewConn(c).PathMTU(); err != nil {
switch runtime.GOOS {
case "darwin": // older darwin kernels don't support IPV6_PATHMTU option
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
default:
t.Fatal(err)
}
@@ -59,7 +58,7 @@
func TestConnResponderPathMTU(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
@@ -83,7 +82,7 @@
if pmtu, err := ipv6.NewConn(c).PathMTU(); err != nil {
switch runtime.GOOS {
case "darwin": // older darwin kernels don't support IPV6_PATHMTU option
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
default:
t.Fatal(err)
}
@@ -97,13 +96,13 @@
func TestPacketConnChecksum(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
c, err := net.ListenPacket(fmt.Sprintf("ip6:%d", iana.ProtocolOSPFIGP), "::") // OSPF for IPv6
diff --git a/go/src/golang.org/x/net/ipv6/sys_freebsd.go b/go/src/golang.org/x/net/ipv6/sys_freebsd.go
index abf3bb9..b68725c 100644
--- a/go/src/golang.org/x/net/ipv6/sys_freebsd.go
+++ b/go/src/golang.org/x/net/ipv6/sys_freebsd.go
@@ -6,6 +6,8 @@
import (
"net"
+ "runtime"
+ "strings"
"syscall"
"unsafe"
@@ -45,6 +47,18 @@
}
)
+func init() {
+ if runtime.GOOS == "freebsd" && runtime.GOARCH == "386" {
+ archs, _ := syscall.Sysctl("kern.supported_archs")
+ for _, s := range strings.Fields(archs) {
+ if s == "amd64" {
+ freebsd32o64 = true
+ break
+ }
+ }
+ }
+}
+
func (sa *sysSockaddrInet6) setSockaddr(ip net.IP, i int) {
sa.Len = sysSizeofSockaddrInet6
sa.Family = syscall.AF_INET6
diff --git a/go/src/golang.org/x/net/ipv6/syscall_unix.go b/go/src/golang.org/x/net/ipv6/syscall_unix.go
index 73b949f..a2bd836 100644
--- a/go/src/golang.org/x/net/ipv6/syscall_unix.go
+++ b/go/src/golang.org/x/net/ipv6/syscall_unix.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux,amd64 linux,arm netbsd openbsd
+// +build darwin dragonfly freebsd linux,!386 netbsd openbsd
package ipv6
diff --git a/go/src/golang.org/x/net/ipv6/unicast_test.go b/go/src/golang.org/x/net/ipv6/unicast_test.go
index 6394965..6165698 100644
--- a/go/src/golang.org/x/net/ipv6/unicast_test.go
+++ b/go/src/golang.org/x/net/ipv6/unicast_test.go
@@ -21,7 +21,7 @@
func TestPacketConnReadWriteUnicastUDP(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
@@ -54,7 +54,7 @@
for i, toggle := range []bool{true, false, true} {
if err := p.SetControlMessage(cf, toggle); err != nil {
if nettest.ProtocolNotSupported(err) {
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
t.Fatal(err)
}
@@ -84,13 +84,13 @@
func TestPacketConnReadWriteUnicastICMP(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
}
- if os.Getuid() != 0 {
- t.Skip("must be root")
+ if m, ok := nettest.SupportsRawIPSocket(); !ok {
+ t.Skip(m)
}
c, err := net.ListenPacket("ip6:ipv6-icmp", "::1")
@@ -149,7 +149,7 @@
}
if err := p.SetControlMessage(cf, toggle); err != nil {
if nettest.ProtocolNotSupported(err) {
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
t.Fatal(err)
}
@@ -169,7 +169,7 @@
if n, cm, _, err := p.ReadFrom(rb); err != nil {
switch runtime.GOOS {
case "darwin": // older darwin kernels have some limitation on receiving icmp packet through raw socket
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
continue
}
t.Fatal(err)
diff --git a/go/src/golang.org/x/net/ipv6/unicastsockopt_test.go b/go/src/golang.org/x/net/ipv6/unicastsockopt_test.go
index 97e71a7..7bb2e44 100644
--- a/go/src/golang.org/x/net/ipv6/unicastsockopt_test.go
+++ b/go/src/golang.org/x/net/ipv6/unicastsockopt_test.go
@@ -6,18 +6,18 @@
import (
"net"
- "os"
"runtime"
"testing"
"golang.org/x/net/internal/iana"
+ "golang.org/x/net/internal/nettest"
"golang.org/x/net/ipv6"
)
func TestConnUnicastSocketOptions(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
@@ -53,15 +53,17 @@
func TestPacketConnUnicastSocketOptions(t *testing.T) {
switch runtime.GOOS {
case "nacl", "plan9", "solaris", "windows":
- t.Skipf("not supported on %q", runtime.GOOS)
+ t.Skipf("not supported on %s", runtime.GOOS)
}
if !supportsIPv6 {
t.Skip("ipv6 is not supported")
}
+ m, ok := nettest.SupportsRawIPSocket()
for _, tt := range packetConnUnicastSocketOptionTests {
- if tt.net == "ip6" && os.Getuid() != 0 {
- t.Skip("must be root")
+ if tt.net == "ip6" && !ok {
+ t.Log(m)
+ continue
}
c, err := net.ListenPacket(tt.net+tt.proto, tt.addr)
if err != nil {
@@ -85,7 +87,7 @@
if err := c.SetTrafficClass(tclass); err != nil {
switch runtime.GOOS {
case "darwin": // older darwin kernels don't support IPV6_TCLASS option
- t.Logf("not supported on %q", runtime.GOOS)
+ t.Logf("not supported on %s", runtime.GOOS)
goto next
}
t.Fatal(err)
diff --git a/go/src/golang.org/x/net/ipv6/zsys_freebsd_arm.go b/go/src/golang.org/x/net/ipv6/zsys_freebsd_arm.go
index 4ace96f..4a62c2d 100644
--- a/go/src/golang.org/x/net/ipv6/zsys_freebsd_arm.go
+++ b/go/src/golang.org/x/net/ipv6/zsys_freebsd_arm.go
@@ -68,8 +68,8 @@
sysSizeofIPv6Mtuinfo = 0x20
sysSizeofIPv6Mreq = 0x14
- sysSizeofGroupReq = 0x84
- sysSizeofGroupSourceReq = 0x104
+ sysSizeofGroupReq = 0x88
+ sysSizeofGroupSourceReq = 0x108
sysSizeofICMPv6Filter = 0x20
)
@@ -108,11 +108,13 @@
type sysGroupReq struct {
Interface uint32
+ Pad_cgo_0 [4]byte
Group sysSockaddrStorage
}
type sysGroupSourceReq struct {
Interface uint32
+ Pad_cgo_0 [4]byte
Group sysSockaddrStorage
Source sysSockaddrStorage
}
diff --git a/go/src/golang.org/x/net/ipv6/zsys_linux_arm64.go b/go/src/golang.org/x/net/ipv6/zsys_linux_arm64.go
new file mode 100644
index 0000000..ab10464
--- /dev/null
+++ b/go/src/golang.org/x/net/ipv6/zsys_linux_arm64.go
@@ -0,0 +1,156 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+// +build linux,arm64
+
+package ipv6
+
+const (
+ sysIPV6_ADDRFORM = 0x1
+ sysIPV6_2292PKTINFO = 0x2
+ sysIPV6_2292HOPOPTS = 0x3
+ sysIPV6_2292DSTOPTS = 0x4
+ sysIPV6_2292RTHDR = 0x5
+ sysIPV6_2292PKTOPTIONS = 0x6
+ sysIPV6_CHECKSUM = 0x7
+ sysIPV6_2292HOPLIMIT = 0x8
+ sysIPV6_NEXTHOP = 0x9
+ sysIPV6_FLOWINFO = 0xb
+
+ sysIPV6_UNICAST_HOPS = 0x10
+ sysIPV6_MULTICAST_IF = 0x11
+ sysIPV6_MULTICAST_HOPS = 0x12
+ sysIPV6_MULTICAST_LOOP = 0x13
+ sysIPV6_ADD_MEMBERSHIP = 0x14
+ sysIPV6_DROP_MEMBERSHIP = 0x15
+ sysMCAST_JOIN_GROUP = 0x2a
+ sysMCAST_LEAVE_GROUP = 0x2d
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
+ sysMCAST_BLOCK_SOURCE = 0x2b
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
+ sysMCAST_MSFILTER = 0x30
+ sysIPV6_ROUTER_ALERT = 0x16
+ sysIPV6_MTU_DISCOVER = 0x17
+ sysIPV6_MTU = 0x18
+ sysIPV6_RECVERR = 0x19
+ sysIPV6_V6ONLY = 0x1a
+ sysIPV6_JOIN_ANYCAST = 0x1b
+ sysIPV6_LEAVE_ANYCAST = 0x1c
+
+ sysIPV6_FLOWLABEL_MGR = 0x20
+ sysIPV6_FLOWINFO_SEND = 0x21
+
+ sysIPV6_IPSEC_POLICY = 0x22
+ sysIPV6_XFRM_POLICY = 0x23
+
+ sysIPV6_RECVPKTINFO = 0x31
+ sysIPV6_PKTINFO = 0x32
+ sysIPV6_RECVHOPLIMIT = 0x33
+ sysIPV6_HOPLIMIT = 0x34
+ sysIPV6_RECVHOPOPTS = 0x35
+ sysIPV6_HOPOPTS = 0x36
+ sysIPV6_RTHDRDSTOPTS = 0x37
+ sysIPV6_RECVRTHDR = 0x38
+ sysIPV6_RTHDR = 0x39
+ sysIPV6_RECVDSTOPTS = 0x3a
+ sysIPV6_DSTOPTS = 0x3b
+ sysIPV6_RECVPATHMTU = 0x3c
+ sysIPV6_PATHMTU = 0x3d
+ sysIPV6_DONTFRAG = 0x3e
+
+ sysIPV6_RECVTCLASS = 0x42
+ sysIPV6_TCLASS = 0x43
+
+ sysIPV6_ADDR_PREFERENCES = 0x48
+
+ sysIPV6_PREFER_SRC_TMP = 0x1
+ sysIPV6_PREFER_SRC_PUBLIC = 0x2
+ sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100
+ sysIPV6_PREFER_SRC_COA = 0x4
+ sysIPV6_PREFER_SRC_HOME = 0x400
+ sysIPV6_PREFER_SRC_CGA = 0x8
+ sysIPV6_PREFER_SRC_NONCGA = 0x800
+
+ sysIPV6_MINHOPCOUNT = 0x49
+
+ sysIPV6_ORIGDSTADDR = 0x4a
+ sysIPV6_RECVORIGDSTADDR = 0x4a
+ sysIPV6_TRANSPARENT = 0x4b
+ sysIPV6_UNICAST_IF = 0x4c
+
+ sysICMPV6_FILTER = 0x1
+
+ sysICMPV6_FILTER_BLOCK = 0x1
+ sysICMPV6_FILTER_PASS = 0x2
+ sysICMPV6_FILTER_BLOCKOTHERS = 0x3
+ sysICMPV6_FILTER_PASSONLY = 0x4
+
+ sysSizeofKernelSockaddrStorage = 0x80
+ sysSizeofSockaddrInet6 = 0x1c
+ sysSizeofInet6Pktinfo = 0x14
+ sysSizeofIPv6Mtuinfo = 0x20
+ sysSizeofIPv6FlowlabelReq = 0x20
+
+ sysSizeofIPv6Mreq = 0x14
+ sysSizeofGroupReq = 0x88
+ sysSizeofGroupSourceReq = 0x108
+
+ sysSizeofICMPv6Filter = 0x20
+)
+
+type sysKernelSockaddrStorage struct {
+ Family uint16
+ X__data [126]int8
+}
+
+type sysSockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+type sysInet6Pktinfo struct {
+ Addr [16]byte /* in6_addr */
+ Ifindex int32
+}
+
+type sysIPv6Mtuinfo struct {
+ Addr sysSockaddrInet6
+ Mtu uint32
+}
+
+type sysIPv6FlowlabelReq struct {
+ Dst [16]byte /* in6_addr */
+ Label uint32
+ Action uint8
+ Share uint8
+ Flags uint16
+ Expires uint16
+ Linger uint16
+ X__flr_pad uint32
+}
+
+type sysIPv6Mreq struct {
+ Multiaddr [16]byte /* in6_addr */
+ Ifindex int32
+}
+
+type sysGroupReq struct {
+ Interface uint32
+ Pad_cgo_0 [4]byte
+ Group sysKernelSockaddrStorage
+}
+
+type sysGroupSourceReq struct {
+ Interface uint32
+ Pad_cgo_0 [4]byte
+ Group sysKernelSockaddrStorage
+ Source sysKernelSockaddrStorage
+}
+
+type sysICMPv6Filter struct {
+ Data [8]uint32
+}
diff --git a/go/src/golang.org/x/net/ipv6/zsys_linux_ppc64.go b/go/src/golang.org/x/net/ipv6/zsys_linux_ppc64.go
new file mode 100644
index 0000000..b99b8a5
--- /dev/null
+++ b/go/src/golang.org/x/net/ipv6/zsys_linux_ppc64.go
@@ -0,0 +1,156 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+// +build linux,ppc64
+
+package ipv6
+
+const (
+ sysIPV6_ADDRFORM = 0x1
+ sysIPV6_2292PKTINFO = 0x2
+ sysIPV6_2292HOPOPTS = 0x3
+ sysIPV6_2292DSTOPTS = 0x4
+ sysIPV6_2292RTHDR = 0x5
+ sysIPV6_2292PKTOPTIONS = 0x6
+ sysIPV6_CHECKSUM = 0x7
+ sysIPV6_2292HOPLIMIT = 0x8
+ sysIPV6_NEXTHOP = 0x9
+ sysIPV6_FLOWINFO = 0xb
+
+ sysIPV6_UNICAST_HOPS = 0x10
+ sysIPV6_MULTICAST_IF = 0x11
+ sysIPV6_MULTICAST_HOPS = 0x12
+ sysIPV6_MULTICAST_LOOP = 0x13
+ sysIPV6_ADD_MEMBERSHIP = 0x14
+ sysIPV6_DROP_MEMBERSHIP = 0x15
+ sysMCAST_JOIN_GROUP = 0x2a
+ sysMCAST_LEAVE_GROUP = 0x2d
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
+ sysMCAST_BLOCK_SOURCE = 0x2b
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
+ sysMCAST_MSFILTER = 0x30
+ sysIPV6_ROUTER_ALERT = 0x16
+ sysIPV6_MTU_DISCOVER = 0x17
+ sysIPV6_MTU = 0x18
+ sysIPV6_RECVERR = 0x19
+ sysIPV6_V6ONLY = 0x1a
+ sysIPV6_JOIN_ANYCAST = 0x1b
+ sysIPV6_LEAVE_ANYCAST = 0x1c
+
+ sysIPV6_FLOWLABEL_MGR = 0x20
+ sysIPV6_FLOWINFO_SEND = 0x21
+
+ sysIPV6_IPSEC_POLICY = 0x22
+ sysIPV6_XFRM_POLICY = 0x23
+
+ sysIPV6_RECVPKTINFO = 0x31
+ sysIPV6_PKTINFO = 0x32
+ sysIPV6_RECVHOPLIMIT = 0x33
+ sysIPV6_HOPLIMIT = 0x34
+ sysIPV6_RECVHOPOPTS = 0x35
+ sysIPV6_HOPOPTS = 0x36
+ sysIPV6_RTHDRDSTOPTS = 0x37
+ sysIPV6_RECVRTHDR = 0x38
+ sysIPV6_RTHDR = 0x39
+ sysIPV6_RECVDSTOPTS = 0x3a
+ sysIPV6_DSTOPTS = 0x3b
+ sysIPV6_RECVPATHMTU = 0x3c
+ sysIPV6_PATHMTU = 0x3d
+ sysIPV6_DONTFRAG = 0x3e
+
+ sysIPV6_RECVTCLASS = 0x42
+ sysIPV6_TCLASS = 0x43
+
+ sysIPV6_ADDR_PREFERENCES = 0x48
+
+ sysIPV6_PREFER_SRC_TMP = 0x1
+ sysIPV6_PREFER_SRC_PUBLIC = 0x2
+ sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100
+ sysIPV6_PREFER_SRC_COA = 0x4
+ sysIPV6_PREFER_SRC_HOME = 0x400
+ sysIPV6_PREFER_SRC_CGA = 0x8
+ sysIPV6_PREFER_SRC_NONCGA = 0x800
+
+ sysIPV6_MINHOPCOUNT = 0x49
+
+ sysIPV6_ORIGDSTADDR = 0x4a
+ sysIPV6_RECVORIGDSTADDR = 0x4a
+ sysIPV6_TRANSPARENT = 0x4b
+ sysIPV6_UNICAST_IF = 0x4c
+
+ sysICMPV6_FILTER = 0x1
+
+ sysICMPV6_FILTER_BLOCK = 0x1
+ sysICMPV6_FILTER_PASS = 0x2
+ sysICMPV6_FILTER_BLOCKOTHERS = 0x3
+ sysICMPV6_FILTER_PASSONLY = 0x4
+
+ sysSizeofKernelSockaddrStorage = 0x80
+ sysSizeofSockaddrInet6 = 0x1c
+ sysSizeofInet6Pktinfo = 0x14
+ sysSizeofIPv6Mtuinfo = 0x20
+ sysSizeofIPv6FlowlabelReq = 0x20
+
+ sysSizeofIPv6Mreq = 0x14
+ sysSizeofGroupReq = 0x88
+ sysSizeofGroupSourceReq = 0x108
+
+ sysSizeofICMPv6Filter = 0x20
+)
+
+type sysKernelSockaddrStorage struct {
+ Family uint16
+ X__data [126]int8
+}
+
+type sysSockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+type sysInet6Pktinfo struct {
+ Addr [16]byte /* in6_addr */
+ Ifindex int32
+}
+
+type sysIPv6Mtuinfo struct {
+ Addr sysSockaddrInet6
+ Mtu uint32
+}
+
+type sysIPv6FlowlabelReq struct {
+ Dst [16]byte /* in6_addr */
+ Label uint32
+ Action uint8
+ Share uint8
+ Flags uint16
+ Expires uint16
+ Linger uint16
+ X__flr_pad uint32
+}
+
+type sysIPv6Mreq struct {
+ Multiaddr [16]byte /* in6_addr */
+ Ifindex int32
+}
+
+type sysGroupReq struct {
+ Interface uint32
+ Pad_cgo_0 [4]byte
+ Group sysKernelSockaddrStorage
+}
+
+type sysGroupSourceReq struct {
+ Interface uint32
+ Pad_cgo_0 [4]byte
+ Group sysKernelSockaddrStorage
+ Source sysKernelSockaddrStorage
+}
+
+type sysICMPv6Filter struct {
+ Data [8]uint32
+}
diff --git a/go/src/golang.org/x/net/ipv6/zsys_linux_ppc64le.go b/go/src/golang.org/x/net/ipv6/zsys_linux_ppc64le.go
new file mode 100644
index 0000000..992b56e
--- /dev/null
+++ b/go/src/golang.org/x/net/ipv6/zsys_linux_ppc64le.go
@@ -0,0 +1,156 @@
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs defs_linux.go
+
+// +build linux,ppc64le
+
+package ipv6
+
+const (
+ sysIPV6_ADDRFORM = 0x1
+ sysIPV6_2292PKTINFO = 0x2
+ sysIPV6_2292HOPOPTS = 0x3
+ sysIPV6_2292DSTOPTS = 0x4
+ sysIPV6_2292RTHDR = 0x5
+ sysIPV6_2292PKTOPTIONS = 0x6
+ sysIPV6_CHECKSUM = 0x7
+ sysIPV6_2292HOPLIMIT = 0x8
+ sysIPV6_NEXTHOP = 0x9
+ sysIPV6_FLOWINFO = 0xb
+
+ sysIPV6_UNICAST_HOPS = 0x10
+ sysIPV6_MULTICAST_IF = 0x11
+ sysIPV6_MULTICAST_HOPS = 0x12
+ sysIPV6_MULTICAST_LOOP = 0x13
+ sysIPV6_ADD_MEMBERSHIP = 0x14
+ sysIPV6_DROP_MEMBERSHIP = 0x15
+ sysMCAST_JOIN_GROUP = 0x2a
+ sysMCAST_LEAVE_GROUP = 0x2d
+ sysMCAST_JOIN_SOURCE_GROUP = 0x2e
+ sysMCAST_LEAVE_SOURCE_GROUP = 0x2f
+ sysMCAST_BLOCK_SOURCE = 0x2b
+ sysMCAST_UNBLOCK_SOURCE = 0x2c
+ sysMCAST_MSFILTER = 0x30
+ sysIPV6_ROUTER_ALERT = 0x16
+ sysIPV6_MTU_DISCOVER = 0x17
+ sysIPV6_MTU = 0x18
+ sysIPV6_RECVERR = 0x19
+ sysIPV6_V6ONLY = 0x1a
+ sysIPV6_JOIN_ANYCAST = 0x1b
+ sysIPV6_LEAVE_ANYCAST = 0x1c
+
+ sysIPV6_FLOWLABEL_MGR = 0x20
+ sysIPV6_FLOWINFO_SEND = 0x21
+
+ sysIPV6_IPSEC_POLICY = 0x22
+ sysIPV6_XFRM_POLICY = 0x23
+
+ sysIPV6_RECVPKTINFO = 0x31
+ sysIPV6_PKTINFO = 0x32
+ sysIPV6_RECVHOPLIMIT = 0x33
+ sysIPV6_HOPLIMIT = 0x34
+ sysIPV6_RECVHOPOPTS = 0x35
+ sysIPV6_HOPOPTS = 0x36
+ sysIPV6_RTHDRDSTOPTS = 0x37
+ sysIPV6_RECVRTHDR = 0x38
+ sysIPV6_RTHDR = 0x39
+ sysIPV6_RECVDSTOPTS = 0x3a
+ sysIPV6_DSTOPTS = 0x3b
+ sysIPV6_RECVPATHMTU = 0x3c
+ sysIPV6_PATHMTU = 0x3d
+ sysIPV6_DONTFRAG = 0x3e
+
+ sysIPV6_RECVTCLASS = 0x42
+ sysIPV6_TCLASS = 0x43
+
+ sysIPV6_ADDR_PREFERENCES = 0x48
+
+ sysIPV6_PREFER_SRC_TMP = 0x1
+ sysIPV6_PREFER_SRC_PUBLIC = 0x2
+ sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100
+ sysIPV6_PREFER_SRC_COA = 0x4
+ sysIPV6_PREFER_SRC_HOME = 0x400
+ sysIPV6_PREFER_SRC_CGA = 0x8
+ sysIPV6_PREFER_SRC_NONCGA = 0x800
+
+ sysIPV6_MINHOPCOUNT = 0x49
+
+ sysIPV6_ORIGDSTADDR = 0x4a
+ sysIPV6_RECVORIGDSTADDR = 0x4a
+ sysIPV6_TRANSPARENT = 0x4b
+ sysIPV6_UNICAST_IF = 0x4c
+
+ sysICMPV6_FILTER = 0x1
+
+ sysICMPV6_FILTER_BLOCK = 0x1
+ sysICMPV6_FILTER_PASS = 0x2
+ sysICMPV6_FILTER_BLOCKOTHERS = 0x3
+ sysICMPV6_FILTER_PASSONLY = 0x4
+
+ sysSizeofKernelSockaddrStorage = 0x80
+ sysSizeofSockaddrInet6 = 0x1c
+ sysSizeofInet6Pktinfo = 0x14
+ sysSizeofIPv6Mtuinfo = 0x20
+ sysSizeofIPv6FlowlabelReq = 0x20
+
+ sysSizeofIPv6Mreq = 0x14
+ sysSizeofGroupReq = 0x88
+ sysSizeofGroupSourceReq = 0x108
+
+ sysSizeofICMPv6Filter = 0x20
+)
+
+type sysKernelSockaddrStorage struct {
+ Family uint16
+ X__data [126]int8
+}
+
+type sysSockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+type sysInet6Pktinfo struct {
+ Addr [16]byte /* in6_addr */
+ Ifindex int32
+}
+
+type sysIPv6Mtuinfo struct {
+ Addr sysSockaddrInet6
+ Mtu uint32
+}
+
+type sysIPv6FlowlabelReq struct {
+ Dst [16]byte /* in6_addr */
+ Label uint32
+ Action uint8
+ Share uint8
+ Flags uint16
+ Expires uint16
+ Linger uint16
+ X__flr_pad uint32
+}
+
+type sysIPv6Mreq struct {
+ Multiaddr [16]byte /* in6_addr */
+ Ifindex int32
+}
+
+type sysGroupReq struct {
+ Interface uint32
+ Pad_cgo_0 [4]byte
+ Group sysKernelSockaddrStorage
+}
+
+type sysGroupSourceReq struct {
+ Interface uint32
+ Pad_cgo_0 [4]byte
+ Group sysKernelSockaddrStorage
+ Source sysKernelSockaddrStorage
+}
+
+type sysICMPv6Filter struct {
+ Data [8]uint32
+}
diff --git a/go/src/golang.org/x/net/netutil/listen_test.go b/go/src/golang.org/x/net/netutil/listen_test.go
index ac87e0e..c0d5bc2 100644
--- a/go/src/golang.org/x/net/netutil/listen_test.go
+++ b/go/src/golang.org/x/net/netutil/listen_test.go
@@ -20,17 +20,20 @@
"sync/atomic"
"testing"
"time"
+
+ "golang.org/x/net/internal/nettest"
)
func TestLimitListener(t *testing.T) {
- const (
- max = 5
- num = 200
- )
+ const max = 5
+ attempts := (nettest.MaxOpenFiles() - max) / 2
+ if attempts > 256 { // maximum length of accept queue is 128 by default
+ attempts = 256
+ }
l, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
- t.Fatalf("Listen: %v", err)
+ t.Fatal(err)
}
defer l.Close()
l = LimitListener(l, max)
@@ -47,14 +50,14 @@
var wg sync.WaitGroup
var failed int32
- for i := 0; i < num; i++ {
+ for i := 0; i < attempts; i++ {
wg.Add(1)
go func() {
defer wg.Done()
c := http.Client{Timeout: 3 * time.Second}
r, err := c.Get("http://" + l.Addr().String())
if err != nil {
- t.Logf("Get: %v", err)
+ t.Log(err)
atomic.AddInt32(&failed, 1)
return
}
@@ -66,8 +69,8 @@
// We expect some Gets to fail as the kernel's accept queue is filled,
// but most should succeed.
- if failed >= num/2 {
- t.Errorf("too many Gets failed: %v", failed)
+ if int(failed) >= attempts/2 {
+ t.Errorf("%d requests failed within %d attempts", failed, attempts)
}
}
diff --git a/go/src/golang.org/x/net/publicsuffix/table.go b/go/src/golang.org/x/net/publicsuffix/table.go
index 9f9a797..0e31569 100644
--- a/go/src/golang.org/x/net/publicsuffix/table.go
+++ b/go/src/golang.org/x/net/publicsuffix/table.go
@@ -2,7 +2,7 @@
package publicsuffix
-const version = "publicsuffix.org's effective_tld_names.dat, hg revision f2c25ddbd1cf (2014-09-02)"
+const version = "publicsuffix.org's effective_tld_names.dat, hg revision 063babcbcbcc (2014-12-29)"
const (
nodesBitsChildren = 9
@@ -23,383 +23,400 @@
)
// numTLD is the number of top level domains.
-const numTLD = 819
+const numTLD = 1039
// Text is the combined text of all labels.
-const text = "bievatmpanamabifukagawatch-and-clockashiharabihorologyoutubeppub" +
- "olognagatorockartuzyukiinetargiitatebayashichinohelparachutingje" +
- "sdalipetskashiwarabikedavvenjargalsacehimejiiyamanobeeldengeluid" +
- "urhamburgjovikashiwazakiyosatokamachildrensgardenavigationavuotn" +
- "akatsugawabilbaogakievenassisibenikihokumakogengerdalaskanitteda" +
- "lvdalivornobirabillustrationavyatkananporoceanographics3-website" +
- "-ap-southeast-1bioceanographiquembroideryukuhashimogosenayorohta" +
- "waramotoineppulmemerckasukabeerbirdartdecoalondonetskasumigauraw" +
- "a-mazowszexchangetmyipirangausdaloppadovald-aostarostwodzislaweg" +
- "rowestfalenfshostre-totenkawabirkenesoddtangenoamishirasatodayur" +
- "ihonjoyoitakarazukamikoaniihamatamakawajimarylhurstockholmestran" +
- "dvrdnsdojogaszkolahppiacenzakopanewyorkshireggiocalabriabirthpla" +
- "cemergencyberlevagangaviikarugaulardalorenskoglassassinationalhe" +
- "ritagematsubarakawachinaganoharaogashimadachicagobodoesntexistan" +
- "bullensakerbjarkoyusuharabjerkreimmobilienvironmentalconservatio" +
- "nhs3-website-ap-southeast-2bjugniizabloombergbauernikkoebenhavni" +
- "kolaevenes3-website-eu-west-1bluenoharabmwfarsundyndns-blogdns3-" +
- "website-sa-east-1bnpparibaselburgliwicemrbomloabaths3-website-us" +
- "-east-1bondyndns-freemasonryokamikawanehonbetsuruokamakurazakira" +
- "bonninohelsinkitakyushuaiabostonakijinsekikogenovarabotanicalgar" +
- "deninomiyakonojosoyromurabotanicgardenirasakindianapolis-a-blogg" +
- "erbotanycargodolls3-website-us-gov-west-1boutiquebecarrierbozent" +
- "sujiiepilepsyzranzanishiawakurabrandywinevalleyusuisservebbs3-we" +
- "bsite-us-west-1brasiljan-mayenishiazaindianmarketinglobalatinabe" +
- "auxartsandcrafts3-website-us-west-2bremangerbresciabrindisicilia" +
- "bristolgamvikasuyameiwamashikeventsakuhokksundyndns-homeftpacces" +
- "sakuragawabritishcolumbialowiezachpomorskienishigomutashinaindus" +
- "triesteamlierneustargardyndns-ip6boneat-urlezajsk-uralsk12000bro" +
- "adcastleasinglesakurainfinitinfoggiabroke-itarnobrzegloboknowsit" +
- "allfinanz-2brokerbronnoysundyndns-mailosangelesakyotanabellevued" +
- "atinglogowhalingloppenzaokinawashirosatobamagnitkafjordyndns-off" +
- "ice-on-the-webcambridgeorgiabrumunddaloteneinsurepbodynathomebui" +
- "ltarumizusawabrunelblagdenesnaaseralingenkainanaejrietiendaburya" +
- "tiabrusselsalangenishiharabruxellesjamalborkdalottokigawabryansk" +
- "jervoyageometre-experts-comptablesalatrobellunordkappgmailouvrev" +
- "iewsaltdalowiczest-a-la-masionishiizunazukintelligenceverbankasz" +
- "ubyuulsangoslombardyndns-at-workinggroupowiatatarstanishikatakat" +
- "orinternationalfirearmsalvadordalikescandyndns-at-homednsalzburg" +
- "minakamichigangwonishikatsuraginuyamanouchikuhokuryugasakitcheni" +
- "shikawazukanazawabrynewhampshirecreationishimerabuyshousesamegaw" +
- "abuzenishinomiyashironostrodabuzzgorabvalle-daostavernishinoomot" +
- "egostrolekaneyamazoevje-og-hornnesamnangerbwhoswholdingsmolangev" +
- "agrarboretumbriabzhitomirkutsklepparaglidingmodellingmxjeonnamer" +
- "ikawauexhibitionishinoshimacivilisationcivilizationcivilwarmiami" +
- "buildingrongaclaimsantacruzhgorodoyuzhno-sakhalinskautokeinostro" +
- "wwlkparochesterclickazimierz-dolnyclinicasertaishinomakikugawacl" +
- "intonoshoesantafederationclothingrossetouchijiwadellogliastrader" +
- "cloudcontrolledogawarabikomaezakirunore-og-uvdalukowilliamhillur" +
- "oycloudfrontariodejaneiromskoguchikuzencntgorycollectioncolleger" +
- "sundcolognewportlligatewaycolonialwilliamsburgroundhandlingrozny" +
- "coloradoplateaudnedalncolumbusantiquesanukis-a-conservativefsnil" +
- "lfjordcommunitydalustercomobaracompanycompute-1computerhistoryof" +
- "science-fictioncondoshibuyachtsaotomelbourneconferenceconstructi" +
- "onconsuladoomdnsaliascolipicenord-aurdalutskazoconsultanthropolo" +
- "gyconsultingvolluxembourgrpartis-a-cpaderborncontemporaryartgall" +
- "eryazanconagawakuyachimatainaikawababia-goracleaningruecontracto" +
- "rskenconventureshinodesashibetsuikinkobayashijonawatelevisioncoo" +
- "kinguitarsapporocoolbia-tempio-olbiatempioolbialystokkecoopoczno" +
- "rfolkebibleborkazunocopenhagencyclopedicasinordre-landyndns-pics" +
- "amsungqhachijorpelandyndns-remotegildeskalmykiacorporationcorvet" +
- "temasekchristiansburgujolstercosenzagannakadomari-elasticbeansta" +
- "lkgulencostumedio-campidano-mediocampidanomediocounciluxurycqldc" +
- "ranbrookuwanamizuhobby-sitexasiacreditcardsaratovalleaostavropol" +
- "icecremonashorokanaiecrewindmilluzerncrimeacrotonewspapercrsarde" +
- "gnaklodzkodairacruisesardiniacuisinellaakesvuemielecceculturalce" +
- "ntertainmentjeldsundcuneocupcakecxn--1qqw23afhskhabarovskhakassi" +
- "afhvalerfieldfiguerestaurantjomelhusgardenfilateliafilmemorialvi" +
- "valled-aostakazakis-a-democratoyonakagyokutomskharkivguernseyfin" +
- "ancefineartsarlfinlandfinnoyfirebaseappspotenzamamicrolightinguo" +
- "vdageaidnulvikharkovhachinohekinannestadfirenzefirmdalebtimnetzg" +
- "radfishingorgets-itoyonezawafitjarchitecturecipesaro-urbino-pesa" +
- "rourbinopesaromaizurubtsovskjaknoluoktaikicks-assedicateringebui" +
- "ldersanjournalismolenskatowicexpressexyzgorzeleccoldwarszawafitn" +
- "essettlementoyonofjalerdalflekkefjordflesbergushikamifuranoshiro" +
- "oflightsarpsborganicheltenham-radio-operaunitelekommunikationish" +
- "itosashimizunaminamibosohuissier-justiceflogisticsarufutsunomiya" +
- "wakasaikaitakoelnfloraflorencefloridafloristanohataiwanairforceo" +
- "flororoskoleclerchelyabinskodjeffersonidyndns-webhoparisor-froni" +
- "shiwakinvestmentsannanissanfranciscotlandyndns-wikirkenesannohem" +
- "bygdsforbundyndns-workshoparliamentateyamaflsmidthruhereggioemil" +
- "iaromagnakanotoddenflynnhubalsanagochihayaakasakawagoe164fndfoll" +
- "dalfoooshikamaishikshacknetoyookanzakiyokawarafor-better-thanawa" +
- "for-ourfor-somedizinhistorischesasayamafor-thedmarkhangelskherso" +
- "nforgotdnsaseboltoyosatonsbergwangjuifminamiechizenforli-cesena-" +
- "forlicesenaforlikes-piedmontblancashirehabikinokawairguardforsal" +
- "egnicagliaridagawawithgoogleapisa-hockeynutoyotaris-a-designerfo" +
- "rsandasuolocalhistoryfortmissoulan-udefenseljejuegoshikiminokamo" +
- "enaircraftoyotomiyazakis-a-doctorfortworthachiojiyaitakamatsukaw" +
- "aforuminamifuranofosnesaskatchewanfotoyotsukaidofredrikstadaokag" +
- "akiryuoharussiafreiburgxn--30rr7yfreightoyourafribourgzipartners" +
- "assaris-a-financialadvisor-aurdalfriuli-v-giuliafriuli-ve-giulia" +
- "friuli-vegiuliafriuli-venezia-giuliafriuli-veneziagiuliafriuli-v" +
- "giuliafriuliv-giuliafriulive-giuliafriulivegiuliafriulivenezia-g" +
- "iuliafriuliveneziagiuliafriulivgiuliafrlfrogansatxn--3bst00minam" +
- "iiserniafrognfrolandfrom-akuneuesquarezzoologyeongnamegawakkanai" +
- "betsubamericanartanddesignieznodawaraholtalendoftheinternetcmwlo" +
- "clawekhmelnitskiyamashikokuchuofrom-alfrom-arqponfrom-azjetztoys" +
- "tre-slidrettozawafrom-cahcesuoloansnasaarlandfrom-coffeedbackhme" +
- "lnytskyivalledaostaketomisatomaritimekeepingfrom-ctozsdefrom-dch" +
- "erkasydneyuzawafrom-degreefrom-flakstadtrainingfrom-gafrom-higas" +
- "hiagatsumagoizumizakisarazure-mobileikangerfrom-iafrom-idfrom-il" +
- "from-in-the-bandaiwafunefrom-ksaudafrom-kyotobetsumidatlanticher" +
- "nigovernmentatsunostrowiecartierfrom-lajollanbibaidarfrom-maniwa" +
- "kuratextileirfjordfrom-mdfrom-meeresauheradfrom-midoris-a-geekhv" +
- "allee-aosteroyfrom-mnfrom-modalenfrom-msavannahgafrom-mtranarash" +
- "inofrom-nchernihivanovosibirskydivingretajimakanegasakitahiroshi" +
- "marburgrimstadyroyrviknakaniikawatanagurafrom-ndfrom-nefrom-nhkl" +
- "abusheyfrom-njevnakerfrom-nminamiizukamisunagawafrom-nvalleeaost" +
- "eigenfrom-nyfrom-ohdafrom-oketohmannosegawafrom-orfrom-pacifiche" +
- "rnivtsicilyngenissedalucaniafrom-praxis-a-anarchistoireisenfrom-" +
- "ris-a-greenfrom-schlesischesaves-the-whalessandria-trani-barlett" +
- "a-andriatranibarlettaandriafrom-sdfrom-tnfrom-txn--3ds443gfrom-u" +
- "tazunjargafrom-vacationsavonamsosnowiechernovtsykkylvenetoeiheij" +
- "is-a-candidatefrom-vtranbyfrom-wafrom-wielunnerfrom-wvanylvenice" +
- "from-wyfrosinonefrostalowa-wolawafroyahikobearalvahkikuchikumaga" +
- "yagawallonieruchomoscienceandindustrynfsteinkjerusalembetsukuis-" +
- "a-gurunsaitokuyamafujiiderafujikawaguchikonefujiminohkurafujinom" +
- "iyadafujiokayamansionsayokkaichirurgiens-dentisteschmidtre-gauld" +
- "alfujisatoshonairlinedre-eikerotikadenagaivuotnagaokakyotambadaj" +
- "ozorakkestadultrani-andria-barletta-trani-andriafujisawafujishir" +
- "oishidakabiratoridell-ogliastrakhanamigawafujiyoshidafukayabeard" +
- "udinkakamigaharafukuchiyamadafukudominichiryukyuragifudaigokasej" +
- "nynysabaerobaticartoonarteducationalchikugojomediafukuis-a-hard-" +
- "workerfukumitsukefukuokazakishiwadafukuroishigakisofukushimantov" +
- "adsoftwarendalenvikingatlantajimidsundfukusakisosakitagatajiris-" +
- "a-hunterfukuyamagatakahamanxn--3e0b707efunabashiriuchinadafunaga" +
- "takaharunzenfunahashikamiamakusatsumasendaisenfundaciofuoiskujit" +
- "awarafuosskoczoworse-thandafurniturepair-traffic-controlleyfurub" +
- "iraquarelleangaviikagaminogiessenglandfurudonostiafurukawaharafu" +
- "sogndalfussafetysneschoenbrunnfutabayamaguchinomigawafutboldlygo" +
- "ingnowhere-for-moregontrailroadfuttsurugashimaoris-a-knightrania" +
- "ndriabarlettatraniandriafvgfylkesbiblackfridayfyresdalhaldenhals" +
- "agamiharahammarfeastafricamerakershuscountryestateshinanomachipp" +
- "ubetsubetsugaruhrhamurakamigoris-a-liberalhandsondriohanggliding" +
- "hannanmokuizumodernhannoverhallanschweizminamiminowahanyuzenhapm" +
- "irumarnardalhappoutsystemscloudappasadenakhodkamogawahareidsberg" +
- "enharstadharvestcelebrationhasamarahasaminami-alpsiellakasamatsu" +
- "doosandnessjoenhasudahasvikmsciencecentersciencehistoryhatogayai" +
- "zuwakamatsubushikusakadogawahatoyamazakitakatakanezawahatsukaich" +
- "iharahattfjelldalhawaiijimarugame-hostinghayashimamotobungotakad" +
- "avvesiidazaifuchukotkakegawatchandclockokonoehazuminobusenetwork" +
- "angerhemnescientistordalhemsedalherokusslattuminamiogunionheroyh" +
- "igashichichibunkyonanaoshimabariaketrzynhigashihiroshimanehigash" +
- "iizumozakitamifunehigashikagawahigashikagurasoedahigashikawakita" +
- "aikitamotosumitakaginowaniigatakahashimamakitagawahigashikurumee" +
- "tranoyhigashimatsushimarumorimachidahigashimatsuyamakitaakitadai" +
- "toigawahigashimurayamalatvuopmihamadahigashinarusells-for-lesscr" +
- "apper-sitehigashinehigashiomihachimanagementransportrapaniiminam" +
- "iawajikis-a-libertarianhigashiosakasayamamotorcyclescrappinghiga" +
- "shishirakawamatakaokamikitayamatotakadahigashisumiyoshikawaminam" +
- "iaikitanakagusukumoduminamisanrikubetsupportravellinohigashitsun" +
- "otteroyhigashiurausukitashiobarahigashiyamatokoriyamanakakogawah" +
- "igashiyodogawahigashiyoshinogaris-a-linux-useranishiaritabashiib" +
- "ahccavuotnagasakikonaioirasebastopologyeonggiehtavuoatnagahamaro" +
- "ygardenebakkeshibechambagriculturennebudapest-a-la-maisondre-lan" +
- "dhiraizumisatohnoshoohirakatashinagawahiranairtraffichitachinaka" +
- "gawahirarahiratsukagawahirayakagehistorichouseserveftpassenger-a" +
- "ssociationhitachiomiyaginozawaonsenhitachiotagotembaixadahitoyos" +
- "himiharuslivinghistoryhitradinghjartdalhjelmelandholeckobierzyce" +
- "holidayhomelinuxn--45brj9chitosetogakushimotoganewmexicodynalias" +
- "coli-picenonoichikawamisatobishimallorcabbottattoolsztynsettlers" +
- "antabarbarahomessinashikitaurayasudahomeunixn--45q11chocolatelem" +
- "arkatsushikabeiarnrtaxis-a-catererhonefosservegame-servercellill" +
- "ehammerfest-le-patrondheiminamitanehongotsukitahatakahatakaishim" +
- "ofusagaeroclubindallaspeziahonjyoichiropractichofunatorissadonna" +
- "harimangonohejis-a-celticsfanisshingugehornindalhorsells-for-ust" +
- "karasjokolobrzegyptianpachigasakidservicesettsurgeonshalloffamel" +
- "dalhortendofinternetrdhoteledatabaseballangenhoyangerhoylandetro" +
- "itreehumanitiesevastopolevangerhurdalhurumajis-a-llamarylandhyog" +
- "oris-a-musicianhyugawaraiwatsukiyonoiwchoseikakudamatsuejgorajpn" +
- "jurkouhokutamakis-a-republicancerresearchaeologicaliforniakounos" +
- "unndalkouyamassa-carrara-massacarraramassabuskerudinewjerseykouz" +
- "ushimasudakozagawakozakis-a-rockstarachowicekrageroticampobassoc" +
- "iateshimojis-a-socialistmeincheonkrakowroclawtchoshibukawakrasno" +
- "yarskommunekredkristiansandefjordkristiansundkrodsheradkrokstade" +
- "lval-daostavalleykryminamiuonumatsumotofukekumatorinokumejimatsu" +
- "maebashikaois-a-soxfankumenanyokaichibaikaliszczytnord-odalkunis" +
- "akis-a-studentalkunitachiaraisaijoshkar-olapyatigorskomonokunito" +
- "migusukukis-a-teacherkassykunneppugliakunstsammlungkunstunddesig" +
- "nkureportrentino-sud-tirolkurgankurobelaudiokurogiminamiashigara" +
- "kuroisognekuromatsunaishobaraumagazinemurorankoshigayabukibichuo" +
- "zuwajimakurotakikawasakis-a-techietis-a-nursells-itrentino-a-adi" +
- "gekurskomorotsukamishihoronobeokaminokawanishiaizubangekushiroga" +
- "wakustanais-a-therapistoiakusupplieshimokawakutchannelkutnokuzba" +
- "ssnoasaikis-an-accountantsewritesthisblogspotrentino-aadigekuzum" +
- "akis-an-actorkvafjordkvalsundkvamsterdamberkeleykvanangenkvinesd" +
- "alkvinnheradkviteseidskogkvitsoykwtfastlykyowariasahikawamisconf" +
- "usedmishimatsusakahogithubusercontentrentino-sudtirolmissileirvi" +
- "konantanangermisugitokonamegatakasugais-an-artistjohnmitakeharam" +
- "itourisminamiyamashirokawanabelgorodeomitoyoakemiuramiyazurewebs" +
- "iteshikagamiishikarikaturindalmiyotamanomjondalenmonmouthadanota" +
- "ireschokoladenmonticellombardiamondshimokitayamamontrealestateof" +
- "delawaremarkermonza-brianzamonza-e-della-brianzamonzabrianzamonz" +
- "aebrianzamonzaedellabrianzamordoviajessheiminanomoriyamatsushige" +
- "moriyoshiokamitondabayashiogamagoriziamormoneymoroyamatsuuramort" +
- "gagemoscowwwmoseushistorymosjoenmoskeneshimonitayanagis-an-engin" +
- "eeringerikemosreggio-calabriamosshimonosekikawamosvikongsbergmov" +
- "aomoriguchiharambulancertificationmuenstermugivestbyklebesbyglan" +
- "dmuikamitsuemukochikushinonsennanbusinessebydgoszczecincinnative" +
- "americanantiqueshimosuwalkis-an-entertainermulhousembokumamotoya" +
- "materamolisellsyourhomeipharmacienshimotsukemunakatanemuncieszyn" +
- "muosattemurmanskongsvingermurotorcraftrentino-sued-tirolmusashim" +
- "urayamatsuzakis-bytomakomaibaramusashinoharamuseetrentino-suedti" +
- "rolmuseumverenigingmutsuzawamyphotoshibajddarchaeologymytis-a-bo" +
- "okkeepermincommbankomvuxn--4gbriminingphiladelphiaareadmyblogsit" +
- "ephilatelyphoenixn--54b7fta0cchoyodontexisteingeekatsuyamashikiy" +
- "osemitephotographysiopictetrentinoa-adigepictureshimotsumapiemon" +
- "tepilotshinichinanpinkoninjavaksdalpippupiszpharmacymruovattorne" +
- "yagawalesundpittsburghofauskedsmokorsetagayaseljordpizzapkonskow" +
- "olaquilarvikomitamamuraplanetariuminnesotaketakashimatsunoplanta" +
- "tionplantshinjournalistjordalshalsenplazaplchristmasakimobetsuwa" +
- "nouchikuseihichisobetsuldaluccapebretonamiastarnbergripescaravan" +
- "taaplomzaporizhzhiaplumbingpmnpodhaleitungsenpodlasiedlcepodzone" +
- "pohlpokerpolkowicepoltavaldaostathelleksvikonyvelodingenpomorzes" +
- "zowpordenoneporsangerporsanguidelmenhorstalbanswedenporsgrunnanp" +
- "osts-and-telecommunicationshinjukumanopoznanprdpreservationpresi" +
- "dioprincipeprivneprochowiceproductionshinkamigotoyohashimotokyot" +
- "angoprofcastresistancexposeducatorahimeshimageandsoundandvisioni" +
- "shiokoppegardyndns-serverbaniaprojectrentinoaadigepropertieshins" +
- "hinotsurgerypropertyumenpruszkowprzeworskogptzwpvtrentinoalto-ad" +
- "igepzqsldshisuifuelverumisakis-an-actresshakotankomaganeshitaram" +
- "ashizukuishimodateshizuokanonjis-into-animegurovnoshowashriramur" +
- "skiptveterinairebungoonomichinomiyakembuchikujobshinshirosienams" +
- "skoganeis-into-carsharis-a-painteractivegarsheis-a-nascarfansigd" +
- "alsimbirskooris-a-patsfansimple-urlsirdalslgbtrentinoaltoadigesl" +
- "upskopervikommunalforbundsnzsolarssonsolognesolundsolutionshinto" +
- "kushimasomasomnapleshintomikasaharasoosopotrentinos-tirolsor-oda" +
- "lsor-varangersorfoldsorreisahayakawakamiichikaiseiyokoshibahikar" +
- "iwanumatakayamasortlandsorumisasaguris-an-anarchistoricalsociety" +
- "svardosouthcarolinazawasouthwesterniikappulawysowaspace-to-renta" +
- "lshinyoshitomiokaniepcespbaltimore-og-romsdalimomasvuotnakatombe" +
- "tsupplyomitanobanazawaustraliagroks-theaternopilawakeisenbahnatu" +
- "ralhistorymuseumcenterhcloudcontrolappalace-burg12spiegelspjelka" +
- "vikoryolasitespydebergsrvareseminestorenburgstorfjordstpetersbur" +
- "gstuff-4-salewismillerstuttgartrentinostirolsurreysusakis-into-c" +
- "artoonsharpaviasusonosuzakanrasuzukanumazurysuzukis-into-gameshe" +
- "llaskoyabenord-fronsvalbardurbannefrankfurtrentinosud-tirolsveio" +
- "svelvikosaigawasvizzeraswidnicapetownswiebodzinderoyswinoujscien" +
- "ceandhistorysxn--55qw42gtromsokndaltrusteetrysilkosakaerodromede" +
- "cinemailtuis-lostfoldtulavagisketurystykarasjohkaminoyamatsuris-" +
- "not-certifiedtuscanytuvalle-aostationtverdalvaroyvbambleasecn-no" +
- "rth-1vchromedicalucernevdonskoseis-a-personaltrainervegaskvollve" +
- "nneslaskerveronaritakurashikis-savedverranversailleshiojirishiri" +
- "fujiedaversicherungvestfoldvestneshioyanagawavestre-slidreamhost" +
- "ershirahamatonbetsurgutsiracusaintlouis-a-bruinsfanvestre-totenr" +
- "is-slickomakizunokunimimatakasakiyosumypetsherbrookegawavestvago" +
- "yvevelstadvibo-valentiavibovalentiavideovillasmatartcenterprises" +
- "akijoburgvinnicapitalvinnytsiavirginiavirtualvirtuelviterbolzano" +
- "rdlandvladikavkazanvladimirvladivostokaizukarasuyamasfjordenvlog" +
- "voldavolgogradvolkenkunderseaportrentinosued-tirolvologdanskoshi" +
- "mizumakis-a-photographermesaverdevolyngdalvoronezhytomyrvossevan" +
- "genvotevotingvotottoris-uberleetrentino-altoadigevrnxn--80adxhks" +
- "hirakoenigxn--80ao21axn--80asehdbarcelonagasukesennumalvikarpacz" +
- "eladz-1xn--80aswgxn--80augustowadaejeonbukoshunantokashikis-a-pl" +
- "ayerxn--90a3academykolaivano-frankivskiervaapsteiermarkostromaha" +
- "borovigorlicexn--90azhadselfipartscholarshipschoolkuszlgxn--9dbh" +
- "blg6dielddanuorrittogitsuliguriaxn--9et52uxn--andy-iraxn--aropor" +
- "t-byanaizuxn--asky-iraxn--aurskog-hland-jnbargainstitutechnology" +
- "onabarudmurtiaustrheimatunduhrennesoyokosukareliaquariumbone12xn" +
- "--avery-yuasakakinokis-very-badaddjamisongdalenxn--b-5gaxn--b4w6" +
- "05ferdxn--bdddj-mrabdxn--bearalvhki-y4axn--berlevg-jxaxn--bhcavu" +
- "otna-s4axn--bhccavuotna-k7axn--bidr-5nachikatsuuraxn--bievt-0qax" +
- "n--bjarky-fyandexeterxn--bjddar-ptakkofuefukihabmerxn--blt-elabo" +
- "rxn--bmlo-grajewolominamatakinouexn--bod-2naroyxn--brnny-wuaccid" +
- "ent-investigationjukudoyamaceratabuseat-band-campaniamallamadrid" +
- "vagsoyerimo-i-ranaamesjevuemielnoboribetsuitachikawakayamagadanc" +
- "echirealtorlandxn--brnnysund-m8accident-preventionlinebraskaunbi" +
- "eidsvollxn--brum-voagatrentinosuedtirolxn--btsfjord-9zaxn--c1avg" +
- "xn--cg4bkis-very-evillagentshimoichinosekigaharaxn--ciqpnxn--clc" +
- "hc0ea0b2g2a9gcdxn--comunicaes-v6a2oxn--correios-e-telecomunicaes" +
- "-ghc29axn--czr694barreauctionatuurwetenschappenaumburgjerdrumelo" +
- "yalistor-elvdalindaskimitsubatamiasakuchinotsuchiurakawalbrzycha" +
- "mpionshiphopenair-surveillancebinorilskaruizawauthordalandroidir" +
- "ectorybnikahokutogoppdalimanowarudastronomyokohamamatsudaeguball" +
- "ooningdyniaeroportalaheadjudygarlandgcadaques3-ap-northeast-1xn-" +
- "-czrs0trentoshimaxn--czru2dxn--czrw28barrel-of-knowledgemologica" +
- "ltanissettaipeigersundnipropetrovskarumaintenancebizenakanojohan" +
- "amakinoharautomotivelandiscountysfjordiscoveryggeelvinckariyalta" +
- "ijibestadivtasvuodnakamagayahabaghdadivttasvuotnakamurataitogura" +
- "ukraanghkemerovodkagoshimalopolskanlandiethnologyekaterinburggfa" +
- "rmerseinexusdecorativearts3-ap-southeast-1xn--d1acj3barrell-of-k" +
- "nowledgeologyonagoyautoscanadagestangeiseiroumuencheniwaizumiots" +
- "ukumiyamazonaws3-eu-west-1xn--d1atrevisokanoyakutiaxn--davvenjrg" +
- "a-y4axn--dnna-grandrapidshiranukanmakiwienxn--drbak-wuaxn--dyry-" +
- "iraxn--efvy88haebaruminamimakis-a-landscaperugiaxn--eveni-0qa01g" +
- "axn--finny-yuaxn--fiq228c5hshiraois-certifiedunetnedalxn--fiq64b" +
- "ashkiriavocatanzaroweddingjemnes3-fips-us-gov-west-1xn--fiqs8shi" +
- "raokannamilanoxn--fiqz9shiratakahagis-foundationxn--fjord-lraxn-" +
- "-fjq720axn--fl-ziaxn--flor-jraxn--flw351exn--fpcrj9c3dxn--frde-g" +
- "ranexn--frna-woarais-very-gooddaxn--frya-hraxn--fzc2c9e2chtraeum" +
- "tgeradeatnurembergroks-thisayamanashichikashukujukuriyamarcheapa" +
- "rmaxn--gecrj9chungbukaufenrwildlifedjelenia-goraxn--ggaviika-8ya" +
- "47hagaxn--gildeskl-g0axn--givuotna-8yaotsurnadalxn--gjvik-wuaxn-" +
- "-gls-elacaixaxn--gmq050is-very-nicexn--gmqw5axn--h-2familyxn--h1" +
- "aeghagebostadxn--h2brj9chungnamdalseidfjordxn--hbmer-xqaxn--hces" +
- "uolo-7ya35basilicataniavouest-mon-blogueurovisionaturbruksgymnat" +
- "urhistorisches3-sa-east-1xn--hery-iraxn--hgebostad-g3axn--hmmrfe" +
- "asta-s4achurcharterxn--hnefoss-q1axn--hobl-iraxn--holtlen-hxaxn-" +
- "-hpmir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-54axn--i1b6b1a6" +
- "a2exn--indery-fyaroslavlaanderenxn--io0a7is-very-sweetrentino-s-" +
- "tirollagrigentomologyeongbukomatsushimasoyxn--j1amhaibarakitakam" +
- "iizumisanoksneschulelxn--j6w193gxn--jlster-byasakaiminatoyakokam" +
- "isatohokkaidovre-eikerxn--jrpeland-54axn--karmy-yuaxn--kfjord-iu" +
- "axn--klbu-woaxn--koluokta-7ya57hakatanotogawaxn--kprw13dxn--kpry" +
- "57dxn--kput3is-with-thebandoxn--krager-gyasugisleofmanchesterxn-" +
- "-kranghke-b0axn--krdsherad-m8axn--krehamn-dxaxn--krjohka-hwab49j" +
- "ewelryxn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-fyasuokaratexn--kvn" +
- "angen-k0axn--l-1fareastcoastaldefencexn--l1accentureklamusementr" +
- "oandinosaurexn--laheadju-7yatominamidaitomandalxn--langevg-jxaxn" +
- "--lcvr32dxn--ldingen-q1axn--leagaviika-52batochigifts3-us-gov-we" +
- "st-1xn--lesund-huaxn--lgbbat1ad8jewishartrentino-stirolxn--lgrd-" +
- "poachuvashiaxn--lhppi-xqaxn--linds-pratoyokawaxn--lns-qlavangenx" +
- "n--loabt-0qaxn--lrdal-sraxn--lrenskog-54axn--lt-liacimperiaxn--l" +
- "ten-granvindafjordxn--lury-iraxn--mely-iraxn--merker-kuaxn--mgb2" +
- "ddeshishikuis-gonexn--mgb9awbfermochizukirovogradoyxn--mgba3a4f1" +
- "6axn--mgba3a4franarusawaxn--mgbaam7a8hakodatexn--mgbab2bdxn--mgb" +
- "ayh7gpaduaxn--mgbbh1a71exn--mgbc0a9azcgxn--mgberp4a5d4a87gxn--mg" +
- "berp4a5d4arxn--mgbqly7c0a67fbcngxn--mgbqly7cvafranziskanerimarin" +
- "exn--mgbtf8flandershisojaworznoxn--mgbx4cd0abogadoes-itrogstadxn" +
- "--mjndalen-64axn--mk0axisshikiwakunigamihoboleslawiechonangoogle" +
- "codespotaruis-a-chefashioniyodogawaxn--mlatvuopmi-s4axn--mli-tla" +
- "zioxn--mlselv-iuaxn--moreke-juaxn--mori-qsakatakatsukissmarterth" +
- "anyouthachirogatakamoriokamchatkameokameyamashinatsukigatakanabe" +
- "dzin-addrammenuernbergxn--mosjen-eyatsukaratsuginamikatagamilita" +
- "ryxn--mot-tlaxn--mre-og-romsdal-qqbatsfjordnpalanakayamatta-varj" +
- "jatarantomobeneventochiokinoshimamurogawashingtondcarbonia-igles" +
- "ias-carboniaiglesiascarboniaxaurskog-holandebudejjuedischesapeak" +
- "ebayerndigitalillesandiegovtambovalle-d-aostavangerxn--msy-ula0h" +
- "akonexn--mtta-vrjjat-k7aferraraxn--muost-0qaxn--mxtq1misawaxn--n" +
- "gbc5azdxn--nmesjevuemie-tcbalestrandabergamoarekepnorddalxn--nnx" +
- "388axn--nodessakegawaxn--nqv7fs00emaxn--nry-yla5gxn--nttery-byae" +
- "seoullensvangxn--nvuotna-hwaxn--o1achattanooganordreisa-geekosug" +
- "exn--o3cw4hakubanxn--od0algxn--od0aq3bauhaustevollindesnes3-us-w" +
- "est-1xn--ogbpf8flatangerxn--oppegrd-ixaxn--ostery-fyatsushiroxn-" +
- "-osyro-wuaxn--p1acfailxn--p1aiwatarailwayxn--pgbs0dhakuis-a-lawy" +
- "erxn--porsgu-sta26fetsundxn--q9jyb4circuscultureggio-emilia-roma" +
- "gnakaiwamizawaxn--qcka1pmciticasadelamonedaxn--rady-iraxn--rdal-" +
- "poaxn--rde-ulaxn--rdy-0nabariwatexn--rennesy-v1axn--rhkkervju-01" +
- "afgunmaritimodenakasatsunairportland-4-salernogatagajobojis-a-cu" +
- "bicle-slaveroykenxn--rholt-mragoworldxn--rhqv96gxn--risa-5naruto" +
- "korozawaxn--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rmskog-byawa" +
- "raxn--rros-gratangenxn--rskog-uuaxn--rst-0narviikanagawaxn--rsta" +
- "-francaiseharaxn--ryken-vuaxn--ryrvik-byawatahamaxn--s-1farmequi" +
- "pmentromsaitamatsukuris-leetrentino-alto-adigexn--s9brj9citychyl" +
- "lestadxn--sandnessjen-ogbizhevskotohiradomainsurancexn--sandy-yu" +
- "axn--seral-lraxn--ses554gxn--sgne-gratis-a-bulls-fanxn--skierv-u" +
- "tazasnesoddenmarketplacexn--skjervy-v1axn--skjk-soaxn--sknit-yqa" +
- "xn--sknland-fxaxn--slat-5narvikotouraxn--slt-elabourxn--smla-hra" +
- "xn--smna-grazxn--snase-nraxn--sndre-land-0cbnlxn--snes-poaxn--sn" +
- "sa-roaxn--sr-aurdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-vara" +
- "nger-ggberlincolnaustdalinkasaokamiokamiminers3-us-west-2xn--srf" +
- "old-byaxn--srreisa-q1axn--srum-graxn--stfold-9xaxn--stjrdal-s1ax" +
- "n--stjrdalshalsen-sqbernuorokunohealthcareersvpaleobihirosakikam" +
- "ijimaxn--stre-toten-zcbeskidyn-o-saurlandes3-website-ap-northeas" +
- "t-1xn--tjme-hraxn--tn0agrinetbankzxn--tnsberg-q1axn--trany-yuaxn" +
- "--trgstad-r1axn--trna-woaxn--troms-zuaxn--tysvr-vraxn--uc0atvede" +
- "strandxn--uc0ay4axn--unjrga-rtamayufuettertdasnetzxn--unup4yxn--" +
- "vads-jraxn--vard-jraxn--vegrshei-c0axn--vermgensberater-ctbetain" +
- "aboxfordealstahaugesundpalermombetsurfarmsteadrangedalinzaibigaw" +
- "axn--vermgensberatung-pwbhartipscbgjerstadotsuruginankokubunjibm" +
- "drobakrehamnaval-d-aosta-valleyonaguniversityoriikashibatakasago" +
- "uvicenzaporizhzheguriheyakumoldepotherokuappalmspringsakerxn--ve" +
- "stvgy-ixa6oxn--vg-yiabruzzoologicalabamagasakishimabarahkkeravju" +
- "daicaarborteaches-yogasawaragusartsaritsynxn--vgan-qoaxn--vgsy-q" +
- "oa0jfkomforbalsfjordlugolekaluganskarlsoyokotebetsukubahcavuotna" +
- "garavennagareyamalselvendrellimitednepropetrovskarmoyokozebinagi" +
- "sodegauraustinnaturalsciencesnaturelles3-ap-southeast-2xn--vhquv" +
- "arggatrentinosudtirolxn--vler-qoaxn--vre-eiker-k8axn--vrggt-xqad" +
- "xn--vry-yla5gxn--wcvs22dxn--wgbh1civilaviationxn--wgbl6axn--xhq5" +
- "21bielawassamukawatarikuzentakatairaxn--xkc2al3hye2axn--xkc2dl3a" +
- "5ee0hakusandoyxn--yer-znasushiobaraxn--yfro4i67oxn--ygarden-p1ax" +
- "n--ygbi2ammxn--55qx5dxn--ystre-slidre-ujbiella-speziaxn--zf0ao64" +
- "axn--zf0avxn--6frz82gxn--zfr164bieszczadygeyachiyodatsunanjoetsu" +
- "rutaharaxxxn--6qq986b3xlxz"
+const text = "bielawashingtondclkasukabeerhcloudcontrolappalacebinorilskasumig" +
+ "aurawa-mazowszexhibitionavigationavuotnakatsugawabiellaakesvuemi" +
+ "eleccebizenakaniikawatanagurabieszczadygeyachiyodatsunanjoetsuru" +
+ "taharabievatmpalanakayamatsuurabifukagawassamukawataricohdavvenj" +
+ "argamvikasuyameiwamarylhurstjordalshalsenavyatkanazawabihorology" +
+ "ukuhashimoichinosekigaharabikedavvesiidazaifuchukotkakegawatch-a" +
+ "nd-clockaszubyurihonjournalistjohnayoroceanographiquehimejinfini" +
+ "tires3-website-us-east-1bilbaogakijoburgliwicembroideryusuharabi" +
+ "llustrationfshostre-totenkawabiomutashinainfoggiabirdartdecoalop" +
+ "padovald-aostathelleitungsenhs3-website-us-gov-west-1birkenesodd" +
+ "tangenovarabirthplacemergencyberlevagangaviikarugausdalorenskogl" +
+ "obalatinabeauxartsandcrafts3-website-us-west-1bjarkoyusuisserveb" +
+ "bs3-website-us-west-2bjerkreimperiabjugniizabloombergbauernikkoe" +
+ "benhavnikolaeventsakuhokkaidonnakamagayahabaghdadyndns-homeftpac" +
+ "cessakuragawabluenoharabmsakurainsureiseninohelsinkitakatakamori" +
+ "okamchatkameokameyamashinatsukigatakanabedzin-addrammenuernbergl" +
+ "obodoes-itatarstaninomiyakonojosoyrovnoslombardyndns-at-homednsa" +
+ "kyotanabellevuedatinglogowegrowestfalenirasakinuyamanouchikuhoku" +
+ "ryugasakitaurayasudabmwfarmequipmentateyamabnpparibaselburgloppe" +
+ "nzaokinawashirosatobishimagnitkafjordyndns-ip6bolzanordreisa-gee" +
+ "katowicemrbomloabathsbcargodoesntexistanbullensakerbondyndns-mai" +
+ "losangelesalangenishiazainvestmentsalatrobellunordre-landyndns-o" +
+ "ffice-on-the-webcambridgestonewportlligatewayuulminamiechizenish" +
+ "igovtatsunostrodabonnishiharabostonakijinsekikogenishiizunazukis" +
+ "-a-candidatepilepsykkylvenetogoldpointelligencepsongdalenishikat" +
+ "akatoris-a-catererbotanicalgardenishikatsuragivingmailoteneis-a-" +
+ "celticsfanishikawazukaneyamaxunjargabotanicgardenishimerabotanyc" +
+ "arrierboutiquebecartierbozentsujiieu-central-1bradescorporationi" +
+ "shinomiyashironostrolekaniepceverbankatsushikabeiarnrtattoolszty" +
+ "nsettlersalondonetskatsuyamasfjordenishinoomotegostrowiecartoona" +
+ "rteducationalchikugojomediabrandywinevalleyuzawabrasiljan-mayeni" +
+ "shinoshimatsuzakis-a-chefarmerseinewyorkshireggiocalabriabremang" +
+ "erbresciabrindisiciliabristolgaulardalottevje-og-hornnesaltdalot" +
+ "tokigawabritishcolumbialowiezachpomorskienishiokoppegardyndns-pi" +
+ "csalvadordalikes-piedmontblancashirepair-traffic-controlleyuzhno" +
+ "-sakhalinskaufenishitosashimizunaminamiawajikis-a-conservativefs" +
+ "nillfjordyndns-remotegildeskalmykiabroadcastleasinglesalzburgmin" +
+ "akamichigangwonishiwakis-a-cpaderbornissandvikcoromantovaldaosta" +
+ "tionissedalouvrepbodyndns-at-workinggroupowiataxindianmarketingm" +
+ "odalenisshinguernseybroke-itgorybrokerbronnoysundyndns-serverban" +
+ "iabrumunddalowiczest-a-la-masioniyodogawabrunelblagdenesnaaseral" +
+ "ingenkainanaejrietiendaburyatiabrusselsamegawabruxellesjaguarchi" +
+ "tecturecipesaro-urbino-pesarourbinopesaromaintenancexpressexyzgo" +
+ "rabryanskleppaleostrowwlkpalermomasvuotnakatombetsupportjeldsund" +
+ "yndns-webhoppdalucaniabryneuesamnangerbuyshousesamsungmxboxeroxj" +
+ "aworznobuzenrwhalingqldyndns-wikirovogradoybuzzgorzeleccollectio" +
+ "nbwhoswhokksundyndns-workshopalmspringsakerbzhitomirkutskodjeffe" +
+ "rsoncloudcontrolledekaluganskypescaravantaacloudfrontariocntoyoo" +
+ "karasjohkaminokawanishiaizubangecollegersundcolognewhampshireggi" +
+ "o-calabriacolonialwilliamsburgrossetouchijiwadell-ogliastrakhana" +
+ "migawacoloradoplateaudnedalncolumbusantiquesantabarbaracommunity" +
+ "chyllestadcomobaracompanynysabaerobaticasertaipeigersundyroyrvik" +
+ "nakamurataitogitsuliernewspapercompute-1computerhistoryofscience" +
+ "-fictioncondoshichikashukujitawaraconferenceconstructionconsulad" +
+ "oharuovattorneyagawalesundconsultanthropologyconsultingvolluroyc" +
+ "ontemporaryartgalleryazanconagawakkanaibetsubamericanartanddesig" +
+ "nieznodawarahkkeravjudygarlandcontractorskenconventureshinodesas" +
+ "hibetsuikinkobayashikaoizumizakiracookingroundhandlingroznycoolb" +
+ "ia-tempio-olbiatempioolbialystokkecoopocznorfolkebiblebtimnetzgr" +
+ "adcopenhagencyclopedicasinore-og-uvdaluccapetowncorsicadaquesant" +
+ "acruziparachutingrparaglidingruecorvettemasekhabarovskhakassiaco" +
+ "senzagannakadomari-elasticbeanstalkharkivalleaostavropolicecostu" +
+ "medio-campidano-mediocampidanomediocouncilustercoursesantafedera" +
+ "tioncqponcranbrookuwanalyticsanukis-a-designercreditcardcremonas" +
+ "horokanaiecrewindmillutskharkovalled-aostakazakis-a-doctoraycric" +
+ "ketrzyncrimearthruhereggio-emilia-romagnagatorokunohealthcareers" +
+ "aotomelbournecrotonewjerseycrowncrsapodhaleluxembourguidelloglia" +
+ "stradercruisesapporocuisinellahppiacenzakopaneraircraftoyosatosh" +
+ "imaculturalcentertainmentoyotaris-a-financialadvisor-aurdaluxury" +
+ "cuneocupcakecxn--0trq7p7nnferraraferreroticahcesuoloanswedenfets" +
+ "undfguitarsaratovalledaostaketomisatomaritimekeepingujolsterfhva" +
+ "lerfiguerestaurantoyotomiyazakis-a-geekhersonfilateliafilminamif" +
+ "uranofinaluzernfinancefineartsardegnaklodzkodairafinlandfinnoyfi" +
+ "rebaseappspotenzamamicrolightingulenfirenzefirestonexusdecorativ" +
+ "eartsardiniafirmdaleclercateringebuildersvpanamafishingolfarmste" +
+ "adfitjarfitnessettlementoyotsukaidovre-eikerfjalerdalvivano-fran" +
+ "kivskhmelnitskiyamashikeflesbergunmarcheapartmentsarlflightsarps" +
+ "borganicfdflogisticsarufutsunomiyawakasaikaitakoelnfloraflorence" +
+ "floridafloristanohataiwanairguardfloromskoguchikuzenflowersasaya" +
+ "maflsmidthachinohekinannestadflynnhubalsanagochihayaakasakawagoe" +
+ "164fndfolldalfootballooninguovdageaidnulsanfranciscotlandfor-bet" +
+ "ter-thanawafor-ourfor-somedizinhistorischesaseboknowsitallfor-th" +
+ "edmarketsaskatchewanggouvicenzaforexeterforgotdnsassaris-a-green" +
+ "forli-cesena-forlicesenaforliguriaforsalegalsaceforsandasuolocal" +
+ "historyfortmissoulan-udefensejnyfortworthachiojiyaitakaharulvikh" +
+ "melnytskyivallee-aosteroyforuminamiiserniafosnesatxn--1ctwolomin" +
+ "amatakinouefotherokuapparisor-fronfredrikstadtoyourafreiburgushi" +
+ "kamifuranoshiroomurafreightoystre-slidrettozawafribourgwangjuifm" +
+ "inamiizukamitondabayashiogamagoriziafriuli-v-giuliafriuli-ve-giu" +
+ "liafriuli-vegiuliafriuli-venezia-giuliafriuli-veneziagiuliafriul" +
+ "i-vgiuliafriuliv-giuliafriulive-giuliafriulivegiuliafriulivenezi" +
+ "a-giuliafriuliveneziagiuliafriulivgiuliafrlfrogansaudafrognfrola" +
+ "ndfrom-akunemurorankoshigayabukidsauheradfrom-alfrom-arfrom-azjc" +
+ "bnlfrom-camerakershuscountryestateshinanomachippubetsubetsugaruh" +
+ "rfrom-coldwarszawafrom-ctozsdevenesavannahgafrom-dchernigovernme" +
+ "ntjomelhusgardenfrom-degreefrom-flandersaves-the-whalessandria-t" +
+ "rani-barletta-andriatranibarlettaandriafrom-gafrom-higashiagatsu" +
+ "magois-a-gurunsaitokuyamafrom-iafrom-idfrom-ilfrom-in-the-bandai" +
+ "wafunefrom-ksavonamsosnowiechernihivguccircleborkautokeinofrom-k" +
+ "yotobetsumidatlantichernivtsicilyngenfrom-langevagrarboretumbria" +
+ "from-mangonohejis-a-hard-workerfrom-mdfrom-meeresaxofrom-microso" +
+ "ftwaremarkerfrom-mnfrom-mochizukiryuohkurafrom-msayokkaichirurgi" +
+ "ens-dentistesbschoenbrunnfrom-mtnfrom-nchernovtsydneyfrom-ndfrom" +
+ "-nefrom-nhkhvalleeaosteigenfrom-njeonnamerikawauefrom-nminamimak" +
+ "is-a-hunterfrom-nvanylvenicefrom-nyfrom-ohtawaramotoineppugliafr" +
+ "om-oketogurafrom-orfrom-pacifichiryukyuragifudaigokaseekazimierz" +
+ "-dolnyfrom-praxis-a-anarchistoireggioemiliaromagnakanojohanamaki" +
+ "noharafrom-rittohmaniwakuratenris-a-knightrainingxn--1lqs03nfrom" +
+ "-schmidtre-gauldalfrom-sdfrom-tnfrom-txn--1lqs71dfrom-utazunzenf" +
+ "rom-vadsogndalfrom-vtranapleschokoladenfrom-wafrom-wielunnerfrom" +
+ "-wvaomoriguchiharamcoacharterfrom-wyfrosinonefrostalowa-wolawafr" +
+ "oyahikobearalvahkikuchikumagayagawallonieruchomoscienceandindust" +
+ "rynfstcgrouparliamentranbyfujiiderafujikawaguchikonefujiminohach" +
+ "irogatakahashimamakitahatakahatakaishimogosenfujinomiyadafujioka" +
+ "yamannosegawafujisatoshonairlinebraskaunbieidsvollfujisawafujish" +
+ "iroishidakabiratorideliverybnikahokutogakushimotoganewmexicoffee" +
+ "dbacklabusinessebydgoszczecincinnativeamericanantiquescholarship" +
+ "schoolkuszlgzminamiminowafujiyoshidafukayabeardudinkakamigaharav" +
+ "ennagasakikugawalterfukuchiyamadafukudominichitachinakagawawildl" +
+ "ifestylefukuis-a-landscaperugiafukumitsukefukuokazakisarazure-mo" +
+ "bilegnicampobassociateschulevangerfukuroishigakishiwadafukusakis" +
+ "ofukushimansionschwarzparmafukuyamagatajimidoris-a-lawyerfunabas" +
+ "hiriuchinadafunagatajiris-a-liberalfunahashikamiamakusatsumasend" +
+ "aisennangooglecodespotrani-andria-barletta-trani-andriafundaciof" +
+ "uoiskujukuriyamanxn--1qqw23afuosskoczowindowschweizwithgoogleapi" +
+ "sa-hockeynutraniandriabarlettatraniandriafurniturehabikinokawair" +
+ "portland-4-salernogatagajobsciencecentersciencehistoryfurubiraqu" +
+ "arelleangaviikagaminogiessenvironmentalconservationfurudonostiaf" +
+ "urukawaharafusognefussafetysfjordfutabayamaguchinomigawafutboldl" +
+ "ygoingnowhere-for-moregontrailroadfuttsurugashimaoris-a-libertar" +
+ "ianfvgfylkesbiblackfridayfyresdalhannanmokuizumodenakanotoddenha" +
+ "nnovhadanotairescientistor-elvdalhanyuzenhapmirumarnardalhappous" +
+ "livinghistoryhareidsbergenharstadharvestcelebrationhasamarahasam" +
+ "inami-alpsienakasatsunairteledatabaseballangenoamishirasatobamag" +
+ "azinedre-eikerhasudahasvikmscrapper-sitehatogayaizuwakamatsubush" +
+ "ikusakadogawahatoyamazakitakamiizumisanofieldhatsukaichiharahatt" +
+ "fjelldalhawaiijimarriottranoyhayashimamotobunkyonanaoshimabariak" +
+ "ehazuminobuseljordhemnescrappinghemsedalherokusslattuminamisanri" +
+ "kubetsupplyheroyhigashichichibusheyhigashihiroshimanehigashiizum" +
+ "ozakitakyushuaiahigashikagawahigashikagurasoedahigashikawakitaai" +
+ "kitamidsundhigashikurumeetnedalhigashimatsushimarugame-hostinghi" +
+ "gashimatsuyamakitaakitadaitoigawahigashimurayamalatvuopmifunehig" +
+ "ashinarusells-for-lesserveftparservegame-servercellikescandynath" +
+ "omebuiltransportrapaniiminamiashigarahigashinehigashiomihachiman" +
+ "agementravellinohigashiosakasayamamotorcycleservicesettsurgeonsh" +
+ "alloffameldalhigashishirakawamatakanezawahigashisumiyoshikawamin" +
+ "amiaikitamotosumitakaginowanidhigashitsunotteroyhigashiurausukit" +
+ "anakagusukumodernhigashiyamatokoriyamanakakogawahigashiyodogawah" +
+ "igashiyoshinogaris-a-musicianhiraizumisatohnoshoooshikamaishimod" +
+ "atextileirvikokonoehirakatashinagawahiranairtraffichitosetoeihei" +
+ "jis-a-cubicle-slaveroykenhirarahiratsukagawahirayakagehistoricho" +
+ "usesevastopolewismillerhitachiomiyaginozawaonsenhitachiotagopart" +
+ "is-a-nascarfanhitoyoshimihamadahitradinghjartdalhjelmelandholeck" +
+ "obierzyceholidayhomelinuxn--2m4a15ehomessinashikitashiobarahomeu" +
+ "nixn--30rr7yhondahonefossewloclawekolobrzegyptianpachigasakieven" +
+ "assisibenikihokumakogeniwaizumiotsukumiyamazonawshakotankomagane" +
+ "hongorgets-itrdhonjyoichiropractichloehornindalhorsells-for-ustk" +
+ "arasuyamazoehortendofinternetreehotelefonicapebretonamiastarostw" +
+ "odzislawritesthisblogspotrentino-a-adigehotmailhoyangerhoylandet" +
+ "roitrentino-aadigehurdalhurumajis-a-nursells-itrentino-alto-adig" +
+ "ehyogoris-a-painteractivegarsheis-a-patsfanhyugawaraiwchocolatel" +
+ "evisionjewishartrentino-sudtiroljfkomitamamurajgorajlchofunatori" +
+ "kuzentakatairajoyoitakaokamikitayamatotakadajpnjprshimonosekikaw" +
+ "ajurkozagawakozakis-a-teacherkassymantechnologykragerotikamisuna" +
+ "gawakrakowroclawtcmwtfarsundkrasnoyarskomonokredstonekristiansan" +
+ "defjordkristiansundkrodsheradkrokstadelval-daostavalleykryminami" +
+ "tanekumatorinokumejimasudakumenanyokaichibaikaliszczytnordkappgk" +
+ "unisakis-a-techietis-a-photographermesaverdelmenhorstalbansharis" +
+ "-a-personaltrainerkunitachiaraisaijoshkar-olanshimotsumakunitomi" +
+ "gusukukis-a-therapistoiakunneppulawykunstsammlungkunstunddesignk" +
+ "ureitrentino-sued-tirolkurgankurobelaudiokurogimimatakasagotemba" +
+ "ixadakuroisohuissier-justicekuromatsunaishobaraholtalengerdalask" +
+ "anittedalvdalkurotakikawasakis-an-accountantsharpartnershellasko" +
+ "yabenorddalkurskomorotsukamishihoronobeokamiminershimosuwalkis-a" +
+ "-socialistmeincheonkushirogawakustanais-an-actorkusupplieshinich" +
+ "inankutchannelkutnokuzbassnoasagamiharakuzumakis-an-actressherbr" +
+ "ookegawakvafjordkvalsundkvamlidlugolekadenagahamaroygardenglandk" +
+ "vanangenkvinesdalkvinnheradkviteseidskogkvitsoykwwwkyowariasahik" +
+ "awamishimatsumaebashikshacknetrentino-suedtirolmissileksvikongsb" +
+ "ergmisugitokonamegatakashimatsumotofukemitakeharamitourismolensk" +
+ "ongsvingermitoyoakemiuramiyazurewebsiteshikagamiishikarikaturind" +
+ "almiyotamanomjondalenmonmouthagamonticellombardiamondshinjukuman" +
+ "omontrealestateofdelawarendalenvikingatlantakasugais-an-entertai" +
+ "nermonza-brianzaporizhzhiamonza-e-della-brianzaramonzabrianzamon" +
+ "zaebrianzamonzaedellabrianzamordoviajessheiminamiuonumateramolis" +
+ "ellsyourhomeipartshinjournalismolapyatigorskomvuxn--32vp30haebar" +
+ "uminamiogunionmoriyamatsunomoriyoshiokamitsuemormoneymoroyamatsu" +
+ "sakahogithubusercontentrentinoa-adigemortgagemoscowmoseushistory" +
+ "mosjoenmoskeneshinkamigotoyohashimotokyotangomosshinshinotsurger" +
+ "ymosvikoninjamisonmovistargardmtpchonanbuildingretajimakanegasak" +
+ "itagawamuenstermugivestbyklebesbyglandmuikamogawamukochikushinon" +
+ "senergymulhousembokumamotoyamassa-carrara-massacarraramassabuske" +
+ "rudineustarnbergmunakatanemuncieszynmuosattemurmanskonskowolaqui" +
+ "larvikommunalforbundmurotorcraftrentinoaadigemusashimurayamatsus" +
+ "higemusashinoharamuseetrentinoalto-adigemuseumverenigingmutsuzaw" +
+ "amyphotoshibajddarchaeologyeongnamegawakuyachimatainaikawababia-" +
+ "goracleaningmytis-a-bookkeeperminamiyamashirokawanabelgorodeopas" +
+ "senger-associationpaviapharmacienshinshiropharmacymrussiaphilade" +
+ "lphiaareadmyblogsitephilatelyphilipshintokushimaphoenixn--3bst00" +
+ "minanophotographysiopiagetmyipartysvardoomdnsaliascolipicenord-f" +
+ "ronpictetrentinoaltoadigepictureshintomikasaharapiemontepilotshi" +
+ "nyoshitomiokanmakitchenpippuwajimapiszpittsburghofashionpizzapko" +
+ "nyvelodingenplanetariumincommbankonantanangerplantationplantshio" +
+ "jirishirifujiedaplazaplchoseikakudamatsueplomzaporizhzhelpasaden" +
+ "akhodkanagawaplumbingopmnpodlasiellakasamatsudoosandnessjoenpodz" +
+ "onepohlpokerpolkowicepoltavalle-aostatoilpomorzeszowpordenonepor" +
+ "nporsangerporsangugeporsgrunnanposts-and-telecommunicationshioya" +
+ "nagawapoznanprdpreservationpresidioprincipeprivneprochowiceprodu" +
+ "ctionshirahamatonbetsurgutsiracusaikis-bytomakomaibaraprofastlyp" +
+ "rojectrentinos-tirolpromombetsurfauskedsmokorsetagayaseljejuegos" +
+ "hikiminokamoenairforcertificationpropertieshirakoenigpropertyume" +
+ "npruszkowprzeworskogptzpvtrentinostirolpzqsldsolundsolutionshira" +
+ "ois-certifieducatorahimeshimageandsoundandvisionsomasomnamsskoga" +
+ "neis-into-carshimokawasoosopotrentinosudtirolsor-odalsor-varange" +
+ "rsorfoldsorreisahayakawakamiichikaiseiyokoshibahikariwanumatakay" +
+ "amasortlandsorumisakis-an-artisteinkjerusalembetsukuis-a-republi" +
+ "cancerresearchaeologicaliforniasouthcarolinazawasouthwesterniika" +
+ "ppusowaspace-to-rentalshiraokanonjis-foundationspbaltimore-og-ro" +
+ "msdalimoldepotaruibmdnepropetrovskaruizawaustrheimatunduhrenneso" +
+ "yokote-burggfamilyokoze12spiegelspjelkavikoryolasitespreadbettin" +
+ "gspydebergsrvareseminestordalstorenburgstorfjordstpetersburgstud" +
+ "yndns-blogdnshiratakahagis-gonestuff-4-salezajskosaigawastuttgar" +
+ "trentinosued-tirolsurreysusakis-into-cartoonshimokitayamasusonos" +
+ "uzakanumazurysuzukanzakiwakunigamihoboleslawiechoshibukawasuzuki" +
+ "s-into-gameshimonitayanagis-a-rockstarachowicesvalbardurbannefra" +
+ "nkfurtrentinosuedtirolsveiosvelvikosakaerodromedecinemailsvizzer" +
+ "aswidnicapitalswiebodzindianapolis-a-bloggerswinoujscienceandhis" +
+ "toryswisshikis-leetrentino-altoadigesxn--3ds443gtuis-savedtulava" +
+ "gisketurystykarasjoksneshishikuis-into-animegurovigorlicetuscany" +
+ "tushumanitieshisokanoyakutiatuvalle-d-aostavangertverdalvaroyvba" +
+ "mbleasecn-north-1vchoyodobashibuyachtsangovdonskoshimizumakiyose" +
+ "mitevegaskvollvenneslaskerveronarashinoverranversailleshisuifuel" +
+ "veruminnesotaketakasakis-an-anarchistoricalsocietysneshimojis-a-" +
+ "playerversicherungvestfoldvestneshitaramavestre-slidreamhostersh" +
+ "izukuishimofusaintlouis-a-bruinsfanshiranukannamiharuvestre-tote" +
+ "nnishiawakuravestvagoyvevelstadvibo-valentiavibovalentiavideovil" +
+ "lasmatartcenterprisesakikonaioirasebastopologyeonggiehtavuoatnad" +
+ "exchangeiseiroumuenchendoftheinternetcimmobilienebakkeshibechamb" +
+ "agriculturennebudapest-a-la-maisondriodejaneirochestervinnicarbo" +
+ "nia-iglesias-carboniaiglesiascarboniavinnytsiavirginiavirtualvir" +
+ "tuelvistaprinternationalfirearmshizuokanraviterboltroandinosaure" +
+ "portrentottoris-lostfoldvladikavkazanvladimirvladivostokaizukara" +
+ "tevlogvoldavolgogradvolkenkunderseaportrogstadvologdanskoshunant" +
+ "okashikiyosumypetshimotsukevolyngdalvoronezhytomyrvossevangenvot" +
+ "evotingvotoyakokamisatohobby-sitevrnxn--4it168dxn--4it797kostrom" +
+ "ahabororoskoleirfjordxn--4pvxshowaxn--54b7fta0cchtraeumtgeradeat" +
+ "nurembergrimstadxn--55qw42gxn--55qx5dxn--5js045dxn--5rtp49chungb" +
+ "ukazoxn--5rtq34kosugexn--6btw5axn--6frz82gxn--6orx2rxn--6qq986b3" +
+ "xlxn--7t0a264chungnamdalseidfjordxn--80adxhkshriramsterdamberkel" +
+ "eyxn--80ao21axn--80asehdbarcelonagareyamalopolskanlandnipropetro" +
+ "vskarumaifareastcoastaldefencebetsukubahcavuotnagaivuotnagaokaky" +
+ "otambadajozorakkestadultargiheyakumoduminamidaitomandalindaskimi" +
+ "tsubatamiasakuchinotsuchiurakawalbrzychattanooganord-odalindesne" +
+ "s3-eu-west-1xn--80aswgxn--80augustowadaejeonbukotohiradomainsura" +
+ "ncexn--8ltr62kotouraxn--8pvr4uxn--90a3academykolaivanovosibirski" +
+ "ervaapsteiermarkhangelskiptveterinairealtorlandxn--90azhagebosta" +
+ "dxn--9dbhblg6diethnologyxn--9et52uxn--andy-iraxn--aroport-byanai" +
+ "zuxn--asky-iraxn--aurskog-hland-jnbarclaycards3-fips-us-gov-west" +
+ "-1xn--avery-yuasakakinokis-slickomakiyokawaraxn--b-5gaxn--b4w605" +
+ "ferdxn--bdddj-mrabdxn--bearalvhki-y4axn--berlevg-jxaxn--bhcavuot" +
+ "na-s4axn--bhccavuotna-k7axn--bidr-5nachikatsuuraxn--bievt-0qaxn-" +
+ "-bjarky-fyandexposedogawarabikomaezakirunortonsbergxn--bjddar-pt" +
+ "akkofuefukihabmerxn--blt-elaborxn--bmlo-grajeworldxn--bod-2narit" +
+ "akurashikis-uberleetrentino-s-tirollagrigentomologyeongbukomatsu" +
+ "shimashikiyosatokamachildrensgardenxn--brnny-wuaccident-investig" +
+ "ationjukudoyamaceratabuseat-band-campaniamallamadridvagsoyerimo-" +
+ "i-ranaamesjevuemielnoboribetsuitachikawakayamagadancechirebungoo" +
+ "nomichinomiyakeisenbahnxn--brnnysund-m8accident-preventionlineat" +
+ "-urlxn--brum-voagatromsaitamatsukuris-not-certifiedunetworkanger" +
+ "xn--btsfjord-9zaxn--c1avgxn--c3s14misasaguris-an-engineeringerik" +
+ "exn--cg4bkis-very-badaddjamalborkdalxn--ciqpnxn--clchc0ea0b2g2a9" +
+ "gcdxn--comunicaes-v6a2oxn--correios-e-telecomunicaes-ghc29axn--c" +
+ "zr694barclays3-sa-east-1xn--czrs0tromsolarssonxn--czru2dxn--czrw" +
+ "28bargainstitutelekommunikationaturalhistorymuseumcentereviews3-" +
+ "us-gov-west-1xn--d1acj3barreauctionaturalsciencesnaturelles3-us-" +
+ "west-1xn--d1atrusteexn--d5qv7z876churcheltenham-radio-operaunite" +
+ "lemarkazunoxn--davvenjrga-y4axn--djrs72d6uyxn--djty4kouhokutamak" +
+ "izunokunimilitaryxn--dnna-grandrapidsigdalxn--drbak-wuaxn--dyry-" +
+ "iraxn--eckvdtc9dxn--efvn9simbirskooris-a-soxfanxn--efvy88haibara" +
+ "kitahiroshimaritimodellingxn--ehqz56nxn--elqq16hakatanotogawaxn-" +
+ "-eveni-0qa01gaxn--f6qx53axn--finny-yuaxn--fiq228c5hsimple-urlxn-" +
+ "-fiq64barrel-of-knowledgeometre-experts-comptablest-mon-blogueur" +
+ "ovisionaturbruksgymnaturhistorisches3-us-west-2xn--fiqs8sirdalxn" +
+ "--fiqz9slgbtrentinosud-tirolxn--fjord-lraxn--fjq720axn--fl-ziaxn" +
+ "--flor-jraxn--flw351exn--fpcrj9c3dxn--frde-granexn--frna-woarais" +
+ "-very-evillagexn--frya-hraxn--fzc2c9e2chuvashiaxn--gecrj9circusc" +
+ "ulturecreationxn--ggaviika-8ya47hakodatexasiaxn--gildeskl-g0axn-" +
+ "-givuotna-8yaotsurnadalxn--gjvik-wuaxn--gls-elacaixaxn--gmq050is" +
+ "-very-gooddaxn--gmqw5axn--h-2failxn--h1aeghakonexn--h2brj9citica" +
+ "sadelamonedaxn--hbmer-xqaxn--hcesuolo-7ya35barrell-of-knowledgeo" +
+ "rgiauthordalandroidiscountydalillesandiegotsukisosakitagatakaham" +
+ "arburgjemnes3-ap-southeast-1xn--hery-iraxn--hgebostad-g3axn--hmm" +
+ "rfeasta-s4acityeatsanjotoyonezawaxn--hnefoss-q1axn--hobl-iraxn--" +
+ "holtlen-hxaxn--hpmir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-5" +
+ "4axn--i1b6b1a6a2exn--imr513nxn--indery-fyaroslavlaanderenxn--io0" +
+ "a7is-very-nicexn--j1amhakubanxn--j6w193gxn--jlster-byasakaiminat" +
+ "oyokawaxn--jrpeland-54axn--k7yn95exn--karmy-yuaxn--kbrq7oxn--kcr" +
+ "x77d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dxn--kltx9" +
+ "axn--klty5xn--3e0b707exn--koluokta-7ya57hakuis-a-linux-useranish" +
+ "iaritabashijonawatexn--kprw13dxn--kpry57dxn--kput3is-very-sweetr" +
+ "entino-stirolxn--krager-gyasugis-with-thebandontexisteingeekomfo" +
+ "rbalsfjordivttasvuotnakaiwamizawaustraliaisondre-landebudejjuedi" +
+ "schesapeakebayerndirectoryggeelvinckarpaczeladz-2xn--kranghke-b0" +
+ "axn--krdsherad-m8axn--krehamn-dxaxn--krjohka-hwab49jetztrentino-" +
+ "sud-tirolxn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-fyasuokaratsugin" +
+ "amikatagamilanoxn--kvnangen-k0axn--l-1fairwindslupskopervikommun" +
+ "exn--l1accentureklamurskjaknoluoktaikicks-assedicivilaviationxn-" +
+ "-laheadju-7yatominamibosojavaksdalxn--langevg-jxaxn--lcvr32dxn--" +
+ "ldingen-q1axn--leagaviika-52bashkiriautomotivelandiscoveryokamik" +
+ "awanehonbetsuruokamakurazakirkenes3-ap-southeast-2xn--lesund-hua" +
+ "xn--lgbbat1ad8jevnakerxn--lgrd-poacivilisationxn--lhppi-xqaxn--l" +
+ "inds-pratoyonakagyokutomskounosunndalxn--lns-qlavangenxn--loabt-" +
+ "0qaxn--lrdal-sraxn--lrenskog-54axn--lt-liacivilizationxn--lten-g" +
+ "ranvindafjordxn--lury-iraxn--mely-iraxn--merker-kuaxn--mgb2ddesn" +
+ "zxn--mgb9awbfcastresistancexn--mgba3a3ejtrysilkoseis-a-studental" +
+ "xn--mgba3a4f16axn--mgba3a4franamizuholdingsmileikangerxn--mgbaam" +
+ "7a8hakusandoyxn--mgbab2bdxn--mgbayh7gpaduaxn--mgbb9fbpobanazawax" +
+ "n--mgbbh1a71exn--mgbc0a9azcgxn--mgberp4a5d4a87gxn--mgberp4a5d4ar" +
+ "xn--mgbqly7c0a67fbcivilwarmiamibungotakadaxn--mgbqly7cvafranzisk" +
+ "anerimarinexn--mgbt3dhdxn--mgbtf8flatangerxn--mgbx4cd0abogadocsc" +
+ "bgxn--mjndalen-64axn--mk0axisleofmanchesterxn--mkru45issmarterth" +
+ "anyouthadselfipirangaxn--mlatvuopmi-s4axn--mli-tlazioxn--mlselv-" +
+ "iuaxn--moreke-juaxn--mori-qsakatakatsukiwatarailwayxn--mosjen-ey" +
+ "atsukareliaxn--mot-tlaxn--mre-og-romsdal-qqbasilicataniautoscana" +
+ "dagestangeologyomitanobihirosakikamijimatta-varjjatarantomobenev" +
+ "entochiokinoshimalselvendrellimanowarudastronomyokohamamatsudaeg" +
+ "ubs3-ap-northeast-1xn--msy-ula0haldenxn--mtta-vrjjat-k7aflakstad" +
+ "aokagakibichuozuerichampionshiphopenair-surveillanceoxn--muost-0" +
+ "qaxn--mxtq1misawaxn--ngbc5azdxn--ngbe9e0axn--nit225kouyamashikok" +
+ "uchuoxn--nmesjevuemie-tcbalestrandabergamoarekepnordlandxn--nnx3" +
+ "88axn--nodessakegawaxn--nqv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn" +
+ "--ntsq17gxn--nttery-byaeseoullensvangxn--nvuotna-hwaxn--nyqy26ax" +
+ "n--o1achelyabinskydivingxn--o3cw4halsagaeroclubindallaspeziaxn--" +
+ "od0algxn--od0aq3batochigifts3-website-ap-northeast-1xn--ogbpf8fl" +
+ "ekkefjordxn--oppegrd-ixaxn--ostery-fyatsushiroxn--osyro-wuaxn--p" +
+ "1acfagentsolognexn--p1aiwatexn--pgbs0dhammarfeastafricanonoichik" +
+ "awamisatodayxn--porsgu-sta26fedjelenia-goraxn--pssu33lxn--q9jyb4" +
+ "claimsannanxn--qcka1pmclickchristiansburgripexn--qqqt11misconfus" +
+ "edxn--rady-iraxn--rdal-poaxn--rde-ulaxn--rdy-0nabariwatsukiyonow" +
+ "ruzhgorodoyxn--rennesy-v1axn--rhkkervju-01afermobilyxn--rholt-mr" +
+ "agoworse-thandaxn--rhqv96gxn--rht27zxn--rht3dxn--rht61exn--risa-" +
+ "5naroyxn--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rmskog-byawara" +
+ "xn--rny31hamurakamigoris-a-llamarumorimachidaxn--rros-gratangenx" +
+ "n--rskog-uuaxn--rst-0narusawaxn--rsta-francaiseharaxn--ryken-vua" +
+ "xn--ryrvik-byawatahamaxn--s-1faithandsoniigatakamatsukawaxn--s9b" +
+ "rj9clinicodynaliascoli-picenord-aurdalukowilliamhillupinkddieldd" +
+ "anuorrissadollsannohembygdsforbundxn--sandnessjen-ogbizhevskouzu" +
+ "shimasoyxn--sandy-yuaxn--seral-lraxn--ses554gxn--sgne-gratis-a-b" +
+ "ulls-fanxn--skierv-utazasnesoddenmarketplacexn--skjervy-v1axn--s" +
+ "kjk-soaxn--sknit-yqaxn--sknland-fxaxn--slat-5narutokorozawaxn--s" +
+ "lt-elabourxn--smla-hraxn--smna-grazxn--snase-nraxn--sndre-land-0" +
+ "cbatsfjordnpagespeedmobilizerobiravocatanzaroweddingjerdrumemori" +
+ "alimitedivtasvuodnaharimamurogawaukraanghkemerovodkagoshimaizuru" +
+ "btsovskjervoyagemologicallfinanz-1xn--snes-poaxn--snsa-roaxn--sr" +
+ "-aurdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-varanger-ggbauha" +
+ "ustevollinkasaokaminoyamatsuriinetarnobrzegjerstadotsuruginankok" +
+ "ubunjiitatebayashiibahccavuotnagaraumallorcabbottarumizusawavoue" +
+ "squarezzoologyonabarudmurtiaurskog-holandroverhalla-speziamuseme" +
+ "ntambovalle-daostavernarvikarlsoyekaterinburgdyniaeroportalahead" +
+ "judaicaarborteaches-yogasawaracing12000xn--srfold-byaxn--srreisa" +
+ "-q1axn--srum-graxn--stfold-9xaxn--stjrdal-s1axn--stjrdalshalsen-" +
+ "sqbbcngjesdalinzaiiyamanobeeldengeluidownloadrangedalipetskashib" +
+ "atakarazukamiokamikoaniihamatamakawajimarylandrobakrehamnatuurwe" +
+ "tenschappenaumburgjovikashiharaxaustinnasushiobaraquariumeloyali" +
+ "stockholmestrandigitalillehammerfest-le-patrondheimemerckarmoyok" +
+ "osukariyaltaijibigawagroks-theaternopilawakembuchikujobojibestad" +
+ "gcagliaridagawatchandclock-uralsk12xn--stre-toten-zcbbvacationsn" +
+ "asaarlandurhamburglassassinationalheritagematsubarakawachinagano" +
+ "haraogashimadachicagoboats3-website-ap-southeast-1xn--tjme-hraxn" +
+ "--tn0agrinetbankzxn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trgs" +
+ "tad-r1axn--trna-woaxn--troms-zuaxn--tysvr-vraxn--uc0atvedestrand" +
+ "xn--uc0ay4axn--uist22hangglidingxn--uisz3gxn--unjrga-rtamayufuet" +
+ "tertdasnetzxn--unup4yxn--uuwu58axn--vads-jraxn--vard-jraxn--vegr" +
+ "shei-c0axn--vermgensberater-ctbeppubolognagasukesennumalvikashiw" +
+ "araxn--vermgensberatung-pwberlincolnaustdalivornoceanographics3-" +
+ "website-ap-southeast-2xn--vestvgy-ixa6oxn--vg-yiabruzzoologicala" +
+ "bamagasakishimabaragusartsaritsynxn--vgan-qoaxn--vgsy-qoa0jewelr" +
+ "yxn--vgu402clintonoshoesanokfhskgroks-thisayamanashichinoheguris" +
+ "-a-democratoyonoxn--vhquvarggatrevisokndalxn--vler-qoaxn--vre-ei" +
+ "ker-k8axn--vrggt-xqadxn--vry-yla5gxn--vuq861bernuorockartuzyonag" +
+ "oyaxn--wcvs22dxn--wgbh1clothingrongaxn--wgbl6axn--xhq521beskidyn" +
+ "-o-saurlandes3-website-eu-west-1xn--xkc2al3hye2axn--xkc2dl3a5ee0" +
+ "hangoutsystemscloudapparocherkasyzranzanxn--yer-znarviikananporo" +
+ "xn--yfro4i67oxn--ygarden-p1axn--ygbi2ammxn--45brj9christmasakimo" +
+ "betsuwanouchikuseihichisobetsuldalucernexn--ystre-slidre-ujbetai" +
+ "naboxfordealstahaugesundvrdnsdojogaszkolajollanbibaidarqhachijor" +
+ "pelandyndns-freemasonryonaguniversityoriikashiwazakiwienaval-d-a" +
+ "osta-valleyoutubentleyukindustriesteambulancebinagisodegauraxn--" +
+ "zbx025dxn--zf0ao64axn--zf0avxn--45q11chromedicaltanissettaishino" +
+ "makinderoyxn--zfr164bhartipschlesisches3-website-sa-east-1xxxn--" +
+ "4gbriminingxz"
// 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
@@ -418,6843 +435,7112 @@
// [15 bits] text index
// [ 6 bits] text length
var nodes = [...]uint32{
- 0x002a09c6, // n0x0000 c0x0000 (---------------) + I abbott
- 0x0033eac7, // n0x0001 c0x0000 (---------------) + I abogado
- 0x01a01d82, // n0x0002 c0x0006 (n0x0333-n0x0339) + I ac
- 0x002fe307, // n0x0003 c0x0000 (---------------) + I academy
- 0x00333ac9, // n0x0004 c0x0000 (---------------) + I accenture
- 0x002b83cb, // n0x0005 c0x0000 (---------------) + I accountants
- 0x002df886, // n0x0006 c0x0000 (---------------) + I active
- 0x00237f05, // n0x0007 c0x0000 (---------------) + I actor
- 0x01e08902, // n0x0008 c0x0007 (n0x0339-n0x033a) + I ad
- 0x022100c2, // n0x0009 c0x0008 (n0x033a-n0x0341) + I ae
- 0x0267a1c4, // n0x000a c0x0009 (n0x0341-n0x039a) + I aero
- 0x02a18302, // n0x000b c0x000a (n0x039a-n0x039f) + I af
- 0x00284506, // n0x000c c0x0000 (---------------) + I africa
- 0x02e00482, // n0x000d c0x000b (n0x039f-n0x03a4) + I ag
- 0x0023a686, // n0x000e c0x0000 (---------------) + I agency
- 0x032135c2, // n0x000f c0x000c (n0x03a4-n0x03a8) + I ai
- 0x0024cdc8, // n0x0010 c0x0000 (---------------) + I airforce
- 0x03602082, // n0x0011 c0x000d (n0x03a8-n0x03ae) + I al
- 0x0021d009, // n0x0012 c0x0000 (---------------) + I allfinanz
- 0x00202806, // n0x0013 c0x0000 (---------------) + I alsace
- 0x00200282, // n0x0014 c0x0000 (---------------) + I am
- 0x002b97c9, // n0x0015 c0x0000 (---------------) + I amsterdam
- 0x03a00202, // n0x0016 c0x000e (n0x03ae-n0x03b2) + I an
- 0x00310dc7, // n0x0017 c0x0000 (---------------) + I android
- 0x03e04382, // n0x0018 c0x000f (n0x03b2-n0x03b8) + I ao
- 0x00280082, // n0x0019 c0x0000 (---------------) + I aq
- 0x00280089, // n0x001a c0x0000 (---------------) + I aquarelle
- 0x04200a42, // n0x001b c0x0010 (n0x03b8-n0x03c1) + I ar
- 0x00246805, // n0x001c c0x0000 (---------------) + I archi
- 0x0032eac4, // n0x001d c0x0000 (---------------) + I army
- 0x04aeb204, // n0x001e c0x0012 (n0x03c2-n0x03c8) + I arpa
- 0x04e00902, // n0x001f c0x0013 (n0x03c8-n0x03c9) + I as
- 0x0023e704, // n0x0020 c0x0000 (---------------) + I asia
- 0x002aceca, // n0x0021 c0x0000 (---------------) + I associates
- 0x05200102, // n0x0022 c0x0014 (n0x03c9-n0x03d0) + I at
- 0x002cfe48, // n0x0023 c0x0000 (---------------) + I attorney
- 0x05a07ec2, // n0x0024 c0x0016 (n0x03d1-n0x03e3) + I au
- 0x0030e587, // n0x0025 c0x0000 (---------------) + I auction
- 0x002b39c5, // n0x0026 c0x0000 (---------------) + I audio
- 0x003194c5, // n0x0027 c0x0000 (---------------) + I autos
- 0x06a00502, // n0x0028 c0x001a (n0x03f1-n0x03f2) + I aw
- 0x0026d8c2, // n0x0029 c0x0000 (---------------) + I ax
- 0x003466c3, // n0x002a c0x0000 (---------------) + I axa
- 0x06e034c2, // n0x002b c0x001b (n0x03f2-n0x03fe) + I az
- 0x07201902, // n0x002c c0x001c (n0x03fe-n0x0408) + I ba
- 0x00265304, // n0x002d c0x0000 (---------------) + I band
- 0x0020d2c3, // n0x002e c0x0000 (---------------) + I bar
- 0x002fc809, // n0x002f c0x0000 (---------------) + I barcelona
- 0x00301a88, // n0x0030 c0x0000 (---------------) + I bargains
- 0x0034c947, // n0x0031 c0x0000 (---------------) + I bauhaus
- 0x00347046, // n0x0032 c0x0000 (---------------) + I bayern
- 0x07616e42, // n0x0033 c0x001d (n0x0408-n0x0412) + I bb
- 0x0033d703, // n0x0034 c0x0000 (---------------) + I bcn
- 0x01704282, // n0x0035 c0x0005 (---------------)* o I bd
- 0x07a00e82, // n0x0036 c0x001e (n0x0412-n0x0414) + I be
- 0x002076c4, // n0x0037 c0x0000 (---------------) + I beer
- 0x0035e1c6, // n0x0038 c0x0000 (---------------) + I berlin
- 0x003160c4, // n0x0039 c0x0000 (---------------) + I best
- 0x07f3a702, // n0x003a c0x001f (n0x0414-n0x0415) + I bf
- 0x08367842, // n0x003b c0x0020 (n0x0415-n0x0439) + I bg
- 0x0864dc02, // n0x003c c0x0021 (n0x0439-n0x043e) + I bh
- 0x00367606, // n0x003d c0x0000 (---------------) + I bharti
- 0x08a00002, // n0x003e c0x0022 (n0x043e-n0x0443) + I bi
- 0x0023a185, // n0x003f c0x0000 (---------------) + I bible
- 0x003057c3, // n0x0040 c0x0000 (---------------) + I bid
- 0x00202484, // n0x0041 c0x0000 (---------------) + I bike
- 0x002063c3, // n0x0042 c0x0000 (---------------) + I bio
- 0x08f14c43, // n0x0043 c0x0023 (n0x0443-n0x044a) + I biz
- 0x0920e2c2, // n0x0044 c0x0024 (n0x044a-n0x044e) + I bj
- 0x002838c5, // n0x0045 c0x0000 (---------------) + I black
- 0x002838cb, // n0x0046 c0x0000 (---------------) + I blackfriday
- 0x0020f909, // n0x0047 c0x0000 (---------------) + I bloomberg
- 0x00210744, // n0x0048 c0x0000 (---------------) + I blue
- 0x096109c2, // n0x0049 c0x0025 (n0x044e-n0x0453) + I bm
- 0x002109c3, // n0x004a c0x0000 (---------------) + I bmw
- 0x01611442, // n0x004b c0x0005 (---------------)* o I bn
- 0x0035cac3, // n0x004c c0x0000 (---------------) + I bnl
- 0x0021144a, // n0x004d c0x0000 (---------------) + I bnpparibas
- 0x09a00fc2, // n0x004e c0x0026 (n0x0453-n0x045c) + I bo
- 0x002121c4, // n0x004f c0x0000 (---------------) + I bond
- 0x002cbf83, // n0x0050 c0x0000 (---------------) + I boo
- 0x00215a48, // n0x0051 c0x0000 (---------------) + I boutique
- 0x09e06842, // n0x0052 c0x0027 (n0x045c-n0x04a2) + I br
- 0x002210c8, // n0x0053 c0x0000 (---------------) + I brussels
- 0x0a605ec2, // n0x0054 c0x0029 (n0x04a3-n0x04a8) + I bs
- 0x0aa45dc2, // n0x0055 c0x002a (n0x04a8-n0x04ad) + I bt
- 0x0029a948, // n0x0056 c0x0000 (---------------) + I budapest
- 0x0022c005, // n0x0057 c0x0000 (---------------) + I build
- 0x00247f48, // n0x0058 c0x0000 (---------------) + I builders
- 0x002c6848, // n0x0059 c0x0000 (---------------) + I business
- 0x00228744, // n0x005a c0x0000 (---------------) + I buzz
- 0x00228942, // n0x005b c0x0000 (---------------) + I bv
- 0x0ae29a82, // n0x005c c0x002b (n0x04ad-n0x04af) + I bw
- 0x0b224042, // n0x005d c0x002c (n0x04af-n0x04b3) + I by
- 0x0b62a402, // n0x005e c0x002d (n0x04b3-n0x04b9) + I bz
- 0x0022a403, // n0x005f c0x0000 (---------------) + I bzh
- 0x0ba0bc02, // n0x0060 c0x002e (n0x04b9-n0x04ca) + I ca
- 0x002a0983, // n0x0061 c0x0000 (---------------) + I cab
- 0x0020bc03, // n0x0062 c0x0000 (---------------) + I cal
- 0x00284606, // n0x0063 c0x0000 (---------------) + I camera
- 0x0023d484, // n0x0064 c0x0000 (---------------) + I camp
- 0x002aa6ce, // n0x0065 c0x0000 (---------------) + I cancerresearch
- 0x002ed748, // n0x0066 c0x0000 (---------------) + I capetown
- 0x002f7387, // n0x0067 c0x0000 (---------------) + I capital
- 0x002d3e47, // n0x0068 c0x0000 (---------------) + I caravan
- 0x0023e985, // n0x0069 c0x0000 (---------------) + I cards
- 0x00360984, // n0x006a c0x0000 (---------------) + I care
- 0x00360986, // n0x006b c0x0000 (---------------) + I career
- 0x00360987, // n0x006c c0x0000 (---------------) + I careers
- 0x00266647, // n0x006d c0x0000 (---------------) + I cartier
- 0x00350744, // n0x006e c0x0000 (---------------) + I casa
- 0x00254804, // n0x006f c0x0000 (---------------) + I cash
- 0x00247d03, // n0x0070 c0x0000 (---------------) + I cat
- 0x00247d08, // n0x0071 c0x0000 (---------------) + I catering
- 0x00349643, // n0x0072 c0x0000 (---------------) + I cba
- 0x0035ca83, // n0x0073 c0x0000 (---------------) + I cbn
- 0x0be19f02, // n0x0074 c0x002f (n0x04ca-n0x04ce) + I cc
- 0x0c30d342, // n0x0075 c0x0030 (n0x04ce-n0x04cf) + I cd
- 0x00240f86, // n0x0076 c0x0000 (---------------) + I center
- 0x0024cf43, // n0x0077 c0x0000 (---------------) + I ceo
- 0x002f1484, // n0x0078 c0x0000 (---------------) + I cern
- 0x0c74e442, // n0x0079 c0x0031 (n0x04cf-n0x04d0) + I cf
- 0x0034e443, // n0x007a c0x0000 (---------------) + I cfa
- 0x002147c2, // n0x007b c0x0000 (---------------) + I cg
- 0x0ca00602, // n0x007c c0x0032 (n0x04d0-n0x04d1) + I ch
- 0x002b7bc7, // n0x007d c0x0000 (---------------) + I channel
- 0x00322e85, // n0x007e c0x0000 (---------------) + I cheap
- 0x002d2ac9, // n0x007f c0x0000 (---------------) + I christmas
- 0x002f1186, // n0x0080 c0x0000 (---------------) + I chrome
- 0x00329206, // n0x0081 c0x0000 (---------------) + I church
- 0x0ce18c02, // n0x0082 c0x0033 (n0x04d1-n0x04e0) + I ci
- 0x00350645, // n0x0083 c0x0000 (---------------) + I citic
- 0x00357e04, // n0x0084 c0x0000 (---------------) + I city
- 0x0d200882, // n0x0085 c0x0034 (n0x04e0-n0x04e1)* o I ck
- 0x0d6007c2, // n0x0086 c0x0035 (n0x04e1-n0x04e5) + I cl
- 0x0022c346, // n0x0087 c0x0000 (---------------) + I claims
- 0x00237b08, // n0x0088 c0x0000 (---------------) + I cleaning
- 0x0022d3c5, // n0x0089 c0x0000 (---------------) + I click
- 0x0022d886, // n0x008a c0x0000 (---------------) + I clinic
- 0x0022e648, // n0x008b c0x0000 (---------------) + I clothing
- 0x002a4284, // n0x008c c0x0000 (---------------) + I club
- 0x0da5fec2, // n0x008d c0x0036 (n0x04e5-n0x04e9) + I cm
- 0x0de309c2, // n0x008e c0x0037 (n0x04e9-n0x0516) + I cn
- 0x0ea07a02, // n0x008f c0x003a (n0x0518-n0x0525) + I co
- 0x00340005, // n0x0090 c0x0000 (---------------) + I codes
- 0x00261c86, // n0x0091 c0x0000 (---------------) + I coffee
- 0x00230e07, // n0x0092 c0x0000 (---------------) + I college
- 0x00231107, // n0x0093 c0x0000 (---------------) + I cologne
- 0x0ee22603, // n0x0094 c0x003b (n0x0525-n0x05e8) + I com
- 0x002cc2c8, // n0x0095 c0x0000 (---------------) + I commbank
- 0x00233189, // n0x0096 c0x0000 (---------------) + I community
- 0x002337c7, // n0x0097 c0x0000 (---------------) + I company
- 0x00233bc8, // n0x0098 c0x0000 (---------------) + I computer
- 0x002343c6, // n0x0099 c0x0000 (---------------) + I condos
- 0x00234d8c, // n0x009a c0x0000 (---------------) + I construction
- 0x0023608a, // n0x009b c0x0000 (---------------) + I consulting
- 0x00237dcb, // n0x009c c0x0000 (---------------) + I contractors
- 0x00238f47, // n0x009d c0x0000 (---------------) + I cooking
- 0x00239404, // n0x009e c0x0000 (---------------) + I cool
- 0x00239dc4, // n0x009f c0x0000 (---------------) + I coop
- 0x00284947, // n0x00a0 c0x0000 (---------------) + I country
- 0x0fe18282, // n0x00a1 c0x003f (n0x0609-n0x0610) + I cr
- 0x0023e806, // n0x00a2 c0x0000 (---------------) + I credit
- 0x0023e80a, // n0x00a3 c0x0000 (---------------) + I creditcard
- 0x0023fe43, // n0x00a4 c0x0000 (---------------) + I crs
- 0x002403c7, // n0x00a5 c0x0000 (---------------) + I cruises
- 0x10240742, // n0x00a6 c0x0040 (n0x0610-n0x0616) + I cu
- 0x0024074a, // n0x00a7 c0x0000 (---------------) + I cuisinella
- 0x107350c2, // n0x00a8 c0x0041 (n0x0616-n0x0617) + I cv
- 0x10b4c1c2, // n0x00a9 c0x0042 (n0x0617-n0x061b) + I cw
- 0x10e41802, // n0x00aa c0x0043 (n0x061b-n0x061d) + I cx
- 0x0160c202, // n0x00ab c0x0005 (---------------)* o I cy
- 0x002cfc85, // n0x00ac c0x0000 (---------------) + I cymru
- 0x11223342, // n0x00ad c0x0044 (n0x061d-n0x061e) + I cz
- 0x00220e45, // n0x00ae c0x0000 (---------------) + I dabur
- 0x00303783, // n0x00af c0x0000 (---------------) + I dad
- 0x00309f05, // n0x00b0 c0x0000 (---------------) + I dance
- 0x0021dfc6, // n0x00b1 c0x0000 (---------------) + I dating
- 0x00374c86, // n0x00b2 c0x0000 (---------------) + I datsun
- 0x00209ec3, // n0x00b3 c0x0000 (---------------) + I day
- 0x11602dc2, // n0x00b4 c0x0045 (n0x061e-n0x0626) + I de
- 0x003661c5, // n0x00b5 c0x0000 (---------------) + I deals
- 0x00263506, // n0x00b6 c0x0000 (---------------) + I degree
- 0x00243588, // n0x00b7 c0x0000 (---------------) + I democrat
- 0x002b1286, // n0x00b8 c0x0000 (---------------) + I dental
- 0x00275a47, // n0x00b9 c0x0000 (---------------) + I dentist
- 0x00255d84, // n0x00ba c0x0000 (---------------) + I desi
- 0x002bf708, // n0x00bb c0x0000 (---------------) + I diamonds
- 0x00317984, // n0x00bc c0x0000 (---------------) + I diet
- 0x003471c7, // n0x00bd c0x0000 (---------------) + I digital
- 0x00310f46, // n0x00be c0x0000 (---------------) + I direct
- 0x00310f49, // n0x00bf c0x0000 (---------------) + I directory
- 0x003155c8, // n0x00c0 c0x0000 (---------------) + I discount
- 0x0024d702, // n0x00c1 c0x0000 (---------------) + I dj
- 0x11a22c02, // n0x00c2 c0x0046 (n0x0626-n0x0627) + I dk
- 0x11e3f6c2, // n0x00c3 c0x0047 (n0x0627-n0x062c) + I dm
- 0x00344a83, // n0x00c4 c0x0000 (---------------) + I dnp
- 0x12207b82, // n0x00c5 c0x0048 (n0x062c-n0x0636) + I do
- 0x003589c7, // n0x00c6 c0x0000 (---------------) + I domains
- 0x00289006, // n0x00c7 c0x0000 (---------------) + I doosan
- 0x002ec686, // n0x00c8 c0x0000 (---------------) + I durban
- 0x00308fc4, // n0x00c9 c0x0000 (---------------) + I dvag
- 0x12608dc2, // n0x00ca c0x0049 (n0x0636-n0x063e) + I dz
- 0x0021b903, // n0x00cb c0x0000 (---------------) + I eat
- 0x12a079c2, // n0x00cc c0x004a (n0x063e-n0x064a) + I ec
- 0x0027a643, // n0x00cd c0x0000 (---------------) + I edu
- 0x0027a649, // n0x00ce c0x0000 (---------------) + I education
- 0x12e02d02, // n0x00cf c0x004b (n0x064a-n0x0654) + I ee
- 0x13208f82, // n0x00d0 c0x004c (n0x0654-n0x065d) + I eg
- 0x002ef0c5, // n0x00d1 c0x0000 (---------------) + I email
- 0x00207406, // n0x00d2 c0x0000 (---------------) + I emerck
- 0x002c3ec8, // n0x00d3 c0x0000 (---------------) + I engineer
- 0x002c3ecb, // n0x00d4 c0x0000 (---------------) + I engineering
- 0x002f6d4b, // n0x00d5 c0x0000 (---------------) + I enterprises
- 0x00356f09, // n0x00d6 c0x0000 (---------------) + I equipment
- 0x01604c02, // n0x00d7 c0x0005 (---------------)* o I er
- 0x0020fc04, // n0x00d8 c0x0000 (---------------) + I erni
- 0x13601fc2, // n0x00d9 c0x004d (n0x065d-n0x0662) + I es
- 0x0025e7c3, // n0x00da c0x0000 (---------------) + I esq
- 0x00284b06, // n0x00db c0x0000 (---------------) + I estate
- 0x13e01642, // n0x00dc c0x004f (n0x0663-n0x066a) + I et
- 0x00210502, // n0x00dd c0x0000 (---------------) + I eu
- 0x003279ca, // n0x00de c0x0000 (---------------) + I eurovision
- 0x0021b383, // n0x00df c0x0000 (---------------) + I eus
- 0x00219746, // n0x00e0 c0x0000 (---------------) + I events
- 0x00223d48, // n0x00e1 c0x0000 (---------------) + I everbank
- 0x00208248, // n0x00e2 c0x0000 (---------------) + I exchange
- 0x00222406, // n0x00e3 c0x0000 (---------------) + I expert
- 0x002d9547, // n0x00e4 c0x0000 (---------------) + I exposed
- 0x0034e484, // n0x00e5 c0x0000 (---------------) + I fail
- 0x002a5683, // n0x00e6 c0x0000 (---------------) + I fan
- 0x00317f84, // n0x00e7 c0x0000 (---------------) + I farm
- 0x003404c7, // n0x00e8 c0x0000 (---------------) + I fashion
- 0x00261d48, // n0x00e9 c0x0000 (---------------) + I feedback
- 0x1421c5c2, // n0x00ea c0x0050 (n0x066a-n0x066d) + I fi
- 0x00243f47, // n0x00eb c0x0000 (---------------) + I finance
- 0x0025a289, // n0x00ec c0x0000 (---------------) + I financial
- 0x00245bc8, // n0x00ed c0x0000 (---------------) + I firmdale
- 0x002460c4, // n0x00ee c0x0000 (---------------) + I fish
- 0x002460c7, // n0x00ef c0x0000 (---------------) + I fishing
- 0x00248f07, // n0x00f0 c0x0000 (---------------) + I fitness
- 0x0161ec82, // n0x00f1 c0x0005 (---------------)* o I fj
- 0x0176c102, // n0x00f2 c0x0005 (---------------)* o I fk
- 0x0024a047, // n0x00f3 c0x0000 (---------------) + I flights
- 0x0024c947, // n0x00f4 c0x0000 (---------------) + I florist
- 0x0024fa88, // n0x00f5 c0x0000 (---------------) + I flsmidth
- 0x002504c3, // n0x00f6 c0x0000 (---------------) + I fly
- 0x00253942, // n0x00f7 c0x0000 (---------------) + I fm
- 0x0021c782, // n0x00f8 c0x0000 (---------------) + I fo
- 0x002510c3, // n0x00f9 c0x0000 (---------------) + I foo
- 0x00254e87, // n0x00fa c0x0000 (---------------) + I forsale
- 0x0031f98a, // n0x00fb c0x0000 (---------------) + I foundation
- 0x14612442, // n0x00fc c0x0051 (n0x066d-n0x0685) + I fr
- 0x0025d943, // n0x00fd c0x0000 (---------------) + I frl
- 0x0025da07, // n0x00fe c0x0000 (---------------) + I frogans
- 0x0027eb84, // n0x00ff c0x0000 (---------------) + I fund
- 0x0027f6c9, // n0x0100 c0x0000 (---------------) + I furniture
- 0x00281d46, // n0x0101 c0x0000 (---------------) + I futbol
- 0x002004c2, // n0x0102 c0x0000 (---------------) + I ga
- 0x002027c3, // n0x0103 c0x0000 (---------------) + I gal
- 0x00236f07, // n0x0104 c0x0000 (---------------) + I gallery
- 0x00203ac6, // n0x0105 c0x0000 (---------------) + I garden
- 0x0020fb02, // n0x0106 c0x0000 (---------------) + I gb
- 0x003585c4, // n0x0107 c0x0000 (---------------) + I gbiz
- 0x00210e82, // n0x0108 c0x0000 (---------------) + I gd
- 0x00210e83, // n0x0109 c0x0000 (---------------) + I gdn
- 0x14a02e82, // n0x010a c0x0052 (n0x0685-n0x068c) + I ge
- 0x0030c5c4, // n0x010b c0x0000 (---------------) + I gent
- 0x00262ac2, // n0x010c c0x0000 (---------------) + I gf
- 0x14e0bb02, // n0x010d c0x0053 (n0x068c-n0x068f) + I gg
- 0x00315b84, // n0x010e c0x0000 (---------------) + I ggee
- 0x15244e02, // n0x010f c0x0054 (n0x068f-n0x0694) + I gh
- 0x15601742, // n0x0110 c0x0055 (n0x0694-n0x069a) + I gi
- 0x00335c04, // n0x0111 c0x0000 (---------------) + I gift
- 0x00335c05, // n0x0112 c0x0000 (---------------) + I gifts
- 0x002c5b05, // n0x0113 c0x0000 (---------------) + I gives
- 0x0020cb42, // n0x0114 c0x0000 (---------------) + I gl
- 0x0020cb45, // n0x0115 c0x0000 (---------------) + I glass
- 0x0021c303, // n0x0116 c0x0000 (---------------) + I gle
- 0x00217cc6, // n0x0117 c0x0000 (---------------) + I global
- 0x0021cd05, // n0x0118 c0x0000 (---------------) + I globo
- 0x00222d42, // n0x0119 c0x0000 (---------------) + I gm
- 0x00222d45, // n0x011a c0x0000 (---------------) + I gmail
- 0x0022aac3, // n0x011b c0x0000 (---------------) + I gmo
- 0x0022ad03, // n0x011c c0x0000 (---------------) + I gmx
- 0x15a010c2, // n0x011d c0x0056 (n0x069a-n0x06a0) + I gn
- 0x00255586, // n0x011e c0x0000 (---------------) + I google
- 0x002d9083, // n0x011f c0x0000 (---------------) + I gop
- 0x002157c3, // n0x0120 c0x0000 (---------------) + I gov
- 0x15ecc942, // n0x0121 c0x0057 (n0x06a0-n0x06a6) + I gp
- 0x0023b142, // n0x0122 c0x0000 (---------------) + I gq
- 0x16205bc2, // n0x0123 c0x0058 (n0x06a6-n0x06ac) + I gr
- 0x00205bc8, // n0x0124 c0x0000 (---------------) + I graphics
- 0x00359886, // n0x0125 c0x0000 (---------------) + I gratis
- 0x0026e185, // n0x0126 c0x0000 (---------------) + I green
- 0x002d3cc5, // n0x0127 c0x0000 (---------------) + I gripe
- 0x002248c5, // n0x0128 c0x0000 (---------------) + I group
- 0x00229d82, // n0x0129 c0x0000 (---------------) + I gs
- 0x166ee5c2, // n0x012a c0x0059 (n0x06ac-n0x06b3) + I gt
- 0x01630742, // n0x012b c0x0005 (---------------)* o I gu
- 0x002a58c4, // n0x012c c0x0000 (---------------) + I guge
- 0x002d66c5, // n0x012d c0x0000 (---------------) + I guide
- 0x002390c7, // n0x012e c0x0000 (---------------) + I guitars
- 0x00274084, // n0x012f c0x0000 (---------------) + I guru
- 0x00226382, // n0x0130 c0x0000 (---------------) + I gw
- 0x16a00d02, // n0x0131 c0x005a (n0x06b3-n0x06b6) + I gy
- 0x00203087, // n0x0132 c0x0000 (---------------) + I hamburg
- 0x0034ca04, // n0x0133 c0x0000 (---------------) + I haus
- 0x0036080a, // n0x0134 c0x0000 (---------------) + I healthcare
- 0x00201c04, // n0x0135 c0x0000 (---------------) + I help
- 0x0024fd04, // n0x0136 c0x0000 (---------------) + I here
- 0x002fa546, // n0x0137 c0x0000 (---------------) + I hermes
- 0x00310186, // n0x0138 c0x0000 (---------------) + I hiphop
- 0x002693c3, // n0x0139 c0x0000 (---------------) + I hiv
- 0x16e6af42, // n0x013a c0x005b (n0x06b6-n0x06cc) + I hk
- 0x00260182, // n0x013b c0x0000 (---------------) + I hm
- 0x1722c942, // n0x013c c0x005c (n0x06cc-n0x06d2) + I hn
- 0x00229c08, // n0x013d c0x0000 (---------------) + I holdings
- 0x0029f007, // n0x013e c0x0000 (---------------) + I holiday
- 0x002a12c5, // n0x013f c0x0000 (---------------) + I homes
- 0x002a5c05, // n0x0140 c0x0000 (---------------) + I horse
- 0x00209344, // n0x0141 c0x0000 (---------------) + I host
- 0x0028b887, // n0x0142 c0x0000 (---------------) + I hosting
- 0x00227d05, // n0x0143 c0x0000 (---------------) + I house
- 0x002ac983, // n0x0144 c0x0000 (---------------) + I how
- 0x17635e42, // n0x0145 c0x005d (n0x06d2-n0x06d6) + I hr
- 0x17a06f42, // n0x0146 c0x005e (n0x06d6-n0x06e7) + I ht
- 0x17e01e02, // n0x0147 c0x005f (n0x06e7-n0x0707) + I hu
- 0x00367f43, // n0x0148 c0x0000 (---------------) + I ibm
- 0x18202f82, // n0x0149 c0x0060 (n0x0707-n0x0712) + I id
- 0x18600042, // n0x014a c0x0061 (n0x0712-n0x0714) + I ie
- 0x00253903, // n0x014b c0x0000 (---------------) + I ifm
- 0x00201585, // n0x014c c0x0000 (---------------) + I iinet
- 0x18a03902, // n0x014d c0x0062 (n0x0714-n0x0715)* o I il
- 0x192029c2, // n0x014e c0x0064 (n0x0716-n0x071d) + I im
- 0x0020e804, // n0x014f c0x0000 (---------------) + I immo
- 0x0020e80a, // n0x0150 c0x0000 (---------------) + I immobilien
- 0x19a015c2, // n0x0151 c0x0066 (n0x071f-n0x072c) + I in
- 0x0021aeca, // n0x0152 c0x0000 (---------------) + I industries
- 0x0021c548, // n0x0153 c0x0000 (---------------) + I infiniti
- 0x19e1c704, // n0x0154 c0x0067 (n0x072c-n0x0736) + I info
- 0x00201ec3, // n0x0155 c0x0000 (---------------) + I ing
- 0x002132c3, // n0x0156 c0x0000 (---------------) + I ink
- 0x00301bc9, // n0x0157 c0x0000 (---------------) + I institute
- 0x0021fac6, // n0x0158 c0x0000 (---------------) + I insure
- 0x1a223a83, // n0x0159 c0x0068 (n0x0736-n0x0737) + I int
- 0x0022508d, // n0x015a c0x0000 (---------------) + I international
- 0x0024e18b, // n0x015b c0x0000 (---------------) + I investments
- 0x1a603dc2, // n0x015c c0x0069 (n0x0737-n0x073a) + I io
- 0x00208508, // n0x015d c0x0000 (---------------) + I ipiranga
- 0x1aa06702, // n0x015e c0x006a (n0x073a-n0x0740) + I iq
- 0x1ae05302, // n0x015f c0x006b (n0x0740-n0x0749) + I ir
- 0x002f2e05, // n0x0160 c0x0000 (---------------) + I irish
- 0x1b2046c2, // n0x0161 c0x006c (n0x0749-n0x0750) + I is
- 0x0020dec3, // n0x0162 c0x0000 (---------------) + I ist
- 0x0020dec8, // n0x0163 c0x0000 (---------------) + I istanbul
- 0x1b6017c2, // n0x0164 c0x006d (n0x0750-n0x08c1) + I it
- 0x002a9903, // n0x0165 c0x0000 (---------------) + I iwc
- 0x002cf684, // n0x0166 c0x0000 (---------------) + I java
- 0x1ba01f82, // n0x0167 c0x006e (n0x08c1-n0x08c4) + I je
- 0x00260e05, // n0x0168 c0x0000 (---------------) + I jetzt
- 0x01762202, // n0x0169 c0x0005 (---------------)* o I jm
- 0x1be03242, // n0x016a c0x006f (n0x08c4-n0x08cc) + I jo
- 0x002deb44, // n0x016b c0x0000 (---------------) + I jobs
- 0x002f70c6, // n0x016c c0x0000 (---------------) + I joburg
- 0x1c2a9f42, // n0x016d c0x0070 (n0x08cc-n0x090c) + I jp
- 0x00256b86, // n0x016e c0x0000 (---------------) + I juegos
- 0x00323506, // n0x016f c0x0000 (---------------) + I kaufen
- 0x01602502, // n0x0170 c0x0005 (---------------)* o I ke
- 0x29e3d042, // n0x0171 c0x00a7 (n0x0fa0-n0x0fa6) + I kg
- 0x0160ad42, // n0x0172 c0x0005 (---------------)* o I kh
- 0x2a201542, // n0x0173 c0x00a8 (n0x0fa6-n0x0fad) + I ki
- 0x00256d83, // n0x0174 c0x0000 (---------------) + I kim
- 0x00226e07, // n0x0175 c0x0000 (---------------) + I kitchen
- 0x0031b904, // n0x0176 c0x0000 (---------------) + I kiwi
- 0x2a689682, // n0x0177 c0x00a9 (n0x0fad-n0x0fbe) + I km
- 0x2aa1ce42, // n0x0178 c0x00aa (n0x0fbe-n0x0fc2) + I kn
- 0x0024c305, // n0x0179 c0x0000 (---------------) + I koeln
- 0x2ae2d0c2, // n0x017a c0x00ab (n0x0fc2-n0x0fc8) + I kp
- 0x2b20e742, // n0x017b c0x00ac (n0x0fc8-n0x0fe6) + I kr
- 0x00331443, // n0x017c c0x0000 (---------------) + I krd
- 0x002ae2c4, // n0x017d c0x0000 (---------------) + I kred
- 0x016ba802, // n0x017e c0x0005 (---------------)* o I kw
- 0x2b613442, // n0x017f c0x00ad (n0x0fe6-n0x0feb) + I ky
- 0x2bb62802, // n0x0180 c0x00ae (n0x0feb-n0x0ff1) + I kz
- 0x2be04d02, // n0x0181 c0x00af (n0x0ff1-n0x0ffa) + I la
- 0x00325187, // n0x0182 c0x0000 (---------------) + I lacaixa
- 0x0023ac84, // n0x0183 c0x0000 (---------------) + I land
- 0x002228c7, // n0x0184 c0x0000 (---------------) + I latrobe
- 0x0034ef06, // n0x0185 c0x0000 (---------------) + I lawyer
- 0x2c204302, // n0x0186 c0x00b0 (n0x0ffa-n0x0fff) + I lb
- 0x2c60ed02, // n0x0187 c0x00b1 (n0x0fff-n0x1005) + I lc
- 0x00241383, // n0x0188 c0x0000 (---------------) + I lds
- 0x002f0d85, // n0x0189 c0x0000 (---------------) + I lease
- 0x0024d287, // n0x018a c0x0000 (---------------) + I leclerc
- 0x002e0a84, // n0x018b c0x0000 (---------------) + I lgbt
- 0x002020c2, // n0x018c c0x0000 (---------------) + I li
- 0x003237c4, // n0x018d c0x0000 (---------------) + I life
- 0x00244d88, // n0x018e c0x0000 (---------------) + I lighting
- 0x0036d707, // n0x018f c0x0000 (---------------) + I limited
- 0x002e6b04, // n0x0190 c0x0000 (---------------) + I limo
- 0x0035e5c4, // n0x0191 c0x0000 (---------------) + I link
- 0x2ca2d082, // n0x0192 c0x00b2 (n0x1005-n0x1013) + I lk
- 0x00261785, // n0x0193 c0x0000 (---------------) + I loans
- 0x00207ac6, // n0x0194 c0x0000 (---------------) + I london
- 0x00221b85, // n0x0195 c0x0000 (---------------) + I lotto
- 0x2ce82682, // n0x0196 c0x00b3 (n0x1013-n0x1018) + I lr
- 0x2d202842, // n0x0197 c0x00b4 (n0x1018-n0x101a) + I ls
- 0x2d620002, // n0x0198 c0x00b5 (n0x101a-n0x101b) + I lt
- 0x00223144, // n0x0199 c0x0000 (---------------) + I ltda
- 0x00202f02, // n0x019a c0x0000 (---------------) + I lu
- 0x002363c4, // n0x019b c0x0000 (---------------) + I luxe
- 0x0023dd46, // n0x019c c0x0000 (---------------) + I luxury
- 0x2da05002, // n0x019d c0x00b6 (n0x101b-n0x1024) + I lv
- 0x2de39bc2, // n0x019e c0x00b7 (n0x1024-n0x102d) + I ly
- 0x2e2002c2, // n0x019f c0x00b8 (n0x102d-n0x1033) + I ma
- 0x00308e86, // n0x01a0 c0x0000 (---------------) + I madrid
- 0x0029acc6, // n0x01a1 c0x0000 (---------------) + I maison
- 0x0029388a, // n0x01a2 c0x0000 (---------------) + I management
- 0x002a5105, // n0x01a3 c0x0000 (---------------) + I mango
- 0x00217ac6, // n0x01a4 c0x0000 (---------------) + I market
- 0x00217ac9, // n0x01a5 c0x0000 (---------------) + I marketing
- 0x2e6e83c2, // n0x01a6 c0x00b9 (n0x1033-n0x1035) + I mc
- 0x00235302, // n0x01a7 c0x0000 (---------------) + I md
- 0x2ea02a02, // n0x01a8 c0x00ba (n0x1035-n0x103d) + I me
- 0x0027ab45, // n0x01a9 c0x0000 (---------------) + I media
- 0x00290f44, // n0x01aa c0x0000 (---------------) + I meet
- 0x002348c9, // n0x01ab c0x0000 (---------------) + I melbourne
- 0x002073c4, // n0x01ac c0x0000 (---------------) + I meme
- 0x003432c4, // n0x01ad c0x0000 (---------------) + I menu
- 0x2ef39f02, // n0x01ae c0x00bb (n0x103d-n0x1045) + I mg
- 0x0022fe42, // n0x01af c0x0000 (---------------) + I mh
- 0x0022bec5, // n0x01b0 c0x0000 (---------------) + I miami
- 0x0023f703, // n0x01b1 c0x0000 (---------------) + I mil
- 0x002798c4, // n0x01b2 c0x0000 (---------------) + I mini
- 0x2f33f482, // n0x01b3 c0x00bc (n0x1045-n0x104c) + I mk
- 0x2f611ac2, // n0x01b4 c0x00bd (n0x104c-n0x1053) + I ml
- 0x0160e842, // n0x01b5 c0x0005 (---------------)* o I mm
- 0x2fa298c2, // n0x01b6 c0x00be (n0x1053-n0x1057) + I mn
- 0x2fe06c42, // n0x01b7 c0x00bf (n0x1057-n0x105c) + I mo
- 0x0020e884, // n0x01b8 c0x0000 (---------------) + I mobi
- 0x00268684, // n0x01b9 c0x0000 (---------------) + I moda
- 0x00256f83, // n0x01ba c0x0000 (---------------) + I moe
- 0x0023f186, // n0x01bb c0x0000 (---------------) + I monash
- 0x00254609, // n0x01bc c0x0000 (---------------) + I montblanc
- 0x002c2986, // n0x01bd c0x0000 (---------------) + I mormon
- 0x002c2f08, // n0x01be c0x0000 (---------------) + I mortgage
- 0x002c3106, // n0x01bf c0x0000 (---------------) + I moscow
- 0x00294a4b, // n0x01c0 c0x0000 (---------------) + I motorcycles
- 0x002c4f43, // n0x01c1 c0x0000 (---------------) + I mov
- 0x00200182, // n0x01c2 c0x0000 (---------------) + I mp
- 0x00325482, // n0x01c3 c0x0000 (---------------) + I mq
- 0x302119c2, // n0x01c4 c0x00c0 (n0x105c-n0x105e) + I mr
- 0x30625542, // n0x01c5 c0x00c1 (n0x105e-n0x1063) + I ms
- 0x30a68d82, // n0x01c6 c0x00c2 (n0x1063-n0x1067) + I mt
- 0x30e14542, // n0x01c7 c0x00c3 (n0x1067-n0x106e) + I mu
- 0x312cb0c6, // n0x01c8 c0x00c4 (n0x106e-n0x1292) + I museum
- 0x31619242, // n0x01c9 c0x00c5 (n0x1292-n0x12a0) + I mv
- 0x31a10a02, // n0x01ca c0x00c6 (n0x12a0-n0x12ab) + I mw
- 0x31e2ad42, // n0x01cb c0x00c7 (n0x12ab-n0x12b1) + I mx
- 0x32208482, // n0x01cc c0x00c8 (n0x12b1-n0x12b8) + I my
- 0x326d4182, // n0x01cd c0x00c9 (n0x12b8-n0x12b9)* o I mz
- 0x32a00242, // n0x01ce c0x00ca (n0x12b9-n0x12ca) + I na
- 0x00319386, // n0x01cf c0x0000 (---------------) + I nagoya
- 0x32e2aec4, // n0x01d0 c0x00cb (n0x12ca-n0x12cc) + I name
- 0x002056c4, // n0x01d1 c0x0000 (---------------) + I navy
- 0x33a0c1c2, // n0x01d2 c0x00ce (n0x12ce-n0x12cf) + I nc
- 0x00201602, // n0x01d3 c0x0000 (---------------) + I ne
- 0x33e01603, // n0x01d4 c0x00cf (n0x12cf-n0x12fe) + I net
- 0x00362687, // n0x01d5 c0x0000 (---------------) + I netbank
- 0x0028ce47, // n0x01d6 c0x0000 (---------------) + I network
- 0x0021b347, // n0x01d7 c0x0000 (---------------) + I neustar
- 0x0020b803, // n0x01d8 c0x0000 (---------------) + I new
- 0x003181c5, // n0x01d9 c0x0000 (---------------) + I nexus
- 0x34e09282, // n0x01da c0x00d3 (n0x1305-n0x130f) + I nf
- 0x35201f02, // n0x01db c0x00d4 (n0x130f-n0x1318) + I ng
- 0x00224203, // n0x01dc c0x0000 (---------------) + I ngo
- 0x0026af03, // n0x01dd c0x0000 (---------------) + I nhk
- 0x01604802, // n0x01de c0x0005 (---------------)* o I ni
- 0x002cf5c5, // n0x01df c0x0000 (---------------) + I ninja
- 0x0024e546, // n0x01e0 c0x0000 (---------------) + I nissan
- 0x35644442, // n0x01e1 c0x00d5 (n0x1318-n0x131b) + I nl
- 0x35a01b82, // n0x01e2 c0x00d6 (n0x131b-n0x15f1) + I no
- 0x01605942, // n0x01e3 c0x0005 (---------------)* o I np
- 0x3de12642, // n0x01e4 c0x00f7 (n0x1619-n0x1620) + I nr
- 0x002eb6c3, // n0x01e5 c0x0000 (---------------) + I nra
- 0x00323643, // n0x01e6 c0x0000 (---------------) + I nrw
- 0x3e2267c2, // n0x01e7 c0x00f8 (n0x1620-n0x1623) + I nu
- 0x00215183, // n0x01e8 c0x0000 (---------------) + I nyc
- 0x3e60b642, // n0x01e9 c0x00f9 (n0x1623-n0x1633) + I nz
- 0x0021e607, // n0x01ea c0x0000 (---------------) + I okinawa
- 0x3ee0f9c2, // n0x01eb c0x00fb (n0x1634-n0x163d) + I om
- 0x0022c243, // n0x01ec c0x0000 (---------------) + I ong
- 0x0030ac03, // n0x01ed c0x0000 (---------------) + I onl
- 0x00251103, // n0x01ee c0x0000 (---------------) + I ooo
- 0x00237a46, // n0x01ef c0x0000 (---------------) + I oracle
- 0x3f21f5c3, // n0x01f0 c0x00fc (n0x163d-n0x1672) + I org
- 0x0024a347, // n0x01f1 c0x0000 (---------------) + I organic
- 0x002589c6, // n0x01f2 c0x0000 (---------------) + I otsuka
- 0x00245483, // n0x01f3 c0x0000 (---------------) + I ovh
- 0x3fa001c2, // n0x01f4 c0x00fe (n0x1674-n0x167f) + I pa
- 0x0024dcc5, // n0x01f5 c0x0000 (---------------) + I paris
- 0x00259e08, // n0x01f6 c0x0000 (---------------) + I partners
- 0x002ff745, // n0x01f7 c0x0000 (---------------) + I parts
- 0x3fe02142, // n0x01f8 c0x00ff (n0x167f-n0x1686) + I pe
- 0x4034d302, // n0x01f9 c0x0100 (n0x1686-n0x1689) + I pf
- 0x01622d02, // n0x01fa c0x0005 (---------------)* o I pg
- 0x40605c82, // n0x01fb c0x0101 (n0x1689-n0x1691) + I ph
- 0x002cfb08, // n0x01fc c0x0000 (---------------) + I pharmacy
- 0x002cb785, // n0x01fd c0x0000 (---------------) + I photo
- 0x002ce1cb, // n0x01fe c0x0000 (---------------) + I photography
- 0x002cb786, // n0x01ff c0x0000 (---------------) + I photos
- 0x002ce3c6, // n0x0200 c0x0000 (---------------) + I physio
- 0x0023af04, // n0x0201 c0x0000 (---------------) + I pics
- 0x002ce546, // n0x0202 c0x0000 (---------------) + I pictet
- 0x002cea48, // n0x0203 c0x0000 (---------------) + I pictures
- 0x002cf484, // n0x0204 c0x0000 (---------------) + I pink
- 0x002d0cc5, // n0x0205 c0x0000 (---------------) + I pizza
- 0x40ad0e02, // n0x0206 c0x0102 (n0x1691-n0x169f) + I pk
- 0x40e0bf42, // n0x0207 c0x0103 (n0x169f-n0x174a) + I pl
- 0x0020bf45, // n0x0208 c0x0000 (---------------) + I place
- 0x002d44c8, // n0x0209 c0x0000 (---------------) + I plumbing
- 0x00286f82, // n0x020a c0x0000 (---------------) + I pm
- 0x416a9f82, // n0x020b c0x0105 (n0x1753-n0x1758) + I pn
- 0x002d5004, // n0x020c c0x0000 (---------------) + I pohl
- 0x002d5105, // n0x020d c0x0000 (---------------) + I poker
- 0x002d6fc4, // n0x020e c0x0000 (---------------) + I post
- 0x41a487c2, // n0x020f c0x0106 (n0x1758-n0x1765) + I pr
- 0x0026d845, // n0x0210 c0x0000 (---------------) + I praxi
- 0x002487c5, // n0x0211 c0x0000 (---------------) + I press
- 0x41ed8443, // n0x0212 c0x0107 (n0x1765-n0x176c) + I pro
- 0x002d86c4, // n0x0213 c0x0000 (---------------) + I prod
- 0x002d86cb, // n0x0214 c0x0000 (---------------) + I productions
- 0x002d9104, // n0x0215 c0x0000 (---------------) + I prof
- 0x002dac8a, // n0x0216 c0x0000 (---------------) + I properties
- 0x002db308, // n0x0217 c0x0000 (---------------) + I property
- 0x42216282, // n0x0218 c0x0108 (n0x176c-n0x1773) + I ps
- 0x426226c2, // n0x0219 c0x0109 (n0x1773-n0x177c) + I pt
- 0x00200f43, // n0x021a c0x0000 (---------------) + I pub
- 0x42b67582, // n0x021b c0x010a (n0x177c-n0x1782) + I pw
- 0x42eb1ac2, // n0x021c c0x010b (n0x1782-n0x1789) + I py
- 0x43305f42, // n0x021d c0x010c (n0x1789-n0x1791) + I qa
- 0x00260b44, // n0x021e c0x0000 (---------------) + I qpon
- 0x00215b86, // n0x021f c0x0000 (---------------) + I quebec
- 0x436039c2, // n0x0220 c0x010d (n0x1791-n0x1795) + I re
- 0x0030a107, // n0x0221 c0x0000 (---------------) + I realtor
- 0x00246a87, // n0x0222 c0x0000 (---------------) + I recipes
- 0x0023e843, // n0x0223 c0x0000 (---------------) + I red
- 0x00254945, // n0x0224 c0x0000 (---------------) + I rehab
- 0x0026dd45, // n0x0225 c0x0000 (---------------) + I reise
- 0x0026dd46, // n0x0226 c0x0000 (---------------) + I reisen
- 0x002039c3, // n0x0227 c0x0000 (---------------) + I ren
- 0x002e5ec7, // n0x0228 c0x0000 (---------------) + I rentals
- 0x0027f886, // n0x0229 c0x0000 (---------------) + I repair
- 0x002b30c6, // n0x022a c0x0000 (---------------) + I report
- 0x002aa50a, // n0x022b c0x0000 (---------------) + I republican
- 0x00242484, // n0x022c c0x0000 (---------------) + I rest
- 0x0024248a, // n0x022d c0x0000 (---------------) + I restaurant
- 0x00222f47, // n0x022e c0x0000 (---------------) + I reviews
- 0x0029c984, // n0x022f c0x0000 (---------------) + I rich
- 0x00230343, // n0x0230 c0x0000 (---------------) + I rio
- 0x002d3d03, // n0x0231 c0x0000 (---------------) + I rip
- 0x43a00c02, // n0x0232 c0x010e (n0x1795-n0x17a1) + I ro
- 0x002ac705, // n0x0233 c0x0000 (---------------) + I rocks
- 0x002bd845, // n0x0234 c0x0000 (---------------) + I rodeo
- 0x43e0ac02, // n0x0235 c0x010f (n0x17a1-n0x17a7) + I rs
- 0x00360ac4, // n0x0236 c0x0000 (---------------) + I rsvp
- 0x4420c6c2, // n0x0237 c0x0110 (n0x17a7-n0x182b) + I ru
- 0x00285344, // n0x0238 c0x0000 (---------------) + I ruhr
- 0x4470e842, // n0x0239 c0x0111 (n0x182b-n0x1834) + I rw
- 0x00279a86, // n0x023a c0x0000 (---------------) + I ryukyu
- 0x44a02882, // n0x023b c0x0112 (n0x1834-n0x183c) + I sa
- 0x00261948, // n0x023c c0x0000 (---------------) + I saarland
- 0x0023afc7, // n0x023d c0x0000 (---------------) + I samsung
- 0x00239243, // n0x023e c0x0000 (---------------) + I sap
- 0x002442c4, // n0x023f c0x0000 (---------------) + I sarl
- 0x44e31a42, // n0x0240 c0x0113 (n0x183c-n0x1841) + I sb
- 0x45218bc2, // n0x0241 c0x0114 (n0x1841-n0x1846) + I sc
- 0x00225903, // n0x0242 c0x0000 (---------------) + I sca
- 0x003677c3, // n0x0243 c0x0000 (---------------) + I scb
- 0x00275c47, // n0x0244 c0x0000 (---------------) + I schmidt
- 0x002ff84c, // n0x0245 c0x0000 (---------------) + I scholarships
- 0x0032d386, // n0x0246 c0x0000 (---------------) + I schule
- 0x0024e844, // n0x0247 c0x0000 (---------------) + I scot
- 0x45602002, // n0x0248 c0x0115 (n0x1846-n0x184e) + I sd
- 0x45a06d42, // n0x0249 c0x0116 (n0x184e-n0x1877) + I se
- 0x003088c4, // n0x024a c0x0000 (---------------) + I seat
- 0x002a6888, // n0x024b c0x0000 (---------------) + I services
- 0x002b8643, // n0x024c c0x0000 (---------------) + I sew
- 0x002488c4, // n0x024d c0x0000 (---------------) + I sexy
- 0x45e03a82, // n0x024e c0x0117 (n0x1877-n0x187e) + I sg
- 0x46200942, // n0x024f c0x0118 (n0x187e-n0x1883) + I sh
- 0x002eb185, // n0x0250 c0x0000 (---------------) + I sharp
- 0x002513c7, // n0x0251 c0x0000 (---------------) + I shiksha
- 0x0022e185, // n0x0252 c0x0000 (---------------) + I shoes
- 0x002dddc7, // n0x0253 c0x0000 (---------------) + I shriram
- 0x00204682, // n0x0254 c0x0000 (---------------) + I si
- 0x0021c247, // n0x0255 c0x0000 (---------------) + I singles
- 0x00221882, // n0x0256 c0x0000 (---------------) + I sj
- 0x46602202, // n0x0257 c0x0119 (n0x1883-n0x1884) + I sk
- 0x00262103, // n0x0258 c0x0000 (---------------) + I sky
- 0x46a08e82, // n0x0259 c0x011a (n0x1884-n0x1889) + I sl
- 0x00229dc2, // n0x025a c0x0000 (---------------) + I sm
- 0x46e0dd82, // n0x025b c0x011b (n0x1889-n0x1890) + I sn
- 0x47206102, // n0x025c c0x011c (n0x1890-n0x1893) + I so
- 0x002ad3c6, // n0x025d c0x0000 (---------------) + I social
- 0x0027c088, // n0x025e c0x0000 (---------------) + I software
- 0x0024b584, // n0x025f c0x0000 (---------------) + I sohu
- 0x002e1705, // n0x0260 c0x0000 (---------------) + I solar
- 0x002e1c89, // n0x0261 c0x0000 (---------------) + I solutions
- 0x00214403, // n0x0262 c0x0000 (---------------) + I soy
- 0x002e5c85, // n0x0263 c0x0000 (---------------) + I space
- 0x002e8c87, // n0x0264 c0x0000 (---------------) + I spiegel
- 0x002c4342, // n0x0265 c0x0000 (---------------) + I sr
- 0x47605502, // n0x0266 c0x011d (n0x1893-n0x189f) + I st
- 0x00204102, // n0x0267 c0x0000 (---------------) + I su
- 0x002b7708, // n0x0268 c0x0000 (---------------) + I supplies
- 0x002e7046, // n0x0269 c0x0000 (---------------) + I supply
- 0x00296947, // n0x026a c0x0000 (---------------) + I support
- 0x00366884, // n0x026b c0x0000 (---------------) + I surf
- 0x002db147, // n0x026c c0x0000 (---------------) + I surgery
- 0x002ebb06, // n0x026d c0x0000 (---------------) + I suzuki
- 0x47a40a82, // n0x026e c0x011e (n0x189f-n0x18a4) + I sv
- 0x47eee302, // n0x026f c0x011f (n0x18a4-n0x18a5) + I sx
- 0x482162c2, // n0x0270 c0x0120 (n0x18a5-n0x18ab) + I sy
- 0x002874c7, // n0x0271 c0x0000 (---------------) + I systems
- 0x486081c2, // n0x0272 c0x0121 (n0x18ab-n0x18ae) + I sz
- 0x00314246, // n0x0273 c0x0000 (---------------) + I taipei
- 0x00224b05, // n0x0274 c0x0000 (---------------) + I tatar
- 0x002a0b06, // n0x0275 c0x0000 (---------------) + I tattoo
- 0x002a24c3, // n0x0276 c0x0000 (---------------) + I tax
- 0x002005c2, // n0x0277 c0x0000 (---------------) + I tc
- 0x48a07942, // n0x0278 c0x0122 (n0x18ae-n0x18af) + I td
- 0x00301d8a, // n0x0279 c0x0000 (---------------) + I technology
- 0x00223b03, // n0x027a c0x0000 (---------------) + I tel
- 0x0023c007, // n0x027b c0x0000 (---------------) + I temasek
- 0x00209142, // n0x027c c0x0000 (---------------) + I tf
- 0x00230a42, // n0x027d c0x0000 (---------------) + I tg
- 0x48e061c2, // n0x027e c0x0123 (n0x18af-n0x18b6) + I th
- 0x00220d46, // n0x027f c0x0000 (---------------) + I tienda
- 0x00367704, // n0x0280 c0x0000 (---------------) + I tips
- 0x002b3545, // n0x0281 c0x0000 (---------------) + I tirol
- 0x492412c2, // n0x0282 c0x0124 (n0x18b6-n0x18c5) + I tj
- 0x00205802, // n0x0283 c0x0000 (---------------) + I tk
- 0x4961c142, // n0x0284 c0x0125 (n0x18c5-n0x18c6) + I tl
- 0x49a00142, // n0x0285 c0x0126 (n0x18c6-n0x18ce) + I tm
- 0x49e03f82, // n0x0286 c0x0127 (n0x18ce-n0x18e2) + I tn
- 0x4a201202, // n0x0287 c0x0128 (n0x18e2-n0x18e8) + I to
- 0x00209e45, // n0x0288 c0x0000 (---------------) + I today
- 0x002d8e85, // n0x0289 c0x0000 (---------------) + I tokyo
- 0x002a0bc5, // n0x028a c0x0000 (---------------) + I tools
- 0x002997c3, // n0x028b c0x0000 (---------------) + I top
- 0x002cb847, // n0x028c c0x0000 (---------------) + I toshiba
- 0x002ed844, // n0x028d c0x0000 (---------------) + I town
- 0x00260f04, // n0x028e c0x0000 (---------------) + I toys
- 0x00219e42, // n0x028f c0x0000 (---------------) + I tp
- 0x4a605542, // n0x0290 c0x0129 (n0x18e8-n0x18fd) + I tr
- 0x0022ee85, // n0x0291 c0x0000 (---------------) + I trade
- 0x002639c8, // n0x0292 c0x0000 (---------------) + I training
- 0x00296ac6, // n0x0293 c0x0000 (---------------) + I travel
- 0x4ae04ec2, // n0x0294 c0x012b (n0x18fe-n0x190f) + I tt
- 0x002ef203, // n0x0295 c0x0000 (---------------) + I tui
- 0x4b292602, // n0x0296 c0x012c (n0x190f-n0x1913) + I tv
- 0x4b608d02, // n0x0297 c0x012d (n0x1913-n0x1921) + I tw
- 0x4ba45f42, // n0x0298 c0x012e (n0x1921-n0x192d) + I tz
- 0x4be13582, // n0x0299 c0x012f (n0x192d-n0x197b) + I ua
- 0x4c204142, // n0x029a c0x0130 (n0x197b-n0x1983) + I ug
- 0x4c600402, // n0x029b c0x0131 (n0x1983-n0x198e) + I uk
- 0x003688ca, // n0x029c c0x0000 (---------------) + I university
- 0x00222b03, // n0x029d c0x0000 (---------------) + I uno
- 0x002561c3, // n0x029e c0x0000 (---------------) + I uol
- 0x4d2054c2, // n0x029f c0x0134 (n0x1990-n0x19cf) + I us
- 0x5b6193c2, // n0x02a0 c0x016d (n0x1a72-n0x1a78) + I uy
- 0x5ba01442, // n0x02a1 c0x016e (n0x1a78-n0x1a7c) + I uz
- 0x002000c2, // n0x02a2 c0x0000 (---------------) + I va
- 0x002703c9, // n0x02a3 c0x0000 (---------------) + I vacations
- 0x5bef1142, // n0x02a4 c0x016f (n0x1a7c-n0x1a82) + I vc
- 0x5c202642, // n0x02a5 c0x0170 (n0x1a82-n0x1a93) + I ve
- 0x002f1d05, // n0x02a6 c0x0000 (---------------) + I vegas
- 0x00238208, // n0x02a7 c0x0000 (---------------) + I ventures
- 0x002f31cc, // n0x02a8 c0x0000 (---------------) + I versicherung
- 0x0023bf43, // n0x02a9 c0x0000 (---------------) + I vet
- 0x00243d02, // n0x02aa c0x0000 (---------------) + I vg
- 0x5c6032c2, // n0x02ab c0x0171 (n0x1a93-n0x1a98) + I vi
- 0x002c1806, // n0x02ac c0x0000 (---------------) + I viajes
- 0x002f6a06, // n0x02ad c0x0000 (---------------) + I villas
- 0x00238dc6, // n0x02ae c0x0000 (---------------) + I vision
- 0x0032b58a, // n0x02af c0x0000 (---------------) + I vlaanderen
- 0x5ca0ff42, // n0x02b0 c0x0172 (n0x1a98-n0x1aa4) + I vn
- 0x00317385, // n0x02b1 c0x0000 (---------------) + I vodka
- 0x002fb0c4, // n0x02b2 c0x0000 (---------------) + I vote
- 0x002fb1c6, // n0x02b3 c0x0000 (---------------) + I voting
- 0x002fb344, // n0x02b4 c0x0000 (---------------) + I voto
- 0x002220c6, // n0x02b5 c0x0000 (---------------) + I voyage
- 0x5ce03ec2, // n0x02b6 c0x0173 (n0x1aa4-n0x1aa8) + I vu
- 0x002d0105, // n0x02b7 c0x0000 (---------------) + I wales
- 0x00253784, // n0x02b8 c0x0000 (---------------) + I wang
- 0x00200545, // n0x02b9 c0x0000 (---------------) + I watch
- 0x0021f2c6, // n0x02ba c0x0000 (---------------) + I webcam
- 0x00205e47, // n0x02bb c0x0000 (---------------) + I website
- 0x002d6bc3, // n0x02bc c0x0000 (---------------) + I wed
- 0x0031e4c7, // n0x02bd c0x0000 (---------------) + I wedding
- 0x00210a42, // n0x02be c0x0000 (---------------) + I wf
- 0x00229ac7, // n0x02bf c0x0000 (---------------) + I whoswho
- 0x0031b984, // n0x02c0 c0x0000 (---------------) + I wien
- 0x0024ebc4, // n0x02c1 c0x0000 (---------------) + I wiki
- 0x0022fccb, // n0x02c2 c0x0000 (---------------) + I williamhill
- 0x0029fc43, // n0x02c3 c0x0000 (---------------) + I wme
- 0x00224704, // n0x02c4 c0x0000 (---------------) + I work
- 0x0024f485, // n0x02c5 c0x0000 (---------------) + I works
- 0x00353805, // n0x02c6 c0x0000 (---------------) + I world
- 0x5d208182, // n0x02c7 c0x0174 (n0x1aa8-n0x1aaf) + I ws
- 0x002adb03, // n0x02c8 c0x0000 (---------------) + I wtc
- 0x002ba843, // n0x02c9 c0x0000 (---------------) + I wtf
- 0x0024184b, // n0x02ca c0x0000 (---------------) + I xn--1qqw23a
- 0x002595ca, // n0x02cb c0x0000 (---------------) + I xn--30rr7y
- 0x0025dc4b, // n0x02cc c0x0000 (---------------) + I xn--3bst00m
- 0x0026fbcb, // n0x02cd c0x0000 (---------------) + I xn--3ds443g
- 0x0027d6cc, // n0x02ce c0x0000 (---------------) + I xn--3e0b707e
- 0x0029f3cb, // n0x02cf c0x0000 (---------------) + I xn--45brj9c
- 0x002a1aca, // n0x02d0 c0x0000 (---------------) + I xn--45q11c
- 0x002cc5ca, // n0x02d1 c0x0000 (---------------) + I xn--4gbrim
- 0x002cd40e, // n0x02d2 c0x0000 (---------------) + I xn--54b7fta0cc
- 0x002ee34b, // n0x02d3 c0x0000 (---------------) + I xn--55qw42g
- 0x003732ca, // n0x02d4 c0x0000 (---------------) + I xn--55qx5d
- 0x0037428b, // n0x02d5 c0x0000 (---------------) + I xn--6frz82g
- 0x0037528e, // n0x02d6 c0x0000 (---------------) + I xn--6qq986b3xl
- 0x002fbd0c, // n0x02d7 c0x0000 (---------------) + I xn--80adxhks
- 0x002fc28b, // n0x02d8 c0x0000 (---------------) + I xn--80ao21a
- 0x002fc54c, // n0x02d9 c0x0000 (---------------) + I xn--80asehdb
- 0x002fd1ca, // n0x02da c0x0000 (---------------) + I xn--80aswg
- 0x5d6fe10a, // n0x02db c0x0175 (n0x1aaf-n0x1ab5) + I xn--90a3ac
- 0x0030080a, // n0x02dc c0x0000 (---------------) + I xn--9et52u
- 0x00303e0e, // n0x02dd c0x0000 (---------------) + I xn--b4w605ferd
- 0x0030bdc9, // n0x02de c0x0000 (---------------) + I xn--c1avg
- 0x0030c00a, // n0x02df c0x0000 (---------------) + I xn--cg4bki
- 0x0030ce56, // n0x02e0 c0x0000 (---------------) + I xn--clchc0ea0b2g2a9gcd
- 0x0030e1cb, // n0x02e1 c0x0000 (---------------) + I xn--czr694b
- 0x00312f4a, // n0x02e2 c0x0000 (---------------) + I xn--czrs0t
- 0x0031344a, // n0x02e3 c0x0000 (---------------) + I xn--czru2d
- 0x00318a8b, // n0x02e4 c0x0000 (---------------) + I xn--d1acj3b
- 0x0031c0cb, // n0x02e5 c0x0000 (---------------) + I xn--efvy88h
- 0x0031d38e, // n0x02e6 c0x0000 (---------------) + I xn--fiq228c5hs
- 0x0031dd8a, // n0x02e7 c0x0000 (---------------) + I xn--fiq64b
- 0x0031ed0a, // n0x02e8 c0x0000 (---------------) + I xn--fiqs8s
- 0x0031f38a, // n0x02e9 c0x0000 (---------------) + I xn--fiqz9s
- 0x0031ff4b, // n0x02ea c0x0000 (---------------) + I xn--fjq720a
- 0x0032078b, // n0x02eb c0x0000 (---------------) + I xn--flw351e
- 0x00320a4d, // n0x02ec c0x0000 (---------------) + I xn--fpcrj9c3d
- 0x00321b0d, // n0x02ed c0x0000 (---------------) + I xn--fzc2c9e2c
- 0x003230cb, // n0x02ee c0x0000 (---------------) + I xn--gecrj9c
- 0x0032634b, // n0x02ef c0x0000 (---------------) + I xn--h2brj9c
- 0x0032a28b, // n0x02f0 c0x0000 (---------------) + I xn--hxt814e
- 0x0032ad0f, // n0x02f1 c0x0000 (---------------) + I xn--i1b6b1a6a2e
- 0x0032b80a, // n0x02f2 c0x0000 (---------------) + I xn--io0a7i
- 0x0032ca89, // n0x02f3 c0x0000 (---------------) + I xn--j1amh
- 0x0032d54b, // n0x02f4 c0x0000 (---------------) + I xn--j6w193g
- 0x0032fb4b, // n0x02f5 c0x0000 (---------------) + I xn--kprw13d
- 0x0032fe0b, // n0x02f6 c0x0000 (---------------) + I xn--kpry57d
- 0x003300ca, // n0x02f7 c0x0000 (---------------) + I xn--kput3i
- 0x00333949, // n0x02f8 c0x0000 (---------------) + I xn--l1acc
- 0x0033648f, // n0x02f9 c0x0000 (---------------) + I xn--lgbbat1ad8j
- 0x00339e0c, // n0x02fa c0x0000 (---------------) + I xn--mgb2ddes
- 0x0033a48c, // n0x02fb c0x0000 (---------------) + I xn--mgb9awbf
- 0x0033accf, // n0x02fc c0x0000 (---------------) + I xn--mgba3a4f16a
- 0x0033b08e, // n0x02fd c0x0000 (---------------) + I xn--mgba3a4fra
- 0x0033b60e, // n0x02fe c0x0000 (---------------) + I xn--mgbaam7a8h
- 0x0033bb4c, // n0x02ff c0x0000 (---------------) + I xn--mgbab2bd
- 0x0033be4e, // n0x0300 c0x0000 (---------------) + I xn--mgbayh7gpa
- 0x0033c28e, // n0x0301 c0x0000 (---------------) + I xn--mgbbh1a71e
- 0x0033c60f, // n0x0302 c0x0000 (---------------) + I xn--mgbc0a9azcg
- 0x0033c9d3, // n0x0303 c0x0000 (---------------) + I xn--mgberp4a5d4a87g
- 0x0033ce91, // n0x0304 c0x0000 (---------------) + I xn--mgberp4a5d4ar
- 0x0033d2d3, // n0x0305 c0x0000 (---------------) + I xn--mgbqly7c0a67fbc
- 0x0033d810, // n0x0306 c0x0000 (---------------) + I xn--mgbqly7cvafr
- 0x0033e04c, // n0x0307 c0x0000 (---------------) + I xn--mgbtf8fl
- 0x0033e7ce, // n0x0308 c0x0000 (---------------) + I xn--mgbx4cd0ab
- 0x00348b0a, // n0x0309 c0x0000 (---------------) + I xn--mxtq1m
- 0x00348ecc, // n0x030a c0x0000 (---------------) + I xn--ngbc5azd
- 0x00349e4b, // n0x030b c0x0000 (---------------) + I xn--nnx388a
- 0x0034a108, // n0x030c c0x0000 (---------------) + I xn--node
- 0x0034a549, // n0x030d c0x0000 (---------------) + I xn--nqv7f
- 0x0034a54f, // n0x030e c0x0000 (---------------) + I xn--nqv7fs00ema
- 0x0034c04a, // n0x030f c0x0000 (---------------) + I xn--o3cw4h
- 0x0034d14c, // n0x0310 c0x0000 (---------------) + I xn--ogbpf8fl
- 0x0034e289, // n0x0311 c0x0000 (---------------) + I xn--p1acf
- 0x0034e588, // n0x0312 c0x0000 (---------------) + I xn--p1ai
- 0x0034ea4b, // n0x0313 c0x0000 (---------------) + I xn--pgbs0dh
- 0x0034f64b, // n0x0314 c0x0000 (---------------) + I xn--q9jyb4c
- 0x0035038c, // n0x0315 c0x0000 (---------------) + I xn--qcka1pmc
- 0x0035394b, // n0x0316 c0x0000 (---------------) + I xn--rhqv96g
- 0x00357b8b, // n0x0317 c0x0000 (---------------) + I xn--s9brj9c
- 0x0035938b, // n0x0318 c0x0000 (---------------) + I xn--ses554g
- 0x00364c8a, // n0x0319 c0x0000 (---------------) + I xn--unup4y
- 0x00365917, // n0x031a c0x0000 (---------------) + I xn--vermgensberater-ctb
- 0x00367058, // n0x031b c0x0000 (---------------) + I xn--vermgensberatung-pwb
- 0x0036edc9, // n0x031c c0x0000 (---------------) + I xn--vhquv
- 0x0037060a, // n0x031d c0x0000 (---------------) + I xn--wgbh1c
- 0x00370b8a, // n0x031e c0x0000 (---------------) + I xn--wgbl6a
- 0x00370e0b, // n0x031f c0x0000 (---------------) + I xn--xhq521b
- 0x00371910, // n0x0320 c0x0000 (---------------) + I xn--xkc2al3hye2a
- 0x00371d11, // n0x0321 c0x0000 (---------------) + I xn--xkc2dl3a5ee0h
- 0x003728cd, // n0x0322 c0x0000 (---------------) + I xn--yfro4i67o
- 0x00372fcd, // n0x0323 c0x0000 (---------------) + I xn--ygbi2ammx
- 0x0037454b, // n0x0324 c0x0000 (---------------) + I xn--zfr164b
- 0x00375203, // n0x0325 c0x0000 (---------------) + I xxx
- 0x00248943, // n0x0326 c0x0000 (---------------) + I xyz
- 0x00234646, // n0x0327 c0x0000 (---------------) + I yachts
- 0x003062c6, // n0x0328 c0x0000 (---------------) + I yandex
- 0x016176c2, // n0x0329 c0x0005 (---------------)* o I ye
- 0x0036b484, // n0x032a c0x0000 (---------------) + I yoga
- 0x00311a88, // n0x032b c0x0000 (---------------) + I yokohama
- 0x00200d47, // n0x032c c0x0000 (---------------) + I youtube
- 0x00262082, // n0x032d c0x0000 (---------------) + I yt
- 0x01603502, // n0x032e c0x0005 (---------------)* o I za
- 0x00259d83, // n0x032f c0x0000 (---------------) + I zip
- 0x016869c2, // n0x0330 c0x0005 (---------------)* o I zm
- 0x002d4f04, // n0x0331 c0x0000 (---------------) + I zone
- 0x016dbb42, // n0x0332 c0x0005 (---------------)* o I zw
- 0x00222603, // n0x0333 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0334 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0335 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x0336 c0x0000 (---------------) + I mil
- 0x00201603, // n0x0337 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0338 c0x0000 (---------------) + I org
- 0x00214103, // n0x0339 c0x0000 (---------------) + I nom
- 0x00201d82, // n0x033a c0x0000 (---------------) + I ac
- 0x00207a02, // n0x033b c0x0000 (---------------) + I co
- 0x002157c3, // n0x033c c0x0000 (---------------) + I gov
- 0x0023f703, // n0x033d c0x0000 (---------------) + I mil
- 0x00201603, // n0x033e c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x033f c0x0000 (---------------) + I org
- 0x002526c3, // n0x0340 c0x0000 (---------------) + I sch
- 0x00307ed6, // n0x0341 c0x0000 (---------------) + I accident-investigation
- 0x0030a7d3, // n0x0342 c0x0000 (---------------) + I accident-prevention
- 0x0027a1c9, // n0x0343 c0x0000 (---------------) + I aerobatic
- 0x002a4188, // n0x0344 c0x0000 (---------------) + I aeroclub
- 0x002eed49, // n0x0345 c0x0000 (---------------) + I aerodrome
- 0x0030c586, // n0x0346 c0x0000 (---------------) + I agents
- 0x00310390, // n0x0347 c0x0000 (---------------) + I air-surveillance
- 0x0027f953, // n0x0348 c0x0000 (---------------) + I air-traffic-control
- 0x00257088, // n0x0349 c0x0000 (---------------) + I aircraft
- 0x00276387, // n0x034a c0x0000 (---------------) + I airline
- 0x00352647, // n0x034b c0x0000 (---------------) + I airport
- 0x0029baca, // n0x034c c0x0000 (---------------) + I airtraffic
- 0x002c5389, // n0x034d c0x0000 (---------------) + I ambulance
- 0x00333d89, // n0x034e c0x0000 (---------------) + I amusement
- 0x0029cfcb, // n0x034f c0x0000 (---------------) + I association
- 0x00310b86, // n0x0350 c0x0000 (---------------) + I author
- 0x00311f0a, // n0x0351 c0x0000 (---------------) + I ballooning
- 0x0021d2c6, // n0x0352 c0x0000 (---------------) + I broker
- 0x0036b0c3, // n0x0353 c0x0000 (---------------) + I caa
- 0x00215205, // n0x0354 c0x0000 (---------------) + I cargo
- 0x00247d08, // n0x0355 c0x0000 (---------------) + I catering
- 0x002c554d, // n0x0356 c0x0000 (---------------) + I certification
- 0x0030ff4c, // n0x0357 c0x0000 (---------------) + I championship
- 0x00329307, // n0x0358 c0x0000 (---------------) + I charter
- 0x0037084d, // n0x0359 c0x0000 (---------------) + I civilaviation
- 0x002a4284, // n0x035a c0x0000 (---------------) + I club
- 0x00234b0a, // n0x035b c0x0000 (---------------) + I conference
- 0x00235bca, // n0x035c c0x0000 (---------------) + I consultant
- 0x0023608a, // n0x035d c0x0000 (---------------) + I consulting
- 0x0022f147, // n0x035e c0x0000 (---------------) + I control
- 0x0023dbc7, // n0x035f c0x0000 (---------------) + I council
- 0x0023f544, // n0x0360 c0x0000 (---------------) + I crew
- 0x00255d86, // n0x0361 c0x0000 (---------------) + I design
- 0x003128c4, // n0x0362 c0x0000 (---------------) + I dgca
- 0x002d9688, // n0x0363 c0x0000 (---------------) + I educator
- 0x0020c049, // n0x0364 c0x0000 (---------------) + I emergency
- 0x002c3ec6, // n0x0365 c0x0000 (---------------) + I engine
- 0x002c3ec8, // n0x0366 c0x0000 (---------------) + I engineer
- 0x00240fcd, // n0x0367 c0x0000 (---------------) + I entertainment
- 0x00356f09, // n0x0368 c0x0000 (---------------) + I equipment
- 0x00208248, // n0x0369 c0x0000 (---------------) + I exchange
- 0x00248747, // n0x036a c0x0000 (---------------) + I express
- 0x0022e3ca, // n0x036b c0x0000 (---------------) + I federation
- 0x0024a046, // n0x036c c0x0000 (---------------) + I flight
- 0x00259847, // n0x036d c0x0000 (---------------) + I freight
- 0x002dc3c4, // n0x036e c0x0000 (---------------) + I fuel
- 0x0022a947, // n0x036f c0x0000 (---------------) + I gliding
- 0x0026608a, // n0x0370 c0x0000 (---------------) + I government
- 0x00231b4e, // n0x0371 c0x0000 (---------------) + I groundhandling
- 0x002248c5, // n0x0372 c0x0000 (---------------) + I group
- 0x00285d4b, // n0x0373 c0x0000 (---------------) + I hanggliding
- 0x0021fe49, // n0x0374 c0x0000 (---------------) + I homebuilt
- 0x00358ac9, // n0x0375 c0x0000 (---------------) + I insurance
- 0x002481c7, // n0x0376 c0x0000 (---------------) + I journal
- 0x002d234a, // n0x0377 c0x0000 (---------------) + I journalist
- 0x0021c187, // n0x0378 c0x0000 (---------------) + I leasing
- 0x0024ba49, // n0x0379 c0x0000 (---------------) + I logistics
- 0x002b4788, // n0x037a c0x0000 (---------------) + I magazine
- 0x0031498b, // n0x037b c0x0000 (---------------) + I maintenance
- 0x0035a34b, // n0x037c c0x0000 (---------------) + I marketplace
- 0x0027ab45, // n0x037d c0x0000 (---------------) + I media
- 0x00244c4a, // n0x037e c0x0000 (---------------) + I microlight
- 0x0022ab09, // n0x037f c0x0000 (---------------) + I modelling
- 0x00203c0a, // n0x0380 c0x0000 (---------------) + I navigation
- 0x00201ccb, // n0x0381 c0x0000 (---------------) + I parachuting
- 0x0022a84b, // n0x0382 c0x0000 (---------------) + I paragliding
- 0x0029cd55, // n0x0383 c0x0000 (---------------) + I passenger-association
- 0x002cf085, // n0x0384 c0x0000 (---------------) + I pilot
- 0x002487c5, // n0x0385 c0x0000 (---------------) + I press
- 0x002d86ca, // n0x0386 c0x0000 (---------------) + I production
- 0x0022778a, // n0x0387 c0x0000 (---------------) + I recreation
- 0x0021fbc7, // n0x0388 c0x0000 (---------------) + I repbody
- 0x00218b43, // n0x0389 c0x0000 (---------------) + I res
- 0x002aa848, // n0x038a c0x0000 (---------------) + I research
- 0x002c970a, // n0x038b c0x0000 (---------------) + I rotorcraft
- 0x00281286, // n0x038c c0x0000 (---------------) + I safety
- 0x0028d289, // n0x038d c0x0000 (---------------) + I scientist
- 0x002a6888, // n0x038e c0x0000 (---------------) + I services
- 0x002ddc84, // n0x038f c0x0000 (---------------) + I show
- 0x00269709, // n0x0390 c0x0000 (---------------) + I skydiving
- 0x0027c088, // n0x0391 c0x0000 (---------------) + I software
- 0x002b11c7, // n0x0392 c0x0000 (---------------) + I student
- 0x002a24c4, // n0x0393 c0x0000 (---------------) + I taxi
- 0x0022ee86, // n0x0394 c0x0000 (---------------) + I trader
- 0x0029e607, // n0x0395 c0x0000 (---------------) + I trading
- 0x002f1b47, // n0x0396 c0x0000 (---------------) + I trainer
- 0x0028dd45, // n0x0397 c0x0000 (---------------) + I union
- 0x0022470c, // n0x0398 c0x0000 (---------------) + I workinggroup
- 0x0024f485, // n0x0399 c0x0000 (---------------) + I works
- 0x00222603, // n0x039a c0x0000 (---------------) + I com
- 0x0027a643, // n0x039b c0x0000 (---------------) + I edu
- 0x002157c3, // n0x039c c0x0000 (---------------) + I gov
- 0x00201603, // n0x039d c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x039e c0x0000 (---------------) + I org
- 0x00207a02, // n0x039f c0x0000 (---------------) + I co
- 0x00222603, // n0x03a0 c0x0000 (---------------) + I com
- 0x00201603, // n0x03a1 c0x0000 (---------------) + I net
- 0x00214103, // n0x03a2 c0x0000 (---------------) + I nom
- 0x0021f5c3, // n0x03a3 c0x0000 (---------------) + I org
- 0x00222603, // n0x03a4 c0x0000 (---------------) + I com
- 0x00201603, // n0x03a5 c0x0000 (---------------) + I net
- 0x0021ef43, // n0x03a6 c0x0000 (---------------) + I off
- 0x0021f5c3, // n0x03a7 c0x0000 (---------------) + I org
- 0x00222603, // n0x03a8 c0x0000 (---------------) + I com
- 0x0027a643, // n0x03a9 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x03aa c0x0000 (---------------) + I gov
- 0x0023f703, // n0x03ab c0x0000 (---------------) + I mil
- 0x00201603, // n0x03ac c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x03ad c0x0000 (---------------) + I org
- 0x00222603, // n0x03ae c0x0000 (---------------) + I com
- 0x0027a643, // n0x03af c0x0000 (---------------) + I edu
- 0x00201603, // n0x03b0 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x03b1 c0x0000 (---------------) + I org
- 0x00207a02, // n0x03b2 c0x0000 (---------------) + I co
- 0x00202542, // n0x03b3 c0x0000 (---------------) + I ed
- 0x002362c2, // n0x03b4 c0x0000 (---------------) + I gv
- 0x002017c2, // n0x03b5 c0x0000 (---------------) + I it
- 0x00200cc2, // n0x03b6 c0x0000 (---------------) + I og
- 0x0021fc42, // n0x03b7 c0x0000 (---------------) + I pb
- 0x04622603, // n0x03b8 c0x0011 (n0x03c1-n0x03c2) + I com
- 0x0027a643, // n0x03b9 c0x0000 (---------------) + I edu
- 0x0020dbc3, // n0x03ba c0x0000 (---------------) + I gob
- 0x002157c3, // n0x03bb c0x0000 (---------------) + I gov
- 0x00223a83, // n0x03bc c0x0000 (---------------) + I int
- 0x0023f703, // n0x03bd c0x0000 (---------------) + I mil
- 0x00201603, // n0x03be c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x03bf c0x0000 (---------------) + I org
- 0x002382c3, // n0x03c0 c0x0000 (---------------) + I tur
- 0x000b8948, // n0x03c1 c0x0000 (---------------) + blogspot
- 0x00250d44, // n0x03c2 c0x0000 (---------------) + I e164
- 0x00343087, // n0x03c3 c0x0000 (---------------) + I in-addr
- 0x0021b783, // n0x03c4 c0x0000 (---------------) + I ip6
- 0x0027cec4, // n0x03c5 c0x0000 (---------------) + I iris
- 0x00209f83, // n0x03c6 c0x0000 (---------------) + I uri
- 0x00234a03, // n0x03c7 c0x0000 (---------------) + I urn
- 0x002157c3, // n0x03c8 c0x0000 (---------------) + I gov
- 0x00201d82, // n0x03c9 c0x0000 (---------------) + I ac
- 0x00114c43, // n0x03ca c0x0000 (---------------) + biz
- 0x05607a02, // n0x03cb c0x0015 (n0x03d0-n0x03d1) + I co
- 0x002362c2, // n0x03cc c0x0000 (---------------) + I gv
- 0x0001c704, // n0x03cd c0x0000 (---------------) + info
- 0x00200bc2, // n0x03ce c0x0000 (---------------) + I or
- 0x000d82c4, // n0x03cf c0x0000 (---------------) + priv
- 0x000b8948, // n0x03d0 c0x0000 (---------------) + blogspot
- 0x00237f03, // n0x03d1 c0x0000 (---------------) + I act
- 0x002adf03, // n0x03d2 c0x0000 (---------------) + I asn
- 0x05e22603, // n0x03d3 c0x0017 (n0x03e3-n0x03e4) + I com
- 0x00234b04, // n0x03d4 c0x0000 (---------------) + I conf
- 0x0627a643, // n0x03d5 c0x0018 (n0x03e4-n0x03ec) + I edu
- 0x066157c3, // n0x03d6 c0x0019 (n0x03ec-n0x03f1) + I gov
- 0x00202f82, // n0x03d7 c0x0000 (---------------) + I id
- 0x0021c704, // n0x03d8 c0x0000 (---------------) + I info
- 0x00201603, // n0x03d9 c0x0000 (---------------) + I net
- 0x002d6b43, // n0x03da c0x0000 (---------------) + I nsw
- 0x0020ddc2, // n0x03db c0x0000 (---------------) + I nt
- 0x0021f5c3, // n0x03dc c0x0000 (---------------) + I org
- 0x00215ec2, // n0x03dd c0x0000 (---------------) + I oz
- 0x0023df03, // n0x03de c0x0000 (---------------) + I qld
- 0x00202882, // n0x03df c0x0000 (---------------) + I sa
- 0x0021ad03, // n0x03e0 c0x0000 (---------------) + I tas
- 0x002a6943, // n0x03e1 c0x0000 (---------------) + I vic
- 0x00200542, // n0x03e2 c0x0000 (---------------) + I wa
- 0x000b8948, // n0x03e3 c0x0000 (---------------) + blogspot
- 0x00237f03, // n0x03e4 c0x0000 (---------------) + I act
- 0x002d6b43, // n0x03e5 c0x0000 (---------------) + I nsw
- 0x0020ddc2, // n0x03e6 c0x0000 (---------------) + I nt
- 0x0023df03, // n0x03e7 c0x0000 (---------------) + I qld
- 0x00202882, // n0x03e8 c0x0000 (---------------) + I sa
- 0x0021ad03, // n0x03e9 c0x0000 (---------------) + I tas
- 0x002a6943, // n0x03ea c0x0000 (---------------) + I vic
- 0x00200542, // n0x03eb c0x0000 (---------------) + I wa
- 0x0023df03, // n0x03ec c0x0000 (---------------) + I qld
- 0x00202882, // n0x03ed c0x0000 (---------------) + I sa
- 0x0021ad03, // n0x03ee c0x0000 (---------------) + I tas
- 0x002a6943, // n0x03ef c0x0000 (---------------) + I vic
- 0x00200542, // n0x03f0 c0x0000 (---------------) + I wa
- 0x00222603, // n0x03f1 c0x0000 (---------------) + I com
- 0x00314c43, // n0x03f2 c0x0000 (---------------) + I biz
- 0x00222603, // n0x03f3 c0x0000 (---------------) + I com
- 0x0027a643, // n0x03f4 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x03f5 c0x0000 (---------------) + I gov
- 0x0021c704, // n0x03f6 c0x0000 (---------------) + I info
- 0x00223a83, // n0x03f7 c0x0000 (---------------) + I int
- 0x0023f703, // n0x03f8 c0x0000 (---------------) + I mil
- 0x0022aec4, // n0x03f9 c0x0000 (---------------) + I name
- 0x00201603, // n0x03fa c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x03fb c0x0000 (---------------) + I org
- 0x00200f02, // n0x03fc c0x0000 (---------------) + I pp
- 0x002d8443, // n0x03fd c0x0000 (---------------) + I pro
- 0x00207a02, // n0x03fe c0x0000 (---------------) + I co
- 0x00222603, // n0x03ff c0x0000 (---------------) + I com
- 0x0027a643, // n0x0400 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0401 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x0402 c0x0000 (---------------) + I mil
- 0x00201603, // n0x0403 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0404 c0x0000 (---------------) + I org
- 0x0020ac02, // n0x0405 c0x0000 (---------------) + I rs
- 0x0030af04, // n0x0406 c0x0000 (---------------) + I unbi
- 0x00274144, // n0x0407 c0x0000 (---------------) + I unsa
- 0x00314c43, // n0x0408 c0x0000 (---------------) + I biz
- 0x00207a02, // n0x0409 c0x0000 (---------------) + I co
- 0x00222603, // n0x040a c0x0000 (---------------) + I com
- 0x0027a643, // n0x040b c0x0000 (---------------) + I edu
- 0x002157c3, // n0x040c c0x0000 (---------------) + I gov
- 0x0021c704, // n0x040d c0x0000 (---------------) + I info
- 0x00201603, // n0x040e c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x040f c0x0000 (---------------) + I org
- 0x002e9885, // n0x0410 c0x0000 (---------------) + I store
- 0x00292602, // n0x0411 c0x0000 (---------------) + I tv
- 0x00201d82, // n0x0412 c0x0000 (---------------) + I ac
- 0x000b8948, // n0x0413 c0x0000 (---------------) + blogspot
- 0x002157c3, // n0x0414 c0x0000 (---------------) + I gov
- 0x0021be81, // n0x0415 c0x0000 (---------------) + I 0
- 0x00206381, // n0x0416 c0x0000 (---------------) + I 1
- 0x0020f681, // n0x0417 c0x0000 (---------------) + I 2
- 0x00205dc1, // n0x0418 c0x0000 (---------------) + I 3
- 0x00250e01, // n0x0419 c0x0000 (---------------) + I 4
- 0x0029f501, // n0x041a c0x0000 (---------------) + I 5
- 0x0021b801, // n0x041b c0x0000 (---------------) + I 6
- 0x002597c1, // n0x041c c0x0000 (---------------) + I 7
- 0x002fbe01, // n0x041d c0x0000 (---------------) + I 8
- 0x0029f601, // n0x041e c0x0000 (---------------) + I 9
- 0x00200101, // n0x041f c0x0000 (---------------) + I a
- 0x00200001, // n0x0420 c0x0000 (---------------) + I b
- 0x00200601, // n0x0421 c0x0000 (---------------) + I c
- 0x00200741, // n0x0422 c0x0000 (---------------) + I d
- 0x00200081, // n0x0423 c0x0000 (---------------) + I e
- 0x002003c1, // n0x0424 c0x0000 (---------------) + I f
- 0x002004c1, // n0x0425 c0x0000 (---------------) + I g
- 0x00200641, // n0x0426 c0x0000 (---------------) + I h
- 0x00200041, // n0x0427 c0x0000 (---------------) + I i
- 0x00201f81, // n0x0428 c0x0000 (---------------) + I j
- 0x00200441, // n0x0429 c0x0000 (---------------) + I k
- 0x00200801, // n0x042a c0x0000 (---------------) + I l
- 0x00200181, // n0x042b c0x0000 (---------------) + I m
- 0x00200241, // n0x042c c0x0000 (---------------) + I n
- 0x00200841, // n0x042d c0x0000 (---------------) + I o
- 0x002001c1, // n0x042e c0x0000 (---------------) + I p
- 0x00206741, // n0x042f c0x0000 (---------------) + I q
- 0x00200a81, // n0x0430 c0x0000 (---------------) + I r
- 0x00200941, // n0x0431 c0x0000 (---------------) + I s
- 0x00200141, // n0x0432 c0x0000 (---------------) + I t
- 0x00200401, // n0x0433 c0x0000 (---------------) + I u
- 0x002000c1, // n0x0434 c0x0000 (---------------) + I v
- 0x00200541, // n0x0435 c0x0000 (---------------) + I w
- 0x00208281, // n0x0436 c0x0000 (---------------) + I x
- 0x00200d41, // n0x0437 c0x0000 (---------------) + I y
- 0x00201481, // n0x0438 c0x0000 (---------------) + I z
- 0x00222603, // n0x0439 c0x0000 (---------------) + I com
- 0x0027a643, // n0x043a c0x0000 (---------------) + I edu
- 0x002157c3, // n0x043b c0x0000 (---------------) + I gov
- 0x00201603, // n0x043c c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x043d c0x0000 (---------------) + I org
- 0x00207a02, // n0x043e c0x0000 (---------------) + I co
- 0x00222603, // n0x043f c0x0000 (---------------) + I com
- 0x0027a643, // n0x0440 c0x0000 (---------------) + I edu
- 0x00200bc2, // n0x0441 c0x0000 (---------------) + I or
- 0x0021f5c3, // n0x0442 c0x0000 (---------------) + I org
- 0x00010c06, // n0x0443 c0x0000 (---------------) + dyndns
- 0x00051b8a, // n0x0444 c0x0000 (---------------) + for-better
- 0x000822c8, // n0x0445 c0x0000 (---------------) + for-more
- 0x000521c8, // n0x0446 c0x0000 (---------------) + for-some
- 0x000529c7, // n0x0447 c0x0000 (---------------) + for-the
- 0x000ff606, // n0x0448 c0x0000 (---------------) + selfip
- 0x0004db86, // n0x0449 c0x0000 (---------------) + webhop
- 0x0029cfc4, // n0x044a c0x0000 (---------------) + I asso
- 0x0030e447, // n0x044b c0x0000 (---------------) + I barreau
- 0x000b8948, // n0x044c c0x0000 (---------------) + blogspot
- 0x00368f84, // n0x044d c0x0000 (---------------) + I gouv
- 0x00222603, // n0x044e c0x0000 (---------------) + I com
- 0x0027a643, // n0x044f c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0450 c0x0000 (---------------) + I gov
- 0x00201603, // n0x0451 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0452 c0x0000 (---------------) + I org
- 0x00222603, // n0x0453 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0454 c0x0000 (---------------) + I edu
- 0x0020dbc3, // n0x0455 c0x0000 (---------------) + I gob
- 0x002157c3, // n0x0456 c0x0000 (---------------) + I gov
- 0x00223a83, // n0x0457 c0x0000 (---------------) + I int
- 0x0023f703, // n0x0458 c0x0000 (---------------) + I mil
- 0x00201603, // n0x0459 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x045a c0x0000 (---------------) + I org
- 0x00292602, // n0x045b c0x0000 (---------------) + I tv
- 0x002ccd43, // n0x045c c0x0000 (---------------) + I adm
- 0x0025a4c3, // n0x045d c0x0000 (---------------) + I adv
- 0x0022a003, // n0x045e c0x0000 (---------------) + I agr
- 0x00200282, // n0x045f c0x0000 (---------------) + I am
- 0x00260ac3, // n0x0460 c0x0000 (---------------) + I arq
- 0x00201383, // n0x0461 c0x0000 (---------------) + I art
- 0x002011c3, // n0x0462 c0x0000 (---------------) + I ato
- 0x00200001, // n0x0463 c0x0000 (---------------) + I b
- 0x002063c3, // n0x0464 c0x0000 (---------------) + I bio
- 0x00210dc4, // n0x0465 c0x0000 (---------------) + I blog
- 0x00367f83, // n0x0466 c0x0000 (---------------) + I bmd
- 0x00338cc3, // n0x0467 c0x0000 (---------------) + I cim
- 0x0033d743, // n0x0468 c0x0000 (---------------) + I cng
- 0x002309c3, // n0x0469 c0x0000 (---------------) + I cnt
- 0x0a222603, // n0x046a c0x0028 (n0x04a2-n0x04a3) + I com
- 0x00239dc4, // n0x046b c0x0000 (---------------) + I coop
- 0x002f0e83, // n0x046c c0x0000 (---------------) + I ecn
- 0x002079c3, // n0x046d c0x0000 (---------------) + I eco
- 0x0027a643, // n0x046e c0x0000 (---------------) + I edu
- 0x00236c43, // n0x046f c0x0000 (---------------) + I emp
- 0x00202e03, // n0x0470 c0x0000 (---------------) + I eng
- 0x002e6583, // n0x0471 c0x0000 (---------------) + I esp
- 0x0025fe43, // n0x0472 c0x0000 (---------------) + I etc
- 0x00217bc3, // n0x0473 c0x0000 (---------------) + I eti
- 0x00210a83, // n0x0474 c0x0000 (---------------) + I far
- 0x0024ba04, // n0x0475 c0x0000 (---------------) + I flog
- 0x00253942, // n0x0476 c0x0000 (---------------) + I fm
- 0x00250e43, // n0x0477 c0x0000 (---------------) + I fnd
- 0x00258883, // n0x0478 c0x0000 (---------------) + I fot
- 0x00273983, // n0x0479 c0x0000 (---------------) + I fst
- 0x002e8bc3, // n0x047a c0x0000 (---------------) + I g12
- 0x00317f03, // n0x047b c0x0000 (---------------) + I ggf
- 0x002157c3, // n0x047c c0x0000 (---------------) + I gov
- 0x002e00c3, // n0x047d c0x0000 (---------------) + I imb
- 0x00214b03, // n0x047e c0x0000 (---------------) + I ind
- 0x0021c543, // n0x047f c0x0000 (---------------) + I inf
- 0x0021ecc3, // n0x0480 c0x0000 (---------------) + I jor
- 0x0024b843, // n0x0481 c0x0000 (---------------) + I jus
- 0x00230ec3, // n0x0482 c0x0000 (---------------) + I leg
- 0x0032d483, // n0x0483 c0x0000 (---------------) + I lel
- 0x0020a743, // n0x0484 c0x0000 (---------------) + I mat
- 0x00225d03, // n0x0485 c0x0000 (---------------) + I med
- 0x0023f703, // n0x0486 c0x0000 (---------------) + I mil
- 0x00200182, // n0x0487 c0x0000 (---------------) + I mp
- 0x002a91c3, // n0x0488 c0x0000 (---------------) + I mus
- 0x00201603, // n0x0489 c0x0000 (---------------) + I net
- 0x01614103, // n0x048a c0x0005 (---------------)* o I nom
- 0x002502c3, // n0x048b c0x0000 (---------------) + I not
- 0x0022f1c3, // n0x048c c0x0000 (---------------) + I ntr
- 0x0020dc83, // n0x048d c0x0000 (---------------) + I odo
- 0x0021f5c3, // n0x048e c0x0000 (---------------) + I org
- 0x00222cc3, // n0x048f c0x0000 (---------------) + I ppg
- 0x002d8443, // n0x0490 c0x0000 (---------------) + I pro
- 0x002ffac3, // n0x0491 c0x0000 (---------------) + I psc
- 0x00288c03, // n0x0492 c0x0000 (---------------) + I psi
- 0x002dc143, // n0x0493 c0x0000 (---------------) + I qsl
- 0x0024a785, // n0x0494 c0x0000 (---------------) + I radio
- 0x00227783, // n0x0495 c0x0000 (---------------) + I rec
- 0x002e0a43, // n0x0496 c0x0000 (---------------) + I slg
- 0x002e9583, // n0x0497 c0x0000 (---------------) + I srv
- 0x002a24c4, // n0x0498 c0x0000 (---------------) + I taxi
- 0x002bff03, // n0x0499 c0x0000 (---------------) + I teo
- 0x00200143, // n0x049a c0x0000 (---------------) + I tmp
- 0x002a74c3, // n0x049b c0x0000 (---------------) + I trd
- 0x002382c3, // n0x049c c0x0000 (---------------) + I tur
- 0x00292602, // n0x049d c0x0000 (---------------) + I tv
- 0x0023bf43, // n0x049e c0x0000 (---------------) + I vet
- 0x002f8f04, // n0x049f c0x0000 (---------------) + I vlog
- 0x0024ebc4, // n0x04a0 c0x0000 (---------------) + I wiki
- 0x002ffd43, // n0x04a1 c0x0000 (---------------) + I zlg
- 0x000b8948, // n0x04a2 c0x0000 (---------------) + blogspot
- 0x00222603, // n0x04a3 c0x0000 (---------------) + I com
- 0x0027a643, // n0x04a4 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x04a5 c0x0000 (---------------) + I gov
- 0x00201603, // n0x04a6 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x04a7 c0x0000 (---------------) + I org
- 0x00222603, // n0x04a8 c0x0000 (---------------) + I com
- 0x0027a643, // n0x04a9 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x04aa c0x0000 (---------------) + I gov
- 0x00201603, // n0x04ab c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x04ac c0x0000 (---------------) + I org
- 0x00207a02, // n0x04ad c0x0000 (---------------) + I co
- 0x0021f5c3, // n0x04ae c0x0000 (---------------) + I org
- 0x00222603, // n0x04af c0x0000 (---------------) + I com
- 0x002157c3, // n0x04b0 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x04b1 c0x0000 (---------------) + I mil
- 0x0021ef42, // n0x04b2 c0x0000 (---------------) + I of
- 0x00222603, // n0x04b3 c0x0000 (---------------) + I com
- 0x0027a643, // n0x04b4 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x04b5 c0x0000 (---------------) + I gov
- 0x00201603, // n0x04b6 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x04b7 c0x0000 (---------------) + I org
- 0x00003502, // n0x04b8 c0x0000 (---------------) + za
- 0x00200302, // n0x04b9 c0x0000 (---------------) + I ab
- 0x0021f342, // n0x04ba c0x0000 (---------------) + I bc
- 0x000b8948, // n0x04bb c0x0000 (---------------) + blogspot
- 0x00007a02, // n0x04bc c0x0000 (---------------) + co
- 0x0030d302, // n0x04bd c0x0000 (---------------) + I gc
- 0x00203102, // n0x04be c0x0000 (---------------) + I mb
- 0x0020dfc2, // n0x04bf c0x0000 (---------------) + I nb
- 0x00209282, // n0x04c0 c0x0000 (---------------) + I nf
- 0x00244442, // n0x04c1 c0x0000 (---------------) + I nl
- 0x00203a42, // n0x04c2 c0x0000 (---------------) + I ns
- 0x0020ddc2, // n0x04c3 c0x0000 (---------------) + I nt
- 0x002267c2, // n0x04c4 c0x0000 (---------------) + I nu
- 0x00203e02, // n0x04c5 c0x0000 (---------------) + I on
- 0x00202142, // n0x04c6 c0x0000 (---------------) + I pe
- 0x00350482, // n0x04c7 c0x0000 (---------------) + I qc
- 0x00202202, // n0x04c8 c0x0000 (---------------) + I sk
- 0x0023bac2, // n0x04c9 c0x0000 (---------------) + I yk
- 0x00019e09, // n0x04ca c0x0000 (---------------) + ftpaccess
- 0x000a2b8b, // n0x04cb c0x0000 (---------------) + game-server
- 0x000cb708, // n0x04cc c0x0000 (---------------) + myphotos
- 0x00094cc9, // n0x04cd c0x0000 (---------------) + scrapping
- 0x002157c3, // n0x04ce c0x0000 (---------------) + I gov
- 0x000b8948, // n0x04cf c0x0000 (---------------) + blogspot
- 0x000b8948, // n0x04d0 c0x0000 (---------------) + blogspot
- 0x00201d82, // n0x04d1 c0x0000 (---------------) + I ac
- 0x0029cfc4, // n0x04d2 c0x0000 (---------------) + I asso
- 0x00207a02, // n0x04d3 c0x0000 (---------------) + I co
- 0x00222603, // n0x04d4 c0x0000 (---------------) + I com
- 0x00202542, // n0x04d5 c0x0000 (---------------) + I ed
- 0x0027a643, // n0x04d6 c0x0000 (---------------) + I edu
- 0x00206cc2, // n0x04d7 c0x0000 (---------------) + I go
- 0x00368f84, // n0x04d8 c0x0000 (---------------) + I gouv
- 0x00223a83, // n0x04d9 c0x0000 (---------------) + I int
- 0x00235302, // n0x04da c0x0000 (---------------) + I md
- 0x00201603, // n0x04db c0x0000 (---------------) + I net
- 0x00200bc2, // n0x04dc c0x0000 (---------------) + I or
- 0x0021f5c3, // n0x04dd c0x0000 (---------------) + I org
- 0x002487c6, // n0x04de c0x0000 (---------------) + I presse
- 0x00300d8f, // n0x04df c0x0000 (---------------) + I xn--aroport-bya
- 0x006c3243, // n0x04e0 c0x0001 (---------------) ! I www
- 0x00207a02, // n0x04e1 c0x0000 (---------------) + I co
- 0x0020dbc3, // n0x04e2 c0x0000 (---------------) + I gob
- 0x002157c3, // n0x04e3 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x04e4 c0x0000 (---------------) + I mil
- 0x00207a02, // n0x04e5 c0x0000 (---------------) + I co
- 0x00222603, // n0x04e6 c0x0000 (---------------) + I com
- 0x002157c3, // n0x04e7 c0x0000 (---------------) + I gov
- 0x00201603, // n0x04e8 c0x0000 (---------------) + I net
- 0x00201d82, // n0x04e9 c0x0000 (---------------) + I ac
- 0x0020b442, // n0x04ea c0x0000 (---------------) + I ah
- 0x0e31a189, // n0x04eb c0x0038 (n0x0516-n0x0517) o I amazonaws
- 0x0020e2c2, // n0x04ec c0x0000 (---------------) + I bj
- 0x00222603, // n0x04ed c0x0000 (---------------) + I com
- 0x0023dec2, // n0x04ee c0x0000 (---------------) + I cq
- 0x0027a643, // n0x04ef c0x0000 (---------------) + I edu
- 0x0021ec82, // n0x04f0 c0x0000 (---------------) + I fj
- 0x00210e82, // n0x04f1 c0x0000 (---------------) + I gd
- 0x002157c3, // n0x04f2 c0x0000 (---------------) + I gov
- 0x00229d82, // n0x04f3 c0x0000 (---------------) + I gs
- 0x00259582, // n0x04f4 c0x0000 (---------------) + I gx
- 0x00259d42, // n0x04f5 c0x0000 (---------------) + I gz
- 0x00200a02, // n0x04f6 c0x0000 (---------------) + I ha
- 0x002fffc2, // n0x04f7 c0x0000 (---------------) + I hb
- 0x00201c02, // n0x04f8 c0x0000 (---------------) + I he
- 0x00200982, // n0x04f9 c0x0000 (---------------) + I hi
- 0x0026af42, // n0x04fa c0x0000 (---------------) + I hk
- 0x0026e482, // n0x04fb c0x0000 (---------------) + I hl
- 0x0022c942, // n0x04fc c0x0000 (---------------) + I hn
- 0x0032d902, // n0x04fd c0x0000 (---------------) + I jl
- 0x0021bb82, // n0x04fe c0x0000 (---------------) + I js
- 0x00304cc2, // n0x04ff c0x0000 (---------------) + I jx
- 0x0022d7c2, // n0x0500 c0x0000 (---------------) + I ln
- 0x0023f703, // n0x0501 c0x0000 (---------------) + I mil
- 0x00206c42, // n0x0502 c0x0000 (---------------) + I mo
- 0x00201603, // n0x0503 c0x0000 (---------------) + I net
- 0x0020eb82, // n0x0504 c0x0000 (---------------) + I nm
- 0x0027d682, // n0x0505 c0x0000 (---------------) + I nx
- 0x0021f5c3, // n0x0506 c0x0000 (---------------) + I org
- 0x0023b182, // n0x0507 c0x0000 (---------------) + I qh
- 0x00218bc2, // n0x0508 c0x0000 (---------------) + I sc
- 0x00202002, // n0x0509 c0x0000 (---------------) + I sd
- 0x00200942, // n0x050a c0x0000 (---------------) + I sh
- 0x0020dd82, // n0x050b c0x0000 (---------------) + I sn
- 0x002ee302, // n0x050c c0x0000 (---------------) + I sx
- 0x002412c2, // n0x050d c0x0000 (---------------) + I tj
- 0x00208d02, // n0x050e c0x0000 (---------------) + I tw
- 0x0022ad82, // n0x050f c0x0000 (---------------) + I xj
- 0x003732ca, // n0x0510 c0x0000 (---------------) + I xn--55qx5d
- 0x0032b80a, // n0x0511 c0x0000 (---------------) + I xn--io0a7i
- 0x0034c44a, // n0x0512 c0x0000 (---------------) + I xn--od0alg
- 0x00375602, // n0x0513 c0x0000 (---------------) + I xz
- 0x00210c42, // n0x0514 c0x0000 (---------------) + I yn
- 0x00260dc2, // n0x0515 c0x0000 (---------------) + I zj
- 0x0e433987, // n0x0516 c0x0039 (n0x0517-n0x0518) + compute
- 0x000f0eca, // n0x0517 c0x0000 (---------------) + cn-north-1
- 0x002180c4, // n0x0518 c0x0000 (---------------) + I arts
- 0x00222603, // n0x0519 c0x0000 (---------------) + I com
- 0x0027a643, // n0x051a c0x0000 (---------------) + I edu
- 0x00245bc4, // n0x051b c0x0000 (---------------) + I firm
- 0x002157c3, // n0x051c c0x0000 (---------------) + I gov
- 0x0021c704, // n0x051d c0x0000 (---------------) + I info
- 0x00223a83, // n0x051e c0x0000 (---------------) + I int
- 0x0023f703, // n0x051f c0x0000 (---------------) + I mil
- 0x00201603, // n0x0520 c0x0000 (---------------) + I net
- 0x00214103, // n0x0521 c0x0000 (---------------) + I nom
- 0x0021f5c3, // n0x0522 c0x0000 (---------------) + I org
- 0x00227783, // n0x0523 c0x0000 (---------------) + I rec
- 0x00205e43, // n0x0524 c0x0000 (---------------) + I web
- 0x00084506, // n0x0525 c0x0000 (---------------) + africa
- 0x0f31a189, // n0x0526 c0x003c (n0x05e8-n0x05ff) o I amazonaws
- 0x00044907, // n0x0527 c0x0000 (---------------) + appspot
- 0x00000a42, // n0x0528 c0x0000 (---------------) + ar
- 0x00165e8a, // n0x0529 c0x0000 (---------------) + betainabox
- 0x00010dc7, // n0x052a c0x0000 (---------------) + blogdns
- 0x000b8948, // n0x052b c0x0000 (---------------) + blogspot
- 0x00006842, // n0x052c c0x0000 (---------------) + br
- 0x00109fc7, // n0x052d c0x0000 (---------------) + cechire
- 0x000e85cf, // n0x052e c0x0000 (---------------) + cloudcontrolapp
- 0x0002f00f, // n0x052f c0x0000 (---------------) + cloudcontrolled
- 0x000309c2, // n0x0530 c0x0000 (---------------) + cn
- 0x00007a02, // n0x0531 c0x0000 (---------------) + co
- 0x00140008, // n0x0532 c0x0000 (---------------) + codespot
- 0x00002dc2, // n0x0533 c0x0000 (---------------) + de
- 0x00035348, // n0x0534 c0x0000 (---------------) + dnsalias
- 0x0000b0c7, // n0x0535 c0x0000 (---------------) + dnsdojo
- 0x0000dccb, // n0x0536 c0x0000 (---------------) + doesntexist
- 0x000cd889, // n0x0537 c0x0000 (---------------) + dontexist
- 0x00035247, // n0x0538 c0x0000 (---------------) + doomdns
- 0x000f3dcc, // n0x0539 c0x0000 (---------------) + dreamhosters
- 0x001616ca, // n0x053a c0x0000 (---------------) + dyn-o-saur
- 0x0009fe08, // n0x053b c0x0000 (---------------) + dynalias
- 0x00025a0e, // n0x053c c0x0000 (---------------) + dyndns-at-home
- 0x0002448e, // n0x053d c0x0000 (---------------) + dyndns-at-work
- 0x00010c0b, // n0x053e c0x0000 (---------------) + dyndns-blog
- 0x0001228b, // n0x053f c0x0000 (---------------) + dyndns-free
- 0x00019b4b, // n0x0540 c0x0000 (---------------) + dyndns-home
- 0x0001b5c9, // n0x0541 c0x0000 (---------------) + dyndns-ip
- 0x0001d6cb, // n0x0542 c0x0000 (---------------) + dyndns-mail
- 0x0001ed8d, // n0x0543 c0x0000 (---------------) + dyndns-office
- 0x0003ad4b, // n0x0544 c0x0000 (---------------) + dyndns-pics
- 0x0003b50d, // n0x0545 c0x0000 (---------------) + dyndns-remote
- 0x000da30d, // n0x0546 c0x0000 (---------------) + dyndns-server
- 0x0004d9ca, // n0x0547 c0x0000 (---------------) + dyndns-web
- 0x0004ea0b, // n0x0548 c0x0000 (---------------) + dyndns-wiki
- 0x0004f2cb, // n0x0549 c0x0000 (---------------) + dyndns-work
- 0x0003cc90, // n0x054a c0x0000 (---------------) + elasticbeanstalk
- 0x0009aa8f, // n0x054b c0x0000 (---------------) + est-a-la-maison
- 0x000233cf, // n0x054c c0x0000 (---------------) + est-a-la-masion
- 0x000a320d, // n0x054d c0x0000 (---------------) + est-le-patron
- 0x00127690, // n0x054e c0x0000 (---------------) + est-mon-blogueur
- 0x00010502, // n0x054f c0x0000 (---------------) + eu
- 0x0004470b, // n0x0550 c0x0000 (---------------) + firebaseapp
- 0x000504c8, // n0x0551 c0x0000 (---------------) + flynnhub
- 0x0005e507, // n0x0552 c0x0000 (---------------) + from-ak
- 0x000607c7, // n0x0553 c0x0000 (---------------) + from-al
- 0x00060987, // n0x0554 c0x0000 (---------------) + from-ar
- 0x00061447, // n0x0555 c0x0000 (---------------) + from-ca
- 0x00062b07, // n0x0556 c0x0000 (---------------) + from-ct
- 0x00062e07, // n0x0557 c0x0000 (---------------) + from-dc
- 0x000633c7, // n0x0558 c0x0000 (---------------) + from-de
- 0x00063687, // n0x0559 c0x0000 (---------------) + from-fl
- 0x00063bc7, // n0x055a c0x0000 (---------------) + from-ga
- 0x00063d87, // n0x055b c0x0000 (---------------) + from-hi
- 0x00064ac7, // n0x055c c0x0000 (---------------) + from-ia
- 0x00064c87, // n0x055d c0x0000 (---------------) + from-id
- 0x00064e47, // n0x055e c0x0000 (---------------) + from-il
- 0x00065007, // n0x055f c0x0000 (---------------) + from-in
- 0x00065607, // n0x0560 c0x0000 (---------------) + from-ks
- 0x000658c7, // n0x0561 c0x0000 (---------------) + from-ky
- 0x00066d47, // n0x0562 c0x0000 (---------------) + from-ma
- 0x00067487, // n0x0563 c0x0000 (---------------) + from-md
- 0x00067ac7, // n0x0564 c0x0000 (---------------) + from-mi
- 0x00068387, // n0x0565 c0x0000 (---------------) + from-mn
- 0x00068547, // n0x0566 c0x0000 (---------------) + from-mo
- 0x00068847, // n0x0567 c0x0000 (---------------) + from-ms
- 0x00068c47, // n0x0568 c0x0000 (---------------) + from-mt
- 0x000690c7, // n0x0569 c0x0000 (---------------) + from-nc
- 0x0006aa47, // n0x056a c0x0000 (---------------) + from-nd
- 0x0006ac07, // n0x056b c0x0000 (---------------) + from-ne
- 0x0006adc7, // n0x056c c0x0000 (---------------) + from-nh
- 0x0006b1c7, // n0x056d c0x0000 (---------------) + from-nj
- 0x0006b547, // n0x056e c0x0000 (---------------) + from-nm
- 0x0006bc07, // n0x056f c0x0000 (---------------) + from-nv
- 0x0006c307, // n0x0570 c0x0000 (---------------) + from-oh
- 0x0006c547, // n0x0571 c0x0000 (---------------) + from-ok
- 0x0006cac7, // n0x0572 c0x0000 (---------------) + from-or
- 0x0006cc87, // n0x0573 c0x0000 (---------------) + from-pa
- 0x0006d707, // n0x0574 c0x0000 (---------------) + from-pr
- 0x0006dec7, // n0x0575 c0x0000 (---------------) + from-ri
- 0x0006e2c7, // n0x0576 c0x0000 (---------------) + from-sc
- 0x0006f6c7, // n0x0577 c0x0000 (---------------) + from-sd
- 0x0006f887, // n0x0578 c0x0000 (---------------) + from-tn
- 0x0006fa47, // n0x0579 c0x0000 (---------------) + from-tx
- 0x0006fe87, // n0x057a c0x0000 (---------------) + from-ut
- 0x00070287, // n0x057b c0x0000 (---------------) + from-va
- 0x00071387, // n0x057c c0x0000 (---------------) + from-vt
- 0x00071687, // n0x057d c0x0000 (---------------) + from-wa
- 0x00071847, // n0x057e c0x0000 (---------------) + from-wi
- 0x00071bc7, // n0x057f c0x0000 (---------------) + from-wv
- 0x00072007, // n0x0580 c0x0000 (---------------) + from-wy
- 0x0000fb02, // n0x0581 c0x0000 (---------------) + gb
- 0x000083c7, // n0x0582 c0x0000 (---------------) + getmyip
- 0x000bb511, // n0x0583 c0x0000 (---------------) + githubusercontent
- 0x0005558a, // n0x0584 c0x0000 (---------------) + googleapis
- 0x0013fe8a, // n0x0585 c0x0000 (---------------) + googlecode
- 0x00053106, // n0x0586 c0x0000 (---------------) + gotdns
- 0x00005bc2, // n0x0587 c0x0000 (---------------) + gr
- 0x001698c9, // n0x0588 c0x0000 (---------------) + herokuapp
- 0x0008d809, // n0x0589 c0x0000 (---------------) + herokussl
- 0x0003e44a, // n0x058a c0x0000 (---------------) + hobby-site
- 0x0009f1c9, // n0x058b c0x0000 (---------------) + homelinux
- 0x000a1908, // n0x058c c0x0000 (---------------) + homeunix
- 0x00001e02, // n0x058d c0x0000 (---------------) + hu
- 0x00108cc9, // n0x058e c0x0000 (---------------) + iamallama
- 0x0006d94e, // n0x058f c0x0000 (---------------) + is-a-anarchist
- 0x00014d8c, // n0x0590 c0x0000 (---------------) + is-a-blogger
- 0x000cbe4f, // n0x0591 c0x0000 (---------------) + is-a-bookkeeper
- 0x0015998e, // n0x0592 c0x0000 (---------------) + is-a-bulls-fan
- 0x000a258c, // n0x0593 c0x0000 (---------------) + is-a-caterer
- 0x001402c9, // n0x0594 c0x0000 (---------------) + is-a-chef
- 0x00032a91, // n0x0595 c0x0000 (---------------) + is-a-conservative
- 0x00036788, // n0x0596 c0x0000 (---------------) + is-a-cpa
- 0x00152e52, // n0x0597 c0x0000 (---------------) + is-a-cubicle-slave
- 0x0004344d, // n0x0598 c0x0000 (---------------) + is-a-democrat
- 0x00055c4d, // n0x0599 c0x0000 (---------------) + is-a-designer
- 0x0005758b, // n0x059a c0x0000 (---------------) + is-a-doctor
- 0x0005a155, // n0x059b c0x0000 (---------------) + is-a-financialadvisor
- 0x00067d49, // n0x059c c0x0000 (---------------) + is-a-geek
- 0x0006e04a, // n0x059d c0x0000 (---------------) + is-a-green
- 0x00073f49, // n0x059e c0x0000 (---------------) + is-a-guru
- 0x0007ad90, // n0x059f c0x0000 (---------------) + is-a-hard-worker
- 0x0007cf4b, // n0x05a0 c0x0000 (---------------) + is-a-hunter
- 0x0011c74f, // n0x05a1 c0x0000 (---------------) + is-a-landscaper
- 0x0014edcb, // n0x05a2 c0x0000 (---------------) + is-a-lawyer
- 0x0008578c, // n0x05a3 c0x0000 (---------------) + is-a-liberal
- 0x000941d0, // n0x05a4 c0x0000 (---------------) + is-a-libertarian
- 0x000a8b0a, // n0x05a5 c0x0000 (---------------) + is-a-llama
- 0x000a908d, // n0x05a6 c0x0000 (---------------) + is-a-musician
- 0x000dfb8e, // n0x05a7 c0x0000 (---------------) + is-a-nascarfan
- 0x000b58ca, // n0x05a8 c0x0000 (---------------) + is-a-nurse
- 0x000df58c, // n0x05a9 c0x0000 (---------------) + is-a-painter
- 0x000f1814, // n0x05aa c0x0000 (---------------) + is-a-personaltrainer
- 0x000fa1d1, // n0x05ab c0x0000 (---------------) + is-a-photographer
- 0x000fde4b, // n0x05ac c0x0000 (---------------) + is-a-player
- 0x000aa3cf, // n0x05ad c0x0000 (---------------) + is-a-republican
- 0x000ac5cd, // n0x05ae c0x0000 (---------------) + is-a-rockstar
- 0x000ad28e, // n0x05af c0x0000 (---------------) + is-a-socialist
- 0x000b108c, // n0x05b0 c0x0000 (---------------) + is-a-student
- 0x000b224c, // n0x05b1 c0x0000 (---------------) + is-a-teacher
- 0x000b55cb, // n0x05b2 c0x0000 (---------------) + is-a-techie
- 0x000b724e, // n0x05b3 c0x0000 (---------------) + is-a-therapist
- 0x000b8250, // n0x05b4 c0x0000 (---------------) + is-an-accountant
- 0x000b908b, // n0x05b5 c0x0000 (---------------) + is-an-actor
- 0x000dc70d, // n0x05b6 c0x0000 (---------------) + is-an-actress
- 0x000e490f, // n0x05b7 c0x0000 (---------------) + is-an-anarchist
- 0x000bc94c, // n0x05b8 c0x0000 (---------------) + is-an-artist
- 0x000c3d4e, // n0x05b9 c0x0000 (---------------) + is-an-engineer
- 0x000c7691, // n0x05ba c0x0000 (---------------) + is-an-entertainer
- 0x0011d84c, // n0x05bb c0x0000 (---------------) + is-certified
- 0x0013a2c7, // n0x05bc c0x0000 (---------------) + is-gone
- 0x000dd78d, // n0x05bd c0x0000 (---------------) + is-into-anime
- 0x000df1cc, // n0x05be c0x0000 (---------------) + is-into-cars
- 0x000eadd0, // n0x05bf c0x0000 (---------------) + is-into-cartoons
- 0x000ebc4d, // n0x05c0 c0x0000 (---------------) + is-into-games
- 0x00157547, // n0x05c1 c0x0000 (---------------) + is-leet
- 0x000eff50, // n0x05c2 c0x0000 (---------------) + is-not-certified
- 0x000f5008, // n0x05c3 c0x0000 (---------------) + is-slick
- 0x000fb54b, // n0x05c4 c0x0000 (---------------) + is-uberleet
- 0x0013030f, // n0x05c5 c0x0000 (---------------) + is-with-theband
- 0x0014bd08, // n0x05c6 c0x0000 (---------------) + isa-geek
- 0x0005578d, // n0x05c7 c0x0000 (---------------) + isa-hockeynut
- 0x00141d50, // n0x05c8 c0x0000 (---------------) + issmarterthanyou
- 0x000a9f43, // n0x05c9 c0x0000 (---------------) + jpn
- 0x0000e742, // n0x05ca c0x0000 (---------------) + kr
- 0x00054389, // n0x05cb c0x0000 (---------------) + likes-pie
- 0x0002580a, // n0x05cc c0x0000 (---------------) + likescandy
- 0x0009fc83, // n0x05cd c0x0000 (---------------) + mex
- 0x0001b8c8, // n0x05ce c0x0000 (---------------) + neat-url
- 0x00009287, // n0x05cf c0x0000 (---------------) + nfshost
- 0x00001b82, // n0x05d0 c0x0000 (---------------) + no
- 0x0004a90a, // n0x05d1 c0x0000 (---------------) + operaunite
- 0x0008740f, // n0x05d2 c0x0000 (---------------) + outsystemscloud
- 0x00150482, // n0x05d3 c0x0000 (---------------) + qc
- 0x000e8547, // n0x05d4 c0x0000 (---------------) + rhcloud
- 0x00000c02, // n0x05d5 c0x0000 (---------------) + ro
- 0x0000c6c2, // n0x05d6 c0x0000 (---------------) + ru
- 0x00002882, // n0x05d7 c0x0000 (---------------) + sa
- 0x0006e6d0, // n0x05d8 c0x0000 (---------------) + saves-the-whales
- 0x00006d42, // n0x05d9 c0x0000 (---------------) + se
- 0x000ff606, // n0x05da c0x0000 (---------------) + selfip
- 0x00092c0e, // n0x05db c0x0000 (---------------) + sells-for-less
- 0x000a5ccb, // n0x05dc c0x0000 (---------------) + sells-for-u
- 0x00016d08, // n0x05dd c0x0000 (---------------) + servebbs
- 0x000e064a, // n0x05de c0x0000 (---------------) + simple-url
- 0x000e5c8d, // n0x05df c0x0000 (---------------) + space-to-rent
- 0x0016b28c, // n0x05e0 c0x0000 (---------------) + teaches-yoga
- 0x00000402, // n0x05e1 c0x0000 (---------------) + uk
- 0x000054c2, // n0x05e2 c0x0000 (---------------) + us
- 0x000193c2, // n0x05e3 c0x0000 (---------------) + uy
- 0x0005548a, // n0x05e4 c0x0000 (---------------) + withgoogle
- 0x000b86ce, // n0x05e5 c0x0000 (---------------) + writesthisblog
- 0x000e9148, // n0x05e6 c0x0000 (---------------) + yolasite
- 0x00003502, // n0x05e7 c0x0000 (---------------) + za
- 0x0f433987, // n0x05e8 c0x003d (n0x05ff-n0x0607) + compute
- 0x0f833989, // n0x05e9 c0x003e (n0x0607-n0x0609) + compute-1
- 0x000116c3, // n0x05ea c0x0000 (---------------) + elb
- 0x00005d82, // n0x05eb c0x0000 (---------------) + s3
- 0x00112b11, // n0x05ec c0x0000 (---------------) + s3-ap-northeast-1
- 0x00118651, // n0x05ed c0x0000 (---------------) + s3-ap-southeast-1
- 0x0016e991, // n0x05ee c0x0000 (---------------) + s3-ap-southeast-2
- 0x0011a38c, // n0x05ef c0x0000 (---------------) + s3-eu-west-1
- 0x0011e7d5, // n0x05f0 c0x0000 (---------------) + s3-fips-us-gov-west-1
- 0x0012834c, // n0x05f1 c0x0000 (---------------) + s3-sa-east-1
- 0x00135d10, // n0x05f2 c0x0000 (---------------) + s3-us-gov-west-1
- 0x0014ce4c, // n0x05f3 c0x0000 (---------------) + s3-us-west-1
- 0x0015eb4c, // n0x05f4 c0x0000 (---------------) + s3-us-west-2
- 0x00161a99, // n0x05f5 c0x0000 (---------------) + s3-website-ap-northeast-1
- 0x00005d99, // n0x05f6 c0x0000 (---------------) + s3-website-ap-southeast-1
- 0x0000f099, // n0x05f7 c0x0000 (---------------) + s3-website-ap-southeast-2
- 0x00010254, // n0x05f8 c0x0000 (---------------) + s3-website-eu-west-1
- 0x00010f54, // n0x05f9 c0x0000 (---------------) + s3-website-sa-east-1
- 0x00011cd4, // n0x05fa c0x0000 (---------------) + s3-website-us-east-1
- 0x00015458, // n0x05fb c0x0000 (---------------) + s3-website-us-gov-west-1
- 0x00016ed4, // n0x05fc c0x0000 (---------------) + s3-website-us-west-1
- 0x000183d4, // n0x05fd c0x0000 (---------------) + s3-website-us-west-2
- 0x00011f89, // n0x05fe c0x0000 (---------------) + us-east-1
- 0x00112bce, // n0x05ff c0x0000 (---------------) + ap-northeast-1
- 0x0000604e, // n0x0600 c0x0000 (---------------) + ap-southeast-1
- 0x0000f34e, // n0x0601 c0x0000 (---------------) + ap-southeast-2
- 0x00010509, // n0x0602 c0x0000 (---------------) + eu-west-1
- 0x00011209, // n0x0603 c0x0000 (---------------) + sa-east-1
- 0x0001570d, // n0x0604 c0x0000 (---------------) + us-gov-west-1
- 0x00017189, // n0x0605 c0x0000 (---------------) + us-west-1
- 0x00018689, // n0x0606 c0x0000 (---------------) + us-west-2
- 0x000fd103, // n0x0607 c0x0000 (---------------) + z-1
- 0x0001d203, // n0x0608 c0x0000 (---------------) + z-2
- 0x00201d82, // n0x0609 c0x0000 (---------------) + I ac
- 0x00207a02, // n0x060a c0x0000 (---------------) + I co
- 0x00202542, // n0x060b c0x0000 (---------------) + I ed
- 0x0021c5c2, // n0x060c c0x0000 (---------------) + I fi
- 0x00206cc2, // n0x060d c0x0000 (---------------) + I go
- 0x00200bc2, // n0x060e c0x0000 (---------------) + I or
- 0x00202882, // n0x060f c0x0000 (---------------) + I sa
- 0x00222603, // n0x0610 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0611 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0612 c0x0000 (---------------) + I gov
- 0x0021c543, // n0x0613 c0x0000 (---------------) + I inf
- 0x00201603, // n0x0614 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0615 c0x0000 (---------------) + I org
- 0x000b8948, // n0x0616 c0x0000 (---------------) + blogspot
- 0x00222603, // n0x0617 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0618 c0x0000 (---------------) + I edu
- 0x00201603, // n0x0619 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x061a c0x0000 (---------------) + I org
- 0x00011c03, // n0x061b c0x0000 (---------------) + ath
- 0x002157c3, // n0x061c c0x0000 (---------------) + I gov
- 0x000b8948, // n0x061d c0x0000 (---------------) + blogspot
- 0x000b8948, // n0x061e c0x0000 (---------------) + blogspot
- 0x00022603, // n0x061f c0x0000 (---------------) + com
- 0x001648cf, // n0x0620 c0x0000 (---------------) + fuettertdasnetz
- 0x000cda0a, // n0x0621 c0x0000 (---------------) + isteingeek
- 0x000ad547, // n0x0622 c0x0000 (---------------) + istmein
- 0x00045d4a, // n0x0623 c0x0000 (---------------) + lebtimnetz
- 0x000d48ca, // n0x0624 c0x0000 (---------------) + leitungsen
- 0x00121e8d, // n0x0625 c0x0000 (---------------) + traeumtgerade
- 0x000b8948, // n0x0626 c0x0000 (---------------) + blogspot
- 0x00222603, // n0x0627 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0628 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0629 c0x0000 (---------------) + I gov
- 0x00201603, // n0x062a c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x062b c0x0000 (---------------) + I org
- 0x00201383, // n0x062c c0x0000 (---------------) + I art
- 0x00222603, // n0x062d c0x0000 (---------------) + I com
- 0x0027a643, // n0x062e c0x0000 (---------------) + I edu
- 0x0020dbc3, // n0x062f c0x0000 (---------------) + I gob
- 0x002157c3, // n0x0630 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x0631 c0x0000 (---------------) + I mil
- 0x00201603, // n0x0632 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0633 c0x0000 (---------------) + I org
- 0x002dc183, // n0x0634 c0x0000 (---------------) + I sld
- 0x00205e43, // n0x0635 c0x0000 (---------------) + I web
- 0x00201383, // n0x0636 c0x0000 (---------------) + I art
- 0x0029cfc4, // n0x0637 c0x0000 (---------------) + I asso
- 0x00222603, // n0x0638 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0639 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x063a c0x0000 (---------------) + I gov
- 0x00201603, // n0x063b c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x063c c0x0000 (---------------) + I org
- 0x00214cc3, // n0x063d c0x0000 (---------------) + I pol
- 0x00222603, // n0x063e c0x0000 (---------------) + I com
- 0x0027a643, // n0x063f c0x0000 (---------------) + I edu
- 0x0021c5c3, // n0x0640 c0x0000 (---------------) + I fin
- 0x0020dbc3, // n0x0641 c0x0000 (---------------) + I gob
- 0x002157c3, // n0x0642 c0x0000 (---------------) + I gov
- 0x0021c704, // n0x0643 c0x0000 (---------------) + I info
- 0x0021bdc3, // n0x0644 c0x0000 (---------------) + I k12
- 0x00225d03, // n0x0645 c0x0000 (---------------) + I med
- 0x0023f703, // n0x0646 c0x0000 (---------------) + I mil
- 0x00201603, // n0x0647 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0648 c0x0000 (---------------) + I org
- 0x002d8443, // n0x0649 c0x0000 (---------------) + I pro
- 0x00314283, // n0x064a c0x0000 (---------------) + I aip
- 0x00222603, // n0x064b c0x0000 (---------------) + I com
- 0x0027a643, // n0x064c c0x0000 (---------------) + I edu
- 0x00242203, // n0x064d c0x0000 (---------------) + I fie
- 0x002157c3, // n0x064e c0x0000 (---------------) + I gov
- 0x002858c3, // n0x064f c0x0000 (---------------) + I lib
- 0x00225d03, // n0x0650 c0x0000 (---------------) + I med
- 0x0021f5c3, // n0x0651 c0x0000 (---------------) + I org
- 0x002d80c3, // n0x0652 c0x0000 (---------------) + I pri
- 0x00368b84, // n0x0653 c0x0000 (---------------) + I riik
- 0x00222603, // n0x0654 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0655 c0x0000 (---------------) + I edu
- 0x002a19c3, // n0x0656 c0x0000 (---------------) + I eun
- 0x002157c3, // n0x0657 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x0658 c0x0000 (---------------) + I mil
- 0x0022aec4, // n0x0659 c0x0000 (---------------) + I name
- 0x00201603, // n0x065a c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x065b c0x0000 (---------------) + I org
- 0x00218bc3, // n0x065c c0x0000 (---------------) + I sci
- 0x13a22603, // n0x065d c0x004e (n0x0662-n0x0663) + I com
- 0x0027a643, // n0x065e c0x0000 (---------------) + I edu
- 0x0020dbc3, // n0x065f c0x0000 (---------------) + I gob
- 0x00214103, // n0x0660 c0x0000 (---------------) + I nom
- 0x0021f5c3, // n0x0661 c0x0000 (---------------) + I org
- 0x000b8948, // n0x0662 c0x0000 (---------------) + blogspot
- 0x00314c43, // n0x0663 c0x0000 (---------------) + I biz
- 0x00222603, // n0x0664 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0665 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0666 c0x0000 (---------------) + I gov
- 0x0021c704, // n0x0667 c0x0000 (---------------) + I info
- 0x0022aec4, // n0x0668 c0x0000 (---------------) + I name
- 0x0021f5c3, // n0x0669 c0x0000 (---------------) + I org
- 0x00310d45, // n0x066a c0x0000 (---------------) + I aland
- 0x000b8948, // n0x066b c0x0000 (---------------) + blogspot
- 0x00004843, // n0x066c c0x0000 (---------------) + iki
- 0x00312288, // n0x066d c0x0000 (---------------) + I aeroport
- 0x00247b87, // n0x066e c0x0000 (---------------) + I assedic
- 0x0029cfc4, // n0x066f c0x0000 (---------------) + I asso
- 0x0031e1c6, // n0x0670 c0x0000 (---------------) + I avocat
- 0x00327586, // n0x0671 c0x0000 (---------------) + I avoues
- 0x000b8948, // n0x0672 c0x0000 (---------------) + blogspot
- 0x00307f03, // n0x0673 c0x0000 (---------------) + I cci
- 0x0029a489, // n0x0674 c0x0000 (---------------) + I chambagri
- 0x00275755, // n0x0675 c0x0000 (---------------) + I chirurgiens-dentistes
- 0x00222603, // n0x0676 c0x0000 (---------------) + I com
- 0x00222412, // n0x0677 c0x0000 (---------------) + I experts-comptables
- 0x002221cf, // n0x0678 c0x0000 (---------------) + I geometre-expert
- 0x00368f84, // n0x0679 c0x0000 (---------------) + I gouv
- 0x00269905, // n0x067a c0x0000 (---------------) + I greta
- 0x0024b610, // n0x067b c0x0000 (---------------) + I huissier-justice
- 0x002eef07, // n0x067c c0x0000 (---------------) + I medecin
- 0x00214103, // n0x067d c0x0000 (---------------) + I nom
- 0x002bef08, // n0x067e c0x0000 (---------------) + I notaires
- 0x002c860a, // n0x067f c0x0000 (---------------) + I pharmacien
- 0x00231304, // n0x0680 c0x0000 (---------------) + I port
- 0x002d7b03, // n0x0681 c0x0000 (---------------) + I prd
- 0x002487c6, // n0x0682 c0x0000 (---------------) + I presse
- 0x00200142, // n0x0683 c0x0000 (---------------) + I tm
- 0x002de14b, // n0x0684 c0x0000 (---------------) + I veterinaire
- 0x00222603, // n0x0685 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0686 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0687 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x0688 c0x0000 (---------------) + I mil
- 0x00201603, // n0x0689 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x068a c0x0000 (---------------) + I org
- 0x002dbbc3, // n0x068b c0x0000 (---------------) + I pvt
- 0x00207a02, // n0x068c c0x0000 (---------------) + I co
- 0x00201603, // n0x068d c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x068e c0x0000 (---------------) + I org
- 0x00222603, // n0x068f c0x0000 (---------------) + I com
- 0x0027a643, // n0x0690 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0691 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x0692 c0x0000 (---------------) + I mil
- 0x0021f5c3, // n0x0693 c0x0000 (---------------) + I org
- 0x00222603, // n0x0694 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0695 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0696 c0x0000 (---------------) + I gov
- 0x00223143, // n0x0697 c0x0000 (---------------) + I ltd
- 0x0022ab03, // n0x0698 c0x0000 (---------------) + I mod
- 0x0021f5c3, // n0x0699 c0x0000 (---------------) + I org
- 0x00201d82, // n0x069a c0x0000 (---------------) + I ac
- 0x00222603, // n0x069b c0x0000 (---------------) + I com
- 0x0027a643, // n0x069c c0x0000 (---------------) + I edu
- 0x002157c3, // n0x069d c0x0000 (---------------) + I gov
- 0x00201603, // n0x069e c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x069f c0x0000 (---------------) + I org
- 0x0029cfc4, // n0x06a0 c0x0000 (---------------) + I asso
- 0x00222603, // n0x06a1 c0x0000 (---------------) + I com
- 0x0027a643, // n0x06a2 c0x0000 (---------------) + I edu
- 0x0020e884, // n0x06a3 c0x0000 (---------------) + I mobi
- 0x00201603, // n0x06a4 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x06a5 c0x0000 (---------------) + I org
- 0x000b8948, // n0x06a6 c0x0000 (---------------) + blogspot
- 0x00222603, // n0x06a7 c0x0000 (---------------) + I com
- 0x0027a643, // n0x06a8 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x06a9 c0x0000 (---------------) + I gov
- 0x00201603, // n0x06aa c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x06ab c0x0000 (---------------) + I org
- 0x00222603, // n0x06ac c0x0000 (---------------) + I com
- 0x0027a643, // n0x06ad c0x0000 (---------------) + I edu
- 0x0020dbc3, // n0x06ae c0x0000 (---------------) + I gob
- 0x00214b03, // n0x06af c0x0000 (---------------) + I ind
- 0x0023f703, // n0x06b0 c0x0000 (---------------) + I mil
- 0x00201603, // n0x06b1 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x06b2 c0x0000 (---------------) + I org
- 0x00207a02, // n0x06b3 c0x0000 (---------------) + I co
- 0x00222603, // n0x06b4 c0x0000 (---------------) + I com
- 0x00201603, // n0x06b5 c0x0000 (---------------) + I net
- 0x000b8948, // n0x06b6 c0x0000 (---------------) + blogspot
- 0x00222603, // n0x06b7 c0x0000 (---------------) + I com
- 0x0027a643, // n0x06b8 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x06b9 c0x0000 (---------------) + I gov
- 0x00308f83, // n0x06ba c0x0000 (---------------) + I idv
- 0x00201603, // n0x06bb c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x06bc c0x0000 (---------------) + I org
- 0x003732ca, // n0x06bd c0x0000 (---------------) + I xn--55qx5d
- 0x0030cc09, // n0x06be c0x0000 (---------------) + I xn--ciqpn
- 0x0032534b, // n0x06bf c0x0000 (---------------) + I xn--gmq050i
- 0x003258ca, // n0x06c0 c0x0000 (---------------) + I xn--gmqw5a
- 0x0032b80a, // n0x06c1 c0x0000 (---------------) + I xn--io0a7i
- 0x00334f8b, // n0x06c2 c0x0000 (---------------) + I xn--lcvr32d
- 0x0033f38a, // n0x06c3 c0x0000 (---------------) + I xn--mk0axi
- 0x00348b0a, // n0x06c4 c0x0000 (---------------) + I xn--mxtq1m
- 0x0034c44a, // n0x06c5 c0x0000 (---------------) + I xn--od0alg
- 0x0034c6cb, // n0x06c6 c0x0000 (---------------) + I xn--od0aq3b
- 0x003623c9, // n0x06c7 c0x0000 (---------------) + I xn--tn0ag
- 0x00363cca, // n0x06c8 c0x0000 (---------------) + I xn--uc0atv
- 0x0036418b, // n0x06c9 c0x0000 (---------------) + I xn--uc0ay4a
- 0x0037034b, // n0x06ca c0x0000 (---------------) + I xn--wcvs22d
- 0x0037404a, // n0x06cb c0x0000 (---------------) + I xn--zf0avx
- 0x00222603, // n0x06cc c0x0000 (---------------) + I com
- 0x0027a643, // n0x06cd c0x0000 (---------------) + I edu
- 0x0020dbc3, // n0x06ce c0x0000 (---------------) + I gob
- 0x0023f703, // n0x06cf c0x0000 (---------------) + I mil
- 0x00201603, // n0x06d0 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x06d1 c0x0000 (---------------) + I org
- 0x00222603, // n0x06d2 c0x0000 (---------------) + I com
- 0x0025e504, // n0x06d3 c0x0000 (---------------) + I from
- 0x0020f842, // n0x06d4 c0x0000 (---------------) + I iz
- 0x0022aec4, // n0x06d5 c0x0000 (---------------) + I name
- 0x00277285, // n0x06d6 c0x0000 (---------------) + I adult
- 0x00201383, // n0x06d7 c0x0000 (---------------) + I art
- 0x0029cfc4, // n0x06d8 c0x0000 (---------------) + I asso
- 0x00222603, // n0x06d9 c0x0000 (---------------) + I com
- 0x00239dc4, // n0x06da c0x0000 (---------------) + I coop
- 0x0027a643, // n0x06db c0x0000 (---------------) + I edu
- 0x00245bc4, // n0x06dc c0x0000 (---------------) + I firm
- 0x00368f84, // n0x06dd c0x0000 (---------------) + I gouv
- 0x0021c704, // n0x06de c0x0000 (---------------) + I info
- 0x00225d03, // n0x06df c0x0000 (---------------) + I med
- 0x00201603, // n0x06e0 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x06e1 c0x0000 (---------------) + I org
- 0x002f1945, // n0x06e2 c0x0000 (---------------) + I perso
- 0x00214cc3, // n0x06e3 c0x0000 (---------------) + I pol
- 0x002d8443, // n0x06e4 c0x0000 (---------------) + I pro
- 0x00280183, // n0x06e5 c0x0000 (---------------) + I rel
- 0x0024f584, // n0x06e6 c0x0000 (---------------) + I shop
- 0x0021be44, // n0x06e7 c0x0000 (---------------) + I 2000
- 0x0022a005, // n0x06e8 c0x0000 (---------------) + I agrar
- 0x000b8948, // n0x06e9 c0x0000 (---------------) + blogspot
- 0x00253344, // n0x06ea c0x0000 (---------------) + I bolt
- 0x0023a9c6, // n0x06eb c0x0000 (---------------) + I casino
- 0x00357e04, // n0x06ec c0x0000 (---------------) + I city
- 0x00207a02, // n0x06ed c0x0000 (---------------) + I co
- 0x002acc07, // n0x06ee c0x0000 (---------------) + I erotica
- 0x00276707, // n0x06ef c0x0000 (---------------) + I erotika
- 0x00242cc4, // n0x06f0 c0x0000 (---------------) + I film
- 0x00258045, // n0x06f1 c0x0000 (---------------) + I forum
- 0x002ebe45, // n0x06f2 c0x0000 (---------------) + I games
- 0x002a7585, // n0x06f3 c0x0000 (---------------) + I hotel
- 0x0021c704, // n0x06f4 c0x0000 (---------------) + I info
- 0x0027c4c8, // n0x06f5 c0x0000 (---------------) + I ingatlan
- 0x0020b206, // n0x06f6 c0x0000 (---------------) + I jogasz
- 0x002d5a88, // n0x06f7 c0x0000 (---------------) + I konyvelo
- 0x00288d45, // n0x06f8 c0x0000 (---------------) + I lakas
- 0x0027ab45, // n0x06f9 c0x0000 (---------------) + I media
- 0x0023fc04, // n0x06fa c0x0000 (---------------) + I news
- 0x0021f5c3, // n0x06fb c0x0000 (---------------) + I org
- 0x002d82c4, // n0x06fc c0x0000 (---------------) + I priv
- 0x00333c86, // n0x06fd c0x0000 (---------------) + I reklam
- 0x002488c3, // n0x06fe c0x0000 (---------------) + I sex
- 0x0024f584, // n0x06ff c0x0000 (---------------) + I shop
- 0x00293bc5, // n0x0700 c0x0000 (---------------) + I sport
- 0x003005c4, // n0x0701 c0x0000 (---------------) + I suli
- 0x002081c4, // n0x0702 c0x0000 (---------------) + I szex
- 0x00200142, // n0x0703 c0x0000 (---------------) + I tm
- 0x00262c86, // n0x0704 c0x0000 (---------------) + I tozsde
- 0x00359fc6, // n0x0705 c0x0000 (---------------) + I utazas
- 0x002f68c5, // n0x0706 c0x0000 (---------------) + I video
- 0x00201d82, // n0x0707 c0x0000 (---------------) + I ac
- 0x00314c43, // n0x0708 c0x0000 (---------------) + I biz
- 0x00207a02, // n0x0709 c0x0000 (---------------) + I co
- 0x00238504, // n0x070a c0x0000 (---------------) + I desa
- 0x00206cc2, // n0x070b c0x0000 (---------------) + I go
- 0x0023f703, // n0x070c c0x0000 (---------------) + I mil
- 0x00208482, // n0x070d c0x0000 (---------------) + I my
- 0x00201603, // n0x070e c0x0000 (---------------) + I net
- 0x00200bc2, // n0x070f c0x0000 (---------------) + I or
- 0x002526c3, // n0x0710 c0x0000 (---------------) + I sch
- 0x00205e43, // n0x0711 c0x0000 (---------------) + I web
- 0x000b8948, // n0x0712 c0x0000 (---------------) + blogspot
- 0x002157c3, // n0x0713 c0x0000 (---------------) + I gov
- 0x18e07a02, // n0x0714 c0x0063 (n0x0715-n0x0716) o I co
- 0x000b8948, // n0x0715 c0x0000 (---------------) + blogspot
- 0x00201d82, // n0x0716 c0x0000 (---------------) + I ac
- 0x19607a02, // n0x0717 c0x0065 (n0x071d-n0x071f) + I co
- 0x00222603, // n0x0718 c0x0000 (---------------) + I com
- 0x00201603, // n0x0719 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x071a c0x0000 (---------------) + I org
- 0x00204ec2, // n0x071b c0x0000 (---------------) + I tt
- 0x00292602, // n0x071c c0x0000 (---------------) + I tv
- 0x00223143, // n0x071d c0x0000 (---------------) + I ltd
- 0x002d2a43, // n0x071e c0x0000 (---------------) + I plc
- 0x00201d82, // n0x071f c0x0000 (---------------) + I ac
- 0x000b8948, // n0x0720 c0x0000 (---------------) + blogspot
- 0x00207a02, // n0x0721 c0x0000 (---------------) + I co
- 0x0027a643, // n0x0722 c0x0000 (---------------) + I edu
- 0x00245bc4, // n0x0723 c0x0000 (---------------) + I firm
- 0x00204b03, // n0x0724 c0x0000 (---------------) + I gen
- 0x002157c3, // n0x0725 c0x0000 (---------------) + I gov
- 0x00214b03, // n0x0726 c0x0000 (---------------) + I ind
- 0x0023f703, // n0x0727 c0x0000 (---------------) + I mil
- 0x00201603, // n0x0728 c0x0000 (---------------) + I net
- 0x00213e03, // n0x0729 c0x0000 (---------------) + I nic
- 0x0021f5c3, // n0x072a c0x0000 (---------------) + I org
- 0x00218b43, // n0x072b c0x0000 (---------------) + I res
- 0x00113953, // n0x072c c0x0000 (---------------) + barrel-of-knowledge
- 0x00118d14, // n0x072d c0x0000 (---------------) + barrell-of-knowledge
- 0x00010c06, // n0x072e c0x0000 (---------------) + dyndns
- 0x00052007, // n0x072f c0x0000 (---------------) + for-our
- 0x000e7789, // n0x0730 c0x0000 (---------------) + groks-the
- 0x0012244a, // n0x0731 c0x0000 (---------------) + groks-this
- 0x0008218d, // n0x0732 c0x0000 (---------------) + here-for-more
- 0x0001ce4a, // n0x0733 c0x0000 (---------------) + knowsitall
- 0x000ff606, // n0x0734 c0x0000 (---------------) + selfip
- 0x0004db86, // n0x0735 c0x0000 (---------------) + webhop
- 0x00210502, // n0x0736 c0x0000 (---------------) + I eu
- 0x00222603, // n0x0737 c0x0000 (---------------) + I com
- 0x000bb506, // n0x0738 c0x0000 (---------------) + github
- 0x0004d943, // n0x0739 c0x0000 (---------------) + nid
- 0x00222603, // n0x073a c0x0000 (---------------) + I com
- 0x0027a643, // n0x073b c0x0000 (---------------) + I edu
- 0x002157c3, // n0x073c c0x0000 (---------------) + I gov
- 0x0023f703, // n0x073d c0x0000 (---------------) + I mil
- 0x00201603, // n0x073e c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x073f c0x0000 (---------------) + I org
- 0x00201d82, // n0x0740 c0x0000 (---------------) + I ac
- 0x00207a02, // n0x0741 c0x0000 (---------------) + I co
- 0x002157c3, // n0x0742 c0x0000 (---------------) + I gov
- 0x00202f82, // n0x0743 c0x0000 (---------------) + I id
- 0x00201603, // n0x0744 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0745 c0x0000 (---------------) + I org
- 0x002526c3, // n0x0746 c0x0000 (---------------) + I sch
- 0x0033accf, // n0x0747 c0x0000 (---------------) + I xn--mgba3a4f16a
- 0x0033b08e, // n0x0748 c0x0000 (---------------) + I xn--mgba3a4fra
- 0x00222603, // n0x0749 c0x0000 (---------------) + I com
- 0x00041647, // n0x074a c0x0000 (---------------) + cupcake
- 0x0027a643, // n0x074b c0x0000 (---------------) + I edu
- 0x002157c3, // n0x074c c0x0000 (---------------) + I gov
- 0x00223a83, // n0x074d c0x0000 (---------------) + I int
- 0x00201603, // n0x074e c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x074f c0x0000 (---------------) + I org
- 0x0020bcc3, // n0x0750 c0x0000 (---------------) + I abr
- 0x0036a507, // n0x0751 c0x0000 (---------------) + I abruzzo
- 0x00200482, // n0x0752 c0x0000 (---------------) + I ag
- 0x0032c189, // n0x0753 c0x0000 (---------------) + I agrigento
- 0x00202082, // n0x0754 c0x0000 (---------------) + I al
- 0x0026e9cb, // n0x0755 c0x0000 (---------------) + I alessandria
- 0x002dbe4a, // n0x0756 c0x0000 (---------------) + I alto-adige
- 0x002e0d49, // n0x0757 c0x0000 (---------------) + I altoadige
- 0x00200202, // n0x0758 c0x0000 (---------------) + I an
- 0x00237146, // n0x0759 c0x0000 (---------------) + I ancona
- 0x00277515, // n0x075a c0x0000 (---------------) + I andria-barletta-trani
- 0x0026eb15, // n0x075b c0x0000 (---------------) + I andria-trani-barletta
- 0x00282fd3, // n0x075c c0x0000 (---------------) + I andriabarlettatrani
- 0x0026f093, // n0x075d c0x0000 (---------------) + I andriatranibarletta
- 0x00204382, // n0x075e c0x0000 (---------------) + I ao
- 0x00208b05, // n0x075f c0x0000 (---------------) + I aosta
- 0x003684cc, // n0x0760 c0x0000 (---------------) + I aosta-valley
- 0x002af18b, // n0x0761 c0x0000 (---------------) + I aostavalley
- 0x00268185, // n0x0762 c0x0000 (---------------) + I aoste
- 0x00205c42, // n0x0763 c0x0000 (---------------) + I ap
- 0x00280082, // n0x0764 c0x0000 (---------------) + I aq
- 0x002d1086, // n0x0765 c0x0000 (---------------) + I aquila
- 0x00200a42, // n0x0766 c0x0000 (---------------) + I ar
- 0x0025e8c6, // n0x0767 c0x0000 (---------------) + I arezzo
- 0x0029ff8d, // n0x0768 c0x0000 (---------------) + I ascoli-piceno
- 0x002354cc, // n0x0769 c0x0000 (---------------) + I ascolipiceno
- 0x0023cd04, // n0x076a c0x0000 (---------------) + I asti
- 0x00200102, // n0x076b c0x0000 (---------------) + I at
- 0x002025c2, // n0x076c c0x0000 (---------------) + I av
- 0x00296b48, // n0x076d c0x0000 (---------------) + I avellino
- 0x00201902, // n0x076e c0x0000 (---------------) + I ba
- 0x00250686, // n0x076f c0x0000 (---------------) + I balsan
- 0x0028e704, // n0x0770 c0x0000 (---------------) + I bari
- 0x002776d5, // n0x0771 c0x0000 (---------------) + I barletta-trani-andria
- 0x00283153, // n0x0772 c0x0000 (---------------) + I barlettatraniandria
- 0x00211603, // n0x0773 c0x0000 (---------------) + I bas
- 0x0032728a, // n0x0774 c0x0000 (---------------) + I basilicata
- 0x00222a07, // n0x0775 c0x0000 (---------------) + I belluno
- 0x003452c9, // n0x0776 c0x0000 (---------------) + I benevento
- 0x00349947, // n0x0777 c0x0000 (---------------) + I bergamo
- 0x00367842, // n0x0778 c0x0000 (---------------) + I bg
- 0x00200002, // n0x0779 c0x0000 (---------------) + I bi
- 0x00373a06, // n0x077a c0x0000 (---------------) + I biella
- 0x0020f902, // n0x077b c0x0000 (---------------) + I bl
- 0x000b8948, // n0x077c c0x0000 (---------------) + blogspot
- 0x00211442, // n0x077d c0x0000 (---------------) + I bn
- 0x00200fc2, // n0x077e c0x0000 (---------------) + I bo
- 0x00200fc7, // n0x077f c0x0000 (---------------) + I bologna
- 0x002f7e47, // n0x0780 c0x0000 (---------------) + I bolzano
- 0x00215e85, // n0x0781 c0x0000 (---------------) + I bozen
- 0x00206842, // n0x0782 c0x0000 (---------------) + I br
- 0x00218b07, // n0x0783 c0x0000 (---------------) + I brescia
- 0x00218cc8, // n0x0784 c0x0000 (---------------) + I brindisi
- 0x00205ec2, // n0x0785 c0x0000 (---------------) + I bs
- 0x00245dc2, // n0x0786 c0x0000 (---------------) + I bt
- 0x0022a402, // n0x0787 c0x0000 (---------------) + I bz
- 0x0020bc02, // n0x0788 c0x0000 (---------------) + I ca
- 0x00255108, // n0x0789 c0x0000 (---------------) + I cagliari
- 0x0020bc03, // n0x078a c0x0000 (---------------) + I cal
- 0x0020bc08, // n0x078b c0x0000 (---------------) + I calabria
- 0x00313f8d, // n0x078c c0x0000 (---------------) + I caltanissetta
- 0x0021f383, // n0x078d c0x0000 (---------------) + I cam
- 0x00308b48, // n0x078e c0x0000 (---------------) + I campania
- 0x0023d48f, // n0x078f c0x0000 (---------------) + I campidano-medio
- 0x0023d84e, // n0x0790 c0x0000 (---------------) + I campidanomedio
- 0x002acd4a, // n0x0791 c0x0000 (---------------) + I campobasso
- 0x00345c91, // n0x0792 c0x0000 (---------------) + I carbonia-iglesias
- 0x00346110, // n0x0793 c0x0000 (---------------) + I carboniaiglesias
- 0x002ab44d, // n0x0794 c0x0000 (---------------) + I carrara-massa
- 0x002ab78c, // n0x0795 c0x0000 (---------------) + I carraramassa
- 0x0022d9c7, // n0x0796 c0x0000 (---------------) + I caserta
- 0x00327407, // n0x0797 c0x0000 (---------------) + I catania
- 0x0031e289, // n0x0798 c0x0000 (---------------) + I catanzaro
- 0x0023ce02, // n0x0799 c0x0000 (---------------) + I cb
- 0x00202902, // n0x079a c0x0000 (---------------) + I ce
- 0x00253e4c, // n0x079b c0x0000 (---------------) + I cesena-forli
- 0x0025414b, // n0x079c c0x0000 (---------------) + I cesenaforli
- 0x00200602, // n0x079d c0x0000 (---------------) + I ch
- 0x002b5786, // n0x079e c0x0000 (---------------) + I chieti
- 0x00218c02, // n0x079f c0x0000 (---------------) + I ci
- 0x002007c2, // n0x07a0 c0x0000 (---------------) + I cl
- 0x002309c2, // n0x07a1 c0x0000 (---------------) + I cn
- 0x00207a02, // n0x07a2 c0x0000 (---------------) + I co
- 0x002335c4, // n0x07a3 c0x0000 (---------------) + I como
- 0x0023c747, // n0x07a4 c0x0000 (---------------) + I cosenza
- 0x00218282, // n0x07a5 c0x0000 (---------------) + I cr
- 0x0023f0c7, // n0x07a6 c0x0000 (---------------) + I cremona
- 0x0023fac7, // n0x07a7 c0x0000 (---------------) + I crotone
- 0x00205d42, // n0x07a8 c0x0000 (---------------) + I cs
- 0x00230cc2, // n0x07a9 c0x0000 (---------------) + I ct
- 0x00241505, // n0x07aa c0x0000 (---------------) + I cuneo
- 0x00223342, // n0x07ab c0x0000 (---------------) + I cz
- 0x0027844e, // n0x07ac c0x0000 (---------------) + I dell-ogliastra
- 0x0022ec0d, // n0x07ad c0x0000 (---------------) + I dellogliastra
- 0x0027a643, // n0x07ae c0x0000 (---------------) + I edu
- 0x0034fd4e, // n0x07af c0x0000 (---------------) + I emilia-romagna
- 0x0024ff0d, // n0x07b0 c0x0000 (---------------) + I emiliaromagna
- 0x00211983, // n0x07b1 c0x0000 (---------------) + I emr
- 0x00202682, // n0x07b2 c0x0000 (---------------) + I en
- 0x002c6704, // n0x07b3 c0x0000 (---------------) + I enna
- 0x002d91c2, // n0x07b4 c0x0000 (---------------) + I fc
- 0x0022e3c2, // n0x07b5 c0x0000 (---------------) + I fe
- 0x0033a745, // n0x07b6 c0x0000 (---------------) + I fermo
- 0x00348607, // n0x07b7 c0x0000 (---------------) + I ferrara
- 0x00352042, // n0x07b8 c0x0000 (---------------) + I fg
- 0x0021c5c2, // n0x07b9 c0x0000 (---------------) + I fi
- 0x00245a07, // n0x07ba c0x0000 (---------------) + I firenze
- 0x0024c588, // n0x07bb c0x0000 (---------------) + I florence
- 0x00253942, // n0x07bc c0x0000 (---------------) + I fm
- 0x0021c786, // n0x07bd c0x0000 (---------------) + I foggia
- 0x00253ccc, // n0x07be c0x0000 (---------------) + I forli-cesena
- 0x0025400b, // n0x07bf c0x0000 (---------------) + I forlicesena
- 0x00212442, // n0x07c0 c0x0000 (---------------) + I fr
- 0x0025a84f, // n0x07c1 c0x0000 (---------------) + I friuli-v-giulia
- 0x0025ac10, // n0x07c2 c0x0000 (---------------) + I friuli-ve-giulia
- 0x0025b00f, // n0x07c3 c0x0000 (---------------) + I friuli-vegiulia
- 0x0025b3d5, // n0x07c4 c0x0000 (---------------) + I friuli-venezia-giulia
- 0x0025b914, // n0x07c5 c0x0000 (---------------) + I friuli-veneziagiulia
- 0x0025be0e, // n0x07c6 c0x0000 (---------------) + I friuli-vgiulia
- 0x0025c18e, // n0x07c7 c0x0000 (---------------) + I friuliv-giulia
- 0x0025c50f, // n0x07c8 c0x0000 (---------------) + I friulive-giulia
- 0x0025c8ce, // n0x07c9 c0x0000 (---------------) + I friulivegiulia
- 0x0025cc54, // n0x07ca c0x0000 (---------------) + I friulivenezia-giulia
- 0x0025d153, // n0x07cb c0x0000 (---------------) + I friuliveneziagiulia
- 0x0025d60d, // n0x07cc c0x0000 (---------------) + I friulivgiulia
- 0x002721c9, // n0x07cd c0x0000 (---------------) + I frosinone
- 0x00283603, // n0x07ce c0x0000 (---------------) + I fvg
- 0x00202e82, // n0x07cf c0x0000 (---------------) + I ge
- 0x00209ac5, // n0x07d0 c0x0000 (---------------) + I genoa
- 0x00213b06, // n0x07d1 c0x0000 (---------------) + I genova
- 0x00206cc2, // n0x07d2 c0x0000 (---------------) + I go
- 0x002c27c7, // n0x07d3 c0x0000 (---------------) + I gorizia
- 0x002157c3, // n0x07d4 c0x0000 (---------------) + I gov
- 0x00205bc2, // n0x07d5 c0x0000 (---------------) + I gr
- 0x0022e808, // n0x07d6 c0x0000 (---------------) + I grosseto
- 0x00345ed1, // n0x07d7 c0x0000 (---------------) + I iglesias-carbonia
- 0x00346310, // n0x07d8 c0x0000 (---------------) + I iglesiascarbonia
- 0x002029c2, // n0x07d9 c0x0000 (---------------) + I im
- 0x00338d07, // n0x07da c0x0000 (---------------) + I imperia
- 0x002046c2, // n0x07db c0x0000 (---------------) + I is
- 0x0025e047, // n0x07dc c0x0000 (---------------) + I isernia
- 0x0020e742, // n0x07dd c0x0000 (---------------) + I kr
- 0x00373b09, // n0x07de c0x0000 (---------------) + I la-spezia
- 0x002d1047, // n0x07df c0x0000 (---------------) + I laquila
- 0x002a44c8, // n0x07e0 c0x0000 (---------------) + I laspezia
- 0x00217e06, // n0x07e1 c0x0000 (---------------) + I latina
- 0x002d2943, // n0x07e2 c0x0000 (---------------) + I laz
- 0x00340f85, // n0x07e3 c0x0000 (---------------) + I lazio
- 0x0020ed02, // n0x07e4 c0x0000 (---------------) + I lc
- 0x00209202, // n0x07e5 c0x0000 (---------------) + I le
- 0x00240c45, // n0x07e6 c0x0000 (---------------) + I lecce
- 0x00248b45, // n0x07e7 c0x0000 (---------------) + I lecco
- 0x002020c2, // n0x07e8 c0x0000 (---------------) + I li
- 0x00223bc3, // n0x07e9 c0x0000 (---------------) + I lig
- 0x00300647, // n0x07ea c0x0000 (---------------) + I liguria
- 0x00205107, // n0x07eb c0x0000 (---------------) + I livorno
- 0x00200802, // n0x07ec c0x0000 (---------------) + I lo
- 0x002d5c04, // n0x07ed c0x0000 (---------------) + I lodi
- 0x00224303, // n0x07ee c0x0000 (---------------) + I lom
- 0x002bf589, // n0x07ef c0x0000 (---------------) + I lombardia
- 0x00224308, // n0x07f0 c0x0000 (---------------) + I lombardy
- 0x00220002, // n0x07f1 c0x0000 (---------------) + I lt
- 0x00202f02, // n0x07f2 c0x0000 (---------------) + I lu
- 0x0026d547, // n0x07f3 c0x0000 (---------------) + I lucania
- 0x002d3685, // n0x07f4 c0x0000 (---------------) + I lucca
- 0x00308648, // n0x07f5 c0x0000 (---------------) + I macerata
- 0x0027be87, // n0x07f6 c0x0000 (---------------) + I mantova
- 0x0020aa43, // n0x07f7 c0x0000 (---------------) + I mar
- 0x00322dc6, // n0x07f8 c0x0000 (---------------) + I marche
- 0x002ab2cd, // n0x07f9 c0x0000 (---------------) + I massa-carrara
- 0x002ab64c, // n0x07fa c0x0000 (---------------) + I massacarrara
- 0x002c8006, // n0x07fb c0x0000 (---------------) + I matera
- 0x00203102, // n0x07fc c0x0000 (---------------) + I mb
- 0x002e83c2, // n0x07fd c0x0000 (---------------) + I mc
- 0x00202a02, // n0x07fe c0x0000 (---------------) + I me
- 0x0023d30f, // n0x07ff c0x0000 (---------------) + I medio-campidano
- 0x0023d70e, // n0x0800 c0x0000 (---------------) + I mediocampidano
- 0x002a1347, // n0x0801 c0x0000 (---------------) + I messina
- 0x00207e02, // n0x0802 c0x0000 (---------------) + I mi
- 0x0031f205, // n0x0803 c0x0000 (---------------) + I milan
- 0x0031f206, // n0x0804 c0x0000 (---------------) + I milano
- 0x002298c2, // n0x0805 c0x0000 (---------------) + I mn
- 0x00206c42, // n0x0806 c0x0000 (---------------) + I mo
- 0x003522c6, // n0x0807 c0x0000 (---------------) + I modena
- 0x00229e03, // n0x0808 c0x0000 (---------------) + I mol
- 0x002c8186, // n0x0809 c0x0000 (---------------) + I molise
- 0x002c0385, // n0x080a c0x0000 (---------------) + I monza
- 0x002c038d, // n0x080b c0x0000 (---------------) + I monza-brianza
- 0x002c06d5, // n0x080c c0x0000 (---------------) + I monza-e-della-brianza
- 0x002c0c0c, // n0x080d c0x0000 (---------------) + I monzabrianza
- 0x002c0f0d, // n0x080e c0x0000 (---------------) + I monzaebrianza
- 0x002c1252, // n0x080f c0x0000 (---------------) + I monzaedellabrianza
- 0x00225542, // n0x0810 c0x0000 (---------------) + I ms
- 0x00268d82, // n0x0811 c0x0000 (---------------) + I mt
- 0x00200242, // n0x0812 c0x0000 (---------------) + I na
- 0x002e2386, // n0x0813 c0x0000 (---------------) + I naples
- 0x00214c46, // n0x0814 c0x0000 (---------------) + I napoli
- 0x00201b82, // n0x0815 c0x0000 (---------------) + I no
- 0x00213b86, // n0x0816 c0x0000 (---------------) + I novara
- 0x002267c2, // n0x0817 c0x0000 (---------------) + I nu
- 0x003605c5, // n0x0818 c0x0000 (---------------) + I nuoro
- 0x00200cc2, // n0x0819 c0x0000 (---------------) + I og
- 0x0022ed09, // n0x081a c0x0000 (---------------) + I ogliastra
- 0x0023948c, // n0x081b c0x0000 (---------------) + I olbia-tempio
- 0x002397cb, // n0x081c c0x0000 (---------------) + I olbiatempio
- 0x00200bc2, // n0x081d c0x0000 (---------------) + I or
- 0x0024c9c8, // n0x081e c0x0000 (---------------) + I oristano
- 0x00203f42, // n0x081f c0x0000 (---------------) + I ot
- 0x002001c2, // n0x0820 c0x0000 (---------------) + I pa
- 0x002088c6, // n0x0821 c0x0000 (---------------) + I padova
- 0x0033c145, // n0x0822 c0x0000 (---------------) + I padua
- 0x003665c7, // n0x0823 c0x0000 (---------------) + I palermo
- 0x00322f85, // n0x0824 c0x0000 (---------------) + I parma
- 0x002eb285, // n0x0825 c0x0000 (---------------) + I pavia
- 0x002416c2, // n0x0826 c0x0000 (---------------) + I pc
- 0x00311502, // n0x0827 c0x0000 (---------------) + I pd
- 0x00202142, // n0x0828 c0x0000 (---------------) + I pe
- 0x0031ca47, // n0x0829 c0x0000 (---------------) + I perugia
- 0x00246b8d, // n0x082a c0x0000 (---------------) + I pesaro-urbino
- 0x00246f0c, // n0x082b c0x0000 (---------------) + I pesarourbino
- 0x002d3d87, // n0x082c c0x0000 (---------------) + I pescara
- 0x00222d02, // n0x082d c0x0000 (---------------) + I pg
- 0x00208542, // n0x082e c0x0000 (---------------) + I pi
- 0x0020b508, // n0x082f c0x0000 (---------------) + I piacenza
- 0x00254508, // n0x0830 c0x0000 (---------------) + I piedmont
- 0x002cee88, // n0x0831 c0x0000 (---------------) + I piemonte
- 0x00255744, // n0x0832 c0x0000 (---------------) + I pisa
- 0x002b74c7, // n0x0833 c0x0000 (---------------) + I pistoia
- 0x002d46c3, // n0x0834 c0x0000 (---------------) + I pmn
- 0x002a9f82, // n0x0835 c0x0000 (---------------) + I pn
- 0x00205982, // n0x0836 c0x0000 (---------------) + I po
- 0x002d60c9, // n0x0837 c0x0000 (---------------) + I pordenone
- 0x00244a07, // n0x0838 c0x0000 (---------------) + I potenza
- 0x002487c2, // n0x0839 c0x0000 (---------------) + I pr
- 0x003378c5, // n0x083a c0x0000 (---------------) + I prato
- 0x002226c2, // n0x083b c0x0000 (---------------) + I pt
- 0x00200f42, // n0x083c c0x0000 (---------------) + I pu
- 0x002b2803, // n0x083d c0x0000 (---------------) + I pug
- 0x002b2806, // n0x083e c0x0000 (---------------) + I puglia
- 0x002dbbc2, // n0x083f c0x0000 (---------------) + I pv
- 0x002dc0c2, // n0x0840 c0x0000 (---------------) + I pz
- 0x00200a82, // n0x0841 c0x0000 (---------------) + I ra
- 0x0036b686, // n0x0842 c0x0000 (---------------) + I ragusa
- 0x0036d087, // n0x0843 c0x0000 (---------------) + I ravenna
- 0x002074c2, // n0x0844 c0x0000 (---------------) + I rc
- 0x002039c2, // n0x0845 c0x0000 (---------------) + I re
- 0x002c438f, // n0x0846 c0x0000 (---------------) + I reggio-calabria
- 0x0034fb8d, // n0x0847 c0x0000 (---------------) + I reggio-emilia
- 0x0020ba8e, // n0x0848 c0x0000 (---------------) + I reggiocalabria
- 0x0024fd8c, // n0x0849 c0x0000 (---------------) + I reggioemilia
- 0x00201702, // n0x084a c0x0000 (---------------) + I rg
- 0x00209fc2, // n0x084b c0x0000 (---------------) + I ri
- 0x00220c85, // n0x084c c0x0000 (---------------) + I rieti
- 0x002cc786, // n0x084d c0x0000 (---------------) + I rimini
- 0x00225502, // n0x084e c0x0000 (---------------) + I rm
- 0x00205202, // n0x084f c0x0000 (---------------) + I rn
- 0x00200c02, // n0x0850 c0x0000 (---------------) + I ro
- 0x00247304, // n0x0851 c0x0000 (---------------) + I roma
- 0x002eee84, // n0x0852 c0x0000 (---------------) + I rome
- 0x002ff086, // n0x0853 c0x0000 (---------------) + I rovigo
- 0x00202882, // n0x0854 c0x0000 (---------------) + I sa
- 0x003529c7, // n0x0855 c0x0000 (---------------) + I salerno
- 0x0023ea83, // n0x0856 c0x0000 (---------------) + I sar
- 0x0023fec8, // n0x0857 c0x0000 (---------------) + I sardegna
- 0x00240548, // n0x0858 c0x0000 (---------------) + I sardinia
- 0x00259fc7, // n0x0859 c0x0000 (---------------) + I sassari
- 0x002705c6, // n0x085a c0x0000 (---------------) + I savona
- 0x00204682, // n0x085b c0x0000 (---------------) + I si
- 0x00218e43, // n0x085c c0x0000 (---------------) + I sic
- 0x00218e47, // n0x085d c0x0000 (---------------) + I sicilia
- 0x0026d146, // n0x085e c0x0000 (---------------) + I sicily
- 0x002dee45, // n0x085f c0x0000 (---------------) + I siena
- 0x002f45c8, // n0x0860 c0x0000 (---------------) + I siracusa
- 0x00206102, // n0x0861 c0x0000 (---------------) + I so
- 0x00285b87, // n0x0862 c0x0000 (---------------) + I sondrio
- 0x0023fcc2, // n0x0863 c0x0000 (---------------) + I sp
- 0x002c4342, // n0x0864 c0x0000 (---------------) + I sr
- 0x00204642, // n0x0865 c0x0000 (---------------) + I ss
- 0x002cae89, // n0x0866 c0x0000 (---------------) + I suedtirol
- 0x00240a82, // n0x0867 c0x0000 (---------------) + I sv
- 0x00201682, // n0x0868 c0x0000 (---------------) + I ta
- 0x0026f4c3, // n0x0869 c0x0000 (---------------) + I taa
- 0x00345087, // n0x086a c0x0000 (---------------) + I taranto
- 0x00201882, // n0x086b c0x0000 (---------------) + I te
- 0x0023960c, // n0x086c c0x0000 (---------------) + I tempio-olbia
- 0x0023990b, // n0x086d c0x0000 (---------------) + I tempioolbia
- 0x002c8086, // n0x086e c0x0000 (---------------) + I teramo
- 0x002e57c5, // n0x086f c0x0000 (---------------) + I terni
- 0x00203f82, // n0x0870 c0x0000 (---------------) + I tn
- 0x00201202, // n0x0871 c0x0000 (---------------) + I to
- 0x002afbc6, // n0x0872 c0x0000 (---------------) + I torino
- 0x0024b043, // n0x0873 c0x0000 (---------------) + I tos
- 0x00319547, // n0x0874 c0x0000 (---------------) + I toscana
- 0x00219e42, // n0x0875 c0x0000 (---------------) + I tp
- 0x00205542, // n0x0876 c0x0000 (---------------) + I tr
- 0x00277395, // n0x0877 c0x0000 (---------------) + I trani-andria-barletta
- 0x0026ecd5, // n0x0878 c0x0000 (---------------) + I trani-barletta-andria
- 0x00282e93, // n0x0879 c0x0000 (---------------) + I traniandriabarletta
- 0x0026f213, // n0x087a c0x0000 (---------------) + I tranibarlettaandria
- 0x00293cc7, // n0x087b c0x0000 (---------------) + I trapani
- 0x002b3208, // n0x087c c0x0000 (---------------) + I trentino
- 0x002b5c90, // n0x087d c0x0000 (---------------) + I trentino-a-adige
- 0x002b8b0f, // n0x087e c0x0000 (---------------) + I trentino-aadige
- 0x003576d3, // n0x087f c0x0000 (---------------) + I trentino-alto-adige
- 0x002fb7d2, // n0x0880 c0x0000 (---------------) + I trentino-altoadige
- 0x0032bd50, // n0x0881 c0x0000 (---------------) + I trentino-s-tirol
- 0x00336a0f, // n0x0882 c0x0000 (---------------) + I trentino-stirol
- 0x002b3212, // n0x0883 c0x0000 (---------------) + I trentino-sud-tirol
- 0x002bb911, // n0x0884 c0x0000 (---------------) + I trentino-sudtirol
- 0x002c9953, // n0x0885 c0x0000 (---------------) + I trentino-sued-tirol
- 0x002cac52, // n0x0886 c0x0000 (---------------) + I trentino-suedtirol
- 0x002ce68f, // n0x0887 c0x0000 (---------------) + I trentinoa-adige
- 0x002da90e, // n0x0888 c0x0000 (---------------) + I trentinoaadige
- 0x002dbc52, // n0x0889 c0x0000 (---------------) + I trentinoalto-adige
- 0x002e0b51, // n0x088a c0x0000 (---------------) + I trentinoaltoadige
- 0x002e2a8f, // n0x088b c0x0000 (---------------) + I trentinos-tirol
- 0x002ea78e, // n0x088c c0x0000 (---------------) + I trentinostirol
- 0x002eca91, // n0x088d c0x0000 (---------------) + I trentinosud-tirol
- 0x0036f150, // n0x088e c0x0000 (---------------) + I trentinosudtirol
- 0x002f9812, // n0x088f c0x0000 (---------------) + I trentinosued-tirol
- 0x0030b591, // n0x0890 c0x0000 (---------------) + I trentinosuedtirol
- 0x00313186, // n0x0891 c0x0000 (---------------) + I trento
- 0x0031a847, // n0x0892 c0x0000 (---------------) + I treviso
- 0x0021b007, // n0x0893 c0x0000 (---------------) + I trieste
- 0x002021c2, // n0x0894 c0x0000 (---------------) + I ts
- 0x002be585, // n0x0895 c0x0000 (---------------) + I turin
- 0x002f0347, // n0x0896 c0x0000 (---------------) + I tuscany
- 0x00292602, // n0x0897 c0x0000 (---------------) + I tv
- 0x0022f0c2, // n0x0898 c0x0000 (---------------) + I ud
- 0x002abc05, // n0x0899 c0x0000 (---------------) + I udine
- 0x0021a503, // n0x089a c0x0000 (---------------) + I umb
- 0x0022a286, // n0x089b c0x0000 (---------------) + I umbria
- 0x00246d4d, // n0x089c c0x0000 (---------------) + I urbino-pesaro
- 0x0024708c, // n0x089d c0x0000 (---------------) + I urbinopesaro
- 0x002000c2, // n0x089e c0x0000 (---------------) + I va
- 0x0036834b, // n0x089f c0x0000 (---------------) + I val-d-aosta
- 0x002af04a, // n0x08a0 c0x0000 (---------------) + I val-daosta
- 0x002089ca, // n0x08a1 c0x0000 (---------------) + I vald-aosta
- 0x002d55c9, // n0x08a2 c0x0000 (---------------) + I valdaosta
- 0x002f058b, // n0x08a3 c0x0000 (---------------) + I valle-aosta
- 0x0034780d, // n0x08a4 c0x0000 (---------------) + I valle-d-aosta
- 0x0022898c, // n0x08a5 c0x0000 (---------------) + I valle-daosta
- 0x0023ec0a, // n0x08a6 c0x0000 (---------------) + I valleaosta
- 0x0024300c, // n0x08a7 c0x0000 (---------------) + I valled-aosta
- 0x0026220b, // n0x08a8 c0x0000 (---------------) + I valledaosta
- 0x00267fcc, // n0x08a9 c0x0000 (---------------) + I vallee-aoste
- 0x0026bd8b, // n0x08aa c0x0000 (---------------) + I valleeaoste
- 0x002c4fc3, // n0x08ab c0x0000 (---------------) + I vao
- 0x002e9606, // n0x08ac c0x0000 (---------------) + I varese
- 0x002f0c42, // n0x08ad c0x0000 (---------------) + I vb
- 0x002f1142, // n0x08ae c0x0000 (---------------) + I vc
- 0x00205043, // n0x08af c0x0000 (---------------) + I vda
- 0x00202642, // n0x08b0 c0x0000 (---------------) + I ve
- 0x00202643, // n0x08b1 c0x0000 (---------------) + I ven
- 0x00270d06, // n0x08b2 c0x0000 (---------------) + I veneto
- 0x0025b587, // n0x08b3 c0x0000 (---------------) + I venezia
- 0x00271e86, // n0x08b4 c0x0000 (---------------) + I venice
- 0x002da588, // n0x08b5 c0x0000 (---------------) + I verbania
- 0x002a2d88, // n0x08b6 c0x0000 (---------------) + I vercelli
- 0x002f2286, // n0x08b7 c0x0000 (---------------) + I verona
- 0x002032c2, // n0x08b8 c0x0000 (---------------) + I vi
- 0x002f628d, // n0x08b9 c0x0000 (---------------) + I vibo-valentia
- 0x002f65cc, // n0x08ba c0x0000 (---------------) + I vibovalentia
- 0x00369047, // n0x08bb c0x0000 (---------------) + I vicenza
- 0x002f7d07, // n0x08bc c0x0000 (---------------) + I viterbo
- 0x0020b042, // n0x08bd c0x0000 (---------------) + I vr
- 0x00241d82, // n0x08be c0x0000 (---------------) + I vs
- 0x0026d0c2, // n0x08bf c0x0000 (---------------) + I vt
- 0x00202602, // n0x08c0 c0x0000 (---------------) + I vv
- 0x00207a02, // n0x08c1 c0x0000 (---------------) + I co
- 0x00201603, // n0x08c2 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x08c3 c0x0000 (---------------) + I org
- 0x00222603, // n0x08c4 c0x0000 (---------------) + I com
- 0x0027a643, // n0x08c5 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x08c6 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x08c7 c0x0000 (---------------) + I mil
- 0x0022aec4, // n0x08c8 c0x0000 (---------------) + I name
- 0x00201603, // n0x08c9 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x08ca c0x0000 (---------------) + I org
- 0x002526c3, // n0x08cb c0x0000 (---------------) + I sch
- 0x00201d82, // n0x08cc c0x0000 (---------------) + I ac
- 0x00208902, // n0x08cd c0x0000 (---------------) + I ad
- 0x1c6756c5, // n0x08ce c0x0071 (n0x090c-n0x0940) + I aichi
- 0x1ca69d05, // n0x08cf c0x0072 (n0x0940-n0x095c) + I akita
- 0x1cec5006, // n0x08d0 c0x0073 (n0x095c-n0x0972) + I aomori
- 0x000b8948, // n0x08d1 c0x0000 (---------------) + blogspot
- 0x1d2b0885, // n0x08d2 c0x0074 (n0x0972-n0x09ac) + I chiba
- 0x00207a02, // n0x08d3 c0x0000 (---------------) + I co
- 0x00202542, // n0x08d4 c0x0000 (---------------) + I ed
- 0x1d602945, // n0x08d5 c0x0075 (n0x09ac-n0x09c2) + I ehime
- 0x1da7ac85, // n0x08d6 c0x0076 (n0x09c2-n0x09d1) + I fukui
- 0x1de7b447, // n0x08d7 c0x0077 (n0x09d1-n0x0a10) + I fukuoka
- 0x1e27bcc9, // n0x08d8 c0x0078 (n0x0a10-n0x0a43) + I fukushima
- 0x1e679c84, // n0x08d9 c0x0079 (n0x0a43-n0x0a69) + I gifu
- 0x00206cc2, // n0x08da c0x0000 (---------------) + I go
- 0x00205bc2, // n0x08db c0x0000 (---------------) + I gr
- 0x1eb52085, // n0x08dc c0x007a (n0x0a69-n0x0a8d) + I gunma
- 0x1ee69e49, // n0x08dd c0x007b (n0x0a8d-n0x0aa6) + I hiroshima
- 0x1f32e148, // n0x08de c0x007c (n0x0aa6-n0x0b34) + I hokkaido
- 0x1f6a8f05, // n0x08df c0x007d (n0x0b34-n0x0b62) + I hyogo
- 0x1fb2cd07, // n0x08e0 c0x007e (n0x0b62-n0x0b95) + I ibaraki
- 0x1fe26fc8, // n0x08e1 c0x007f (n0x0b95-n0x0ba8) + I ishikawa
- 0x20351705, // n0x08e2 c0x0080 (n0x0ba8-n0x0bca) + I iwate
- 0x20600446, // n0x08e3 c0x0081 (n0x0bca-n0x0bd9) + I kagawa
- 0x20b17449, // n0x08e4 c0x0082 (n0x0bd9-n0x0bed) + I kagoshima
- 0x20f55c08, // n0x08e5 c0x0083 (n0x0bed-n0x0c0b) + I kanagawa
- 0x212b5408, // n0x08e6 c0x0084 (n0x0c0b-n0x0c0c)* o I kawasaki
- 0x2161334a, // n0x08e7 c0x0085 (n0x0c0c-n0x0c0d)* o I kitakyushu
- 0x21a72a04, // n0x08e8 c0x0086 (n0x0c0d-n0x0c0e)* o I kobe
- 0x21ec6385, // n0x08e9 c0x0087 (n0x0c0e-n0x0c2d) + I kochi
- 0x222c7d88, // n0x08ea c0x0088 (n0x0c2d-n0x0c47) + I kumamoto
- 0x22665a05, // n0x08eb c0x0089 (n0x0c47-n0x0c66) + I kyoto
- 0x00213f02, // n0x08ec c0x0000 (---------------) + I lg
- 0x22a2d5c3, // n0x08ed c0x008a (n0x0c66-n0x0c84) + I mie
- 0x22e9d486, // n0x08ee c0x008b (n0x0c84-n0x0ca5) + I miyagi
- 0x232573c8, // n0x08ef c0x008c (n0x0ca5-n0x0cc0) + I miyazaki
- 0x2360d586, // n0x08f0 c0x008d (n0x0cc0-n0x0d0b) + I nagano
- 0x23a99248, // n0x08f1 c0x008e (n0x0d0b-n0x0d21) + I nagasaki
- 0x23f19386, // n0x08f2 c0x008f (n0x0d21-n0x0d22)* o I nagoya
- 0x24268e84, // n0x08f3 c0x0090 (n0x0d22-n0x0d48) + I nara
- 0x00201602, // n0x08f4 c0x0000 (---------------) + I ne
- 0x24690607, // n0x08f5 c0x0091 (n0x0d48-n0x0d6a) + I niigata
- 0x24a0a1c4, // n0x08f6 c0x0092 (n0x0d6a-n0x0d7d) + I oita
- 0x24e75247, // n0x08f7 c0x0093 (n0x0d7d-n0x0d97) + I okayama
- 0x2521e607, // n0x08f8 c0x0094 (n0x0d97-n0x0dc1) + I okinawa
- 0x00200bc2, // n0x08f9 c0x0000 (---------------) + I or
- 0x25694785, // n0x08fa c0x0095 (n0x0dc1-n0x0df3) + I osaka
- 0x25a83fc4, // n0x08fb c0x0096 (n0x0df3-n0x0e0d) + I saga
- 0x25f57207, // n0x08fc c0x0097 (n0x0e0d-n0x0e52) + I saitama
- 0x26239247, // n0x08fd c0x0098 (n0x0e52-n0x0e53)* o I sapporo
- 0x2667e946, // n0x08fe c0x0099 (n0x0e53-n0x0e54)* o I sendai
- 0x26a7ba85, // n0x08ff c0x009a (n0x0e54-n0x0e6b) + I shiga
- 0x26e8ecc7, // n0x0900 c0x009b (n0x0e6b-n0x0e82) + I shimane
- 0x272dd488, // n0x0901 c0x009c (n0x0e82-n0x0ea6) + I shizuoka
- 0x27735ac7, // n0x0902 c0x009d (n0x0ea6-n0x0ec5) + I tochigi
- 0x27ae1f89, // n0x0903 c0x009e (n0x0ec5-n0x0ed6) + I tokushima
- 0x27ed8e85, // n0x0904 c0x009f (n0x0ed6-n0x0f0f) + I tokyo
- 0x282fb3c7, // n0x0905 c0x00a0 (n0x0f0f-n0x0f1c) + I tottori
- 0x2868a786, // n0x0906 c0x00a1 (n0x0f1c-n0x0f34) + I toyama
- 0x28b09c88, // n0x0907 c0x00a2 (n0x0f34-n0x0f51) + I wakayama
- 0x28e7d308, // n0x0908 c0x00a3 (n0x0f51-n0x0f73) + I yamagata
- 0x29281909, // n0x0909 c0x00a4 (n0x0f73-n0x0f83) + I yamaguchi
- 0x29722709, // n0x090a c0x00a5 (n0x0f83-n0x0f9f) + I yamanashi
- 0x29b11a88, // n0x090b c0x00a6 (n0x0f9f-n0x0fa0)* o I yokohama
- 0x002b16c5, // n0x090c c0x0000 (---------------) + I aisai
- 0x00200283, // n0x090d c0x0000 (---------------) + I ama
- 0x00248144, // n0x090e c0x0000 (---------------) + I anjo
- 0x002fca85, // n0x090f c0x0000 (---------------) + I asuke
- 0x002799c6, // n0x0910 c0x0000 (---------------) + I chiryu
- 0x0029bd05, // n0x0911 c0x0000 (---------------) + I chita
- 0x00280f84, // n0x0912 c0x0000 (---------------) + I fuso
- 0x002c26c8, // n0x0913 c0x0000 (---------------) + I gamagori
- 0x0027f585, // n0x0914 c0x0000 (---------------) + I handa
- 0x0028cb44, // n0x0915 c0x0000 (---------------) + I hazu
- 0x002456c7, // n0x0916 c0x0000 (---------------) + I hekinan
- 0x002971ca, // n0x0917 c0x0000 (---------------) + I higashiura
- 0x002de64a, // n0x0918 c0x0000 (---------------) + I ichinomiya
- 0x002e5407, // n0x0919 c0x0000 (---------------) + I inazawa
- 0x00226787, // n0x091a c0x0000 (---------------) + I inuyama
- 0x0033f5c7, // n0x091b c0x0000 (---------------) + I isshiki
- 0x00266f47, // n0x091c c0x0000 (---------------) + I iwakura
- 0x002e63c5, // n0x091d c0x0000 (---------------) + I kanie
- 0x00315dc6, // n0x091e c0x0000 (---------------) + I kariya
- 0x002bc7c7, // n0x091f c0x0000 (---------------) + I kasugai
- 0x00212f04, // n0x0920 c0x0000 (---------------) + I kira
- 0x002f57c6, // n0x0921 c0x0000 (---------------) + I kiyosu
- 0x002f51c6, // n0x0922 c0x0000 (---------------) + I komaki
- 0x002bc005, // n0x0923 c0x0000 (---------------) + I konan
- 0x002dcac4, // n0x0924 c0x0000 (---------------) + I kota
- 0x00292746, // n0x0925 c0x0000 (---------------) + I mihama
- 0x00295c07, // n0x0926 c0x0000 (---------------) + I miyoshi
- 0x002d9f86, // n0x0927 c0x0000 (---------------) + I nishio
- 0x002a5707, // n0x0928 c0x0000 (---------------) + I nisshin
- 0x0028bd43, // n0x0929 c0x0000 (---------------) + I obu
- 0x00230706, // n0x092a c0x0000 (---------------) + I oguchi
- 0x00259185, // n0x092b c0x0000 (---------------) + I oharu
- 0x0027b547, // n0x092c c0x0000 (---------------) + I okazaki
- 0x002baaca, // n0x092d c0x0000 (---------------) + I owariasahi
- 0x0022e904, // n0x092e c0x0000 (---------------) + I seto
- 0x002264c8, // n0x092f c0x0000 (---------------) + I shikatsu
- 0x002dec09, // n0x0930 c0x0000 (---------------) + I shinshiro
- 0x002dce07, // n0x0931 c0x0000 (---------------) + I shitara
- 0x00375086, // n0x0932 c0x0000 (---------------) + I tahara
- 0x0027d488, // n0x0933 c0x0000 (---------------) + I takahama
- 0x002a0649, // n0x0934 c0x0000 (---------------) + I tobishima
- 0x00270e04, // n0x0935 c0x0000 (---------------) + I toei
- 0x003113c4, // n0x0936 c0x0000 (---------------) + I togo
- 0x002f88c5, // n0x0937 c0x0000 (---------------) + I tokai
- 0x002bc4c8, // n0x0938 c0x0000 (---------------) + I tokoname
- 0x002bda07, // n0x0939 c0x0000 (---------------) + I toyoake
- 0x002d8bc9, // n0x093a c0x0000 (---------------) + I toyohashi
- 0x00337988, // n0x093b c0x0000 (---------------) + I toyokawa
- 0x00246486, // n0x093c c0x0000 (---------------) + I toyone
- 0x00255a86, // n0x093d c0x0000 (---------------) + I toyota
- 0x002913c8, // n0x093e c0x0000 (---------------) + I tsushima
- 0x00334686, // n0x093f c0x0000 (---------------) + I yatomi
- 0x00269d05, // n0x0940 c0x0000 (---------------) + I akita
- 0x0027ea06, // n0x0941 c0x0000 (---------------) + I daisen
- 0x00276088, // n0x0942 c0x0000 (---------------) + I fujisato
- 0x0027aa46, // n0x0943 c0x0000 (---------------) + I gojome
- 0x0034218b, // n0x0944 c0x0000 (---------------) + I hachirogata
- 0x00287306, // n0x0945 c0x0000 (---------------) + I happou
- 0x0029294d, // n0x0946 c0x0000 (---------------) + I higashinaruse
- 0x0020a045, // n0x0947 c0x0000 (---------------) + I honjo
- 0x002a46c6, // n0x0948 c0x0000 (---------------) + I honjyo
- 0x00212805, // n0x0949 c0x0000 (---------------) + I ikawa
- 0x0020a449, // n0x094a c0x0000 (---------------) + I kamikoani
- 0x0035e7c7, // n0x094b c0x0000 (---------------) + I kamioka
- 0x00343d08, // n0x094c c0x0000 (---------------) + I katagami
- 0x0023a386, // n0x094d c0x0000 (---------------) + I kazuno
- 0x00291d09, // n0x094e c0x0000 (---------------) + I kitaakita
- 0x002eec06, // n0x094f c0x0000 (---------------) + I kosaka
- 0x002baa45, // n0x0950 c0x0000 (---------------) + I kyowa
- 0x002625c6, // n0x0951 c0x0000 (---------------) + I misato
- 0x002a3746, // n0x0952 c0x0000 (---------------) + I mitane
- 0x002c2009, // n0x0953 c0x0000 (---------------) + I moriyoshi
- 0x003111c6, // n0x0954 c0x0000 (---------------) + I nikaho
- 0x00249e47, // n0x0955 c0x0000 (---------------) + I noshiro
- 0x002dd345, // n0x0956 c0x0000 (---------------) + I odate
- 0x002043c3, // n0x0957 c0x0000 (---------------) + I oga
- 0x00342305, // n0x0958 c0x0000 (---------------) + I ogata
- 0x002c7c47, // n0x0959 c0x0000 (---------------) + I semboku
- 0x0036ca06, // n0x095a c0x0000 (---------------) + I yokote
- 0x00209f49, // n0x095b c0x0000 (---------------) + I yurihonjo
- 0x002c5006, // n0x095c c0x0000 (---------------) + I aomori
- 0x002a51c6, // n0x095d c0x0000 (---------------) + I gonohe
- 0x00245509, // n0x095e c0x0000 (---------------) + I hachinohe
- 0x0027e409, // n0x095f c0x0000 (---------------) + I hashikami
- 0x0029b987, // n0x0960 c0x0000 (---------------) + I hiranai
- 0x00360d48, // n0x0961 c0x0000 (---------------) + I hirosaki
- 0x002c3b49, // n0x0962 c0x0000 (---------------) + I itayanagi
- 0x0027b948, // n0x0963 c0x0000 (---------------) + I kuroishi
- 0x00348d46, // n0x0964 c0x0000 (---------------) + I misawa
- 0x002cb4c5, // n0x0965 c0x0000 (---------------) + I mutsu
- 0x0023c9ca, // n0x0966 c0x0000 (---------------) + I nakadomari
- 0x002a5246, // n0x0967 c0x0000 (---------------) + I noheji
- 0x00299586, // n0x0968 c0x0000 (---------------) + I oirase
- 0x00290545, // n0x0969 c0x0000 (---------------) + I owani
- 0x00360688, // n0x096a c0x0000 (---------------) + I rokunohe
- 0x0024ee07, // n0x096b c0x0000 (---------------) + I sannohe
- 0x00201a0a, // n0x096c c0x0000 (---------------) + I shichinohe
- 0x00246146, // n0x096d c0x0000 (---------------) + I shingo
- 0x00306845, // n0x096e c0x0000 (---------------) + I takko
- 0x002fd706, // n0x096f c0x0000 (---------------) + I towada
- 0x00285207, // n0x0970 c0x0000 (---------------) + I tsugaru
- 0x00374f47, // n0x0971 c0x0000 (---------------) + I tsuruta
- 0x0022f545, // n0x0972 c0x0000 (---------------) + I abiko
- 0x002bac05, // n0x0973 c0x0000 (---------------) + I asahi
- 0x0033fd06, // n0x0974 c0x0000 (---------------) + I chonan
- 0x002a9986, // n0x0975 c0x0000 (---------------) + I chosei
- 0x002adb86, // n0x0976 c0x0000 (---------------) + I choshi
- 0x002606c4, // n0x0977 c0x0000 (---------------) + I chuo
- 0x0027d9c9, // n0x0978 c0x0000 (---------------) + I funabashi
- 0x002827c6, // n0x0979 c0x0000 (---------------) + I futtsu
- 0x0027880a, // n0x097a c0x0000 (---------------) + I hanamigawa
- 0x0028af48, // n0x097b c0x0000 (---------------) + I ichihara
- 0x002a0348, // n0x097c c0x0000 (---------------) + I ichikawa
- 0x002de64a, // n0x097d c0x0000 (---------------) + I ichinomiya
- 0x00366d85, // n0x097e c0x0000 (---------------) + I inzai
- 0x00295b45, // n0x097f c0x0000 (---------------) + I isumi
- 0x00316508, // n0x0980 c0x0000 (---------------) + I kamagaya
- 0x00287b48, // n0x0981 c0x0000 (---------------) + I kamogawa
- 0x00202247, // n0x0982 c0x0000 (---------------) + I kashiwa
- 0x00224f46, // n0x0983 c0x0000 (---------------) + I katori
- 0x00305a88, // n0x0984 c0x0000 (---------------) + I katsuura
- 0x0030f507, // n0x0985 c0x0000 (---------------) + I kimitsu
- 0x002644c8, // n0x0986 c0x0000 (---------------) + I kisarazu
- 0x002ac486, // n0x0987 c0x0000 (---------------) + I kozaki
- 0x00322b48, // n0x0988 c0x0000 (---------------) + I kujukuri
- 0x0028e3c6, // n0x0989 c0x0000 (---------------) + I kyonan
- 0x00288ec7, // n0x098a c0x0000 (---------------) + I matsudo
- 0x00267c06, // n0x098b c0x0000 (---------------) + I midori
- 0x00292746, // n0x098c c0x0000 (---------------) + I mihama
- 0x0024b38a, // n0x098d c0x0000 (---------------) + I minamiboso
- 0x00233646, // n0x098e c0x0000 (---------------) + I mobara
- 0x002cb4c9, // n0x098f c0x0000 (---------------) + I mutsuzawa
- 0x0036cf86, // n0x0990 c0x0000 (---------------) + I nagara
- 0x0036d1ca, // n0x0991 c0x0000 (---------------) + I nagareyama
- 0x00268e89, // n0x0992 c0x0000 (---------------) + I narashino
- 0x002f2386, // n0x0993 c0x0000 (---------------) + I narita
- 0x0025f744, // n0x0994 c0x0000 (---------------) + I noda
- 0x00209b8d, // n0x0995 c0x0000 (---------------) + I oamishirasato
- 0x00281b87, // n0x0996 c0x0000 (---------------) + I omigawa
- 0x003083c6, // n0x0997 c0x0000 (---------------) + I onjuku
- 0x002b52c5, // n0x0998 c0x0000 (---------------) + I otaki
- 0x002eec85, // n0x0999 c0x0000 (---------------) + I sakae
- 0x0021a006, // n0x099a c0x0000 (---------------) + I sakura
- 0x002a3f09, // n0x099b c0x0000 (---------------) + I shimofusa
- 0x002fbfc7, // n0x099c c0x0000 (---------------) + I shirako
- 0x00277f06, // n0x099d c0x0000 (---------------) + I shiroi
- 0x002dc246, // n0x099e c0x0000 (---------------) + I shisui
- 0x0036e009, // n0x099f c0x0000 (---------------) + I sodegaura
- 0x0027cb84, // n0x09a0 c0x0000 (---------------) + I sosa
- 0x0024c284, // n0x09a1 c0x0000 (---------------) + I tako
- 0x0024f888, // n0x09a2 c0x0000 (---------------) + I tateyama
- 0x0029fac6, // n0x09a3 c0x0000 (---------------) + I togane
- 0x0029b308, // n0x09a4 c0x0000 (---------------) + I tohnosho
- 0x00262548, // n0x09a5 c0x0000 (---------------) + I tomisato
- 0x002a16c7, // n0x09a6 c0x0000 (---------------) + I urayasu
- 0x00237449, // n0x09a7 c0x0000 (---------------) + I yachimata
- 0x00374ac7, // n0x09a8 c0x0000 (---------------) + I yachiyo
- 0x002b074a, // n0x09a9 c0x0000 (---------------) + I yokaichiba
- 0x002e3c8f, // n0x09aa c0x0000 (---------------) + I yokoshibahikari
- 0x0025898a, // n0x09ab c0x0000 (---------------) + I yotsukaido
- 0x00220a85, // n0x09ac c0x0000 (---------------) + I ainan
- 0x002762c5, // n0x09ad c0x0000 (---------------) + I honai
- 0x00224e05, // n0x09ae c0x0000 (---------------) + I ikata
- 0x0028e647, // n0x09af c0x0000 (---------------) + I imabari
- 0x002035c3, // n0x09b0 c0x0000 (---------------) + I iyo
- 0x00360f48, // n0x09b1 c0x0000 (---------------) + I kamijima
- 0x00204886, // n0x09b2 c0x0000 (---------------) + I kihoku
- 0x00204989, // n0x09b3 c0x0000 (---------------) + I kumakogen
- 0x002d2c46, // n0x09b4 c0x0000 (---------------) + I masaki
- 0x002d1cc7, // n0x09b5 c0x0000 (---------------) + I matsuno
- 0x00291ac9, // n0x09b6 c0x0000 (---------------) + I matsuyama
- 0x00343c08, // n0x09b7 c0x0000 (---------------) + I namikata
- 0x0020a607, // n0x09b8 c0x0000 (---------------) + I niihama
- 0x002b4fc3, // n0x09b9 c0x0000 (---------------) + I ozu
- 0x002b1745, // n0x09ba c0x0000 (---------------) + I saijo
- 0x002e3bc5, // n0x09bb c0x0000 (---------------) + I seiyo
- 0x0026050b, // n0x09bc c0x0000 (---------------) + I shikokuchuo
- 0x00265ac4, // n0x09bd c0x0000 (---------------) + I tobe
- 0x0027a484, // n0x09be c0x0000 (---------------) + I toon
- 0x00274906, // n0x09bf c0x0000 (---------------) + I uchiko
- 0x002b5047, // n0x09c0 c0x0000 (---------------) + I uwajima
- 0x003569ca, // n0x09c1 c0x0000 (---------------) + I yawatahama
- 0x00253b07, // n0x09c2 c0x0000 (---------------) + I echizen
- 0x00270e87, // n0x09c3 c0x0000 (---------------) + I eiheiji
- 0x0027ac85, // n0x09c4 c0x0000 (---------------) + I fukui
- 0x002024c5, // n0x09c5 c0x0000 (---------------) + I ikeda
- 0x002cdc49, // n0x09c6 c0x0000 (---------------) + I katsuyama
- 0x00292746, // n0x09c7 c0x0000 (---------------) + I mihama
- 0x0025398d, // n0x09c8 c0x0000 (---------------) + I minamiechizen
- 0x0021e9c5, // n0x09c9 c0x0000 (---------------) + I obama
- 0x00296d03, // n0x09ca c0x0000 (---------------) + I ohi
- 0x002142c3, // n0x09cb c0x0000 (---------------) + I ono
- 0x0027a105, // n0x09cc c0x0000 (---------------) + I sabae
- 0x0032db85, // n0x09cd c0x0000 (---------------) + I sakai
- 0x0027d488, // n0x09ce c0x0000 (---------------) + I takahama
- 0x00282887, // n0x09cf c0x0000 (---------------) + I tsuruga
- 0x0024c006, // n0x09d0 c0x0000 (---------------) + I wakasa
- 0x002978c6, // n0x09d1 c0x0000 (---------------) + I ashiya
- 0x00228045, // n0x09d2 c0x0000 (---------------) + I buzen
- 0x0027a907, // n0x09d3 c0x0000 (---------------) + I chikugo
- 0x00226a07, // n0x09d4 c0x0000 (---------------) + I chikuho
- 0x002dea07, // n0x09d5 c0x0000 (---------------) + I chikujo
- 0x002c640a, // n0x09d6 c0x0000 (---------------) + I chikushino
- 0x002307c8, // n0x09d7 c0x0000 (---------------) + I chikuzen
- 0x002606c4, // n0x09d8 c0x0000 (---------------) + I chuo
- 0x0028c1c7, // n0x09d9 c0x0000 (---------------) + I dazaifu
- 0x00279407, // n0x09da c0x0000 (---------------) + I fukuchi
- 0x0032f7c6, // n0x09db c0x0000 (---------------) + I hakata
- 0x00263ec7, // n0x09dc c0x0000 (---------------) + I higashi
- 0x002bd488, // n0x09dd c0x0000 (---------------) + I hirokawa
- 0x00322608, // n0x09de c0x0000 (---------------) + I hisayama
- 0x0026b806, // n0x09df c0x0000 (---------------) + I iizuka
- 0x00342b88, // n0x09e0 c0x0000 (---------------) + I inatsuki
- 0x002bb404, // n0x09e1 c0x0000 (---------------) + I kaho
- 0x002bc7c6, // n0x09e2 c0x0000 (---------------) + I kasuga
- 0x00219306, // n0x09e3 c0x0000 (---------------) + I kasuya
- 0x00251a06, // n0x09e4 c0x0000 (---------------) + I kawara
- 0x002e7cc6, // n0x09e5 c0x0000 (---------------) + I keisen
- 0x00297e44, // n0x09e6 c0x0000 (---------------) + I koga
- 0x00267006, // n0x09e7 c0x0000 (---------------) + I kurate
- 0x002b3b06, // n0x09e8 c0x0000 (---------------) + I kurogi
- 0x00290e46, // n0x09e9 c0x0000 (---------------) + I kurume
- 0x0024b386, // n0x09ea c0x0000 (---------------) + I minami
- 0x00214186, // n0x09eb c0x0000 (---------------) + I miyako
- 0x002bd2c6, // n0x09ec c0x0000 (---------------) + I miyama
- 0x0024bf08, // n0x09ed c0x0000 (---------------) + I miyawaka
- 0x002fa008, // n0x09ee c0x0000 (---------------) + I mizumaki
- 0x002c8b08, // n0x09ef c0x0000 (---------------) + I munakata
- 0x0029bf08, // n0x09f0 c0x0000 (---------------) + I nakagawa
- 0x00316486, // n0x09f1 c0x0000 (---------------) + I nakama
- 0x002164c5, // n0x09f2 c0x0000 (---------------) + I nishi
- 0x00352b06, // n0x09f3 c0x0000 (---------------) + I nogata
- 0x002a8f85, // n0x09f4 c0x0000 (---------------) + I ogori
- 0x00258f07, // n0x09f5 c0x0000 (---------------) + I okagaki
- 0x002519c5, // n0x09f6 c0x0000 (---------------) + I okawa
- 0x0021e603, // n0x09f7 c0x0000 (---------------) + I oki
- 0x0021ac45, // n0x09f8 c0x0000 (---------------) + I omuta
- 0x0022c244, // n0x09f9 c0x0000 (---------------) + I onga
- 0x002142c5, // n0x09fa c0x0000 (---------------) + I onojo
- 0x00207143, // n0x09fb c0x0000 (---------------) + I oto
- 0x002ed207, // n0x09fc c0x0000 (---------------) + I saigawa
- 0x002e4748, // n0x09fd c0x0000 (---------------) + I sasaguri
- 0x002a57c6, // n0x09fe c0x0000 (---------------) + I shingu
- 0x002e604d, // n0x09ff c0x0000 (---------------) + I shinyoshitomi
- 0x00276286, // n0x0a00 c0x0000 (---------------) + I shonai
- 0x0028fb05, // n0x0a01 c0x0000 (---------------) + I soeda
- 0x002a9d43, // n0x0a02 c0x0000 (---------------) + I sue
- 0x002b1509, // n0x0a03 c0x0000 (---------------) + I tachiarai
- 0x00290b06, // n0x0a04 c0x0000 (---------------) + I tagawa
- 0x0028aa06, // n0x0a05 c0x0000 (---------------) + I takata
- 0x0032e0c4, // n0x0a06 c0x0000 (---------------) + I toho
- 0x00258907, // n0x0a07 c0x0000 (---------------) + I toyotsu
- 0x00238746, // n0x0a08 c0x0000 (---------------) + I tsuiki
- 0x00306a85, // n0x0a09 c0x0000 (---------------) + I ukiha
- 0x00207dc3, // n0x0a0a c0x0000 (---------------) + I umi
- 0x00216bc4, // n0x0a0b c0x0000 (---------------) + I usui
- 0x002795c6, // n0x0a0c c0x0000 (---------------) + I yamada
- 0x00219404, // n0x0a0d c0x0000 (---------------) + I yame
- 0x002f3948, // n0x0a0e c0x0000 (---------------) + I yanagawa
- 0x00206a09, // n0x0a0f c0x0000 (---------------) + I yukuhashi
- 0x002b6b89, // n0x0a10 c0x0000 (---------------) + I aizubange
- 0x0029b10a, // n0x0a11 c0x0000 (---------------) + I aizumisato
- 0x00289f8d, // n0x0a12 c0x0000 (---------------) + I aizuwakamatsu
- 0x00250b07, // n0x0a13 c0x0000 (---------------) + I asakawa
- 0x00265306, // n0x0a14 c0x0000 (---------------) + I bandai
- 0x00271284, // n0x0a15 c0x0000 (---------------) + I date
- 0x0027bcc9, // n0x0a16 c0x0000 (---------------) + I fukushima
- 0x00280988, // n0x0a17 c0x0000 (---------------) + I furudono
- 0x00281786, // n0x0a18 c0x0000 (---------------) + I futaba
- 0x00251e86, // n0x0a19 c0x0000 (---------------) + I hanawa
- 0x00263ec7, // n0x0a1a c0x0000 (---------------) + I higashi
- 0x0031f606, // n0x0a1b c0x0000 (---------------) + I hirata
- 0x00228446, // n0x0a1c c0x0000 (---------------) + I hirono
- 0x00201786, // n0x0a1d c0x0000 (---------------) + I iitate
- 0x0021e68a, // n0x0a1e c0x0000 (---------------) + I inawashiro
- 0x00226fc8, // n0x0a1f c0x0000 (---------------) + I ishikawa
- 0x0024e085, // n0x0a20 c0x0000 (---------------) + I iwaki
- 0x00264309, // n0x0a21 c0x0000 (---------------) + I izumizaki
- 0x002be18a, // n0x0a22 c0x0000 (---------------) + I kagamiishi
- 0x00229248, // n0x0a23 c0x0000 (---------------) + I kaneyama
- 0x00295208, // n0x0a24 c0x0000 (---------------) + I kawamata
- 0x0028a988, // n0x0a25 c0x0000 (---------------) + I kitakata
- 0x0029750c, // n0x0a26 c0x0000 (---------------) + I kitashiobara
- 0x002e0245, // n0x0a27 c0x0000 (---------------) + I koori
- 0x00297b48, // n0x0a28 c0x0000 (---------------) + I koriyama
- 0x002f5446, // n0x0a29 c0x0000 (---------------) + I kunimi
- 0x0029e086, // n0x0a2a c0x0000 (---------------) + I miharu
- 0x002bb107, // n0x0a2b c0x0000 (---------------) + I mishima
- 0x00253a05, // n0x0a2c c0x0000 (---------------) + I namie
- 0x0033fdc5, // n0x0a2d c0x0000 (---------------) + I nango
- 0x002b6a49, // n0x0a2e c0x0000 (---------------) + I nishiaizu
- 0x0021aac7, // n0x0a2f c0x0000 (---------------) + I nishigo
- 0x00204945, // n0x0a30 c0x0000 (---------------) + I okuma
- 0x00228f07, // n0x0a31 c0x0000 (---------------) + I omotego
- 0x002142c3, // n0x0a32 c0x0000 (---------------) + I ono
- 0x002be845, // n0x0a33 c0x0000 (---------------) + I otama
- 0x00227e48, // n0x0a34 c0x0000 (---------------) + I samegawa
- 0x00206b87, // n0x0a35 c0x0000 (---------------) + I shimogo
- 0x002950c9, // n0x0a36 c0x0000 (---------------) + I shirakawa
- 0x002ddc85, // n0x0a37 c0x0000 (---------------) + I showa
- 0x002e21c4, // n0x0a38 c0x0000 (---------------) + I soma
- 0x0029c3c8, // n0x0a39 c0x0000 (---------------) + I sukagawa
- 0x0022db07, // n0x0a3a c0x0000 (---------------) + I taishin
- 0x0020a7c8, // n0x0a3b c0x0000 (---------------) + I tamakawa
- 0x0026a848, // n0x0a3c c0x0000 (---------------) + I tanagura
- 0x0021f9c5, // n0x0a3d c0x0000 (---------------) + I tenei
- 0x002b4d06, // n0x0a3e c0x0000 (---------------) + I yabuki
- 0x002956c6, // n0x0a3f c0x0000 (---------------) + I yamato
- 0x002efd49, // n0x0a40 c0x0000 (---------------) + I yamatsuri
- 0x003010c7, // n0x0a41 c0x0000 (---------------) + I yanaizu
- 0x002a9406, // n0x0a42 c0x0000 (---------------) + I yugawa
- 0x002a6507, // n0x0a43 c0x0000 (---------------) + I anpachi
- 0x00203bc3, // n0x0a44 c0x0000 (---------------) + I ena
- 0x00279c84, // n0x0a45 c0x0000 (---------------) + I gifu
- 0x00367c05, // n0x0a46 c0x0000 (---------------) + I ginan
- 0x002152c4, // n0x0a47 c0x0000 (---------------) + I godo
- 0x0023c504, // n0x0a48 c0x0000 (---------------) + I gujo
- 0x00290847, // n0x0a49 c0x0000 (---------------) + I hashima
- 0x002d32c7, // n0x0a4a c0x0000 (---------------) + I hichiso
- 0x002780c4, // n0x0a4b c0x0000 (---------------) + I hida
- 0x00294f10, // n0x0a4c c0x0000 (---------------) + I higashishirakawa
- 0x00366e87, // n0x0a4d c0x0000 (---------------) + I ibigawa
- 0x002024c5, // n0x0a4e c0x0000 (---------------) + I ikeda
- 0x0027910c, // n0x0a4f c0x0000 (---------------) + I kakamigahara
- 0x00204dc4, // n0x0a50 c0x0000 (---------------) + I kani
- 0x002e26c8, // n0x0a51 c0x0000 (---------------) + I kasahara
- 0x00288dc9, // n0x0a52 c0x0000 (---------------) + I kasamatsu
- 0x0022b046, // n0x0a53 c0x0000 (---------------) + I kawaue
- 0x0027cc88, // n0x0a54 c0x0000 (---------------) + I kitagata
- 0x00256e04, // n0x0a55 c0x0000 (---------------) + I mino
- 0x00256e08, // n0x0a56 c0x0000 (---------------) + I minokamo
- 0x002bcd46, // n0x0a57 c0x0000 (---------------) + I mitake
- 0x0024b208, // n0x0a58 c0x0000 (---------------) + I mizunami
- 0x00290186, // n0x0a59 c0x0000 (---------------) + I motosu
- 0x00203fcb, // n0x0a5a c0x0000 (---------------) + I nakatsugawa
- 0x002043c5, // n0x0a5b c0x0000 (---------------) + I ogaki
- 0x002bb388, // n0x0a5c c0x0000 (---------------) + I sakahogi
- 0x00213984, // n0x0a5d c0x0000 (---------------) + I seki
- 0x0030c98a, // n0x0a5e c0x0000 (---------------) + I sekigahara
- 0x002950c9, // n0x0a5f c0x0000 (---------------) + I shirakawa
- 0x0027c6c6, // n0x0a60 c0x0000 (---------------) + I tajimi
- 0x002e41c8, // n0x0a61 c0x0000 (---------------) + I takayama
- 0x003401c5, // n0x0a62 c0x0000 (---------------) + I tarui
- 0x00221c44, // n0x0a63 c0x0000 (---------------) + I toki
- 0x002e25c6, // n0x0a64 c0x0000 (---------------) + I tomika
- 0x002d2f88, // n0x0a65 c0x0000 (---------------) + I wanouchi
- 0x0027d308, // n0x0a66 c0x0000 (---------------) + I yamagata
- 0x00324906, // n0x0a67 c0x0000 (---------------) + I yaotsu
- 0x00206e44, // n0x0a68 c0x0000 (---------------) + I yoro
- 0x0023c946, // n0x0a69 c0x0000 (---------------) + I annaka
- 0x00374b47, // n0x0a6a c0x0000 (---------------) + I chiyoda
- 0x00275147, // n0x0a6b c0x0000 (---------------) + I fujioka
- 0x00263ecf, // n0x0a6c c0x0000 (---------------) + I higashiagatsuma
- 0x002f6f07, // n0x0a6d c0x0000 (---------------) + I isesaki
- 0x002f2447, // n0x0a6e c0x0000 (---------------) + I itakura
- 0x0031f0c5, // n0x0a6f c0x0000 (---------------) + I kanna
- 0x002eb645, // n0x0a70 c0x0000 (---------------) + I kanra
- 0x0029b649, // n0x0a71 c0x0000 (---------------) + I katashina
- 0x00237786, // n0x0a72 c0x0000 (---------------) + I kawaba
- 0x00259045, // n0x0a73 c0x0000 (---------------) + I kiryu
- 0x0027e707, // n0x0a74 c0x0000 (---------------) + I kusatsu
- 0x002b0008, // n0x0a75 c0x0000 (---------------) + I maebashi
- 0x00219485, // n0x0a76 c0x0000 (---------------) + I meiwa
- 0x00267c06, // n0x0a77 c0x0000 (---------------) + I midori
- 0x00226008, // n0x0a78 c0x0000 (---------------) + I minakami
- 0x0020d58a, // n0x0a79 c0x0000 (---------------) + I naganohara
- 0x00314d48, // n0x0a7a c0x0000 (---------------) + I nakanojo
- 0x002860c7, // n0x0a7b c0x0000 (---------------) + I nanmoku
- 0x002e40c6, // n0x0a7c c0x0000 (---------------) + I numata
- 0x002642c6, // n0x0a7d c0x0000 (---------------) + I oizumi
- 0x00228883, // n0x0a7e c0x0000 (---------------) + I ora
- 0x00213d43, // n0x0a7f c0x0000 (---------------) + I ota
- 0x002adc49, // n0x0a80 c0x0000 (---------------) + I shibukawa
- 0x002c39c9, // n0x0a81 c0x0000 (---------------) + I shimonita
- 0x002e1e86, // n0x0a82 c0x0000 (---------------) + I shinto
- 0x002ddc85, // n0x0a83 c0x0000 (---------------) + I showa
- 0x002f5648, // n0x0a84 c0x0000 (---------------) + I takasaki
- 0x002e41c8, // n0x0a85 c0x0000 (---------------) + I takayama
- 0x002d13c8, // n0x0a86 c0x0000 (---------------) + I tamamura
- 0x0020180b, // n0x0a87 c0x0000 (---------------) + I tatebayashi
- 0x002e6287, // n0x0a88 c0x0000 (---------------) + I tomioka
- 0x002a96c9, // n0x0a89 c0x0000 (---------------) + I tsukiyono
- 0x00264148, // n0x0a8a c0x0000 (---------------) + I tsumagoi
- 0x002107c4, // n0x0a8b c0x0000 (---------------) + I ueno
- 0x002c2108, // n0x0a8c c0x0000 (---------------) + I yoshioka
- 0x00288909, // n0x0a8d c0x0000 (---------------) + I asaminami
- 0x002653c5, // n0x0a8e c0x0000 (---------------) + I daiwa
- 0x00269987, // n0x0a8f c0x0000 (---------------) + I etajima
- 0x0028c305, // n0x0a90 c0x0000 (---------------) + I fuchu
- 0x0027d208, // n0x0a91 c0x0000 (---------------) + I fukuyama
- 0x0028ad8b, // n0x0a92 c0x0000 (---------------) + I hatsukaichi
- 0x0028ea10, // n0x0a93 c0x0000 (---------------) + I higashihiroshima
- 0x002a38c5, // n0x0a94 c0x0000 (---------------) + I hongo
- 0x002138cc, // n0x0a95 c0x0000 (---------------) + I jinsekikogen
- 0x0024c1c5, // n0x0a96 c0x0000 (---------------) + I kaita
- 0x00273ec3, // n0x0a97 c0x0000 (---------------) + I kui
- 0x002d7806, // n0x0a98 c0x0000 (---------------) + I kumano
- 0x002b3044, // n0x0a99 c0x0000 (---------------) + I kure
- 0x002840c6, // n0x0a9a c0x0000 (---------------) + I mihara
- 0x00295c07, // n0x0a9b c0x0000 (---------------) + I miyoshi
- 0x00203fc4, // n0x0a9c c0x0000 (---------------) + I naka
- 0x002de548, // n0x0a9d c0x0000 (---------------) + I onomichi
- 0x00360e0d, // n0x0a9e c0x0000 (---------------) + I osakikamijima
- 0x002d19c5, // n0x0a9f c0x0000 (---------------) + I otake
- 0x00250b44, // n0x0aa0 c0x0000 (---------------) + I saka
- 0x002207c4, // n0x0aa1 c0x0000 (---------------) + I sera
- 0x00298ac9, // n0x0aa2 c0x0000 (---------------) + I seranishi
- 0x002cf1c8, // n0x0aa3 c0x0000 (---------------) + I shinichi
- 0x002b4587, // n0x0aa4 c0x0000 (---------------) + I shobara
- 0x002bcdc8, // n0x0aa5 c0x0000 (---------------) + I takehara
- 0x0027da88, // n0x0aa6 c0x0000 (---------------) + I abashiri
- 0x00278205, // n0x0aa7 c0x0000 (---------------) + I abira
- 0x0025ef87, // n0x0aa8 c0x0000 (---------------) + I aibetsu
- 0x00278187, // n0x0aa9 c0x0000 (---------------) + I akabira
- 0x0029a247, // n0x0aaa c0x0000 (---------------) + I akkeshi
- 0x002bac09, // n0x0aab c0x0000 (---------------) + I asahikawa
- 0x002385c9, // n0x0aac c0x0000 (---------------) + I ashibetsu
- 0x0023f246, // n0x0aad c0x0000 (---------------) + I ashoro
- 0x002ab986, // n0x0aae c0x0000 (---------------) + I assabu
- 0x00264106, // n0x0aaf c0x0000 (---------------) + I atsuma
- 0x00266b45, // n0x0ab0 c0x0000 (---------------) + I bibai
- 0x0030af84, // n0x0ab1 c0x0000 (---------------) + I biei
- 0x00200346, // n0x0ab2 c0x0000 (---------------) + I bifuka
- 0x00200b06, // n0x0ab3 c0x0000 (---------------) + I bihoro
- 0x00278248, // n0x0ab4 c0x0000 (---------------) + I biratori
- 0x00284ecb, // n0x0ab5 c0x0000 (---------------) + I chippubetsu
- 0x0029f647, // n0x0ab6 c0x0000 (---------------) + I chitose
- 0x00271284, // n0x0ab7 c0x0000 (---------------) + I date
- 0x0036cb46, // n0x0ab8 c0x0000 (---------------) + I ebetsu
- 0x00273d07, // n0x0ab9 c0x0000 (---------------) + I embetsu
- 0x00319cc5, // n0x0aba c0x0000 (---------------) + I eniwa
- 0x00309185, // n0x0abb c0x0000 (---------------) + I erimo
- 0x0022e244, // n0x0abc c0x0000 (---------------) + I esan
- 0x00238546, // n0x0abd c0x0000 (---------------) + I esashi
- 0x002003c8, // n0x0abe c0x0000 (---------------) + I fukagawa
- 0x0027bcc9, // n0x0abf c0x0000 (---------------) + I fukushima
- 0x00249d46, // n0x0ac0 c0x0000 (---------------) + I furano
- 0x0027fec8, // n0x0ac1 c0x0000 (---------------) + I furubira
- 0x002fef86, // n0x0ac2 c0x0000 (---------------) + I haboro
- 0x0033b948, // n0x0ac3 c0x0000 (---------------) + I hakodate
- 0x002f41cc, // n0x0ac4 c0x0000 (---------------) + I hamatonbetsu
- 0x002780c6, // n0x0ac5 c0x0000 (---------------) + I hidaka
- 0x0028f7cd, // n0x0ac6 c0x0000 (---------------) + I higashikagura
- 0x0028fc4b, // n0x0ac7 c0x0000 (---------------) + I higashikawa
- 0x00249f05, // n0x0ac8 c0x0000 (---------------) + I hiroo
- 0x00226b47, // n0x0ac9 c0x0000 (---------------) + I hokuryu
- 0x003112c6, // n0x0aca c0x0000 (---------------) + I hokuto
- 0x002129c8, // n0x0acb c0x0000 (---------------) + I honbetsu
- 0x0023f2c9, // n0x0acc c0x0000 (---------------) + I horokanai
- 0x002b6588, // n0x0acd c0x0000 (---------------) + I horonobe
- 0x002024c5, // n0x0ace c0x0000 (---------------) + I ikeda
- 0x00269a87, // n0x0acf c0x0000 (---------------) + I imakane
- 0x002be308, // n0x0ad0 c0x0000 (---------------) + I ishikari
- 0x00350149, // n0x0ad1 c0x0000 (---------------) + I iwamizawa
- 0x0024ccc6, // n0x0ad2 c0x0000 (---------------) + I iwanai
- 0x00249c4a, // n0x0ad3 c0x0000 (---------------) + I kamifurano
- 0x00212748, // n0x0ad4 c0x0000 (---------------) + I kamikawa
- 0x002b63cb, // n0x0ad5 c0x0000 (---------------) + I kamishihoro
- 0x0026b90c, // n0x0ad6 c0x0000 (---------------) + I kamisunagawa
- 0x00256f08, // n0x0ad7 c0x0000 (---------------) + I kamoenai
- 0x00278dc6, // n0x0ad8 c0x0000 (---------------) + I kayabe
- 0x002de8c8, // n0x0ad9 c0x0000 (---------------) + I kembuchi
- 0x002993c7, // n0x0ada c0x0000 (---------------) + I kikonai
- 0x002d2d49, // n0x0adb c0x0000 (---------------) + I kimobetsu
- 0x00269d4d, // n0x0adc c0x0000 (---------------) + I kitahiroshima
- 0x0028f206, // n0x0add c0x0000 (---------------) + I kitami
- 0x00203588, // n0x0ade c0x0000 (---------------) + I kiyosato
- 0x002f9ec9, // n0x0adf c0x0000 (---------------) + I koshimizu
- 0x002b2688, // n0x0ae0 c0x0000 (---------------) + I kunneppu
- 0x00322c48, // n0x0ae1 c0x0000 (---------------) + I kuriyama
- 0x002b428c, // n0x0ae2 c0x0000 (---------------) + I kuromatsunai
- 0x002b6dc7, // n0x0ae3 c0x0000 (---------------) + I kushiro
- 0x002b7b07, // n0x0ae4 c0x0000 (---------------) + I kutchan
- 0x002baa45, // n0x0ae5 c0x0000 (---------------) + I kyowa
- 0x002195c7, // n0x0ae6 c0x0000 (---------------) + I mashike
- 0x002afec8, // n0x0ae7 c0x0000 (---------------) + I matsumae
- 0x002e2646, // n0x0ae8 c0x0000 (---------------) + I mikasa
- 0x0025814c, // n0x0ae9 c0x0000 (---------------) + I minamifurano
- 0x00366708, // n0x0aea c0x0000 (---------------) + I mombetsu
- 0x002c3308, // n0x0aeb c0x0000 (---------------) + I moseushi
- 0x00371306, // n0x0aec c0x0000 (---------------) + I mukawa
- 0x002b4987, // n0x0aed c0x0000 (---------------) + I muroran
- 0x0023f444, // n0x0aee c0x0000 (---------------) + I naie
- 0x0029bf08, // n0x0aef c0x0000 (---------------) + I nakagawa
- 0x003523cc, // n0x0af0 c0x0000 (---------------) + I nakasatsunai
- 0x002e6dcc, // n0x0af1 c0x0000 (---------------) + I nakatombetsu
- 0x00220b05, // n0x0af2 c0x0000 (---------------) + I nanae
- 0x002058c7, // n0x0af3 c0x0000 (---------------) + I nanporo
- 0x00206dc6, // n0x0af4 c0x0000 (---------------) + I nayoro
- 0x002b4906, // n0x0af5 c0x0000 (---------------) + I nemuro
- 0x002e5888, // n0x0af6 c0x0000 (---------------) + I niikappu
- 0x00204804, // n0x0af7 c0x0000 (---------------) + I niki
- 0x002d9f8b, // n0x0af8 c0x0000 (---------------) + I nishiokoppe
- 0x003097cb, // n0x0af9 c0x0000 (---------------) + I noboribetsu
- 0x002e40c6, // n0x0afa c0x0000 (---------------) + I numata
- 0x00360c87, // n0x0afb c0x0000 (---------------) + I obihiro
- 0x00205285, // n0x0afc c0x0000 (---------------) + I obira
- 0x0026c685, // n0x0afd c0x0000 (---------------) + I oketo
- 0x002da0c6, // n0x0afe c0x0000 (---------------) + I okoppe
- 0x00340185, // n0x0aff c0x0000 (---------------) + I otaru
- 0x00265a85, // n0x0b00 c0x0000 (---------------) + I otobe
- 0x002af907, // n0x0b01 c0x0000 (---------------) + I otofuke
- 0x00207149, // n0x0b02 c0x0000 (---------------) + I otoineppu
- 0x00319ac4, // n0x0b03 c0x0000 (---------------) + I oumu
- 0x00277005, // n0x0b04 c0x0000 (---------------) + I ozora
- 0x002cf8c5, // n0x0b05 c0x0000 (---------------) + I pippu
- 0x002b4a88, // n0x0b06 c0x0000 (---------------) + I rankoshi
- 0x002de385, // n0x0b07 c0x0000 (---------------) + I rebun
- 0x00296789, // n0x0b08 c0x0000 (---------------) + I rikubetsu
- 0x002f2e47, // n0x0b09 c0x0000 (---------------) + I rishiri
- 0x002f2e4b, // n0x0b0a c0x0000 (---------------) + I rishirifuji
- 0x00247286, // n0x0b0b c0x0000 (---------------) + I saroma
- 0x0024bc49, // n0x0b0c c0x0000 (---------------) + I sarufutsu
- 0x002dca08, // n0x0b0d c0x0000 (---------------) + I shakotan
- 0x002df485, // n0x0b0e c0x0000 (---------------) + I shari
- 0x0029a348, // n0x0b0f c0x0000 (---------------) + I shibecha
- 0x00238608, // n0x0b10 c0x0000 (---------------) + I shibetsu
- 0x002a21c7, // n0x0b11 c0x0000 (---------------) + I shikabe
- 0x002b0147, // n0x0b12 c0x0000 (---------------) + I shikaoi
- 0x002908c9, // n0x0b13 c0x0000 (---------------) + I shimamaki
- 0x0024b147, // n0x0b14 c0x0000 (---------------) + I shimizu
- 0x002b78c9, // n0x0b15 c0x0000 (---------------) + I shimokawa
- 0x002daecc, // n0x0b16 c0x0000 (---------------) + I shinshinotsu
- 0x002e1e88, // n0x0b17 c0x0000 (---------------) + I shintoku
- 0x0031b609, // n0x0b18 c0x0000 (---------------) + I shiranuka
- 0x0031d6c7, // n0x0b19 c0x0000 (---------------) + I shiraoi
- 0x0027db49, // n0x0b1a c0x0000 (---------------) + I shiriuchi
- 0x002d3407, // n0x0b1b c0x0000 (---------------) + I sobetsu
- 0x0026ba08, // n0x0b1c c0x0000 (---------------) + I sunagawa
- 0x00247945, // n0x0b1d c0x0000 (---------------) + I taiki
- 0x002bc746, // n0x0b1e c0x0000 (---------------) + I takasu
- 0x002b5308, // n0x0b1f c0x0000 (---------------) + I takikawa
- 0x00307648, // n0x0b20 c0x0000 (---------------) + I takinoue
- 0x002be049, // n0x0b21 c0x0000 (---------------) + I teshikaga
- 0x00265ac7, // n0x0b22 c0x0000 (---------------) + I tobetsu
- 0x0026c745, // n0x0b23 c0x0000 (---------------) + I tohma
- 0x002ca489, // n0x0b24 c0x0000 (---------------) + I tomakomai
- 0x002626c6, // n0x0b25 c0x0000 (---------------) + I tomari
- 0x0028a784, // n0x0b26 c0x0000 (---------------) + I toya
- 0x0032ddc6, // n0x0b27 c0x0000 (---------------) + I toyako
- 0x00257248, // n0x0b28 c0x0000 (---------------) + I toyotomi
- 0x002599c7, // n0x0b29 c0x0000 (---------------) + I toyoura
- 0x002850c8, // n0x0b2a c0x0000 (---------------) + I tsubetsu
- 0x00342c49, // n0x0b2b c0x0000 (---------------) + I tsukigata
- 0x0030fc47, // n0x0b2c c0x0000 (---------------) + I urakawa
- 0x00297386, // n0x0b2d c0x0000 (---------------) + I urausu
- 0x00226c04, // n0x0b2e c0x0000 (---------------) + I uryu
- 0x0021acc9, // n0x0b2f c0x0000 (---------------) + I utashinai
- 0x0025ee08, // n0x0b30 c0x0000 (---------------) + I wakkanai
- 0x003711c7, // n0x0b31 c0x0000 (---------------) + I wassamu
- 0x003695c6, // n0x0b32 c0x0000 (---------------) + I yakumo
- 0x002a47c6, // n0x0b33 c0x0000 (---------------) + I yoichi
- 0x00299504, // n0x0b34 c0x0000 (---------------) + I aioi
- 0x002d1b46, // n0x0b35 c0x0000 (---------------) + I akashi
- 0x00204a43, // n0x0b36 c0x0000 (---------------) + I ako
- 0x0036a949, // n0x0b37 c0x0000 (---------------) + I amagasaki
- 0x00204386, // n0x0b38 c0x0000 (---------------) + I aogaki
- 0x00368ec5, // n0x0b39 c0x0000 (---------------) + I asago
- 0x002978c6, // n0x0b3a c0x0000 (---------------) + I ashiya
- 0x0020a905, // n0x0b3b c0x0000 (---------------) + I awaji
- 0x0027c988, // n0x0b3c c0x0000 (---------------) + I fukusaki
- 0x00256c47, // n0x0b3d c0x0000 (---------------) + I goshiki
- 0x002a5006, // n0x0b3e c0x0000 (---------------) + I harima
- 0x00202986, // n0x0b3f c0x0000 (---------------) + I himeji
- 0x002a0348, // n0x0b40 c0x0000 (---------------) + I ichikawa
- 0x0029b7c7, // n0x0b41 c0x0000 (---------------) + I inagawa
- 0x0028f245, // n0x0b42 c0x0000 (---------------) + I itami
- 0x00297dc8, // n0x0b43 c0x0000 (---------------) + I kakogawa
- 0x002855c8, // n0x0b44 c0x0000 (---------------) + I kamigori
- 0x00212748, // n0x0b45 c0x0000 (---------------) + I kamikawa
- 0x0024c085, // n0x0b46 c0x0000 (---------------) + I kasai
- 0x002bc7c6, // n0x0b47 c0x0000 (---------------) + I kasuga
- 0x002b6949, // n0x0b48 c0x0000 (---------------) + I kawanishi
- 0x00295544, // n0x0b49 c0x0000 (---------------) + I miki
- 0x00293ecb, // n0x0b4a c0x0000 (---------------) + I minamiawaji
- 0x0022814b, // n0x0b4b c0x0000 (---------------) + I nishinomiya
- 0x0024df89, // n0x0b4c c0x0000 (---------------) + I nishiwaki
- 0x002142c3, // n0x0b4d c0x0000 (---------------) + I ono
- 0x00256045, // n0x0b4e c0x0000 (---------------) + I sanda
- 0x0024e406, // n0x0b4f c0x0000 (---------------) + I sannan
- 0x002527c8, // n0x0b50 c0x0000 (---------------) + I sasayama
- 0x00275544, // n0x0b51 c0x0000 (---------------) + I sayo
- 0x002a57c6, // n0x0b52 c0x0000 (---------------) + I shingu
- 0x002c6549, // n0x0b53 c0x0000 (---------------) + I shinonsen
- 0x0033e485, // n0x0b54 c0x0000 (---------------) + I shiso
- 0x002af846, // n0x0b55 c0x0000 (---------------) + I sumoto
- 0x0022db06, // n0x0b56 c0x0000 (---------------) + I taishi
- 0x0020a244, // n0x0b57 c0x0000 (---------------) + I taka
- 0x0020a24a, // n0x0b58 c0x0000 (---------------) + I takarazuka
- 0x00368e08, // n0x0b59 c0x0000 (---------------) + I takasago
- 0x00307646, // n0x0b5a c0x0000 (---------------) + I takino
- 0x00276e05, // n0x0b5b c0x0000 (---------------) + I tamba
- 0x002662c7, // n0x0b5c c0x0000 (---------------) + I tatsuno
- 0x00251687, // n0x0b5d c0x0000 (---------------) + I toyooka
- 0x002b4d04, // n0x0b5e c0x0000 (---------------) + I yabu
- 0x00228387, // n0x0b5f c0x0000 (---------------) + I yashiro
- 0x002126c4, // n0x0b60 c0x0000 (---------------) + I yoka
- 0x00251986, // n0x0b61 c0x0000 (---------------) + I yokawa
- 0x00209bc3, // n0x0b62 c0x0000 (---------------) + I ami
- 0x002bac05, // n0x0b63 c0x0000 (---------------) + I asahi
- 0x003305c5, // n0x0b64 c0x0000 (---------------) + I bando
- 0x002d30c8, // n0x0b65 c0x0000 (---------------) + I chikusei
- 0x00279d85, // n0x0b66 c0x0000 (---------------) + I daigo
- 0x00277e09, // n0x0b67 c0x0000 (---------------) + I fujishiro
- 0x0029bd47, // n0x0b68 c0x0000 (---------------) + I hitachi
- 0x0029bd4b, // n0x0b69 c0x0000 (---------------) + I hitachinaka
- 0x0029d28c, // n0x0b6a c0x0000 (---------------) + I hitachiomiya
- 0x0029d8ca, // n0x0b6b c0x0000 (---------------) + I hitachiota
- 0x0032cd07, // n0x0b6c c0x0000 (---------------) + I ibaraki
- 0x0020cd43, // n0x0b6d c0x0000 (---------------) + I ina
- 0x002a1448, // n0x0b6e c0x0000 (---------------) + I inashiki
- 0x0024c245, // n0x0b6f c0x0000 (---------------) + I itako
- 0x00219505, // n0x0b70 c0x0000 (---------------) + I iwama
- 0x00214384, // n0x0b71 c0x0000 (---------------) + I joso
- 0x0026b906, // n0x0b72 c0x0000 (---------------) + I kamisu
- 0x00288dc6, // n0x0b73 c0x0000 (---------------) + I kasama
- 0x002d1b87, // n0x0b74 c0x0000 (---------------) + I kashima
- 0x00207d0b, // n0x0b75 c0x0000 (---------------) + I kasumigaura
- 0x00297e44, // n0x0b76 c0x0000 (---------------) + I koga
- 0x0033f984, // n0x0b77 c0x0000 (---------------) + I miho
- 0x002bcfc4, // n0x0b78 c0x0000 (---------------) + I mito
- 0x002c1c06, // n0x0b79 c0x0000 (---------------) + I moriya
- 0x00203fc4, // n0x0b7a c0x0000 (---------------) + I naka
- 0x002bc5c8, // n0x0b7b c0x0000 (---------------) + I namegata
- 0x00321385, // n0x0b7c c0x0000 (---------------) + I oarai
- 0x0022f3c5, // n0x0b7d c0x0000 (---------------) + I ogawa
- 0x002d1307, // n0x0b7e c0x0000 (---------------) + I omitama
- 0x00226c49, // n0x0b7f c0x0000 (---------------) + I ryugasaki
- 0x0032db85, // n0x0b80 c0x0000 (---------------) + I sakai
- 0x0021a00a, // n0x0b81 c0x0000 (---------------) + I sakuragawa
- 0x002dd249, // n0x0b82 c0x0000 (---------------) + I shimodate
- 0x002cec0a, // n0x0b83 c0x0000 (---------------) + I shimotsuma
- 0x0021e7c9, // n0x0b84 c0x0000 (---------------) + I shirosato
- 0x002e5b84, // n0x0b85 c0x0000 (---------------) + I sowa
- 0x002dc305, // n0x0b86 c0x0000 (---------------) + I suifu
- 0x0031f708, // n0x0b87 c0x0000 (---------------) + I takahagi
- 0x003572cb, // n0x0b88 c0x0000 (---------------) + I tamatsukuri
- 0x002f88c5, // n0x0b89 c0x0000 (---------------) + I tokai
- 0x003451c6, // n0x0b8a c0x0000 (---------------) + I tomobe
- 0x0023fb84, // n0x0b8b c0x0000 (---------------) + I tone
- 0x00278346, // n0x0b8c c0x0000 (---------------) + I toride
- 0x0030fac9, // n0x0b8d c0x0000 (---------------) + I tsuchiura
- 0x0036cc07, // n0x0b8e c0x0000 (---------------) + I tsukuba
- 0x002c51c8, // n0x0b8f c0x0000 (---------------) + I uchihara
- 0x0028a306, // n0x0b90 c0x0000 (---------------) + I ushiku
- 0x00374ac7, // n0x0b91 c0x0000 (---------------) + I yachiyo
- 0x0027d308, // n0x0b92 c0x0000 (---------------) + I yamagata
- 0x00354f06, // n0x0b93 c0x0000 (---------------) + I yawara
- 0x002014c4, // n0x0b94 c0x0000 (---------------) + I yuki
- 0x0023e287, // n0x0b95 c0x0000 (---------------) + I anamizu
- 0x0034ecc5, // n0x0b96 c0x0000 (---------------) + I hakui
- 0x00372107, // n0x0b97 c0x0000 (---------------) + I hakusan
- 0x00200444, // n0x0b98 c0x0000 (---------------) + I kaga
- 0x00311246, // n0x0b99 c0x0000 (---------------) + I kahoku
- 0x00227248, // n0x0b9a c0x0000 (---------------) + I kanazawa
- 0x0028fe08, // n0x0b9b c0x0000 (---------------) + I kawakita
- 0x0032c6c7, // n0x0b9c c0x0000 (---------------) + I komatsu
- 0x002501c8, // n0x0b9d c0x0000 (---------------) + I nakanoto
- 0x0028e485, // n0x0b9e c0x0000 (---------------) + I nanao
- 0x00214104, // n0x0b9f c0x0000 (---------------) + I nomi
- 0x002a0248, // n0x0ba0 c0x0000 (---------------) + I nonoichi
- 0x002502c4, // n0x0ba1 c0x0000 (---------------) + I noto
- 0x00224d85, // n0x0ba2 c0x0000 (---------------) + I shika
- 0x002eb784, // n0x0ba3 c0x0000 (---------------) + I suzu
- 0x0030f607, // n0x0ba4 c0x0000 (---------------) + I tsubata
- 0x00367ac7, // n0x0ba5 c0x0000 (---------------) + I tsurugi
- 0x0027dc88, // n0x0ba6 c0x0000 (---------------) + I uchinada
- 0x0020a946, // n0x0ba7 c0x0000 (---------------) + I wajima
- 0x00279d05, // n0x0ba8 c0x0000 (---------------) + I fudai
- 0x00277c08, // n0x0ba9 c0x0000 (---------------) + I fujisawa
- 0x00314f48, // n0x0baa c0x0000 (---------------) + I hanamaki
- 0x0029b049, // n0x0bab c0x0000 (---------------) + I hiraizumi
- 0x00228446, // n0x0bac c0x0000 (---------------) + I hirono
- 0x00201a88, // n0x0bad c0x0000 (---------------) + I ichinohe
- 0x0030c80a, // n0x0bae c0x0000 (---------------) + I ichinoseki
- 0x00319d48, // n0x0baf c0x0000 (---------------) + I iwaizumi
- 0x00351705, // n0x0bb0 c0x0000 (---------------) + I iwate
- 0x00352d06, // n0x0bb1 c0x0000 (---------------) + I joboji
- 0x00251288, // n0x0bb2 c0x0000 (---------------) + I kamaishi
- 0x00269b4a, // n0x0bb3 c0x0000 (---------------) + I kanegasaki
- 0x00314887, // n0x0bb4 c0x0000 (---------------) + I karumai
- 0x00254bc5, // n0x0bb5 c0x0000 (---------------) + I kawai
- 0x0032ce48, // n0x0bb6 c0x0000 (---------------) + I kitakami
- 0x0027eec4, // n0x0bb7 c0x0000 (---------------) + I kuji
- 0x00360706, // n0x0bb8 c0x0000 (---------------) + I kunohe
- 0x002b8ec8, // n0x0bb9 c0x0000 (---------------) + I kuzumaki
- 0x00214186, // n0x0bba c0x0000 (---------------) + I miyako
- 0x00220148, // n0x0bbb c0x0000 (---------------) + I mizusawa
- 0x003424c7, // n0x0bbc c0x0000 (---------------) + I morioka
- 0x002130c6, // n0x0bbd c0x0000 (---------------) + I ninohe
- 0x0025f744, // n0x0bbe c0x0000 (---------------) + I noda
- 0x002a4bc7, // n0x0bbf c0x0000 (---------------) + I ofunato
- 0x002fda84, // n0x0bc0 c0x0000 (---------------) + I oshu
- 0x0030fa87, // n0x0bc1 c0x0000 (---------------) + I otsuchi
- 0x0037150d, // n0x0bc2 c0x0000 (---------------) + I rikuzentakata
- 0x002022c5, // n0x0bc3 c0x0000 (---------------) + I shiwa
- 0x002dd04b, // n0x0bc4 c0x0000 (---------------) + I shizukuishi
- 0x00290286, // n0x0bc5 c0x0000 (---------------) + I sumita
- 0x0024cac8, // n0x0bc6 c0x0000 (---------------) + I tanohata
- 0x0022e084, // n0x0bc7 c0x0000 (---------------) + I tono
- 0x00316686, // n0x0bc8 c0x0000 (---------------) + I yahaba
- 0x002795c6, // n0x0bc9 c0x0000 (---------------) + I yamada
- 0x00272fc7, // n0x0bca c0x0000 (---------------) + I ayagawa
- 0x0028f48d, // n0x0bcb c0x0000 (---------------) + I higashikagawa
- 0x002dd607, // n0x0bcc c0x0000 (---------------) + I kanonji
- 0x003587c8, // n0x0bcd c0x0000 (---------------) + I kotohira
- 0x0026c805, // n0x0bce c0x0000 (---------------) + I manno
- 0x0028b648, // n0x0bcf c0x0000 (---------------) + I marugame
- 0x002bd986, // n0x0bd0 c0x0000 (---------------) + I mitoyo
- 0x0028e508, // n0x0bd1 c0x0000 (---------------) + I naoshima
- 0x00232946, // n0x0bd2 c0x0000 (---------------) + I sanuki
- 0x003679c7, // n0x0bd3 c0x0000 (---------------) + I tadotsu
- 0x00257d09, // n0x0bd4 c0x0000 (---------------) + I takamatsu
- 0x0022e087, // n0x0bd5 c0x0000 (---------------) + I tonosho
- 0x00281a48, // n0x0bd6 c0x0000 (---------------) + I uchinomi
- 0x0026ffc5, // n0x0bd7 c0x0000 (---------------) + I utazu
- 0x00215f08, // n0x0bd8 c0x0000 (---------------) + I zentsuji
- 0x0025e645, // n0x0bd9 c0x0000 (---------------) + I akune
- 0x00244b85, // n0x0bda c0x0000 (---------------) + I amami
- 0x00345545, // n0x0bdb c0x0000 (---------------) + I hioki
- 0x0022b803, // n0x0bdc c0x0000 (---------------) + I isa
- 0x0026ddc4, // n0x0bdd c0x0000 (---------------) + I isen
- 0x00264305, // n0x0bde c0x0000 (---------------) + I izumi
- 0x00317449, // n0x0bdf c0x0000 (---------------) + I kagoshima
- 0x0031aa06, // n0x0be0 c0x0000 (---------------) + I kanoya
- 0x002bd588, // n0x0be1 c0x0000 (---------------) + I kawanabe
- 0x00238845, // n0x0be2 c0x0000 (---------------) + I kinko
- 0x002ab187, // n0x0be3 c0x0000 (---------------) + I kouyama
- 0x00212d0a, // n0x0be4 c0x0000 (---------------) + I makurazaki
- 0x002af789, // n0x0be5 c0x0000 (---------------) + I matsumoto
- 0x002a364a, // n0x0be6 c0x0000 (---------------) + I minamitane
- 0x002c8b88, // n0x0be7 c0x0000 (---------------) + I nakatane
- 0x00228d4c, // n0x0be8 c0x0000 (---------------) + I nishinoomote
- 0x0027e78d, // n0x0be9 c0x0000 (---------------) + I satsumasendai
- 0x002e28c3, // n0x0bea c0x0000 (---------------) + I soo
- 0x00220048, // n0x0beb c0x0000 (---------------) + I tarumizu
- 0x00216b85, // n0x0bec c0x0000 (---------------) + I yusui
- 0x00237706, // n0x0bed c0x0000 (---------------) + I aikawa
- 0x00343a86, // n0x0bee c0x0000 (---------------) + I atsugi
- 0x002d0a45, // n0x0bef c0x0000 (---------------) + I ayase
- 0x002a6609, // n0x0bf0 c0x0000 (---------------) + I chigasaki
- 0x0036de45, // n0x0bf1 c0x0000 (---------------) + I ebina
- 0x00277c08, // n0x0bf2 c0x0000 (---------------) + I fujisawa
- 0x002bee06, // n0x0bf3 c0x0000 (---------------) + I hadano
- 0x00347fc6, // n0x0bf4 c0x0000 (---------------) + I hakone
- 0x0029c289, // n0x0bf5 c0x0000 (---------------) + I hiratsuka
- 0x003561c7, // n0x0bf6 c0x0000 (---------------) + I isehara
- 0x002e3b06, // n0x0bf7 c0x0000 (---------------) + I kaisei
- 0x00212c88, // n0x0bf8 c0x0000 (---------------) + I kamakura
- 0x00251908, // n0x0bf9 c0x0000 (---------------) + I kiyokawa
- 0x00311c87, // n0x0bfa c0x0000 (---------------) + I matsuda
- 0x002b3c8e, // n0x0bfb c0x0000 (---------------) + I minamiashigara
- 0x002bdbc5, // n0x0bfc c0x0000 (---------------) + I miura
- 0x00350045, // n0x0bfd c0x0000 (---------------) + I nakai
- 0x00214088, // n0x0bfe c0x0000 (---------------) + I ninomiya
- 0x0025f787, // n0x0bff c0x0000 (---------------) + I odawara
- 0x002068c2, // n0x0c00 c0x0000 (---------------) + I oi
- 0x002b40c4, // n0x0c01 c0x0000 (---------------) + I oiso
- 0x00283fca, // n0x0c02 c0x0000 (---------------) + I sagamihara
- 0x00371288, // n0x0c03 c0x0000 (---------------) + I samukawa
- 0x00273e06, // n0x0c04 c0x0000 (---------------) + I tsukui
- 0x00291c08, // n0x0c05 c0x0000 (---------------) + I yamakita
- 0x002956c6, // n0x0c06 c0x0000 (---------------) + I yamato
- 0x00302908, // n0x0c07 c0x0000 (---------------) + I yokosuka
- 0x002a9408, // n0x0c08 c0x0000 (---------------) + I yugawara
- 0x00244b44, // n0x0c09 c0x0000 (---------------) + I zama
- 0x002abfc5, // n0x0c0a c0x0000 (---------------) + I zushi
- 0x00757e04, // n0x0c0b c0x0001 (---------------) ! I city
- 0x00757e04, // n0x0c0c c0x0001 (---------------) ! I city
- 0x00757e04, // n0x0c0d c0x0001 (---------------) ! I city
- 0x00203543, // n0x0c0e c0x0000 (---------------) + I aki
- 0x00319906, // n0x0c0f c0x0000 (---------------) + I geisei
- 0x002780c6, // n0x0c10 c0x0000 (---------------) + I hidaka
- 0x00296d4c, // n0x0c11 c0x0000 (---------------) + I higashitsuno
- 0x00201b43, // n0x0c12 c0x0000 (---------------) + I ino
- 0x00280486, // n0x0c13 c0x0000 (---------------) + I kagami
- 0x0020a444, // n0x0c14 c0x0000 (---------------) + I kami
- 0x00290a88, // n0x0c15 c0x0000 (---------------) + I kitagawa
- 0x002c6385, // n0x0c16 c0x0000 (---------------) + I kochi
- 0x002840c6, // n0x0c17 c0x0000 (---------------) + I mihara
- 0x002c7e88, // n0x0c18 c0x0000 (---------------) + I motoyama
- 0x002c9686, // n0x0c19 c0x0000 (---------------) + I muroto
- 0x002a4f86, // n0x0c1a c0x0000 (---------------) + I nahari
- 0x00316bc8, // n0x0c1b c0x0000 (---------------) + I nakamura
- 0x00367c87, // n0x0c1c c0x0000 (---------------) + I nankoku
- 0x0024af09, // n0x0c1d c0x0000 (---------------) + I nishitosa
- 0x0034064a, // n0x0c1e c0x0000 (---------------) + I niyodogawa
- 0x00250884, // n0x0c1f c0x0000 (---------------) + I ochi
- 0x002519c5, // n0x0c20 c0x0000 (---------------) + I okawa
- 0x002588c5, // n0x0c21 c0x0000 (---------------) + I otoyo
- 0x002a39c6, // n0x0c22 c0x0000 (---------------) + I otsuki
- 0x00250b46, // n0x0c23 c0x0000 (---------------) + I sakawa
- 0x00296346, // n0x0c24 c0x0000 (---------------) + I sukumo
- 0x002eac86, // n0x0c25 c0x0000 (---------------) + I susaki
- 0x0024b044, // n0x0c26 c0x0000 (---------------) + I tosa
- 0x0024b04b, // n0x0c27 c0x0000 (---------------) + I tosashimizu
- 0x00243744, // n0x0c28 c0x0000 (---------------) + I toyo
- 0x0024bdc5, // n0x0c29 c0x0000 (---------------) + I tsuno
- 0x002a8a05, // n0x0c2a c0x0000 (---------------) + I umaji
- 0x002a1786, // n0x0c2b c0x0000 (---------------) + I yasuda
- 0x0020e448, // n0x0c2c c0x0000 (---------------) + I yusuhara
- 0x0027e647, // n0x0c2d c0x0000 (---------------) + I amakusa
- 0x0020d744, // n0x0c2e c0x0000 (---------------) + I arao
- 0x00212583, // n0x0c2f c0x0000 (---------------) + I aso
- 0x002cd745, // n0x0c30 c0x0000 (---------------) + I choyo
- 0x00243947, // n0x0c31 c0x0000 (---------------) + I gyokuto
- 0x0029de49, // n0x0c32 c0x0000 (---------------) + I hitoyoshi
- 0x0027e54b, // n0x0c33 c0x0000 (---------------) + I kamiamakusa
- 0x002d1b87, // n0x0c34 c0x0000 (---------------) + I kashima
- 0x00272cc7, // n0x0c35 c0x0000 (---------------) + I kikuchi
- 0x002ed184, // n0x0c36 c0x0000 (---------------) + I kosa
- 0x002c7d88, // n0x0c37 c0x0000 (---------------) + I kumamoto
- 0x002cde07, // n0x0c38 c0x0000 (---------------) + I mashiki
- 0x0028f306, // n0x0c39 c0x0000 (---------------) + I mifune
- 0x003074c8, // n0x0c3a c0x0000 (---------------) + I minamata
- 0x0028db4b, // n0x0c3b c0x0000 (---------------) + I minamioguni
- 0x002fc9c6, // n0x0c3c c0x0000 (---------------) + I nagasu
- 0x00221449, // n0x0c3d c0x0000 (---------------) + I nishihara
- 0x0028dcc5, // n0x0c3e c0x0000 (---------------) + I oguni
- 0x002b4fc3, // n0x0c3f c0x0000 (---------------) + I ozu
- 0x002af846, // n0x0c40 c0x0000 (---------------) + I sumoto
- 0x003423c8, // n0x0c41 c0x0000 (---------------) + I takamori
- 0x00201503, // n0x0c42 c0x0000 (---------------) + I uki
- 0x0022cd03, // n0x0c43 c0x0000 (---------------) + I uto
- 0x0027d306, // n0x0c44 c0x0000 (---------------) + I yamaga
- 0x002956c6, // n0x0c45 c0x0000 (---------------) + I yamato
- 0x0034dcca, // n0x0c46 c0x0000 (---------------) + I yatsushiro
- 0x00278e05, // n0x0c47 c0x0000 (---------------) + I ayabe
- 0x0027940b, // n0x0c48 c0x0000 (---------------) + I fukuchiyama
- 0x0029780b, // n0x0c49 c0x0000 (---------------) + I higashiyama
- 0x00206903, // n0x0c4a c0x0000 (---------------) + I ide
- 0x002015c3, // n0x0c4b c0x0000 (---------------) + I ine
- 0x0020a104, // n0x0c4c c0x0000 (---------------) + I joyo
- 0x003427c7, // n0x0c4d c0x0000 (---------------) + I kameoka
- 0x00256f04, // n0x0c4e c0x0000 (---------------) + I kamo
- 0x00213344, // n0x0c4f c0x0000 (---------------) + I kita
- 0x002f52c4, // n0x0c50 c0x0000 (---------------) + I kizu
- 0x0031a048, // n0x0c51 c0x0000 (---------------) + I kumiyama
- 0x00276d48, // n0x0c52 c0x0000 (---------------) + I kyotamba
- 0x0021dc09, // n0x0c53 c0x0000 (---------------) + I kyotanabe
- 0x002d8f08, // n0x0c54 c0x0000 (---------------) + I kyotango
- 0x00247387, // n0x0c55 c0x0000 (---------------) + I maizuru
- 0x0024b386, // n0x0c56 c0x0000 (---------------) + I minami
- 0x002bd1cf, // n0x0c57 c0x0000 (---------------) + I minamiyamashiro
- 0x002bdd06, // n0x0c58 c0x0000 (---------------) + I miyazu
- 0x002c6304, // n0x0c59 c0x0000 (---------------) + I muko
- 0x00276b8a, // n0x0c5a c0x0000 (---------------) + I nagaokakyo
- 0x00243847, // n0x0c5b c0x0000 (---------------) + I nakagyo
- 0x002bc086, // n0x0c5c c0x0000 (---------------) + I nantan
- 0x0028a7c9, // n0x0c5d c0x0000 (---------------) + I oyamazaki
- 0x0021db85, // n0x0c5e c0x0000 (---------------) + I sakyo
- 0x002a9a45, // n0x0c5f c0x0000 (---------------) + I seika
- 0x0021dcc6, // n0x0c60 c0x0000 (---------------) + I tanabe
- 0x00216043, // n0x0c61 c0x0000 (---------------) + I uji
- 0x0027ef09, // n0x0c62 c0x0000 (---------------) + I ujitawara
- 0x00227146, // n0x0c63 c0x0000 (---------------) + I wazuka
- 0x00342a09, // n0x0c64 c0x0000 (---------------) + I yamashina
- 0x003569c6, // n0x0c65 c0x0000 (---------------) + I yawata
- 0x002bac05, // n0x0c66 c0x0000 (---------------) + I asahi
- 0x00217ec5, // n0x0c67 c0x0000 (---------------) + I inabe
- 0x00240483, // n0x0c68 c0x0000 (---------------) + I ise
- 0x00342908, // n0x0c69 c0x0000 (---------------) + I kameyama
- 0x00250bc7, // n0x0c6a c0x0000 (---------------) + I kawagoe
- 0x00204884, // n0x0c6b c0x0000 (---------------) + I kiho
- 0x0027cb08, // n0x0c6c c0x0000 (---------------) + I kisosaki
- 0x0033f704, // n0x0c6d c0x0000 (---------------) + I kiwa
- 0x002b1d06, // n0x0c6e c0x0000 (---------------) + I komono
- 0x002d7806, // n0x0c6f c0x0000 (---------------) + I kumano
- 0x0023e1c6, // n0x0c70 c0x0000 (---------------) + I kuwana
- 0x002bb249, // n0x0c71 c0x0000 (---------------) + I matsusaka
- 0x00219485, // n0x0c72 c0x0000 (---------------) + I meiwa
- 0x00292746, // n0x0c73 c0x0000 (---------------) + I mihama
- 0x0025dec9, // n0x0c74 c0x0000 (---------------) + I minamiise
- 0x002bc346, // n0x0c75 c0x0000 (---------------) + I misugi
- 0x002bd2c6, // n0x0c76 c0x0000 (---------------) + I miyama
- 0x003515c6, // n0x0c77 c0x0000 (---------------) + I nabari
- 0x0020d8c5, // n0x0c78 c0x0000 (---------------) + I shima
- 0x002eb786, // n0x0c79 c0x0000 (---------------) + I suzuka
- 0x003679c4, // n0x0c7a c0x0000 (---------------) + I tado
- 0x00247945, // n0x0c7b c0x0000 (---------------) + I taiki
- 0x002b5304, // n0x0c7c c0x0000 (---------------) + I taki
- 0x002aa286, // n0x0c7d c0x0000 (---------------) + I tamaki
- 0x0021e984, // n0x0c7e c0x0000 (---------------) + I toba
- 0x002040c3, // n0x0c7f c0x0000 (---------------) + I tsu
- 0x00280a45, // n0x0c80 c0x0000 (---------------) + I udono
- 0x00238308, // n0x0c81 c0x0000 (---------------) + I ureshino
- 0x0034e787, // n0x0c82 c0x0000 (---------------) + I watarai
- 0x002755c9, // n0x0c83 c0x0000 (---------------) + I yokkaichi
- 0x00280c88, // n0x0c84 c0x0000 (---------------) + I furukawa
- 0x00291191, // n0x0c85 c0x0000 (---------------) + I higashimatsushima
- 0x0022db8a, // n0x0c86 c0x0000 (---------------) + I ishinomaki
- 0x002e4007, // n0x0c87 c0x0000 (---------------) + I iwanuma
- 0x002a9b06, // n0x0c88 c0x0000 (---------------) + I kakuda
- 0x0020a444, // n0x0c89 c0x0000 (---------------) + I kami
- 0x002b5408, // n0x0c8a c0x0000 (---------------) + I kawasaki
- 0x002fcb49, // n0x0c8b c0x0000 (---------------) + I kesennuma
- 0x00291548, // n0x0c8c c0x0000 (---------------) + I marumori
- 0x0029134a, // n0x0c8d c0x0000 (---------------) + I matsushima
- 0x0029654d, // n0x0c8e c0x0000 (---------------) + I minamisanriku
- 0x002625c6, // n0x0c8f c0x0000 (---------------) + I misato
- 0x00316cc6, // n0x0c90 c0x0000 (---------------) + I murata
- 0x002a4c86, // n0x0c91 c0x0000 (---------------) + I natori
- 0x0022f3c7, // n0x0c92 c0x0000 (---------------) + I ogawara
- 0x0029b505, // n0x0c93 c0x0000 (---------------) + I ohira
- 0x00237207, // n0x0c94 c0x0000 (---------------) + I onagawa
- 0x0027cbc5, // n0x0c95 c0x0000 (---------------) + I osaki
- 0x002f2f84, // n0x0c96 c0x0000 (---------------) + I rifu
- 0x002e9706, // n0x0c97 c0x0000 (---------------) + I semine
- 0x00368cc7, // n0x0c98 c0x0000 (---------------) + I shibata
- 0x0032288d, // n0x0c99 c0x0000 (---------------) + I shichikashuku
- 0x002511c7, // n0x0c9a c0x0000 (---------------) + I shikama
- 0x002c25c8, // n0x0c9b c0x0000 (---------------) + I shiogama
- 0x00277f09, // n0x0c9c c0x0000 (---------------) + I shiroishi
- 0x00352c06, // n0x0c9d c0x0000 (---------------) + I tagajo
- 0x0024cc45, // n0x0c9e c0x0000 (---------------) + I taiwa
- 0x00234844, // n0x0c9f c0x0000 (---------------) + I tome
- 0x00257346, // n0x0ca0 c0x0000 (---------------) + I tomiya
- 0x00237346, // n0x0ca1 c0x0000 (---------------) + I wakuya
- 0x00371406, // n0x0ca2 c0x0000 (---------------) + I watari
- 0x00294948, // n0x0ca3 c0x0000 (---------------) + I yamamoto
- 0x0021e583, // n0x0ca4 c0x0000 (---------------) + I zao
- 0x00201943, // n0x0ca5 c0x0000 (---------------) + I aya
- 0x00310745, // n0x0ca6 c0x0000 (---------------) + I ebino
- 0x00279e46, // n0x0ca7 c0x0000 (---------------) + I gokase
- 0x002a93c5, // n0x0ca8 c0x0000 (---------------) + I hyuga
- 0x0028a508, // n0x0ca9 c0x0000 (---------------) + I kadogawa
- 0x00295dca, // n0x0caa c0x0000 (---------------) + I kawaminami
- 0x002f7044, // n0x0cab c0x0000 (---------------) + I kijo
- 0x00290a88, // n0x0cac c0x0000 (---------------) + I kitagawa
- 0x0028a988, // n0x0cad c0x0000 (---------------) + I kitakata
- 0x002a15c7, // n0x0cae c0x0000 (---------------) + I kitaura
- 0x00238909, // n0x0caf c0x0000 (---------------) + I kobayashi
- 0x002b1e88, // n0x0cb0 c0x0000 (---------------) + I kunitomi
- 0x0027bd47, // n0x0cb1 c0x0000 (---------------) + I kushima
- 0x002f5546, // n0x0cb2 c0x0000 (---------------) + I mimata
- 0x0021418a, // n0x0cb3 c0x0000 (---------------) + I miyakonojo
- 0x002573c8, // n0x0cb4 c0x0000 (---------------) + I miyazaki
- 0x002b6209, // n0x0cb5 c0x0000 (---------------) + I morotsuka
- 0x002cf288, // n0x0cb6 c0x0000 (---------------) + I nichinan
- 0x002279c9, // n0x0cb7 c0x0000 (---------------) + I nishimera
- 0x002b6687, // n0x0cb8 c0x0000 (---------------) + I nobeoka
- 0x002741c5, // n0x0cb9 c0x0000 (---------------) + I saito
- 0x00298ec6, // n0x0cba c0x0000 (---------------) + I shiiba
- 0x002e24c8, // n0x0cbb c0x0000 (---------------) + I shintomi
- 0x0027e008, // n0x0cbc c0x0000 (---------------) + I takaharu
- 0x00342e08, // n0x0cbd c0x0000 (---------------) + I takanabe
- 0x00243288, // n0x0cbe c0x0000 (---------------) + I takazaki
- 0x0024bdc5, // n0x0cbf c0x0000 (---------------) + I tsuno
- 0x00203844, // n0x0cc0 c0x0000 (---------------) + I achi
- 0x0020d0c8, // n0x0cc1 c0x0000 (---------------) + I agematsu
- 0x00205884, // n0x0cc2 c0x0000 (---------------) + I anan
- 0x0021e5c4, // n0x0cc3 c0x0000 (---------------) + I aoki
- 0x002bac05, // n0x0cc4 c0x0000 (---------------) + I asahi
- 0x0028cb87, // n0x0cc5 c0x0000 (---------------) + I azumino
- 0x00226a09, // n0x0cc6 c0x0000 (---------------) + I chikuhoku
- 0x00272dc7, // n0x0cc7 c0x0000 (---------------) + I chikuma
- 0x00201ac5, // n0x0cc8 c0x0000 (---------------) + I chino
- 0x00274b06, // n0x0cc9 c0x0000 (---------------) + I fujimi
- 0x0034c286, // n0x0cca c0x0000 (---------------) + I hakuba
- 0x00200a04, // n0x0ccb c0x0000 (---------------) + I hara
- 0x0029c5c6, // n0x0ccc c0x0000 (---------------) + I hiraya
- 0x0028c144, // n0x0ccd c0x0000 (---------------) + I iida
- 0x0028b546, // n0x0cce c0x0000 (---------------) + I iijima
- 0x00202ac6, // n0x0ccf c0x0000 (---------------) + I iiyama
- 0x00223846, // n0x0cd0 c0x0000 (---------------) + I iizuna
- 0x002024c5, // n0x0cd1 c0x0000 (---------------) + I ikeda
- 0x0028a3c7, // n0x0cd2 c0x0000 (---------------) + I ikusaka
- 0x0020cd43, // n0x0cd3 c0x0000 (---------------) + I ina
- 0x00310989, // n0x0cd4 c0x0000 (---------------) + I karuizawa
- 0x002e3808, // n0x0cd5 c0x0000 (---------------) + I kawakami
- 0x0027bbc4, // n0x0cd6 c0x0000 (---------------) + I kiso
- 0x0027bbcd, // n0x0cd7 c0x0000 (---------------) + I kisofukushima
- 0x0028ff08, // n0x0cd8 c0x0000 (---------------) + I kitaaiki
- 0x002dcc08, // n0x0cd9 c0x0000 (---------------) + I komagane
- 0x002b6186, // n0x0cda c0x0000 (---------------) + I komoro
- 0x00257e09, // n0x0cdb c0x0000 (---------------) + I matsukawa
- 0x002af789, // n0x0cdc c0x0000 (---------------) + I matsumoto
- 0x0030f7c5, // n0x0cdd c0x0000 (---------------) + I miasa
- 0x00295eca, // n0x0cde c0x0000 (---------------) + I minamiaiki
- 0x0031c50a, // n0x0cdf c0x0000 (---------------) + I minamimaki
- 0x00286a0c, // n0x0ce0 c0x0000 (---------------) + I minamiminowa
- 0x00286b86, // n0x0ce1 c0x0000 (---------------) + I minowa
- 0x00274fc6, // n0x0ce2 c0x0000 (---------------) + I miyada
- 0x002be786, // n0x0ce3 c0x0000 (---------------) + I miyota
- 0x0033a809, // n0x0ce4 c0x0000 (---------------) + I mochizuki
- 0x0020d586, // n0x0ce5 c0x0000 (---------------) + I nagano
- 0x00237246, // n0x0ce6 c0x0000 (---------------) + I nagawa
- 0x0036df06, // n0x0ce7 c0x0000 (---------------) + I nagiso
- 0x0029bf08, // n0x0ce8 c0x0000 (---------------) + I nakagawa
- 0x002501c6, // n0x0ce9 c0x0000 (---------------) + I nakano
- 0x0029d60b, // n0x0cea c0x0000 (---------------) + I nozawaonsen
- 0x0028cd05, // n0x0ceb c0x0000 (---------------) + I obuse
- 0x0022f3c5, // n0x0cec c0x0000 (---------------) + I ogawa
- 0x00275245, // n0x0ced c0x0000 (---------------) + I okaya
- 0x00284e06, // n0x0cee c0x0000 (---------------) + I omachi
- 0x00214143, // n0x0cef c0x0000 (---------------) + I omi
- 0x0023e146, // n0x0cf0 c0x0000 (---------------) + I ookuwa
- 0x00251147, // n0x0cf1 c0x0000 (---------------) + I ooshika
- 0x002b52c5, // n0x0cf2 c0x0000 (---------------) + I otaki
- 0x00255b45, // n0x0cf3 c0x0000 (---------------) + I otari
- 0x002eec85, // n0x0cf4 c0x0000 (---------------) + I sakae
- 0x003032c6, // n0x0cf5 c0x0000 (---------------) + I sakaki
- 0x00219884, // n0x0cf6 c0x0000 (---------------) + I saku
- 0x00219886, // n0x0cf7 c0x0000 (---------------) + I sakuho
- 0x002c73c9, // n0x0cf8 c0x0000 (---------------) + I shimosuwa
- 0x00284c8c, // n0x0cf9 c0x0000 (---------------) + I shinanomachi
- 0x002f2cc8, // n0x0cfa c0x0000 (---------------) + I shiojiri
- 0x002c7504, // n0x0cfb c0x0000 (---------------) + I suwa
- 0x002eb546, // n0x0cfc c0x0000 (---------------) + I suzaka
- 0x00290386, // n0x0cfd c0x0000 (---------------) + I takagi
- 0x003423c8, // n0x0cfe c0x0000 (---------------) + I takamori
- 0x002e41c8, // n0x0cff c0x0000 (---------------) + I takayama
- 0x00284b89, // n0x0d00 c0x0000 (---------------) + I tateshina
- 0x002662c7, // n0x0d01 c0x0000 (---------------) + I tatsuno
- 0x0029f809, // n0x0d02 c0x0000 (---------------) + I togakushi
- 0x00316e86, // n0x0d03 c0x0000 (---------------) + I togura
- 0x0022a504, // n0x0d04 c0x0000 (---------------) + I tomi
- 0x0021df44, // n0x0d05 c0x0000 (---------------) + I ueda
- 0x0027b7c4, // n0x0d06 c0x0000 (---------------) + I wada
- 0x0027d308, // n0x0d07 c0x0000 (---------------) + I yamagata
- 0x0022684a, // n0x0d08 c0x0000 (---------------) + I yamanouchi
- 0x0032db06, // n0x0d09 c0x0000 (---------------) + I yasaka
- 0x00332b87, // n0x0d0a c0x0000 (---------------) + I yasuoka
- 0x0022ea47, // n0x0d0b c0x0000 (---------------) + I chijiwa
- 0x0024bd45, // n0x0d0c c0x0000 (---------------) + I futsu
- 0x002d8b44, // n0x0d0d c0x0000 (---------------) + I goto
- 0x002888c6, // n0x0d0e c0x0000 (---------------) + I hasami
- 0x003588c6, // n0x0d0f c0x0000 (---------------) + I hirado
- 0x00204843, // n0x0d10 c0x0000 (---------------) + I iki
- 0x002e3647, // n0x0d11 c0x0000 (---------------) + I isahaya
- 0x0026a748, // n0x0d12 c0x0000 (---------------) + I kawatana
- 0x0030f90a, // n0x0d13 c0x0000 (---------------) + I kuchinotsu
- 0x002c2d08, // n0x0d14 c0x0000 (---------------) + I matsuura
- 0x00299248, // n0x0d15 c0x0000 (---------------) + I nagasaki
- 0x0021e9c5, // n0x0d16 c0x0000 (---------------) + I obama
- 0x00214505, // n0x0d17 c0x0000 (---------------) + I omura
- 0x0029f745, // n0x0d18 c0x0000 (---------------) + I oseto
- 0x0024c106, // n0x0d19 c0x0000 (---------------) + I saikai
- 0x00253246, // n0x0d1a c0x0000 (---------------) + I sasebo
- 0x002d3205, // n0x0d1b c0x0000 (---------------) + I seihi
- 0x0036ab89, // n0x0d1c c0x0000 (---------------) + I shimabara
- 0x002d894c, // n0x0d1d c0x0000 (---------------) + I shinkamigoto
- 0x00300487, // n0x0d1e c0x0000 (---------------) + I togitsu
- 0x002913c8, // n0x0d1f c0x0000 (---------------) + I tsushima
- 0x0027e1c5, // n0x0d20 c0x0000 (---------------) + I unzen
- 0x00757e04, // n0x0d21 c0x0001 (---------------) ! I city
- 0x00330604, // n0x0d22 c0x0000 (---------------) + I ando
- 0x00206cc4, // n0x0d23 c0x0000 (---------------) + I gose
- 0x003693c6, // n0x0d24 c0x0000 (---------------) + I heguri
- 0x0029838e, // n0x0d25 c0x0000 (---------------) + I higashiyoshino
- 0x0020c607, // n0x0d26 c0x0000 (---------------) + I ikaruga
- 0x0022f5c5, // n0x0d27 c0x0000 (---------------) + I ikoma
- 0x002954cc, // n0x0d28 c0x0000 (---------------) + I kamikitayama
- 0x0031b7c7, // n0x0d29 c0x0000 (---------------) + I kanmaki
- 0x00368c47, // n0x0d2a c0x0000 (---------------) + I kashiba
- 0x002008c9, // n0x0d2b c0x0000 (---------------) + I kashihara
- 0x00226589, // n0x0d2c c0x0000 (---------------) + I katsuragi
- 0x00254bc5, // n0x0d2d c0x0000 (---------------) + I kawai
- 0x002e3808, // n0x0d2e c0x0000 (---------------) + I kawakami
- 0x002b6949, // n0x0d2f c0x0000 (---------------) + I kawanishi
- 0x002e9085, // n0x0d30 c0x0000 (---------------) + I koryo
- 0x002b5208, // n0x0d31 c0x0000 (---------------) + I kurotaki
- 0x002c6186, // n0x0d32 c0x0000 (---------------) + I mitsue
- 0x002de7c6, // n0x0d33 c0x0000 (---------------) + I miyake
- 0x00268e84, // n0x0d34 c0x0000 (---------------) + I nara
- 0x0026c8c8, // n0x0d35 c0x0000 (---------------) + I nosegawa
- 0x00257b83, // n0x0d36 c0x0000 (---------------) + I oji
- 0x00287704, // n0x0d37 c0x0000 (---------------) + I ouda
- 0x002cd7c5, // n0x0d38 c0x0000 (---------------) + I oyodo
- 0x0021c3c7, // n0x0d39 c0x0000 (---------------) + I sakurai
- 0x00224185, // n0x0d3a c0x0000 (---------------) + I sango
- 0x0030c6c9, // n0x0d3b c0x0000 (---------------) + I shimoichi
- 0x002bf8cd, // n0x0d3c c0x0000 (---------------) + I shimokitayama
- 0x002d2246, // n0x0d3d c0x0000 (---------------) + I shinjo
- 0x0024d8c4, // n0x0d3e c0x0000 (---------------) + I soni
- 0x00224ec8, // n0x0d3f c0x0000 (---------------) + I takatori
- 0x00206f8a, // n0x0d40 c0x0000 (---------------) + I tawaramoto
- 0x00209587, // n0x0d41 c0x0000 (---------------) + I tenkawa
- 0x002f4f05, // n0x0d42 c0x0000 (---------------) + I tenri
- 0x00265803, // n0x0d43 c0x0000 (---------------) + I uda
- 0x002979ce, // n0x0d44 c0x0000 (---------------) + I yamatokoriyama
- 0x002956cc, // n0x0d45 c0x0000 (---------------) + I yamatotakada
- 0x00229347, // n0x0d46 c0x0000 (---------------) + I yamazoe
- 0x00298547, // n0x0d47 c0x0000 (---------------) + I yoshino
- 0x00200483, // n0x0d48 c0x0000 (---------------) + I aga
- 0x0020d5c5, // n0x0d49 c0x0000 (---------------) + I agano
- 0x00206cc5, // n0x0d4a c0x0000 (---------------) + I gosen
- 0x00291fc8, // n0x0d4b c0x0000 (---------------) + I itoigawa
- 0x0028f049, // n0x0d4c c0x0000 (---------------) + I izumozaki
- 0x00374e86, // n0x0d4d c0x0000 (---------------) + I joetsu
- 0x00256f04, // n0x0d4e c0x0000 (---------------) + I kamo
- 0x002e3f46, // n0x0d4f c0x0000 (---------------) + I kariwa
- 0x0020334b, // n0x0d50 c0x0000 (---------------) + I kashiwazaki
- 0x002af50c, // n0x0d51 c0x0000 (---------------) + I minamiuonuma
- 0x0027b287, // n0x0d52 c0x0000 (---------------) + I mitsuke
- 0x002c6045, // n0x0d53 c0x0000 (---------------) + I muika
- 0x002854c8, // n0x0d54 c0x0000 (---------------) + I murakami
- 0x00311a45, // n0x0d55 c0x0000 (---------------) + I myoko
- 0x00276b87, // n0x0d56 c0x0000 (---------------) + I nagaoka
- 0x00290607, // n0x0d57 c0x0000 (---------------) + I niigata
- 0x00257b85, // n0x0d58 c0x0000 (---------------) + I ojiya
- 0x00214143, // n0x0d59 c0x0000 (---------------) + I omi
- 0x002a4e44, // n0x0d5a c0x0000 (---------------) + I sado
- 0x00248105, // n0x0d5b c0x0000 (---------------) + I sanjo
- 0x003199c5, // n0x0d5c c0x0000 (---------------) + I seiro
- 0x003199c6, // n0x0d5d c0x0000 (---------------) + I seirou
- 0x002c49c8, // n0x0d5e c0x0000 (---------------) + I sekikawa
- 0x00368cc7, // n0x0d5f c0x0000 (---------------) + I shibata
- 0x00343d86, // n0x0d60 c0x0000 (---------------) + I tagami
- 0x00237606, // n0x0d61 c0x0000 (---------------) + I tainai
- 0x00345486, // n0x0d62 c0x0000 (---------------) + I tochio
- 0x00203709, // n0x0d63 c0x0000 (---------------) + I tokamachi
- 0x0025f087, // n0x0d64 c0x0000 (---------------) + I tsubame
- 0x00374d06, // n0x0d65 c0x0000 (---------------) + I tsunan
- 0x002af686, // n0x0d66 c0x0000 (---------------) + I uonuma
- 0x00272906, // n0x0d67 c0x0000 (---------------) + I yahiko
- 0x0020a185, // n0x0d68 c0x0000 (---------------) + I yoita
- 0x00263246, // n0x0d69 c0x0000 (---------------) + I yuzawa
- 0x00200e85, // n0x0d6a c0x0000 (---------------) + I beppu
- 0x002de408, // n0x0d6b c0x0000 (---------------) + I bungoono
- 0x0028bd8b, // n0x0d6c c0x0000 (---------------) + I bungotakada
- 0x002886c6, // n0x0d6d c0x0000 (---------------) + I hasama
- 0x0022ea84, // n0x0d6e c0x0000 (---------------) + I hiji
- 0x002d98c9, // n0x0d6f c0x0000 (---------------) + I himeshima
- 0x0029bd44, // n0x0d70 c0x0000 (---------------) + I hita
- 0x002c6108, // n0x0d71 c0x0000 (---------------) + I kamitsue
- 0x0028c987, // n0x0d72 c0x0000 (---------------) + I kokonoe
- 0x00322b44, // n0x0d73 c0x0000 (---------------) + I kuju
- 0x002b0ec8, // n0x0d74 c0x0000 (---------------) + I kunisaki
- 0x002b7684, // n0x0d75 c0x0000 (---------------) + I kusu
- 0x0020a1c4, // n0x0d76 c0x0000 (---------------) + I oita
- 0x002b8145, // n0x0d77 c0x0000 (---------------) + I saiki
- 0x002d1a06, // n0x0d78 c0x0000 (---------------) + I taketa
- 0x00319f87, // n0x0d79 c0x0000 (---------------) + I tsukumi
- 0x00220203, // n0x0d7a c0x0000 (---------------) + I usa
- 0x00297445, // n0x0d7b c0x0000 (---------------) + I usuki
- 0x00364844, // n0x0d7c c0x0000 (---------------) + I yufu
- 0x00350086, // n0x0d7d c0x0000 (---------------) + I akaiwa
- 0x0030f848, // n0x0d7e c0x0000 (---------------) + I asakuchi
- 0x00314c45, // n0x0d7f c0x0000 (---------------) + I bizen
- 0x0028ba49, // n0x0d80 c0x0000 (---------------) + I hayashima
- 0x002ca685, // n0x0d81 c0x0000 (---------------) + I ibara
- 0x00280488, // n0x0d82 c0x0000 (---------------) + I kagamino
- 0x0035e687, // n0x0d83 c0x0000 (---------------) + I kasaoka
- 0x002b4e08, // n0x0d84 c0x0000 (---------------) + I kibichuo
- 0x002b0587, // n0x0d85 c0x0000 (---------------) + I kumenan
- 0x002f2509, // n0x0d86 c0x0000 (---------------) + I kurashiki
- 0x00266e86, // n0x0d87 c0x0000 (---------------) + I maniwa
- 0x002dc5c6, // n0x0d88 c0x0000 (---------------) + I misaki
- 0x002c3c84, // n0x0d89 c0x0000 (---------------) + I nagi
- 0x00293e05, // n0x0d8a c0x0000 (---------------) + I niimi
- 0x002164cc, // n0x0d8b c0x0000 (---------------) + I nishiawakura
- 0x00275247, // n0x0d8c c0x0000 (---------------) + I okayama
- 0x00276187, // n0x0d8d c0x0000 (---------------) + I satosho
- 0x0022e908, // n0x0d8e c0x0000 (---------------) + I setouchi
- 0x002d2246, // n0x0d8f c0x0000 (---------------) + I shinjo
- 0x0029b444, // n0x0d90 c0x0000 (---------------) + I shoo
- 0x0033e544, // n0x0d91 c0x0000 (---------------) + I soja
- 0x00290749, // n0x0d92 c0x0000 (---------------) + I takahashi
- 0x002be886, // n0x0d93 c0x0000 (---------------) + I tamano
- 0x00291b47, // n0x0d94 c0x0000 (---------------) + I tsuyama
- 0x002e7c44, // n0x0d95 c0x0000 (---------------) + I wake
- 0x0029c6c6, // n0x0d96 c0x0000 (---------------) + I yakage
- 0x00368845, // n0x0d97 c0x0000 (---------------) + I aguni
- 0x00290487, // n0x0d98 c0x0000 (---------------) + I ginowan
- 0x0029d586, // n0x0d99 c0x0000 (---------------) + I ginoza
- 0x00249b09, // n0x0d9a c0x0000 (---------------) + I gushikami
- 0x0031c347, // n0x0d9b c0x0000 (---------------) + I haebaru
- 0x00263ec7, // n0x0d9c c0x0000 (---------------) + I higashi
- 0x0029c106, // n0x0d9d c0x0000 (---------------) + I hirara
- 0x00369505, // n0x0d9e c0x0000 (---------------) + I iheya
- 0x0027ba48, // n0x0d9f c0x0000 (---------------) + I ishigaki
- 0x00226fc8, // n0x0da0 c0x0000 (---------------) + I ishikawa
- 0x00334986, // n0x0da1 c0x0000 (---------------) + I itoman
- 0x00314c85, // n0x0da2 c0x0000 (---------------) + I izena
- 0x00276846, // n0x0da3 c0x0000 (---------------) + I kadena
- 0x00214ac3, // n0x0da4 c0x0000 (---------------) + I kin
- 0x00291e49, // n0x0da5 c0x0000 (---------------) + I kitadaito
- 0x002960ce, // n0x0da6 c0x0000 (---------------) + I kitanakagusuku
- 0x002afd48, // n0x0da7 c0x0000 (---------------) + I kumejima
- 0x0033f808, // n0x0da8 c0x0000 (---------------) + I kunigami
- 0x0033478b, // n0x0da9 c0x0000 (---------------) + I minamidaito
- 0x0028bc86, // n0x0daa c0x0000 (---------------) + I motobu
- 0x002507c4, // n0x0dab c0x0000 (---------------) + I nago
- 0x0027e384, // n0x0dac c0x0000 (---------------) + I naha
- 0x002961ca, // n0x0dad c0x0000 (---------------) + I nakagusuku
- 0x002137c7, // n0x0dae c0x0000 (---------------) + I nakijin
- 0x00374dc5, // n0x0daf c0x0000 (---------------) + I nanjo
- 0x00221449, // n0x0db0 c0x0000 (---------------) + I nishihara
- 0x002b3bc5, // n0x0db1 c0x0000 (---------------) + I ogimi
- 0x0021e607, // n0x0db2 c0x0000 (---------------) + I okinawa
- 0x0022ae44, // n0x0db3 c0x0000 (---------------) + I onna
- 0x002ad107, // n0x0db4 c0x0000 (---------------) + I shimoji
- 0x00262448, // n0x0db5 c0x0000 (---------------) + I taketomi
- 0x002dcec6, // n0x0db6 c0x0000 (---------------) + I tarama
- 0x002fdc49, // n0x0db7 c0x0000 (---------------) + I tokashiki
- 0x002b1f8a, // n0x0db8 c0x0000 (---------------) + I tomigusuku
- 0x00213746, // n0x0db9 c0x0000 (---------------) + I tonaki
- 0x0028fa46, // n0x0dba c0x0000 (---------------) + I urasoe
- 0x002a8985, // n0x0dbb c0x0000 (---------------) + I uruma
- 0x0034af45, // n0x0dbc c0x0000 (---------------) + I yaese
- 0x002e7187, // n0x0dbd c0x0000 (---------------) + I yomitan
- 0x00301fc8, // n0x0dbe c0x0000 (---------------) + I yonabaru
- 0x00368788, // n0x0dbf c0x0000 (---------------) + I yonaguni
- 0x00244b46, // n0x0dc0 c0x0000 (---------------) + I zamami
- 0x002ec1c5, // n0x0dc1 c0x0000 (---------------) + I abeno
- 0x002508ce, // n0x0dc2 c0x0000 (---------------) + I chihayaakasaka
- 0x002606c4, // n0x0dc3 c0x0000 (---------------) + I chuo
- 0x00291f45, // n0x0dc4 c0x0000 (---------------) + I daito
- 0x00274489, // n0x0dc5 c0x0000 (---------------) + I fujiidera
- 0x002549c8, // n0x0dc6 c0x0000 (---------------) + I habikino
- 0x00286006, // n0x0dc7 c0x0000 (---------------) + I hannan
- 0x002945cc, // n0x0dc8 c0x0000 (---------------) + I higashiosaka
- 0x002959d0, // n0x0dc9 c0x0000 (---------------) + I higashisumiyoshi
- 0x00297fcf, // n0x0dca c0x0000 (---------------) + I higashiyodogawa
- 0x0029b548, // n0x0dcb c0x0000 (---------------) + I hirakata
- 0x0032cd07, // n0x0dcc c0x0000 (---------------) + I ibaraki
- 0x002024c5, // n0x0dcd c0x0000 (---------------) + I ikeda
- 0x00264305, // n0x0dce c0x0000 (---------------) + I izumi
- 0x00319e09, // n0x0dcf c0x0000 (---------------) + I izumiotsu
- 0x0032d049, // n0x0dd0 c0x0000 (---------------) + I izumisano
- 0x0023ca46, // n0x0dd1 c0x0000 (---------------) + I kadoma
- 0x002f8947, // n0x0dd2 c0x0000 (---------------) + I kaizuka
- 0x00205845, // n0x0dd3 c0x0000 (---------------) + I kanan
- 0x00202249, // n0x0dd4 c0x0000 (---------------) + I kashiwara
- 0x0032f846, // n0x0dd5 c0x0000 (---------------) + I katano
- 0x0020d3cd, // n0x0dd6 c0x0000 (---------------) + I kawachinagano
- 0x0027b689, // n0x0dd7 c0x0000 (---------------) + I kishiwada
- 0x00213344, // n0x0dd8 c0x0000 (---------------) + I kita
- 0x002afac8, // n0x0dd9 c0x0000 (---------------) + I kumatori
- 0x0020d189, // n0x0dda c0x0000 (---------------) + I matsubara
- 0x0032dcc6, // n0x0ddb c0x0000 (---------------) + I minato
- 0x00274c05, // n0x0ddc c0x0000 (---------------) + I minoh
- 0x002dc5c6, // n0x0ddd c0x0000 (---------------) + I misaki
- 0x002c5089, // n0x0dde c0x0000 (---------------) + I moriguchi
- 0x002cff88, // n0x0ddf c0x0000 (---------------) + I neyagawa
- 0x002164c5, // n0x0de0 c0x0000 (---------------) + I nishi
- 0x0026c8c4, // n0x0de1 c0x0000 (---------------) + I nose
- 0x0029478b, // n0x0de2 c0x0000 (---------------) + I osakasayama
- 0x0032db85, // n0x0de3 c0x0000 (---------------) + I sakai
- 0x00252846, // n0x0de4 c0x0000 (---------------) + I sayama
- 0x002c66c6, // n0x0de5 c0x0000 (---------------) + I sennan
- 0x002a6a46, // n0x0de6 c0x0000 (---------------) + I settsu
- 0x00238a8b, // n0x0de7 c0x0000 (---------------) + I shijonawate
- 0x0028bb49, // n0x0de8 c0x0000 (---------------) + I shimamoto
- 0x00309a05, // n0x0de9 c0x0000 (---------------) + I suita
- 0x00258e07, // n0x0dea c0x0000 (---------------) + I tadaoka
- 0x0022db06, // n0x0deb c0x0000 (---------------) + I taishi
- 0x0027ce06, // n0x0dec c0x0000 (---------------) + I tajiri
- 0x002a3dc8, // n0x0ded c0x0000 (---------------) + I takaishi
- 0x00341b49, // n0x0dee c0x0000 (---------------) + I takatsuki
- 0x002c238c, // n0x0def c0x0000 (---------------) + I tondabayashi
- 0x00243748, // n0x0df0 c0x0000 (---------------) + I toyonaka
- 0x002492c6, // n0x0df1 c0x0000 (---------------) + I toyono
- 0x00324903, // n0x0df2 c0x0000 (---------------) + I yao
- 0x0028e746, // n0x0df3 c0x0000 (---------------) + I ariake
- 0x00298d05, // n0x0df4 c0x0000 (---------------) + I arita
- 0x00279748, // n0x0df5 c0x0000 (---------------) + I fukudomi
- 0x00220986, // n0x0df6 c0x0000 (---------------) + I genkai
- 0x0020a6c8, // n0x0df7 c0x0000 (---------------) + I hamatama
- 0x00253b85, // n0x0df8 c0x0000 (---------------) + I hizen
- 0x0033de85, // n0x0df9 c0x0000 (---------------) + I imari
- 0x0035e908, // n0x0dfa c0x0000 (---------------) + I kamimine
- 0x002517c7, // n0x0dfb c0x0000 (---------------) + I kanzaki
- 0x003439c7, // n0x0dfc c0x0000 (---------------) + I karatsu
- 0x002d1b87, // n0x0dfd c0x0000 (---------------) + I kashima
- 0x0027cc88, // n0x0dfe c0x0000 (---------------) + I kitagata
- 0x002a3ac8, // n0x0dff c0x0000 (---------------) + I kitahata
- 0x00260386, // n0x0e00 c0x0000 (---------------) + I kiyama
- 0x002aa0c7, // n0x0e01 c0x0000 (---------------) + I kouhoku
- 0x00279b47, // n0x0e02 c0x0000 (---------------) + I kyuragi
- 0x00298bca, // n0x0e03 c0x0000 (---------------) + I nishiarita
- 0x0024ba83, // n0x0e04 c0x0000 (---------------) + I ogi
- 0x00284e06, // n0x0e05 c0x0000 (---------------) + I omachi
- 0x00226985, // n0x0e06 c0x0000 (---------------) + I ouchi
- 0x00283fc4, // n0x0e07 c0x0000 (---------------) + I saga
- 0x00277f09, // n0x0e08 c0x0000 (---------------) + I shiroishi
- 0x002f2484, // n0x0e09 c0x0000 (---------------) + I taku
- 0x002ac844, // n0x0e0a c0x0000 (---------------) + I tara
- 0x00290204, // n0x0e0b c0x0000 (---------------) + I tosu
- 0x0029854b, // n0x0e0c c0x0000 (---------------) + I yoshinogari
- 0x0020d307, // n0x0e0d c0x0000 (---------------) + I arakawa
- 0x00250b05, // n0x0e0e c0x0000 (---------------) + I asaka
- 0x0028e188, // n0x0e0f c0x0000 (---------------) + I chichibu
- 0x00274b06, // n0x0e10 c0x0000 (---------------) + I fujimi
- 0x00274b08, // n0x0e11 c0x0000 (---------------) + I fujimino
- 0x00278d46, // n0x0e12 c0x0000 (---------------) + I fukaya
- 0x002864c5, // n0x0e13 c0x0000 (---------------) + I hanno
- 0x00286d05, // n0x0e14 c0x0000 (---------------) + I hanyu
- 0x002893c6, // n0x0e15 c0x0000 (---------------) + I hasuda
- 0x00289dc8, // n0x0e16 c0x0000 (---------------) + I hatogaya
- 0x0028a708, // n0x0e17 c0x0000 (---------------) + I hatoyama
- 0x002780c6, // n0x0e18 c0x0000 (---------------) + I hidaka
- 0x0028dfcf, // n0x0e19 c0x0000 (---------------) + I higashichichibu
- 0x00291910, // n0x0e1a c0x0000 (---------------) + I higashimatsuyama
- 0x0020a045, // n0x0e1b c0x0000 (---------------) + I honjo
- 0x0020cd43, // n0x0e1c c0x0000 (---------------) + I ina
- 0x00287005, // n0x0e1d c0x0000 (---------------) + I iruma
- 0x002a9608, // n0x0e1e c0x0000 (---------------) + I iwatsuki
- 0x0032cf49, // n0x0e1f c0x0000 (---------------) + I kamiizumi
- 0x00212748, // n0x0e20 c0x0000 (---------------) + I kamikawa
- 0x0032df48, // n0x0e21 c0x0000 (---------------) + I kamisato
- 0x00207548, // n0x0e22 c0x0000 (---------------) + I kasukabe
- 0x00250bc7, // n0x0e23 c0x0000 (---------------) + I kawagoe
- 0x002747c9, // n0x0e24 c0x0000 (---------------) + I kawaguchi
- 0x0020a8c8, // n0x0e25 c0x0000 (---------------) + I kawajima
- 0x00235ac4, // n0x0e26 c0x0000 (---------------) + I kazo
- 0x00290088, // n0x0e27 c0x0000 (---------------) + I kitamoto
- 0x002b4b49, // n0x0e28 c0x0000 (---------------) + I koshigaya
- 0x002aae87, // n0x0e29 c0x0000 (---------------) + I kounosu
- 0x002b2184, // n0x0e2a c0x0000 (---------------) + I kuki
- 0x00272e88, // n0x0e2b c0x0000 (---------------) + I kumagaya
- 0x0028a18a, // n0x0e2c c0x0000 (---------------) + I matsubushi
- 0x002c1a86, // n0x0e2d c0x0000 (---------------) + I minano
- 0x002625c6, // n0x0e2e c0x0000 (---------------) + I misato
- 0x00228309, // n0x0e2f c0x0000 (---------------) + I miyashiro
- 0x00295c07, // n0x0e30 c0x0000 (---------------) + I miyoshi
- 0x002c2b88, // n0x0e31 c0x0000 (---------------) + I moroyama
- 0x00201108, // n0x0e32 c0x0000 (---------------) + I nagatoro
- 0x0025ec88, // n0x0e33 c0x0000 (---------------) + I namegawa
- 0x0020f7c5, // n0x0e34 c0x0000 (---------------) + I niiza
- 0x0034bac5, // n0x0e35 c0x0000 (---------------) + I ogano
- 0x0022f3c5, // n0x0e36 c0x0000 (---------------) + I ogawa
- 0x00206c85, // n0x0e37 c0x0000 (---------------) + I ogose
- 0x002f5c47, // n0x0e38 c0x0000 (---------------) + I okegawa
- 0x00214145, // n0x0e39 c0x0000 (---------------) + I omiya
- 0x002b52c5, // n0x0e3a c0x0000 (---------------) + I otaki
- 0x00216386, // n0x0e3b c0x0000 (---------------) + I ranzan
- 0x00212687, // n0x0e3c c0x0000 (---------------) + I ryokami
- 0x00357207, // n0x0e3d c0x0000 (---------------) + I saitama
- 0x0028a486, // n0x0e3e c0x0000 (---------------) + I sakado
- 0x002c90c5, // n0x0e3f c0x0000 (---------------) + I satte
- 0x00252846, // n0x0e40 c0x0000 (---------------) + I sayama
- 0x00256cc5, // n0x0e41 c0x0000 (---------------) + I shiki
- 0x0031ef48, // n0x0e42 c0x0000 (---------------) + I shiraoka
- 0x0031a984, // n0x0e43 c0x0000 (---------------) + I soka
- 0x002bc3c6, // n0x0e44 c0x0000 (---------------) + I sugito
- 0x00209e44, // n0x0e45 c0x0000 (---------------) + I toda
- 0x00221c48, // n0x0e46 c0x0000 (---------------) + I tokigawa
- 0x00353f8a, // n0x0e47 c0x0000 (---------------) + I tokorozawa
- 0x0028288c, // n0x0e48 c0x0000 (---------------) + I tsurugashima
- 0x00207f05, // n0x0e49 c0x0000 (---------------) + I urawa
- 0x00202386, // n0x0e4a c0x0000 (---------------) + I warabi
- 0x002c2546, // n0x0e4b c0x0000 (---------------) + I yashio
- 0x0036dd06, // n0x0e4c c0x0000 (---------------) + I yokoze
- 0x00249344, // n0x0e4d c0x0000 (---------------) + I yono
- 0x00368b05, // n0x0e4e c0x0000 (---------------) + I yorii
- 0x00278b87, // n0x0e4f c0x0000 (---------------) + I yoshida
- 0x00295c89, // n0x0e50 c0x0000 (---------------) + I yoshikawa
- 0x0029df47, // n0x0e51 c0x0000 (---------------) + I yoshimi
- 0x00757e04, // n0x0e52 c0x0001 (---------------) ! I city
- 0x00757e04, // n0x0e53 c0x0001 (---------------) ! I city
- 0x002b4505, // n0x0e54 c0x0000 (---------------) + I aisho
- 0x00349a04, // n0x0e55 c0x0000 (---------------) + I gamo
- 0x002934ca, // n0x0e56 c0x0000 (---------------) + I higashiomi
- 0x00274986, // n0x0e57 c0x0000 (---------------) + I hikone
- 0x0032dec4, // n0x0e58 c0x0000 (---------------) + I koka
- 0x002bc005, // n0x0e59 c0x0000 (---------------) + I konan
- 0x002f1705, // n0x0e5a c0x0000 (---------------) + I kosei
- 0x003587c4, // n0x0e5b c0x0000 (---------------) + I koto
- 0x0027e707, // n0x0e5c c0x0000 (---------------) + I kusatsu
- 0x002ca607, // n0x0e5d c0x0000 (---------------) + I maibara
- 0x002c1c08, // n0x0e5e c0x0000 (---------------) + I moriyama
- 0x00299d88, // n0x0e5f c0x0000 (---------------) + I nagahama
- 0x00217749, // n0x0e60 c0x0000 (---------------) + I nishiazai
- 0x0032f948, // n0x0e61 c0x0000 (---------------) + I notogawa
- 0x0029368b, // n0x0e62 c0x0000 (---------------) + I omihachiman
- 0x002589c4, // n0x0e63 c0x0000 (---------------) + I otsu
- 0x003003c5, // n0x0e64 c0x0000 (---------------) + I ritto
- 0x002590c5, // n0x0e65 c0x0000 (---------------) + I ryuoh
- 0x002d1b09, // n0x0e66 c0x0000 (---------------) + I takashima
- 0x00341b49, // n0x0e67 c0x0000 (---------------) + I takatsuki
- 0x002d97c8, // n0x0e68 c0x0000 (---------------) + I torahime
- 0x00253408, // n0x0e69 c0x0000 (---------------) + I toyosato
- 0x002a1784, // n0x0e6a c0x0000 (---------------) + I yasu
- 0x002903c5, // n0x0e6b c0x0000 (---------------) + I akagi
- 0x00200283, // n0x0e6c c0x0000 (---------------) + I ama
- 0x002a3985, // n0x0e6d c0x0000 (---------------) + I gotsu
- 0x002927c6, // n0x0e6e c0x0000 (---------------) + I hamada
- 0x0028ee8c, // n0x0e6f c0x0000 (---------------) + I higashiizumo
- 0x00227046, // n0x0e70 c0x0000 (---------------) + I hikawa
- 0x00256d06, // n0x0e71 c0x0000 (---------------) + I hikimi
- 0x00286285, // n0x0e72 c0x0000 (---------------) + I izumo
- 0x00303348, // n0x0e73 c0x0000 (---------------) + I kakinoki
- 0x002ac106, // n0x0e74 c0x0000 (---------------) + I masuda
- 0x002a9c86, // n0x0e75 c0x0000 (---------------) + I matsue
- 0x002625c6, // n0x0e76 c0x0000 (---------------) + I misato
- 0x0022b3cc, // n0x0e77 c0x0000 (---------------) + I nishinoshima
- 0x0026c444, // n0x0e78 c0x0000 (---------------) + I ohda
- 0x003455ca, // n0x0e79 c0x0000 (---------------) + I okinoshima
- 0x002861c8, // n0x0e7a c0x0000 (---------------) + I okuizumo
- 0x0028ecc7, // n0x0e7b c0x0000 (---------------) + I shimane
- 0x00364746, // n0x0e7c c0x0000 (---------------) + I tamayu
- 0x002d2ec7, // n0x0e7d c0x0000 (---------------) + I tsuwano
- 0x002d6e85, // n0x0e7e c0x0000 (---------------) + I unnan
- 0x003695c6, // n0x0e7f c0x0000 (---------------) + I yakumo
- 0x00330a06, // n0x0e80 c0x0000 (---------------) + I yasugi
- 0x00343887, // n0x0e81 c0x0000 (---------------) + I yatsuka
- 0x002a9544, // n0x0e82 c0x0000 (---------------) + I arai
- 0x0030f705, // n0x0e83 c0x0000 (---------------) + I atami
- 0x00274484, // n0x0e84 c0x0000 (---------------) + I fuji
- 0x002f3007, // n0x0e85 c0x0000 (---------------) + I fujieda
- 0x002746c8, // n0x0e86 c0x0000 (---------------) + I fujikawa
- 0x00274e4a, // n0x0e87 c0x0000 (---------------) + I fujinomiya
- 0x0027b8c7, // n0x0e88 c0x0000 (---------------) + I fukuroi
- 0x0029db47, // n0x0e89 c0x0000 (---------------) + I gotemba
- 0x0032cc87, // n0x0e8a c0x0000 (---------------) + I haibara
- 0x00311b89, // n0x0e8b c0x0000 (---------------) + I hamamatsu
- 0x0028ee8a, // n0x0e8c c0x0000 (---------------) + I higashiizu
- 0x0022a4c3, // n0x0e8d c0x0000 (---------------) + I ito
- 0x0034e745, // n0x0e8e c0x0000 (---------------) + I iwata
- 0x00220183, // n0x0e8f c0x0000 (---------------) + I izu
- 0x002f5309, // n0x0e90 c0x0000 (---------------) + I izunokuni
- 0x0028c508, // n0x0e91 c0x0000 (---------------) + I kakegawa
- 0x0031f0c7, // n0x0e92 c0x0000 (---------------) + I kannami
- 0x00212849, // n0x0e93 c0x0000 (---------------) + I kawanehon
- 0x002270c6, // n0x0e94 c0x0000 (---------------) + I kawazu
- 0x0022dd88, // n0x0e95 c0x0000 (---------------) + I kikugawa
- 0x002ed185, // n0x0e96 c0x0000 (---------------) + I kosai
- 0x0031504a, // n0x0e97 c0x0000 (---------------) + I makinohara
- 0x002ca149, // n0x0e98 c0x0000 (---------------) + I matsuzaki
- 0x0026b6c9, // n0x0e99 c0x0000 (---------------) + I minamiizu
- 0x002bb107, // n0x0e9a c0x0000 (---------------) + I mishima
- 0x00291649, // n0x0e9b c0x0000 (---------------) + I morimachi
- 0x00223748, // n0x0e9c c0x0000 (---------------) + I nishiizu
- 0x002eb906, // n0x0e9d c0x0000 (---------------) + I numazu
- 0x0022f648, // n0x0e9e c0x0000 (---------------) + I omaezaki
- 0x0020d8c7, // n0x0e9f c0x0000 (---------------) + I shimada
- 0x0024b147, // n0x0ea0 c0x0000 (---------------) + I shimizu
- 0x002dd247, // n0x0ea1 c0x0000 (---------------) + I shimoda
- 0x002dd488, // n0x0ea2 c0x0000 (---------------) + I shizuoka
- 0x002eb3c6, // n0x0ea3 c0x0000 (---------------) + I susono
- 0x00289f45, // n0x0ea4 c0x0000 (---------------) + I yaizu
- 0x00278b87, // n0x0ea5 c0x0000 (---------------) + I yoshida
- 0x0028f548, // n0x0ea6 c0x0000 (---------------) + I ashikaga
- 0x00335a44, // n0x0ea7 c0x0000 (---------------) + I bato
- 0x00324084, // n0x0ea8 c0x0000 (---------------) + I haga
- 0x002e3a07, // n0x0ea9 c0x0000 (---------------) + I ichikai
- 0x00265447, // n0x0eaa c0x0000 (---------------) + I iwafune
- 0x002b67ca, // n0x0eab c0x0000 (---------------) + I kaminokawa
- 0x002eb886, // n0x0eac c0x0000 (---------------) + I kanuma
- 0x002f8a8a, // n0x0ead c0x0000 (---------------) + I karasuyama
- 0x002b4007, // n0x0eae c0x0000 (---------------) + I kuroiso
- 0x00260487, // n0x0eaf c0x0000 (---------------) + I mashiko
- 0x0022bf84, // n0x0eb0 c0x0000 (---------------) + I mibu
- 0x002b7984, // n0x0eb1 c0x0000 (---------------) + I moka
- 0x0023b746, // n0x0eb2 c0x0000 (---------------) + I motegi
- 0x003725c4, // n0x0eb3 c0x0000 (---------------) + I nasu
- 0x003725cc, // n0x0eb4 c0x0000 (---------------) + I nasushiobara
- 0x0020fc85, // n0x0eb5 c0x0000 (---------------) + I nikko
- 0x00224d09, // n0x0eb6 c0x0000 (---------------) + I nishikata
- 0x00280604, // n0x0eb7 c0x0000 (---------------) + I nogi
- 0x0029b505, // n0x0eb8 c0x0000 (---------------) + I ohira
- 0x00206f08, // n0x0eb9 c0x0000 (---------------) + I ohtawara
- 0x0028a7c5, // n0x0eba c0x0000 (---------------) + I oyama
- 0x0021a006, // n0x0ebb c0x0000 (---------------) + I sakura
- 0x0032d184, // n0x0ebc c0x0000 (---------------) + I sano
- 0x002c888a, // n0x0ebd c0x0000 (---------------) + I shimotsuke
- 0x002f3846, // n0x0ebe c0x0000 (---------------) + I shioya
- 0x0028ab0a, // n0x0ebf c0x0000 (---------------) + I takanezawa
- 0x00335ac7, // n0x0ec0 c0x0000 (---------------) + I tochigi
- 0x002040c5, // n0x0ec1 c0x0000 (---------------) + I tsuga
- 0x00216045, // n0x0ec2 c0x0000 (---------------) + I ujiie
- 0x0024bd8a, // n0x0ec3 c0x0000 (---------------) + I utsunomiya
- 0x00257c45, // n0x0ec4 c0x0000 (---------------) + I yaita
- 0x0029b106, // n0x0ec5 c0x0000 (---------------) + I aizumi
- 0x00205884, // n0x0ec6 c0x0000 (---------------) + I anan
- 0x002b0846, // n0x0ec7 c0x0000 (---------------) + I ichiba
- 0x002e7245, // n0x0ec8 c0x0000 (---------------) + I itano
- 0x00220a46, // n0x0ec9 c0x0000 (---------------) + I kainan
- 0x0032c6cc, // n0x0eca c0x0000 (---------------) + I komatsushima
- 0x002c1d8a, // n0x0ecb c0x0000 (---------------) + I matsushige
- 0x002f5544, // n0x0ecc c0x0000 (---------------) + I mima
- 0x0024b386, // n0x0ecd c0x0000 (---------------) + I minami
- 0x00295c07, // n0x0ece c0x0000 (---------------) + I miyoshi
- 0x002c5a84, // n0x0ecf c0x0000 (---------------) + I mugi
- 0x0029bf08, // n0x0ed0 c0x0000 (---------------) + I nakagawa
- 0x00353e86, // n0x0ed1 c0x0000 (---------------) + I naruto
- 0x00250749, // n0x0ed2 c0x0000 (---------------) + I sanagochi
- 0x0033a0c9, // n0x0ed3 c0x0000 (---------------) + I shishikui
- 0x002e1f89, // n0x0ed4 c0x0000 (---------------) + I tokushima
- 0x00294086, // n0x0ed5 c0x0000 (---------------) + I wajiki
- 0x0020d9c6, // n0x0ed6 c0x0000 (---------------) + I adachi
- 0x0022f787, // n0x0ed7 c0x0000 (---------------) + I akiruno
- 0x0036aac8, // n0x0ed8 c0x0000 (---------------) + I akishima
- 0x0020d7c9, // n0x0ed9 c0x0000 (---------------) + I aogashima
- 0x0020d307, // n0x0eda c0x0000 (---------------) + I arakawa
- 0x0028e306, // n0x0edb c0x0000 (---------------) + I bunkyo
- 0x00374b47, // n0x0edc c0x0000 (---------------) + I chiyoda
- 0x002a4b45, // n0x0edd c0x0000 (---------------) + I chofu
- 0x002606c4, // n0x0ede c0x0000 (---------------) + I chuo
- 0x0022f347, // n0x0edf c0x0000 (---------------) + I edogawa
- 0x0028c305, // n0x0ee0 c0x0000 (---------------) + I fuchu
- 0x002811c5, // n0x0ee1 c0x0000 (---------------) + I fussa
- 0x0023b1c7, // n0x0ee2 c0x0000 (---------------) + I hachijo
- 0x00257a48, // n0x0ee3 c0x0000 (---------------) + I hachioji
- 0x00285446, // n0x0ee4 c0x0000 (---------------) + I hamura
- 0x00290c8d, // n0x0ee5 c0x0000 (---------------) + I higashikurume
- 0x002921cf, // n0x0ee6 c0x0000 (---------------) + I higashimurayama
- 0x0029780d, // n0x0ee7 c0x0000 (---------------) + I higashiyamato
- 0x00201b04, // n0x0ee8 c0x0000 (---------------) + I hino
- 0x00238406, // n0x0ee9 c0x0000 (---------------) + I hinode
- 0x002ca908, // n0x0eea c0x0000 (---------------) + I hinohara
- 0x0036dec5, // n0x0eeb c0x0000 (---------------) + I inagi
- 0x00298d88, // n0x0eec c0x0000 (---------------) + I itabashi
- 0x002a208a, // n0x0eed c0x0000 (---------------) + I katsushika
- 0x00213344, // n0x0eee c0x0000 (---------------) + I kita
- 0x002cdf46, // n0x0eef c0x0000 (---------------) + I kiyose
- 0x00240207, // n0x0ef0 c0x0000 (---------------) + I kodaira
- 0x002df047, // n0x0ef1 c0x0000 (---------------) + I koganei
- 0x00367d49, // n0x0ef2 c0x0000 (---------------) + I kokubunji
- 0x0022f605, // n0x0ef3 c0x0000 (---------------) + I komae
- 0x003587c4, // n0x0ef4 c0x0000 (---------------) + I koto
- 0x002abf0a, // n0x0ef5 c0x0000 (---------------) + I kouzushima
- 0x002b1409, // n0x0ef6 c0x0000 (---------------) + I kunitachi
- 0x00291747, // n0x0ef7 c0x0000 (---------------) + I machida
- 0x002dda46, // n0x0ef8 c0x0000 (---------------) + I meguro
- 0x0032dcc6, // n0x0ef9 c0x0000 (---------------) + I minato
- 0x00290306, // n0x0efa c0x0000 (---------------) + I mitaka
- 0x0023e346, // n0x0efb c0x0000 (---------------) + I mizuho
- 0x002c9e0f, // n0x0efc c0x0000 (---------------) + I musashimurayama
- 0x002ca7c9, // n0x0efd c0x0000 (---------------) + I musashino
- 0x002501c6, // n0x0efe c0x0000 (---------------) + I nakano
- 0x0033ddc6, // n0x0eff c0x0000 (---------------) + I nerima
- 0x0036b4c9, // n0x0f00 c0x0000 (---------------) + I ogasawara
- 0x002aa1c7, // n0x0f01 c0x0000 (---------------) + I okutama
- 0x00219d43, // n0x0f02 c0x0000 (---------------) + I ome
- 0x0022b546, // n0x0f03 c0x0000 (---------------) + I oshima
- 0x00213d43, // n0x0f04 c0x0000 (---------------) + I ota
- 0x002d0908, // n0x0f05 c0x0000 (---------------) + I setagaya
- 0x00234507, // n0x0f06 c0x0000 (---------------) + I shibuya
- 0x0029b749, // n0x0f07 c0x0000 (---------------) + I shinagawa
- 0x002d7688, // n0x0f08 c0x0000 (---------------) + I shinjuku
- 0x00343b08, // n0x0f09 c0x0000 (---------------) + I suginami
- 0x00265c06, // n0x0f0a c0x0000 (---------------) + I sumida
- 0x00309ac9, // n0x0f0b c0x0000 (---------------) + I tachikawa
- 0x00316dc5, // n0x0f0c c0x0000 (---------------) + I taito
- 0x0020a7c4, // n0x0f0d c0x0000 (---------------) + I tama
- 0x00313287, // n0x0f0e c0x0000 (---------------) + I toshima
- 0x0033a885, // n0x0f0f c0x0000 (---------------) + I chizu
- 0x00201b04, // n0x0f10 c0x0000 (---------------) + I hino
- 0x00280d88, // n0x0f11 c0x0000 (---------------) + I kawahara
- 0x00204a84, // n0x0f12 c0x0000 (---------------) + I koge
- 0x0035b787, // n0x0f13 c0x0000 (---------------) + I kotoura
- 0x002e46c6, // n0x0f14 c0x0000 (---------------) + I misasa
- 0x002c6785, // n0x0f15 c0x0000 (---------------) + I nanbu
- 0x002cf288, // n0x0f16 c0x0000 (---------------) + I nichinan
- 0x0032db8b, // n0x0f17 c0x0000 (---------------) + I sakaiminato
- 0x002fb3c7, // n0x0f18 c0x0000 (---------------) + I tottori
- 0x0024c006, // n0x0f19 c0x0000 (---------------) + I wakasa
- 0x002bdd84, // n0x0f1a c0x0000 (---------------) + I yazu
- 0x00319306, // n0x0f1b c0x0000 (---------------) + I yonago
- 0x002bac05, // n0x0f1c c0x0000 (---------------) + I asahi
- 0x0028c305, // n0x0f1d c0x0000 (---------------) + I fuchu
- 0x0027b189, // n0x0f1e c0x0000 (---------------) + I fukumitsu
- 0x0027e309, // n0x0f1f c0x0000 (---------------) + I funahashi
- 0x0024b184, // n0x0f20 c0x0000 (---------------) + I himi
- 0x0024b1c5, // n0x0f21 c0x0000 (---------------) + I imizu
- 0x0024b3c5, // n0x0f22 c0x0000 (---------------) + I inami
- 0x00314ec6, // n0x0f23 c0x0000 (---------------) + I johana
- 0x002e3908, // n0x0f24 c0x0000 (---------------) + I kamiichi
- 0x002b3806, // n0x0f25 c0x0000 (---------------) + I kurobe
- 0x0026a58b, // n0x0f26 c0x0000 (---------------) + I nakaniikawa
- 0x0022aeca, // n0x0f27 c0x0000 (---------------) + I namerikawa
- 0x002fdb85, // n0x0f28 c0x0000 (---------------) + I nanto
- 0x00286d86, // n0x0f29 c0x0000 (---------------) + I nyuzen
- 0x002ec145, // n0x0f2a c0x0000 (---------------) + I oyabe
- 0x003717c5, // n0x0f2b c0x0000 (---------------) + I taira
- 0x00295387, // n0x0f2c c0x0000 (---------------) + I takaoka
- 0x0024f888, // n0x0f2d c0x0000 (---------------) + I tateyama
- 0x00289e44, // n0x0f2e c0x0000 (---------------) + I toga
- 0x002d3906, // n0x0f2f c0x0000 (---------------) + I tonami
- 0x0028a786, // n0x0f30 c0x0000 (---------------) + I toyama
- 0x00223907, // n0x0f31 c0x0000 (---------------) + I unazuki
- 0x002b4f84, // n0x0f32 c0x0000 (---------------) + I uozu
- 0x002795c6, // n0x0f33 c0x0000 (---------------) + I yamada
- 0x00255245, // n0x0f34 c0x0000 (---------------) + I arida
- 0x00255249, // n0x0f35 c0x0000 (---------------) + I aridagawa
- 0x0020dbc4, // n0x0f36 c0x0000 (---------------) + I gobo
- 0x002d8cc9, // n0x0f37 c0x0000 (---------------) + I hashimoto
- 0x002780c6, // n0x0f38 c0x0000 (---------------) + I hidaka
- 0x002b6e88, // n0x0f39 c0x0000 (---------------) + I hirogawa
- 0x0024b3c5, // n0x0f3a c0x0000 (---------------) + I inami
- 0x0022eb45, // n0x0f3b c0x0000 (---------------) + I iwade
- 0x00220a46, // n0x0f3c c0x0000 (---------------) + I kainan
- 0x002c2289, // n0x0f3d c0x0000 (---------------) + I kamitonda
- 0x00226589, // n0x0f3e c0x0000 (---------------) + I katsuragi
- 0x00256d86, // n0x0f3f c0x0000 (---------------) + I kimino
- 0x00254ac8, // n0x0f40 c0x0000 (---------------) + I kinokawa
- 0x002955c8, // n0x0f41 c0x0000 (---------------) + I kitayama
- 0x002ec104, // n0x0f42 c0x0000 (---------------) + I koya
- 0x002ac284, // n0x0f43 c0x0000 (---------------) + I koza
- 0x002ac288, // n0x0f44 c0x0000 (---------------) + I kozagawa
- 0x003084c8, // n0x0f45 c0x0000 (---------------) + I kudoyama
- 0x0029f909, // n0x0f46 c0x0000 (---------------) + I kushimoto
- 0x00292746, // n0x0f47 c0x0000 (---------------) + I mihama
- 0x002625c6, // n0x0f48 c0x0000 (---------------) + I misato
- 0x0030594d, // n0x0f49 c0x0000 (---------------) + I nachikatsuura
- 0x002a57c6, // n0x0f4a c0x0000 (---------------) + I shingu
- 0x002f4089, // n0x0f4b c0x0000 (---------------) + I shirahama
- 0x00315f85, // n0x0f4c c0x0000 (---------------) + I taiji
- 0x0021dcc6, // n0x0f4d c0x0000 (---------------) + I tanabe
- 0x00309c88, // n0x0f4e c0x0000 (---------------) + I wakayama
- 0x00303205, // n0x0f4f c0x0000 (---------------) + I yuasa
- 0x00279b84, // n0x0f50 c0x0000 (---------------) + I yura
- 0x002bac05, // n0x0f51 c0x0000 (---------------) + I asahi
- 0x0027de88, // n0x0f52 c0x0000 (---------------) + I funagata
- 0x00293289, // n0x0f53 c0x0000 (---------------) + I higashine
- 0x00274544, // n0x0f54 c0x0000 (---------------) + I iide
- 0x00311246, // n0x0f55 c0x0000 (---------------) + I kahoku
- 0x002efbca, // n0x0f56 c0x0000 (---------------) + I kaminoyama
- 0x00229248, // n0x0f57 c0x0000 (---------------) + I kaneyama
- 0x002b6949, // n0x0f58 c0x0000 (---------------) + I kawanishi
- 0x003457ca, // n0x0f59 c0x0000 (---------------) + I mamurogawa
- 0x002127c6, // n0x0f5a c0x0000 (---------------) + I mikawa
- 0x00292388, // n0x0f5b c0x0000 (---------------) + I murayama
- 0x00276945, // n0x0f5c c0x0000 (---------------) + I nagai
- 0x00344c08, // n0x0f5d c0x0000 (---------------) + I nakayama
- 0x002b0685, // n0x0f5e c0x0000 (---------------) + I nanyo
- 0x00226f89, // n0x0f5f c0x0000 (---------------) + I nishikawa
- 0x002e7349, // n0x0f60 c0x0000 (---------------) + I obanazawa
- 0x0020dd02, // n0x0f61 c0x0000 (---------------) + I oe
- 0x0028dcc5, // n0x0f62 c0x0000 (---------------) + I oguni
- 0x00274cc6, // n0x0f63 c0x0000 (---------------) + I ohkura
- 0x00278007, // n0x0f64 c0x0000 (---------------) + I oishida
- 0x002a40c5, // n0x0f65 c0x0000 (---------------) + I sagae
- 0x00341a46, // n0x0f66 c0x0000 (---------------) + I sakata
- 0x0034a348, // n0x0f67 c0x0000 (---------------) + I sakegawa
- 0x002d2246, // n0x0f68 c0x0000 (---------------) + I shinjo
- 0x0031f5c9, // n0x0f69 c0x0000 (---------------) + I shirataka
- 0x00276286, // n0x0f6a c0x0000 (---------------) + I shonai
- 0x002a3c48, // n0x0f6b c0x0000 (---------------) + I takahata
- 0x002a7185, // n0x0f6c c0x0000 (---------------) + I tendo
- 0x002612c6, // n0x0f6d c0x0000 (---------------) + I tozawa
- 0x00212b08, // n0x0f6e c0x0000 (---------------) + I tsuruoka
- 0x0027d308, // n0x0f6f c0x0000 (---------------) + I yamagata
- 0x00202b48, // n0x0f70 c0x0000 (---------------) + I yamanobe
- 0x00246508, // n0x0f71 c0x0000 (---------------) + I yonezawa
- 0x00263244, // n0x0f72 c0x0000 (---------------) + I yuza
- 0x00220e83, // n0x0f73 c0x0000 (---------------) + I abu
- 0x0031f804, // n0x0f74 c0x0000 (---------------) + I hagi
- 0x002be386, // n0x0f75 c0x0000 (---------------) + I hikari
- 0x002a4b84, // n0x0f76 c0x0000 (---------------) + I hofu
- 0x0033f747, // n0x0f77 c0x0000 (---------------) + I iwakuni
- 0x002a9b89, // n0x0f78 c0x0000 (---------------) + I kudamatsu
- 0x002bcfc5, // n0x0f79 c0x0000 (---------------) + I mitou
- 0x00201106, // n0x0f7a c0x0000 (---------------) + I nagato
- 0x0022b546, // n0x0f7b c0x0000 (---------------) + I oshima
- 0x002c480b, // n0x0f7c c0x0000 (---------------) + I shimonoseki
- 0x002fdac6, // n0x0f7d c0x0000 (---------------) + I shunan
- 0x003087c6, // n0x0f7e c0x0000 (---------------) + I tabuse
- 0x00274288, // n0x0f7f c0x0000 (---------------) + I tokuyama
- 0x00255a86, // n0x0f80 c0x0000 (---------------) + I toyota
- 0x00200e43, // n0x0f81 c0x0000 (---------------) + I ube
- 0x00224083, // n0x0f82 c0x0000 (---------------) + I yuu
- 0x002606c4, // n0x0f83 c0x0000 (---------------) + I chuo
- 0x00234485, // n0x0f84 c0x0000 (---------------) + I doshi
- 0x00306987, // n0x0f85 c0x0000 (---------------) + I fuefuki
- 0x002746c8, // n0x0f86 c0x0000 (---------------) + I fujikawa
- 0x002746cf, // n0x0f87 c0x0000 (---------------) + I fujikawaguchiko
- 0x00278a8b, // n0x0f88 c0x0000 (---------------) + I fujiyoshida
- 0x002e3708, // n0x0f89 c0x0000 (---------------) + I hayakawa
- 0x003112c6, // n0x0f8a c0x0000 (---------------) + I hokuto
- 0x002a034e, // n0x0f8b c0x0000 (---------------) + I ichikawamisato
- 0x00220a43, // n0x0f8c c0x0000 (---------------) + I kai
- 0x00306904, // n0x0f8d c0x0000 (---------------) + I kofu
- 0x002fda45, // n0x0f8e c0x0000 (---------------) + I koshu
- 0x0034bec6, // n0x0f8f c0x0000 (---------------) + I kosuge
- 0x002889cb, // n0x0f90 c0x0000 (---------------) + I minami-alps
- 0x0028cc46, // n0x0f91 c0x0000 (---------------) + I minobu
- 0x00226089, // n0x0f92 c0x0000 (---------------) + I nakamichi
- 0x002c6785, // n0x0f93 c0x0000 (---------------) + I nanbu
- 0x0033b408, // n0x0f94 c0x0000 (---------------) + I narusawa
- 0x00214948, // n0x0f95 c0x0000 (---------------) + I nirasaki
- 0x0022644c, // n0x0f96 c0x0000 (---------------) + I nishikatsura
- 0x00298586, // n0x0f97 c0x0000 (---------------) + I oshino
- 0x002a39c6, // n0x0f98 c0x0000 (---------------) + I otsuki
- 0x002ddc85, // n0x0f99 c0x0000 (---------------) + I showa
- 0x00281808, // n0x0f9a c0x0000 (---------------) + I tabayama
- 0x00212b05, // n0x0f9b c0x0000 (---------------) + I tsuru
- 0x002107c8, // n0x0f9c c0x0000 (---------------) + I uenohara
- 0x00297c4a, // n0x0f9d c0x0000 (---------------) + I yamanakako
- 0x00322709, // n0x0f9e c0x0000 (---------------) + I yamanashi
- 0x00757e04, // n0x0f9f c0x0001 (---------------) ! I city
- 0x00222603, // n0x0fa0 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0fa1 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0fa2 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x0fa3 c0x0000 (---------------) + I mil
- 0x00201603, // n0x0fa4 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0fa5 c0x0000 (---------------) + I org
- 0x00314c43, // n0x0fa6 c0x0000 (---------------) + I biz
- 0x00222603, // n0x0fa7 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0fa8 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0fa9 c0x0000 (---------------) + I gov
- 0x0021c704, // n0x0faa c0x0000 (---------------) + I info
- 0x00201603, // n0x0fab c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0fac c0x0000 (---------------) + I org
- 0x00204603, // n0x0fad c0x0000 (---------------) + I ass
- 0x0029cfc4, // n0x0fae c0x0000 (---------------) + I asso
- 0x00222603, // n0x0faf c0x0000 (---------------) + I com
- 0x00239dc4, // n0x0fb0 c0x0000 (---------------) + I coop
- 0x0027a643, // n0x0fb1 c0x0000 (---------------) + I edu
- 0x00368f84, // n0x0fb2 c0x0000 (---------------) + I gouv
- 0x002157c3, // n0x0fb3 c0x0000 (---------------) + I gov
- 0x002eef07, // n0x0fb4 c0x0000 (---------------) + I medecin
- 0x0023f703, // n0x0fb5 c0x0000 (---------------) + I mil
- 0x00214103, // n0x0fb6 c0x0000 (---------------) + I nom
- 0x002bef08, // n0x0fb7 c0x0000 (---------------) + I notaires
- 0x0021f5c3, // n0x0fb8 c0x0000 (---------------) + I org
- 0x002c860b, // n0x0fb9 c0x0000 (---------------) + I pharmaciens
- 0x002d7b03, // n0x0fba c0x0000 (---------------) + I prd
- 0x002487c6, // n0x0fbb c0x0000 (---------------) + I presse
- 0x00200142, // n0x0fbc c0x0000 (---------------) + I tm
- 0x002de14b, // n0x0fbd c0x0000 (---------------) + I veterinaire
- 0x0027a643, // n0x0fbe c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0fbf c0x0000 (---------------) + I gov
- 0x00201603, // n0x0fc0 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0fc1 c0x0000 (---------------) + I org
- 0x00222603, // n0x0fc2 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0fc3 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0fc4 c0x0000 (---------------) + I gov
- 0x0021f5c3, // n0x0fc5 c0x0000 (---------------) + I org
- 0x0021fbc3, // n0x0fc6 c0x0000 (---------------) + I rep
- 0x00205543, // n0x0fc7 c0x0000 (---------------) + I tra
- 0x00201d82, // n0x0fc8 c0x0000 (---------------) + I ac
- 0x000b8948, // n0x0fc9 c0x0000 (---------------) + blogspot
- 0x002326c5, // n0x0fca c0x0000 (---------------) + I busan
- 0x00323348, // n0x0fcb c0x0000 (---------------) + I chungbuk
- 0x003265c8, // n0x0fcc c0x0000 (---------------) + I chungnam
- 0x00207a02, // n0x0fcd c0x0000 (---------------) + I co
- 0x00311dc5, // n0x0fce c0x0000 (---------------) + I daegu
- 0x002fd807, // n0x0fcf c0x0000 (---------------) + I daejeon
- 0x00201fc2, // n0x0fd0 c0x0000 (---------------) + I es
- 0x002262c7, // n0x0fd1 c0x0000 (---------------) + I gangwon
- 0x00206cc2, // n0x0fd2 c0x0000 (---------------) + I go
- 0x00253747, // n0x0fd3 c0x0000 (---------------) + I gwangju
- 0x0032c4c9, // n0x0fd4 c0x0000 (---------------) + I gyeongbuk
- 0x00299948, // n0x0fd5 c0x0000 (---------------) + I gyeonggi
- 0x0025eb09, // n0x0fd6 c0x0000 (---------------) + I gyeongnam
- 0x0020f042, // n0x0fd7 c0x0000 (---------------) + I hs
- 0x002ad687, // n0x0fd8 c0x0000 (---------------) + I incheon
- 0x00256b04, // n0x0fd9 c0x0000 (---------------) + I jeju
- 0x002fd8c7, // n0x0fda c0x0000 (---------------) + I jeonbuk
- 0x0022adc7, // n0x0fdb c0x0000 (---------------) + I jeonnam
- 0x0023d042, // n0x0fdc c0x0000 (---------------) + I kg
- 0x0023f703, // n0x0fdd c0x0000 (---------------) + I mil
- 0x00225542, // n0x0fde c0x0000 (---------------) + I ms
- 0x00201602, // n0x0fdf c0x0000 (---------------) + I ne
- 0x00200bc2, // n0x0fe0 c0x0000 (---------------) + I or
- 0x00202142, // n0x0fe1 c0x0000 (---------------) + I pe
- 0x002039c2, // n0x0fe2 c0x0000 (---------------) + I re
- 0x00218bc2, // n0x0fe3 c0x0000 (---------------) + I sc
- 0x0034b005, // n0x0fe4 c0x0000 (---------------) + I seoul
- 0x00224105, // n0x0fe5 c0x0000 (---------------) + I ulsan
- 0x00222603, // n0x0fe6 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0fe7 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0fe8 c0x0000 (---------------) + I gov
- 0x00201603, // n0x0fe9 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0fea c0x0000 (---------------) + I org
- 0x00222603, // n0x0feb c0x0000 (---------------) + I com
- 0x0027a643, // n0x0fec c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0fed c0x0000 (---------------) + I gov
- 0x0023f703, // n0x0fee c0x0000 (---------------) + I mil
- 0x00201603, // n0x0fef c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0ff0 c0x0000 (---------------) + I org
- 0x00000601, // n0x0ff1 c0x0000 (---------------) + c
- 0x00222603, // n0x0ff2 c0x0000 (---------------) + I com
- 0x0027a643, // n0x0ff3 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0ff4 c0x0000 (---------------) + I gov
- 0x0021c704, // n0x0ff5 c0x0000 (---------------) + I info
- 0x00223a83, // n0x0ff6 c0x0000 (---------------) + I int
- 0x00201603, // n0x0ff7 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0ff8 c0x0000 (---------------) + I org
- 0x00222483, // n0x0ff9 c0x0000 (---------------) + I per
- 0x00222603, // n0x0ffa c0x0000 (---------------) + I com
- 0x0027a643, // n0x0ffb c0x0000 (---------------) + I edu
- 0x002157c3, // n0x0ffc c0x0000 (---------------) + I gov
- 0x00201603, // n0x0ffd c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x0ffe c0x0000 (---------------) + I org
- 0x00207a02, // n0x0fff c0x0000 (---------------) + I co
- 0x00222603, // n0x1000 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1001 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1002 c0x0000 (---------------) + I gov
- 0x00201603, // n0x1003 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1004 c0x0000 (---------------) + I org
- 0x002b7fc4, // n0x1005 c0x0000 (---------------) + I assn
- 0x00222603, // n0x1006 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1007 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1008 c0x0000 (---------------) + I gov
- 0x00236603, // n0x1009 c0x0000 (---------------) + I grp
- 0x002a7585, // n0x100a c0x0000 (---------------) + I hotel
- 0x00223a83, // n0x100b c0x0000 (---------------) + I int
- 0x00223143, // n0x100c c0x0000 (---------------) + I ltd
- 0x00201603, // n0x100d c0x0000 (---------------) + I net
- 0x00224203, // n0x100e c0x0000 (---------------) + I ngo
- 0x0021f5c3, // n0x100f c0x0000 (---------------) + I org
- 0x002526c3, // n0x1010 c0x0000 (---------------) + I sch
- 0x0029d043, // n0x1011 c0x0000 (---------------) + I soc
- 0x00205e43, // n0x1012 c0x0000 (---------------) + I web
- 0x00222603, // n0x1013 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1014 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1015 c0x0000 (---------------) + I gov
- 0x00201603, // n0x1016 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1017 c0x0000 (---------------) + I org
- 0x00207a02, // n0x1018 c0x0000 (---------------) + I co
- 0x0021f5c3, // n0x1019 c0x0000 (---------------) + I org
- 0x002157c3, // n0x101a c0x0000 (---------------) + I gov
- 0x002adf03, // n0x101b c0x0000 (---------------) + I asn
- 0x00222603, // n0x101c c0x0000 (---------------) + I com
- 0x00234b04, // n0x101d c0x0000 (---------------) + I conf
- 0x0027a643, // n0x101e c0x0000 (---------------) + I edu
- 0x002157c3, // n0x101f c0x0000 (---------------) + I gov
- 0x00202f82, // n0x1020 c0x0000 (---------------) + I id
- 0x0023f703, // n0x1021 c0x0000 (---------------) + I mil
- 0x00201603, // n0x1022 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1023 c0x0000 (---------------) + I org
- 0x00222603, // n0x1024 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1025 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1026 c0x0000 (---------------) + I gov
- 0x00202f82, // n0x1027 c0x0000 (---------------) + I id
- 0x00225d03, // n0x1028 c0x0000 (---------------) + I med
- 0x00201603, // n0x1029 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x102a c0x0000 (---------------) + I org
- 0x002d2a43, // n0x102b c0x0000 (---------------) + I plc
- 0x002526c3, // n0x102c c0x0000 (---------------) + I sch
- 0x00201d82, // n0x102d c0x0000 (---------------) + I ac
- 0x00207a02, // n0x102e c0x0000 (---------------) + I co
- 0x002157c3, // n0x102f c0x0000 (---------------) + I gov
- 0x00201603, // n0x1030 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1031 c0x0000 (---------------) + I org
- 0x002487c5, // n0x1032 c0x0000 (---------------) + I press
- 0x0029cfc4, // n0x1033 c0x0000 (---------------) + I asso
- 0x00200142, // n0x1034 c0x0000 (---------------) + I tm
- 0x00201d82, // n0x1035 c0x0000 (---------------) + I ac
- 0x00207a02, // n0x1036 c0x0000 (---------------) + I co
- 0x0027a643, // n0x1037 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1038 c0x0000 (---------------) + I gov
- 0x002602c3, // n0x1039 c0x0000 (---------------) + I its
- 0x00201603, // n0x103a c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x103b c0x0000 (---------------) + I org
- 0x002d82c4, // n0x103c c0x0000 (---------------) + I priv
- 0x00222603, // n0x103d c0x0000 (---------------) + I com
- 0x0027a643, // n0x103e c0x0000 (---------------) + I edu
- 0x002157c3, // n0x103f c0x0000 (---------------) + I gov
- 0x0023f703, // n0x1040 c0x0000 (---------------) + I mil
- 0x00214103, // n0x1041 c0x0000 (---------------) + I nom
- 0x0021f5c3, // n0x1042 c0x0000 (---------------) + I org
- 0x002d7b03, // n0x1043 c0x0000 (---------------) + I prd
- 0x00200142, // n0x1044 c0x0000 (---------------) + I tm
- 0x00222603, // n0x1045 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1046 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1047 c0x0000 (---------------) + I gov
- 0x0021c543, // n0x1048 c0x0000 (---------------) + I inf
- 0x0022aec4, // n0x1049 c0x0000 (---------------) + I name
- 0x00201603, // n0x104a c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x104b c0x0000 (---------------) + I org
- 0x00222603, // n0x104c c0x0000 (---------------) + I com
- 0x0027a643, // n0x104d c0x0000 (---------------) + I edu
- 0x00368f84, // n0x104e c0x0000 (---------------) + I gouv
- 0x002157c3, // n0x104f c0x0000 (---------------) + I gov
- 0x00201603, // n0x1050 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1051 c0x0000 (---------------) + I org
- 0x002487c6, // n0x1052 c0x0000 (---------------) + I presse
- 0x0027a643, // n0x1053 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1054 c0x0000 (---------------) + I gov
- 0x00015183, // n0x1055 c0x0000 (---------------) + nyc
- 0x0021f5c3, // n0x1056 c0x0000 (---------------) + I org
- 0x00222603, // n0x1057 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1058 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1059 c0x0000 (---------------) + I gov
- 0x00201603, // n0x105a c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x105b c0x0000 (---------------) + I org
- 0x000b8948, // n0x105c c0x0000 (---------------) + blogspot
- 0x002157c3, // n0x105d c0x0000 (---------------) + I gov
- 0x00222603, // n0x105e c0x0000 (---------------) + I com
- 0x0027a643, // n0x105f c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1060 c0x0000 (---------------) + I gov
- 0x00201603, // n0x1061 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1062 c0x0000 (---------------) + I org
- 0x00222603, // n0x1063 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1064 c0x0000 (---------------) + I edu
- 0x00201603, // n0x1065 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1066 c0x0000 (---------------) + I org
- 0x00201d82, // n0x1067 c0x0000 (---------------) + I ac
- 0x00207a02, // n0x1068 c0x0000 (---------------) + I co
- 0x00222603, // n0x1069 c0x0000 (---------------) + I com
- 0x002157c3, // n0x106a c0x0000 (---------------) + I gov
- 0x00201603, // n0x106b c0x0000 (---------------) + I net
- 0x00200bc2, // n0x106c c0x0000 (---------------) + I or
- 0x0021f5c3, // n0x106d c0x0000 (---------------) + I org
- 0x002fe307, // n0x106e c0x0000 (---------------) + I academy
- 0x0029a5cb, // n0x106f c0x0000 (---------------) + I agriculture
- 0x002402c3, // n0x1070 c0x0000 (---------------) + I air
- 0x00254c88, // n0x1071 c0x0000 (---------------) + I airguard
- 0x0036a847, // n0x1072 c0x0000 (---------------) + I alabama
- 0x00204cc6, // n0x1073 c0x0000 (---------------) + I alaska
- 0x002b9985, // n0x1074 c0x0000 (---------------) + I amber
- 0x002c5389, // n0x1075 c0x0000 (---------------) + I ambulance
- 0x0025f188, // n0x1076 c0x0000 (---------------) + I american
- 0x0025f189, // n0x1077 c0x0000 (---------------) + I americana
- 0x002c7010, // n0x1078 c0x0000 (---------------) + I americanantiques
- 0x0025f18b, // n0x1079 c0x0000 (---------------) + I americanart
- 0x002b97c9, // n0x107a c0x0000 (---------------) + I amsterdam
- 0x002006c3, // n0x107b c0x0000 (---------------) + I and
- 0x002ec789, // n0x107c c0x0000 (---------------) + I annefrank
- 0x00235d86, // n0x107d c0x0000 (---------------) + I anthro
- 0x00235d8c, // n0x107e c0x0000 (---------------) + I anthropology
- 0x00232788, // n0x107f c0x0000 (---------------) + I antiques
- 0x00302c08, // n0x1080 c0x0000 (---------------) + I aquarium
- 0x0022a0c9, // n0x1081 c0x0000 (---------------) + I arboretum
- 0x002aa94e, // n0x1082 c0x0000 (---------------) + I archaeological
- 0x002cbacb, // n0x1083 c0x0000 (---------------) + I archaeology
- 0x0024680c, // n0x1084 c0x0000 (---------------) + I architecture
- 0x00201383, // n0x1085 c0x0000 (---------------) + I art
- 0x0025f38c, // n0x1086 c0x0000 (---------------) + I artanddesign
- 0x002f6c49, // n0x1087 c0x0000 (---------------) + I artcenter
- 0x002078c7, // n0x1088 c0x0000 (---------------) + I artdeco
- 0x0027a58c, // n0x1089 c0x0000 (---------------) + I arteducation
- 0x00236e4a, // n0x108a c0x0000 (---------------) + I artgallery
- 0x002180c4, // n0x108b c0x0000 (---------------) + I arts
- 0x002180cd, // n0x108c c0x0000 (---------------) + I artsandcrafts
- 0x002f6b08, // n0x108d c0x0000 (---------------) + I asmatart
- 0x0020cbcd, // n0x108e c0x0000 (---------------) + I assassination
- 0x00204606, // n0x108f c0x0000 (---------------) + I assisi
- 0x0029cfcb, // n0x1090 c0x0000 (---------------) + I association
- 0x00311889, // n0x1091 c0x0000 (---------------) + I astronomy
- 0x0027c587, // n0x1092 c0x0000 (---------------) + I atlanta
- 0x0036e206, // n0x1093 c0x0000 (---------------) + I austin
- 0x002e7549, // n0x1094 c0x0000 (---------------) + I australia
- 0x0031528a, // n0x1095 c0x0000 (---------------) + I automotive
- 0x00370988, // n0x1096 c0x0000 (---------------) + I aviation
- 0x0026d8c4, // n0x1097 c0x0000 (---------------) + I axis
- 0x00276ec7, // n0x1098 c0x0000 (---------------) + I badajoz
- 0x00316787, // n0x1099 c0x0000 (---------------) + I baghdad
- 0x002e7e44, // n0x109a c0x0000 (---------------) + I bahn
- 0x00349684, // n0x109b c0x0000 (---------------) + I bale
- 0x002e6649, // n0x109c c0x0000 (---------------) + I baltimore
- 0x002fc809, // n0x109d c0x0000 (---------------) + I barcelona
- 0x002a7808, // n0x109e c0x0000 (---------------) + I baseball
- 0x00211605, // n0x109f c0x0000 (---------------) + I basel
- 0x00211bc5, // n0x10a0 c0x0000 (---------------) + I baths
- 0x0020fb46, // n0x10a1 c0x0000 (---------------) + I bauern
- 0x00217f89, // n0x10a2 c0x0000 (---------------) + I beauxarts
- 0x00202ccd, // n0x10a3 c0x0000 (---------------) + I beeldengeluid
- 0x0021ddc8, // n0x10a4 c0x0000 (---------------) + I bellevue
- 0x0020fa47, // n0x10a5 c0x0000 (---------------) + I bergbau
- 0x002b9a08, // n0x10a6 c0x0000 (---------------) + I berkeley
- 0x0035e1c6, // n0x10a7 c0x0000 (---------------) + I berlin
- 0x00360504, // n0x10a8 c0x0000 (---------------) + I bern
- 0x0023a185, // n0x10a9 c0x0000 (---------------) + I bible
- 0x00204286, // n0x10aa c0x0000 (---------------) + I bilbao
- 0x002053c4, // n0x10ab c0x0000 (---------------) + I bill
- 0x002077c7, // n0x10ac c0x0000 (---------------) + I birdart
- 0x0020be0a, // n0x10ad c0x0000 (---------------) + I birthplace
- 0x00213004, // n0x10ae c0x0000 (---------------) + I bonn
- 0x00213686, // n0x10af c0x0000 (---------------) + I boston
- 0x00213d09, // n0x10b0 c0x0000 (---------------) + I botanical
- 0x00213d0f, // n0x10b1 c0x0000 (---------------) + I botanicalgarden
- 0x0021464d, // n0x10b2 c0x0000 (---------------) + I botanicgarden
- 0x00215086, // n0x10b3 c0x0000 (---------------) + I botany
- 0x002167d0, // n0x10b4 c0x0000 (---------------) + I brandywinevalley
- 0x002173c6, // n0x10b5 c0x0000 (---------------) + I brasil
- 0x00219007, // n0x10b6 c0x0000 (---------------) + I bristol
- 0x0021a287, // n0x10b7 c0x0000 (---------------) + I british
- 0x0021a28f, // n0x10b8 c0x0000 (---------------) + I britishcolumbia
- 0x0021bf49, // n0x10b9 c0x0000 (---------------) + I broadcast
- 0x00220346, // n0x10ba c0x0000 (---------------) + I brunel
- 0x002210c7, // n0x10bb c0x0000 (---------------) + I brussel
- 0x002210c8, // n0x10bc c0x0000 (---------------) + I brussels
- 0x00221689, // n0x10bd c0x0000 (---------------) + I bruxelles
- 0x0022c008, // n0x10be c0x0000 (---------------) + I building
- 0x002d0447, // n0x10bf c0x0000 (---------------) + I burghof
- 0x002326c3, // n0x10c0 c0x0000 (---------------) + I bus
- 0x0026b046, // n0x10c1 c0x0000 (---------------) + I bushey
- 0x00312948, // n0x10c2 c0x0000 (---------------) + I cadaques
- 0x002aac0a, // n0x10c3 c0x0000 (---------------) + I california
- 0x0021f389, // n0x10c4 c0x0000 (---------------) + I cambridge
- 0x00225943, // n0x10c5 c0x0000 (---------------) + I can
- 0x00319606, // n0x10c6 c0x0000 (---------------) + I canada
- 0x002d374a, // n0x10c7 c0x0000 (---------------) + I capebreton
- 0x00215cc7, // n0x10c8 c0x0000 (---------------) + I carrier
- 0x0027a3ca, // n0x10c9 c0x0000 (---------------) + I cartoonart
- 0x0035074e, // n0x10ca c0x0000 (---------------) + I casadelamoneda
- 0x0021c086, // n0x10cb c0x0000 (---------------) + I castle
- 0x002d9207, // n0x10cc c0x0000 (---------------) + I castres
- 0x002a54c6, // n0x10cd c0x0000 (---------------) + I celtic
- 0x00240f86, // n0x10ce c0x0000 (---------------) + I center
- 0x0034b8cb, // n0x10cf c0x0000 (---------------) + I chattanooga
- 0x0024a4ca, // n0x10d0 c0x0000 (---------------) + I cheltenham
- 0x00346dcd, // n0x10d1 c0x0000 (---------------) + I chesapeakebay
- 0x0020da87, // n0x10d2 c0x0000 (---------------) + I chicago
- 0x00203888, // n0x10d3 c0x0000 (---------------) + I children
- 0x00203889, // n0x10d4 c0x0000 (---------------) + I childrens
- 0x0020388f, // n0x10d5 c0x0000 (---------------) + I childrensgarden
- 0x002a488c, // n0x10d6 c0x0000 (---------------) + I chiropractic
- 0x002a1d09, // n0x10d7 c0x0000 (---------------) + I chocolate
- 0x0023c1ce, // n0x10d8 c0x0000 (---------------) + I christiansburg
- 0x002c6d0a, // n0x10d9 c0x0000 (---------------) + I cincinnati
- 0x002ef006, // n0x10da c0x0000 (---------------) + I cinema
- 0x0034f8c6, // n0x10db c0x0000 (---------------) + I circus
- 0x0022b6cc, // n0x10dc c0x0000 (---------------) + I civilisation
- 0x0022b9cc, // n0x10dd c0x0000 (---------------) + I civilization
- 0x0022bcc8, // n0x10de c0x0000 (---------------) + I civilwar
- 0x0022df87, // n0x10df c0x0000 (---------------) + I clinton
- 0x002007c5, // n0x10e0 c0x0000 (---------------) + I clock
- 0x00207a04, // n0x10e1 c0x0000 (---------------) + I coal
- 0x003335ce, // n0x10e2 c0x0000 (---------------) + I coastaldefence
- 0x0029fd84, // n0x10e3 c0x0000 (---------------) + I cody
- 0x00248c07, // n0x10e4 c0x0000 (---------------) + I coldwar
- 0x00230b8a, // n0x10e5 c0x0000 (---------------) + I collection
- 0x00231694, // n0x10e6 c0x0000 (---------------) + I colonialwilliamsburg
- 0x0023200f, // n0x10e7 c0x0000 (---------------) + I coloradoplateau
- 0x0021a448, // n0x10e8 c0x0000 (---------------) + I columbia
- 0x00232588, // n0x10e9 c0x0000 (---------------) + I columbus
- 0x002d734d, // n0x10ea c0x0000 (---------------) + I communication
- 0x002d734e, // n0x10eb c0x0000 (---------------) + I communications
- 0x00233189, // n0x10ec c0x0000 (---------------) + I community
- 0x00233bc8, // n0x10ed c0x0000 (---------------) + I computer
- 0x00233bcf, // n0x10ee c0x0000 (---------------) + I computerhistory
- 0x00236b4c, // n0x10ef c0x0000 (---------------) + I contemporary
- 0x00236b4f, // n0x10f0 c0x0000 (---------------) + I contemporaryart
- 0x00238147, // n0x10f1 c0x0000 (---------------) + I convent
- 0x0023a50a, // n0x10f2 c0x0000 (---------------) + I copenhagen
- 0x0023bbcb, // n0x10f3 c0x0000 (---------------) + I corporation
- 0x0023be88, // n0x10f4 c0x0000 (---------------) + I corvette
- 0x0023d1c7, // n0x10f5 c0x0000 (---------------) + I costume
- 0x0028494d, // n0x10f6 c0x0000 (---------------) + I countryestate
- 0x00315686, // n0x10f7 c0x0000 (---------------) + I county
- 0x00218286, // n0x10f8 c0x0000 (---------------) + I crafts
- 0x0023dfc9, // n0x10f9 c0x0000 (---------------) + I cranbrook
- 0x00227808, // n0x10fa c0x0000 (---------------) + I creation
- 0x00240d88, // n0x10fb c0x0000 (---------------) + I cultural
- 0x00240d8e, // n0x10fc c0x0000 (---------------) + I culturalcenter
- 0x0029a6c7, // n0x10fd c0x0000 (---------------) + I culture
- 0x0020c205, // n0x10fe c0x0000 (---------------) + I cyber
- 0x002cfc85, // n0x10ff c0x0000 (---------------) + I cymru
- 0x00202044, // n0x1100 c0x0000 (---------------) + I dali
- 0x002a4406, // n0x1101 c0x0000 (---------------) + I dallas
- 0x002a7708, // n0x1102 c0x0000 (---------------) + I database
- 0x00343183, // n0x1103 c0x0000 (---------------) + I ddr
- 0x0031830e, // n0x1104 c0x0000 (---------------) + I decorativearts
- 0x002c0008, // n0x1105 c0x0000 (---------------) + I delaware
- 0x002d678b, // n0x1106 c0x0000 (---------------) + I delmenhorst
- 0x0035a287, // n0x1107 c0x0000 (---------------) + I denmark
- 0x00369785, // n0x1108 c0x0000 (---------------) + I depot
- 0x00255d86, // n0x1109 c0x0000 (---------------) + I design
- 0x002a7ec7, // n0x110a c0x0000 (---------------) + I detroit
- 0x003340c8, // n0x110b c0x0000 (---------------) + I dinosaur
- 0x00315949, // n0x110c c0x0000 (---------------) + I discovery
- 0x00215345, // n0x110d c0x0000 (---------------) + I dolls
- 0x00280a88, // n0x110e c0x0000 (---------------) + I donostia
- 0x00202fc6, // n0x110f c0x0000 (---------------) + I durham
- 0x0028440a, // n0x1110 c0x0000 (---------------) + I eastafrica
- 0x003334c9, // n0x1111 c0x0000 (---------------) + I eastcoast
- 0x0027a649, // n0x1112 c0x0000 (---------------) + I education
- 0x0027a64b, // n0x1113 c0x0000 (---------------) + I educational
- 0x002a6388, // n0x1114 c0x0000 (---------------) + I egyptian
- 0x002e7d09, // n0x1115 c0x0000 (---------------) + I eisenbahn
- 0x002116c6, // n0x1116 c0x0000 (---------------) + I elburg
- 0x0036d4ca, // n0x1117 c0x0000 (---------------) + I elvendrell
- 0x002067ca, // n0x1118 c0x0000 (---------------) + I embroidery
- 0x0023a70c, // n0x1119 c0x0000 (---------------) + I encyclopedic
- 0x002807c7, // n0x111a c0x0000 (---------------) + I england
- 0x0032c2ca, // n0x111b c0x0000 (---------------) + I entomology
- 0x0020ea0b, // n0x111c c0x0000 (---------------) + I environment
- 0x0020ea19, // n0x111d c0x0000 (---------------) + I environmentalconservation
- 0x00216148, // n0x111e c0x0000 (---------------) + I epilepsy
- 0x00248845, // n0x111f c0x0000 (---------------) + I essex
- 0x00284b06, // n0x1120 c0x0000 (---------------) + I estate
- 0x00317a09, // n0x1121 c0x0000 (---------------) + I ethnology
- 0x003063c6, // n0x1122 c0x0000 (---------------) + I exeter
- 0x0022b18a, // n0x1123 c0x0000 (---------------) + I exhibition
- 0x00325d06, // n0x1124 c0x0000 (---------------) + I family
- 0x00317f84, // n0x1125 c0x0000 (---------------) + I farm
- 0x00356e0d, // n0x1126 c0x0000 (---------------) + I farmequipment
- 0x00317f87, // n0x1127 c0x0000 (---------------) + I farmers
- 0x00366949, // n0x1128 c0x0000 (---------------) + I farmstead
- 0x00242205, // n0x1129 c0x0000 (---------------) + I field
- 0x00242348, // n0x112a c0x0000 (---------------) + I figueres
- 0x00242a89, // n0x112b c0x0000 (---------------) + I filatelia
- 0x00242cc4, // n0x112c c0x0000 (---------------) + I film
- 0x00244107, // n0x112d c0x0000 (---------------) + I fineart
- 0x00244108, // n0x112e c0x0000 (---------------) + I finearts
- 0x002443c7, // n0x112f c0x0000 (---------------) + I finland
- 0x0033e2c8, // n0x1130 c0x0000 (---------------) + I flanders
- 0x0024c787, // n0x1131 c0x0000 (---------------) + I florida
- 0x0024ce85, // n0x1132 c0x0000 (---------------) + I force
- 0x0025654c, // n0x1133 c0x0000 (---------------) + I fortmissoula
- 0x00257849, // n0x1134 c0x0000 (---------------) + I fortworth
- 0x0031f98a, // n0x1135 c0x0000 (---------------) + I foundation
- 0x00356049, // n0x1136 c0x0000 (---------------) + I francaise
- 0x002ec889, // n0x1137 c0x0000 (---------------) + I frankfurt
- 0x0033db8c, // n0x1138 c0x0000 (---------------) + I franziskaner
- 0x0021244b, // n0x1139 c0x0000 (---------------) + I freemasonry
- 0x002593c8, // n0x113a c0x0000 (---------------) + I freiburg
- 0x00259b88, // n0x113b c0x0000 (---------------) + I fribourg
- 0x0025da04, // n0x113c c0x0000 (---------------) + I frog
- 0x0027eb88, // n0x113d c0x0000 (---------------) + I fundacio
- 0x0027f6c9, // n0x113e c0x0000 (---------------) + I furniture
- 0x00236f07, // n0x113f c0x0000 (---------------) + I gallery
- 0x00203ac6, // n0x1140 c0x0000 (---------------) + I garden
- 0x002314c7, // n0x1141 c0x0000 (---------------) + I gateway
- 0x00315bc9, // n0x1142 c0x0000 (---------------) + I geelvinck
- 0x00313d8b, // n0x1143 c0x0000 (---------------) + I gemological
- 0x00319187, // n0x1144 c0x0000 (---------------) + I geology
- 0x0021f547, // n0x1145 c0x0000 (---------------) + I georgia
- 0x00280687, // n0x1146 c0x0000 (---------------) + I giessen
- 0x0020cb44, // n0x1147 c0x0000 (---------------) + I glas
- 0x0020cb45, // n0x1148 c0x0000 (---------------) + I glass
- 0x00246245, // n0x1149 c0x0000 (---------------) + I gorge
- 0x0031b38b, // n0x114a c0x0000 (---------------) + I grandrapids
- 0x0035c244, // n0x114b c0x0000 (---------------) + I graz
- 0x00243d48, // n0x114c c0x0000 (---------------) + I guernsey
- 0x002a6d4a, // n0x114d c0x0000 (---------------) + I halloffame
- 0x00203087, // n0x114e c0x0000 (---------------) + I hamburg
- 0x00285a87, // n0x114f c0x0000 (---------------) + I handson
- 0x00288252, // n0x1150 c0x0000 (---------------) + I harvestcelebration
- 0x0028b446, // n0x1151 c0x0000 (---------------) + I hawaii
- 0x00360806, // n0x1152 c0x0000 (---------------) + I health
- 0x0030248e, // n0x1153 c0x0000 (---------------) + I heimatunduhren
- 0x002ebf86, // n0x1154 c0x0000 (---------------) + I hellas
- 0x002131c8, // n0x1155 c0x0000 (---------------) + I helsinki
- 0x0024ef4f, // n0x1156 c0x0000 (---------------) + I hembygdsforbund
- 0x0020cf88, // n0x1157 c0x0000 (---------------) + I heritage
- 0x0026dbc8, // n0x1158 c0x0000 (---------------) + I histoire
- 0x002e4bca, // n0x1159 c0x0000 (---------------) + I historical
- 0x002e4bd1, // n0x115a c0x0000 (---------------) + I historicalsociety
- 0x0029c84e, // n0x115b c0x0000 (---------------) + I historichouses
- 0x0025250a, // n0x115c c0x0000 (---------------) + I historisch
- 0x0025250c, // n0x115d c0x0000 (---------------) + I historisches
- 0x00233dc7, // n0x115e c0x0000 (---------------) + I history
- 0x00233dd0, // n0x115f c0x0000 (---------------) + I historyofscience
- 0x00200b88, // n0x1160 c0x0000 (---------------) + I horology
- 0x00227d05, // n0x1161 c0x0000 (---------------) + I house
- 0x002a814a, // n0x1162 c0x0000 (---------------) + I humanities
- 0x0020540c, // n0x1163 c0x0000 (---------------) + I illustration
- 0x002d9a4d, // n0x1164 c0x0000 (---------------) + I imageandsound
- 0x00214b06, // n0x1165 c0x0000 (---------------) + I indian
- 0x00214b07, // n0x1166 c0x0000 (---------------) + I indiana
- 0x00214b0c, // n0x1167 c0x0000 (---------------) + I indianapolis
- 0x0021794c, // n0x1168 c0x0000 (---------------) + I indianmarket
- 0x00223a8c, // n0x1169 c0x0000 (---------------) + I intelligence
- 0x002df74b, // n0x116a c0x0000 (---------------) + I interactive
- 0x00280004, // n0x116b c0x0000 (---------------) + I iraq
- 0x0020eac4, // n0x116c c0x0000 (---------------) + I iron
- 0x00330b49, // n0x116d c0x0000 (---------------) + I isleofman
- 0x00303887, // n0x116e c0x0000 (---------------) + I jamison
- 0x0024d749, // n0x116f c0x0000 (---------------) + I jefferson
- 0x00273b49, // n0x1170 c0x0000 (---------------) + I jerusalem
- 0x00331fc7, // n0x1171 c0x0000 (---------------) + I jewelry
- 0x00336806, // n0x1172 c0x0000 (---------------) + I jewish
- 0x00336809, // n0x1173 c0x0000 (---------------) + I jewishart
- 0x0036c0c3, // n0x1174 c0x0000 (---------------) + I jfk
- 0x002481ca, // n0x1175 c0x0000 (---------------) + I journalism
- 0x0036af87, // n0x1176 c0x0000 (---------------) + I judaica
- 0x0031264b, // n0x1177 c0x0000 (---------------) + I judygarland
- 0x00346c4a, // n0x1178 c0x0000 (---------------) + I juedisches
- 0x00253884, // n0x1179 c0x0000 (---------------) + I juif
- 0x00332cc6, // n0x117a c0x0000 (---------------) + I karate
- 0x002be409, // n0x117b c0x0000 (---------------) + I karikatur
- 0x002a67c4, // n0x117c c0x0000 (---------------) + I kids
- 0x0020fd4a, // n0x117d c0x0000 (---------------) + I koebenhavn
- 0x0024c305, // n0x117e c0x0000 (---------------) + I koeln
- 0x002b2985, // n0x117f c0x0000 (---------------) + I kunst
- 0x002b298d, // n0x1180 c0x0000 (---------------) + I kunstsammlung
- 0x002b2cce, // n0x1181 c0x0000 (---------------) + I kunstunddesign
- 0x00306f05, // n0x1182 c0x0000 (---------------) + I labor
- 0x0035bb86, // n0x1183 c0x0000 (---------------) + I labour
- 0x00266947, // n0x1184 c0x0000 (---------------) + I lajolla
- 0x0025474a, // n0x1185 c0x0000 (---------------) + I lancashire
- 0x00361946, // n0x1186 c0x0000 (---------------) + I landes
- 0x00286784, // n0x1187 c0x0000 (---------------) + I lans
- 0x002e1787, // n0x1188 c0x0000 (---------------) + I larsson
- 0x002ea2cb, // n0x1189 c0x0000 (---------------) + I lewismiller
- 0x0035e287, // n0x118a c0x0000 (---------------) + I lincoln
- 0x00366d44, // n0x118b c0x0000 (---------------) + I linz
- 0x0029e246, // n0x118c c0x0000 (---------------) + I living
- 0x0029e24d, // n0x118d c0x0000 (---------------) + I livinghistory
- 0x0025624c, // n0x118e c0x0000 (---------------) + I localhistory
- 0x00207ac6, // n0x118f c0x0000 (---------------) + I london
- 0x0021d94a, // n0x1190 c0x0000 (---------------) + I losangeles
- 0x00222e46, // n0x1191 c0x0000 (---------------) + I louvre
- 0x0030ef88, // n0x1192 c0x0000 (---------------) + I loyalist
- 0x002f1407, // n0x1193 c0x0000 (---------------) + I lucerne
- 0x002363ca, // n0x1194 c0x0000 (---------------) + I luxembourg
- 0x0023f7c6, // n0x1195 c0x0000 (---------------) + I luzern
- 0x0020d983, // n0x1196 c0x0000 (---------------) + I mad
- 0x00308e86, // n0x1197 c0x0000 (---------------) + I madrid
- 0x002a0808, // n0x1198 c0x0000 (---------------) + I mallorca
- 0x00330cca, // n0x1199 c0x0000 (---------------) + I manchester
- 0x00275387, // n0x119a c0x0000 (---------------) + I mansion
- 0x00275388, // n0x119b c0x0000 (---------------) + I mansions
- 0x0027d604, // n0x119c c0x0000 (---------------) + I manx
- 0x0026a007, // n0x119d c0x0000 (---------------) + I marburg
- 0x00262748, // n0x119e c0x0000 (---------------) + I maritime
- 0x00352148, // n0x119f c0x0000 (---------------) + I maritimo
- 0x002a8d08, // n0x11a0 c0x0000 (---------------) + I maryland
- 0x0020aa4a, // n0x11a1 c0x0000 (---------------) + I marylhurst
- 0x0027ab45, // n0x11a2 c0x0000 (---------------) + I media
- 0x002f1287, // n0x11a3 c0x0000 (---------------) + I medical
- 0x00252353, // n0x11a4 c0x0000 (---------------) + I medizinhistorisches
- 0x00267786, // n0x11a5 c0x0000 (---------------) + I meeres
- 0x00242d88, // n0x11a6 c0x0000 (---------------) + I memorial
- 0x002fa609, // n0x11a7 c0x0000 (---------------) + I mesaverde
- 0x00226188, // n0x11a8 c0x0000 (---------------) + I michigan
- 0x00265c8b, // n0x11a9 c0x0000 (---------------) + I midatlantic
- 0x00343e88, // n0x11aa c0x0000 (---------------) + I military
- 0x0023f704, // n0x11ab c0x0000 (---------------) + I mill
- 0x0035ea06, // n0x11ac c0x0000 (---------------) + I miners
- 0x002cc806, // n0x11ad c0x0000 (---------------) + I mining
- 0x002d1849, // n0x11ae c0x0000 (---------------) + I minnesota
- 0x002bbd47, // n0x11af c0x0000 (---------------) + I missile
- 0x00256648, // n0x11b0 c0x0000 (---------------) + I missoula
- 0x00286346, // n0x11b1 c0x0000 (---------------) + I modern
- 0x002e6b84, // n0x11b2 c0x0000 (---------------) + I moma
- 0x002c2a45, // n0x11b3 c0x0000 (---------------) + I money
- 0x002bec48, // n0x11b4 c0x0000 (---------------) + I monmouth
- 0x002bf38a, // n0x11b5 c0x0000 (---------------) + I monticello
- 0x002bfc08, // n0x11b6 c0x0000 (---------------) + I montreal
- 0x002c3106, // n0x11b7 c0x0000 (---------------) + I moscow
- 0x00294a4a, // n0x11b8 c0x0000 (---------------) + I motorcycle
- 0x00319b48, // n0x11b9 c0x0000 (---------------) + I muenchen
- 0x002c5888, // n0x11ba c0x0000 (---------------) + I muenster
- 0x002c7ac8, // n0x11bb c0x0000 (---------------) + I mulhouse
- 0x002c8d86, // n0x11bc c0x0000 (---------------) + I muncie
- 0x002cab06, // n0x11bd c0x0000 (---------------) + I museet
- 0x002e828c, // n0x11be c0x0000 (---------------) + I museumcenter
- 0x002cb0d0, // n0x11bf c0x0000 (---------------) + I museumvereniging
- 0x002a91c5, // n0x11c0 c0x0000 (---------------) + I music
- 0x0020cd88, // n0x11c1 c0x0000 (---------------) + I national
- 0x002251d0, // n0x11c2 c0x0000 (---------------) + I nationalfirearms
- 0x0020cd90, // n0x11c3 c0x0000 (---------------) + I nationalheritage
- 0x002c6e8e, // n0x11c4 c0x0000 (---------------) + I nativeamerican
- 0x002e7f0e, // n0x11c5 c0x0000 (---------------) + I naturalhistory
- 0x002e7f14, // n0x11c6 c0x0000 (---------------) + I naturalhistorymuseum
- 0x0036e38f, // n0x11c7 c0x0000 (---------------) + I naturalsciences
- 0x0036e746, // n0x11c8 c0x0000 (---------------) + I nature
- 0x00327f51, // n0x11c9 c0x0000 (---------------) + I naturhistorisches
- 0x0030e713, // n0x11ca c0x0000 (---------------) + I natuurwetenschappen
- 0x0030eb88, // n0x11cb c0x0000 (---------------) + I naumburg
- 0x003682c5, // n0x11cc c0x0000 (---------------) + I naval
- 0x0030ad08, // n0x11cd c0x0000 (---------------) + I nebraska
- 0x0025e705, // n0x11ce c0x0000 (---------------) + I neues
- 0x0022750c, // n0x11cf c0x0000 (---------------) + I newhampshire
- 0x002abcc9, // n0x11d0 c0x0000 (---------------) + I newjersey
- 0x0029fbc9, // n0x11d1 c0x0000 (---------------) + I newmexico
- 0x00231247, // n0x11d2 c0x0000 (---------------) + I newport
- 0x0023fc09, // n0x11d3 c0x0000 (---------------) + I newspaper
- 0x0020b807, // n0x11d4 c0x0000 (---------------) + I newyork
- 0x002e6446, // n0x11d5 c0x0000 (---------------) + I niepce
- 0x00239f87, // n0x11d6 c0x0000 (---------------) + I norfolk
- 0x002f0f85, // n0x11d7 c0x0000 (---------------) + I north
- 0x00323643, // n0x11d8 c0x0000 (---------------) + I nrw
- 0x00343349, // n0x11d9 c0x0000 (---------------) + I nuernberg
- 0x00322249, // n0x11da c0x0000 (---------------) + I nuremberg
- 0x00215183, // n0x11db c0x0000 (---------------) + I nyc
- 0x0027a004, // n0x11dc c0x0000 (---------------) + I nyny
- 0x00205a4d, // n0x11dd c0x0000 (---------------) + I oceanographic
- 0x0020644f, // n0x11de c0x0000 (---------------) + I oceanographique
- 0x002feec5, // n0x11df c0x0000 (---------------) + I omaha
- 0x0030ac06, // n0x11e0 c0x0000 (---------------) + I online
- 0x00230247, // n0x11e1 c0x0000 (---------------) + I ontario
- 0x00310287, // n0x11e2 c0x0000 (---------------) + I openair
- 0x00282406, // n0x11e3 c0x0000 (---------------) + I oregon
- 0x0028240b, // n0x11e4 c0x0000 (---------------) + I oregontrail
- 0x0029da85, // n0x11e5 c0x0000 (---------------) + I otago
- 0x00366086, // n0x11e6 c0x0000 (---------------) + I oxford
- 0x0026cdc7, // n0x11e7 c0x0000 (---------------) + I pacific
- 0x00236909, // n0x11e8 c0x0000 (---------------) + I paderborn
- 0x002e8946, // n0x11e9 c0x0000 (---------------) + I palace
- 0x00360b85, // n0x11ea c0x0000 (---------------) + I paleo
- 0x00369acb, // n0x11eb c0x0000 (---------------) + I palmsprings
- 0x002001c6, // n0x11ec c0x0000 (---------------) + I panama
- 0x0024dcc5, // n0x11ed c0x0000 (---------------) + I paris
- 0x00287848, // n0x11ee c0x0000 (---------------) + I pasadena
- 0x002cfb08, // n0x11ef c0x0000 (---------------) + I pharmacy
- 0x002cc98c, // n0x11f0 c0x0000 (---------------) + I philadelphia
- 0x002cc990, // n0x11f1 c0x0000 (---------------) + I philadelphiaarea
- 0x002cd049, // n0x11f2 c0x0000 (---------------) + I philately
- 0x002cd287, // n0x11f3 c0x0000 (---------------) + I phoenix
- 0x002ce1cb, // n0x11f4 c0x0000 (---------------) + I photography
- 0x002cf086, // n0x11f5 c0x0000 (---------------) + I pilots
- 0x002d030a, // n0x11f6 c0x0000 (---------------) + I pittsburgh
- 0x002d15cb, // n0x11f7 c0x0000 (---------------) + I planetarium
- 0x002d1e8a, // n0x11f8 c0x0000 (---------------) + I plantation
- 0x002d2106, // n0x11f9 c0x0000 (---------------) + I plants
- 0x002d2905, // n0x11fa c0x0000 (---------------) + I plaza
- 0x00312386, // n0x11fb c0x0000 (---------------) + I portal
- 0x00352708, // n0x11fc c0x0000 (---------------) + I portland
- 0x0023130a, // n0x11fd c0x0000 (---------------) + I portlligat
- 0x002d6fdc, // n0x11fe c0x0000 (---------------) + I posts-and-telecommunications
- 0x002d7bcc, // n0x11ff c0x0000 (---------------) + I preservation
- 0x002d7ec8, // n0x1200 c0x0000 (---------------) + I presidio
- 0x002487c5, // n0x1201 c0x0000 (---------------) + I press
- 0x002da787, // n0x1202 c0x0000 (---------------) + I project
- 0x002aa586, // n0x1203 c0x0000 (---------------) + I public
- 0x00200f45, // n0x1204 c0x0000 (---------------) + I pubol
- 0x00215b86, // n0x1205 c0x0000 (---------------) + I quebec
- 0x002825c8, // n0x1206 c0x0000 (---------------) + I railroad
- 0x0034e887, // n0x1207 c0x0000 (---------------) + I railway
- 0x002aa848, // n0x1208 c0x0000 (---------------) + I research
- 0x002d930a, // n0x1209 c0x0000 (---------------) + I resistance
- 0x0023034c, // n0x120a c0x0000 (---------------) + I riodejaneiro
- 0x0022d189, // n0x120b c0x0000 (---------------) + I rochester
- 0x00201287, // n0x120c c0x0000 (---------------) + I rockart
- 0x00247304, // n0x120d c0x0000 (---------------) + I roma
- 0x00259246, // n0x120e c0x0000 (---------------) + I russia
- 0x002f474a, // n0x120f c0x0000 (---------------) + I saintlouis
- 0x00273c45, // n0x1210 c0x0000 (---------------) + I salem
- 0x0022558c, // n0x1211 c0x0000 (---------------) + I salvadordali
- 0x00225e08, // n0x1212 c0x0000 (---------------) + I salzburg
- 0x00347488, // n0x1213 c0x0000 (---------------) + I sandiego
- 0x0024e60c, // n0x1214 c0x0000 (---------------) + I sanfrancisco
- 0x002a0fcc, // n0x1215 c0x0000 (---------------) + I santabarbara
- 0x0022c489, // n0x1216 c0x0000 (---------------) + I santacruz
- 0x0022e287, // n0x1217 c0x0000 (---------------) + I santafe
- 0x0025858c, // n0x1218 c0x0000 (---------------) + I saskatchewan
- 0x0025db84, // n0x1219 c0x0000 (---------------) + I satx
- 0x002689ca, // n0x121a c0x0000 (---------------) + I savannahga
- 0x0026e40c, // n0x121b c0x0000 (---------------) + I schlesisches
- 0x002814cb, // n0x121c c0x0000 (---------------) + I schoenbrunn
- 0x002bf0cb, // n0x121d c0x0000 (---------------) + I schokoladen
- 0x002ffb06, // n0x121e c0x0000 (---------------) + I school
- 0x00286847, // n0x121f c0x0000 (---------------) + I schweiz
- 0x00234007, // n0x1220 c0x0000 (---------------) + I science
- 0x0023400f, // n0x1221 c0x0000 (---------------) + I science-fiction
- 0x002eded1, // n0x1222 c0x0000 (---------------) + I scienceandhistory
- 0x002734d2, // n0x1223 c0x0000 (---------------) + I scienceandindustry
- 0x0028970d, // n0x1224 c0x0000 (---------------) + I sciencecenter
- 0x0028970e, // n0x1225 c0x0000 (---------------) + I sciencecenters
- 0x00289a4e, // n0x1226 c0x0000 (---------------) + I sciencehistory
- 0x0036e548, // n0x1227 c0x0000 (---------------) + I sciences
- 0x0036e552, // n0x1228 c0x0000 (---------------) + I sciencesnaturelles
- 0x0024e848, // n0x1229 c0x0000 (---------------) + I scotland
- 0x002f9687, // n0x122a c0x0000 (---------------) + I seaport
- 0x0024908a, // n0x122b c0x0000 (---------------) + I settlement
- 0x002a0e08, // n0x122c c0x0000 (---------------) + I settlers
- 0x002ebf45, // n0x122d c0x0000 (---------------) + I shell
- 0x002f5a8a, // n0x122e c0x0000 (---------------) + I sherbrooke
- 0x00204707, // n0x122f c0x0000 (---------------) + I sibenik
- 0x002eeb44, // n0x1230 c0x0000 (---------------) + I silk
- 0x0021a9c3, // n0x1231 c0x0000 (---------------) + I ski
- 0x0024d1c5, // n0x1232 c0x0000 (---------------) + I skole
- 0x002e4e47, // n0x1233 c0x0000 (---------------) + I society
- 0x002e1947, // n0x1234 c0x0000 (---------------) + I sologne
- 0x002d9c4e, // n0x1235 c0x0000 (---------------) + I soundandvision
- 0x002e518d, // n0x1236 c0x0000 (---------------) + I southcarolina
- 0x002e55c9, // n0x1237 c0x0000 (---------------) + I southwest
- 0x002e5c85, // n0x1238 c0x0000 (---------------) + I space
- 0x002e9343, // n0x1239 c0x0000 (---------------) + I spy
- 0x0025e806, // n0x123a c0x0000 (---------------) + I square
- 0x002638c5, // n0x123b c0x0000 (---------------) + I stadt
- 0x002d69c8, // n0x123c c0x0000 (---------------) + I stalbans
- 0x002d3ac9, // n0x123d c0x0000 (---------------) + I starnberg
- 0x00284b45, // n0x123e c0x0000 (---------------) + I state
- 0x002bfe4f, // n0x123f c0x0000 (---------------) + I stateofdelaware
- 0x002f0787, // n0x1240 c0x0000 (---------------) + I station
- 0x0021b105, // n0x1241 c0x0000 (---------------) + I steam
- 0x002feb4a, // n0x1242 c0x0000 (---------------) + I steiermark
- 0x002bcbc6, // n0x1243 c0x0000 (---------------) + I stjohn
- 0x0020ac49, // n0x1244 c0x0000 (---------------) + I stockholm
- 0x002e9d4c, // n0x1245 c0x0000 (---------------) + I stpetersburg
- 0x002ea589, // n0x1246 c0x0000 (---------------) + I stuttgart
- 0x00216c06, // n0x1247 c0x0000 (---------------) + I suisse
- 0x002a6b4c, // n0x1248 c0x0000 (---------------) + I surgeonshall
- 0x002eab06, // n0x1249 c0x0000 (---------------) + I surrey
- 0x002ed3c8, // n0x124a c0x0000 (---------------) + I svizzera
- 0x002d6b86, // n0x124b c0x0000 (---------------) + I sweden
- 0x00263106, // n0x124c c0x0000 (---------------) + I sydney
- 0x002dcb44, // n0x124d c0x0000 (---------------) + I tank
- 0x0025fe83, // n0x124e c0x0000 (---------------) + I tcm
- 0x00301d8a, // n0x124f c0x0000 (---------------) + I technology
- 0x0024ab11, // n0x1250 c0x0000 (---------------) + I telekommunikation
- 0x00238cca, // n0x1251 c0x0000 (---------------) + I television
- 0x0023e645, // n0x1252 c0x0000 (---------------) + I texas
- 0x00267107, // n0x1253 c0x0000 (---------------) + I textile
- 0x002e7907, // n0x1254 c0x0000 (---------------) + I theater
- 0x00262844, // n0x1255 c0x0000 (---------------) + I time
- 0x0026284b, // n0x1256 c0x0000 (---------------) + I timekeeping
- 0x002997c8, // n0x1257 c0x0000 (---------------) + I topology
- 0x002afbc6, // n0x1258 c0x0000 (---------------) + I torino
- 0x0022e985, // n0x1259 c0x0000 (---------------) + I touch
- 0x002ed844, // n0x125a c0x0000 (---------------) + I town
- 0x00293ac9, // n0x125b c0x0000 (---------------) + I transport
- 0x002a8044, // n0x125c c0x0000 (---------------) + I tree
- 0x0027fd07, // n0x125d c0x0000 (---------------) + I trolley
- 0x002ee8c5, // n0x125e c0x0000 (---------------) + I trust
- 0x002ee8c7, // n0x125f c0x0000 (---------------) + I trustee
- 0x003026c5, // n0x1260 c0x0000 (---------------) + I uhren
- 0x00207343, // n0x1261 c0x0000 (---------------) + I ulm
- 0x002f9548, // n0x1262 c0x0000 (---------------) + I undersea
- 0x003688ca, // n0x1263 c0x0000 (---------------) + I university
- 0x00220203, // n0x1264 c0x0000 (---------------) + I usa
- 0x0023270a, // n0x1265 c0x0000 (---------------) + I usantiques
- 0x0036b746, // n0x1266 c0x0000 (---------------) + I usarts
- 0x002848cf, // n0x1267 c0x0000 (---------------) + I uscountryestate
- 0x0034f9c9, // n0x1268 c0x0000 (---------------) + I usculture
- 0x00318290, // n0x1269 c0x0000 (---------------) + I usdecorativearts
- 0x00242888, // n0x126a c0x0000 (---------------) + I usgarden
- 0x002c3409, // n0x126b c0x0000 (---------------) + I ushistory
- 0x002134c7, // n0x126c c0x0000 (---------------) + I ushuaia
- 0x0029e1cf, // n0x126d c0x0000 (---------------) + I uslivinghistory
- 0x00375044, // n0x126e c0x0000 (---------------) + I utah
- 0x00369004, // n0x126f c0x0000 (---------------) + I uvic
- 0x00216a46, // n0x1270 c0x0000 (---------------) + I valley
- 0x002d3f46, // n0x1271 c0x0000 (---------------) + I vantaa
- 0x002f2a8a, // n0x1272 c0x0000 (---------------) + I versailles
- 0x0027c406, // n0x1273 c0x0000 (---------------) + I viking
- 0x0030c487, // n0x1274 c0x0000 (---------------) + I village
- 0x002f7788, // n0x1275 c0x0000 (---------------) + I virginia
- 0x002f7987, // n0x1276 c0x0000 (---------------) + I virtual
- 0x002f7b47, // n0x1277 c0x0000 (---------------) + I virtuel
- 0x0032b58a, // n0x1278 c0x0000 (---------------) + I vlaanderen
- 0x002f938b, // n0x1279 c0x0000 (---------------) + I volkenkunde
- 0x002d0105, // n0x127a c0x0000 (---------------) + I wales
- 0x00273108, // n0x127b c0x0000 (---------------) + I wallonie
- 0x00202383, // n0x127c c0x0000 (---------------) + I war
- 0x003459cc, // n0x127d c0x0000 (---------------) + I washingtondc
- 0x0020054f, // n0x127e c0x0000 (---------------) + I watch-and-clock
- 0x0028c68d, // n0x127f c0x0000 (---------------) + I watchandclock
- 0x002e5707, // n0x1280 c0x0000 (---------------) + I western
- 0x00209089, // n0x1281 c0x0000 (---------------) + I westfalen
- 0x0021e247, // n0x1282 c0x0000 (---------------) + I whaling
- 0x003236c8, // n0x1283 c0x0000 (---------------) + I wildlife
- 0x0023188c, // n0x1284 c0x0000 (---------------) + I williamsburg
- 0x0023f608, // n0x1285 c0x0000 (---------------) + I windmill
- 0x0024f488, // n0x1286 c0x0000 (---------------) + I workshop
- 0x002ffe0e, // n0x1287 c0x0000 (---------------) + I xn--9dbhblg6di
- 0x0030d3d4, // n0x1288 c0x0000 (---------------) + I xn--comunicaes-v6a2o
- 0x0030d8e4, // n0x1289 c0x0000 (---------------) + I xn--correios-e-telecomunicaes-ghc29a
- 0x00325e8a, // n0x128a c0x0000 (---------------) + I xn--h1aegh
- 0x00337b8b, // n0x128b c0x0000 (---------------) + I xn--lns-qla
- 0x0020b8c4, // n0x128c c0x0000 (---------------) + I york
- 0x0020b8c9, // n0x128d c0x0000 (---------------) + I yorkshire
- 0x002cdfc8, // n0x128e c0x0000 (---------------) + I yosemite
- 0x00342085, // n0x128f c0x0000 (---------------) + I youth
- 0x0036a64a, // n0x1290 c0x0000 (---------------) + I zoological
- 0x0025e9c7, // n0x1291 c0x0000 (---------------) + I zoology
- 0x0027a1c4, // n0x1292 c0x0000 (---------------) + I aero
- 0x00314c43, // n0x1293 c0x0000 (---------------) + I biz
- 0x00222603, // n0x1294 c0x0000 (---------------) + I com
- 0x00239dc4, // n0x1295 c0x0000 (---------------) + I coop
- 0x0027a643, // n0x1296 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1297 c0x0000 (---------------) + I gov
- 0x0021c704, // n0x1298 c0x0000 (---------------) + I info
- 0x00223a83, // n0x1299 c0x0000 (---------------) + I int
- 0x0023f703, // n0x129a c0x0000 (---------------) + I mil
- 0x002cb0c6, // n0x129b c0x0000 (---------------) + I museum
- 0x0022aec4, // n0x129c c0x0000 (---------------) + I name
- 0x00201603, // n0x129d c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x129e c0x0000 (---------------) + I org
- 0x002d8443, // n0x129f c0x0000 (---------------) + I pro
- 0x00201d82, // n0x12a0 c0x0000 (---------------) + I ac
- 0x00314c43, // n0x12a1 c0x0000 (---------------) + I biz
- 0x00207a02, // n0x12a2 c0x0000 (---------------) + I co
- 0x00222603, // n0x12a3 c0x0000 (---------------) + I com
- 0x00239dc4, // n0x12a4 c0x0000 (---------------) + I coop
- 0x0027a643, // n0x12a5 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x12a6 c0x0000 (---------------) + I gov
- 0x00223a83, // n0x12a7 c0x0000 (---------------) + I int
- 0x002cb0c6, // n0x12a8 c0x0000 (---------------) + I museum
- 0x00201603, // n0x12a9 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x12aa c0x0000 (---------------) + I org
- 0x000b8948, // n0x12ab c0x0000 (---------------) + blogspot
- 0x00222603, // n0x12ac c0x0000 (---------------) + I com
- 0x0027a643, // n0x12ad c0x0000 (---------------) + I edu
- 0x0020dbc3, // n0x12ae c0x0000 (---------------) + I gob
- 0x00201603, // n0x12af c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x12b0 c0x0000 (---------------) + I org
- 0x00222603, // n0x12b1 c0x0000 (---------------) + I com
- 0x0027a643, // n0x12b2 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x12b3 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x12b4 c0x0000 (---------------) + I mil
- 0x0022aec4, // n0x12b5 c0x0000 (---------------) + I name
- 0x00201603, // n0x12b6 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x12b7 c0x0000 (---------------) + I org
- 0x006a7608, // n0x12b8 c0x0001 (---------------) ! I teledata
- 0x0020bc02, // n0x12b9 c0x0000 (---------------) + I ca
- 0x00219f02, // n0x12ba c0x0000 (---------------) + I cc
- 0x00207a02, // n0x12bb c0x0000 (---------------) + I co
- 0x00222603, // n0x12bc c0x0000 (---------------) + I com
- 0x00203982, // n0x12bd c0x0000 (---------------) + I dr
- 0x002015c2, // n0x12be c0x0000 (---------------) + I in
- 0x0021c704, // n0x12bf c0x0000 (---------------) + I info
- 0x0020e884, // n0x12c0 c0x0000 (---------------) + I mobi
- 0x0022ad42, // n0x12c1 c0x0000 (---------------) + I mx
- 0x0022aec4, // n0x12c2 c0x0000 (---------------) + I name
- 0x00200bc2, // n0x12c3 c0x0000 (---------------) + I or
- 0x0021f5c3, // n0x12c4 c0x0000 (---------------) + I org
- 0x002d8443, // n0x12c5 c0x0000 (---------------) + I pro
- 0x002ffb06, // n0x12c6 c0x0000 (---------------) + I school
- 0x00292602, // n0x12c7 c0x0000 (---------------) + I tv
- 0x002054c2, // n0x12c8 c0x0000 (---------------) + I us
- 0x00208182, // n0x12c9 c0x0000 (---------------) + I ws
- 0x3320cf83, // n0x12ca c0x00cc (n0x12cc-n0x12cd) o I her
- 0x33633dc3, // n0x12cb c0x00cd (n0x12cd-n0x12ce) o I his
- 0x00053046, // n0x12cc c0x0000 (---------------) + forgot
- 0x00053046, // n0x12cd c0x0000 (---------------) + forgot
- 0x0029cfc4, // n0x12ce c0x0000 (---------------) + I asso
- 0x0010894c, // n0x12cf c0x0000 (---------------) + at-band-camp
- 0x0006460c, // n0x12d0 c0x0000 (---------------) + azure-mobile
- 0x000bddcd, // n0x12d1 c0x0000 (---------------) + azurewebsites
- 0x00010dc7, // n0x12d2 c0x0000 (---------------) + blogdns
- 0x0001c908, // n0x12d3 c0x0000 (---------------) + broke-it
- 0x00027c0a, // n0x12d4 c0x0000 (---------------) + buyshouses
- 0x00087688, // n0x12d5 c0x0000 (---------------) + cloudapp
- 0x0003008a, // n0x12d6 c0x0000 (---------------) + cloudfront
- 0x00035348, // n0x12d7 c0x0000 (---------------) + dnsalias
- 0x0000b0c7, // n0x12d8 c0x0000 (---------------) + dnsdojo
- 0x0013ec07, // n0x12d9 c0x0000 (---------------) + does-it
- 0x000cd889, // n0x12da c0x0000 (---------------) + dontexist
- 0x0009fe08, // n0x12db c0x0000 (---------------) + dynalias
- 0x0001fd09, // n0x12dc c0x0000 (---------------) + dynathome
- 0x000a71cd, // n0x12dd c0x0000 (---------------) + endofinternet
- 0x342ba8c6, // n0x12de c0x00d0 (n0x12fe-n0x1300) o I fastly
- 0x00060c47, // n0x12df c0x0000 (---------------) + from-az
- 0x00061b47, // n0x12e0 c0x0000 (---------------) + from-co
- 0x00066807, // n0x12e1 c0x0000 (---------------) + from-la
- 0x0006c147, // n0x12e2 c0x0000 (---------------) + from-ny
- 0x0000fb02, // n0x12e3 c0x0000 (---------------) + gb
- 0x00046307, // n0x12e4 c0x0000 (---------------) + gets-it
- 0x0004a68c, // n0x12e5 c0x0000 (---------------) + ham-radio-op
- 0x00019d07, // n0x12e6 c0x0000 (---------------) + homeftp
- 0x000c84c6, // n0x12e7 c0x0000 (---------------) + homeip
- 0x0009f1c9, // n0x12e8 c0x0000 (---------------) + homelinux
- 0x000a1908, // n0x12e9 c0x0000 (---------------) + homeunix
- 0x00001e02, // n0x12ea c0x0000 (---------------) + hu
- 0x000015c2, // n0x12eb c0x0000 (---------------) + in
- 0x0006514b, // n0x12ec c0x0000 (---------------) + in-the-band
- 0x001402c9, // n0x12ed c0x0000 (---------------) + is-a-chef
- 0x00067d49, // n0x12ee c0x0000 (---------------) + is-a-geek
- 0x0014bd08, // n0x12ef c0x0000 (---------------) + isa-geek
- 0x000a9f42, // n0x12f0 c0x0000 (---------------) + jp
- 0x00047a09, // n0x12f1 c0x0000 (---------------) + kicks-ass
- 0x0001ef4d, // n0x12f2 c0x0000 (---------------) + office-on-the
- 0x000d4e47, // n0x12f3 c0x0000 (---------------) + podzone
- 0x00092f4d, // n0x12f4 c0x0000 (---------------) + scrapper-site
- 0x00006d42, // n0x12f5 c0x0000 (---------------) + se
- 0x000ff606, // n0x12f6 c0x0000 (---------------) + selfip
- 0x000b5ac8, // n0x12f7 c0x0000 (---------------) + sells-it
- 0x00016d08, // n0x12f8 c0x0000 (---------------) + servebbs
- 0x0009cb88, // n0x12f9 c0x0000 (---------------) + serveftp
- 0x0004fc08, // n0x12fa c0x0000 (---------------) + thruhere
- 0x00000402, // n0x12fb c0x0000 (---------------) + uk
- 0x0004db86, // n0x12fc c0x0000 (---------------) + webhop
- 0x00003502, // n0x12fd c0x0000 (---------------) + za
- 0x346d86c4, // n0x12fe c0x00d1 (n0x1300-n0x1302) o I prod
- 0x34a8d983, // n0x12ff c0x00d2 (n0x1302-n0x1305) o I ssl
- 0x00000101, // n0x1300 c0x0000 (---------------) + a
- 0x00017cc6, // n0x1301 c0x0000 (---------------) + global
- 0x00000101, // n0x1302 c0x0000 (---------------) + a
- 0x00000001, // n0x1303 c0x0000 (---------------) + b
- 0x00017cc6, // n0x1304 c0x0000 (---------------) + global
- 0x002180c4, // n0x1305 c0x0000 (---------------) + I arts
- 0x00222603, // n0x1306 c0x0000 (---------------) + I com
- 0x00245bc4, // n0x1307 c0x0000 (---------------) + I firm
- 0x0021c704, // n0x1308 c0x0000 (---------------) + I info
- 0x00201603, // n0x1309 c0x0000 (---------------) + I net
- 0x00369845, // n0x130a c0x0000 (---------------) + I other
- 0x00222483, // n0x130b c0x0000 (---------------) + I per
- 0x00227783, // n0x130c c0x0000 (---------------) + I rec
- 0x002e9885, // n0x130d c0x0000 (---------------) + I store
- 0x00205e43, // n0x130e c0x0000 (---------------) + I web
- 0x00222603, // n0x130f c0x0000 (---------------) + I com
- 0x0027a643, // n0x1310 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1311 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x1312 c0x0000 (---------------) + I mil
- 0x0020e884, // n0x1313 c0x0000 (---------------) + I mobi
- 0x0022aec4, // n0x1314 c0x0000 (---------------) + I name
- 0x00201603, // n0x1315 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1316 c0x0000 (---------------) + I org
- 0x002526c3, // n0x1317 c0x0000 (---------------) + I sch
- 0x000b8948, // n0x1318 c0x0000 (---------------) + blogspot
- 0x00228942, // n0x1319 c0x0000 (---------------) + I bv
- 0x00007a02, // n0x131a c0x0000 (---------------) + co
- 0x35e20742, // n0x131b c0x00d7 (n0x15f1-n0x15f2) + I aa
- 0x0036b108, // n0x131c c0x0000 (---------------) + I aarborte
- 0x00220bc6, // n0x131d c0x0000 (---------------) + I aejrie
- 0x0021ec46, // n0x131e c0x0000 (---------------) + I afjord
- 0x00220547, // n0x131f c0x0000 (---------------) + I agdenes
- 0x3620b442, // n0x1320 c0x00d8 (n0x15f2-n0x15f3) + I ah
- 0x36684748, // n0x1321 c0x00d9 (n0x15f3-n0x15f4) o I akershus
- 0x0024774a, // n0x1322 c0x0000 (---------------) + I aknoluokta
- 0x00368108, // n0x1323 c0x0000 (---------------) + I akrehamn
- 0x00202082, // n0x1324 c0x0000 (---------------) + I al
- 0x00312489, // n0x1325 c0x0000 (---------------) + I alaheadju
- 0x002d0147, // n0x1326 c0x0000 (---------------) + I alesund
- 0x00213ec6, // n0x1327 c0x0000 (---------------) + I algard
- 0x00366249, // n0x1328 c0x0000 (---------------) + I alstahaug
- 0x00313fc4, // n0x1329 c0x0000 (---------------) + I alta
- 0x00204fc6, // n0x132a c0x0000 (---------------) + I alvdal
- 0x0021b1c4, // n0x132b c0x0000 (---------------) + I amli
- 0x002070c4, // n0x132c c0x0000 (---------------) + I amot
- 0x00256089, // n0x132d c0x0000 (---------------) + I andasuolo
- 0x00346a06, // n0x132e c0x0000 (---------------) + I andebu
- 0x00372245, // n0x132f c0x0000 (---------------) + I andoy
- 0x0020c845, // n0x1330 c0x0000 (---------------) + I ardal
- 0x002c0147, // n0x1331 c0x0000 (---------------) + I aremark
- 0x0027c1c7, // n0x1332 c0x0000 (---------------) + I arendal
- 0x00287104, // n0x1333 c0x0000 (---------------) + I arna
- 0x00220786, // n0x1334 c0x0000 (---------------) + I aseral
- 0x002f2145, // n0x1335 c0x0000 (---------------) + I asker
- 0x0030f485, // n0x1336 c0x0000 (---------------) + I askim
- 0x002ec085, // n0x1337 c0x0000 (---------------) + I askoy
- 0x002f1dc7, // n0x1338 c0x0000 (---------------) + I askvoll
- 0x0035a0c5, // n0x1339 c0x0000 (---------------) + I asnes
- 0x00232349, // n0x133a c0x0000 (---------------) + I audnedaln
- 0x00316fc5, // n0x133b c0x0000 (---------------) + I aukra
- 0x00334204, // n0x133c c0x0000 (---------------) + I aure
- 0x00361887, // n0x133d c0x0000 (---------------) + I aurland
- 0x0034674e, // n0x133e c0x0000 (---------------) + I aurskog-holand
- 0x0034ca49, // n0x133f c0x0000 (---------------) + I austevoll
- 0x00302349, // n0x1340 c0x0000 (---------------) + I austrheim
- 0x00353206, // n0x1341 c0x0000 (---------------) + I averoy
- 0x00303708, // n0x1342 c0x0000 (---------------) + I badaddja
- 0x0036cd4b, // n0x1343 c0x0000 (---------------) + I bahcavuotna
- 0x00298fcc, // n0x1344 c0x0000 (---------------) + I bahccavuotna
- 0x00266bc6, // n0x1345 c0x0000 (---------------) + I baidar
- 0x002cb987, // n0x1346 c0x0000 (---------------) + I bajddar
- 0x00217d85, // n0x1347 c0x0000 (---------------) + I balat
- 0x0034968a, // n0x1348 c0x0000 (---------------) + I balestrand
- 0x002a7909, // n0x1349 c0x0000 (---------------) + I ballangen
- 0x0036c2c9, // n0x134a c0x0000 (---------------) + I balsfjord
- 0x002f0c86, // n0x134b c0x0000 (---------------) + I bamble
- 0x002ec5c5, // n0x134c c0x0000 (---------------) + I bardu
- 0x0031c405, // n0x134d c0x0000 (---------------) + I barum
- 0x00344889, // n0x134e c0x0000 (---------------) + I batsfjord
- 0x00272a8b, // n0x134f c0x0000 (---------------) + I bearalvahki
- 0x00278ec6, // n0x1350 c0x0000 (---------------) + I beardu
- 0x002a2306, // n0x1351 c0x0000 (---------------) + I beiarn
- 0x0020fa44, // n0x1352 c0x0000 (---------------) + I berg
- 0x00287f06, // n0x1353 c0x0000 (---------------) + I bergen
- 0x0020c288, // n0x1354 c0x0000 (---------------) + I berlevag
- 0x00200006, // n0x1355 c0x0000 (---------------) + I bievat
- 0x002a4346, // n0x1356 c0x0000 (---------------) + I bindal
- 0x00209748, // n0x1357 c0x0000 (---------------) + I birkenes
- 0x0020e2c7, // n0x1358 c0x0000 (---------------) + I bjarkoy
- 0x0020e649, // n0x1359 c0x0000 (---------------) + I bjerkreim
- 0x0020f6c5, // n0x135a c0x0000 (---------------) + I bjugn
- 0x000b8948, // n0x135b c0x0000 (---------------) + blogspot
- 0x0020dc44, // n0x135c c0x0000 (---------------) + I bodo
- 0x0021cdc4, // n0x135d c0x0000 (---------------) + I bokn
- 0x00211a45, // n0x135e c0x0000 (---------------) + I bomlo
- 0x002188c9, // n0x135f c0x0000 (---------------) + I bremanger
- 0x0021d447, // n0x1360 c0x0000 (---------------) + I bronnoy
- 0x0021d44b, // n0x1361 c0x0000 (---------------) + I bronnoysund
- 0x0021f70a, // n0x1362 c0x0000 (---------------) + I brumunddal
- 0x00227445, // n0x1363 c0x0000 (---------------) + I bryne
- 0x36a03142, // n0x1364 c0x00da (n0x15f4-n0x15f5) + I bu
- 0x00346b07, // n0x1365 c0x0000 (---------------) + I budejju
- 0x36eaba88, // n0x1366 c0x00db (n0x15f5-n0x15f6) o I buskerud
- 0x002c5e87, // n0x1367 c0x0000 (---------------) + I bygland
- 0x002c5c85, // n0x1368 c0x0000 (---------------) + I bykle
- 0x0026158a, // n0x1369 c0x0000 (---------------) + I cahcesuolo
- 0x00007a02, // n0x136a c0x0000 (---------------) + co
- 0x0020258b, // n0x136b c0x0000 (---------------) + I davvenjarga
- 0x0028bfca, // n0x136c c0x0000 (---------------) + I davvesiida
- 0x00322146, // n0x136d c0x0000 (---------------) + I deatnu
- 0x00369783, // n0x136e c0x0000 (---------------) + I dep
- 0x0030010d, // n0x136f c0x0000 (---------------) + I dielddanuorri
- 0x0031620c, // n0x1370 c0x0000 (---------------) + I divtasvuodna
- 0x0031690d, // n0x1371 c0x0000 (---------------) + I divttasvuotna
- 0x002a4ec5, // n0x1372 c0x0000 (---------------) + I donna
- 0x0032e2c5, // n0x1373 c0x0000 (---------------) + I dovre
- 0x003431c7, // n0x1374 c0x0000 (---------------) + I drammen
- 0x00366b49, // n0x1375 c0x0000 (---------------) + I drangedal
- 0x00368006, // n0x1376 c0x0000 (---------------) + I drobak
- 0x0026a345, // n0x1377 c0x0000 (---------------) + I dyroy
- 0x00230f08, // n0x1378 c0x0000 (---------------) + I egersund
- 0x00287e03, // n0x1379 c0x0000 (---------------) + I eid
- 0x003268c8, // n0x137a c0x0000 (---------------) + I eidfjord
- 0x00287e08, // n0x137b c0x0000 (---------------) + I eidsberg
- 0x002ba487, // n0x137c c0x0000 (---------------) + I eidskog
- 0x0030b008, // n0x137d c0x0000 (---------------) + I eidsvoll
- 0x00314349, // n0x137e c0x0000 (---------------) + I eigersund
- 0x002dc447, // n0x137f c0x0000 (---------------) + I elverum
- 0x0029a147, // n0x1380 c0x0000 (---------------) + I enebakk
- 0x00204b48, // n0x1381 c0x0000 (---------------) + I engerdal
- 0x0031dbc4, // n0x1382 c0x0000 (---------------) + I etne
- 0x0031dbc7, // n0x1383 c0x0000 (---------------) + I etnedal
- 0x00204508, // n0x1384 c0x0000 (---------------) + I evenassi
- 0x00210106, // n0x1385 c0x0000 (---------------) + I evenes
- 0x002294cf, // n0x1386 c0x0000 (---------------) + I evje-og-hornnes
- 0x00210a87, // n0x1387 c0x0000 (---------------) + I farsund
- 0x002d05c6, // n0x1388 c0x0000 (---------------) + I fauske
- 0x00323845, // n0x1389 c0x0000 (---------------) + I fedje
- 0x00281303, // n0x138a c0x0000 (---------------) + I fet
- 0x0034f487, // n0x138b c0x0000 (---------------) + I fetsund
- 0x00241b03, // n0x138c c0x0000 (---------------) + I fhs
- 0x00244586, // n0x138d c0x0000 (---------------) + I finnoy
- 0x00246706, // n0x138e c0x0000 (---------------) + I fitjar
- 0x00249446, // n0x138f c0x0000 (---------------) + I fjaler
- 0x0028b245, // n0x1390 c0x0000 (---------------) + I fjell
- 0x002637c3, // n0x1391 c0x0000 (---------------) + I fla
- 0x002637c8, // n0x1392 c0x0000 (---------------) + I flakstad
- 0x0034d3c9, // n0x1393 c0x0000 (---------------) + I flatanger
- 0x0024968b, // n0x1394 c0x0000 (---------------) + I flekkefjord
- 0x00249948, // n0x1395 c0x0000 (---------------) + I flesberg
- 0x0024c445, // n0x1396 c0x0000 (---------------) + I flora
- 0x0024d005, // n0x1397 c0x0000 (---------------) + I floro
- 0x37253942, // n0x1398 c0x00dc (n0x15f6-n0x15f7) + I fm
- 0x0023a049, // n0x1399 c0x0000 (---------------) + I folkebibl
- 0x00250f07, // n0x139a c0x0000 (---------------) + I folldal
- 0x00366105, // n0x139b c0x0000 (---------------) + I forde
- 0x00255f87, // n0x139c c0x0000 (---------------) + I forsand
- 0x00258446, // n0x139d c0x0000 (---------------) + I fosnes
- 0x0033b345, // n0x139e c0x0000 (---------------) + I frana
- 0x00258c0b, // n0x139f c0x0000 (---------------) + I fredrikstad
- 0x002593c4, // n0x13a0 c0x0000 (---------------) + I frei
- 0x0025e205, // n0x13a1 c0x0000 (---------------) + I frogn
- 0x0025e347, // n0x13a2 c0x0000 (---------------) + I froland
- 0x00272406, // n0x13a3 c0x0000 (---------------) + I frosta
- 0x00272845, // n0x13a4 c0x0000 (---------------) + I froya
- 0x0027ed87, // n0x13a5 c0x0000 (---------------) + I fuoisku
- 0x0027f147, // n0x13a6 c0x0000 (---------------) + I fuossko
- 0x002a4044, // n0x13a7 c0x0000 (---------------) + I fusa
- 0x002836ca, // n0x13a8 c0x0000 (---------------) + I fylkesbibl
- 0x00283b88, // n0x13a9 c0x0000 (---------------) + I fyresdal
- 0x002769c9, // n0x13aa c0x0000 (---------------) + I gaivuotna
- 0x002027c5, // n0x13ab c0x0000 (---------------) + I galsa
- 0x002191c6, // n0x13ac c0x0000 (---------------) + I gamvik
- 0x0020c44a, // n0x13ad c0x0000 (---------------) + I gangaviika
- 0x0020c746, // n0x13ae c0x0000 (---------------) + I gaular
- 0x00208687, // n0x13af c0x0000 (---------------) + I gausdal
- 0x00299acd, // n0x13b0 c0x0000 (---------------) + I giehtavuoatna
- 0x0023b849, // n0x13b1 c0x0000 (---------------) + I gildeskal
- 0x002ef6c5, // n0x13b2 c0x0000 (---------------) + I giske
- 0x0031e647, // n0x13b3 c0x0000 (---------------) + I gjemnes
- 0x0030ed48, // n0x13b4 c0x0000 (---------------) + I gjerdrum
- 0x00367888, // n0x13b5 c0x0000 (---------------) + I gjerstad
- 0x00201f47, // n0x13b6 c0x0000 (---------------) + I gjesdal
- 0x00203206, // n0x13b7 c0x0000 (---------------) + I gjovik
- 0x0021e3c7, // n0x13b8 c0x0000 (---------------) + I gloppen
- 0x0036c583, // n0x13b9 c0x0000 (---------------) + I gol
- 0x0031b384, // n0x13ba c0x0000 (---------------) + I gran
- 0x00320fc5, // n0x13bb c0x0000 (---------------) + I grane
- 0x00339107, // n0x13bc c0x0000 (---------------) + I granvin
- 0x003552c9, // n0x13bd c0x0000 (---------------) + I gratangen
- 0x0026a188, // n0x13be c0x0000 (---------------) + I grimstad
- 0x0022c1c5, // n0x13bf c0x0000 (---------------) + I grong
- 0x00237cc4, // n0x13c0 c0x0000 (---------------) + I grue
- 0x0023d085, // n0x13c1 c0x0000 (---------------) + I gulen
- 0x00244f4d, // n0x13c2 c0x0000 (---------------) + I guovdageaidnu
- 0x00200a02, // n0x13c3 c0x0000 (---------------) + I ha
- 0x00306b46, // n0x13c4 c0x0000 (---------------) + I habmer
- 0x002ff546, // n0x13c5 c0x0000 (---------------) + I hadsel
- 0x003260ca, // n0x13c6 c0x0000 (---------------) + I hagebostad
- 0x00283d86, // n0x13c7 c0x0000 (---------------) + I halden
- 0x00283f05, // n0x13c8 c0x0000 (---------------) + I halsa
- 0x00299e85, // n0x13c9 c0x0000 (---------------) + I hamar
- 0x00299e87, // n0x13ca c0x0000 (---------------) + I hamaroy
- 0x0028424c, // n0x13cb c0x0000 (---------------) + I hammarfeasta
- 0x002a304a, // n0x13cc c0x0000 (---------------) + I hammerfest
- 0x00286f06, // n0x13cd c0x0000 (---------------) + I hapmir
- 0x002bcec5, // n0x13ce c0x0000 (---------------) + I haram
- 0x00287d46, // n0x13cf c0x0000 (---------------) + I hareid
- 0x00288087, // n0x13d0 c0x0000 (---------------) + I harstad
- 0x00289546, // n0x13d1 c0x0000 (---------------) + I hasvik
- 0x0028b14c, // n0x13d2 c0x0000 (---------------) + I hattfjelldal
- 0x00366389, // n0x13d3 c0x0000 (---------------) + I haugesund
- 0x37652b07, // n0x13d4 c0x00dd (n0x15f7-n0x15fa) o I hedmark
- 0x0028d145, // n0x13d5 c0x0000 (---------------) + I hemne
- 0x0028d146, // n0x13d6 c0x0000 (---------------) + I hemnes
- 0x0028d608, // n0x13d7 c0x0000 (---------------) + I hemsedal
- 0x00267985, // n0x13d8 c0x0000 (---------------) + I herad
- 0x0029e585, // n0x13d9 c0x0000 (---------------) + I hitra
- 0x0029e7c8, // n0x13da c0x0000 (---------------) + I hjartdal
- 0x0029e9ca, // n0x13db c0x0000 (---------------) + I hjelmeland
- 0x37a6e482, // n0x13dc c0x00de (n0x15fa-n0x15fb) + I hl
- 0x37e60182, // n0x13dd c0x00df (n0x15fb-n0x15fc) + I hm
- 0x0033fa05, // n0x13de c0x0000 (---------------) + I hobol
- 0x002a4b83, // n0x13df c0x0000 (---------------) + I hof
- 0x00219988, // n0x13e0 c0x0000 (---------------) + I hokksund
- 0x0020ad83, // n0x13e1 c0x0000 (---------------) + I hol
- 0x0029ec44, // n0x13e2 c0x0000 (---------------) + I hole
- 0x0020ad8b, // n0x13e3 c0x0000 (---------------) + I holmestrand
- 0x0025f948, // n0x13e4 c0x0000 (---------------) + I holtalen
- 0x002a2888, // n0x13e5 c0x0000 (---------------) + I honefoss
- 0x38310c49, // n0x13e6 c0x00e0 (n0x15fc-n0x15fd) o I hordaland
- 0x002a59c9, // n0x13e7 c0x0000 (---------------) + I hornindal
- 0x002a70c6, // n0x13e8 c0x0000 (---------------) + I horten
- 0x002a7b48, // n0x13e9 c0x0000 (---------------) + I hoyanger
- 0x002a7d49, // n0x13ea c0x0000 (---------------) + I hoylandet
- 0x002a87c6, // n0x13eb c0x0000 (---------------) + I hurdal
- 0x002a8945, // n0x13ec c0x0000 (---------------) + I hurum
- 0x00242086, // n0x13ed c0x0000 (---------------) + I hvaler
- 0x00357f49, // n0x13ee c0x0000 (---------------) + I hyllestad
- 0x00316087, // n0x13ef c0x0000 (---------------) + I ibestad
- 0x00261186, // n0x13f0 c0x0000 (---------------) + I idrett
- 0x002edb47, // n0x13f1 c0x0000 (---------------) + I inderoy
- 0x00315447, // n0x13f2 c0x0000 (---------------) + I iveland
- 0x00243cc4, // n0x13f3 c0x0000 (---------------) + I ivgu
- 0x38617549, // n0x13f4 c0x00e1 (n0x15fd-n0x15fe) + I jan-mayen
- 0x002c18c8, // n0x13f5 c0x0000 (---------------) + I jessheim
- 0x0026b348, // n0x13f6 c0x0000 (---------------) + I jevnaker
- 0x0023c587, // n0x13f7 c0x0000 (---------------) + I jolster
- 0x002bea46, // n0x13f8 c0x0000 (---------------) + I jondal
- 0x0023b309, // n0x13f9 c0x0000 (---------------) + I jorpeland
- 0x0021ec07, // n0x13fa c0x0000 (---------------) + I kafjord
- 0x002ef9ca, // n0x13fb c0x0000 (---------------) + I karasjohka
- 0x002a6008, // n0x13fc c0x0000 (---------------) + I karasjok
- 0x0036c887, // n0x13fd c0x0000 (---------------) + I karlsoy
- 0x0036dbc6, // n0x13fe c0x0000 (---------------) + I karmoy
- 0x0022cc8a, // n0x13ff c0x0000 (---------------) + I kautokeino
- 0x0024ec48, // n0x1400 c0x0000 (---------------) + I kirkenes
- 0x0026af85, // n0x1401 c0x0000 (---------------) + I klabu
- 0x0022a745, // n0x1402 c0x0000 (---------------) + I klepp
- 0x002ae107, // n0x1403 c0x0000 (---------------) + I kommune
- 0x002c4d09, // n0x1404 c0x0000 (---------------) + I kongsberg
- 0x002c93cb, // n0x1405 c0x0000 (---------------) + I kongsvinger
- 0x002e10c8, // n0x1406 c0x0000 (---------------) + I kopervik
- 0x00317049, // n0x1407 c0x0000 (---------------) + I kraanghke
- 0x002acb07, // n0x1408 c0x0000 (---------------) + I kragero
- 0x002ae3cc, // n0x1409 c0x0000 (---------------) + I kristiansand
- 0x002ae84c, // n0x140a c0x0000 (---------------) + I kristiansund
- 0x002aeb4a, // n0x140b c0x0000 (---------------) + I krodsherad
- 0x002aedcc, // n0x140c c0x0000 (---------------) + I krokstadelva
- 0x002b9348, // n0x140d c0x0000 (---------------) + I kvafjord
- 0x002b9548, // n0x140e c0x0000 (---------------) + I kvalsund
- 0x002b9744, // n0x140f c0x0000 (---------------) + I kvam
- 0x002b9c09, // n0x1410 c0x0000 (---------------) + I kvanangen
- 0x002b9e49, // n0x1411 c0x0000 (---------------) + I kvinesdal
- 0x002ba08a, // n0x1412 c0x0000 (---------------) + I kvinnherad
- 0x002ba309, // n0x1413 c0x0000 (---------------) + I kviteseid
- 0x002ba647, // n0x1414 c0x0000 (---------------) + I kvitsoy
- 0x0024094c, // n0x1415 c0x0000 (---------------) + I laakesvuemie
- 0x0020b406, // n0x1416 c0x0000 (---------------) + I lahppi
- 0x00229e88, // n0x1417 c0x0000 (---------------) + I langevag
- 0x0020c806, // n0x1418 c0x0000 (---------------) + I lardal
- 0x002d1186, // n0x1419 c0x0000 (---------------) + I larvik
- 0x002ef5c7, // n0x141a c0x0000 (---------------) + I lavagis
- 0x00337dc8, // n0x141b c0x0000 (---------------) + I lavangen
- 0x0028024b, // n0x141c c0x0000 (---------------) + I leangaviika
- 0x002c5d47, // n0x141d c0x0000 (---------------) + I lebesby
- 0x00264889, // n0x141e c0x0000 (---------------) + I leikanger
- 0x00267249, // n0x141f c0x0000 (---------------) + I leirfjord
- 0x002bbe87, // n0x1420 c0x0000 (---------------) + I leirvik
- 0x002291c4, // n0x1421 c0x0000 (---------------) + I leka
- 0x002d5907, // n0x1422 c0x0000 (---------------) + I leksvik
- 0x0027c346, // n0x1423 c0x0000 (---------------) + I lenvik
- 0x00249506, // n0x1424 c0x0000 (---------------) + I lerdal
- 0x00221805, // n0x1425 c0x0000 (---------------) + I lesja
- 0x002a85c8, // n0x1426 c0x0000 (---------------) + I levanger
- 0x0021b244, // n0x1427 c0x0000 (---------------) + I lier
- 0x0021b246, // n0x1428 c0x0000 (---------------) + I lierne
- 0x002a2f0b, // n0x1429 c0x0000 (---------------) + I lillehammer
- 0x00347349, // n0x142a c0x0000 (---------------) + I lillesand
- 0x0030f386, // n0x142b c0x0000 (---------------) + I lindas
- 0x0034cc49, // n0x142c c0x0000 (---------------) + I lindesnes
- 0x00211b06, // n0x142d c0x0000 (---------------) + I loabat
- 0x002d5c08, // n0x142e c0x0000 (---------------) + I lodingen
- 0x00224303, // n0x142f c0x0000 (---------------) + I lom
- 0x00208805, // n0x1430 c0x0000 (---------------) + I loppa
- 0x0020c949, // n0x1431 c0x0000 (---------------) + I lorenskog
- 0x0021f945, // n0x1432 c0x0000 (---------------) + I loten
- 0x002e1b84, // n0x1433 c0x0000 (---------------) + I lund
- 0x00271a46, // n0x1434 c0x0000 (---------------) + I lunner
- 0x0022ff45, // n0x1435 c0x0000 (---------------) + I luroy
- 0x00233446, // n0x1436 c0x0000 (---------------) + I luster
- 0x002fa8c7, // n0x1437 c0x0000 (---------------) + I lyngdal
- 0x0026d246, // n0x1438 c0x0000 (---------------) + I lyngen
- 0x0029250b, // n0x1439 c0x0000 (---------------) + I malatvuopmi
- 0x0036d3c7, // n0x143a c0x0000 (---------------) + I malselv
- 0x002fcd06, // n0x143b c0x0000 (---------------) + I malvik
- 0x00334a46, // n0x143c c0x0000 (---------------) + I mandal
- 0x002c0206, // n0x143d c0x0000 (---------------) + I marker
- 0x002870c9, // n0x143e c0x0000 (---------------) + I marnardal
- 0x002f8c8a, // n0x143f c0x0000 (---------------) + I masfjorden
- 0x0032c945, // n0x1440 c0x0000 (---------------) + I masoy
- 0x00344d8d, // n0x1441 c0x0000 (---------------) + I matta-varjjat
- 0x0029eac6, // n0x1442 c0x0000 (---------------) + I meland
- 0x002a6f46, // n0x1443 c0x0000 (---------------) + I meldal
- 0x00242786, // n0x1444 c0x0000 (---------------) + I melhus
- 0x0030ef05, // n0x1445 c0x0000 (---------------) + I meloy
- 0x00284687, // n0x1446 c0x0000 (---------------) + I meraker
- 0x0027c7c7, // n0x1447 c0x0000 (---------------) + I midsund
- 0x00275d0e, // n0x1448 c0x0000 (---------------) + I midtre-gauldal
- 0x0023f703, // n0x1449 c0x0000 (---------------) + I mil
- 0x002bea09, // n0x144a c0x0000 (---------------) + I mjondalen
- 0x00309249, // n0x144b c0x0000 (---------------) + I mo-i-rana
- 0x00349a87, // n0x144c c0x0000 (---------------) + I moareke
- 0x00268687, // n0x144d c0x0000 (---------------) + I modalen
- 0x00296445, // n0x144e c0x0000 (---------------) + I modum
- 0x003696c5, // n0x144f c0x0000 (---------------) + I molde
- 0x38ae678f, // n0x1450 c0x00e2 (n0x15fe-n0x1600) o I more-og-romsdal
- 0x002c3647, // n0x1451 c0x0000 (---------------) + I mosjoen
- 0x002c3808, // n0x1452 c0x0000 (---------------) + I moskenes
- 0x002c4744, // n0x1453 c0x0000 (---------------) + I moss
- 0x002c4bc6, // n0x1454 c0x0000 (---------------) + I mosvik
- 0x38e119c2, // n0x1455 c0x00e3 (n0x1600-n0x1601) + I mr
- 0x002c9006, // n0x1456 c0x0000 (---------------) + I muosat
- 0x002cb0c6, // n0x1457 c0x0000 (---------------) + I museum
- 0x0030940e, // n0x1458 c0x0000 (---------------) + I naamesjevuemie
- 0x0032670a, // n0x1459 c0x0000 (---------------) + I namdalseid
- 0x002706c6, // n0x145a c0x0000 (---------------) + I namsos
- 0x002def0a, // n0x145b c0x0000 (---------------) + I namsskogan
- 0x002457c9, // n0x145c c0x0000 (---------------) + I nannestad
- 0x00307a85, // n0x145d c0x0000 (---------------) + I naroy
- 0x00355a88, // n0x145e c0x0000 (---------------) + I narviika
- 0x0035b646, // n0x145f c0x0000 (---------------) + I narvik
- 0x0035e408, // n0x1460 c0x0000 (---------------) + I naustdal
- 0x00203e48, // n0x1461 c0x0000 (---------------) + I navuotna
- 0x002764cb, // n0x1462 c0x0000 (---------------) + I nedre-eiker
- 0x00220645, // n0x1463 c0x0000 (---------------) + I nesna
- 0x0035a148, // n0x1464 c0x0000 (---------------) + I nesodden
- 0x0020988c, // n0x1465 c0x0000 (---------------) + I nesoddtangen
- 0x002c6947, // n0x1466 c0x0000 (---------------) + I nesseby
- 0x00248fc6, // n0x1467 c0x0000 (---------------) + I nesset
- 0x0026d388, // n0x1468 c0x0000 (---------------) + I nissedal
- 0x00204e48, // n0x1469 c0x0000 (---------------) + I nittedal
- 0x39244442, // n0x146a c0x00e4 (n0x1601-n0x1602) + I nl
- 0x0023574b, // n0x146b c0x0000 (---------------) + I nord-aurdal
- 0x002ec289, // n0x146c c0x0000 (---------------) + I nord-fron
- 0x002b0c89, // n0x146d c0x0000 (---------------) + I nord-odal
- 0x00349c87, // n0x146e c0x0000 (---------------) + I norddal
- 0x00222b48, // n0x146f c0x0000 (---------------) + I nordkapp
- 0x396f7f88, // n0x1470 c0x00e5 (n0x1602-n0x1606) o I nordland
- 0x0023aacb, // n0x1471 c0x0000 (---------------) + I nordre-land
- 0x0034bb89, // n0x1472 c0x0000 (---------------) + I nordreisa
- 0x0022f8cd, // n0x1473 c0x0000 (---------------) + I nore-og-uvdal
- 0x002502c8, // n0x1474 c0x0000 (---------------) + I notodden
- 0x00296fc8, // n0x1475 c0x0000 (---------------) + I notteroy
- 0x39a0ddc2, // n0x1476 c0x00e6 (n0x1606-n0x1607) + I nt
- 0x00321704, // n0x1477 c0x0000 (---------------) + I odda
- 0x39e1ef42, // n0x1478 c0x00e7 (n0x1607-n0x1608) + I of
- 0x0032d246, // n0x1479 c0x0000 (---------------) + I oksnes
- 0x3a200c42, // n0x147a c0x00e8 (n0x1608-n0x1609) + I ol
- 0x002e6bca, // n0x147b c0x0000 (---------------) + I omasvuotna
- 0x00311486, // n0x147c c0x0000 (---------------) + I oppdal
- 0x002da148, // n0x147d c0x0000 (---------------) + I oppegard
- 0x0028cf48, // n0x147e c0x0000 (---------------) + I orkanger
- 0x00221a46, // n0x147f c0x0000 (---------------) + I orkdal
- 0x0030a246, // n0x1480 c0x0000 (---------------) + I orland
- 0x002db946, // n0x1481 c0x0000 (---------------) + I orskog
- 0x002d6945, // n0x1482 c0x0000 (---------------) + I orsta
- 0x00206d04, // n0x1483 c0x0000 (---------------) + I osen
- 0x3a624284, // n0x1484 c0x00e9 (n0x1609-n0x160a) + I oslo
- 0x002143c6, // n0x1485 c0x0000 (---------------) + I osoyro
- 0x002681c7, // n0x1486 c0x0000 (---------------) + I osteroy
- 0x3aaef387, // n0x1487 c0x00ea (n0x160a-n0x160b) o I ostfold
- 0x0020938b, // n0x1488 c0x0000 (---------------) + I ostre-toten
- 0x002865c9, // n0x1489 c0x0000 (---------------) + I overhalla
- 0x0032e30a, // n0x148a c0x0000 (---------------) + I ovre-eiker
- 0x00309104, // n0x148b c0x0000 (---------------) + I oyer
- 0x00299fc8, // n0x148c c0x0000 (---------------) + I oygarden
- 0x00260f4d, // n0x148d c0x0000 (---------------) + I oystre-slidre
- 0x002d6309, // n0x148e c0x0000 (---------------) + I porsanger
- 0x002d6548, // n0x148f c0x0000 (---------------) + I porsangu
- 0x002d6d09, // n0x1490 c0x0000 (---------------) + I porsgrunn
- 0x002d82c4, // n0x1491 c0x0000 (---------------) + I priv
- 0x0022eec4, // n0x1492 c0x0000 (---------------) + I rade
- 0x0033ab85, // n0x1493 c0x0000 (---------------) + I radoy
- 0x0036ad4b, // n0x1494 c0x0000 (---------------) + I rahkkeravju
- 0x0025f8c6, // n0x1495 c0x0000 (---------------) + I raholt
- 0x002b1685, // n0x1496 c0x0000 (---------------) + I raisa
- 0x002770c9, // n0x1497 c0x0000 (---------------) + I rakkestad
- 0x00220848, // n0x1498 c0x0000 (---------------) + I ralingen
- 0x00268e04, // n0x1499 c0x0000 (---------------) + I rana
- 0x00349809, // n0x149a c0x0000 (---------------) + I randaberg
- 0x002b46c5, // n0x149b c0x0000 (---------------) + I rauma
- 0x0027c208, // n0x149c c0x0000 (---------------) + I rendalen
- 0x0029a807, // n0x149d c0x0000 (---------------) + I rennebu
- 0x00302748, // n0x149e c0x0000 (---------------) + I rennesoy
- 0x002be606, // n0x149f c0x0000 (---------------) + I rindal
- 0x00247e07, // n0x14a0 c0x0000 (---------------) + I ringebu
- 0x002c4089, // n0x14a1 c0x0000 (---------------) + I ringerike
- 0x00369c49, // n0x14a2 c0x0000 (---------------) + I ringsaker
- 0x0024dd45, // n0x14a3 c0x0000 (---------------) + I risor
- 0x002a4d85, // n0x14a4 c0x0000 (---------------) + I rissa
- 0x3ae0c302, // n0x14a5 c0x00eb (n0x160b-n0x160c) + I rl
- 0x00333fc4, // n0x14a6 c0x0000 (---------------) + I roan
- 0x0022c785, // n0x14a7 c0x0000 (---------------) + I rodoy
- 0x0032c086, // n0x14a8 c0x0000 (---------------) + I rollag
- 0x00357145, // n0x14a9 c0x0000 (---------------) + I romsa
- 0x002305c7, // n0x14aa c0x0000 (---------------) + I romskog
- 0x0024d0c5, // n0x14ab c0x0000 (---------------) + I roros
- 0x00208c44, // n0x14ac c0x0000 (---------------) + I rost
- 0x003532c6, // n0x14ad c0x0000 (---------------) + I royken
- 0x0026a3c7, // n0x14ae c0x0000 (---------------) + I royrvik
- 0x002cfd46, // n0x14af c0x0000 (---------------) + I ruovat
- 0x00315b05, // n0x14b0 c0x0000 (---------------) + I rygge
- 0x00221288, // n0x14b1 c0x0000 (---------------) + I salangen
- 0x00222845, // n0x14b2 c0x0000 (---------------) + I salat
- 0x002230c7, // n0x14b3 c0x0000 (---------------) + I saltdal
- 0x00229849, // n0x14b4 c0x0000 (---------------) + I samnanger
- 0x002ae5ca, // n0x14b5 c0x0000 (---------------) + I sandefjord
- 0x002890c7, // n0x14b6 c0x0000 (---------------) + I sandnes
- 0x002890cc, // n0x14b7 c0x0000 (---------------) + I sandnessjoen
- 0x00372206, // n0x14b8 c0x0000 (---------------) + I sandoy
- 0x0024a1c9, // n0x14b9 c0x0000 (---------------) + I sarpsborg
- 0x00265785, // n0x14ba c0x0000 (---------------) + I sauda
- 0x002678c8, // n0x14bb c0x0000 (---------------) + I sauherad
- 0x00211683, // n0x14bc c0x0000 (---------------) + I sel
- 0x00211685, // n0x14bd c0x0000 (---------------) + I selbu
- 0x00256a45, // n0x14be c0x0000 (---------------) + I selje
- 0x002d0b07, // n0x14bf c0x0000 (---------------) + I seljord
- 0x3b24f102, // n0x14c0 c0x00ec (n0x160c-n0x160d) + I sf
- 0x00288c47, // n0x14c1 c0x0000 (---------------) + I siellak
- 0x002dff06, // n0x14c2 c0x0000 (---------------) + I sigdal
- 0x00217486, // n0x14c3 c0x0000 (---------------) + I siljan
- 0x002e08c6, // n0x14c4 c0x0000 (---------------) + I sirdal
- 0x00204d86, // n0x14c5 c0x0000 (---------------) + I skanit
- 0x003177c8, // n0x14c6 c0x0000 (---------------) + I skanland
- 0x0030ae45, // n0x14c7 c0x0000 (---------------) + I skaun
- 0x002d0687, // n0x14c8 c0x0000 (---------------) + I skedsmo
- 0x002d068d, // n0x14c9 c0x0000 (---------------) + I skedsmokorset
- 0x0021a9c3, // n0x14ca c0x0000 (---------------) + I ski
- 0x0021a9c5, // n0x14cb c0x0000 (---------------) + I skien
- 0x002fe907, // n0x14cc c0x0000 (---------------) + I skierva
- 0x002de008, // n0x14cd c0x0000 (---------------) + I skiptvet
- 0x00247685, // n0x14ce c0x0000 (---------------) + I skjak
- 0x00221f88, // n0x14cf c0x0000 (---------------) + I skjervoy
- 0x0024d646, // n0x14d0 c0x0000 (---------------) + I skodje
- 0x0028d9c7, // n0x14d1 c0x0000 (---------------) + I slattum
- 0x00229dc5, // n0x14d2 c0x0000 (---------------) + I smola
- 0x002206c6, // n0x14d3 c0x0000 (---------------) + I snaase
- 0x00261885, // n0x14d4 c0x0000 (---------------) + I snasa
- 0x00232f0a, // n0x14d5 c0x0000 (---------------) + I snillfjord
- 0x002b8046, // n0x14d6 c0x0000 (---------------) + I snoasa
- 0x00281007, // n0x14d7 c0x0000 (---------------) + I sogndal
- 0x002b4145, // n0x14d8 c0x0000 (---------------) + I sogne
- 0x002ee707, // n0x14d9 c0x0000 (---------------) + I sokndal
- 0x002e1704, // n0x14da c0x0000 (---------------) + I sola
- 0x002e1b06, // n0x14db c0x0000 (---------------) + I solund
- 0x002e22c5, // n0x14dc c0x0000 (---------------) + I somna
- 0x0029ad8b, // n0x14dd c0x0000 (---------------) + I sondre-land
- 0x00303989, // n0x14de c0x0000 (---------------) + I songdalen
- 0x0025a5ca, // n0x14df c0x0000 (---------------) + I sor-aurdal
- 0x0024ddc8, // n0x14e0 c0x0000 (---------------) + I sor-fron
- 0x002e2e48, // n0x14e1 c0x0000 (---------------) + I sor-odal
- 0x002e304c, // n0x14e2 c0x0000 (---------------) + I sor-varanger
- 0x002e3347, // n0x14e3 c0x0000 (---------------) + I sorfold
- 0x002e3508, // n0x14e4 c0x0000 (---------------) + I sorreisa
- 0x002e43c8, // n0x14e5 c0x0000 (---------------) + I sortland
- 0x002e45c5, // n0x14e6 c0x0000 (---------------) + I sorum
- 0x002e8e4a, // n0x14e7 c0x0000 (---------------) + I spjelkavik
- 0x002e9349, // n0x14e8 c0x0000 (---------------) + I spydeberg
- 0x3b605502, // n0x14e9 c0x00ed (n0x160d-n0x160e) + I st
- 0x00319806, // n0x14ea c0x0000 (---------------) + I stange
- 0x00284b44, // n0x14eb c0x0000 (---------------) + I stat
- 0x002d5749, // n0x14ec c0x0000 (---------------) + I stathelle
- 0x00347a89, // n0x14ed c0x0000 (---------------) + I stavanger
- 0x00228bc7, // n0x14ee c0x0000 (---------------) + I stavern
- 0x0026bf87, // n0x14ef c0x0000 (---------------) + I steigen
- 0x002739c9, // n0x14f0 c0x0000 (---------------) + I steinkjer
- 0x002d2548, // n0x14f1 c0x0000 (---------------) + I stjordal
- 0x002d254f, // n0x14f2 c0x0000 (---------------) + I stjordalshalsen
- 0x00239c46, // n0x14f3 c0x0000 (---------------) + I stokke
- 0x0030f10b, // n0x14f4 c0x0000 (---------------) + I stor-elvdal
- 0x0028d445, // n0x14f5 c0x0000 (---------------) + I stord
- 0x0028d447, // n0x14f6 c0x0000 (---------------) + I stordal
- 0x002e9b09, // n0x14f7 c0x0000 (---------------) + I storfjord
- 0x0020aec6, // n0x14f8 c0x0000 (---------------) + I strand
- 0x00349787, // n0x14f9 c0x0000 (---------------) + I stranda
- 0x00273845, // n0x14fa c0x0000 (---------------) + I stryn
- 0x00235144, // n0x14fb c0x0000 (---------------) + I sula
- 0x002d3546, // n0x14fc c0x0000 (---------------) + I suldal
- 0x00210b44, // n0x14fd c0x0000 (---------------) + I sund
- 0x002aafc7, // n0x14fe c0x0000 (---------------) + I sunndal
- 0x00324a08, // n0x14ff c0x0000 (---------------) + I surnadal
- 0x3baec4c8, // n0x1500 c0x00ee (n0x160e-n0x160f) + I svalbard
- 0x002ecec5, // n0x1501 c0x0000 (---------------) + I sveio
- 0x002ed007, // n0x1502 c0x0000 (---------------) + I svelvik
- 0x00270b89, // n0x1503 c0x0000 (---------------) + I sykkylven
- 0x0021dcc4, // n0x1504 c0x0000 (---------------) + I tana
- 0x002bc148, // n0x1505 c0x0000 (---------------) + I tananger
- 0x3bea1ec8, // n0x1506 c0x00ef (n0x160f-n0x1611) o I telemark
- 0x00262844, // n0x1507 c0x0000 (---------------) + I time
- 0x00236208, // n0x1508 c0x0000 (---------------) + I tingvoll
- 0x0036e2c4, // n0x1509 c0x0000 (---------------) + I tinn
- 0x002412c9, // n0x150a c0x0000 (---------------) + I tjeldsund
- 0x002426c5, // n0x150b c0x0000 (---------------) + I tjome
- 0x3c200142, // n0x150c c0x00f0 (n0x1611-n0x1612) + I tm
- 0x00239c85, // n0x150d c0x0000 (---------------) + I tokke
- 0x00219105, // n0x150e c0x0000 (---------------) + I tolga
- 0x00253588, // n0x150f c0x0000 (---------------) + I tonsberg
- 0x00237f87, // n0x1510 c0x0000 (---------------) + I torsken
- 0x3c605542, // n0x1511 c0x00f1 (n0x1612-n0x1613) + I tr
- 0x00268dc5, // n0x1512 c0x0000 (---------------) + I trana
- 0x00271506, // n0x1513 c0x0000 (---------------) + I tranby
- 0x00291006, // n0x1514 c0x0000 (---------------) + I tranoy
- 0x00333f88, // n0x1515 c0x0000 (---------------) + I troandin
- 0x0033ed88, // n0x1516 c0x0000 (---------------) + I trogstad
- 0x00357106, // n0x1517 c0x0000 (---------------) + I tromsa
- 0x002ee606, // n0x1518 c0x0000 (---------------) + I tromso
- 0x002a3449, // n0x1519 c0x0000 (---------------) + I trondheim
- 0x002eea86, // n0x151a c0x0000 (---------------) + I trysil
- 0x00363ecb, // n0x151b c0x0000 (---------------) + I tvedestrand
- 0x00233345, // n0x151c c0x0000 (---------------) + I tydal
- 0x002a0d46, // n0x151d c0x0000 (---------------) + I tynset
- 0x00315788, // n0x151e c0x0000 (---------------) + I tysfjord
- 0x00281386, // n0x151f c0x0000 (---------------) + I tysnes
- 0x002e4f86, // n0x1520 c0x0000 (---------------) + I tysvar
- 0x0020e04a, // n0x1521 c0x0000 (---------------) + I ullensaker
- 0x0034b0ca, // n0x1522 c0x0000 (---------------) + I ullensvang
- 0x00245245, // n0x1523 c0x0000 (---------------) + I ulvik
- 0x002700c7, // n0x1524 c0x0000 (---------------) + I unjarga
- 0x002f4546, // n0x1525 c0x0000 (---------------) + I utsira
- 0x3ca000c2, // n0x1526 c0x00f2 (n0x1613-n0x1614) + I va
- 0x002fea47, // n0x1527 c0x0000 (---------------) + I vaapste
- 0x0027bfc5, // n0x1528 c0x0000 (---------------) + I vadso
- 0x0020c3c4, // n0x1529 c0x0000 (---------------) + I vaga
- 0x0020c3c5, // n0x152a c0x0000 (---------------) + I vagan
- 0x00309006, // n0x152b c0x0000 (---------------) + I vagsoy
- 0x002cf707, // n0x152c c0x0000 (---------------) + I vaksdal
- 0x00216a45, // n0x152d c0x0000 (---------------) + I valle
- 0x002a8644, // n0x152e c0x0000 (---------------) + I vang
- 0x00271d48, // n0x152f c0x0000 (---------------) + I vanylven
- 0x002e5045, // n0x1530 c0x0000 (---------------) + I vardo
- 0x0036efc7, // n0x1531 c0x0000 (---------------) + I varggat
- 0x002f0b05, // n0x1532 c0x0000 (---------------) + I varoy
- 0x00232e45, // n0x1533 c0x0000 (---------------) + I vefsn
- 0x002a2b04, // n0x1534 c0x0000 (---------------) + I vega
- 0x002df989, // n0x1535 c0x0000 (---------------) + I vegarshei
- 0x002f1f88, // n0x1536 c0x0000 (---------------) + I vennesla
- 0x002f0986, // n0x1537 c0x0000 (---------------) + I verdal
- 0x002f2906, // n0x1538 c0x0000 (---------------) + I verran
- 0x002c5b86, // n0x1539 c0x0000 (---------------) + I vestby
- 0x3cef34c8, // n0x153a c0x00f3 (n0x1614-n0x1615) o I vestfold
- 0x002f36c7, // n0x153b c0x0000 (---------------) + I vestnes
- 0x002f3b4d, // n0x153c c0x0000 (---------------) + I vestre-slidre
- 0x002f4ccc, // n0x153d c0x0000 (---------------) + I vestre-toten
- 0x002f5e09, // n0x153e c0x0000 (---------------) + I vestvagoy
- 0x002f6049, // n0x153f c0x0000 (---------------) + I vevelstad
- 0x3d332602, // n0x1540 c0x00f4 (n0x1615-n0x1616) + I vf
- 0x0036be83, // n0x1541 c0x0000 (---------------) + I vgs
- 0x002032c3, // n0x1542 c0x0000 (---------------) + I vik
- 0x0026a4c5, // n0x1543 c0x0000 (---------------) + I vikna
- 0x0033920a, // n0x1544 c0x0000 (---------------) + I vindafjord
- 0x0030b446, // n0x1545 c0x0000 (---------------) + I voagat
- 0x002f9005, // n0x1546 c0x0000 (---------------) + I volda
- 0x002fae04, // n0x1547 c0x0000 (---------------) + I voss
- 0x002fae0b, // n0x1548 c0x0000 (---------------) + I vossevangen
- 0x00300a8c, // n0x1549 c0x0000 (---------------) + I xn--andy-ira
- 0x0030128c, // n0x154a c0x0000 (---------------) + I xn--asky-ira
- 0x00301595, // n0x154b c0x0000 (---------------) + I xn--aurskog-hland-jnb
- 0x00302f8d, // n0x154c c0x0000 (---------------) + I xn--avery-yua
- 0x0030418f, // n0x154d c0x0000 (---------------) + I xn--bdddj-mrabd
- 0x00304552, // n0x154e c0x0000 (---------------) + I xn--bearalvhki-y4a
- 0x003049cf, // n0x154f c0x0000 (---------------) + I xn--berlevg-jxa
- 0x00304d92, // n0x1550 c0x0000 (---------------) + I xn--bhcavuotna-s4a
- 0x00305213, // n0x1551 c0x0000 (---------------) + I xn--bhccavuotna-k7a
- 0x003056cd, // n0x1552 c0x0000 (---------------) + I xn--bidr-5nac
- 0x00305c8d, // n0x1553 c0x0000 (---------------) + I xn--bievt-0qa
- 0x00305fce, // n0x1554 c0x0000 (---------------) + I xn--bjarky-fya
- 0x0030654e, // n0x1555 c0x0000 (---------------) + I xn--bjddar-pta
- 0x00306ccc, // n0x1556 c0x0000 (---------------) + I xn--blt-elab
- 0x0030704c, // n0x1557 c0x0000 (---------------) + I xn--bmlo-gra
- 0x0030784b, // n0x1558 c0x0000 (---------------) + I xn--bod-2na
- 0x00307bce, // n0x1559 c0x0000 (---------------) + I xn--brnny-wuac
- 0x0030a3d2, // n0x155a c0x0000 (---------------) + I xn--brnnysund-m8ac
- 0x0030b20c, // n0x155b c0x0000 (---------------) + I xn--brum-voa
- 0x0030b9d0, // n0x155c c0x0000 (---------------) + I xn--btsfjord-9za
- 0x0031acd2, // n0x155d c0x0000 (---------------) + I xn--davvenjrga-y4a
- 0x0031b14c, // n0x155e c0x0000 (---------------) + I xn--dnna-gra
- 0x0031ba8d, // n0x155f c0x0000 (---------------) + I xn--drbak-wua
- 0x0031bdcc, // n0x1560 c0x0000 (---------------) + I xn--dyry-ira
- 0x0031cc11, // n0x1561 c0x0000 (---------------) + I xn--eveni-0qa01ga
- 0x0031d04d, // n0x1562 c0x0000 (---------------) + I xn--finny-yua
- 0x0031fc0d, // n0x1563 c0x0000 (---------------) + I xn--fjord-lra
- 0x0032020a, // n0x1564 c0x0000 (---------------) + I xn--fl-zia
- 0x0032048c, // n0x1565 c0x0000 (---------------) + I xn--flor-jra
- 0x00320d8c, // n0x1566 c0x0000 (---------------) + I xn--frde-gra
- 0x0032110c, // n0x1567 c0x0000 (---------------) + I xn--frna-woa
- 0x0032180c, // n0x1568 c0x0000 (---------------) + I xn--frya-hra
- 0x00323c13, // n0x1569 c0x0000 (---------------) + I xn--ggaviika-8ya47h
- 0x00324190, // n0x156a c0x0000 (---------------) + I xn--gildeskl-g0a
- 0x00324590, // n0x156b c0x0000 (---------------) + I xn--givuotna-8ya
- 0x00324c0d, // n0x156c c0x0000 (---------------) + I xn--gjvik-wua
- 0x00324f4c, // n0x156d c0x0000 (---------------) + I xn--gls-elac
- 0x00325b49, // n0x156e c0x0000 (---------------) + I xn--h-2fa
- 0x00326acd, // n0x156f c0x0000 (---------------) + I xn--hbmer-xqa
- 0x00326e13, // n0x1570 c0x0000 (---------------) + I xn--hcesuolo-7ya35b
- 0x00328951, // n0x1571 c0x0000 (---------------) + I xn--hgebostad-g3a
- 0x00328d93, // n0x1572 c0x0000 (---------------) + I xn--hmmrfeasta-s4ac
- 0x003294cf, // n0x1573 c0x0000 (---------------) + I xn--hnefoss-q1a
- 0x0032988c, // n0x1574 c0x0000 (---------------) + I xn--hobl-ira
- 0x00329b8f, // n0x1575 c0x0000 (---------------) + I xn--holtlen-hxa
- 0x00329f4d, // n0x1576 c0x0000 (---------------) + I xn--hpmir-xqa
- 0x0032a54f, // n0x1577 c0x0000 (---------------) + I xn--hyanger-q1a
- 0x0032a910, // n0x1578 c0x0000 (---------------) + I xn--hylandet-54a
- 0x0032b0ce, // n0x1579 c0x0000 (---------------) + I xn--indery-fya
- 0x0032d80e, // n0x157a c0x0000 (---------------) + I xn--jlster-bya
- 0x0032e590, // n0x157b c0x0000 (---------------) + I xn--jrpeland-54a
- 0x0032e98d, // n0x157c c0x0000 (---------------) + I xn--karmy-yua
- 0x0032ecce, // n0x157d c0x0000 (---------------) + I xn--kfjord-iua
- 0x0032f04c, // n0x157e c0x0000 (---------------) + I xn--klbu-woa
- 0x0032f353, // n0x157f c0x0000 (---------------) + I xn--koluokta-7ya57h
- 0x0033070e, // n0x1580 c0x0000 (---------------) + I xn--krager-gya
- 0x00330f50, // n0x1581 c0x0000 (---------------) + I xn--kranghke-b0a
- 0x00331351, // n0x1582 c0x0000 (---------------) + I xn--krdsherad-m8a
- 0x0033178f, // n0x1583 c0x0000 (---------------) + I xn--krehamn-dxa
- 0x00331b53, // n0x1584 c0x0000 (---------------) + I xn--krjohka-hwab49j
- 0x0033218d, // n0x1585 c0x0000 (---------------) + I xn--ksnes-uua
- 0x003324cf, // n0x1586 c0x0000 (---------------) + I xn--kvfjord-nxa
- 0x0033288e, // n0x1587 c0x0000 (---------------) + I xn--kvitsy-fya
- 0x00332e50, // n0x1588 c0x0000 (---------------) + I xn--kvnangen-k0a
- 0x00333249, // n0x1589 c0x0000 (---------------) + I xn--l-1fa
- 0x00334310, // n0x158a c0x0000 (---------------) + I xn--laheadju-7ya
- 0x00334bcf, // n0x158b c0x0000 (---------------) + I xn--langevg-jxa
- 0x0033524f, // n0x158c c0x0000 (---------------) + I xn--ldingen-q1a
- 0x00335612, // n0x158d c0x0000 (---------------) + I xn--leagaviika-52b
- 0x0033610e, // n0x158e c0x0000 (---------------) + I xn--lesund-hua
- 0x00336dcd, // n0x158f c0x0000 (---------------) + I xn--lgrd-poac
- 0x0033730d, // n0x1590 c0x0000 (---------------) + I xn--lhppi-xqa
- 0x0033764d, // n0x1591 c0x0000 (---------------) + I xn--linds-pra
- 0x00337fcd, // n0x1592 c0x0000 (---------------) + I xn--loabt-0qa
- 0x0033830d, // n0x1593 c0x0000 (---------------) + I xn--lrdal-sra
- 0x00338650, // n0x1594 c0x0000 (---------------) + I xn--lrenskog-54a
- 0x00338a4b, // n0x1595 c0x0000 (---------------) + I xn--lt-liac
- 0x00338ecc, // n0x1596 c0x0000 (---------------) + I xn--lten-gra
- 0x0033948c, // n0x1597 c0x0000 (---------------) + I xn--lury-ira
- 0x0033978c, // n0x1598 c0x0000 (---------------) + I xn--mely-ira
- 0x00339a8e, // n0x1599 c0x0000 (---------------) + I xn--merker-kua
- 0x0033ef90, // n0x159a c0x0000 (---------------) + I xn--mjndalen-64a
- 0x003408d2, // n0x159b c0x0000 (---------------) + I xn--mlatvuopmi-s4a
- 0x00340d4b, // n0x159c c0x0000 (---------------) + I xn--mli-tla
- 0x003410ce, // n0x159d c0x0000 (---------------) + I xn--mlselv-iua
- 0x0034144e, // n0x159e c0x0000 (---------------) + I xn--moreke-jua
- 0x0034358e, // n0x159f c0x0000 (---------------) + I xn--mosjen-eya
- 0x0034408b, // n0x15a0 c0x0000 (---------------) + I xn--mot-tla
- 0x3d744356, // n0x15a1 c0x00f5 (n0x1616-n0x1618) o I xn--mre-og-romsdal-qqb
- 0x00347ccd, // n0x15a2 c0x0000 (---------------) + I xn--msy-ula0h
- 0x00348154, // n0x15a3 c0x0000 (---------------) + I xn--mtta-vrjjat-k7af
- 0x003487cd, // n0x15a4 c0x0000 (---------------) + I xn--muost-0qa
- 0x003491d5, // n0x15a5 c0x0000 (---------------) + I xn--nmesjevuemie-tcba
- 0x0034a90d, // n0x15a6 c0x0000 (---------------) + I xn--nry-yla5g
- 0x0034ac4f, // n0x15a7 c0x0000 (---------------) + I xn--nttery-byae
- 0x0034b34f, // n0x15a8 c0x0000 (---------------) + I xn--nvuotna-hwa
- 0x0034d60f, // n0x15a9 c0x0000 (---------------) + I xn--oppegrd-ixa
- 0x0034d9ce, // n0x15aa c0x0000 (---------------) + I xn--ostery-fya
- 0x0034df4d, // n0x15ab c0x0000 (---------------) + I xn--osyro-wua
- 0x0034f091, // n0x15ac c0x0000 (---------------) + I xn--porsgu-sta26f
- 0x00350acc, // n0x15ad c0x0000 (---------------) + I xn--rady-ira
- 0x00350dcc, // n0x15ae c0x0000 (---------------) + I xn--rdal-poa
- 0x003510cb, // n0x15af c0x0000 (---------------) + I xn--rde-ula
- 0x0035138c, // n0x15b0 c0x0000 (---------------) + I xn--rdy-0nab
- 0x0035184f, // n0x15b1 c0x0000 (---------------) + I xn--rennesy-v1a
- 0x00351c12, // n0x15b2 c0x0000 (---------------) + I xn--rhkkervju-01af
- 0x0035344d, // n0x15b3 c0x0000 (---------------) + I xn--rholt-mra
- 0x00353c0c, // n0x15b4 c0x0000 (---------------) + I xn--risa-5na
- 0x0035420c, // n0x15b5 c0x0000 (---------------) + I xn--risr-ira
- 0x0035450d, // n0x15b6 c0x0000 (---------------) + I xn--rland-uua
- 0x0035484f, // n0x15b7 c0x0000 (---------------) + I xn--rlingen-mxa
- 0x00354c0e, // n0x15b8 c0x0000 (---------------) + I xn--rmskog-bya
- 0x0035508c, // n0x15b9 c0x0000 (---------------) + I xn--rros-gra
- 0x0035550d, // n0x15ba c0x0000 (---------------) + I xn--rskog-uua
- 0x0035584b, // n0x15bb c0x0000 (---------------) + I xn--rst-0na
- 0x00355e0c, // n0x15bc c0x0000 (---------------) + I xn--rsta-fra
- 0x0035638d, // n0x15bd c0x0000 (---------------) + I xn--ryken-vua
- 0x003566ce, // n0x15be c0x0000 (---------------) + I xn--ryrvik-bya
- 0x00356c49, // n0x15bf c0x0000 (---------------) + I xn--s-1fa
- 0x00358193, // n0x15c0 c0x0000 (---------------) + I xn--sandnessjen-ogb
- 0x00358d0d, // n0x15c1 c0x0000 (---------------) + I xn--sandy-yua
- 0x0035904d, // n0x15c2 c0x0000 (---------------) + I xn--seral-lra
- 0x0035964c, // n0x15c3 c0x0000 (---------------) + I xn--sgne-gra
- 0x00359d0e, // n0x15c4 c0x0000 (---------------) + I xn--skierv-uta
- 0x0035a60f, // n0x15c5 c0x0000 (---------------) + I xn--skjervy-v1a
- 0x0035a9cc, // n0x15c6 c0x0000 (---------------) + I xn--skjk-soa
- 0x0035accd, // n0x15c7 c0x0000 (---------------) + I xn--sknit-yqa
- 0x0035b00f, // n0x15c8 c0x0000 (---------------) + I xn--sknland-fxa
- 0x0035b3cc, // n0x15c9 c0x0000 (---------------) + I xn--slat-5na
- 0x0035b94c, // n0x15ca c0x0000 (---------------) + I xn--slt-elab
- 0x0035bd0c, // n0x15cb c0x0000 (---------------) + I xn--smla-hra
- 0x0035c00c, // n0x15cc c0x0000 (---------------) + I xn--smna-gra
- 0x0035c34d, // n0x15cd c0x0000 (---------------) + I xn--snase-nra
- 0x0035c692, // n0x15ce c0x0000 (---------------) + I xn--sndre-land-0cb
- 0x0035cb8c, // n0x15cf c0x0000 (---------------) + I xn--snes-poa
- 0x0035ce8c, // n0x15d0 c0x0000 (---------------) + I xn--snsa-roa
- 0x0035d191, // n0x15d1 c0x0000 (---------------) + I xn--sr-aurdal-l8a
- 0x0035d5cf, // n0x15d2 c0x0000 (---------------) + I xn--sr-fron-q1a
- 0x0035d98f, // n0x15d3 c0x0000 (---------------) + I xn--sr-odal-q1a
- 0x0035dd53, // n0x15d4 c0x0000 (---------------) + I xn--sr-varanger-ggb
- 0x0035ee4e, // n0x15d5 c0x0000 (---------------) + I xn--srfold-bya
- 0x0035f1cf, // n0x15d6 c0x0000 (---------------) + I xn--srreisa-q1a
- 0x0035f58c, // n0x15d7 c0x0000 (---------------) + I xn--srum-gra
- 0x3db5f88e, // n0x15d8 c0x00f6 (n0x1618-n0x1619) o I xn--stfold-9xa
- 0x0035fc0f, // n0x15d9 c0x0000 (---------------) + I xn--stjrdal-s1a
- 0x0035ffd6, // n0x15da c0x0000 (---------------) + I xn--stjrdalshalsen-sqb
- 0x00361152, // n0x15db c0x0000 (---------------) + I xn--stre-toten-zcb
- 0x003620cc, // n0x15dc c0x0000 (---------------) + I xn--tjme-hra
- 0x0036288f, // n0x15dd c0x0000 (---------------) + I xn--tnsberg-q1a
- 0x00362c4d, // n0x15de c0x0000 (---------------) + I xn--trany-yua
- 0x00362f8f, // n0x15df c0x0000 (---------------) + I xn--trgstad-r1a
- 0x0036334c, // n0x15e0 c0x0000 (---------------) + I xn--trna-woa
- 0x0036364d, // n0x15e1 c0x0000 (---------------) + I xn--troms-zua
- 0x0036398d, // n0x15e2 c0x0000 (---------------) + I xn--tysvr-vra
- 0x0036444e, // n0x15e3 c0x0000 (---------------) + I xn--unjrga-rta
- 0x00364f0c, // n0x15e4 c0x0000 (---------------) + I xn--vads-jra
- 0x0036520c, // n0x15e5 c0x0000 (---------------) + I xn--vard-jra
- 0x00365510, // n0x15e6 c0x0000 (---------------) + I xn--vegrshei-c0a
- 0x00369e91, // n0x15e7 c0x0000 (---------------) + I xn--vestvgy-ixa6o
- 0x0036a2cb, // n0x15e8 c0x0000 (---------------) + I xn--vg-yiab
- 0x0036ba8c, // n0x15e9 c0x0000 (---------------) + I xn--vgan-qoa
- 0x0036bd8e, // n0x15ea c0x0000 (---------------) + I xn--vgsy-qoa0j
- 0x0036f851, // n0x15eb c0x0000 (---------------) + I xn--vre-eiker-k8a
- 0x0036fc8e, // n0x15ec c0x0000 (---------------) + I xn--vrggt-xqad
- 0x0037000d, // n0x15ed c0x0000 (---------------) + I xn--vry-yla5g
- 0x0037238b, // n0x15ee c0x0000 (---------------) + I xn--yer-zna
- 0x00372c0f, // n0x15ef c0x0000 (---------------) + I xn--ygarden-p1a
- 0x00373554, // n0x15f0 c0x0000 (---------------) + I xn--ystre-slidre-ujb
- 0x00229d82, // n0x15f1 c0x0000 (---------------) + I gs
- 0x00229d82, // n0x15f2 c0x0000 (---------------) + I gs
- 0x00209883, // n0x15f3 c0x0000 (---------------) + I nes
- 0x00229d82, // n0x15f4 c0x0000 (---------------) + I gs
- 0x00209883, // n0x15f5 c0x0000 (---------------) + I nes
- 0x00229d82, // n0x15f6 c0x0000 (---------------) + I gs
- 0x00203642, // n0x15f7 c0x0000 (---------------) + I os
- 0x002420c5, // n0x15f8 c0x0000 (---------------) + I valer
- 0x0036f54c, // n0x15f9 c0x0000 (---------------) + I xn--vler-qoa
- 0x00229d82, // n0x15fa c0x0000 (---------------) + I gs
- 0x00229d82, // n0x15fb c0x0000 (---------------) + I gs
- 0x00203642, // n0x15fc c0x0000 (---------------) + I os
- 0x00229d82, // n0x15fd c0x0000 (---------------) + I gs
- 0x0028de85, // n0x15fe c0x0000 (---------------) + I heroy
- 0x002ae5c5, // n0x15ff c0x0000 (---------------) + I sande
- 0x00229d82, // n0x1600 c0x0000 (---------------) + I gs
- 0x00229d82, // n0x1601 c0x0000 (---------------) + I gs
- 0x00200fc2, // n0x1602 c0x0000 (---------------) + I bo
- 0x0028de85, // n0x1603 c0x0000 (---------------) + I heroy
- 0x00303bc9, // n0x1604 c0x0000 (---------------) + I xn--b-5ga
- 0x0032864c, // n0x1605 c0x0000 (---------------) + I xn--hery-ira
- 0x00229d82, // n0x1606 c0x0000 (---------------) + I gs
- 0x00229d82, // n0x1607 c0x0000 (---------------) + I gs
- 0x00229d82, // n0x1608 c0x0000 (---------------) + I gs
- 0x00229d82, // n0x1609 c0x0000 (---------------) + I gs
- 0x002420c5, // n0x160a c0x0000 (---------------) + I valer
- 0x00229d82, // n0x160b c0x0000 (---------------) + I gs
- 0x00229d82, // n0x160c c0x0000 (---------------) + I gs
- 0x00229d82, // n0x160d c0x0000 (---------------) + I gs
- 0x00229d82, // n0x160e c0x0000 (---------------) + I gs
- 0x00200fc2, // n0x160f c0x0000 (---------------) + I bo
- 0x00303bc9, // n0x1610 c0x0000 (---------------) + I xn--b-5ga
- 0x00229d82, // n0x1611 c0x0000 (---------------) + I gs
- 0x00229d82, // n0x1612 c0x0000 (---------------) + I gs
- 0x00229d82, // n0x1613 c0x0000 (---------------) + I gs
- 0x002ae5c5, // n0x1614 c0x0000 (---------------) + I sande
- 0x00229d82, // n0x1615 c0x0000 (---------------) + I gs
- 0x002ae5c5, // n0x1616 c0x0000 (---------------) + I sande
- 0x0032864c, // n0x1617 c0x0000 (---------------) + I xn--hery-ira
- 0x0036f54c, // n0x1618 c0x0000 (---------------) + I xn--vler-qoa
- 0x00314c43, // n0x1619 c0x0000 (---------------) + I biz
- 0x00222603, // n0x161a c0x0000 (---------------) + I com
- 0x0027a643, // n0x161b c0x0000 (---------------) + I edu
- 0x002157c3, // n0x161c c0x0000 (---------------) + I gov
- 0x0021c704, // n0x161d c0x0000 (---------------) + I info
- 0x00201603, // n0x161e c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x161f c0x0000 (---------------) + I org
- 0x00118048, // n0x1620 c0x0000 (---------------) + merseine
- 0x000e9784, // n0x1621 c0x0000 (---------------) + mine
- 0x000514c8, // n0x1622 c0x0000 (---------------) + shacknet
- 0x00201d82, // n0x1623 c0x0000 (---------------) + I ac
- 0x3ea07a02, // n0x1624 c0x00fa (n0x1633-n0x1634) + I co
- 0x0023f943, // n0x1625 c0x0000 (---------------) + I cri
- 0x00267e84, // n0x1626 c0x0000 (---------------) + I geek
- 0x00204b03, // n0x1627 c0x0000 (---------------) + I gen
- 0x00347604, // n0x1628 c0x0000 (---------------) + I govt
- 0x00360806, // n0x1629 c0x0000 (---------------) + I health
- 0x00211883, // n0x162a c0x0000 (---------------) + I iwi
- 0x0031b904, // n0x162b c0x0000 (---------------) + I kiwi
- 0x00282b05, // n0x162c c0x0000 (---------------) + I maori
- 0x0023f703, // n0x162d c0x0000 (---------------) + I mil
- 0x00201603, // n0x162e c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x162f c0x0000 (---------------) + I org
- 0x0024f64a, // n0x1630 c0x0000 (---------------) + I parliament
- 0x002ffb06, // n0x1631 c0x0000 (---------------) + I school
- 0x003417cc, // n0x1632 c0x0000 (---------------) + I xn--mori-qsa
- 0x000b8948, // n0x1633 c0x0000 (---------------) + blogspot
- 0x00207a02, // n0x1634 c0x0000 (---------------) + I co
- 0x00222603, // n0x1635 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1636 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1637 c0x0000 (---------------) + I gov
- 0x00225d03, // n0x1638 c0x0000 (---------------) + I med
- 0x002cb0c6, // n0x1639 c0x0000 (---------------) + I museum
- 0x00201603, // n0x163a c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x163b c0x0000 (---------------) + I org
- 0x002d8443, // n0x163c c0x0000 (---------------) + I pro
- 0x000100c2, // n0x163d c0x0000 (---------------) + ae
- 0x00010dc7, // n0x163e c0x0000 (---------------) + blogdns
- 0x000cce48, // n0x163f c0x0000 (---------------) + blogsite
- 0x00081e12, // n0x1640 c0x0000 (---------------) + boldlygoingnowhere
- 0x00035348, // n0x1641 c0x0000 (---------------) + dnsalias
- 0x0000b0c7, // n0x1642 c0x0000 (---------------) + dnsdojo
- 0x0000dccb, // n0x1643 c0x0000 (---------------) + doesntexist
- 0x000cd889, // n0x1644 c0x0000 (---------------) + dontexist
- 0x00035247, // n0x1645 c0x0000 (---------------) + doomdns
- 0x0000b006, // n0x1646 c0x0000 (---------------) + dvrdns
- 0x0009fe08, // n0x1647 c0x0000 (---------------) + dynalias
- 0x3f410c06, // n0x1648 c0x00fd (n0x1672-n0x1674) + dyndns
- 0x000a71cd, // n0x1649 c0x0000 (---------------) + endofinternet
- 0x0005fad0, // n0x164a c0x0000 (---------------) + endoftheinternet
- 0x00067647, // n0x164b c0x0000 (---------------) + from-me
- 0x0008b749, // n0x164c c0x0000 (---------------) + game-host
- 0x00053106, // n0x164d c0x0000 (---------------) + gotdns
- 0x0003e44a, // n0x164e c0x0000 (---------------) + hobby-site
- 0x00025c87, // n0x164f c0x0000 (---------------) + homedns
- 0x00019d07, // n0x1650 c0x0000 (---------------) + homeftp
- 0x0009f1c9, // n0x1651 c0x0000 (---------------) + homelinux
- 0x000a1908, // n0x1652 c0x0000 (---------------) + homeunix
- 0x000f494e, // n0x1653 c0x0000 (---------------) + is-a-bruinsfan
- 0x0007100e, // n0x1654 c0x0000 (---------------) + is-a-candidate
- 0x000a538f, // n0x1655 c0x0000 (---------------) + is-a-celticsfan
- 0x001402c9, // n0x1656 c0x0000 (---------------) + is-a-chef
- 0x00067d49, // n0x1657 c0x0000 (---------------) + is-a-geek
- 0x00082c0b, // n0x1658 c0x0000 (---------------) + is-a-knight
- 0x000987cf, // n0x1659 c0x0000 (---------------) + is-a-linux-user
- 0x000e034c, // n0x165a c0x0000 (---------------) + is-a-patsfan
- 0x000b02cb, // n0x165b c0x0000 (---------------) + is-a-soxfan
- 0x0011f8c8, // n0x165c c0x0000 (---------------) + is-found
- 0x000ef287, // n0x165d c0x0000 (---------------) + is-lost
- 0x000f2708, // n0x165e c0x0000 (---------------) + is-saved
- 0x0010350b, // n0x165f c0x0000 (---------------) + is-very-bad
- 0x0010c24c, // n0x1660 c0x0000 (---------------) + is-very-evil
- 0x0012148c, // n0x1661 c0x0000 (---------------) + is-very-good
- 0x001255cc, // n0x1662 c0x0000 (---------------) + is-very-nice
- 0x0012ba4d, // n0x1663 c0x0000 (---------------) + is-very-sweet
- 0x0014bd08, // n0x1664 c0x0000 (---------------) + isa-geek
- 0x00047a09, // n0x1665 c0x0000 (---------------) + kicks-ass
- 0x000bae4b, // n0x1666 c0x0000 (---------------) + misconfused
- 0x000d4e47, // n0x1667 c0x0000 (---------------) + podzone
- 0x000cccca, // n0x1668 c0x0000 (---------------) + readmyblog
- 0x000ff606, // n0x1669 c0x0000 (---------------) + selfip
- 0x000c828d, // n0x166a c0x0000 (---------------) + sellsyourhome
- 0x00016d08, // n0x166b c0x0000 (---------------) + servebbs
- 0x0009cb88, // n0x166c c0x0000 (---------------) + serveftp
- 0x000a2a49, // n0x166d c0x0000 (---------------) + servegame
- 0x000ea04c, // n0x166e c0x0000 (---------------) + stuff-4-sale
- 0x000054c2, // n0x166f c0x0000 (---------------) + us
- 0x0004db86, // n0x1670 c0x0000 (---------------) + webhop
- 0x00003502, // n0x1671 c0x0000 (---------------) + za
- 0x00006cc2, // n0x1672 c0x0000 (---------------) + go
- 0x00019d04, // n0x1673 c0x0000 (---------------) + home
- 0x00212fc3, // n0x1674 c0x0000 (---------------) + I abo
- 0x00201d82, // n0x1675 c0x0000 (---------------) + I ac
- 0x00222603, // n0x1676 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1677 c0x0000 (---------------) + I edu
- 0x0020dbc3, // n0x1678 c0x0000 (---------------) + I gob
- 0x00201ec3, // n0x1679 c0x0000 (---------------) + I ing
- 0x00225d03, // n0x167a c0x0000 (---------------) + I med
- 0x00201603, // n0x167b c0x0000 (---------------) + I net
- 0x00214103, // n0x167c c0x0000 (---------------) + I nom
- 0x0021f5c3, // n0x167d c0x0000 (---------------) + I org
- 0x002dc183, // n0x167e c0x0000 (---------------) + I sld
- 0x00222603, // n0x167f c0x0000 (---------------) + I com
- 0x0027a643, // n0x1680 c0x0000 (---------------) + I edu
- 0x0020dbc3, // n0x1681 c0x0000 (---------------) + I gob
- 0x0023f703, // n0x1682 c0x0000 (---------------) + I mil
- 0x00201603, // n0x1683 c0x0000 (---------------) + I net
- 0x00214103, // n0x1684 c0x0000 (---------------) + I nom
- 0x0021f5c3, // n0x1685 c0x0000 (---------------) + I org
- 0x00222603, // n0x1686 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1687 c0x0000 (---------------) + I edu
- 0x0021f5c3, // n0x1688 c0x0000 (---------------) + I org
- 0x00222603, // n0x1689 c0x0000 (---------------) + I com
- 0x0027a643, // n0x168a c0x0000 (---------------) + I edu
- 0x002157c3, // n0x168b c0x0000 (---------------) + I gov
- 0x00200041, // n0x168c c0x0000 (---------------) + I i
- 0x0023f703, // n0x168d c0x0000 (---------------) + I mil
- 0x00201603, // n0x168e c0x0000 (---------------) + I net
- 0x00224203, // n0x168f c0x0000 (---------------) + I ngo
- 0x0021f5c3, // n0x1690 c0x0000 (---------------) + I org
- 0x00314c43, // n0x1691 c0x0000 (---------------) + I biz
- 0x00222603, // n0x1692 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1693 c0x0000 (---------------) + I edu
- 0x002a6ec3, // n0x1694 c0x0000 (---------------) + I fam
- 0x0020dbc3, // n0x1695 c0x0000 (---------------) + I gob
- 0x00279e43, // n0x1696 c0x0000 (---------------) + I gok
- 0x002824c3, // n0x1697 c0x0000 (---------------) + I gon
- 0x002d9083, // n0x1698 c0x0000 (---------------) + I gop
- 0x00206cc3, // n0x1699 c0x0000 (---------------) + I gos
- 0x002157c3, // n0x169a c0x0000 (---------------) + I gov
- 0x0021c704, // n0x169b c0x0000 (---------------) + I info
- 0x00201603, // n0x169c c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x169d c0x0000 (---------------) + I org
- 0x00205e43, // n0x169e c0x0000 (---------------) + I web
- 0x0021b805, // n0x169f c0x0000 (---------------) + I 6bone
- 0x002e7744, // n0x16a0 c0x0000 (---------------) + I agro
- 0x00245143, // n0x16a1 c0x0000 (---------------) + I aid
- 0x00201383, // n0x16a2 c0x0000 (---------------) + I art
- 0x00200103, // n0x16a3 c0x0000 (---------------) + I atm
- 0x002fd5c8, // n0x16a4 c0x0000 (---------------) + I augustow
- 0x0022ccc4, // n0x16a5 c0x0000 (---------------) + I auto
- 0x0023788a, // n0x16a6 c0x0000 (---------------) + I babia-gora
- 0x00342f86, // n0x16a7 c0x0000 (---------------) + I bedzin
- 0x00361587, // n0x16a8 c0x0000 (---------------) + I beskidy
- 0x0021a58a, // n0x16a9 c0x0000 (---------------) + I bialowieza
- 0x00239b09, // n0x16aa c0x0000 (---------------) + I bialystok
- 0x00371087, // n0x16ab c0x0000 (---------------) + I bielawa
- 0x003747ca, // n0x16ac c0x0000 (---------------) + I bieszczady
- 0x00314c43, // n0x16ad c0x0000 (---------------) + I biz
- 0x0033fa8b, // n0x16ae c0x0000 (---------------) + I boleslawiec
- 0x002c6a89, // n0x16af c0x0000 (---------------) + I bydgoszcz
- 0x002ca405, // n0x16b0 c0x0000 (---------------) + I bytom
- 0x002c8e47, // n0x16b1 c0x0000 (---------------) + I cieszyn
- 0x00007a02, // n0x16b2 c0x0000 (---------------) + co
- 0x00222603, // n0x16b3 c0x0000 (---------------) + I com
- 0x002fcf87, // n0x16b4 c0x0000 (---------------) + I czeladz
- 0x00223345, // n0x16b5 c0x0000 (---------------) + I czest
- 0x0036c4c9, // n0x16b6 c0x0000 (---------------) + I dlugoleka
- 0x0027a643, // n0x16b7 c0x0000 (---------------) + I edu
- 0x00220446, // n0x16b8 c0x0000 (---------------) + I elblag
- 0x002b7d03, // n0x16b9 c0x0000 (---------------) + I elk
- 0x002dff83, // n0x16ba c0x0000 (---------------) + I gda
- 0x002f9d86, // n0x16bb c0x0000 (---------------) + I gdansk
- 0x00312146, // n0x16bc c0x0000 (---------------) + I gdynia
- 0x00211807, // n0x16bd c0x0000 (---------------) + I gliwice
- 0x0021e106, // n0x16be c0x0000 (---------------) + I glogow
- 0x00225fc5, // n0x16bf c0x0000 (---------------) + I gmina
- 0x0025f607, // n0x16c0 c0x0000 (---------------) + I gniezno
- 0x002ff187, // n0x16c1 c0x0000 (---------------) + I gorlice
- 0x412157c3, // n0x16c2 c0x0104 (n0x174a-n0x1753) + I gov
- 0x00307287, // n0x16c3 c0x0000 (---------------) + I grajewo
- 0x00229d83, // n0x16c4 c0x0000 (---------------) + I gsm
- 0x002e7b85, // n0x16c5 c0x0000 (---------------) + I ilawa
- 0x0021c704, // n0x16c6 c0x0000 (---------------) + I info
- 0x002570c3, // n0x16c7 c0x0000 (---------------) + I irc
- 0x0033e5c8, // n0x16c8 c0x0000 (---------------) + I jaworzno
- 0x0032390c, // n0x16c9 c0x0000 (---------------) + I jelenia-gora
- 0x002a9e05, // n0x16ca c0x0000 (---------------) + I jgora
- 0x002b0a06, // n0x16cb c0x0000 (---------------) + I kalisz
- 0x002fce47, // n0x16cc c0x0000 (---------------) + I karpacz
- 0x00201347, // n0x16cd c0x0000 (---------------) + I kartuzy
- 0x00223f07, // n0x16ce c0x0000 (---------------) + I kaszuby
- 0x00248588, // n0x16cf c0x0000 (---------------) + I katowice
- 0x0022d4cf, // n0x16d0 c0x0000 (---------------) + I kazimierz-dolny
- 0x00349bc5, // n0x16d1 c0x0000 (---------------) + I kepno
- 0x0028e847, // n0x16d2 c0x0000 (---------------) + I ketrzyn
- 0x002400c7, // n0x16d3 c0x0000 (---------------) + I klodzko
- 0x0029ed8a, // n0x16d4 c0x0000 (---------------) + I kobierzyce
- 0x002a61c9, // n0x16d5 c0x0000 (---------------) + I kolobrzeg
- 0x002cf545, // n0x16d6 c0x0000 (---------------) + I konin
- 0x002d0e4a, // n0x16d7 c0x0000 (---------------) + I konskowola
- 0x002ad846, // n0x16d8 c0x0000 (---------------) + I krakow
- 0x002b7d85, // n0x16d9 c0x0000 (---------------) + I kutno
- 0x002b1a44, // n0x16da c0x0000 (---------------) + I lapy
- 0x0023a246, // n0x16db c0x0000 (---------------) + I lebork
- 0x00254fc7, // n0x16dc c0x0000 (---------------) + I legnica
- 0x0021ba87, // n0x16dd c0x0000 (---------------) + I lezajsk
- 0x003115c8, // n0x16de c0x0000 (---------------) + I limanowa
- 0x002d4105, // n0x16df c0x0000 (---------------) + I lomza
- 0x00223246, // n0x16e0 c0x0000 (---------------) + I lowicz
- 0x002a42c5, // n0x16e1 c0x0000 (---------------) + I lubin
- 0x0022fbc5, // n0x16e2 c0x0000 (---------------) + I lukow
- 0x0021d884, // n0x16e3 c0x0000 (---------------) + I mail
- 0x00221947, // n0x16e4 c0x0000 (---------------) + I malbork
- 0x0031760a, // n0x16e5 c0x0000 (---------------) + I malopolska
- 0x00208088, // n0x16e6 c0x0000 (---------------) + I mazowsze
- 0x002eb986, // n0x16e7 c0x0000 (---------------) + I mazury
- 0x00302dc5, // n0x16e8 c0x0000 (---------------) + I mbone
- 0x00225d03, // n0x16e9 c0x0000 (---------------) + I med
- 0x0027ab45, // n0x16ea c0x0000 (---------------) + I media
- 0x002d3a06, // n0x16eb c0x0000 (---------------) + I miasta
- 0x00240b86, // n0x16ec c0x0000 (---------------) + I mielec
- 0x003096c6, // n0x16ed c0x0000 (---------------) + I mielno
- 0x0023f703, // n0x16ee c0x0000 (---------------) + I mil
- 0x003536c7, // n0x16ef c0x0000 (---------------) + I mragowo
- 0x00240045, // n0x16f0 c0x0000 (---------------) + I naklo
- 0x00201603, // n0x16f1 c0x0000 (---------------) + I net
- 0x00224203, // n0x16f2 c0x0000 (---------------) + I ngo
- 0x0027324d, // n0x16f3 c0x0000 (---------------) + I nieruchomosci
- 0x00214103, // n0x16f4 c0x0000 (---------------) + I nom
- 0x003116c8, // n0x16f5 c0x0000 (---------------) + I nowaruda
- 0x0027a084, // n0x16f6 c0x0000 (---------------) + I nysa
- 0x00272705, // n0x16f7 c0x0000 (---------------) + I olawa
- 0x0029ec86, // n0x16f8 c0x0000 (---------------) + I olecko
- 0x002ffc06, // n0x16f9 c0x0000 (---------------) + I olkusz
- 0x002a0c47, // n0x16fa c0x0000 (---------------) + I olsztyn
- 0x00239e47, // n0x16fb c0x0000 (---------------) + I opoczno
- 0x002a8505, // n0x16fc c0x0000 (---------------) + I opole
- 0x0021f5c3, // n0x16fd c0x0000 (---------------) + I org
- 0x00228587, // n0x16fe c0x0000 (---------------) + I ostroda
- 0x00229089, // n0x16ff c0x0000 (---------------) + I ostroleka
- 0x00266449, // n0x1700 c0x0000 (---------------) + I ostrowiec
- 0x0022ceca, // n0x1701 c0x0000 (---------------) + I ostrowwlkp
- 0x002416c2, // n0x1702 c0x0000 (---------------) + I pc
- 0x002e7b44, // n0x1703 c0x0000 (---------------) + I pila
- 0x002cfa04, // n0x1704 c0x0000 (---------------) + I pisz
- 0x002d4787, // n0x1705 c0x0000 (---------------) + I podhale
- 0x002d4b48, // n0x1706 c0x0000 (---------------) + I podlasie
- 0x002d5249, // n0x1707 c0x0000 (---------------) + I polkowice
- 0x0021a889, // n0x1708 c0x0000 (---------------) + I pomorskie
- 0x002d5e07, // n0x1709 c0x0000 (---------------) + I pomorze
- 0x002249c6, // n0x170a c0x0000 (---------------) + I powiat
- 0x002d7986, // n0x170b c0x0000 (---------------) + I poznan
- 0x002d82c4, // n0x170c c0x0000 (---------------) + I priv
- 0x002d844a, // n0x170d c0x0000 (---------------) + I prochowice
- 0x002db608, // n0x170e c0x0000 (---------------) + I pruszkow
- 0x002db809, // n0x170f c0x0000 (---------------) + I przeworsk
- 0x002e5a06, // n0x1710 c0x0000 (---------------) + I pulawy
- 0x00358945, // n0x1711 c0x0000 (---------------) + I radom
- 0x00207f48, // n0x1712 c0x0000 (---------------) + I rawa-maz
- 0x002bfd0a, // n0x1713 c0x0000 (---------------) + I realestate
- 0x00280183, // n0x1714 c0x0000 (---------------) + I rel
- 0x00311106, // n0x1715 c0x0000 (---------------) + I rybnik
- 0x002d5f07, // n0x1716 c0x0000 (---------------) + I rzeszow
- 0x0032d185, // n0x1717 c0x0000 (---------------) + I sanok
- 0x00279f45, // n0x1718 c0x0000 (---------------) + I sejny
- 0x002488c3, // n0x1719 c0x0000 (---------------) + I sex
- 0x0024f584, // n0x171a c0x0000 (---------------) + I shop
- 0x002d4c87, // n0x171b c0x0000 (---------------) + I siedlce
- 0x0022a705, // n0x171c c0x0000 (---------------) + I sklep
- 0x0027f247, // n0x171d c0x0000 (---------------) + I skoczow
- 0x002f20c5, // n0x171e c0x0000 (---------------) + I slask
- 0x002e0f86, // n0x171f c0x0000 (---------------) + I slupsk
- 0x002e2985, // n0x1720 c0x0000 (---------------) + I sopot
- 0x00270783, // n0x1721 c0x0000 (---------------) + I sos
- 0x00270789, // n0x1722 c0x0000 (---------------) + I sosnowiec
- 0x002724cc, // n0x1723 c0x0000 (---------------) + I stalowa-wola
- 0x002ac80c, // n0x1724 c0x0000 (---------------) + I starachowice
- 0x0021b408, // n0x1725 c0x0000 (---------------) + I stargard
- 0x002c7507, // n0x1726 c0x0000 (---------------) + I suwalki
- 0x002ed5c8, // n0x1727 c0x0000 (---------------) + I swidnica
- 0x002ed94a, // n0x1728 c0x0000 (---------------) + I swiebodzin
- 0x002edd0b, // n0x1729 c0x0000 (---------------) + I swinoujscie
- 0x002c6bc8, // n0x172a c0x0000 (---------------) + I szczecin
- 0x002b0b08, // n0x172b c0x0000 (---------------) + I szczytno
- 0x0020b306, // n0x172c c0x0000 (---------------) + I szkola
- 0x00201685, // n0x172d c0x0000 (---------------) + I targi
- 0x0021caca, // n0x172e c0x0000 (---------------) + I tarnobrzeg
- 0x00230a45, // n0x172f c0x0000 (---------------) + I tgory
- 0x00200142, // n0x1730 c0x0000 (---------------) + I tm
- 0x002bd047, // n0x1731 c0x0000 (---------------) + I tourism
- 0x00296ac6, // n0x1732 c0x0000 (---------------) + I travel
- 0x00333c05, // n0x1733 c0x0000 (---------------) + I turek
- 0x002ef809, // n0x1734 c0x0000 (---------------) + I turystyka
- 0x00357e85, // n0x1735 c0x0000 (---------------) + I tychy
- 0x0028cd86, // n0x1736 c0x0000 (---------------) + I usenet
- 0x002a5f45, // n0x1737 c0x0000 (---------------) + I ustka
- 0x0030fd89, // n0x1738 c0x0000 (---------------) + I walbrzych
- 0x0022be06, // n0x1739 c0x0000 (---------------) + I warmia
- 0x00248d08, // n0x173a c0x0000 (---------------) + I warszawa
- 0x00255403, // n0x173b c0x0000 (---------------) + I waw
- 0x00208f46, // n0x173c c0x0000 (---------------) + I wegrow
- 0x00271986, // n0x173d c0x0000 (---------------) + I wielun
- 0x0025ff45, // n0x173e c0x0000 (---------------) + I wlocl
- 0x0025ff49, // n0x173f c0x0000 (---------------) + I wloclawek
- 0x00208d49, // n0x1740 c0x0000 (---------------) + I wodzislaw
- 0x003073c7, // n0x1741 c0x0000 (---------------) + I wolomin
- 0x002ad984, // n0x1742 c0x0000 (---------------) + I wroc
- 0x002ad987, // n0x1743 c0x0000 (---------------) + I wroclaw
- 0x0021a789, // n0x1744 c0x0000 (---------------) + I zachpomor
- 0x0023c885, // n0x1745 c0x0000 (---------------) + I zagan
- 0x0020b688, // n0x1746 c0x0000 (---------------) + I zakopane
- 0x0031e3c5, // n0x1747 c0x0000 (---------------) + I zarow
- 0x00228805, // n0x1748 c0x0000 (---------------) + I zgora
- 0x002489c9, // n0x1749 c0x0000 (---------------) + I zgorzelec
- 0x002001c2, // n0x174a c0x0000 (---------------) + I pa
- 0x00205982, // n0x174b c0x0000 (---------------) + I po
- 0x00206102, // n0x174c c0x0000 (---------------) + I so
- 0x002c4342, // n0x174d c0x0000 (---------------) + I sr
- 0x00208b89, // n0x174e c0x0000 (---------------) + I starostwo
- 0x00204142, // n0x174f c0x0000 (---------------) + I ug
- 0x002049c2, // n0x1750 c0x0000 (---------------) + I um
- 0x00224984, // n0x1751 c0x0000 (---------------) + I upow
- 0x0023e202, // n0x1752 c0x0000 (---------------) + I uw
- 0x00207a02, // n0x1753 c0x0000 (---------------) + I co
- 0x0027a643, // n0x1754 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1755 c0x0000 (---------------) + I gov
- 0x00201603, // n0x1756 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1757 c0x0000 (---------------) + I org
- 0x00201d82, // n0x1758 c0x0000 (---------------) + I ac
- 0x00314c43, // n0x1759 c0x0000 (---------------) + I biz
- 0x00222603, // n0x175a c0x0000 (---------------) + I com
- 0x0027a643, // n0x175b c0x0000 (---------------) + I edu
- 0x002090c3, // n0x175c c0x0000 (---------------) + I est
- 0x002157c3, // n0x175d c0x0000 (---------------) + I gov
- 0x0021c704, // n0x175e c0x0000 (---------------) + I info
- 0x00208e44, // n0x175f c0x0000 (---------------) + I isla
- 0x0022aec4, // n0x1760 c0x0000 (---------------) + I name
- 0x00201603, // n0x1761 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1762 c0x0000 (---------------) + I org
- 0x002d8443, // n0x1763 c0x0000 (---------------) + I pro
- 0x002d9104, // n0x1764 c0x0000 (---------------) + I prof
- 0x00270403, // n0x1765 c0x0000 (---------------) + I aca
- 0x0020d2c3, // n0x1766 c0x0000 (---------------) + I bar
- 0x002368c3, // n0x1767 c0x0000 (---------------) + I cpa
- 0x00202e03, // n0x1768 c0x0000 (---------------) + I eng
- 0x002aa003, // n0x1769 c0x0000 (---------------) + I jur
- 0x00208ec3, // n0x176a c0x0000 (---------------) + I law
- 0x00225d03, // n0x176b c0x0000 (---------------) + I med
- 0x00222603, // n0x176c c0x0000 (---------------) + I com
- 0x0027a643, // n0x176d c0x0000 (---------------) + I edu
- 0x002157c3, // n0x176e c0x0000 (---------------) + I gov
- 0x00201603, // n0x176f c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1770 c0x0000 (---------------) + I org
- 0x002d40c3, // n0x1771 c0x0000 (---------------) + I plo
- 0x002f0e43, // n0x1772 c0x0000 (---------------) + I sec
- 0x000b8948, // n0x1773 c0x0000 (---------------) + blogspot
- 0x00222603, // n0x1774 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1775 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1776 c0x0000 (---------------) + I gov
- 0x00223a83, // n0x1777 c0x0000 (---------------) + I int
- 0x00201603, // n0x1778 c0x0000 (---------------) + I net
- 0x0023da04, // n0x1779 c0x0000 (---------------) + I nome
- 0x0021f5c3, // n0x177a c0x0000 (---------------) + I org
- 0x002aa584, // n0x177b c0x0000 (---------------) + I publ
- 0x002b3905, // n0x177c c0x0000 (---------------) + I belau
- 0x00207a02, // n0x177d c0x0000 (---------------) + I co
- 0x00202542, // n0x177e c0x0000 (---------------) + I ed
- 0x00206cc2, // n0x177f c0x0000 (---------------) + I go
- 0x00201602, // n0x1780 c0x0000 (---------------) + I ne
- 0x00200bc2, // n0x1781 c0x0000 (---------------) + I or
- 0x00222603, // n0x1782 c0x0000 (---------------) + I com
- 0x00239dc4, // n0x1783 c0x0000 (---------------) + I coop
- 0x0027a643, // n0x1784 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1785 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x1786 c0x0000 (---------------) + I mil
- 0x00201603, // n0x1787 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1788 c0x0000 (---------------) + I org
- 0x00222603, // n0x1789 c0x0000 (---------------) + I com
- 0x0027a643, // n0x178a c0x0000 (---------------) + I edu
- 0x002157c3, // n0x178b c0x0000 (---------------) + I gov
- 0x0023f703, // n0x178c c0x0000 (---------------) + I mil
- 0x0022aec4, // n0x178d c0x0000 (---------------) + I name
- 0x00201603, // n0x178e c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x178f c0x0000 (---------------) + I org
- 0x002526c3, // n0x1790 c0x0000 (---------------) + I sch
- 0x0029cfc4, // n0x1791 c0x0000 (---------------) + I asso
- 0x000b8948, // n0x1792 c0x0000 (---------------) + blogspot
- 0x00222603, // n0x1793 c0x0000 (---------------) + I com
- 0x00214103, // n0x1794 c0x0000 (---------------) + I nom
- 0x002180c4, // n0x1795 c0x0000 (---------------) + I arts
- 0x000b8948, // n0x1796 c0x0000 (---------------) + blogspot
- 0x00222603, // n0x1797 c0x0000 (---------------) + I com
- 0x00245bc4, // n0x1798 c0x0000 (---------------) + I firm
- 0x0021c704, // n0x1799 c0x0000 (---------------) + I info
- 0x00214103, // n0x179a c0x0000 (---------------) + I nom
- 0x0020ddc2, // n0x179b c0x0000 (---------------) + I nt
- 0x0021f5c3, // n0x179c c0x0000 (---------------) + I org
- 0x00227783, // n0x179d c0x0000 (---------------) + I rec
- 0x002e9885, // n0x179e c0x0000 (---------------) + I store
- 0x00200142, // n0x179f c0x0000 (---------------) + I tm
- 0x002c3243, // n0x17a0 c0x0000 (---------------) + I www
- 0x00201d82, // n0x17a1 c0x0000 (---------------) + I ac
- 0x00207a02, // n0x17a2 c0x0000 (---------------) + I co
- 0x0027a643, // n0x17a3 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x17a4 c0x0000 (---------------) + I gov
- 0x002015c2, // n0x17a5 c0x0000 (---------------) + I in
- 0x0021f5c3, // n0x17a6 c0x0000 (---------------) + I org
- 0x00201d82, // n0x17a7 c0x0000 (---------------) + I ac
- 0x00374987, // n0x17a8 c0x0000 (---------------) + I adygeya
- 0x00315f05, // n0x17a9 c0x0000 (---------------) + I altai
- 0x00285484, // n0x17aa c0x0000 (---------------) + I amur
- 0x002ddf06, // n0x17ab c0x0000 (---------------) + I amursk
- 0x00252c0b, // n0x17ac c0x0000 (---------------) + I arkhangelsk
- 0x00278689, // n0x17ad c0x0000 (---------------) + I astrakhan
- 0x002b0946, // n0x17ae c0x0000 (---------------) + I baikal
- 0x0031dfc9, // n0x17af c0x0000 (---------------) + I bashkiria
- 0x002bd708, // n0x17b0 c0x0000 (---------------) + I belgorod
- 0x002052c3, // n0x17b1 c0x0000 (---------------) + I bir
- 0x00221e47, // n0x17b2 c0x0000 (---------------) + I bryansk
- 0x00220ec8, // n0x17b3 c0x0000 (---------------) + I buryatia
- 0x00367803, // n0x17b4 c0x0000 (---------------) + I cbg
- 0x0024a4c4, // n0x17b5 c0x0000 (---------------) + I chel
- 0x0024d40b, // n0x17b6 c0x0000 (---------------) + I chelyabinsk
- 0x0029bd05, // n0x17b7 c0x0000 (---------------) + I chita
- 0x0028c388, // n0x17b8 c0x0000 (---------------) + I chukotka
- 0x003370c9, // n0x17b9 c0x0000 (---------------) + I chuvashia
- 0x0025fec3, // n0x17ba c0x0000 (---------------) + I cmw
- 0x00222603, // n0x17bb c0x0000 (---------------) + I com
- 0x00319708, // n0x17bc c0x0000 (---------------) + I dagestan
- 0x00278fc7, // n0x17bd c0x0000 (---------------) + I dudinka
- 0x002e8a86, // n0x17be c0x0000 (---------------) + I e-burg
- 0x0027a643, // n0x17bf c0x0000 (---------------) + I edu
- 0x00333407, // n0x17c0 c0x0000 (---------------) + I fareast
- 0x002157c3, // n0x17c1 c0x0000 (---------------) + I gov
- 0x00231e86, // n0x17c2 c0x0000 (---------------) + I grozny
- 0x00223a83, // n0x17c3 c0x0000 (---------------) + I int
- 0x0022a5c7, // n0x17c4 c0x0000 (---------------) + I irkutsk
- 0x00269407, // n0x17c5 c0x0000 (---------------) + I ivanovo
- 0x00358647, // n0x17c6 c0x0000 (---------------) + I izhevsk
- 0x002218c5, // n0x17c7 c0x0000 (---------------) + I jamal
- 0x00202703, // n0x17c8 c0x0000 (---------------) + I jar
- 0x002b180b, // n0x17c9 c0x0000 (---------------) + I joshkar-ola
- 0x0021bc08, // n0x17ca c0x0000 (---------------) + I k-uralsk
- 0x0023b9c8, // n0x17cb c0x0000 (---------------) + I kalmykia
- 0x0036c686, // n0x17cc c0x0000 (---------------) + I kaluga
- 0x00342609, // n0x17cd c0x0000 (---------------) + I kamchatka
- 0x00302a87, // n0x17ce c0x0000 (---------------) + I karelia
- 0x002f8385, // n0x17cf c0x0000 (---------------) + I kazan
- 0x0023c184, // n0x17d0 c0x0000 (---------------) + I kchr
- 0x00317208, // n0x17d1 c0x0000 (---------------) + I kemerovo
- 0x00241bca, // n0x17d2 c0x0000 (---------------) + I khabarovsk
- 0x00241e09, // n0x17d3 c0x0000 (---------------) + I khakassia
- 0x00267f43, // n0x17d4 c0x0000 (---------------) + I khv
- 0x0033a9c5, // n0x17d5 c0x0000 (---------------) + I kirov
- 0x00289683, // n0x17d6 c0x0000 (---------------) + I kms
- 0x002fc106, // n0x17d7 c0x0000 (---------------) + I koenig
- 0x002d12c4, // n0x17d8 c0x0000 (---------------) + I komi
- 0x002fed88, // n0x17d9 c0x0000 (---------------) + I kostroma
- 0x002ade8b, // n0x17da c0x0000 (---------------) + I krasnoyarsk
- 0x0034c305, // n0x17db c0x0000 (---------------) + I kuban
- 0x002b3686, // n0x17dc c0x0000 (---------------) + I kurgan
- 0x002b6085, // n0x17dd c0x0000 (---------------) + I kursk
- 0x002b7088, // n0x17de c0x0000 (---------------) + I kustanai
- 0x002b7ec7, // n0x17df c0x0000 (---------------) + I kuzbass
- 0x002020c7, // n0x17e0 c0x0000 (---------------) + I lipetsk
- 0x00309e07, // n0x17e1 c0x0000 (---------------) + I magadan
- 0x0021ea88, // n0x17e2 c0x0000 (---------------) + I magnitka
- 0x0023cb44, // n0x17e3 c0x0000 (---------------) + I mari
- 0x0023cb47, // n0x17e4 c0x0000 (---------------) + I mari-el
- 0x0033dec6, // n0x17e5 c0x0000 (---------------) + I marine
- 0x0023f703, // n0x17e6 c0x0000 (---------------) + I mil
- 0x002c16c8, // n0x17e7 c0x0000 (---------------) + I mordovia
- 0x002c42c6, // n0x17e8 c0x0000 (---------------) + I mosreg
- 0x00230643, // n0x17e9 c0x0000 (---------------) + I msk
- 0x002c9208, // n0x17ea c0x0000 (---------------) + I murmansk
- 0x002cbd85, // n0x17eb c0x0000 (---------------) + I mytis
- 0x002879c8, // n0x17ec c0x0000 (---------------) + I nakhodka
- 0x0027a847, // n0x17ed c0x0000 (---------------) + I nalchik
- 0x00201603, // n0x17ee c0x0000 (---------------) + I net
- 0x003627c3, // n0x17ef c0x0000 (---------------) + I nkz
- 0x00286544, // n0x17f0 c0x0000 (---------------) + I nnov
- 0x00310807, // n0x17f1 c0x0000 (---------------) + I norilsk
- 0x00213b83, // n0x17f2 c0x0000 (---------------) + I nov
- 0x002694cb, // n0x17f3 c0x0000 (---------------) + I novosibirsk
- 0x0020ca43, // n0x17f4 c0x0000 (---------------) + I nsk
- 0x00230604, // n0x17f5 c0x0000 (---------------) + I omsk
- 0x002e9908, // n0x17f6 c0x0000 (---------------) + I orenburg
- 0x0021f5c3, // n0x17f7 c0x0000 (---------------) + I org
- 0x002e90c5, // n0x17f8 c0x0000 (---------------) + I oryol
- 0x0024d185, // n0x17f9 c0x0000 (---------------) + I oskol
- 0x00344b06, // n0x17fa c0x0000 (---------------) + I palana
- 0x0021e4c5, // n0x17fb c0x0000 (---------------) + I penza
- 0x002cc144, // n0x17fc c0x0000 (---------------) + I perm
- 0x00200f02, // n0x17fd c0x0000 (---------------) + I pp
- 0x002dbac3, // n0x17fe c0x0000 (---------------) + I ptz
- 0x002b1aca, // n0x17ff c0x0000 (---------------) + I pyatigorsk
- 0x00347143, // n0x1800 c0x0000 (---------------) + I rnd
- 0x002474c9, // n0x1801 c0x0000 (---------------) + I rubtsovsk
- 0x00237046, // n0x1802 c0x0000 (---------------) + I ryazan
- 0x0022ca48, // n0x1803 c0x0000 (---------------) + I sakhalin
- 0x00288746, // n0x1804 c0x0000 (---------------) + I samara
- 0x0023ea87, // n0x1805 c0x0000 (---------------) + I saratov
- 0x002e0088, // n0x1806 c0x0000 (---------------) + I simbirsk
- 0x002483c8, // n0x1807 c0x0000 (---------------) + I smolensk
- 0x002e1643, // n0x1808 c0x0000 (---------------) + I snz
- 0x002e65c3, // n0x1809 c0x0000 (---------------) + I spb
- 0x0023edc9, // n0x180a c0x0000 (---------------) + I stavropol
- 0x002f5e83, // n0x180b c0x0000 (---------------) + I stv
- 0x002f4446, // n0x180c c0x0000 (---------------) + I surgut
- 0x002162c6, // n0x180d c0x0000 (---------------) + I syzran
- 0x003476c6, // n0x180e c0x0000 (---------------) + I tambov
- 0x00224b09, // n0x180f c0x0000 (---------------) + I tatarstan
- 0x002b8784, // n0x1810 c0x0000 (---------------) + I test
- 0x0022a503, // n0x1811 c0x0000 (---------------) + I tom
- 0x00243a85, // n0x1812 c0x0000 (---------------) + I tomsk
- 0x0036b849, // n0x1813 c0x0000 (---------------) + I tsaritsyn
- 0x002021c3, // n0x1814 c0x0000 (---------------) + I tsk
- 0x002ef544, // n0x1815 c0x0000 (---------------) + I tula
- 0x002f0504, // n0x1816 c0x0000 (---------------) + I tuva
- 0x002f0944, // n0x1817 c0x0000 (---------------) + I tver
- 0x002db486, // n0x1818 c0x0000 (---------------) + I tyumen
- 0x00302183, // n0x1819 c0x0000 (---------------) + I udm
- 0x00302188, // n0x181a c0x0000 (---------------) + I udmurtia
- 0x00256788, // n0x181b c0x0000 (---------------) + I ulan-ude
- 0x002f15c6, // n0x181c c0x0000 (---------------) + I vdonsk
- 0x002f818b, // n0x181d c0x0000 (---------------) + I vladikavkaz
- 0x002f84c8, // n0x181e c0x0000 (---------------) + I vladimir
- 0x002f86cb, // n0x181f c0x0000 (---------------) + I vladivostok
- 0x002f9149, // n0x1820 c0x0000 (---------------) + I volgograd
- 0x002f9c87, // n0x1821 c0x0000 (---------------) + I vologda
- 0x002faa88, // n0x1822 c0x0000 (---------------) + I voronezh
- 0x002fbc43, // n0x1823 c0x0000 (---------------) + I vrn
- 0x00205746, // n0x1824 c0x0000 (---------------) + I vyatka
- 0x0031ab07, // n0x1825 c0x0000 (---------------) + I yakutia
- 0x00292485, // n0x1826 c0x0000 (---------------) + I yamal
- 0x0032b3c9, // n0x1827 c0x0000 (---------------) + I yaroslavl
- 0x00317c0d, // n0x1828 c0x0000 (---------------) + I yekaterinburg
- 0x0022c891, // n0x1829 c0x0000 (---------------) + I yuzhno-sakhalinsk
- 0x00245f85, // n0x182a c0x0000 (---------------) + I zgrad
- 0x00201d82, // n0x182b c0x0000 (---------------) + I ac
- 0x00207a02, // n0x182c c0x0000 (---------------) + I co
- 0x00222603, // n0x182d c0x0000 (---------------) + I com
- 0x0027a643, // n0x182e c0x0000 (---------------) + I edu
- 0x00368f84, // n0x182f c0x0000 (---------------) + I gouv
- 0x002157c3, // n0x1830 c0x0000 (---------------) + I gov
- 0x00223a83, // n0x1831 c0x0000 (---------------) + I int
- 0x0023f703, // n0x1832 c0x0000 (---------------) + I mil
- 0x00201603, // n0x1833 c0x0000 (---------------) + I net
- 0x00222603, // n0x1834 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1835 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1836 c0x0000 (---------------) + I gov
- 0x00225d03, // n0x1837 c0x0000 (---------------) + I med
- 0x00201603, // n0x1838 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1839 c0x0000 (---------------) + I org
- 0x00200f43, // n0x183a c0x0000 (---------------) + I pub
- 0x002526c3, // n0x183b c0x0000 (---------------) + I sch
- 0x00222603, // n0x183c c0x0000 (---------------) + I com
- 0x0027a643, // n0x183d c0x0000 (---------------) + I edu
- 0x002157c3, // n0x183e c0x0000 (---------------) + I gov
- 0x00201603, // n0x183f c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1840 c0x0000 (---------------) + I org
- 0x00222603, // n0x1841 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1842 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1843 c0x0000 (---------------) + I gov
- 0x00201603, // n0x1844 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1845 c0x0000 (---------------) + I org
- 0x00222603, // n0x1846 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1847 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1848 c0x0000 (---------------) + I gov
- 0x0021c704, // n0x1849 c0x0000 (---------------) + I info
- 0x00225d03, // n0x184a c0x0000 (---------------) + I med
- 0x00201603, // n0x184b c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x184c c0x0000 (---------------) + I org
- 0x00292602, // n0x184d c0x0000 (---------------) + I tv
- 0x00200101, // n0x184e c0x0000 (---------------) + I a
- 0x00201d82, // n0x184f c0x0000 (---------------) + I ac
- 0x00200001, // n0x1850 c0x0000 (---------------) + I b
- 0x00304282, // n0x1851 c0x0000 (---------------) + I bd
- 0x000b8948, // n0x1852 c0x0000 (---------------) + blogspot
- 0x002167c5, // n0x1853 c0x0000 (---------------) + I brand
- 0x00200601, // n0x1854 c0x0000 (---------------) + I c
- 0x00022603, // n0x1855 c0x0000 (---------------) + com
- 0x00200741, // n0x1856 c0x0000 (---------------) + I d
- 0x00200081, // n0x1857 c0x0000 (---------------) + I e
- 0x002003c1, // n0x1858 c0x0000 (---------------) + I f
- 0x00241b02, // n0x1859 c0x0000 (---------------) + I fh
- 0x00241b04, // n0x185a c0x0000 (---------------) + I fhsk
- 0x00242043, // n0x185b c0x0000 (---------------) + I fhv
- 0x002004c1, // n0x185c c0x0000 (---------------) + I g
- 0x00200641, // n0x185d c0x0000 (---------------) + I h
- 0x00200041, // n0x185e c0x0000 (---------------) + I i
- 0x00200441, // n0x185f c0x0000 (---------------) + I k
- 0x0036c147, // n0x1860 c0x0000 (---------------) + I komforb
- 0x002e128f, // n0x1861 c0x0000 (---------------) + I kommunalforbund
- 0x002cc486, // n0x1862 c0x0000 (---------------) + I komvux
- 0x00200801, // n0x1863 c0x0000 (---------------) + I l
- 0x00266a86, // n0x1864 c0x0000 (---------------) + I lanbib
- 0x00200181, // n0x1865 c0x0000 (---------------) + I m
- 0x00200241, // n0x1866 c0x0000 (---------------) + I n
- 0x00327c0e, // n0x1867 c0x0000 (---------------) + I naturbruksgymn
- 0x00200841, // n0x1868 c0x0000 (---------------) + I o
- 0x0021f5c3, // n0x1869 c0x0000 (---------------) + I org
- 0x002001c1, // n0x186a c0x0000 (---------------) + I p
- 0x00236685, // n0x186b c0x0000 (---------------) + I parti
- 0x00200f02, // n0x186c c0x0000 (---------------) + I pp
- 0x002487c5, // n0x186d c0x0000 (---------------) + I press
- 0x00200a81, // n0x186e c0x0000 (---------------) + I r
- 0x00200941, // n0x186f c0x0000 (---------------) + I s
- 0x00200141, // n0x1870 c0x0000 (---------------) + I t
- 0x00200142, // n0x1871 c0x0000 (---------------) + I tm
- 0x00200401, // n0x1872 c0x0000 (---------------) + I u
- 0x00200541, // n0x1873 c0x0000 (---------------) + I w
- 0x00208281, // n0x1874 c0x0000 (---------------) + I x
- 0x00200d41, // n0x1875 c0x0000 (---------------) + I y
- 0x00201481, // n0x1876 c0x0000 (---------------) + I z
- 0x000b8948, // n0x1877 c0x0000 (---------------) + blogspot
- 0x00222603, // n0x1878 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1879 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x187a c0x0000 (---------------) + I gov
- 0x00201603, // n0x187b c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x187c c0x0000 (---------------) + I org
- 0x00222483, // n0x187d c0x0000 (---------------) + I per
- 0x00222603, // n0x187e c0x0000 (---------------) + I com
- 0x002157c3, // n0x187f c0x0000 (---------------) + I gov
- 0x0023f703, // n0x1880 c0x0000 (---------------) + I mil
- 0x00201603, // n0x1881 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1882 c0x0000 (---------------) + I org
- 0x000b8948, // n0x1883 c0x0000 (---------------) + blogspot
- 0x00222603, // n0x1884 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1885 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1886 c0x0000 (---------------) + I gov
- 0x00201603, // n0x1887 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1888 c0x0000 (---------------) + I org
- 0x00201383, // n0x1889 c0x0000 (---------------) + I art
- 0x00222603, // n0x188a c0x0000 (---------------) + I com
- 0x0027a643, // n0x188b c0x0000 (---------------) + I edu
- 0x00368f84, // n0x188c c0x0000 (---------------) + I gouv
- 0x0021f5c3, // n0x188d c0x0000 (---------------) + I org
- 0x002f1945, // n0x188e c0x0000 (---------------) + I perso
- 0x003688c4, // n0x188f c0x0000 (---------------) + I univ
- 0x00222603, // n0x1890 c0x0000 (---------------) + I com
- 0x00201603, // n0x1891 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1892 c0x0000 (---------------) + I org
- 0x00207a02, // n0x1893 c0x0000 (---------------) + I co
- 0x00222603, // n0x1894 c0x0000 (---------------) + I com
- 0x00235089, // n0x1895 c0x0000 (---------------) + I consulado
- 0x0027a643, // n0x1896 c0x0000 (---------------) + I edu
- 0x0029dc09, // n0x1897 c0x0000 (---------------) + I embaixada
- 0x002157c3, // n0x1898 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x1899 c0x0000 (---------------) + I mil
- 0x00201603, // n0x189a c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x189b c0x0000 (---------------) + I org
- 0x002d80c8, // n0x189c c0x0000 (---------------) + I principe
- 0x00234787, // n0x189d c0x0000 (---------------) + I saotome
- 0x002e9885, // n0x189e c0x0000 (---------------) + I store
- 0x00222603, // n0x189f c0x0000 (---------------) + I com
- 0x0027a643, // n0x18a0 c0x0000 (---------------) + I edu
- 0x0020dbc3, // n0x18a1 c0x0000 (---------------) + I gob
- 0x0021f5c3, // n0x18a2 c0x0000 (---------------) + I org
- 0x0023e843, // n0x18a3 c0x0000 (---------------) + I red
- 0x002157c3, // n0x18a4 c0x0000 (---------------) + I gov
- 0x00222603, // n0x18a5 c0x0000 (---------------) + I com
- 0x0027a643, // n0x18a6 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x18a7 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x18a8 c0x0000 (---------------) + I mil
- 0x00201603, // n0x18a9 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x18aa c0x0000 (---------------) + I org
- 0x00201d82, // n0x18ab c0x0000 (---------------) + I ac
- 0x00207a02, // n0x18ac c0x0000 (---------------) + I co
- 0x0021f5c3, // n0x18ad c0x0000 (---------------) + I org
- 0x000b8948, // n0x18ae c0x0000 (---------------) + blogspot
- 0x00201d82, // n0x18af c0x0000 (---------------) + I ac
- 0x00207a02, // n0x18b0 c0x0000 (---------------) + I co
- 0x00206cc2, // n0x18b1 c0x0000 (---------------) + I go
- 0x002015c2, // n0x18b2 c0x0000 (---------------) + I in
- 0x00207e02, // n0x18b3 c0x0000 (---------------) + I mi
- 0x00201603, // n0x18b4 c0x0000 (---------------) + I net
- 0x00200bc2, // n0x18b5 c0x0000 (---------------) + I or
- 0x00201d82, // n0x18b6 c0x0000 (---------------) + I ac
- 0x00314c43, // n0x18b7 c0x0000 (---------------) + I biz
- 0x00207a02, // n0x18b8 c0x0000 (---------------) + I co
- 0x00222603, // n0x18b9 c0x0000 (---------------) + I com
- 0x0027a643, // n0x18ba c0x0000 (---------------) + I edu
- 0x00206cc2, // n0x18bb c0x0000 (---------------) + I go
- 0x002157c3, // n0x18bc c0x0000 (---------------) + I gov
- 0x00223a83, // n0x18bd c0x0000 (---------------) + I int
- 0x0023f703, // n0x18be c0x0000 (---------------) + I mil
- 0x0022aec4, // n0x18bf c0x0000 (---------------) + I name
- 0x00201603, // n0x18c0 c0x0000 (---------------) + I net
- 0x00213e03, // n0x18c1 c0x0000 (---------------) + I nic
- 0x0021f5c3, // n0x18c2 c0x0000 (---------------) + I org
- 0x002b8784, // n0x18c3 c0x0000 (---------------) + I test
- 0x00205e43, // n0x18c4 c0x0000 (---------------) + I web
- 0x002157c3, // n0x18c5 c0x0000 (---------------) + I gov
- 0x00207a02, // n0x18c6 c0x0000 (---------------) + I co
- 0x00222603, // n0x18c7 c0x0000 (---------------) + I com
- 0x0027a643, // n0x18c8 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x18c9 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x18ca c0x0000 (---------------) + I mil
- 0x00201603, // n0x18cb c0x0000 (---------------) + I net
- 0x00214103, // n0x18cc c0x0000 (---------------) + I nom
- 0x0021f5c3, // n0x18cd c0x0000 (---------------) + I org
- 0x00362587, // n0x18ce c0x0000 (---------------) + I agrinet
- 0x00222603, // n0x18cf c0x0000 (---------------) + I com
- 0x00256907, // n0x18d0 c0x0000 (---------------) + I defense
- 0x0031dac6, // n0x18d1 c0x0000 (---------------) + I edunet
- 0x00203a03, // n0x18d2 c0x0000 (---------------) + I ens
- 0x0021c5c3, // n0x18d3 c0x0000 (---------------) + I fin
- 0x002157c3, // n0x18d4 c0x0000 (---------------) + I gov
- 0x00214b03, // n0x18d5 c0x0000 (---------------) + I ind
- 0x0021c704, // n0x18d6 c0x0000 (---------------) + I info
- 0x002f47c4, // n0x18d7 c0x0000 (---------------) + I intl
- 0x002cc206, // n0x18d8 c0x0000 (---------------) + I mincom
- 0x0020cd83, // n0x18d9 c0x0000 (---------------) + I nat
- 0x00201603, // n0x18da c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x18db c0x0000 (---------------) + I org
- 0x002f1945, // n0x18dc c0x0000 (---------------) + I perso
- 0x002a2404, // n0x18dd c0x0000 (---------------) + I rnrt
- 0x00243e03, // n0x18de c0x0000 (---------------) + I rns
- 0x00360583, // n0x18df c0x0000 (---------------) + I rnu
- 0x002bd047, // n0x18e0 c0x0000 (---------------) + I tourism
- 0x0029a785, // n0x18e1 c0x0000 (---------------) + I turen
- 0x00222603, // n0x18e2 c0x0000 (---------------) + I com
- 0x0027a643, // n0x18e3 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x18e4 c0x0000 (---------------) + I gov
- 0x0023f703, // n0x18e5 c0x0000 (---------------) + I mil
- 0x00201603, // n0x18e6 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x18e7 c0x0000 (---------------) + I org
- 0x002025c2, // n0x18e8 c0x0000 (---------------) + I av
- 0x00216e43, // n0x18e9 c0x0000 (---------------) + I bbs
- 0x0021ddc3, // n0x18ea c0x0000 (---------------) + I bel
- 0x00314c43, // n0x18eb c0x0000 (---------------) + I biz
- 0x00222603, // n0x18ec c0x0000 (---------------) + I com
- 0x00203982, // n0x18ed c0x0000 (---------------) + I dr
- 0x0027a643, // n0x18ee c0x0000 (---------------) + I edu
- 0x00204b03, // n0x18ef c0x0000 (---------------) + I gen
- 0x002157c3, // n0x18f0 c0x0000 (---------------) + I gov
- 0x0021c704, // n0x18f1 c0x0000 (---------------) + I info
- 0x0021bdc3, // n0x18f2 c0x0000 (---------------) + I k12
- 0x00349bc3, // n0x18f3 c0x0000 (---------------) + I kep
- 0x0023f703, // n0x18f4 c0x0000 (---------------) + I mil
- 0x0022aec4, // n0x18f5 c0x0000 (---------------) + I name
- 0x4aa0c1c2, // n0x18f6 c0x012a (n0x18fd-n0x18fe) + I nc
- 0x00201603, // n0x18f7 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x18f8 c0x0000 (---------------) + I org
- 0x00214cc3, // n0x18f9 c0x0000 (---------------) + I pol
- 0x00223b03, // n0x18fa c0x0000 (---------------) + I tel
- 0x00292602, // n0x18fb c0x0000 (---------------) + I tv
- 0x00205e43, // n0x18fc c0x0000 (---------------) + I web
- 0x002157c3, // n0x18fd c0x0000 (---------------) + I gov
- 0x0027a1c4, // n0x18fe c0x0000 (---------------) + I aero
- 0x00314c43, // n0x18ff c0x0000 (---------------) + I biz
- 0x00207a02, // n0x1900 c0x0000 (---------------) + I co
- 0x00222603, // n0x1901 c0x0000 (---------------) + I com
- 0x00239dc4, // n0x1902 c0x0000 (---------------) + I coop
- 0x0027a643, // n0x1903 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1904 c0x0000 (---------------) + I gov
- 0x0021c704, // n0x1905 c0x0000 (---------------) + I info
- 0x00223a83, // n0x1906 c0x0000 (---------------) + I int
- 0x002deb44, // n0x1907 c0x0000 (---------------) + I jobs
- 0x0020e884, // n0x1908 c0x0000 (---------------) + I mobi
- 0x002cb0c6, // n0x1909 c0x0000 (---------------) + I museum
- 0x0022aec4, // n0x190a c0x0000 (---------------) + I name
- 0x00201603, // n0x190b c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x190c c0x0000 (---------------) + I org
- 0x002d8443, // n0x190d c0x0000 (---------------) + I pro
- 0x00296ac6, // n0x190e c0x0000 (---------------) + I travel
- 0x00051c8b, // n0x190f c0x0000 (---------------) + better-than
- 0x00010c06, // n0x1910 c0x0000 (---------------) + dyndns
- 0x0001f10a, // n0x1911 c0x0000 (---------------) + on-the-web
- 0x0007f3ca, // n0x1912 c0x0000 (---------------) + worse-than
- 0x000b8948, // n0x1913 c0x0000 (---------------) + blogspot
- 0x002a4284, // n0x1914 c0x0000 (---------------) + I club
- 0x00222603, // n0x1915 c0x0000 (---------------) + I com
- 0x00314c04, // n0x1916 c0x0000 (---------------) + I ebiz
- 0x0027a643, // n0x1917 c0x0000 (---------------) + I edu
- 0x0028b744, // n0x1918 c0x0000 (---------------) + I game
- 0x002157c3, // n0x1919 c0x0000 (---------------) + I gov
- 0x00308f83, // n0x191a c0x0000 (---------------) + I idv
- 0x0023f703, // n0x191b c0x0000 (---------------) + I mil
- 0x00201603, // n0x191c c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x191d c0x0000 (---------------) + I org
- 0x003136cb, // n0x191e c0x0000 (---------------) + I xn--czrw28b
- 0x00363cca, // n0x191f c0x0000 (---------------) + I xn--uc0atv
- 0x00373d4c, // n0x1920 c0x0000 (---------------) + I xn--zf0ao64a
- 0x00201d82, // n0x1921 c0x0000 (---------------) + I ac
- 0x00207a02, // n0x1922 c0x0000 (---------------) + I co
- 0x00206cc2, // n0x1923 c0x0000 (---------------) + I go
- 0x002a7585, // n0x1924 c0x0000 (---------------) + I hotel
- 0x0021c704, // n0x1925 c0x0000 (---------------) + I info
- 0x00202a02, // n0x1926 c0x0000 (---------------) + I me
- 0x0023f703, // n0x1927 c0x0000 (---------------) + I mil
- 0x0020e884, // n0x1928 c0x0000 (---------------) + I mobi
- 0x00201602, // n0x1929 c0x0000 (---------------) + I ne
- 0x00200bc2, // n0x192a c0x0000 (---------------) + I or
- 0x00218bc2, // n0x192b c0x0000 (---------------) + I sc
- 0x00292602, // n0x192c c0x0000 (---------------) + I tv
- 0x002b2449, // n0x192d c0x0000 (---------------) + I cherkassy
- 0x00262f88, // n0x192e c0x0000 (---------------) + I cherkasy
- 0x00265f09, // n0x192f c0x0000 (---------------) + I chernigov
- 0x00269249, // n0x1930 c0x0000 (---------------) + I chernihiv
- 0x0026cf4a, // n0x1931 c0x0000 (---------------) + I chernivtsi
- 0x0027098a, // n0x1932 c0x0000 (---------------) + I chernovtsy
- 0x00200882, // n0x1933 c0x0000 (---------------) + I ck
- 0x002309c2, // n0x1934 c0x0000 (---------------) + I cn
- 0x00207a02, // n0x1935 c0x0000 (---------------) + I co
- 0x00222603, // n0x1936 c0x0000 (---------------) + I com
- 0x00218282, // n0x1937 c0x0000 (---------------) + I cr
- 0x0023f946, // n0x1938 c0x0000 (---------------) + I crimea
- 0x003350c2, // n0x1939 c0x0000 (---------------) + I cv
- 0x0020b0c2, // n0x193a c0x0000 (---------------) + I dn
- 0x0036d88e, // n0x193b c0x0000 (---------------) + I dnepropetrovsk
- 0x0031454e, // n0x193c c0x0000 (---------------) + I dnipropetrovsk
- 0x00279847, // n0x193d c0x0000 (---------------) + I dominic
- 0x00207b87, // n0x193e c0x0000 (---------------) + I donetsk
- 0x002d02c2, // n0x193f c0x0000 (---------------) + I dp
- 0x0027a643, // n0x1940 c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1941 c0x0000 (---------------) + I gov
- 0x00200382, // n0x1942 c0x0000 (---------------) + I if
- 0x002015c2, // n0x1943 c0x0000 (---------------) + I in
- 0x002fe5cf, // n0x1944 c0x0000 (---------------) + I ivano-frankivsk
- 0x0020ad42, // n0x1945 c0x0000 (---------------) + I kh
- 0x00243b87, // n0x1946 c0x0000 (---------------) + I kharkiv
- 0x00245347, // n0x1947 c0x0000 (---------------) + I kharkov
- 0x00252e87, // n0x1948 c0x0000 (---------------) + I kherson
- 0x0026014c, // n0x1949 c0x0000 (---------------) + I khmelnitskiy
- 0x00261f0c, // n0x194a c0x0000 (---------------) + I khmelnytskyi
- 0x00204484, // n0x194b c0x0000 (---------------) + I kiev
- 0x0033a9ca, // n0x194c c0x0000 (---------------) + I kirovograd
- 0x00289682, // n0x194d c0x0000 (---------------) + I km
- 0x0020e742, // n0x194e c0x0000 (---------------) + I kr
- 0x002af444, // n0x194f c0x0000 (---------------) + I krym
- 0x0020b982, // n0x1950 c0x0000 (---------------) + I ks
- 0x002b9342, // n0x1951 c0x0000 (---------------) + I kv
- 0x00262144, // n0x1952 c0x0000 (---------------) + I kyiv
- 0x00213f02, // n0x1953 c0x0000 (---------------) + I lg
- 0x00220002, // n0x1954 c0x0000 (---------------) + I lt
- 0x0036c707, // n0x1955 c0x0000 (---------------) + I lugansk
- 0x002359c5, // n0x1956 c0x0000 (---------------) + I lutsk
- 0x00205002, // n0x1957 c0x0000 (---------------) + I lv
- 0x00242f44, // n0x1958 c0x0000 (---------------) + I lviv
- 0x0033f482, // n0x1959 c0x0000 (---------------) + I mk
- 0x002fe448, // n0x195a c0x0000 (---------------) + I mykolaiv
- 0x00201603, // n0x195b c0x0000 (---------------) + I net
- 0x0020ff88, // n0x195c c0x0000 (---------------) + I nikolaev
- 0x00208d82, // n0x195d c0x0000 (---------------) + I od
- 0x002384c5, // n0x195e c0x0000 (---------------) + I odesa
- 0x0034a246, // n0x195f c0x0000 (---------------) + I odessa
- 0x0021f5c3, // n0x1960 c0x0000 (---------------) + I org
- 0x0020bf42, // n0x1961 c0x0000 (---------------) + I pl
- 0x002d5487, // n0x1962 c0x0000 (---------------) + I poltava
- 0x00200f02, // n0x1963 c0x0000 (---------------) + I pp
- 0x002d8305, // n0x1964 c0x0000 (---------------) + I rivne
- 0x002ddb45, // n0x1965 c0x0000 (---------------) + I rovno
- 0x0020ee82, // n0x1966 c0x0000 (---------------) + I rv
- 0x00231a42, // n0x1967 c0x0000 (---------------) + I sb
- 0x0029968a, // n0x1968 c0x0000 (---------------) + I sebastopol
- 0x002a838a, // n0x1969 c0x0000 (---------------) + I sevastopol
- 0x00229dc2, // n0x196a c0x0000 (---------------) + I sm
- 0x002f58c4, // n0x196b c0x0000 (---------------) + I sumy
- 0x00201882, // n0x196c c0x0000 (---------------) + I te
- 0x002e7a08, // n0x196d c0x0000 (---------------) + I ternopil
- 0x00201442, // n0x196e c0x0000 (---------------) + I uz
- 0x0022c648, // n0x196f c0x0000 (---------------) + I uzhgorod
- 0x002f7247, // n0x1970 c0x0000 (---------------) + I vinnica
- 0x002f7549, // n0x1971 c0x0000 (---------------) + I vinnytsia
- 0x0020ff42, // n0x1972 c0x0000 (---------------) + I vn
- 0x002fa845, // n0x1973 c0x0000 (---------------) + I volyn
- 0x00315ec5, // n0x1974 c0x0000 (---------------) + I yalta
- 0x0036918b, // n0x1975 c0x0000 (---------------) + I zaporizhzhe
- 0x002d41cc, // n0x1976 c0x0000 (---------------) + I zaporizhzhia
- 0x0022a448, // n0x1977 c0x0000 (---------------) + I zhitomir
- 0x002fac08, // n0x1978 c0x0000 (---------------) + I zhytomyr
- 0x002cfac2, // n0x1979 c0x0000 (---------------) + I zp
- 0x00260ec2, // n0x197a c0x0000 (---------------) + I zt
- 0x00201d82, // n0x197b c0x0000 (---------------) + I ac
- 0x00207a02, // n0x197c c0x0000 (---------------) + I co
- 0x00222603, // n0x197d c0x0000 (---------------) + I com
- 0x00206cc2, // n0x197e c0x0000 (---------------) + I go
- 0x00201602, // n0x197f c0x0000 (---------------) + I ne
- 0x00200bc2, // n0x1980 c0x0000 (---------------) + I or
- 0x0021f5c3, // n0x1981 c0x0000 (---------------) + I org
- 0x00218bc2, // n0x1982 c0x0000 (---------------) + I sc
- 0x00201d82, // n0x1983 c0x0000 (---------------) + I ac
- 0x4ca07a02, // n0x1984 c0x0132 (n0x198e-n0x198f) + I co
- 0x4ce157c3, // n0x1985 c0x0133 (n0x198f-n0x1990) + I gov
- 0x00223143, // n0x1986 c0x0000 (---------------) + I ltd
- 0x00202a02, // n0x1987 c0x0000 (---------------) + I me
- 0x00201603, // n0x1988 c0x0000 (---------------) + I net
- 0x0020f003, // n0x1989 c0x0000 (---------------) + I nhs
- 0x0021f5c3, // n0x198a c0x0000 (---------------) + I org
- 0x002d2a43, // n0x198b c0x0000 (---------------) + I plc
- 0x0023ef46, // n0x198c c0x0000 (---------------) + I police
- 0x016526c3, // n0x198d c0x0005 (---------------)* o I sch
- 0x000b8948, // n0x198e c0x0000 (---------------) + blogspot
- 0x000a6887, // n0x198f c0x0000 (---------------) + service
- 0x4d603542, // n0x1990 c0x0135 (n0x19cf-n0x19d2) + I ak
- 0x4da02082, // n0x1991 c0x0136 (n0x19d2-n0x19d5) + I al
- 0x4de00a42, // n0x1992 c0x0137 (n0x19d5-n0x19d8) + I ar
- 0x4e200902, // n0x1993 c0x0138 (n0x19d8-n0x19db) + I as
- 0x4e6034c2, // n0x1994 c0x0139 (n0x19db-n0x19de) + I az
- 0x4ea0bc02, // n0x1995 c0x013a (n0x19de-n0x19e1) + I ca
- 0x4ee07a02, // n0x1996 c0x013b (n0x19e1-n0x19e4) + I co
- 0x4f230cc2, // n0x1997 c0x013c (n0x19e4-n0x19e7) + I ct
- 0x4f618242, // n0x1998 c0x013d (n0x19e7-n0x19ea) + I dc
- 0x4fa02dc2, // n0x1999 c0x013e (n0x19ea-n0x19ed) + I de
- 0x002ed683, // n0x199a c0x0000 (---------------) + I dni
- 0x0022e3c3, // n0x199b c0x0000 (---------------) + I fed
- 0x4fe49682, // n0x199c c0x013f (n0x19ed-n0x19f0) + I fl
- 0x502004c2, // n0x199d c0x0140 (n0x19f0-n0x19f3) + I ga
- 0x50630742, // n0x199e c0x0141 (n0x19f3-n0x19f6) + I gu
- 0x50a00982, // n0x199f c0x0142 (n0x19f6-n0x19f8) + I hi
- 0x50e0b542, // n0x19a0 c0x0143 (n0x19f8-n0x19fb) + I ia
- 0x51202f82, // n0x19a1 c0x0144 (n0x19fb-n0x19fe) + I id
- 0x51603902, // n0x19a2 c0x0145 (n0x19fe-n0x1a01) + I il
- 0x51a015c2, // n0x19a3 c0x0146 (n0x1a01-n0x1a04) + I in
- 0x000ca345, // n0x19a4 c0x0000 (---------------) + is-by
- 0x0022b803, // n0x19a5 c0x0000 (---------------) + I isa
- 0x002a67c4, // n0x19a6 c0x0000 (---------------) + I kids
- 0x51e0b982, // n0x19a7 c0x0147 (n0x1a04-n0x1a07) + I ks
- 0x52213442, // n0x19a8 c0x0148 (n0x1a07-n0x1a0a) + I ky
- 0x52604d02, // n0x19a9 c0x0149 (n0x1a0a-n0x1a0d) + I la
- 0x0015280b, // n0x19aa c0x0000 (---------------) + land-4-sale
- 0x52a002c2, // n0x19ab c0x014a (n0x1a0d-n0x1a10) + I ma
- 0x53235302, // n0x19ac c0x014c (n0x1a13-n0x1a16) + I md
- 0x53602a02, // n0x19ad c0x014d (n0x1a16-n0x1a19) + I me
- 0x53a07e02, // n0x19ae c0x014e (n0x1a19-n0x1a1c) + I mi
- 0x53e298c2, // n0x19af c0x014f (n0x1a1c-n0x1a1f) + I mn
- 0x54206c42, // n0x19b0 c0x0150 (n0x1a1f-n0x1a22) + I mo
- 0x54625542, // n0x19b1 c0x0151 (n0x1a22-n0x1a25) + I ms
- 0x54a68d82, // n0x19b2 c0x0152 (n0x1a25-n0x1a28) + I mt
- 0x54e0c1c2, // n0x19b3 c0x0153 (n0x1a28-n0x1a2b) + I nc
- 0x55200702, // n0x19b4 c0x0154 (n0x1a2b-n0x1a2d) + I nd
- 0x55601602, // n0x19b5 c0x0155 (n0x1a2d-n0x1a30) + I ne
- 0x55a0f002, // n0x19b6 c0x0156 (n0x1a30-n0x1a33) + I nh
- 0x55e026c2, // n0x19b7 c0x0157 (n0x1a33-n0x1a36) + I nj
- 0x5620eb82, // n0x19b8 c0x0158 (n0x1a36-n0x1a39) + I nm
- 0x00261843, // n0x19b9 c0x0000 (---------------) + I nsn
- 0x5660ea42, // n0x19ba c0x0159 (n0x1a39-n0x1a3c) + I nv
- 0x56a15182, // n0x19bb c0x015a (n0x1a3c-n0x1a3f) + I ny
- 0x56e01bc2, // n0x19bc c0x015b (n0x1a3f-n0x1a42) + I oh
- 0x57203742, // n0x19bd c0x015c (n0x1a42-n0x1a45) + I ok
- 0x57600bc2, // n0x19be c0x015d (n0x1a45-n0x1a48) + I or
- 0x57a001c2, // n0x19bf c0x015e (n0x1a48-n0x1a4b) + I pa
- 0x57e487c2, // n0x19c0 c0x015f (n0x1a4b-n0x1a4e) + I pr
- 0x58209fc2, // n0x19c1 c0x0160 (n0x1a4e-n0x1a51) + I ri
- 0x58618bc2, // n0x19c2 c0x0161 (n0x1a51-n0x1a54) + I sc
- 0x58a02002, // n0x19c3 c0x0162 (n0x1a54-n0x1a56) + I sd
- 0x000ea04c, // n0x19c4 c0x0000 (---------------) + stuff-4-sale
- 0x58e03f82, // n0x19c5 c0x0163 (n0x1a56-n0x1a59) + I tn
- 0x5925dc02, // n0x19c6 c0x0164 (n0x1a59-n0x1a5c) + I tx
- 0x59600dc2, // n0x19c7 c0x0165 (n0x1a5c-n0x1a5f) + I ut
- 0x59a000c2, // n0x19c8 c0x0166 (n0x1a5f-n0x1a62) + I va
- 0x59e032c2, // n0x19c9 c0x0167 (n0x1a62-n0x1a65) + I vi
- 0x5a26d0c2, // n0x19ca c0x0168 (n0x1a65-n0x1a68) + I vt
- 0x5a600542, // n0x19cb c0x0169 (n0x1a68-n0x1a6b) + I wa
- 0x5aa118c2, // n0x19cc c0x016a (n0x1a6b-n0x1a6e) + I wi
- 0x5ae71d02, // n0x19cd c0x016b (n0x1a6e-n0x1a6f) + I wv
- 0x5b20b882, // n0x19ce c0x016c (n0x1a6f-n0x1a72) + I wy
- 0x00219f02, // n0x19cf c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19d0 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19d1 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19d2 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19d3 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19d4 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19d5 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19d6 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19d7 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19d8 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19d9 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19da c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19db c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19dc c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19dd c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19de c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19df c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19e0 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19e1 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19e2 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19e3 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19e4 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19e5 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19e6 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19e7 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19e8 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19e9 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19ea c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19eb c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19ec c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19ed c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19ee c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19ef c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19f0 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19f1 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19f2 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19f3 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19f4 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19f5 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19f6 c0x0000 (---------------) + I cc
- 0x002858c3, // n0x19f7 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19f8 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19f9 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19fa c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19fb c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19fc c0x0000 (---------------) + I k12
- 0x002858c3, // n0x19fd c0x0000 (---------------) + I lib
- 0x00219f02, // n0x19fe c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x19ff c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a00 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a01 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a02 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a03 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a04 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a05 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a06 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a07 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a08 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a09 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a0a c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a0b c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a0c c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a0d c0x0000 (---------------) + I cc
- 0x52e1bdc3, // n0x1a0e c0x014b (n0x1a10-n0x1a13) + I k12
- 0x002858c3, // n0x1a0f c0x0000 (---------------) + I lib
- 0x00321e04, // n0x1a10 c0x0000 (---------------) + I chtr
- 0x0022d106, // n0x1a11 c0x0000 (---------------) + I paroch
- 0x002dbbc3, // n0x1a12 c0x0000 (---------------) + I pvt
- 0x00219f02, // n0x1a13 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a14 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a15 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a16 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a17 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a18 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a19 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a1a c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a1b c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a1c c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a1d c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a1e c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a1f c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a20 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a21 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a22 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a23 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a24 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a25 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a26 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a27 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a28 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a29 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a2a c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a2b c0x0000 (---------------) + I cc
- 0x002858c3, // n0x1a2c c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a2d c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a2e c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a2f c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a30 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a31 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a32 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a33 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a34 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a35 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a36 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a37 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a38 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a39 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a3a c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a3b c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a3c c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a3d c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a3e c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a3f c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a40 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a41 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a42 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a43 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a44 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a45 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a46 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a47 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a48 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a49 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a4a c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a4b c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a4c c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a4d c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a4e c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a4f c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a50 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a51 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a52 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a53 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a54 c0x0000 (---------------) + I cc
- 0x002858c3, // n0x1a55 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a56 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a57 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a58 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a59 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a5a c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a5b c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a5c c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a5d c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a5e c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a5f c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a60 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a61 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a62 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a63 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a64 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a65 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a66 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a67 c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a68 c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a69 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a6a c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a6b c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a6c c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a6d c0x0000 (---------------) + I lib
- 0x00219f02, // n0x1a6e c0x0000 (---------------) + I cc
- 0x00219f02, // n0x1a6f c0x0000 (---------------) + I cc
- 0x0021bdc3, // n0x1a70 c0x0000 (---------------) + I k12
- 0x002858c3, // n0x1a71 c0x0000 (---------------) + I lib
- 0x00222603, // n0x1a72 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1a73 c0x0000 (---------------) + I edu
- 0x00311e83, // n0x1a74 c0x0000 (---------------) + I gub
- 0x0023f703, // n0x1a75 c0x0000 (---------------) + I mil
- 0x00201603, // n0x1a76 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1a77 c0x0000 (---------------) + I org
- 0x00207a02, // n0x1a78 c0x0000 (---------------) + I co
- 0x00222603, // n0x1a79 c0x0000 (---------------) + I com
- 0x00201603, // n0x1a7a c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1a7b c0x0000 (---------------) + I org
- 0x00222603, // n0x1a7c c0x0000 (---------------) + I com
- 0x0027a643, // n0x1a7d c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1a7e c0x0000 (---------------) + I gov
- 0x0023f703, // n0x1a7f c0x0000 (---------------) + I mil
- 0x00201603, // n0x1a80 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1a81 c0x0000 (---------------) + I org
- 0x002180c4, // n0x1a82 c0x0000 (---------------) + I arts
- 0x00207a02, // n0x1a83 c0x0000 (---------------) + I co
- 0x00222603, // n0x1a84 c0x0000 (---------------) + I com
- 0x00302ec3, // n0x1a85 c0x0000 (---------------) + I e12
- 0x0027a643, // n0x1a86 c0x0000 (---------------) + I edu
- 0x00245bc4, // n0x1a87 c0x0000 (---------------) + I firm
- 0x0020dbc3, // n0x1a88 c0x0000 (---------------) + I gob
- 0x002157c3, // n0x1a89 c0x0000 (---------------) + I gov
- 0x0021c704, // n0x1a8a c0x0000 (---------------) + I info
- 0x00223a83, // n0x1a8b c0x0000 (---------------) + I int
- 0x0023f703, // n0x1a8c c0x0000 (---------------) + I mil
- 0x00201603, // n0x1a8d c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1a8e c0x0000 (---------------) + I org
- 0x00227783, // n0x1a8f c0x0000 (---------------) + I rec
- 0x002e9885, // n0x1a90 c0x0000 (---------------) + I store
- 0x00246943, // n0x1a91 c0x0000 (---------------) + I tec
- 0x00205e43, // n0x1a92 c0x0000 (---------------) + I web
- 0x00207a02, // n0x1a93 c0x0000 (---------------) + I co
- 0x00222603, // n0x1a94 c0x0000 (---------------) + I com
- 0x0021bdc3, // n0x1a95 c0x0000 (---------------) + I k12
- 0x00201603, // n0x1a96 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1a97 c0x0000 (---------------) + I org
- 0x00201d82, // n0x1a98 c0x0000 (---------------) + I ac
- 0x00314c43, // n0x1a99 c0x0000 (---------------) + I biz
- 0x00222603, // n0x1a9a c0x0000 (---------------) + I com
- 0x0027a643, // n0x1a9b c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1a9c c0x0000 (---------------) + I gov
- 0x00360806, // n0x1a9d c0x0000 (---------------) + I health
- 0x0021c704, // n0x1a9e c0x0000 (---------------) + I info
- 0x00223a83, // n0x1a9f c0x0000 (---------------) + I int
- 0x0022aec4, // n0x1aa0 c0x0000 (---------------) + I name
- 0x00201603, // n0x1aa1 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1aa2 c0x0000 (---------------) + I org
- 0x002d8443, // n0x1aa3 c0x0000 (---------------) + I pro
- 0x00222603, // n0x1aa4 c0x0000 (---------------) + I com
- 0x0027a643, // n0x1aa5 c0x0000 (---------------) + I edu
- 0x00201603, // n0x1aa6 c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1aa7 c0x0000 (---------------) + I org
- 0x00222603, // n0x1aa8 c0x0000 (---------------) + I com
- 0x00010c06, // n0x1aa9 c0x0000 (---------------) + dyndns
- 0x0027a643, // n0x1aaa c0x0000 (---------------) + I edu
- 0x002157c3, // n0x1aab c0x0000 (---------------) + I gov
- 0x000f5946, // n0x1aac c0x0000 (---------------) + mypets
- 0x00201603, // n0x1aad c0x0000 (---------------) + I net
- 0x0021f5c3, // n0x1aae c0x0000 (---------------) + I org
- 0x002fd448, // n0x1aaf c0x0000 (---------------) + I xn--80au
- 0x002ff349, // n0x1ab0 c0x0000 (---------------) + I xn--90azh
- 0x0030bdc9, // n0x1ab1 c0x0000 (---------------) + I xn--c1avg
- 0x0031a688, // n0x1ab2 c0x0000 (---------------) + I xn--d1at
- 0x0034b708, // n0x1ab3 c0x0000 (---------------) + I xn--o1ac
- 0x0034b709, // n0x1ab4 c0x0000 (---------------) + I xn--o1ach
+ 0x00364ac3, // n0x0000 c0x0000 (---------------) + I abb
+ 0x00364ac6, // n0x0001 c0x0000 (---------------) + I abbott
+ 0x0033fd87, // n0x0002 c0x0000 (---------------) + I abogado
+ 0x01a00b82, // n0x0003 c0x0006 (n0x040f-n0x0415) + I ac
+ 0x002fe987, // n0x0004 c0x0000 (---------------) + I academy
+ 0x003321c9, // n0x0005 c0x0000 (---------------) + I accenture
+ 0x002ac88a, // n0x0006 c0x0000 (---------------) + I accountant
+ 0x002ac88b, // n0x0007 c0x0000 (---------------) + I accountants
+ 0x002a04c6, // n0x0008 c0x0000 (---------------) + I active
+ 0x002388c5, // n0x0009 c0x0000 (---------------) + I actor
+ 0x01e02902, // n0x000a c0x0007 (n0x0415-n0x0416) + I ad
+ 0x0026d143, // n0x000b c0x0000 (---------------) + I ads
+ 0x002fb4c5, // n0x000c c0x0000 (---------------) + I adult
+ 0x0220d2c2, // n0x000d c0x0008 (n0x0416-n0x041e) + I ae
+ 0x02633784, // n0x000e c0x0009 (n0x041e-n0x0477) + I aero
+ 0x02a0b5c2, // n0x000f c0x000a (n0x0477-n0x047c) + I af
+ 0x0024ddc3, // n0x0010 c0x0000 (---------------) + I afl
+ 0x0034fc46, // n0x0011 c0x0000 (---------------) + I africa
+ 0x02e02602, // n0x0012 c0x000b (n0x047c-n0x0481) + I ag
+ 0x0023b206, // n0x0013 c0x0000 (---------------) + I agency
+ 0x03205a42, // n0x0014 c0x000c (n0x0481-n0x0485) + I ai
+ 0x00269b83, // n0x0015 c0x0000 (---------------) + I aig
+ 0x002d2388, // n0x0016 c0x0000 (---------------) + I airforce
+ 0x00285586, // n0x0017 c0x0000 (---------------) + I airtel
+ 0x03600b02, // n0x0018 c0x000d (n0x0485-n0x048b) + I al
+ 0x003615c9, // n0x0019 c0x0000 (---------------) + I allfinanz
+ 0x00253a86, // n0x001a c0x0000 (---------------) + I alsace
+ 0x00203582, // n0x001b c0x0000 (---------------) + I am
+ 0x002f8c49, // n0x001c c0x0000 (---------------) + I amsterdam
+ 0x03a02342, // n0x001d c0x000e (n0x048b-n0x048f) + I an
+ 0x0023f509, // n0x001e c0x0000 (---------------) + I analytics
+ 0x00322307, // n0x001f c0x0000 (---------------) + I android
+ 0x03e07702, // n0x0020 c0x000f (n0x048f-n0x0495) + I ao
+ 0x0024ca0a, // n0x0021 c0x0000 (---------------) + I apartments
+ 0x0023be02, // n0x0022 c0x0000 (---------------) + I aq
+ 0x0027ef49, // n0x0023 c0x0000 (---------------) + I aquarelle
+ 0x042030c2, // n0x0024 c0x0010 (n0x0495-n0x049e) + I ar
+ 0x0026e3c6, // n0x0025 c0x0000 (---------------) + I aramco
+ 0x00229ec5, // n0x0026 c0x0000 (---------------) + I archi
+ 0x003289c4, // n0x0027 c0x0000 (---------------) + I army
+ 0x04aacb84, // n0x0028 c0x0012 (n0x049f-n0x04a5) + I arpa
+ 0x0021dfc4, // n0x0029 c0x0000 (---------------) + I arte
+ 0x04e00182, // n0x002a c0x0013 (n0x04a5-n0x04a6) + I as
+ 0x0031ea44, // n0x002b c0x0000 (---------------) + I asia
+ 0x0027834a, // n0x002c c0x0000 (---------------) + I associates
+ 0x05201702, // n0x002d c0x0014 (n0x04a6-n0x04ad) + I at
+ 0x002361c8, // n0x002e c0x0000 (---------------) + I attorney
+ 0x05a01002, // n0x002f c0x0016 (n0x04ae-n0x04c0) + I au
+ 0x00312707, // n0x0030 c0x0000 (---------------) + I auction
+ 0x002aa905, // n0x0031 c0x0000 (---------------) + I audio
+ 0x003220c6, // n0x0032 c0x0000 (---------------) + I author
+ 0x00262c44, // n0x0033 c0x0000 (---------------) + I auto
+ 0x00343dc5, // n0x0034 c0x0000 (---------------) + I autos
+ 0x06a00102, // n0x0035 c0x001a (n0x04ce-n0x04cf) + I aw
+ 0x0021a6c2, // n0x0036 c0x0000 (---------------) + I ax
+ 0x0036b783, // n0x0037 c0x0000 (---------------) + I axa
+ 0x06e01202, // n0x0038 c0x001b (n0x04cf-n0x04db) + I az
+ 0x00277e05, // n0x0039 c0x0000 (---------------) + I azure
+ 0x072076c2, // n0x003a c0x001c (n0x04db-n0x04e5) + I ba
+ 0x00261e84, // n0x003b c0x0000 (---------------) + I band
+ 0x0021c844, // n0x003c c0x0000 (---------------) + I bank
+ 0x00210ac3, // n0x003d c0x0000 (---------------) + I bar
+ 0x002f9609, // n0x003e c0x0000 (---------------) + I barcelona
+ 0x0030188b, // n0x003f c0x0000 (---------------) + I barclaycard
+ 0x00310148, // n0x0040 c0x0000 (---------------) + I barclays
+ 0x00311088, // n0x0041 c0x0000 (---------------) + I bargains
+ 0x00362ec7, // n0x0042 c0x0000 (---------------) + I bauhaus
+ 0x0032e2c6, // n0x0043 c0x0000 (---------------) + I bayern
+ 0x0760bfc2, // n0x0044 c0x001d (n0x04e5-n0x04ef) + I bb
+ 0x00369083, // n0x0045 c0x0000 (---------------) + I bbc
+ 0x0036ed04, // n0x0046 c0x0000 (---------------) + I bbva
+ 0x003690c3, // n0x0047 c0x0000 (---------------) + I bcn
+ 0x01703202, // n0x0048 c0x0005 (---------------)* o I bd
+ 0x07a00602, // n0x0049 c0x001e (n0x04ef-n0x04f1) + I be
+ 0x00200604, // n0x004a c0x0000 (---------------) + I beer
+ 0x003833c7, // n0x004b c0x0000 (---------------) + I bentley
+ 0x00376686, // n0x004c c0x0000 (---------------) + I berlin
+ 0x0036de84, // n0x004d c0x0000 (---------------) + I best
+ 0x07f3a2c2, // n0x004e c0x001f (n0x04f1-n0x04f2) + I bf
+ 0x08340002, // n0x004f c0x0020 (n0x04f2-n0x0516) + I bg
+ 0x0862c202, // n0x0050 c0x0021 (n0x0516-n0x051b) + I bh
+ 0x00385506, // n0x0051 c0x0000 (---------------) + I bharti
+ 0x08a00002, // n0x0052 c0x0022 (n0x051b-n0x0520) + I bi
+ 0x0023ac45, // n0x0053 c0x0000 (---------------) + I bible
+ 0x00304743, // n0x0054 c0x0000 (---------------) + I bid
+ 0x00205684, // n0x0055 c0x0000 (---------------) + I bike
+ 0x002cc444, // n0x0056 c0x0000 (---------------) + I bing
+ 0x002cc445, // n0x0057 c0x0000 (---------------) + I bingo
+ 0x00208743, // n0x0058 c0x0000 (---------------) + I bio
+ 0x08e02183, // n0x0059 c0x0023 (n0x0520-n0x0527) + I biz
+ 0x0920bb82, // n0x005a c0x0024 (n0x0527-n0x052b) + I bj
+ 0x00282385, // n0x005b c0x0000 (---------------) + I black
+ 0x0028238b, // n0x005c c0x0000 (---------------) + I blackfriday
+ 0x0020cb09, // n0x005d c0x0000 (---------------) + I bloomberg
+ 0x0020e344, // n0x005e c0x0000 (---------------) + I blue
+ 0x0960e5c2, // n0x005f c0x0025 (n0x052b-n0x0530) + I bm
+ 0x0020e5c3, // n0x0060 c0x0000 (---------------) + I bms
+ 0x00212503, // n0x0061 c0x0000 (---------------) + I bmw
+ 0x01612ac2, // n0x0062 c0x0005 (---------------)* o I bn
+ 0x0025d003, // n0x0063 c0x0000 (---------------) + I bnl
+ 0x00212aca, // n0x0064 c0x0000 (---------------) + I bnpparibas
+ 0x09a10042, // n0x0065 c0x0026 (n0x0530-n0x0539) + I bo
+ 0x00370545, // n0x0066 c0x0000 (---------------) + I boats
+ 0x00214283, // n0x0067 c0x0000 (---------------) + I bom
+ 0x00214cc4, // n0x0068 c0x0000 (---------------) + I bond
+ 0x002c4503, // n0x0069 c0x0000 (---------------) + I boo
+ 0x00219483, // n0x006a c0x0000 (---------------) + I bot
+ 0x0021b188, // n0x006b c0x0000 (---------------) + I boutique
+ 0x09e07bc2, // n0x006c c0x0027 (n0x0539-n0x057f) + I br
+ 0x0021bb88, // n0x006d c0x0000 (---------------) + I bradesco
+ 0x002164cb, // n0x006e c0x0000 (---------------) + I bridgestone
+ 0x00227806, // n0x006f c0x0000 (---------------) + I broker
+ 0x002297c8, // n0x0070 c0x0000 (---------------) + I brussels
+ 0x0a607242, // n0x0071 c0x0029 (n0x0580-n0x0585) + I bs
+ 0x0aa3ad82, // n0x0072 c0x002a (n0x0585-n0x058a) + I bt
+ 0x002ee388, // n0x0073 c0x0000 (---------------) + I budapest
+ 0x0024a845, // n0x0074 c0x0000 (---------------) + I build
+ 0x0024a848, // n0x0075 c0x0000 (---------------) + I builders
+ 0x002741c8, // n0x0076 c0x0000 (---------------) + I business
+ 0x0022c983, // n0x0077 c0x0000 (---------------) + I buy
+ 0x0022dac4, // n0x0078 c0x0000 (---------------) + I buzz
+ 0x0036ed42, // n0x0079 c0x0000 (---------------) + I bv
+ 0x0ae2e042, // n0x007a c0x002b (n0x058a-n0x058c) + I bw
+ 0x0b206302, // n0x007b c0x002c (n0x058c-n0x0590) + I by
+ 0x0b62eac2, // n0x007c c0x002d (n0x0590-n0x0596) + I bz
+ 0x0022eac3, // n0x007d c0x0000 (---------------) + I bzh
+ 0x0ba14582, // n0x007e c0x002e (n0x0596-n0x05a7) + I ca
+ 0x00364a83, // n0x007f c0x0000 (---------------) + I cab
+ 0x00219603, // n0x0080 c0x0000 (---------------) + I cal
+ 0x00361584, // n0x0081 c0x0000 (---------------) + I call
+ 0x0025d206, // n0x0082 c0x0000 (---------------) + I camera
+ 0x0023e184, // n0x0083 c0x0000 (---------------) + I camp
+ 0x002d800e, // n0x0084 c0x0000 (---------------) + I cancerresearch
+ 0x0034fd45, // n0x0085 c0x0000 (---------------) + I canon
+ 0x0023ba08, // n0x0086 c0x0000 (---------------) + I capetown
+ 0x002e21c7, // n0x0087 c0x0000 (---------------) + I capital
+ 0x0022f847, // n0x0088 c0x0000 (---------------) + I caravan
+ 0x00301a45, // n0x0089 c0x0000 (---------------) + I cards
+ 0x00241e44, // n0x008a c0x0000 (---------------) + I care
+ 0x00241e46, // n0x008b c0x0000 (---------------) + I career
+ 0x00241e47, // n0x008c c0x0000 (---------------) + I careers
+ 0x002d5284, // n0x008d c0x0000 (---------------) + I cars
+ 0x0021b407, // n0x008e c0x0000 (---------------) + I cartier
+ 0x00320f84, // n0x008f c0x0000 (---------------) + I casa
+ 0x00222744, // n0x0090 c0x0000 (---------------) + I cash
+ 0x0023b546, // n0x0091 c0x0000 (---------------) + I casino
+ 0x002192c3, // n0x0092 c0x0000 (---------------) + I cat
+ 0x0024a608, // n0x0093 c0x0000 (---------------) + I catering
+ 0x003495c3, // n0x0094 c0x0000 (---------------) + I cba
+ 0x0025cfc3, // n0x0095 c0x0000 (---------------) + I cbn
+ 0x0be020c2, // n0x0096 c0x002f (n0x05a7-n0x05ab) + I cc
+ 0x0c30f042, // n0x0097 c0x0030 (n0x05ab-n0x05ac) + I cd
+ 0x002442c6, // n0x0098 c0x0000 (---------------) + I center
+ 0x00347c83, // n0x0099 c0x0000 (---------------) + I ceo
+ 0x003808c4, // n0x009a c0x0000 (---------------) + I cern
+ 0x0c64d1c2, // n0x009b c0x0031 (n0x05ac-n0x05ad) + I cf
+ 0x0034f083, // n0x009c c0x0000 (---------------) + I cfa
+ 0x0024d1c3, // n0x009d c0x0000 (---------------) + I cfd
+ 0x0021aa82, // n0x009e c0x0000 (---------------) + I cg
+ 0x0ca02ac2, // n0x009f c0x0032 (n0x05ad-n0x05ae) + I ch
+ 0x002af1c7, // n0x00a0 c0x0000 (---------------) + I channel
+ 0x0020f104, // n0x00a1 c0x0000 (---------------) + I chat
+ 0x0024c945, // n0x00a2 c0x0000 (---------------) + I cheap
+ 0x0029c845, // n0x00a3 c0x0000 (---------------) + I chloe
+ 0x0037fc89, // n0x00a4 c0x0000 (---------------) + I christmas
+ 0x00384946, // n0x00a5 c0x0000 (---------------) + I chrome
+ 0x00313846, // n0x00a6 c0x0000 (---------------) + I church
+ 0x0ce20182, // n0x00a7 c0x0033 (n0x05ae-n0x05bd) + I ci
+ 0x002629c6, // n0x00a8 c0x0000 (---------------) + I circle
+ 0x00320e85, // n0x00a9 c0x0000 (---------------) + I citic
+ 0x003242c4, // n0x00aa c0x0000 (---------------) + I city
+ 0x003242c8, // n0x00ab c0x0000 (---------------) + I cityeats
+ 0x0d206182, // n0x00ac c0x0034 (n0x05bd-n0x05be)* o I ck
+ 0x0d600402, // n0x00ad c0x0035 (n0x05be-n0x05c2) + I cl
+ 0x00351006, // n0x00ae c0x0000 (---------------) + I claims
+ 0x002c4108, // n0x00af c0x0000 (---------------) + I cleaning
+ 0x00351585, // n0x00b0 c0x0000 (---------------) + I click
+ 0x003590c6, // n0x00b1 c0x0000 (---------------) + I clinic
+ 0x0037c5c8, // n0x00b2 c0x0000 (---------------) + I clothing
+ 0x0034cac4, // n0x00b3 c0x0000 (---------------) + I club
+ 0x0daa4442, // n0x00b4 c0x0036 (n0x05c2-n0x05c6) + I cm
+ 0x0de2fe42, // n0x00b5 c0x0037 (n0x05c6-n0x05f3) + I cn
+ 0x0ea00882, // n0x00b6 c0x003a (n0x05f5-n0x0602) + I co
+ 0x0026e4c5, // n0x00b7 c0x0000 (---------------) + I coach
+ 0x0027b385, // n0x00b8 c0x0000 (---------------) + I codes
+ 0x00273e86, // n0x00b9 c0x0000 (---------------) + I coffee
+ 0x00230807, // n0x00ba c0x0000 (---------------) + I college
+ 0x00230b07, // n0x00bb c0x0000 (---------------) + I cologne
+ 0x0ee32dc3, // n0x00bc c0x003b (n0x0602-n0x06c7) + I com
+ 0x002ca648, // n0x00bd c0x0000 (---------------) + I commbank
+ 0x00232dc9, // n0x00be c0x0000 (---------------) + I community
+ 0x00233487, // n0x00bf c0x0000 (---------------) + I company
+ 0x00234a08, // n0x00c0 c0x0000 (---------------) + I computer
+ 0x00235206, // n0x00c1 c0x0000 (---------------) + I condos
+ 0x00235b0c, // n0x00c2 c0x0000 (---------------) + I construction
+ 0x00236b4a, // n0x00c3 c0x0000 (---------------) + I consulting
+ 0x0023878b, // n0x00c4 c0x0000 (---------------) + I contractors
+ 0x00239887, // n0x00c5 c0x0000 (---------------) + I cooking
+ 0x00239ec4, // n0x00c6 c0x0000 (---------------) + I cool
+ 0x0023a884, // n0x00c7 c0x0000 (---------------) + I coop
+ 0x0023bc07, // n0x00c8 c0x0000 (---------------) + I corsica
+ 0x0025d547, // n0x00c9 c0x0000 (---------------) + I country
+ 0x0023ebc7, // n0x00ca c0x0000 (---------------) + I courses
+ 0x0fe0b542, // n0x00cb c0x003f (n0x06e9-n0x06f0) + I cr
+ 0x0023fb86, // n0x00cc c0x0000 (---------------) + I credit
+ 0x0023fb8a, // n0x00cd c0x0000 (---------------) + I creditcard
+ 0x00240f07, // n0x00ce c0x0000 (---------------) + I cricket
+ 0x002426c5, // n0x00cf c0x0000 (---------------) + I crown
+ 0x00242803, // n0x00d0 c0x0000 (---------------) + I crs
+ 0x002431c7, // n0x00d1 c0x0000 (---------------) + I cruises
+ 0x0033ff43, // n0x00d2 c0x0000 (---------------) + I csc
+ 0x10243502, // n0x00d3 c0x0040 (n0x06f0-n0x06f6) + I cu
+ 0x0024350a, // n0x00d4 c0x0000 (---------------) + I cuisinella
+ 0x10733d82, // n0x00d5 c0x0041 (n0x06f6-n0x06f7) + I cv
+ 0x10b4c782, // n0x00d6 c0x0042 (n0x06f7-n0x06fb) + I cw
+ 0x10e45302, // n0x00d7 c0x0043 (n0x06fb-n0x06fd) + I cx
+ 0x0160a6c2, // n0x00d8 c0x0005 (---------------)* o I cy
+ 0x002c5c05, // n0x00d9 c0x0000 (---------------) + I cymru
+ 0x11202882, // n0x00da c0x0044 (n0x06fd-n0x06fe) + I cz
+ 0x00229545, // n0x00db c0x0000 (---------------) + I dabur
+ 0x0020db83, // n0x00dc c0x0000 (---------------) + I dad
+ 0x0030ac05, // n0x00dd c0x0000 (---------------) + I dance
+ 0x00218204, // n0x00de c0x0000 (---------------) + I date
+ 0x002113c6, // n0x00df c0x0000 (---------------) + I dating
+ 0x00202c06, // n0x00e0 c0x0000 (---------------) + I datsun
+ 0x00282583, // n0x00e1 c0x0000 (---------------) + I day
+ 0x002003c4, // n0x00e2 c0x0000 (---------------) + I dclk
+ 0x11607cc2, // n0x00e3 c0x0045 (n0x06fe-n0x0706) + I de
+ 0x00381205, // n0x00e4 c0x0000 (---------------) + I deals
+ 0x0025f546, // n0x00e5 c0x0000 (---------------) + I degree
+ 0x002734c8, // n0x00e6 c0x0000 (---------------) + I delivery
+ 0x00231b44, // n0x00e7 c0x0000 (---------------) + I dell
+ 0x0037a0c8, // n0x00e8 c0x0000 (---------------) + I democrat
+ 0x0033ae86, // n0x00e9 c0x0000 (---------------) + I dental
+ 0x00266107, // n0x00ea c0x0000 (---------------) + I dentist
+ 0x00237ec4, // n0x00eb c0x0000 (---------------) + I desi
+ 0x00237ec6, // n0x00ec c0x0000 (---------------) + I design
+ 0x0025e703, // n0x00ed c0x0000 (---------------) + I dev
+ 0x002b5b88, // n0x00ee c0x0000 (---------------) + I diamonds
+ 0x00300344, // n0x00ef c0x0000 (---------------) + I diet
+ 0x0036c3c7, // n0x00f0 c0x0000 (---------------) + I digital
+ 0x0032e446, // n0x00f1 c0x0000 (---------------) + I direct
+ 0x0032e449, // n0x00f2 c0x0000 (---------------) + I directory
+ 0x00322488, // n0x00f3 c0x0000 (---------------) + I discount
+ 0x0022ee82, // n0x00f4 c0x0000 (---------------) + I dj
+ 0x11aa46c2, // n0x00f5 c0x0046 (n0x0706-n0x0707) + I dk
+ 0x11e22502, // n0x00f6 c0x0047 (n0x0707-n0x070c) + I dm
+ 0x0035f243, // n0x00f7 c0x0000 (---------------) + I dnp
+ 0x12209082, // n0x00f8 c0x0048 (n0x070c-n0x0716) + I do
+ 0x0033fec4, // n0x00f9 c0x0000 (---------------) + I docs
+ 0x002288c3, // n0x00fa c0x0000 (---------------) + I dog
+ 0x00235fc4, // n0x00fb c0x0000 (---------------) + I doha
+ 0x002fdd87, // n0x00fc c0x0000 (---------------) + I domains
+ 0x002ccb46, // n0x00fd c0x0000 (---------------) + I doosan
+ 0x00369948, // n0x00fe c0x0000 (---------------) + I download
+ 0x002e0d46, // n0x00ff c0x0000 (---------------) + I durban
+ 0x00309cc4, // n0x0100 c0x0000 (---------------) + I dvag
+ 0x1260fa42, // n0x0101 c0x0049 (n0x0716-n0x071e) + I dz
+ 0x002412c5, // n0x0102 c0x0000 (---------------) + I earth
+ 0x002f5f43, // n0x0103 c0x0000 (---------------) + I eat
+ 0x12a02082, // n0x0104 c0x004a (n0x071e-n0x072a) + I ec
+ 0x0022f445, // n0x0105 c0x0000 (---------------) + I edeka
+ 0x0021e083, // n0x0106 c0x0000 (---------------) + I edu
+ 0x0021e089, // n0x0107 c0x0000 (---------------) + I education
+ 0x12e00642, // n0x0108 c0x004b (n0x072a-n0x0734) + I ee
+ 0x13205d82, // n0x0109 c0x004c (n0x0734-n0x073d) + I eg
+ 0x002e1d05, // n0x010a c0x0000 (---------------) + I email
+ 0x0036ccc6, // n0x010b c0x0000 (---------------) + I emerck
+ 0x002bf046, // n0x010c c0x0000 (---------------) + I energy
+ 0x0030dc48, // n0x010d c0x0000 (---------------) + I engineer
+ 0x0030dc4b, // n0x010e c0x0000 (---------------) + I engineering
+ 0x002ec28b, // n0x010f c0x0000 (---------------) + I enterprises
+ 0x00218b85, // n0x0110 c0x0000 (---------------) + I epson
+ 0x002126c9, // n0x0111 c0x0000 (---------------) + I equipment
+ 0x01600682, // n0x0112 c0x0005 (---------------)* o I er
+ 0x0020ce04, // n0x0113 c0x0000 (---------------) + I erni
+ 0x13601e42, // n0x0114 c0x004d (n0x073d-n0x0742) + I es
+ 0x00364fc3, // n0x0115 c0x0000 (---------------) + I esq
+ 0x0025d706, // n0x0116 c0x0000 (---------------) + I estate
+ 0x13e02e82, // n0x0117 c0x004f (n0x0743-n0x074a) + I et
+ 0x0021b882, // n0x0118 c0x0000 (---------------) + I eu
+ 0x00319f4a, // n0x0119 c0x0000 (---------------) + I eurovision
+ 0x002bbd83, // n0x011a c0x0000 (---------------) + I eus
+ 0x0020d306, // n0x011b c0x0000 (---------------) + I events
+ 0x0021c748, // n0x011c c0x0000 (---------------) + I everbank
+ 0x002ed008, // n0x011d c0x0000 (---------------) + I exchange
+ 0x00319806, // n0x011e c0x0000 (---------------) + I expert
+ 0x00305347, // n0x011f c0x0000 (---------------) + I exposed
+ 0x0034f0c4, // n0x0120 c0x0000 (---------------) + I fage
+ 0x00320744, // n0x0121 c0x0000 (---------------) + I fail
+ 0x00331989, // n0x0122 c0x0000 (---------------) + I fairwinds
+ 0x00358745, // n0x0123 c0x0000 (---------------) + I faith
+ 0x0021a1c3, // n0x0124 c0x0000 (---------------) + I fan
+ 0x002ea804, // n0x0125 c0x0000 (---------------) + I fans
+ 0x002125c4, // n0x0126 c0x0000 (---------------) + I farm
+ 0x002c9c47, // n0x0127 c0x0000 (---------------) + I fashion
+ 0x002d0e44, // n0x0128 c0x0000 (---------------) + I fast
+ 0x00273f48, // n0x0129 c0x0000 (---------------) + I feedback
+ 0x00245847, // n0x012a c0x0000 (---------------) + I ferrero
+ 0x14206f02, // n0x012b c0x0050 (n0x074a-n0x074d) + I fi
+ 0x00248145, // n0x012c c0x0000 (---------------) + I final
+ 0x002483c7, // n0x012d c0x0000 (---------------) + I finance
+ 0x00244909, // n0x012e c0x0000 (---------------) + I financial
+ 0x00249ac9, // n0x012f c0x0000 (---------------) + I firestone
+ 0x0024a308, // n0x0130 c0x0000 (---------------) + I firmdale
+ 0x0024ac04, // n0x0131 c0x0000 (---------------) + I fish
+ 0x0024ac07, // n0x0132 c0x0000 (---------------) + I fishing
+ 0x0024b083, // n0x0133 c0x0000 (---------------) + I fit
+ 0x0024b207, // n0x0134 c0x0000 (---------------) + I fitness
+ 0x01613802, // n0x0135 c0x0005 (---------------)* o I fj
+ 0x016a1842, // n0x0136 c0x0005 (---------------)* o I fk
+ 0x0024cd47, // n0x0137 c0x0000 (---------------) + I flights
+ 0x0024e1c7, // n0x0138 c0x0000 (---------------) + I florist
+ 0x0024ed07, // n0x0139 c0x0000 (---------------) + I flowers
+ 0x0024f088, // n0x013a c0x0000 (---------------) + I flsmidth
+ 0x0024f743, // n0x013b c0x0000 (---------------) + I fly
+ 0x00257f82, // n0x013c c0x0000 (---------------) + I fm
+ 0x00208ac2, // n0x013d c0x0000 (---------------) + I fo
+ 0x00250343, // n0x013e c0x0000 (---------------) + I foo
+ 0x00250348, // n0x013f c0x0000 (---------------) + I football
+ 0x00381144, // n0x0140 c0x0000 (---------------) + I ford
+ 0x002527c5, // n0x0141 c0x0000 (---------------) + I forex
+ 0x00253887, // n0x0142 c0x0000 (---------------) + I forsale
+ 0x002d994a, // n0x0143 c0x0000 (---------------) + I foundation
+ 0x1462fc02, // n0x0144 c0x0051 (n0x074d-n0x0765) + I fr
+ 0x0025ba03, // n0x0145 c0x0000 (---------------) + I frl
+ 0x0025bac7, // n0x0146 c0x0000 (---------------) + I frogans
+ 0x0027bdc4, // n0x0147 c0x0000 (---------------) + I fund
+ 0x0027da49, // n0x0148 c0x0000 (---------------) + I furniture
+ 0x00280e06, // n0x0149 c0x0000 (---------------) + I futbol
+ 0x00200fc2, // n0x014a c0x0000 (---------------) + I ga
+ 0x00237383, // n0x014b c0x0000 (---------------) + I gal
+ 0x00237387, // n0x014c c0x0000 (---------------) + I gallery
+ 0x002196c6, // n0x014d c0x0000 (---------------) + I garden
+ 0x0020cd02, // n0x014e c0x0000 (---------------) + I gb
+ 0x0035acc4, // n0x014f c0x0000 (---------------) + I gbiz
+ 0x00218cc2, // n0x0150 c0x0000 (---------------) + I gd
+ 0x002dd243, // n0x0151 c0x0000 (---------------) + I gdn
+ 0x14a029c2, // n0x0152 c0x0052 (n0x0765-n0x076c) + I ge
+ 0x00250803, // n0x0153 c0x0000 (---------------) + I gea
+ 0x00307a04, // n0x0154 c0x0000 (---------------) + I gent
+ 0x00282142, // n0x0155 c0x0000 (---------------) + I gf
+ 0x14e08b42, // n0x0156 c0x0053 (n0x076c-n0x076f) + I gg
+ 0x0032e684, // n0x0157 c0x0000 (---------------) + I ggee
+ 0x1520db02, // n0x0158 c0x0054 (n0x076f-n0x0774) + I gh
+ 0x15608b82, // n0x0159 c0x0055 (n0x0774-n0x077a) + I gi
+ 0x0034d5c4, // n0x015a c0x0000 (---------------) + I gift
+ 0x0034d5c5, // n0x015b c0x0000 (---------------) + I gifts
+ 0x002be445, // n0x015c c0x0000 (---------------) + I gives
+ 0x00219b06, // n0x015d c0x0000 (---------------) + I giving
+ 0x002079c2, // n0x015e c0x0000 (---------------) + I gl
+ 0x0036f445, // n0x015f c0x0000 (---------------) + I glass
+ 0x00224c83, // n0x0160 c0x0000 (---------------) + I gle
+ 0x0020af86, // n0x0161 c0x0000 (---------------) + I global
+ 0x0020ff85, // n0x0162 c0x0000 (---------------) + I globo
+ 0x00219c42, // n0x0163 c0x0000 (---------------) + I gm
+ 0x00219c45, // n0x0164 c0x0000 (---------------) + I gmail
+ 0x00226f83, // n0x0165 c0x0000 (---------------) + I gmo
+ 0x0022cd43, // n0x0166 c0x0000 (---------------) + I gmx
+ 0x15a0c982, // n0x0167 c0x0056 (n0x077a-n0x0780) + I gn
+ 0x00218749, // n0x0168 c0x0000 (---------------) + I goldpoint
+ 0x0024ad84, // n0x0169 c0x0000 (---------------) + I golf
+ 0x0027b203, // n0x016a c0x0000 (---------------) + I goo
+ 0x0027b204, // n0x016b c0x0000 (---------------) + I goog
+ 0x0027b206, // n0x016c c0x0000 (---------------) + I google
+ 0x00297e83, // n0x016d c0x0000 (---------------) + I gop
+ 0x00252ac3, // n0x016e c0x0000 (---------------) + I got
+ 0x00209ac3, // n0x016f c0x0000 (---------------) + I gov
+ 0x15ed2d02, // n0x0170 c0x0057 (n0x0780-n0x0786) + I gp
+ 0x0022d4c2, // n0x0171 c0x0000 (---------------) + I gq
+ 0x16206b02, // n0x0172 c0x0058 (n0x0786-n0x078c) + I gr
+ 0x00376d88, // n0x0173 c0x0000 (---------------) + I graphics
+ 0x0035bd86, // n0x0174 c0x0000 (---------------) + I gratis
+ 0x00252ec5, // n0x0175 c0x0000 (---------------) + I green
+ 0x00351a05, // n0x0176 c0x0000 (---------------) + I gripe
+ 0x00226905, // n0x0177 c0x0000 (---------------) + I group
+ 0x00209602, // n0x0178 c0x0000 (---------------) + I gs
+ 0x166002c2, // n0x0179 c0x0059 (n0x078c-n0x0793) + I gt
+ 0x01602642, // n0x017a c0x0005 (---------------)* o I gu
+ 0x00262905, // n0x017b c0x0000 (---------------) + I gucci
+ 0x002ce404, // n0x017c c0x0000 (---------------) + I guge
+ 0x00242d05, // n0x017d c0x0000 (---------------) + I guide
+ 0x00246107, // n0x017e c0x0000 (---------------) + I guitars
+ 0x00261244, // n0x017f c0x0000 (---------------) + I guru
+ 0x002252c2, // n0x0180 c0x0000 (---------------) + I gw
+ 0x16a04f82, // n0x0181 c0x005a (n0x0793-n0x0796) + I gy
+ 0x0036f2c7, // n0x0182 c0x0000 (---------------) + I hamburg
+ 0x0037e007, // n0x0183 c0x0000 (---------------) + I hangout
+ 0x00362f84, // n0x0184 c0x0000 (---------------) + I haus
+ 0x00241cca, // n0x0185 c0x0000 (---------------) + I healthcare
+ 0x002cbd84, // n0x0186 c0x0000 (---------------) + I help
+ 0x00241484, // n0x0187 c0x0000 (---------------) + I here
+ 0x002a7806, // n0x0188 c0x0000 (---------------) + I hermes
+ 0x00347706, // n0x0189 c0x0000 (---------------) + I hiphop
+ 0x00276b07, // n0x018a c0x0000 (---------------) + I hitachi
+ 0x00262843, // n0x018b c0x0000 (---------------) + I hiv
+ 0x16e301c2, // n0x018c c0x005b (n0x0796-n0x07ae) + I hk
+ 0x0024c142, // n0x018d c0x0000 (---------------) + I hm
+ 0x17206802, // n0x018e c0x005c (n0x07ae-n0x07b4) + I hn
+ 0x0033b8c8, // n0x018f c0x0000 (---------------) + I holdings
+ 0x00299247, // n0x0190 c0x0000 (---------------) + I holiday
+ 0x002998c5, // n0x0191 c0x0000 (---------------) + I homes
+ 0x0029a305, // n0x0192 c0x0000 (---------------) + I honda
+ 0x0029cbc5, // n0x0193 c0x0000 (---------------) + I horse
+ 0x00208344, // n0x0194 c0x0000 (---------------) + I host
+ 0x0028cdc7, // n0x0195 c0x0000 (---------------) + I hosting
+ 0x0029ea07, // n0x0196 c0x0000 (---------------) + I hotmail
+ 0x0022ca85, // n0x0197 c0x0000 (---------------) + I house
+ 0x002cfd43, // n0x0198 c0x0000 (---------------) + I how
+ 0x17636902, // n0x0199 c0x005d (n0x07b4-n0x07b8) + I hr
+ 0x002144c4, // n0x019a c0x0000 (---------------) + I hsbc
+ 0x17a496c2, // n0x019b c0x005e (n0x07b8-n0x07c9) + I ht
+ 0x17e045c2, // n0x019c c0x005f (n0x07c9-n0x07e9) + I hu
+ 0x002da443, // n0x019d c0x0000 (---------------) + I ibm
+ 0x00207ac3, // n0x019e c0x0000 (---------------) + I ice
+ 0x18205942, // n0x019f c0x0060 (n0x07e9-n0x07f4) + I id
+ 0x18600042, // n0x01a0 c0x0061 (n0x07f4-n0x07f6) + I ie
+ 0x00257f43, // n0x01a1 c0x0000 (---------------) + I ifm
+ 0x00363745, // n0x01a2 c0x0000 (---------------) + I iinet
+ 0x18a00d82, // n0x01a3 c0x0062 (n0x07f6-n0x07f7)* o I il
+ 0x192051c2, // n0x01a4 c0x0064 (n0x07f8-n0x07ff) + I im
+ 0x002ed984, // n0x01a5 c0x0000 (---------------) + I immo
+ 0x002ed98a, // n0x01a6 c0x0000 (---------------) + I immobilien
+ 0x19a00242, // n0x01a7 c0x0066 (n0x0801-n0x080e) + I in
+ 0x0038360a, // n0x01a8 c0x0000 (---------------) + I industries
+ 0x00206e88, // n0x01a9 c0x0000 (---------------) + I infiniti
+ 0x19e08a44, // n0x01aa c0x0067 (n0x080e-n0x0818) + I info
+ 0x00200243, // n0x01ab c0x0000 (---------------) + I ing
+ 0x0020ec03, // n0x01ac c0x0000 (---------------) + I ink
+ 0x003111c9, // n0x01ad c0x0000 (---------------) + I institute
+ 0x0020e7c6, // n0x01ae c0x0000 (---------------) + I insure
+ 0x1a2188c3, // n0x01af c0x0068 (n0x0818-n0x0819) + I int
+ 0x002f02cd, // n0x01b0 c0x0000 (---------------) + I international
+ 0x0021560b, // n0x01b1 c0x0000 (---------------) + I investments
+ 0x1a601542, // n0x01b2 c0x0069 (n0x0819-n0x081c) + I io
+ 0x00341348, // n0x01b3 c0x0000 (---------------) + I ipiranga
+ 0x1aa06c42, // n0x01b4 c0x006a (n0x081c-n0x0822) + I iq
+ 0x1ae07042, // n0x01b5 c0x006b (n0x0822-n0x082b) + I ir
+ 0x002cb045, // n0x01b6 c0x0000 (---------------) + I irish
+ 0x1b2066c2, // n0x01b7 c0x006c (n0x082b-n0x0832) + I is
+ 0x002066c3, // n0x01b8 c0x0000 (---------------) + I ist
+ 0x002148c8, // n0x01b9 c0x0000 (---------------) + I istanbul
+ 0x1b6014c2, // n0x01ba c0x006d (n0x0832-n0x09a3) + I it
+ 0x00212204, // n0x01bb c0x0000 (---------------) + I itau
+ 0x002a0d03, // n0x01bc c0x0000 (---------------) + I iwc
+ 0x00229dc6, // n0x01bd c0x0000 (---------------) + I jaguar
+ 0x00333644, // n0x01be c0x0000 (---------------) + I java
+ 0x0025cf83, // n0x01bf c0x0000 (---------------) + I jcb
+ 0x1ba0c582, // n0x01c0 c0x006e (n0x09a3-n0x09a6) + I je
+ 0x0032fcc5, // n0x01c1 c0x0000 (---------------) + I jetzt
+ 0x002a1cc3, // n0x01c2 c0x0000 (---------------) + I jlc
+ 0x01770dc2, // n0x01c3 c0x0005 (---------------)* o I jm
+ 0x1be02e02, // n0x01c4 c0x006f (n0x09a6-n0x09ae) + I jo
+ 0x0027e604, // n0x01c5 c0x0000 (---------------) + I jobs
+ 0x00207886, // n0x01c6 c0x0000 (---------------) + I joburg
+ 0x00324543, // n0x01c7 c0x0000 (---------------) + I jot
+ 0x002a2383, // n0x01c8 c0x0000 (---------------) + I joy
+ 0x1c2a2b02, // n0x01c9 c0x0070 (n0x09ae-n0x0a1d) + I jp
+ 0x002a2bc4, // n0x01ca c0x0000 (---------------) + I jprs
+ 0x002d1e86, // n0x01cb c0x0000 (---------------) + I juegos
+ 0x00223286, // n0x01cc c0x0000 (---------------) + I kaufen
+ 0x00359e04, // n0x01cd c0x0000 (---------------) + I kddi
+ 0x01601e02, // n0x01ce c0x0005 (---------------)* o I ke
+ 0x003796c3, // n0x01cf c0x0000 (---------------) + I kfh
+ 0x29f797c2, // n0x01d0 c0x00a7 (n0x10b1-n0x10b7) + I kg
+ 0x016230c2, // n0x01d1 c0x0005 (---------------)* o I kh
+ 0x2a205482, // n0x01d2 c0x00a8 (n0x10b7-n0x10be) + I ki
+ 0x002d2083, // n0x01d3 c0x0000 (---------------) + I kim
+ 0x00385086, // n0x01d4 c0x0000 (---------------) + I kinder
+ 0x002c9407, // n0x01d5 c0x0000 (---------------) + I kitchen
+ 0x00382c84, // n0x01d6 c0x0000 (---------------) + I kiwi
+ 0x2a686642, // n0x01d7 c0x00a9 (n0x10be-n0x10cf) + I km
+ 0x2aa33fc2, // n0x01d8 c0x00aa (n0x10cf-n0x10d3) + I kn
+ 0x0024db85, // n0x01d9 c0x0000 (---------------) + I koeln
+ 0x2ae2b602, // n0x01da c0x00ab (n0x10d3-n0x10d9) + I kp
+ 0x2b20c642, // n0x01db c0x00ac (n0x10d9-n0x10f7) + I kr
+ 0x0032f143, // n0x01dc c0x0000 (---------------) + I krd
+ 0x002a4b04, // n0x01dd c0x0000 (---------------) + I kred
+ 0x016b1bc2, // n0x01de c0x0005 (---------------)* o I kw
+ 0x2b611002, // n0x01df c0x00ad (n0x10f7-n0x10fc) + I ky
+ 0x00262fc5, // n0x01e0 c0x0000 (---------------) + I kyoto
+ 0x2bb713c2, // n0x01e1 c0x00ae (n0x10fc-n0x1102) + I kz
+ 0x2be000c2, // n0x01e2 c0x00af (n0x1102-n0x110b) + I la
+ 0x0031fb47, // n0x01e3 c0x0000 (---------------) + I lacaixa
+ 0x00215d44, // n0x01e4 c0x0000 (---------------) + I land
+ 0x00365949, // n0x01e5 c0x0000 (---------------) + I landrover
+ 0x0020b0c3, // n0x01e6 c0x0000 (---------------) + I lat
+ 0x00215907, // n0x01e7 c0x0000 (---------------) + I latrobe
+ 0x00279cc6, // n0x01e8 c0x0000 (---------------) + I lawyer
+ 0x2c207682, // n0x01e9 c0x00b0 (n0x110b-n0x1110) + I lb
+ 0x2c61e302, // n0x01ea c0x00b1 (n0x1110-n0x1116) + I lc
+ 0x0022be83, // n0x01eb c0x0000 (---------------) + I lds
+ 0x002e6085, // n0x01ec c0x0000 (---------------) + I lease
+ 0x0024a487, // n0x01ed c0x0000 (---------------) + I leclerc
+ 0x002539c5, // n0x01ee c0x0000 (---------------) + I legal
+ 0x0031b204, // n0x01ef c0x0000 (---------------) + I lgbt
+ 0x00206682, // n0x01f0 c0x0000 (---------------) + I li
+ 0x0032d987, // n0x01f1 c0x0000 (---------------) + I liaison
+ 0x002b0704, // n0x01f2 c0x0000 (---------------) + I lidl
+ 0x00276fc4, // n0x01f3 c0x0000 (---------------) + I life
+ 0x00276fc9, // n0x01f4 c0x0000 (---------------) + I lifestyle
+ 0x00249608, // n0x01f5 c0x0000 (---------------) + I lighting
+ 0x002222c4, // n0x01f6 c0x0000 (---------------) + I like
+ 0x00360047, // n0x01f7 c0x0000 (---------------) + I limited
+ 0x002da104, // n0x01f8 c0x0000 (---------------) + I limo
+ 0x00376747, // n0x01f9 c0x0000 (---------------) + I lincoln
+ 0x002fce05, // n0x01fa c0x0000 (---------------) + I linde
+ 0x003631c4, // n0x01fb c0x0000 (---------------) + I link
+ 0x0025a6c4, // n0x01fc c0x0000 (---------------) + I live
+ 0x2ca00442, // n0x01fd c0x00b2 (n0x1116-n0x1124) + I lk
+ 0x00245c84, // n0x01fe c0x0000 (---------------) + I loan
+ 0x00245c85, // n0x01ff c0x0000 (---------------) + I loans
+ 0x0021d286, // n0x0200 c0x0000 (---------------) + I london
+ 0x00220945, // n0x0201 c0x0000 (---------------) + I lotte
+ 0x00220f45, // n0x0202 c0x0000 (---------------) + I lotto
+ 0x2ce81742, // n0x0203 c0x00b3 (n0x1124-n0x1129) + I lr
+ 0x2d200dc2, // n0x0204 c0x00b4 (n0x1129-n0x112b) + I ls
+ 0x2d61a082, // n0x0205 c0x00b5 (n0x112b-n0x112c) + I lt
+ 0x00220e43, // n0x0206 c0x0000 (---------------) + I ltd
+ 0x00220e44, // n0x0207 c0x0000 (---------------) + I ltda
+ 0x00208042, // n0x0208 c0x0000 (---------------) + I lu
+ 0x00359cc5, // n0x0209 c0x0000 (---------------) + I lupin
+ 0x00242ac4, // n0x020a c0x0000 (---------------) + I luxe
+ 0x00244e86, // n0x020b c0x0000 (---------------) + I luxury
+ 0x2da18582, // n0x020c c0x00b6 (n0x112c-n0x1135) + I lv
+ 0x2de3a682, // n0x020d c0x00b7 (n0x1135-n0x113e) + I ly
+ 0x2e2011c2, // n0x020e c0x00b8 (n0x113e-n0x1144) + I ma
+ 0x00309b86, // n0x020f c0x0000 (---------------) + I madrid
+ 0x002fa184, // n0x0210 c0x0000 (---------------) + I maif
+ 0x002ee706, // n0x0211 c0x0000 (---------------) + I maison
+ 0x00211c83, // n0x0212 c0x0000 (---------------) + I man
+ 0x0028ff4a, // n0x0213 c0x0000 (---------------) + I management
+ 0x00264145, // n0x0214 c0x0000 (---------------) + I mango
+ 0x00226d86, // n0x0215 c0x0000 (---------------) + I market
+ 0x00226d89, // n0x0216 c0x0000 (---------------) + I marketing
+ 0x00252087, // n0x0217 c0x0000 (---------------) + I markets
+ 0x00288408, // n0x0218 c0x0000 (---------------) + I marriott
+ 0x2e60f0c2, // n0x0219 c0x00b9 (n0x1144-n0x1146) + I mc
+ 0x0024a3c2, // n0x021a c0x0000 (---------------) + I md
+ 0x2ea04342, // n0x021b c0x00ba (n0x1146-n0x114e) + I me
+ 0x0021e585, // n0x021c c0x0000 (---------------) + I media
+ 0x0028c584, // n0x021d c0x0000 (---------------) + I meet
+ 0x00242109, // n0x021e c0x0000 (---------------) + I melbourne
+ 0x0036cc84, // n0x021f c0x0000 (---------------) + I meme
+ 0x0035fe88, // n0x0220 c0x0000 (---------------) + I memorial
+ 0x0020fd04, // n0x0221 c0x0000 (---------------) + I menu
+ 0x0020f283, // n0x0222 c0x0000 (---------------) + I meo
+ 0x2ef39dc2, // n0x0223 c0x00bb (n0x114e-n0x1156) + I mg
+ 0x002e9dc2, // n0x0224 c0x0000 (---------------) + I mh
+ 0x0033e685, // n0x0225 c0x0000 (---------------) + I miami
+ 0x00264e49, // n0x0226 c0x0000 (---------------) + I microsoft
+ 0x00240443, // n0x0227 c0x0000 (---------------) + I mil
+ 0x002769c4, // n0x0228 c0x0000 (---------------) + I mini
+ 0x2f340582, // n0x0229 c0x00bc (n0x1156-n0x115d) + I mk
+ 0x2f614302, // n0x022a c0x00bd (n0x115d-n0x1164) + I ml
+ 0x0160fcc2, // n0x022b c0x0005 (---------------)* o I mm
+ 0x0034fa03, // n0x022c c0x0000 (---------------) + I mma
+ 0x2fa2c7c2, // n0x022d c0x00be (n0x1164-n0x1168) + I mn
+ 0x2fe05202, // n0x022e c0x00bf (n0x1168-n0x116d) + I mo
+ 0x00277f84, // n0x022f c0x0000 (---------------) + I mobi
+ 0x00353b86, // n0x0230 c0x0000 (---------------) + I mobily
+ 0x00226fc4, // n0x0231 c0x0000 (---------------) + I moda
+ 0x002d2283, // n0x0232 c0x0000 (---------------) + I moe
+ 0x00205203, // n0x0233 c0x0000 (---------------) + I moi
+ 0x0023fec6, // n0x0234 c0x0000 (---------------) + I monash
+ 0x002bac05, // n0x0235 c0x0000 (---------------) + I money
+ 0x00222549, // n0x0236 c0x0000 (---------------) + I montblanc
+ 0x002bab46, // n0x0237 c0x0000 (---------------) + I mormon
+ 0x002bb948, // n0x0238 c0x0000 (---------------) + I mortgage
+ 0x002bbb46, // n0x0239 c0x0000 (---------------) + I moscow
+ 0x0029088b, // n0x023a c0x0000 (---------------) + I motorcycles
+ 0x002bd483, // n0x023b c0x0000 (---------------) + I mov
+ 0x002bd488, // n0x023c c0x0000 (---------------) + I movistar
+ 0x00203302, // n0x023d c0x0000 (---------------) + I mp
+ 0x0031fe42, // n0x023e c0x0000 (---------------) + I mq
+ 0x30214202, // n0x023f c0x00c0 (n0x116d-n0x116f) + I mr
+ 0x3060e602, // n0x0240 c0x00c1 (n0x116f-n0x1174) + I ms
+ 0x30a66782, // n0x0241 c0x00c2 (n0x1174-n0x1178) + I mt
+ 0x00266783, // n0x0242 c0x0000 (---------------) + I mtn
+ 0x002bd784, // n0x0243 c0x0000 (---------------) + I mtpc
+ 0x30e03b02, // n0x0244 c0x00c3 (n0x1178-n0x117f) + I mu
+ 0x312c2a06, // n0x0245 c0x00c4 (n0x117f-n0x13a3) + I museum
+ 0x31604102, // n0x0246 c0x00c5 (n0x13a3-n0x13b1) + I mv
+ 0x31a12542, // n0x0247 c0x00c6 (n0x13b1-n0x13bc) + I mw
+ 0x31e2cd82, // n0x0248 c0x00c7 (n0x13bc-n0x13c2) + I mx
+ 0x32224782, // n0x0249 c0x00c8 (n0x13c2-n0x13c9) + I my
+ 0x326cbb02, // n0x024a c0x00c9 (n0x13c9-n0x13ca)* o I mz
+ 0x32a015c2, // n0x024b c0x00ca (n0x13ca-n0x13db) + I na
+ 0x002ecf45, // n0x024c c0x0000 (---------------) + I nadex
+ 0x0037bf46, // n0x024d c0x0000 (---------------) + I nagoya
+ 0x32e67944, // n0x024e c0x00cb (n0x13db-n0x13dd) + I name
+ 0x00204a04, // n0x024f c0x0000 (---------------) + I navy
+ 0x33a0a682, // n0x0250 c0x00ce (n0x13df-n0x13e0) + I nc
+ 0x00209e82, // n0x0251 c0x0000 (---------------) + I ne
+ 0x33e18643, // n0x0252 c0x00cf (n0x13e0-n0x140f) + I net
+ 0x00371247, // n0x0253 c0x0000 (---------------) + I netbank
+ 0x0030cd07, // n0x0254 c0x0000 (---------------) + I network
+ 0x002c0107, // n0x0255 c0x0000 (---------------) + I neustar
+ 0x00216703, // n0x0256 c0x0000 (---------------) + I new
+ 0x00234584, // n0x0257 c0x0000 (---------------) + I news
+ 0x00249c85, // n0x0258 c0x0000 (---------------) + I nexus
+ 0x34e06ec2, // n0x0259 c0x00d3 (n0x1416-n0x1420) + I nf
+ 0x35200282, // n0x025a c0x00d4 (n0x1420-n0x1429) + I ng
+ 0x0024ad43, // n0x025b c0x0000 (---------------) + I ngo
+ 0x00267203, // n0x025c c0x0000 (---------------) + I nhk
+ 0x01602382, // n0x025d c0x0005 (---------------)* o I ni
+ 0x00359184, // n0x025e c0x0000 (---------------) + I nico
+ 0x002bd205, // n0x025f c0x0000 (---------------) + I ninja
+ 0x00225906, // n0x0260 c0x0000 (---------------) + I nissan
+ 0x35648cc2, // n0x0261 c0x00d5 (n0x1429-n0x142c) + I nl
+ 0x35a00cc2, // n0x0262 c0x00d6 (n0x142c-n0x1702) + I no
+ 0x00305a06, // n0x0263 c0x0000 (---------------) + I norton
+ 0x00352f46, // n0x0264 c0x0000 (---------------) + I nowruz
+ 0x01612b02, // n0x0265 c0x0005 (---------------)* o I np
+ 0x3de1ccc2, // n0x0266 c0x00f7 (n0x172a-n0x1731) + I nr
+ 0x002f09c3, // n0x0267 c0x0000 (---------------) + I nra
+ 0x0022d2c3, // n0x0268 c0x0000 (---------------) + I nrw
+ 0x0034b343, // n0x0269 c0x0000 (---------------) + I ntt
+ 0x3e20fd82, // n0x026a c0x00f8 (n0x1731-n0x1734) + I nu
+ 0x0021af43, // n0x026b c0x0000 (---------------) + I nyc
+ 0x3e613002, // n0x026c c0x00f9 (n0x1734-n0x1744) + I nz
+ 0x00213483, // n0x026d c0x0000 (---------------) + I obi
+ 0x002130c7, // n0x026e c0x0000 (---------------) + I okinawa
+ 0x3ee087c2, // n0x026f c0x00fb (n0x1745-n0x174e) + I om
+ 0x002166c3, // n0x0270 c0x0000 (---------------) + I one
+ 0x00218c43, // n0x0271 c0x0000 (---------------) + I ong
+ 0x0030be03, // n0x0272 c0x0000 (---------------) + I onl
+ 0x00294bc3, // n0x0273 c0x0000 (---------------) + I ooo
+ 0x002c4046, // n0x0274 c0x0000 (---------------) + I oracle
+ 0x3f24d043, // n0x0275 c0x00fc (n0x174e-n0x1784) + I org
+ 0x0024d047, // n0x0276 c0x0000 (---------------) + I organic
+ 0x002905c5, // n0x0277 c0x0000 (---------------) + I osaka
+ 0x0024b686, // n0x0278 c0x0000 (---------------) + I otsuka
+ 0x00283083, // n0x0279 c0x0000 (---------------) + I ovh
+ 0x3fa00ac2, // n0x027a c0x00fe (n0x1786-n0x1791) + I pa
+ 0x0035f2c4, // n0x027b c0x0000 (---------------) + I page
+ 0x00243a87, // n0x027c c0x0000 (---------------) + I panerai
+ 0x00256585, // n0x027d c0x0000 (---------------) + I paris
+ 0x0028e704, // n0x027e c0x0000 (---------------) + I pars
+ 0x002acc08, // n0x027f c0x0000 (---------------) + I partners
+ 0x002b9345, // n0x0280 c0x0000 (---------------) + I parts
+ 0x002c7745, // n0x0281 c0x0000 (---------------) + I party
+ 0x3fe0c782, // n0x0282 c0x00ff (n0x1791-n0x1798) + I pe
+ 0x4034dec2, // n0x0283 c0x0100 (n0x1798-n0x179b) + I pf
+ 0x016a6f42, // n0x0284 c0x0005 (---------------)* o I pg
+ 0x40606bc2, // n0x0285 c0x0101 (n0x179b-n0x17a3) + I ph
+ 0x002c5a88, // n0x0286 c0x0000 (---------------) + I pharmacy
+ 0x002c6747, // n0x0287 c0x0000 (---------------) + I philips
+ 0x002a75c5, // n0x0288 c0x0000 (---------------) + I photo
+ 0x002c718b, // n0x0289 c0x0000 (---------------) + I photography
+ 0x002c30c6, // n0x028a c0x0000 (---------------) + I photos
+ 0x002c7386, // n0x028b c0x0000 (---------------) + I physio
+ 0x002c7506, // n0x028c c0x0000 (---------------) + I piaget
+ 0x00221f84, // n0x028d c0x0000 (---------------) + I pics
+ 0x002c80c6, // n0x028e c0x0000 (---------------) + I pictet
+ 0x002c8648, // n0x028f c0x0000 (---------------) + I pictures
+ 0x00246c03, // n0x0290 c0x0000 (---------------) + I pin
+ 0x00359d44, // n0x0291 c0x0000 (---------------) + I pink
+ 0x002c9e05, // n0x0292 c0x0000 (---------------) + I pizza
+ 0x40ac9f42, // n0x0293 c0x0102 (n0x17a3-n0x17b1) + I pk
+ 0x40e0a402, // n0x0294 c0x0103 (n0x17b1-n0x1856) + I pl
+ 0x0020a405, // n0x0295 c0x0000 (---------------) + I place
+ 0x002cc348, // n0x0296 c0x0000 (---------------) + I plumbing
+ 0x002127c2, // n0x0297 c0x0000 (---------------) + I pm
+ 0x416a2b42, // n0x0298 c0x0105 (n0x185f-n0x1864) + I pn
+ 0x002cd0c4, // n0x0299 c0x0000 (---------------) + I pohl
+ 0x002cd1c5, // n0x029a c0x0000 (---------------) + I poker
+ 0x002cdf44, // n0x029b c0x0000 (---------------) + I porn
+ 0x002ce7c4, // n0x029c c0x0000 (---------------) + I post
+ 0x41a2ad42, // n0x029d c0x0106 (n0x1864-n0x1871) + I pr
+ 0x0026a2c5, // n0x029e c0x0000 (---------------) + I praxi
+ 0x0022ad45, // n0x029f c0x0000 (---------------) + I press
+ 0x41ecfc43, // n0x02a0 c0x0107 (n0x1871-n0x1878) + I pro
+ 0x002cfec4, // n0x02a1 c0x0000 (---------------) + I prod
+ 0x002cfecb, // n0x02a2 c0x0000 (---------------) + I productions
+ 0x002d0d84, // n0x02a3 c0x0000 (---------------) + I prof
+ 0x002d1505, // n0x02a4 c0x0000 (---------------) + I promo
+ 0x002d284a, // n0x02a5 c0x0000 (---------------) + I properties
+ 0x002d2d48, // n0x02a6 c0x0000 (---------------) + I property
+ 0x42218402, // n0x02a7 c0x0108 (n0x1878-n0x187f) + I ps
+ 0x4269ab02, // n0x02a8 c0x0109 (n0x187f-n0x1888) + I pt
+ 0x0025dbc3, // n0x02a9 c0x0000 (---------------) + I pub
+ 0x42b76602, // n0x02aa c0x010a (n0x1888-n0x188e) + I pw
+ 0x42eb9882, // n0x02ab c0x010b (n0x188e-n0x1895) + I py
+ 0x43304ec2, // n0x02ac c0x010c (n0x1895-n0x189d) + I qa
+ 0x0023f144, // n0x02ad c0x0000 (---------------) + I qpon
+ 0x0021b2c6, // n0x02ae c0x0000 (---------------) + I quebec
+ 0x00367706, // n0x02af c0x0000 (---------------) + I racing
+ 0x43607082, // n0x02b0 c0x010d (n0x189d-n0x18a1) + I re
+ 0x002c6184, // n0x02b1 c0x0000 (---------------) + I read
+ 0x002ff907, // n0x02b2 c0x0000 (---------------) + I realtor
+ 0x0022a147, // n0x02b3 c0x0000 (---------------) + I recipes
+ 0x0023fbc3, // n0x02b4 c0x0000 (---------------) + I red
+ 0x002a4b48, // n0x02b5 c0x0000 (---------------) + I redstone
+ 0x0027dc05, // n0x02b6 c0x0000 (---------------) + I rehab
+ 0x0020e8c5, // n0x02b7 c0x0000 (---------------) + I reise
+ 0x0020e8c6, // n0x02b8 c0x0000 (---------------) + I reisen
+ 0x002aa044, // n0x02b9 c0x0000 (---------------) + I reit
+ 0x0020ae03, // n0x02ba c0x0000 (---------------) + I ren
+ 0x0029e644, // n0x02bb c0x0000 (---------------) + I rent
+ 0x002d9407, // n0x02bc c0x0000 (---------------) + I rentals
+ 0x00222886, // n0x02bd c0x0000 (---------------) + I repair
+ 0x002f0f86, // n0x02be c0x0000 (---------------) + I report
+ 0x002d7e4a, // n0x02bf c0x0000 (---------------) + I republican
+ 0x00247204, // n0x02c0 c0x0000 (---------------) + I rest
+ 0x0024720a, // n0x02c1 c0x0000 (---------------) + I restaurant
+ 0x00311dc6, // n0x02c2 c0x0000 (---------------) + I review
+ 0x00311dc7, // n0x02c3 c0x0000 (---------------) + I reviews
+ 0x00296ec4, // n0x02c4 c0x0000 (---------------) + I rich
+ 0x00203d05, // n0x02c5 c0x0000 (---------------) + I ricoh
+ 0x0020ef83, // n0x02c6 c0x0000 (---------------) + I rio
+ 0x00351a43, // n0x02c7 c0x0000 (---------------) + I rip
+ 0x43a00982, // n0x02c8 c0x010e (n0x18a1-n0x18ad) + I ro
+ 0x0037e5c6, // n0x02c9 c0x0000 (---------------) + I rocher
+ 0x002e0785, // n0x02ca c0x0000 (---------------) + I rocks
+ 0x002c4e05, // n0x02cb c0x0000 (---------------) + I rodeo
+ 0x00257344, // n0x02cc c0x0000 (---------------) + I room
+ 0x43e04642, // n0x02cd c0x010f (n0x18ad-n0x18b3) + I rs
+ 0x0024a9c4, // n0x02ce c0x0000 (---------------) + I rsvp
+ 0x44202f82, // n0x02cf c0x0110 (n0x18b3-n0x1937) + I ru
+ 0x0025df44, // n0x02d0 c0x0000 (---------------) + I ruhr
+ 0x4462d302, // n0x02d1 c0x0111 (n0x1937-n0x1940) + I rw
+ 0x00269846, // n0x02d2 c0x0000 (---------------) + I ryukyu
+ 0x44a03a82, // n0x02d3 c0x0112 (n0x1940-n0x1948) + I sa
+ 0x0036f048, // n0x02d4 c0x0000 (---------------) + I saarland
+ 0x00280544, // n0x02d5 c0x0000 (---------------) + I safe
+ 0x0020e0c6, // n0x02d6 c0x0000 (---------------) + I sakura
+ 0x00253944, // n0x02d7 c0x0000 (---------------) + I sale
+ 0x0021d205, // n0x02d8 c0x0000 (---------------) + I salon
+ 0x0022cbc7, // n0x02d9 c0x0000 (---------------) + I samsung
+ 0x002259c7, // n0x02da c0x0000 (---------------) + I sandvik
+ 0x002259cf, // n0x02db c0x0000 (---------------) + I sandvikcoromant
+ 0x00287906, // n0x02dc c0x0000 (---------------) + I sanofi
+ 0x00242883, // n0x02dd c0x0000 (---------------) + I sap
+ 0x00242884, // n0x02de c0x0000 (---------------) + I sapo
+ 0x0024cc44, // n0x02df c0x0000 (---------------) + I sarl
+ 0x00264c04, // n0x02e0 c0x0000 (---------------) + I saxo
+ 0x44e14502, // n0x02e1 c0x0113 (n0x1948-n0x194d) + I sb
+ 0x00266303, // n0x02e2 c0x0000 (---------------) + I sbs
+ 0x4521bcc2, // n0x02e3 c0x0114 (n0x194d-n0x1952) + I sc
+ 0x0022f803, // n0x02e4 c0x0000 (---------------) + I sca
+ 0x0033ff83, // n0x02e5 c0x0000 (---------------) + I scb
+ 0x0026c047, // n0x02e6 c0x0000 (---------------) + I schmidt
+ 0x00274d4c, // n0x02e7 c0x0000 (---------------) + I scholarships
+ 0x00275006, // n0x02e8 c0x0000 (---------------) + I school
+ 0x00278586, // n0x02e9 c0x0000 (---------------) + I schule
+ 0x002793c7, // n0x02ea c0x0000 (---------------) + I schwarz
+ 0x00234e47, // n0x02eb c0x0000 (---------------) + I science
+ 0x0021bcc4, // n0x02ec c0x0000 (---------------) + I scor
+ 0x00250c44, // n0x02ed c0x0000 (---------------) + I scot
+ 0x4560acc2, // n0x02ee c0x0115 (n0x1952-n0x195a) + I sd
+ 0x45a04982, // n0x02ef c0x0116 (n0x195a-n0x1983) + I se
+ 0x003095c4, // n0x02f0 c0x0000 (---------------) + I seat
+ 0x00269d04, // n0x02f1 c0x0000 (---------------) + I seek
+ 0x002bf005, // n0x02f2 c0x0000 (---------------) + I sener
+ 0x00290b08, // n0x02f3 c0x0000 (---------------) + I services
+ 0x0029a603, // n0x02f4 c0x0000 (---------------) + I sew
+ 0x0022ae43, // n0x02f5 c0x0000 (---------------) + I sex
+ 0x0022ae44, // n0x02f6 c0x0000 (---------------) + I sexy
+ 0x45e5f242, // n0x02f7 c0x0117 (n0x1983-n0x198a) + I sg
+ 0x462001c2, // n0x02f8 c0x0118 (n0x198a-n0x198f) + I sh
+ 0x002acb05, // n0x02f9 c0x0000 (---------------) + I sharp
+ 0x00215484, // n0x02fa c0x0000 (---------------) + I shia
+ 0x002b2487, // n0x02fb c0x0000 (---------------) + I shiksha
+ 0x003794c5, // n0x02fc c0x0000 (---------------) + I shoes
+ 0x002f8b07, // n0x02fd c0x0000 (---------------) + I shriram
+ 0x002058c2, // n0x02fe c0x0000 (---------------) + I si
+ 0x00224bc7, // n0x02ff c0x0000 (---------------) + I singles
+ 0x00229d82, // n0x0300 c0x0000 (---------------) + I sj
+ 0x46600e02, // n0x0301 c0x0119 (n0x198f-n0x1990) + I sk
+ 0x0022f6c3, // n0x0302 c0x0000 (---------------) + I sky
+ 0x0022f6c5, // n0x0303 c0x0000 (---------------) + I skype
+ 0x46a109c2, // n0x0304 c0x011a (n0x1990-n0x1995) + I sl
+ 0x0024f102, // n0x0305 c0x0000 (---------------) + I sm
+ 0x0033ba85, // n0x0306 c0x0000 (---------------) + I smile
+ 0x46e14782, // n0x0307 c0x011b (n0x1995-n0x199c) + I sn
+ 0x47209f02, // n0x0308 c0x011c (n0x199c-n0x199f) + I so
+ 0x002ae046, // n0x0309 c0x0000 (---------------) + I social
+ 0x00264f88, // n0x030a c0x0000 (---------------) + I software
+ 0x002ab284, // n0x030b c0x0000 (---------------) + I sohu
+ 0x00310945, // n0x030c c0x0000 (---------------) + I solar
+ 0x002d3cc9, // n0x030d c0x0000 (---------------) + I solutions
+ 0x002107c3, // n0x030e c0x0000 (---------------) + I soy
+ 0x002d91c5, // n0x030f c0x0000 (---------------) + I space
+ 0x002db647, // n0x0310 c0x0000 (---------------) + I spiegel
+ 0x002dbd0d, // n0x0311 c0x0000 (---------------) + I spreadbetting
+ 0x002dc282, // n0x0312 c0x0000 (---------------) + I sr
+ 0x47604682, // n0x0313 c0x011d (n0x199f-n0x19ab) + I st
+ 0x00346f05, // n0x0314 c0x0000 (---------------) + I stada
+ 0x002cd887, // n0x0315 c0x0000 (---------------) + I statoil
+ 0x00270103, // n0x0316 c0x0000 (---------------) + I stc
+ 0x00270108, // n0x0317 c0x0000 (---------------) + I stcgroup
+ 0x0036c009, // n0x0318 c0x0000 (---------------) + I stockholm
+ 0x002dcf05, // n0x0319 c0x0000 (---------------) + I study
+ 0x002770c5, // n0x031a c0x0000 (---------------) + I style
+ 0x00200502, // n0x031b c0x0000 (---------------) + I su
+ 0x002aec88, // n0x031c c0x0000 (---------------) + I supplies
+ 0x0028a146, // n0x031d c0x0000 (---------------) + I supply
+ 0x0022bc47, // n0x031e c0x0000 (---------------) + I support
+ 0x002d1744, // n0x031f c0x0000 (---------------) + I surf
+ 0x002bce87, // n0x0320 c0x0000 (---------------) + I surgery
+ 0x002dfe86, // n0x0321 c0x0000 (---------------) + I suzuki
+ 0x47a01e82, // n0x0322 c0x011e (n0x19ab-n0x19b0) + I sv
+ 0x002e3105, // n0x0323 c0x0000 (---------------) + I swiss
+ 0x47ee3902, // n0x0324 c0x011f (n0x19b0-n0x19b1) + I sx
+ 0x48218442, // n0x0325 c0x0120 (n0x19b1-n0x19b7) + I sy
+ 0x00266bc6, // n0x0326 c0x0000 (---------------) + I sydney
+ 0x002a3808, // n0x0327 c0x0000 (---------------) + I symantec
+ 0x0037e1c7, // n0x0328 c0x0000 (---------------) + I systems
+ 0x48601302, // n0x0329 c0x0121 (n0x19b7-n0x19ba) + I sz
+ 0x00232b83, // n0x032a c0x0000 (---------------) + I tab
+ 0x00233ac6, // n0x032b c0x0000 (---------------) + I taipei
+ 0x00210245, // n0x032c c0x0000 (---------------) + I tatar
+ 0x0021cd46, // n0x032d c0x0000 (---------------) + I tattoo
+ 0x00226b43, // n0x032e c0x0000 (---------------) + I tax
+ 0x00205ec2, // n0x032f c0x0000 (---------------) + I tc
+ 0x002ed903, // n0x0330 c0x0000 (---------------) + I tci
+ 0x48a08dc2, // n0x0331 c0x0122 (n0x19ba-n0x19bb) + I td
+ 0x002a394a, // n0x0332 c0x0000 (---------------) + I technology
+ 0x00218943, // n0x0333 c0x0000 (---------------) + I tel
+ 0x0029d88a, // n0x0334 c0x0000 (---------------) + I telefonica
+ 0x0023c987, // n0x0335 c0x0000 (---------------) + I temasek
+ 0x002eaf86, // n0x0336 c0x0000 (---------------) + I tennis
+ 0x00211842, // n0x0337 c0x0000 (---------------) + I tf
+ 0x002276c2, // n0x0338 c0x0000 (---------------) + I tg
+ 0x48e09382, // n0x0339 c0x0123 (n0x19bb-n0x19c2) + I th
+ 0x00229446, // n0x033a c0x0000 (---------------) + I tienda
+ 0x00385604, // n0x033b c0x0000 (---------------) + I tips
+ 0x00207005, // n0x033c c0x0000 (---------------) + I tires
+ 0x002a16c5, // n0x033d c0x0000 (---------------) + I tirol
+ 0x492046c2, // n0x033e c0x0124 (n0x19c2-n0x19d1) + I tj
+ 0x00204b42, // n0x033f c0x0000 (---------------) + I tk
+ 0x49616882, // n0x0340 c0x0125 (n0x19d1-n0x19d2) + I tl
+ 0x49a032c2, // n0x0341 c0x0126 (n0x19d2-n0x19da) + I tm
+ 0x49e01942, // n0x0342 c0x0127 (n0x19da-n0x19ee) + I tn
+ 0x4a200302, // n0x0343 c0x0128 (n0x19ee-n0x19f4) + I to
+ 0x003501c5, // n0x0344 c0x0000 (---------------) + I today
+ 0x002bc8c5, // n0x0345 c0x0000 (---------------) + I tokyo
+ 0x0021ce05, // n0x0346 c0x0000 (---------------) + I tools
+ 0x00297203, // n0x0347 c0x0000 (---------------) + I top
+ 0x00240dc5, // n0x0348 c0x0000 (---------------) + I toray
+ 0x002c3187, // n0x0349 c0x0000 (---------------) + I toshiba
+ 0x0023bb04, // n0x034a c0x0000 (---------------) + I town
+ 0x00257684, // n0x034b c0x0000 (---------------) + I toys
+ 0x0020df02, // n0x034c c0x0000 (---------------) + I tp
+ 0x4a600942, // n0x034d c0x0129 (n0x19f4-n0x1a09) + I tr
+ 0x00243045, // n0x034e c0x0000 (---------------) + I trade
+ 0x00298847, // n0x034f c0x0000 (---------------) + I trading
+ 0x0026ba48, // n0x0350 c0x0000 (---------------) + I training
+ 0x00290186, // n0x0351 c0x0000 (---------------) + I travel
+ 0x00313345, // n0x0352 c0x0000 (---------------) + I trust
+ 0x4b21cdc2, // n0x0353 c0x012c (n0x1a0b-n0x1a1c) + I tt
+ 0x002e3c03, // n0x0354 c0x0000 (---------------) + I tui
+ 0x002e5005, // n0x0355 c0x0000 (---------------) + I tushu
+ 0x4b68dc82, // n0x0356 c0x012d (n0x1a1c-n0x1a20) + I tv
+ 0x4ba548c2, // n0x0357 c0x012e (n0x1a20-n0x1a2e) + I tw
+ 0x4be3af02, // n0x0358 c0x012f (n0x1a2e-n0x1a3a) + I tz
+ 0x4c229e82, // n0x0359 c0x0130 (n0x1a3a-n0x1a88) + I ua
+ 0x00346003, // n0x035a c0x0000 (---------------) + I ubs
+ 0x4c601b02, // n0x035b c0x0131 (n0x1a88-n0x1a90) + I ug
+ 0x4ca00542, // n0x035c c0x0132 (n0x1a90-n0x1a9b) + I uk
+ 0x003826ca, // n0x035d c0x0000 (---------------) + I university
+ 0x00215b43, // n0x035e c0x0000 (---------------) + I uno
+ 0x00245c03, // n0x035f c0x0000 (---------------) + I uol
+ 0x4d6073c2, // n0x0360 c0x0135 (n0x1a9d-n0x1adc) + I us
+ 0x5ba04282, // n0x0361 c0x016e (n0x1b7f-n0x1b85) + I uy
+ 0x5be1eac2, // n0x0362 c0x016f (n0x1b85-n0x1b89) + I uz
+ 0x00203242, // n0x0363 c0x0000 (---------------) + I va
+ 0x0036ed89, // n0x0364 c0x0000 (---------------) + I vacations
+ 0x002b1004, // n0x0365 c0x0000 (---------------) + I vana
+ 0x5c2e6442, // n0x0366 c0x0170 (n0x1b89-n0x1b8f) + I vc
+ 0x5c603f02, // n0x0367 c0x0171 (n0x1b8f-n0x1ba0) + I ve
+ 0x002e7105, // n0x0368 c0x0000 (---------------) + I vegas
+ 0x00238bc8, // n0x0369 c0x0000 (---------------) + I ventures
+ 0x002e918c, // n0x036a c0x0000 (---------------) + I versicherung
+ 0x0023c8c3, // n0x036b c0x0000 (---------------) + I vet
+ 0x0025a082, // n0x036c c0x0000 (---------------) + I vg
+ 0x5ca01642, // n0x036d c0x0172 (n0x1ba0-n0x1ba5) + I vi
+ 0x002b8846, // n0x036e c0x0000 (---------------) + I viajes
+ 0x002ebe05, // n0x036f c0x0000 (---------------) + I video
+ 0x002ebf46, // n0x0370 c0x0000 (---------------) + I villas
+ 0x002efb86, // n0x0371 c0x0000 (---------------) + I virgin
+ 0x002a1046, // n0x0372 c0x0000 (---------------) + I vision
+ 0x002bd505, // n0x0373 c0x0000 (---------------) + I vista
+ 0x002f010a, // n0x0374 c0x0000 (---------------) + I vistaprint
+ 0x0024bd44, // n0x0375 c0x0000 (---------------) + I viva
+ 0x00326bca, // n0x0376 c0x0000 (---------------) + I vlaanderen
+ 0x5ce0d142, // n0x0377 c0x0173 (n0x1ba5-n0x1bb1) + I vn
+ 0x00360bc5, // n0x0378 c0x0000 (---------------) + I vodka
+ 0x002f3f44, // n0x0379 c0x0000 (---------------) + I vote
+ 0x002f4046, // n0x037a c0x0000 (---------------) + I voting
+ 0x002f41c4, // n0x037b c0x0000 (---------------) + I voto
+ 0x00361286, // n0x037c c0x0000 (---------------) + I voyage
+ 0x5d201882, // n0x037d c0x0174 (n0x1bb1-n0x1bb5) + I vu
+ 0x00236485, // n0x037e c0x0000 (---------------) + I wales
+ 0x00276386, // n0x037f c0x0000 (---------------) + I walter
+ 0x00252444, // n0x0380 c0x0000 (---------------) + I wang
+ 0x00252447, // n0x0381 c0x0000 (---------------) + I wanggou
+ 0x00205e45, // n0x0382 c0x0000 (---------------) + I watch
+ 0x00216346, // n0x0383 c0x0000 (---------------) + I webcam
+ 0x002071c7, // n0x0384 c0x0000 (---------------) + I website
+ 0x00245dc3, // n0x0385 c0x0000 (---------------) + I wed
+ 0x0035fb47, // n0x0386 c0x0000 (---------------) + I wedding
+ 0x00212582, // n0x0387 c0x0000 (---------------) + I wf
+ 0x0022e087, // n0x0388 c0x0000 (---------------) + I whoswho
+ 0x00382d04, // n0x0389 c0x0000 (---------------) + I wien
+ 0x0022d744, // n0x038a c0x0000 (---------------) + I wiki
+ 0x00359a4b, // n0x038b c0x0000 (---------------) + I williamhill
+ 0x0021e843, // n0x038c c0x0000 (---------------) + I win
+ 0x0027c987, // n0x038d c0x0000 (---------------) + I windows
+ 0x00273d43, // n0x038e c0x0000 (---------------) + I wme
+ 0x00226744, // n0x038f c0x0000 (---------------) + I work
+ 0x0022e545, // n0x0390 c0x0000 (---------------) + I works
+ 0x00306b45, // n0x0391 c0x0000 (---------------) + I world
+ 0x5d6012c2, // n0x0392 c0x0175 (n0x1bb5-n0x1bbc) + I ws
+ 0x002a43c3, // n0x0393 c0x0000 (---------------) + I wtc
+ 0x002a44c3, // n0x0394 c0x0000 (---------------) + I wtf
+ 0x0022cdc4, // n0x0395 c0x0000 (---------------) + I xbox
+ 0x0022ce85, // n0x0396 c0x0000 (---------------) + I xerox
+ 0x00226bc3, // n0x0397 c0x0000 (---------------) + I xin
+ 0x0027c44b, // n0x0398 c0x0000 (---------------) + I xn--1qqw23a
+ 0x0029a08a, // n0x0399 c0x0000 (---------------) + I xn--30rr7y
+ 0x002c6d8b, // n0x039a c0x0000 (---------------) + I xn--3bst00m
+ 0x002e394b, // n0x039b c0x0000 (---------------) + I xn--3ds443g
+ 0x0032a28c, // n0x039c c0x0000 (---------------) + I xn--3e0b707e
+ 0x0037fa0b, // n0x039d c0x0000 (---------------) + I xn--45brj9c
+ 0x0038470a, // n0x039e c0x0000 (---------------) + I xn--45q11c
+ 0x00385f0a, // n0x039f c0x0000 (---------------) + I xn--4gbrim
+ 0x002f588e, // n0x03a0 c0x0000 (---------------) + I xn--54b7fta0cc
+ 0x002f640b, // n0x03a1 c0x0000 (---------------) + I xn--55qw42g
+ 0x002f66ca, // n0x03a2 c0x0000 (---------------) + I xn--55qx5d
+ 0x002f77cb, // n0x03a3 c0x0000 (---------------) + I xn--6frz82g
+ 0x002f7d0e, // n0x03a4 c0x0000 (---------------) + I xn--6qq986b3xl
+ 0x002f884c, // n0x03a5 c0x0000 (---------------) + I xn--80adxhks
+ 0x002f908b, // n0x03a6 c0x0000 (---------------) + I xn--80ao21a
+ 0x002f934c, // n0x03a7 c0x0000 (---------------) + I xn--80asehdb
+ 0x002fd30a, // n0x03a8 c0x0000 (---------------) + I xn--80aswg
+ 0x5dafe78a, // n0x03a9 c0x0176 (n0x1bbc-n0x1bc2) + I xn--90a3ac
+ 0x0030060a, // n0x03aa c0x0000 (---------------) + I xn--9et52u
+ 0x00302d8e, // n0x03ab c0x0000 (---------------) + I xn--b4w605ferd
+ 0x0030d409, // n0x03ac c0x0000 (---------------) + I xn--c1avg
+ 0x0030e04a, // n0x03ad c0x0000 (---------------) + I xn--cg4bki
+ 0x0030eb56, // n0x03ae c0x0000 (---------------) + I xn--clchc0ea0b2g2a9gcd
+ 0x0030fecb, // n0x03af c0x0000 (---------------) + I xn--czr694b
+ 0x0031060a, // n0x03b0 c0x0000 (---------------) + I xn--czrs0t
+ 0x00310b8a, // n0x03b1 c0x0000 (---------------) + I xn--czru2d
+ 0x0031234b, // n0x03b2 c0x0000 (---------------) + I xn--d1acj3b
+ 0x003160cd, // n0x03b3 c0x0000 (---------------) + I xn--eckvdtc9d
+ 0x00316bcb, // n0x03b4 c0x0000 (---------------) + I xn--efvy88h
+ 0x0031898e, // n0x03b5 c0x0000 (---------------) + I xn--fiq228c5hs
+ 0x00318f4a, // n0x03b6 c0x0000 (---------------) + I xn--fiq64b
+ 0x0031abca, // n0x03b7 c0x0000 (---------------) + I xn--fiqs8s
+ 0x0031af8a, // n0x03b8 c0x0000 (---------------) + I xn--fiqz9s
+ 0x0031ba4b, // n0x03b9 c0x0000 (---------------) + I xn--fjq720a
+ 0x0031c28b, // n0x03ba c0x0000 (---------------) + I xn--flw351e
+ 0x0031c54d, // n0x03bb c0x0000 (---------------) + I xn--fpcrj9c3d
+ 0x0031d68d, // n0x03bc c0x0000 (---------------) + I xn--fzc2c9e2c
+ 0x0031dbcb, // n0x03bd c0x0000 (---------------) + I xn--gecrj9c
+ 0x00320c0b, // n0x03be c0x0000 (---------------) + I xn--h2brj9c
+ 0x0032560b, // n0x03bf c0x0000 (---------------) + I xn--hxt814e
+ 0x0032608f, // n0x03c0 c0x0000 (---------------) + I xn--i1b6b1a6a2e
+ 0x0032644b, // n0x03c1 c0x0000 (---------------) + I xn--imr513n
+ 0x00326e4a, // n0x03c2 c0x0000 (---------------) + I xn--io0a7i
+ 0x00327389, // n0x03c3 c0x0000 (---------------) + I xn--j1amh
+ 0x0032774b, // n0x03c4 c0x0000 (---------------) + I xn--j6w193g
+ 0x00328e4f, // n0x03c5 c0x0000 (---------------) + I xn--kcrx77d1x4a
+ 0x0032b4cb, // n0x03c6 c0x0000 (---------------) + I xn--kprw13d
+ 0x0032b78b, // n0x03c7 c0x0000 (---------------) + I xn--kpry57d
+ 0x0032ba4a, // n0x03c8 c0x0000 (---------------) + I xn--kput3i
+ 0x00332049, // n0x03c9 c0x0000 (---------------) + I xn--l1acc
+ 0x0033600f, // n0x03ca c0x0000 (---------------) + I xn--lgbbat1ad8j
+ 0x00339ccc, // n0x03cb c0x0000 (---------------) + I xn--mgb2ddes
+ 0x0033a04c, // n0x03cc c0x0000 (---------------) + I xn--mgb9awbf
+ 0x0033a6ce, // n0x03cd c0x0000 (---------------) + I xn--mgba3a3ejt
+ 0x0033b00f, // n0x03ce c0x0000 (---------------) + I xn--mgba3a4f16a
+ 0x0033b3ce, // n0x03cf c0x0000 (---------------) + I xn--mgba3a4fra
+ 0x0033bd8e, // n0x03d0 c0x0000 (---------------) + I xn--mgbaam7a8h
+ 0x0033c34c, // n0x03d1 c0x0000 (---------------) + I xn--mgbab2bd
+ 0x0033c64e, // n0x03d2 c0x0000 (---------------) + I xn--mgbayh7gpa
+ 0x0033ca8e, // n0x03d3 c0x0000 (---------------) + I xn--mgbb9fbpob
+ 0x0033cfce, // n0x03d4 c0x0000 (---------------) + I xn--mgbbh1a71e
+ 0x0033d34f, // n0x03d5 c0x0000 (---------------) + I xn--mgbc0a9azcg
+ 0x0033d713, // n0x03d6 c0x0000 (---------------) + I xn--mgberp4a5d4a87g
+ 0x0033dbd1, // n0x03d7 c0x0000 (---------------) + I xn--mgberp4a5d4ar
+ 0x0033e013, // n0x03d8 c0x0000 (---------------) + I xn--mgbqly7c0a67fbc
+ 0x0033ea90, // n0x03d9 c0x0000 (---------------) + I xn--mgbqly7cvafr
+ 0x0033f2cc, // n0x03da c0x0000 (---------------) + I xn--mgbt3dhd
+ 0x0033f5cc, // n0x03db c0x0000 (---------------) + I xn--mgbtf8fl
+ 0x0033fa8e, // n0x03dc c0x0000 (---------------) + I xn--mgbx4cd0ab
+ 0x0034808a, // n0x03dd c0x0000 (---------------) + I xn--mxtq1m
+ 0x0034844c, // n0x03de c0x0000 (---------------) + I xn--ngbc5azd
+ 0x0034874c, // n0x03df c0x0000 (---------------) + I xn--ngbe9e0a
+ 0x00349e0b, // n0x03e0 c0x0000 (---------------) + I xn--nnx388a
+ 0x0034a0c8, // n0x03e1 c0x0000 (---------------) + I xn--node
+ 0x0034a509, // n0x03e2 c0x0000 (---------------) + I xn--nqv7f
+ 0x0034a50f, // n0x03e3 c0x0000 (---------------) + I xn--nqv7fs00ema
+ 0x0034bd0b, // n0x03e4 c0x0000 (---------------) + I xn--nyqy26a
+ 0x0034c60a, // n0x03e5 c0x0000 (---------------) + I xn--o3cw4h
+ 0x0034dd0c, // n0x03e6 c0x0000 (---------------) + I xn--ogbpf8fl
+ 0x0034eec9, // n0x03e7 c0x0000 (---------------) + I xn--p1acf
+ 0x0034f408, // n0x03e8 c0x0000 (---------------) + I xn--p1ai
+ 0x0034f70b, // n0x03e9 c0x0000 (---------------) + I xn--pgbs0dh
+ 0x00350d8b, // n0x03ea c0x0000 (---------------) + I xn--q9jyb4c
+ 0x003512cc, // n0x03eb c0x0000 (---------------) + I xn--qcka1pmc
+ 0x003543cb, // n0x03ec c0x0000 (---------------) + I xn--rhqv96g
+ 0x00358e4b, // n0x03ed c0x0000 (---------------) + I xn--s9brj9c
+ 0x0035b88b, // n0x03ee c0x0000 (---------------) + I xn--ses554g
+ 0x003742ca, // n0x03ef c0x0000 (---------------) + I xn--unup4y
+ 0x00375217, // n0x03f0 c0x0000 (---------------) + I xn--vermgensberater-ctb
+ 0x003760d8, // n0x03f1 c0x0000 (---------------) + I xn--vermgensberatung-pwb
+ 0x0037a409, // n0x03f2 c0x0000 (---------------) + I xn--vhquv
+ 0x0037b88b, // n0x03f3 c0x0000 (---------------) + I xn--vuq861b
+ 0x0037c38a, // n0x03f4 c0x0000 (---------------) + I xn--wgbh1c
+ 0x0037c90a, // n0x03f5 c0x0000 (---------------) + I xn--wgbl6a
+ 0x0037cb8b, // n0x03f6 c0x0000 (---------------) + I xn--xhq521b
+ 0x0037d810, // n0x03f7 c0x0000 (---------------) + I xn--xkc2al3hye2a
+ 0x0037dc11, // n0x03f8 c0x0000 (---------------) + I xn--xkc2dl3a5ee0h
+ 0x0037f00d, // n0x03f9 c0x0000 (---------------) + I xn--yfro4i67o
+ 0x0037f70d, // n0x03fa c0x0000 (---------------) + I xn--ygbi2ammx
+ 0x0038528b, // n0x03fb c0x0000 (---------------) + I xn--zfr164b
+ 0x00385e83, // n0x03fc c0x0000 (---------------) + I xxx
+ 0x0022aec3, // n0x03fd c0x0000 (---------------) + I xyz
+ 0x002e6806, // n0x03fe c0x0000 (---------------) + I yachts
+ 0x0021a607, // n0x03ff c0x0000 (---------------) + I yamaxun
+ 0x00305246, // n0x0400 c0x0000 (---------------) + I yandex
+ 0x0161ef02, // n0x0401 c0x0005 (---------------)* o I ye
+ 0x002e6549, // n0x0402 c0x0000 (---------------) + I yodobashi
+ 0x00367504, // n0x0403 c0x0000 (---------------) + I yoga
+ 0x00345bc8, // n0x0404 c0x0000 (---------------) + I yokohama
+ 0x00383287, // n0x0405 c0x0000 (---------------) + I youtube
+ 0x0023f602, // n0x0406 c0x0000 (---------------) + I yt
+ 0x016028c2, // n0x0407 c0x0005 (---------------)* o I za
+ 0x002b7b44, // n0x0408 c0x0000 (---------------) + I zara
+ 0x0035f684, // n0x0409 c0x0000 (---------------) + I zero
+ 0x0023c103, // n0x040a c0x0000 (---------------) + I zip
+ 0x01675302, // n0x040b c0x0005 (---------------)* o I zm
+ 0x002ccfc4, // n0x040c c0x0000 (---------------) + I zone
+ 0x00347387, // n0x040d c0x0000 (---------------) + I zuerich
+ 0x0167cc82, // n0x040e c0x0005 (---------------)* o I zw
+ 0x00232dc3, // n0x040f c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0410 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0411 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x0412 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x0413 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x0414 c0x0000 (---------------) + I org
+ 0x002104c3, // n0x0415 c0x0000 (---------------) + I nom
+ 0x00200b82, // n0x0416 c0x0000 (---------------) + I ac
+ 0x0009e448, // n0x0417 c0x0000 (---------------) + blogspot
+ 0x00200882, // n0x0418 c0x0000 (---------------) + I co
+ 0x00209ac3, // n0x0419 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x041a c0x0000 (---------------) + I mil
+ 0x00218643, // n0x041b c0x0000 (---------------) + I net
+ 0x0024d043, // n0x041c c0x0000 (---------------) + I org
+ 0x00251983, // n0x041d c0x0000 (---------------) + I sch
+ 0x00308bd6, // n0x041e c0x0000 (---------------) + I accident-investigation
+ 0x0030b9d3, // n0x041f c0x0000 (---------------) + I accident-prevention
+ 0x00233789, // n0x0420 c0x0000 (---------------) + I aerobatic
+ 0x0034c9c8, // n0x0421 c0x0000 (---------------) + I aeroclub
+ 0x002e1989, // n0x0422 c0x0000 (---------------) + I aerodrome
+ 0x0034f106, // n0x0423 c0x0000 (---------------) + I agents
+ 0x00347910, // n0x0424 c0x0000 (---------------) + I air-surveillance
+ 0x00222953, // n0x0425 c0x0000 (---------------) + I air-traffic-control
+ 0x00243bc8, // n0x0426 c0x0000 (---------------) + I aircraft
+ 0x00272647, // n0x0427 c0x0000 (---------------) + I airline
+ 0x0027df47, // n0x0428 c0x0000 (---------------) + I airport
+ 0x00295a4a, // n0x0429 c0x0000 (---------------) + I airtraffic
+ 0x00383909, // n0x042a c0x0000 (---------------) + I ambulance
+ 0x00365e49, // n0x042b c0x0000 (---------------) + I amusement
+ 0x002c51cb, // n0x042c c0x0000 (---------------) + I association
+ 0x003220c6, // n0x042d c0x0000 (---------------) + I author
+ 0x0025044a, // n0x042e c0x0000 (---------------) + I ballooning
+ 0x00227806, // n0x042f c0x0000 (---------------) + I broker
+ 0x00367143, // n0x0430 c0x0000 (---------------) + I caa
+ 0x00214585, // n0x0431 c0x0000 (---------------) + I cargo
+ 0x0024a608, // n0x0432 c0x0000 (---------------) + I catering
+ 0x002d250d, // n0x0433 c0x0000 (---------------) + I certification
+ 0x003474cc, // n0x0434 c0x0000 (---------------) + I championship
+ 0x0026e587, // n0x0435 c0x0000 (---------------) + I charter
+ 0x00332c0d, // n0x0436 c0x0000 (---------------) + I civilaviation
+ 0x0034cac4, // n0x0437 c0x0000 (---------------) + I club
+ 0x0023588a, // n0x0438 c0x0000 (---------------) + I conference
+ 0x0023668a, // n0x0439 c0x0000 (---------------) + I consultant
+ 0x00236b4a, // n0x043a c0x0000 (---------------) + I consulting
+ 0x00200887, // n0x043b c0x0000 (---------------) + I control
+ 0x0023e8c7, // n0x043c c0x0000 (---------------) + I council
+ 0x00240284, // n0x043d c0x0000 (---------------) + I crew
+ 0x00237ec6, // n0x043e c0x0000 (---------------) + I design
+ 0x0036dfc4, // n0x043f c0x0000 (---------------) + I dgca
+ 0x002d42c8, // n0x0440 c0x0000 (---------------) + I educator
+ 0x0020a509, // n0x0441 c0x0000 (---------------) + I emergency
+ 0x0030dc46, // n0x0442 c0x0000 (---------------) + I engine
+ 0x0030dc48, // n0x0443 c0x0000 (---------------) + I engineer
+ 0x0024430d, // n0x0444 c0x0000 (---------------) + I entertainment
+ 0x002126c9, // n0x0445 c0x0000 (---------------) + I equipment
+ 0x002ed008, // n0x0446 c0x0000 (---------------) + I exchange
+ 0x0022acc7, // n0x0447 c0x0000 (---------------) + I express
+ 0x0023ee8a, // n0x0448 c0x0000 (---------------) + I federation
+ 0x0024cd46, // n0x0449 c0x0000 (---------------) + I flight
+ 0x00257507, // n0x044a c0x0000 (---------------) + I freight
+ 0x002e7f04, // n0x044b c0x0000 (---------------) + I fuel
+ 0x0023c587, // n0x044c c0x0000 (---------------) + I gliding
+ 0x0025ee0a, // n0x044d c0x0000 (---------------) + I government
+ 0x00239a0e, // n0x044e c0x0000 (---------------) + I groundhandling
+ 0x00226905, // n0x044f c0x0000 (---------------) + I group
+ 0x0037354b, // n0x0450 c0x0000 (---------------) + I hanggliding
+ 0x0028efc9, // n0x0451 c0x0000 (---------------) + I homebuilt
+ 0x002fde89, // n0x0452 c0x0000 (---------------) + I insurance
+ 0x00206507, // n0x0453 c0x0000 (---------------) + I journal
+ 0x0020650a, // n0x0454 c0x0000 (---------------) + I journalist
+ 0x00224b07, // n0x0455 c0x0000 (---------------) + I leasing
+ 0x0024d2c9, // n0x0456 c0x0000 (---------------) + I logistics
+ 0x00285f48, // n0x0457 c0x0000 (---------------) + I magazine
+ 0x0022aa4b, // n0x0458 c0x0000 (---------------) + I maintenance
+ 0x0035c84b, // n0x0459 c0x0000 (---------------) + I marketplace
+ 0x0021e585, // n0x045a c0x0000 (---------------) + I media
+ 0x002494ca, // n0x045b c0x0000 (---------------) + I microlight
+ 0x00317449, // n0x045c c0x0000 (---------------) + I modelling
+ 0x002015ca, // n0x045d c0x0000 (---------------) + I navigation
+ 0x0023c18b, // n0x045e c0x0000 (---------------) + I parachuting
+ 0x0023c48b, // n0x045f c0x0000 (---------------) + I paragliding
+ 0x002c4f55, // n0x0460 c0x0000 (---------------) + I passenger-association
+ 0x002c8e05, // n0x0461 c0x0000 (---------------) + I pilot
+ 0x0022ad45, // n0x0462 c0x0000 (---------------) + I press
+ 0x002cfeca, // n0x0463 c0x0000 (---------------) + I production
+ 0x0031e10a, // n0x0464 c0x0000 (---------------) + I recreation
+ 0x00226387, // n0x0465 c0x0000 (---------------) + I repbody
+ 0x00207083, // n0x0466 c0x0000 (---------------) + I res
+ 0x002d8188, // n0x0467 c0x0000 (---------------) + I research
+ 0x002c158a, // n0x0468 c0x0000 (---------------) + I rotorcraft
+ 0x00280546, // n0x0469 c0x0000 (---------------) + I safety
+ 0x002833c9, // n0x046a c0x0000 (---------------) + I scientist
+ 0x00290b08, // n0x046b c0x0000 (---------------) + I services
+ 0x002f5744, // n0x046c c0x0000 (---------------) + I show
+ 0x0034c3c9, // n0x046d c0x0000 (---------------) + I skydiving
+ 0x00264f88, // n0x046e c0x0000 (---------------) + I software
+ 0x0033adc7, // n0x046f c0x0000 (---------------) + I student
+ 0x00226b44, // n0x0470 c0x0000 (---------------) + I taxi
+ 0x00243046, // n0x0471 c0x0000 (---------------) + I trader
+ 0x00298847, // n0x0472 c0x0000 (---------------) + I trading
+ 0x002a82c7, // n0x0473 c0x0000 (---------------) + I trainer
+ 0x002ba245, // n0x0474 c0x0000 (---------------) + I union
+ 0x0022674c, // n0x0475 c0x0000 (---------------) + I workinggroup
+ 0x0022e545, // n0x0476 c0x0000 (---------------) + I works
+ 0x00232dc3, // n0x0477 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0478 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0479 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x047a c0x0000 (---------------) + I net
+ 0x0024d043, // n0x047b c0x0000 (---------------) + I org
+ 0x00200882, // n0x047c c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x047d c0x0000 (---------------) + I com
+ 0x00218643, // n0x047e c0x0000 (---------------) + I net
+ 0x002104c3, // n0x047f c0x0000 (---------------) + I nom
+ 0x0024d043, // n0x0480 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x0481 c0x0000 (---------------) + I com
+ 0x00218643, // n0x0482 c0x0000 (---------------) + I net
+ 0x00215fc3, // n0x0483 c0x0000 (---------------) + I off
+ 0x0024d043, // n0x0484 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x0485 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0486 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0487 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x0488 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x0489 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x048a c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x048b c0x0000 (---------------) + I com
+ 0x0021e083, // n0x048c c0x0000 (---------------) + I edu
+ 0x00218643, // n0x048d c0x0000 (---------------) + I net
+ 0x0024d043, // n0x048e c0x0000 (---------------) + I org
+ 0x00200882, // n0x048f c0x0000 (---------------) + I co
+ 0x00205742, // n0x0490 c0x0000 (---------------) + I ed
+ 0x00236d82, // n0x0491 c0x0000 (---------------) + I gv
+ 0x002014c2, // n0x0492 c0x0000 (---------------) + I it
+ 0x00204f42, // n0x0493 c0x0000 (---------------) + I og
+ 0x00226402, // n0x0494 c0x0000 (---------------) + I pb
+ 0x04632dc3, // n0x0495 c0x0011 (n0x049e-n0x049f) + I com
+ 0x0021e083, // n0x0496 c0x0000 (---------------) + I edu
+ 0x003704c3, // n0x0497 c0x0000 (---------------) + I gob
+ 0x00209ac3, // n0x0498 c0x0000 (---------------) + I gov
+ 0x002188c3, // n0x0499 c0x0000 (---------------) + I int
+ 0x00240443, // n0x049a c0x0000 (---------------) + I mil
+ 0x00218643, // n0x049b c0x0000 (---------------) + I net
+ 0x0024d043, // n0x049c c0x0000 (---------------) + I org
+ 0x0022a0c3, // n0x049d c0x0000 (---------------) + I tur
+ 0x0009e448, // n0x049e c0x0000 (---------------) + blogspot
+ 0x0024ffc4, // n0x049f c0x0000 (---------------) + I e164
+ 0x0020fac7, // n0x04a0 c0x0000 (---------------) + I in-addr
+ 0x00213ac3, // n0x04a1 c0x0000 (---------------) + I ip6
+ 0x0027a544, // n0x04a2 c0x0000 (---------------) + I iris
+ 0x00206383, // n0x04a3 c0x0000 (---------------) + I uri
+ 0x00206583, // n0x04a4 c0x0000 (---------------) + I urn
+ 0x00209ac3, // n0x04a5 c0x0000 (---------------) + I gov
+ 0x00200b82, // n0x04a6 c0x0000 (---------------) + I ac
+ 0x00002183, // n0x04a7 c0x0000 (---------------) + biz
+ 0x05600882, // n0x04a8 c0x0015 (n0x04ad-n0x04ae) + I co
+ 0x00236d82, // n0x04a9 c0x0000 (---------------) + I gv
+ 0x00008a44, // n0x04aa c0x0000 (---------------) + info
+ 0x00200d02, // n0x04ab c0x0000 (---------------) + I or
+ 0x000cfac4, // n0x04ac c0x0000 (---------------) + priv
+ 0x0009e448, // n0x04ad c0x0000 (---------------) + blogspot
+ 0x002388c3, // n0x04ae c0x0000 (---------------) + I act
+ 0x002a4783, // n0x04af c0x0000 (---------------) + I asn
+ 0x05e32dc3, // n0x04b0 c0x0017 (n0x04c0-n0x04c1) + I com
+ 0x00235884, // n0x04b1 c0x0000 (---------------) + I conf
+ 0x0621e083, // n0x04b2 c0x0018 (n0x04c1-n0x04c9) + I edu
+ 0x06609ac3, // n0x04b3 c0x0019 (n0x04c9-n0x04ce) + I gov
+ 0x00205942, // n0x04b4 c0x0000 (---------------) + I id
+ 0x00208a44, // n0x04b5 c0x0000 (---------------) + I info
+ 0x00218643, // n0x04b6 c0x0000 (---------------) + I net
+ 0x00245d43, // n0x04b7 c0x0000 (---------------) + I nsw
+ 0x00200902, // n0x04b8 c0x0000 (---------------) + I nt
+ 0x0024d043, // n0x04b9 c0x0000 (---------------) + I org
+ 0x0021b602, // n0x04ba c0x0000 (---------------) + I oz
+ 0x0022d503, // n0x04bb c0x0000 (---------------) + I qld
+ 0x00203a82, // n0x04bc c0x0000 (---------------) + I sa
+ 0x00208883, // n0x04bd c0x0000 (---------------) + I tas
+ 0x00252603, // n0x04be c0x0000 (---------------) + I vic
+ 0x00200142, // n0x04bf c0x0000 (---------------) + I wa
+ 0x0009e448, // n0x04c0 c0x0000 (---------------) + blogspot
+ 0x002388c3, // n0x04c1 c0x0000 (---------------) + I act
+ 0x00245d43, // n0x04c2 c0x0000 (---------------) + I nsw
+ 0x00200902, // n0x04c3 c0x0000 (---------------) + I nt
+ 0x0022d503, // n0x04c4 c0x0000 (---------------) + I qld
+ 0x00203a82, // n0x04c5 c0x0000 (---------------) + I sa
+ 0x00208883, // n0x04c6 c0x0000 (---------------) + I tas
+ 0x00252603, // n0x04c7 c0x0000 (---------------) + I vic
+ 0x00200142, // n0x04c8 c0x0000 (---------------) + I wa
+ 0x0022d503, // n0x04c9 c0x0000 (---------------) + I qld
+ 0x00203a82, // n0x04ca c0x0000 (---------------) + I sa
+ 0x00208883, // n0x04cb c0x0000 (---------------) + I tas
+ 0x00252603, // n0x04cc c0x0000 (---------------) + I vic
+ 0x00200142, // n0x04cd c0x0000 (---------------) + I wa
+ 0x00232dc3, // n0x04ce c0x0000 (---------------) + I com
+ 0x00202183, // n0x04cf c0x0000 (---------------) + I biz
+ 0x00232dc3, // n0x04d0 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x04d1 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x04d2 c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x04d3 c0x0000 (---------------) + I info
+ 0x002188c3, // n0x04d4 c0x0000 (---------------) + I int
+ 0x00240443, // n0x04d5 c0x0000 (---------------) + I mil
+ 0x00267944, // n0x04d6 c0x0000 (---------------) + I name
+ 0x00218643, // n0x04d7 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x04d8 c0x0000 (---------------) + I org
+ 0x00200a82, // n0x04d9 c0x0000 (---------------) + I pp
+ 0x002cfc43, // n0x04da c0x0000 (---------------) + I pro
+ 0x00200882, // n0x04db c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x04dc c0x0000 (---------------) + I com
+ 0x0021e083, // n0x04dd c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x04de c0x0000 (---------------) + I gov
+ 0x00240443, // n0x04df c0x0000 (---------------) + I mil
+ 0x00218643, // n0x04e0 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x04e1 c0x0000 (---------------) + I org
+ 0x00204642, // n0x04e2 c0x0000 (---------------) + I rs
+ 0x00272984, // n0x04e3 c0x0000 (---------------) + I unbi
+ 0x00261304, // n0x04e4 c0x0000 (---------------) + I unsa
+ 0x00202183, // n0x04e5 c0x0000 (---------------) + I biz
+ 0x00200882, // n0x04e6 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x04e7 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x04e8 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x04e9 c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x04ea c0x0000 (---------------) + I info
+ 0x00218643, // n0x04eb c0x0000 (---------------) + I net
+ 0x0024d043, // n0x04ec c0x0000 (---------------) + I org
+ 0x002dc745, // n0x04ed c0x0000 (---------------) + I store
+ 0x0028dc82, // n0x04ee c0x0000 (---------------) + I tv
+ 0x00200b82, // n0x04ef c0x0000 (---------------) + I ac
+ 0x0009e448, // n0x04f0 c0x0000 (---------------) + blogspot
+ 0x00209ac3, // n0x04f1 c0x0000 (---------------) + I gov
+ 0x00245441, // n0x04f2 c0x0000 (---------------) + I 0
+ 0x002075c1, // n0x04f3 c0x0000 (---------------) + I 1
+ 0x0020c501, // n0x04f4 c0x0000 (---------------) + I 2
+ 0x00207141, // n0x04f5 c0x0000 (---------------) + I 3
+ 0x00250081, // n0x04f6 c0x0000 (---------------) + I 4
+ 0x00299841, // n0x04f7 c0x0000 (---------------) + I 5
+ 0x00213b41, // n0x04f8 c0x0000 (---------------) + I 6
+ 0x00245541, // n0x04f9 c0x0000 (---------------) + I 7
+ 0x002f4b41, // n0x04fa c0x0000 (---------------) + I 8
+ 0x002f4dc1, // n0x04fb c0x0000 (---------------) + I 9
+ 0x00200101, // n0x04fc c0x0000 (---------------) + I a
+ 0x00200001, // n0x04fd c0x0000 (---------------) + I b
+ 0x00200401, // n0x04fe c0x0000 (---------------) + I c
+ 0x002003c1, // n0x04ff c0x0000 (---------------) + I d
+ 0x00200081, // n0x0500 c0x0000 (---------------) + I e
+ 0x00203841, // n0x0501 c0x0000 (---------------) + I f
+ 0x002002c1, // n0x0502 c0x0000 (---------------) + I g
+ 0x00200201, // n0x0503 c0x0000 (---------------) + I h
+ 0x00200041, // n0x0504 c0x0000 (---------------) + I i
+ 0x00202e01, // n0x0505 c0x0000 (---------------) + I j
+ 0x00200481, // n0x0506 c0x0000 (---------------) + I k
+ 0x002000c1, // n0x0507 c0x0000 (---------------) + I l
+ 0x00200f41, // n0x0508 c0x0000 (---------------) + I m
+ 0x00200281, // n0x0509 c0x0000 (---------------) + I n
+ 0x00200341, // n0x050a c0x0000 (---------------) + I o
+ 0x00200a81, // n0x050b c0x0000 (---------------) + I p
+ 0x00206c81, // n0x050c c0x0000 (---------------) + I q
+ 0x002006c1, // n0x050d c0x0000 (---------------) + I r
+ 0x002001c1, // n0x050e c0x0000 (---------------) + I s
+ 0x00200301, // n0x050f c0x0000 (---------------) + I t
+ 0x00200541, // n0x0510 c0x0000 (---------------) + I u
+ 0x00201641, // n0x0511 c0x0000 (---------------) + I v
+ 0x00200141, // n0x0512 c0x0000 (---------------) + I w
+ 0x002013c1, // n0x0513 c0x0000 (---------------) + I x
+ 0x00202981, // n0x0514 c0x0000 (---------------) + I y
+ 0x00201241, // n0x0515 c0x0000 (---------------) + I z
+ 0x00232dc3, // n0x0516 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0517 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0518 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x0519 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x051a c0x0000 (---------------) + I org
+ 0x00200882, // n0x051b c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x051c c0x0000 (---------------) + I com
+ 0x0021e083, // n0x051d c0x0000 (---------------) + I edu
+ 0x00200d02, // n0x051e c0x0000 (---------------) + I or
+ 0x0024d043, // n0x051f c0x0000 (---------------) + I org
+ 0x0000dc06, // n0x0520 c0x0000 (---------------) + dyndns
+ 0x00050e4a, // n0x0521 c0x0000 (---------------) + for-better
+ 0x00081388, // n0x0522 c0x0000 (---------------) + for-more
+ 0x00051488, // n0x0523 c0x0000 (---------------) + for-some
+ 0x00051e87, // n0x0524 c0x0000 (---------------) + for-the
+ 0x00141246, // n0x0525 c0x0000 (---------------) + selfip
+ 0x0002c186, // n0x0526 c0x0000 (---------------) + webhop
+ 0x00278344, // n0x0527 c0x0000 (---------------) + I asso
+ 0x003125c7, // n0x0528 c0x0000 (---------------) + I barreau
+ 0x0009e448, // n0x0529 c0x0000 (---------------) + blogspot
+ 0x00252544, // n0x052a c0x0000 (---------------) + I gouv
+ 0x00232dc3, // n0x052b c0x0000 (---------------) + I com
+ 0x0021e083, // n0x052c c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x052d c0x0000 (---------------) + I gov
+ 0x00218643, // n0x052e c0x0000 (---------------) + I net
+ 0x0024d043, // n0x052f c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x0530 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0531 c0x0000 (---------------) + I edu
+ 0x003704c3, // n0x0532 c0x0000 (---------------) + I gob
+ 0x00209ac3, // n0x0533 c0x0000 (---------------) + I gov
+ 0x002188c3, // n0x0534 c0x0000 (---------------) + I int
+ 0x00240443, // n0x0535 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x0536 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x0537 c0x0000 (---------------) + I org
+ 0x0028dc82, // n0x0538 c0x0000 (---------------) + I tv
+ 0x002c6203, // n0x0539 c0x0000 (---------------) + I adm
+ 0x00244b43, // n0x053a c0x0000 (---------------) + I adv
+ 0x00263c03, // n0x053b c0x0000 (---------------) + I agr
+ 0x00203582, // n0x053c c0x0000 (---------------) + I am
+ 0x00381d43, // n0x053d c0x0000 (---------------) + I arq
+ 0x00208d43, // n0x053e c0x0000 (---------------) + I art
+ 0x00213403, // n0x053f c0x0000 (---------------) + I ato
+ 0x00200001, // n0x0540 c0x0000 (---------------) + I b
+ 0x00208743, // n0x0541 c0x0000 (---------------) + I bio
+ 0x0029e444, // n0x0542 c0x0000 (---------------) + I blog
+ 0x002da483, // n0x0543 c0x0000 (---------------) + I bmd
+ 0x002ed943, // n0x0544 c0x0000 (---------------) + I cim
+ 0x00369103, // n0x0545 c0x0000 (---------------) + I cng
+ 0x0022fe43, // n0x0546 c0x0000 (---------------) + I cnt
+ 0x0a232dc3, // n0x0547 c0x0028 (n0x057f-n0x0580) + I com
+ 0x0023a884, // n0x0548 c0x0000 (---------------) + I coop
+ 0x002e6183, // n0x0549 c0x0000 (---------------) + I ecn
+ 0x00208e43, // n0x054a c0x0000 (---------------) + I eco
+ 0x0021e083, // n0x054b c0x0000 (---------------) + I edu
+ 0x002370c3, // n0x054c c0x0000 (---------------) + I emp
+ 0x002abd43, // n0x054d c0x0000 (---------------) + I eng
+ 0x0027b443, // n0x054e c0x0000 (---------------) + I esp
+ 0x002ed8c3, // n0x054f c0x0000 (---------------) + I etc
+ 0x00226e83, // n0x0550 c0x0000 (---------------) + I eti
+ 0x002125c3, // n0x0551 c0x0000 (---------------) + I far
+ 0x0024d284, // n0x0552 c0x0000 (---------------) + I flog
+ 0x00257f82, // n0x0553 c0x0000 (---------------) + I fm
+ 0x002500c3, // n0x0554 c0x0000 (---------------) + I fnd
+ 0x002562c3, // n0x0555 c0x0000 (---------------) + I fot
+ 0x002700c3, // n0x0556 c0x0000 (---------------) + I fst
+ 0x00367843, // n0x0557 c0x0000 (---------------) + I g12
+ 0x002db283, // n0x0558 c0x0000 (---------------) + I ggf
+ 0x00209ac3, // n0x0559 c0x0000 (---------------) + I gov
+ 0x00316683, // n0x055a c0x0000 (---------------) + I imb
+ 0x002202c3, // n0x055b c0x0000 (---------------) + I ind
+ 0x00206e83, // n0x055c c0x0000 (---------------) + I inf
+ 0x00204703, // n0x055d c0x0000 (---------------) + I jor
+ 0x002ab543, // n0x055e c0x0000 (---------------) + I jus
+ 0x002308c3, // n0x055f c0x0000 (---------------) + I leg
+ 0x00242a43, // n0x0560 c0x0000 (---------------) + I lel
+ 0x002035c3, // n0x0561 c0x0000 (---------------) + I mat
+ 0x00210e83, // n0x0562 c0x0000 (---------------) + I med
+ 0x00240443, // n0x0563 c0x0000 (---------------) + I mil
+ 0x00203302, // n0x0564 c0x0000 (---------------) + I mp
+ 0x00294543, // n0x0565 c0x0000 (---------------) + I mus
+ 0x00218643, // n0x0566 c0x0000 (---------------) + I net
+ 0x016104c3, // n0x0567 c0x0005 (---------------)* o I nom
+ 0x00282d83, // n0x0568 c0x0000 (---------------) + I not
+ 0x00200903, // n0x0569 c0x0000 (---------------) + I ntr
+ 0x00210083, // n0x056a c0x0000 (---------------) + I odo
+ 0x0024d043, // n0x056b c0x0000 (---------------) + I org
+ 0x002a6f03, // n0x056c c0x0000 (---------------) + I ppg
+ 0x002cfc43, // n0x056d c0x0000 (---------------) + I pro
+ 0x00274fc3, // n0x056e c0x0000 (---------------) + I psc
+ 0x00285203, // n0x056f c0x0000 (---------------) + I psi
+ 0x002d3a43, // n0x0570 c0x0000 (---------------) + I qsl
+ 0x00313c05, // n0x0571 c0x0000 (---------------) + I radio
+ 0x0022a143, // n0x0572 c0x0000 (---------------) + I rec
+ 0x0031b1c3, // n0x0573 c0x0000 (---------------) + I slg
+ 0x002dc283, // n0x0574 c0x0000 (---------------) + I srv
+ 0x00226b44, // n0x0575 c0x0000 (---------------) + I taxi
+ 0x002b6343, // n0x0576 c0x0000 (---------------) + I teo
+ 0x002032c3, // n0x0577 c0x0000 (---------------) + I tmp
+ 0x0029c303, // n0x0578 c0x0000 (---------------) + I trd
+ 0x0022a0c3, // n0x0579 c0x0000 (---------------) + I tur
+ 0x0028dc82, // n0x057a c0x0000 (---------------) + I tv
+ 0x0023c8c3, // n0x057b c0x0000 (---------------) + I vet
+ 0x002f2084, // n0x057c c0x0000 (---------------) + I vlog
+ 0x0022d744, // n0x057d c0x0000 (---------------) + I wiki
+ 0x00275243, // n0x057e c0x0000 (---------------) + I zlg
+ 0x0009e448, // n0x057f c0x0000 (---------------) + blogspot
+ 0x00232dc3, // n0x0580 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0581 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0582 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x0583 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x0584 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x0585 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0586 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0587 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x0588 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x0589 c0x0000 (---------------) + I org
+ 0x00200882, // n0x058a c0x0000 (---------------) + I co
+ 0x0024d043, // n0x058b c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x058c c0x0000 (---------------) + I com
+ 0x00209ac3, // n0x058d c0x0000 (---------------) + I gov
+ 0x00240443, // n0x058e c0x0000 (---------------) + I mil
+ 0x00215fc2, // n0x058f c0x0000 (---------------) + I of
+ 0x00232dc3, // n0x0590 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0591 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0592 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x0593 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x0594 c0x0000 (---------------) + I org
+ 0x000028c2, // n0x0595 c0x0000 (---------------) + za
+ 0x002005c2, // n0x0596 c0x0000 (---------------) + I ab
+ 0x00214542, // n0x0597 c0x0000 (---------------) + I bc
+ 0x0009e448, // n0x0598 c0x0000 (---------------) + blogspot
+ 0x00000882, // n0x0599 c0x0000 (---------------) + co
+ 0x0030f002, // n0x059a c0x0000 (---------------) + I gc
+ 0x00207b82, // n0x059b c0x0000 (---------------) + I mb
+ 0x0020fe82, // n0x059c c0x0000 (---------------) + I nb
+ 0x00206ec2, // n0x059d c0x0000 (---------------) + I nf
+ 0x00248cc2, // n0x059e c0x0000 (---------------) + I nl
+ 0x0020ae82, // n0x059f c0x0000 (---------------) + I ns
+ 0x00200902, // n0x05a0 c0x0000 (---------------) + I nt
+ 0x0020fd82, // n0x05a1 c0x0000 (---------------) + I nu
+ 0x00200342, // n0x05a2 c0x0000 (---------------) + I on
+ 0x0020c782, // n0x05a3 c0x0000 (---------------) + I pe
+ 0x003513c2, // n0x05a4 c0x0000 (---------------) + I qc
+ 0x00200e02, // n0x05a5 c0x0000 (---------------) + I sk
+ 0x00218482, // n0x05a6 c0x0000 (---------------) + I yk
+ 0x0000dec9, // n0x05a7 c0x0000 (---------------) + ftpaccess
+ 0x0008e90b, // n0x05a8 c0x0000 (---------------) + game-server
+ 0x000c3048, // n0x05a9 c0x0000 (---------------) + myphotos
+ 0x000895c9, // n0x05aa c0x0000 (---------------) + scrapping
+ 0x00209ac3, // n0x05ab c0x0000 (---------------) + I gov
+ 0x0009e448, // n0x05ac c0x0000 (---------------) + blogspot
+ 0x0009e448, // n0x05ad c0x0000 (---------------) + blogspot
+ 0x00200b82, // n0x05ae c0x0000 (---------------) + I ac
+ 0x00278344, // n0x05af c0x0000 (---------------) + I asso
+ 0x00200882, // n0x05b0 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x05b1 c0x0000 (---------------) + I com
+ 0x00205742, // n0x05b2 c0x0000 (---------------) + I ed
+ 0x0021e083, // n0x05b3 c0x0000 (---------------) + I edu
+ 0x00209ac2, // n0x05b4 c0x0000 (---------------) + I go
+ 0x00252544, // n0x05b5 c0x0000 (---------------) + I gouv
+ 0x002188c3, // n0x05b6 c0x0000 (---------------) + I int
+ 0x0024a3c2, // n0x05b7 c0x0000 (---------------) + I md
+ 0x00218643, // n0x05b8 c0x0000 (---------------) + I net
+ 0x00200d02, // n0x05b9 c0x0000 (---------------) + I or
+ 0x0024d043, // n0x05ba c0x0000 (---------------) + I org
+ 0x0022ad46, // n0x05bb c0x0000 (---------------) + I presse
+ 0x00300b8f, // n0x05bc c0x0000 (---------------) + I xn--aroport-bya
+ 0x006b1c03, // n0x05bd c0x0001 (---------------) ! I www
+ 0x00200882, // n0x05be c0x0000 (---------------) + I co
+ 0x003704c3, // n0x05bf c0x0000 (---------------) + I gob
+ 0x00209ac3, // n0x05c0 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x05c1 c0x0000 (---------------) + I mil
+ 0x00200882, // n0x05c2 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x05c3 c0x0000 (---------------) + I com
+ 0x00209ac3, // n0x05c4 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x05c5 c0x0000 (---------------) + I net
+ 0x00200b82, // n0x05c6 c0x0000 (---------------) + I ac
+ 0x00203042, // n0x05c7 c0x0000 (---------------) + I ah
+ 0x0e29ba09, // n0x05c8 c0x0038 (n0x05f3-n0x05f4) o I amazonaws
+ 0x0020bb82, // n0x05c9 c0x0000 (---------------) + I bj
+ 0x00232dc3, // n0x05ca c0x0000 (---------------) + I com
+ 0x0023f102, // n0x05cb c0x0000 (---------------) + I cq
+ 0x0021e083, // n0x05cc c0x0000 (---------------) + I edu
+ 0x00213802, // n0x05cd c0x0000 (---------------) + I fj
+ 0x00218cc2, // n0x05ce c0x0000 (---------------) + I gd
+ 0x00209ac3, // n0x05cf c0x0000 (---------------) + I gov
+ 0x00209602, // n0x05d0 c0x0000 (---------------) + I gs
+ 0x0026bc02, // n0x05d1 c0x0000 (---------------) + I gx
+ 0x002752c2, // n0x05d2 c0x0000 (---------------) + I gz
+ 0x00203082, // n0x05d3 c0x0000 (---------------) + I ha
+ 0x00300202, // n0x05d4 c0x0000 (---------------) + I hb
+ 0x002093c2, // n0x05d5 c0x0000 (---------------) + I he
+ 0x00200202, // n0x05d6 c0x0000 (---------------) + I hi
+ 0x002301c2, // n0x05d7 c0x0000 (---------------) + I hk
+ 0x0029c882, // n0x05d8 c0x0000 (---------------) + I hl
+ 0x00206802, // n0x05d9 c0x0000 (---------------) + I hn
+ 0x002a1cc2, // n0x05da c0x0000 (---------------) + I jl
+ 0x002ddb42, // n0x05db c0x0000 (---------------) + I js
+ 0x00303c42, // n0x05dc c0x0000 (---------------) + I jx
+ 0x00232682, // n0x05dd c0x0000 (---------------) + I ln
+ 0x00240443, // n0x05de c0x0000 (---------------) + I mil
+ 0x00205202, // n0x05df c0x0000 (---------------) + I mo
+ 0x00218643, // n0x05e0 c0x0000 (---------------) + I net
+ 0x00226d42, // n0x05e1 c0x0000 (---------------) + I nm
+ 0x0027c402, // n0x05e2 c0x0000 (---------------) + I nx
+ 0x0024d043, // n0x05e3 c0x0000 (---------------) + I org
+ 0x00381dc2, // n0x05e4 c0x0000 (---------------) + I qh
+ 0x0021bcc2, // n0x05e5 c0x0000 (---------------) + I sc
+ 0x0020acc2, // n0x05e6 c0x0000 (---------------) + I sd
+ 0x002001c2, // n0x05e7 c0x0000 (---------------) + I sh
+ 0x00214782, // n0x05e8 c0x0000 (---------------) + I sn
+ 0x002e3902, // n0x05e9 c0x0000 (---------------) + I sx
+ 0x002046c2, // n0x05ea c0x0000 (---------------) + I tj
+ 0x002548c2, // n0x05eb c0x0000 (---------------) + I tw
+ 0x0022cf82, // n0x05ec c0x0000 (---------------) + I xj
+ 0x002f66ca, // n0x05ed c0x0000 (---------------) + I xn--55qx5d
+ 0x00326e4a, // n0x05ee c0x0000 (---------------) + I xn--io0a7i
+ 0x0034cf0a, // n0x05ef c0x0000 (---------------) + I xn--od0alg
+ 0x003862c2, // n0x05f0 c0x0000 (---------------) + I xz
+ 0x0020dc42, // n0x05f1 c0x0000 (---------------) + I yn
+ 0x0025cf42, // n0x05f2 c0x0000 (---------------) + I zj
+ 0x0e4347c7, // n0x05f3 c0x0039 (n0x05f4-n0x05f5) + compute
+ 0x000e61ca, // n0x05f4 c0x0000 (---------------) + cn-north-1
+ 0x0020b384, // n0x05f5 c0x0000 (---------------) + I arts
+ 0x00232dc3, // n0x05f6 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x05f7 c0x0000 (---------------) + I edu
+ 0x0024a304, // n0x05f8 c0x0000 (---------------) + I firm
+ 0x00209ac3, // n0x05f9 c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x05fa c0x0000 (---------------) + I info
+ 0x002188c3, // n0x05fb c0x0000 (---------------) + I int
+ 0x00240443, // n0x05fc c0x0000 (---------------) + I mil
+ 0x00218643, // n0x05fd c0x0000 (---------------) + I net
+ 0x002104c3, // n0x05fe c0x0000 (---------------) + I nom
+ 0x0024d043, // n0x05ff c0x0000 (---------------) + I org
+ 0x0022a143, // n0x0600 c0x0000 (---------------) + I rec
+ 0x002071c3, // n0x0601 c0x0000 (---------------) + I web
+ 0x0014fc46, // n0x0602 c0x0000 (---------------) + africa
+ 0x0f29ba09, // n0x0603 c0x003c (n0x06c7-n0x06de) o I amazonaws
+ 0x00049187, // n0x0604 c0x0000 (---------------) + appspot
+ 0x000030c2, // n0x0605 c0x0000 (---------------) + ar
+ 0x00180eca, // n0x0606 c0x0000 (---------------) + betainabox
+ 0x000dd187, // n0x0607 c0x0000 (---------------) + blogdns
+ 0x0009e448, // n0x0608 c0x0000 (---------------) + blogspot
+ 0x00007bc2, // n0x0609 c0x0000 (---------------) + br
+ 0x0010acc7, // n0x060a c0x0000 (---------------) + cechire
+ 0x0000074f, // n0x060b c0x0000 (---------------) + cloudcontrolapp
+ 0x0002f10f, // n0x060c c0x0000 (---------------) + cloudcontrolled
+ 0x0002fe42, // n0x060d c0x0000 (---------------) + cn
+ 0x00000882, // n0x060e c0x0000 (---------------) + co
+ 0x0007b388, // n0x060f c0x0000 (---------------) + codespot
+ 0x00007cc2, // n0x0610 c0x0000 (---------------) + de
+ 0x000c7a88, // n0x0611 c0x0000 (---------------) + dnsalias
+ 0x00181687, // n0x0612 c0x0000 (---------------) + dnsdojo
+ 0x000146cb, // n0x0613 c0x0000 (---------------) + doesntexist
+ 0x0012cb09, // n0x0614 c0x0000 (---------------) + dontexist
+ 0x000c7987, // n0x0615 c0x0000 (---------------) + doomdns
+ 0x000e9ccc, // n0x0616 c0x0000 (---------------) + dreamhosters
+ 0x0017cf4a, // n0x0617 c0x0000 (---------------) + dyn-o-saur
+ 0x00159288, // n0x0618 c0x0000 (---------------) + dynalias
+ 0x00010b8e, // n0x0619 c0x0000 (---------------) + dyndns-at-home
+ 0x000264ce, // n0x061a c0x0000 (---------------) + dyndns-at-work
+ 0x000dcfcb, // n0x061b c0x0000 (---------------) + dyndns-blog
+ 0x0018214b, // n0x061c c0x0000 (---------------) + dyndns-free
+ 0x0000dc0b, // n0x061d c0x0000 (---------------) + dyndns-home
+ 0x00013909, // n0x061e c0x0000 (---------------) + dyndns-ip
+ 0x00014d8b, // n0x061f c0x0000 (---------------) + dyndns-mail
+ 0x00015e0d, // n0x0620 c0x0000 (---------------) + dyndns-office
+ 0x00021dcb, // n0x0621 c0x0000 (---------------) + dyndns-pics
+ 0x0002420d, // n0x0622 c0x0000 (---------------) + dyndns-remote
+ 0x00027c0d, // n0x0623 c0x0000 (---------------) + dyndns-server
+ 0x0002bfca, // n0x0624 c0x0000 (---------------) + dyndns-web
+ 0x0002d58b, // n0x0625 c0x0000 (---------------) + dyndns-wiki
+ 0x0002e38b, // n0x0626 c0x0000 (---------------) + dyndns-work
+ 0x0003d4d0, // n0x0627 c0x0000 (---------------) + elasticbeanstalk
+ 0x000ee4cf, // n0x0628 c0x0000 (---------------) + est-a-la-maison
+ 0x0002844f, // n0x0629 c0x0000 (---------------) + est-a-la-masion
+ 0x0016c84d, // n0x062a c0x0000 (---------------) + est-le-patron
+ 0x00119c10, // n0x062b c0x0000 (---------------) + est-mon-blogueur
+ 0x0001b882, // n0x062c c0x0000 (---------------) + eu
+ 0x00048f8b, // n0x062d c0x0000 (---------------) + firebaseapp
+ 0x0004f748, // n0x062e c0x0000 (---------------) + flynnhub
+ 0x0005c087, // n0x062f c0x0000 (---------------) + from-ak
+ 0x0005ca47, // n0x0630 c0x0000 (---------------) + from-al
+ 0x0005cc07, // n0x0631 c0x0000 (---------------) + from-ar
+ 0x0005d0c7, // n0x0632 c0x0000 (---------------) + from-ca
+ 0x0005e487, // n0x0633 c0x0000 (---------------) + from-ct
+ 0x0005eb07, // n0x0634 c0x0000 (---------------) + from-dc
+ 0x0005f407, // n0x0635 c0x0000 (---------------) + from-de
+ 0x0005f6c7, // n0x0636 c0x0000 (---------------) + from-fl
+ 0x000609c7, // n0x0637 c0x0000 (---------------) + from-ga
+ 0x00060b87, // n0x0638 c0x0000 (---------------) + from-hi
+ 0x00061647, // n0x0639 c0x0000 (---------------) + from-ia
+ 0x00061807, // n0x063a c0x0000 (---------------) + from-id
+ 0x000619c7, // n0x063b c0x0000 (---------------) + from-il
+ 0x00061b87, // n0x063c c0x0000 (---------------) + from-in
+ 0x00062187, // n0x063d c0x0000 (---------------) + from-ks
+ 0x00062e87, // n0x063e c0x0000 (---------------) + from-ky
+ 0x00064007, // n0x063f c0x0000 (---------------) + from-ma
+ 0x000647c7, // n0x0640 c0x0000 (---------------) + from-md
+ 0x00064d07, // n0x0641 c0x0000 (---------------) + from-mi
+ 0x00065307, // n0x0642 c0x0000 (---------------) + from-mn
+ 0x000654c7, // n0x0643 c0x0000 (---------------) + from-mo
+ 0x00065a87, // n0x0644 c0x0000 (---------------) + from-ms
+ 0x00066647, // n0x0645 c0x0000 (---------------) + from-mt
+ 0x00066847, // n0x0646 c0x0000 (---------------) + from-nc
+ 0x00066d47, // n0x0647 c0x0000 (---------------) + from-nd
+ 0x00066f07, // n0x0648 c0x0000 (---------------) + from-ne
+ 0x000670c7, // n0x0649 c0x0000 (---------------) + from-nh
+ 0x000676c7, // n0x064a c0x0000 (---------------) + from-nj
+ 0x00067c47, // n0x064b c0x0000 (---------------) + from-nm
+ 0x000682c7, // n0x064c c0x0000 (---------------) + from-nv
+ 0x000688c7, // n0x064d c0x0000 (---------------) + from-oh
+ 0x00068f87, // n0x064e c0x0000 (---------------) + from-ok
+ 0x00069307, // n0x064f c0x0000 (---------------) + from-or
+ 0x000694c7, // n0x0650 c0x0000 (---------------) + from-pa
+ 0x0006a187, // n0x0651 c0x0000 (---------------) + from-pr
+ 0x0006b187, // n0x0652 c0x0000 (---------------) + from-ri
+ 0x0006bf07, // n0x0653 c0x0000 (---------------) + from-sc
+ 0x0006c487, // n0x0654 c0x0000 (---------------) + from-sd
+ 0x0006c647, // n0x0655 c0x0000 (---------------) + from-tn
+ 0x0006c807, // n0x0656 c0x0000 (---------------) + from-tx
+ 0x0006cc47, // n0x0657 c0x0000 (---------------) + from-ut
+ 0x0006cfc7, // n0x0658 c0x0000 (---------------) + from-va
+ 0x0006d387, // n0x0659 c0x0000 (---------------) + from-vt
+ 0x0006d9c7, // n0x065a c0x0000 (---------------) + from-wa
+ 0x0006db87, // n0x065b c0x0000 (---------------) + from-wi
+ 0x0006df07, // n0x065c c0x0000 (---------------) + from-wv
+ 0x0006e747, // n0x065d c0x0000 (---------------) + from-wy
+ 0x0000cd02, // n0x065e c0x0000 (---------------) + gb
+ 0x000c75c7, // n0x065f c0x0000 (---------------) + getmyip
+ 0x000bb191, // n0x0660 c0x0000 (---------------) + githubusercontent
+ 0x0007cdca, // n0x0661 c0x0000 (---------------) + googleapis
+ 0x0007b20a, // n0x0662 c0x0000 (---------------) + googlecode
+ 0x00052ac6, // n0x0663 c0x0000 (---------------) + gotdns
+ 0x00006b02, // n0x0664 c0x0000 (---------------) + gr
+ 0x00056389, // n0x0665 c0x0000 (---------------) + herokuapp
+ 0x00089a09, // n0x0666 c0x0000 (---------------) + herokussl
+ 0x000301c2, // n0x0667 c0x0000 (---------------) + hk
+ 0x000f45ca, // n0x0668 c0x0000 (---------------) + hobby-site
+ 0x00099409, // n0x0669 c0x0000 (---------------) + homelinux
+ 0x00099ec8, // n0x066a c0x0000 (---------------) + homeunix
+ 0x000045c2, // n0x066b c0x0000 (---------------) + hu
+ 0x001099c9, // n0x066c c0x0000 (---------------) + iamallama
+ 0x0006a3ce, // n0x066d c0x0000 (---------------) + is-a-anarchist
+ 0x000e280c, // n0x066e c0x0000 (---------------) + is-a-blogger
+ 0x000c43cf, // n0x066f c0x0000 (---------------) + is-a-bookkeeper
+ 0x0015be8e, // n0x0670 c0x0000 (---------------) + is-a-bulls-fan
+ 0x0001918c, // n0x0671 c0x0000 (---------------) + is-a-caterer
+ 0x0001f409, // n0x0672 c0x0000 (---------------) + is-a-chef
+ 0x00023b51, // n0x0673 c0x0000 (---------------) + is-a-conservative
+ 0x00025588, // n0x0674 c0x0000 (---------------) + is-a-cpa
+ 0x00096052, // n0x0675 c0x0000 (---------------) + is-a-cubicle-slave
+ 0x00179f8d, // n0x0676 c0x0000 (---------------) + is-a-democrat
+ 0x0003f84d, // n0x0677 c0x0000 (---------------) + is-a-designer
+ 0x00040bcb, // n0x0678 c0x0000 (---------------) + is-a-doctor
+ 0x000447d5, // n0x0679 c0x0000 (---------------) + is-a-financialadvisor
+ 0x00047789, // n0x067a c0x0000 (---------------) + is-a-geek
+ 0x00052d8a, // n0x067b c0x0000 (---------------) + is-a-green
+ 0x00061109, // n0x067c c0x0000 (---------------) + is-a-guru
+ 0x000643d0, // n0x067d c0x0000 (---------------) + is-a-hard-worker
+ 0x0006800b, // n0x067e c0x0000 (---------------) + is-a-hunter
+ 0x0007730f, // n0x067f c0x0000 (---------------) + is-a-landscaper
+ 0x00079b8b, // n0x0680 c0x0000 (---------------) + is-a-lawyer
+ 0x0007a5cc, // n0x0681 c0x0000 (---------------) + is-a-liberal
+ 0x00081cd0, // n0x0682 c0x0000 (---------------) + is-a-libertarian
+ 0x0015658a, // n0x0683 c0x0000 (---------------) + is-a-llama
+ 0x0009440d, // n0x0684 c0x0000 (---------------) + is-a-musician
+ 0x0009800e, // n0x0685 c0x0000 (---------------) + is-a-nascarfan
+ 0x0009f7ca, // n0x0686 c0x0000 (---------------) + is-a-nurse
+ 0x000a01cc, // n0x0687 c0x0000 (---------------) + is-a-painter
+ 0x000a7f94, // n0x0688 c0x0000 (---------------) + is-a-personaltrainer
+ 0x000a7491, // n0x0689 c0x0000 (---------------) + is-a-photographer
+ 0x000e8ecb, // n0x068a c0x0000 (---------------) + is-a-player
+ 0x000d7d0f, // n0x068b c0x0000 (---------------) + is-a-republican
+ 0x000e064d, // n0x068c c0x0000 (---------------) + is-a-rockstar
+ 0x000adf0e, // n0x068d c0x0000 (---------------) + is-a-socialist
+ 0x0013ac8c, // n0x068e c0x0000 (---------------) + is-a-student
+ 0x000a344c, // n0x068f c0x0000 (---------------) + is-a-teacher
+ 0x000a718b, // n0x0690 c0x0000 (---------------) + is-a-techie
+ 0x000a91ce, // n0x0691 c0x0000 (---------------) + is-a-therapist
+ 0x000ac710, // n0x0692 c0x0000 (---------------) + is-an-accountant
+ 0x000ae94b, // n0x0693 c0x0000 (---------------) + is-an-actor
+ 0x000afb8d, // n0x0694 c0x0000 (---------------) + is-an-actress
+ 0x000e858f, // n0x0695 c0x0000 (---------------) + is-an-anarchist
+ 0x000d750c, // n0x0696 c0x0000 (---------------) + is-an-artist
+ 0x0010dace, // n0x0697 c0x0000 (---------------) + is-an-engineer
+ 0x000b6c91, // n0x0698 c0x0000 (---------------) + is-an-entertainer
+ 0x000d404c, // n0x0699 c0x0000 (---------------) + is-certified
+ 0x000dd607, // n0x069a c0x0000 (---------------) + is-gone
+ 0x000e47cd, // n0x069b c0x0000 (---------------) + is-into-anime
+ 0x000d508c, // n0x069c c0x0000 (---------------) + is-into-cars
+ 0x000de750, // n0x069d c0x0000 (---------------) + is-into-cartoons
+ 0x000dffcd, // n0x069e c0x0000 (---------------) + is-into-games
+ 0x000e3307, // n0x069f c0x0000 (---------------) + is-leet
+ 0x0010c8d0, // n0x06a0 c0x0000 (---------------) + is-not-certified
+ 0x00102608, // n0x06a1 c0x0000 (---------------) + is-slick
+ 0x0010724b, // n0x06a2 c0x0000 (---------------) + is-uberleet
+ 0x0012c78f, // n0x06a3 c0x0000 (---------------) + is-with-theband
+ 0x00013e48, // n0x06a4 c0x0000 (---------------) + isa-geek
+ 0x0007cfcd, // n0x06a5 c0x0000 (---------------) + isa-hockeynut
+ 0x00140d50, // n0x06a6 c0x0000 (---------------) + issmarterthanyou
+ 0x000a2b03, // n0x06a7 c0x0000 (---------------) + jpn
+ 0x0000c642, // n0x06a8 c0x0000 (---------------) + kr
+ 0x000222c9, // n0x06a9 c0x0000 (---------------) + likes-pie
+ 0x0008ec8a, // n0x06aa c0x0000 (---------------) + likescandy
+ 0x00073d83, // n0x06ab c0x0000 (---------------) + mex
+ 0x0010bf08, // n0x06ac c0x0000 (---------------) + neat-url
+ 0x00008287, // n0x06ad c0x0000 (---------------) + nfshost
+ 0x00000cc2, // n0x06ae c0x0000 (---------------) + no
+ 0x00113d8a, // n0x06af c0x0000 (---------------) + operaunite
+ 0x0017e10f, // n0x06b0 c0x0000 (---------------) + outsystemscloud
+ 0x0015f2d2, // n0x06b1 c0x0000 (---------------) + pagespeedmobilizer
+ 0x001513c2, // n0x06b2 c0x0000 (---------------) + qc
+ 0x000006c7, // n0x06b3 c0x0000 (---------------) + rhcloud
+ 0x00000982, // n0x06b4 c0x0000 (---------------) + ro
+ 0x00002f82, // n0x06b5 c0x0000 (---------------) + ru
+ 0x00003a82, // n0x06b6 c0x0000 (---------------) + sa
+ 0x0005f9d0, // n0x06b7 c0x0000 (---------------) + saves-the-whales
+ 0x00004982, // n0x06b8 c0x0000 (---------------) + se
+ 0x00141246, // n0x06b9 c0x0000 (---------------) + selfip
+ 0x0008e20e, // n0x06ba c0x0000 (---------------) + sells-for-less
+ 0x0009cc8b, // n0x06bb c0x0000 (---------------) + sells-for-u
+ 0x0000be88, // n0x06bc c0x0000 (---------------) + servebbs
+ 0x00118cca, // n0x06bd c0x0000 (---------------) + simple-url
+ 0x000d91cd, // n0x06be c0x0000 (---------------) + space-to-rent
+ 0x0016730c, // n0x06bf c0x0000 (---------------) + teaches-yoga
+ 0x00000542, // n0x06c0 c0x0000 (---------------) + uk
+ 0x000073c2, // n0x06c1 c0x0000 (---------------) + us
+ 0x00004282, // n0x06c2 c0x0000 (---------------) + uy
+ 0x0007ccca, // n0x06c3 c0x0000 (---------------) + withgoogle
+ 0x0009e1ce, // n0x06c4 c0x0000 (---------------) + writesthisblog
+ 0x000dbb08, // n0x06c5 c0x0000 (---------------) + yolasite
+ 0x000028c2, // n0x06c6 c0x0000 (---------------) + za
+ 0x0f4347c7, // n0x06c7 c0x003d (n0x06de-n0x06e7) + compute
+ 0x0f8347c9, // n0x06c8 c0x003e (n0x06e7-n0x06e9) + compute-1
+ 0x00012d43, // n0x06c9 c0x0000 (---------------) + elb
+ 0x00007102, // n0x06ca c0x0000 (---------------) + s3
+ 0x00146091, // n0x06cb c0x0000 (---------------) + s3-ap-northeast-1
+ 0x001232d1, // n0x06cc c0x0000 (---------------) + s3-ap-southeast-1
+ 0x00135851, // n0x06cd c0x0000 (---------------) + s3-ap-southeast-2
+ 0x000fd00c, // n0x06ce c0x0000 (---------------) + s3-eu-west-1
+ 0x00101b55, // n0x06cf c0x0000 (---------------) + s3-fips-us-gov-west-1
+ 0x0011030c, // n0x06d0 c0x0000 (---------------) + s3-sa-east-1
+ 0x00111f50, // n0x06d1 c0x0000 (---------------) + s3-us-gov-west-1
+ 0x00112e8c, // n0x06d2 c0x0000 (---------------) + s3-us-west-1
+ 0x0011a8cc, // n0x06d3 c0x0000 (---------------) + s3-us-west-2
+ 0x0014d6d9, // n0x06d4 c0x0000 (---------------) + s3-website-ap-northeast-1
+ 0x00170659, // n0x06d5 c0x0000 (---------------) + s3-website-ap-southeast-1
+ 0x00176f59, // n0x06d6 c0x0000 (---------------) + s3-website-ap-southeast-2
+ 0x0017d314, // n0x06d7 c0x0000 (---------------) + s3-website-eu-west-1
+ 0x00185994, // n0x06d8 c0x0000 (---------------) + s3-website-sa-east-1
+ 0x00007114, // n0x06d9 c0x0000 (---------------) + s3-website-us-east-1
+ 0x00009758, // n0x06da c0x0000 (---------------) + s3-website-us-gov-west-1
+ 0x0000b694, // n0x06db c0x0000 (---------------) + s3-website-us-west-1
+ 0x0000c054, // n0x06dc c0x0000 (---------------) + s3-website-us-west-2
+ 0x000073c9, // n0x06dd c0x0000 (---------------) + us-east-1
+ 0x0014614e, // n0x06de c0x0000 (---------------) + ap-northeast-1
+ 0x0012338e, // n0x06df c0x0000 (---------------) + ap-southeast-1
+ 0x0013590e, // n0x06e0 c0x0000 (---------------) + ap-southeast-2
+ 0x0001b88c, // n0x06e1 c0x0000 (---------------) + eu-central-1
+ 0x000fd0c9, // n0x06e2 c0x0000 (---------------) + eu-west-1
+ 0x001103c9, // n0x06e3 c0x0000 (---------------) + sa-east-1
+ 0x00009a0d, // n0x06e4 c0x0000 (---------------) + us-gov-west-1
+ 0x0000b949, // n0x06e5 c0x0000 (---------------) + us-west-1
+ 0x0000c309, // n0x06e6 c0x0000 (---------------) + us-west-2
+ 0x001617c3, // n0x06e7 c0x0000 (---------------) + z-1
+ 0x0012eb83, // n0x06e8 c0x0000 (---------------) + z-2
+ 0x00200b82, // n0x06e9 c0x0000 (---------------) + I ac
+ 0x00200882, // n0x06ea c0x0000 (---------------) + I co
+ 0x00205742, // n0x06eb c0x0000 (---------------) + I ed
+ 0x00206f02, // n0x06ec c0x0000 (---------------) + I fi
+ 0x00209ac2, // n0x06ed c0x0000 (---------------) + I go
+ 0x00200d02, // n0x06ee c0x0000 (---------------) + I or
+ 0x00203a82, // n0x06ef c0x0000 (---------------) + I sa
+ 0x00232dc3, // n0x06f0 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x06f1 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x06f2 c0x0000 (---------------) + I gov
+ 0x00206e83, // n0x06f3 c0x0000 (---------------) + I inf
+ 0x00218643, // n0x06f4 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x06f5 c0x0000 (---------------) + I org
+ 0x0009e448, // n0x06f6 c0x0000 (---------------) + blogspot
+ 0x00232dc3, // n0x06f7 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x06f8 c0x0000 (---------------) + I edu
+ 0x00218643, // n0x06f9 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x06fa c0x0000 (---------------) + I org
+ 0x00009343, // n0x06fb c0x0000 (---------------) + ath
+ 0x00209ac3, // n0x06fc c0x0000 (---------------) + I gov
+ 0x0009e448, // n0x06fd c0x0000 (---------------) + blogspot
+ 0x0009e448, // n0x06fe c0x0000 (---------------) + blogspot
+ 0x00032dc3, // n0x06ff c0x0000 (---------------) + com
+ 0x00173f0f, // n0x0700 c0x0000 (---------------) + fuettertdasnetz
+ 0x0012cc8a, // n0x0701 c0x0000 (---------------) + isteingeek
+ 0x000ae1c7, // n0x0702 c0x0000 (---------------) + istmein
+ 0x0003ad0a, // n0x0703 c0x0000 (---------------) + lebtimnetz
+ 0x0000948a, // n0x0704 c0x0000 (---------------) + leitungsen
+ 0x000f5c4d, // n0x0705 c0x0000 (---------------) + traeumtgerade
+ 0x0009e448, // n0x0706 c0x0000 (---------------) + blogspot
+ 0x00232dc3, // n0x0707 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0708 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0709 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x070a c0x0000 (---------------) + I net
+ 0x0024d043, // n0x070b c0x0000 (---------------) + I org
+ 0x00208d43, // n0x070c c0x0000 (---------------) + I art
+ 0x00232dc3, // n0x070d c0x0000 (---------------) + I com
+ 0x0021e083, // n0x070e c0x0000 (---------------) + I edu
+ 0x003704c3, // n0x070f c0x0000 (---------------) + I gob
+ 0x00209ac3, // n0x0710 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x0711 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x0712 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x0713 c0x0000 (---------------) + I org
+ 0x002d3a83, // n0x0714 c0x0000 (---------------) + I sld
+ 0x002071c3, // n0x0715 c0x0000 (---------------) + I web
+ 0x00208d43, // n0x0716 c0x0000 (---------------) + I art
+ 0x00278344, // n0x0717 c0x0000 (---------------) + I asso
+ 0x00232dc3, // n0x0718 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0719 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x071a c0x0000 (---------------) + I gov
+ 0x00218643, // n0x071b c0x0000 (---------------) + I net
+ 0x0024d043, // n0x071c c0x0000 (---------------) + I org
+ 0x002369c3, // n0x071d c0x0000 (---------------) + I pol
+ 0x00232dc3, // n0x071e c0x0000 (---------------) + I com
+ 0x0021e083, // n0x071f c0x0000 (---------------) + I edu
+ 0x00206f03, // n0x0720 c0x0000 (---------------) + I fin
+ 0x003704c3, // n0x0721 c0x0000 (---------------) + I gob
+ 0x00209ac3, // n0x0722 c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x0723 c0x0000 (---------------) + I info
+ 0x0036e803, // n0x0724 c0x0000 (---------------) + I k12
+ 0x00210e83, // n0x0725 c0x0000 (---------------) + I med
+ 0x00240443, // n0x0726 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x0727 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x0728 c0x0000 (---------------) + I org
+ 0x002cfc43, // n0x0729 c0x0000 (---------------) + I pro
+ 0x00233b03, // n0x072a c0x0000 (---------------) + I aip
+ 0x00232dc3, // n0x072b c0x0000 (---------------) + I com
+ 0x0021e083, // n0x072c c0x0000 (---------------) + I edu
+ 0x00287a03, // n0x072d c0x0000 (---------------) + I fie
+ 0x00209ac3, // n0x072e c0x0000 (---------------) + I gov
+ 0x0027a703, // n0x072f c0x0000 (---------------) + I lib
+ 0x00210e83, // n0x0730 c0x0000 (---------------) + I med
+ 0x0024d043, // n0x0731 c0x0000 (---------------) + I org
+ 0x0022e843, // n0x0732 c0x0000 (---------------) + I pri
+ 0x00382984, // n0x0733 c0x0000 (---------------) + I riik
+ 0x00232dc3, // n0x0734 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0735 c0x0000 (---------------) + I edu
+ 0x00299f83, // n0x0736 c0x0000 (---------------) + I eun
+ 0x00209ac3, // n0x0737 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x0738 c0x0000 (---------------) + I mil
+ 0x00267944, // n0x0739 c0x0000 (---------------) + I name
+ 0x00218643, // n0x073a c0x0000 (---------------) + I net
+ 0x0024d043, // n0x073b c0x0000 (---------------) + I org
+ 0x00220143, // n0x073c c0x0000 (---------------) + I sci
+ 0x13a32dc3, // n0x073d c0x004e (n0x0742-n0x0743) + I com
+ 0x0021e083, // n0x073e c0x0000 (---------------) + I edu
+ 0x003704c3, // n0x073f c0x0000 (---------------) + I gob
+ 0x002104c3, // n0x0740 c0x0000 (---------------) + I nom
+ 0x0024d043, // n0x0741 c0x0000 (---------------) + I org
+ 0x0009e448, // n0x0742 c0x0000 (---------------) + blogspot
+ 0x00202183, // n0x0743 c0x0000 (---------------) + I biz
+ 0x00232dc3, // n0x0744 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0745 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0746 c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x0747 c0x0000 (---------------) + I info
+ 0x00267944, // n0x0748 c0x0000 (---------------) + I name
+ 0x0024d043, // n0x0749 c0x0000 (---------------) + I org
+ 0x00322285, // n0x074a c0x0000 (---------------) + I aland
+ 0x0009e448, // n0x074b c0x0000 (---------------) + blogspot
+ 0x00023ac3, // n0x074c c0x0000 (---------------) + iki
+ 0x00366c48, // n0x074d c0x0000 (---------------) + I aeroport
+ 0x00332a87, // n0x074e c0x0000 (---------------) + I assedic
+ 0x00278344, // n0x074f c0x0000 (---------------) + I asso
+ 0x0035f846, // n0x0750 c0x0000 (---------------) + I avocat
+ 0x00364ec6, // n0x0751 c0x0000 (---------------) + I avoues
+ 0x0009e448, // n0x0752 c0x0000 (---------------) + blogspot
+ 0x00262983, // n0x0753 c0x0000 (---------------) + I cci
+ 0x002edec9, // n0x0754 c0x0000 (---------------) + I chambagri
+ 0x00265e15, // n0x0755 c0x0000 (---------------) + I chirurgiens-dentistes
+ 0x00232dc3, // n0x0756 c0x0000 (---------------) + I com
+ 0x00319812, // n0x0757 c0x0000 (---------------) + I experts-comptables
+ 0x003195cf, // n0x0758 c0x0000 (---------------) + I geometre-expert
+ 0x00252544, // n0x0759 c0x0000 (---------------) + I gouv
+ 0x002bdb85, // n0x075a c0x0000 (---------------) + I greta
+ 0x002ab310, // n0x075b c0x0000 (---------------) + I huissier-justice
+ 0x002e1b47, // n0x075c c0x0000 (---------------) + I medecin
+ 0x002104c3, // n0x075d c0x0000 (---------------) + I nom
+ 0x00283208, // n0x075e c0x0000 (---------------) + I notaires
+ 0x002c55ca, // n0x075f c0x0000 (---------------) + I pharmacien
+ 0x002167c4, // n0x0760 c0x0000 (---------------) + I port
+ 0x002cf303, // n0x0761 c0x0000 (---------------) + I prd
+ 0x0022ad46, // n0x0762 c0x0000 (---------------) + I presse
+ 0x002032c2, // n0x0763 c0x0000 (---------------) + I tm
+ 0x002ff6cb, // n0x0764 c0x0000 (---------------) + I veterinaire
+ 0x00232dc3, // n0x0765 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0766 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0767 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x0768 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x0769 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x076a c0x0000 (---------------) + I org
+ 0x002d35c3, // n0x076b c0x0000 (---------------) + I pvt
+ 0x00200882, // n0x076c c0x0000 (---------------) + I co
+ 0x00218643, // n0x076d c0x0000 (---------------) + I net
+ 0x0024d043, // n0x076e c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x076f c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0770 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0771 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x0772 c0x0000 (---------------) + I mil
+ 0x0024d043, // n0x0773 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x0774 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0775 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0776 c0x0000 (---------------) + I gov
+ 0x00220e43, // n0x0777 c0x0000 (---------------) + I ltd
+ 0x00226fc3, // n0x0778 c0x0000 (---------------) + I mod
+ 0x0024d043, // n0x0779 c0x0000 (---------------) + I org
+ 0x00200b82, // n0x077a c0x0000 (---------------) + I ac
+ 0x00232dc3, // n0x077b c0x0000 (---------------) + I com
+ 0x0021e083, // n0x077c c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x077d c0x0000 (---------------) + I gov
+ 0x00218643, // n0x077e c0x0000 (---------------) + I net
+ 0x0024d043, // n0x077f c0x0000 (---------------) + I org
+ 0x00278344, // n0x0780 c0x0000 (---------------) + I asso
+ 0x00232dc3, // n0x0781 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0782 c0x0000 (---------------) + I edu
+ 0x00277f84, // n0x0783 c0x0000 (---------------) + I mobi
+ 0x00218643, // n0x0784 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x0785 c0x0000 (---------------) + I org
+ 0x0009e448, // n0x0786 c0x0000 (---------------) + blogspot
+ 0x00232dc3, // n0x0787 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0788 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0789 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x078a c0x0000 (---------------) + I net
+ 0x0024d043, // n0x078b c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x078c c0x0000 (---------------) + I com
+ 0x0021e083, // n0x078d c0x0000 (---------------) + I edu
+ 0x003704c3, // n0x078e c0x0000 (---------------) + I gob
+ 0x002202c3, // n0x078f c0x0000 (---------------) + I ind
+ 0x00240443, // n0x0790 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x0791 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x0792 c0x0000 (---------------) + I org
+ 0x00200882, // n0x0793 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x0794 c0x0000 (---------------) + I com
+ 0x00218643, // n0x0795 c0x0000 (---------------) + I net
+ 0x0009e448, // n0x0796 c0x0000 (---------------) + blogspot
+ 0x00232dc3, // n0x0797 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x0798 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x0799 c0x0000 (---------------) + I gov
+ 0x00309c83, // n0x079a c0x0000 (---------------) + I idv
+ 0x000746c3, // n0x079b c0x0000 (---------------) + inc
+ 0x00020e43, // n0x079c c0x0000 (---------------) + ltd
+ 0x00218643, // n0x079d c0x0000 (---------------) + I net
+ 0x0024d043, // n0x079e c0x0000 (---------------) + I org
+ 0x002f66ca, // n0x079f c0x0000 (---------------) + I xn--55qx5d
+ 0x0030e909, // n0x07a0 c0x0000 (---------------) + I xn--ciqpn
+ 0x0031fd0b, // n0x07a1 c0x0000 (---------------) + I xn--gmq050i
+ 0x0032030a, // n0x07a2 c0x0000 (---------------) + I xn--gmqw5a
+ 0x00326e4a, // n0x07a3 c0x0000 (---------------) + I xn--io0a7i
+ 0x00333c4b, // n0x07a4 c0x0000 (---------------) + I xn--lcvr32d
+ 0x0034048a, // n0x07a5 c0x0000 (---------------) + I xn--mk0axi
+ 0x0034808a, // n0x07a6 c0x0000 (---------------) + I xn--mxtq1m
+ 0x0034cf0a, // n0x07a7 c0x0000 (---------------) + I xn--od0alg
+ 0x0034d18b, // n0x07a8 c0x0000 (---------------) + I xn--od0aq3b
+ 0x00370f89, // n0x07a9 c0x0000 (---------------) + I xn--tn0ag
+ 0x00372b4a, // n0x07aa c0x0000 (---------------) + I xn--uc0atv
+ 0x0037300b, // n0x07ab c0x0000 (---------------) + I xn--uc0ay4a
+ 0x0037c0cb, // n0x07ac c0x0000 (---------------) + I xn--wcvs22d
+ 0x003844ca, // n0x07ad c0x0000 (---------------) + I xn--zf0avx
+ 0x00232dc3, // n0x07ae c0x0000 (---------------) + I com
+ 0x0021e083, // n0x07af c0x0000 (---------------) + I edu
+ 0x003704c3, // n0x07b0 c0x0000 (---------------) + I gob
+ 0x00240443, // n0x07b1 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x07b2 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x07b3 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x07b4 c0x0000 (---------------) + I com
+ 0x0025c084, // n0x07b5 c0x0000 (---------------) + I from
+ 0x002021c2, // n0x07b6 c0x0000 (---------------) + I iz
+ 0x00267944, // n0x07b7 c0x0000 (---------------) + I name
+ 0x002fb4c5, // n0x07b8 c0x0000 (---------------) + I adult
+ 0x00208d43, // n0x07b9 c0x0000 (---------------) + I art
+ 0x00278344, // n0x07ba c0x0000 (---------------) + I asso
+ 0x00232dc3, // n0x07bb c0x0000 (---------------) + I com
+ 0x0023a884, // n0x07bc c0x0000 (---------------) + I coop
+ 0x0021e083, // n0x07bd c0x0000 (---------------) + I edu
+ 0x0024a304, // n0x07be c0x0000 (---------------) + I firm
+ 0x00252544, // n0x07bf c0x0000 (---------------) + I gouv
+ 0x00208a44, // n0x07c0 c0x0000 (---------------) + I info
+ 0x00210e83, // n0x07c1 c0x0000 (---------------) + I med
+ 0x00218643, // n0x07c2 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x07c3 c0x0000 (---------------) + I org
+ 0x002a80c5, // n0x07c4 c0x0000 (---------------) + I perso
+ 0x002369c3, // n0x07c5 c0x0000 (---------------) + I pol
+ 0x002cfc43, // n0x07c6 c0x0000 (---------------) + I pro
+ 0x0027f043, // n0x07c7 c0x0000 (---------------) + I rel
+ 0x0022e644, // n0x07c8 c0x0000 (---------------) + I shop
+ 0x003678c4, // n0x07c9 c0x0000 (---------------) + I 2000
+ 0x00263c05, // n0x07ca c0x0000 (---------------) + I agrar
+ 0x0009e448, // n0x07cb c0x0000 (---------------) + blogspot
+ 0x002f0bc4, // n0x07cc c0x0000 (---------------) + I bolt
+ 0x0023b546, // n0x07cd c0x0000 (---------------) + I casino
+ 0x003242c4, // n0x07ce c0x0000 (---------------) + I city
+ 0x00200882, // n0x07cf c0x0000 (---------------) + I co
+ 0x00245947, // n0x07d0 c0x0000 (---------------) + I erotica
+ 0x002a3cc7, // n0x07d1 c0x0000 (---------------) + I erotika
+ 0x00247d84, // n0x07d2 c0x0000 (---------------) + I film
+ 0x00255645, // n0x07d3 c0x0000 (---------------) + I forum
+ 0x002e01c5, // n0x07d4 c0x0000 (---------------) + I games
+ 0x0029d805, // n0x07d5 c0x0000 (---------------) + I hotel
+ 0x00208a44, // n0x07d6 c0x0000 (---------------) + I info
+ 0x002b6888, // n0x07d7 c0x0000 (---------------) + I ingatlan
+ 0x003817c6, // n0x07d8 c0x0000 (---------------) + I jogasz
+ 0x002c9f88, // n0x07d9 c0x0000 (---------------) + I konyvelo
+ 0x002cc885, // n0x07da c0x0000 (---------------) + I lakas
+ 0x0021e585, // n0x07db c0x0000 (---------------) + I media
+ 0x00234584, // n0x07dc c0x0000 (---------------) + I news
+ 0x0024d043, // n0x07dd c0x0000 (---------------) + I org
+ 0x002cfac4, // n0x07de c0x0000 (---------------) + I priv
+ 0x00332386, // n0x07df c0x0000 (---------------) + I reklam
+ 0x0022ae43, // n0x07e0 c0x0000 (---------------) + I sex
+ 0x0022e644, // n0x07e1 c0x0000 (---------------) + I shop
+ 0x0028f2c5, // n0x07e2 c0x0000 (---------------) + I sport
+ 0x00234404, // n0x07e3 c0x0000 (---------------) + I suli
+ 0x00201304, // n0x07e4 c0x0000 (---------------) + I szex
+ 0x002032c2, // n0x07e5 c0x0000 (---------------) + I tm
+ 0x0025e606, // n0x07e6 c0x0000 (---------------) + I tozsde
+ 0x0035c4c6, // n0x07e7 c0x0000 (---------------) + I utazas
+ 0x002ebe05, // n0x07e8 c0x0000 (---------------) + I video
+ 0x00200b82, // n0x07e9 c0x0000 (---------------) + I ac
+ 0x00202183, // n0x07ea c0x0000 (---------------) + I biz
+ 0x00200882, // n0x07eb c0x0000 (---------------) + I co
+ 0x00238ec4, // n0x07ec c0x0000 (---------------) + I desa
+ 0x00209ac2, // n0x07ed c0x0000 (---------------) + I go
+ 0x00240443, // n0x07ee c0x0000 (---------------) + I mil
+ 0x00224782, // n0x07ef c0x0000 (---------------) + I my
+ 0x00218643, // n0x07f0 c0x0000 (---------------) + I net
+ 0x00200d02, // n0x07f1 c0x0000 (---------------) + I or
+ 0x00251983, // n0x07f2 c0x0000 (---------------) + I sch
+ 0x002071c3, // n0x07f3 c0x0000 (---------------) + I web
+ 0x0009e448, // n0x07f4 c0x0000 (---------------) + blogspot
+ 0x00209ac3, // n0x07f5 c0x0000 (---------------) + I gov
+ 0x18e00882, // n0x07f6 c0x0063 (n0x07f7-n0x07f8) o I co
+ 0x0009e448, // n0x07f7 c0x0000 (---------------) + blogspot
+ 0x00200b82, // n0x07f8 c0x0000 (---------------) + I ac
+ 0x19600882, // n0x07f9 c0x0065 (n0x07ff-n0x0801) + I co
+ 0x00232dc3, // n0x07fa c0x0000 (---------------) + I com
+ 0x00218643, // n0x07fb c0x0000 (---------------) + I net
+ 0x0024d043, // n0x07fc c0x0000 (---------------) + I org
+ 0x0021cdc2, // n0x07fd c0x0000 (---------------) + I tt
+ 0x0028dc82, // n0x07fe c0x0000 (---------------) + I tv
+ 0x00220e43, // n0x07ff c0x0000 (---------------) + I ltd
+ 0x002cb543, // n0x0800 c0x0000 (---------------) + I plc
+ 0x00200b82, // n0x0801 c0x0000 (---------------) + I ac
+ 0x0009e448, // n0x0802 c0x0000 (---------------) + blogspot
+ 0x00200882, // n0x0803 c0x0000 (---------------) + I co
+ 0x0021e083, // n0x0804 c0x0000 (---------------) + I edu
+ 0x0024a304, // n0x0805 c0x0000 (---------------) + I firm
+ 0x0020a0c3, // n0x0806 c0x0000 (---------------) + I gen
+ 0x00209ac3, // n0x0807 c0x0000 (---------------) + I gov
+ 0x002202c3, // n0x0808 c0x0000 (---------------) + I ind
+ 0x00240443, // n0x0809 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x080a c0x0000 (---------------) + I net
+ 0x00219583, // n0x080b c0x0000 (---------------) + I nic
+ 0x0024d043, // n0x080c c0x0000 (---------------) + I org
+ 0x00207083, // n0x080d c0x0000 (---------------) + I res
+ 0x00119193, // n0x080e c0x0000 (---------------) + barrel-of-knowledge
+ 0x00121ad4, // n0x080f c0x0000 (---------------) + barrell-of-knowledge
+ 0x0000dc06, // n0x0810 c0x0000 (---------------) + dyndns
+ 0x000512c7, // n0x0811 c0x0000 (---------------) + for-our
+ 0x0016d549, // n0x0812 c0x0000 (---------------) + groks-the
+ 0x0017980a, // n0x0813 c0x0000 (---------------) + groks-this
+ 0x0008124d, // n0x0814 c0x0000 (---------------) + here-for-more
+ 0x00051c0a, // n0x0815 c0x0000 (---------------) + knowsitall
+ 0x00141246, // n0x0816 c0x0000 (---------------) + selfip
+ 0x0002c186, // n0x0817 c0x0000 (---------------) + webhop
+ 0x0021b882, // n0x0818 c0x0000 (---------------) + I eu
+ 0x00232dc3, // n0x0819 c0x0000 (---------------) + I com
+ 0x000bb186, // n0x081a c0x0000 (---------------) + github
+ 0x000926c3, // n0x081b c0x0000 (---------------) + nid
+ 0x00232dc3, // n0x081c c0x0000 (---------------) + I com
+ 0x0021e083, // n0x081d c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x081e c0x0000 (---------------) + I gov
+ 0x00240443, // n0x081f c0x0000 (---------------) + I mil
+ 0x00218643, // n0x0820 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x0821 c0x0000 (---------------) + I org
+ 0x00200b82, // n0x0822 c0x0000 (---------------) + I ac
+ 0x00200882, // n0x0823 c0x0000 (---------------) + I co
+ 0x00209ac3, // n0x0824 c0x0000 (---------------) + I gov
+ 0x00205942, // n0x0825 c0x0000 (---------------) + I id
+ 0x00218643, // n0x0826 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x0827 c0x0000 (---------------) + I org
+ 0x00251983, // n0x0828 c0x0000 (---------------) + I sch
+ 0x0033b00f, // n0x0829 c0x0000 (---------------) + I xn--mgba3a4f16a
+ 0x0033b3ce, // n0x082a c0x0000 (---------------) + I xn--mgba3a4fra
+ 0x00232dc3, // n0x082b c0x0000 (---------------) + I com
+ 0x00045147, // n0x082c c0x0000 (---------------) + cupcake
+ 0x0021e083, // n0x082d c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x082e c0x0000 (---------------) + I gov
+ 0x002188c3, // n0x082f c0x0000 (---------------) + I int
+ 0x00218643, // n0x0830 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x0831 c0x0000 (---------------) + I org
+ 0x0021e683, // n0x0832 c0x0000 (---------------) + I abr
+ 0x00377c07, // n0x0833 c0x0000 (---------------) + I abruzzo
+ 0x00202602, // n0x0834 c0x0000 (---------------) + I ag
+ 0x00307909, // n0x0835 c0x0000 (---------------) + I agrigento
+ 0x00200b02, // n0x0836 c0x0000 (---------------) + I al
+ 0x0025fccb, // n0x0837 c0x0000 (---------------) + I alessandria
+ 0x0029fdca, // n0x0838 c0x0000 (---------------) + I alto-adige
+ 0x002c8409, // n0x0839 c0x0000 (---------------) + I altoadige
+ 0x00202342, // n0x083a c0x0000 (---------------) + I an
+ 0x002375c6, // n0x083b c0x0000 (---------------) + I ancona
+ 0x0027b6d5, // n0x083c c0x0000 (---------------) + I andria-barletta-trani
+ 0x0025fe15, // n0x083d c0x0000 (---------------) + I andria-trani-barletta
+ 0x0027d413, // n0x083e c0x0000 (---------------) + I andriabarlettatrani
+ 0x00260393, // n0x083f c0x0000 (---------------) + I andriatranibarletta
+ 0x00207702, // n0x0840 c0x0000 (---------------) + I ao
+ 0x00209245, // n0x0841 c0x0000 (---------------) + I aosta
+ 0x00382fcc, // n0x0842 c0x0000 (---------------) + I aosta-valley
+ 0x002a5b0b, // n0x0843 c0x0000 (---------------) + I aostavalley
+ 0x00255445, // n0x0844 c0x0000 (---------------) + I aoste
+ 0x00200a42, // n0x0845 c0x0000 (---------------) + I ap
+ 0x0023be02, // n0x0846 c0x0000 (---------------) + I aq
+ 0x002c0f06, // n0x0847 c0x0000 (---------------) + I aquila
+ 0x002030c2, // n0x0848 c0x0000 (---------------) + I ar
+ 0x003650c6, // n0x0849 c0x0000 (---------------) + I arezzo
+ 0x0035940d, // n0x084a c0x0000 (---------------) + I ascoli-piceno
+ 0x002c7c0c, // n0x084b c0x0000 (---------------) + I ascolipiceno
+ 0x0023d544, // n0x084c c0x0000 (---------------) + I asti
+ 0x00201702, // n0x084d c0x0000 (---------------) + I at
+ 0x00201602, // n0x084e c0x0000 (---------------) + I av
+ 0x00290208, // n0x084f c0x0000 (---------------) + I avellino
+ 0x002076c2, // n0x0850 c0x0000 (---------------) + I ba
+ 0x0024f906, // n0x0851 c0x0000 (---------------) + I balsan
+ 0x00288e84, // n0x0852 c0x0000 (---------------) + I bari
+ 0x0027b895, // n0x0853 c0x0000 (---------------) + I barletta-trani-andria
+ 0x0027d593, // n0x0854 c0x0000 (---------------) + I barlettatraniandria
+ 0x00212c83, // n0x0855 c0x0000 (---------------) + I bas
+ 0x00343aca, // n0x0856 c0x0000 (---------------) + I basilicata
+ 0x00215a47, // n0x0857 c0x0000 (---------------) + I belluno
+ 0x00344ec9, // n0x0858 c0x0000 (---------------) + I benevento
+ 0x003498c7, // n0x0859 c0x0000 (---------------) + I bergamo
+ 0x00340002, // n0x085a c0x0000 (---------------) + I bg
+ 0x00200002, // n0x085b c0x0000 (---------------) + I bi
+ 0x00201c46, // n0x085c c0x0000 (---------------) + I biella
+ 0x0020cb02, // n0x085d c0x0000 (---------------) + I bl
+ 0x0009e448, // n0x085e c0x0000 (---------------) + blogspot
+ 0x00212ac2, // n0x085f c0x0000 (---------------) + I bn
+ 0x00210042, // n0x0860 c0x0000 (---------------) + I bo
+ 0x003758c7, // n0x0861 c0x0000 (---------------) + I bologna
+ 0x00213b87, // n0x0862 c0x0000 (---------------) + I bolzano
+ 0x0021b5c5, // n0x0863 c0x0000 (---------------) + I bozen
+ 0x00207bc2, // n0x0864 c0x0000 (---------------) + I br
+ 0x00220087, // n0x0865 c0x0000 (---------------) + I brescia
+ 0x00220248, // n0x0866 c0x0000 (---------------) + I brindisi
+ 0x00207242, // n0x0867 c0x0000 (---------------) + I bs
+ 0x0023ad82, // n0x0868 c0x0000 (---------------) + I bt
+ 0x0022eac2, // n0x0869 c0x0000 (---------------) + I bz
+ 0x00214582, // n0x086a c0x0000 (---------------) + I ca
+ 0x0036e048, // n0x086b c0x0000 (---------------) + I cagliari
+ 0x00219603, // n0x086c c0x0000 (---------------) + I cal
+ 0x0021fc48, // n0x086d c0x0000 (---------------) + I calabria
+ 0x00384b4d, // n0x086e c0x0000 (---------------) + I caltanissetta
+ 0x00216403, // n0x086f c0x0000 (---------------) + I cam
+ 0x00309848, // n0x0870 c0x0000 (---------------) + I campania
+ 0x0023e18f, // n0x0871 c0x0000 (---------------) + I campidano-medio
+ 0x0023e54e, // n0x0872 c0x0000 (---------------) + I campidanomedio
+ 0x002781ca, // n0x0873 c0x0000 (---------------) + I campobasso
+ 0x002eeed1, // n0x0874 c0x0000 (---------------) + I carbonia-iglesias
+ 0x002ef350, // n0x0875 c0x0000 (---------------) + I carboniaiglesias
+ 0x002bf88d, // n0x0876 c0x0000 (---------------) + I carrara-massa
+ 0x002bfbcc, // n0x0877 c0x0000 (---------------) + I carraramassa
+ 0x00233987, // n0x0878 c0x0000 (---------------) + I caserta
+ 0x00343c47, // n0x0879 c0x0000 (---------------) + I catania
+ 0x0035f909, // n0x087a c0x0000 (---------------) + I catanzaro
+ 0x0023d642, // n0x087b c0x0000 (---------------) + I cb
+ 0x00200bc2, // n0x087c c0x0000 (---------------) + I ce
+ 0x0025318c, // n0x087d c0x0000 (---------------) + I cesena-forli
+ 0x0025348b, // n0x087e c0x0000 (---------------) + I cesenaforli
+ 0x00202ac2, // n0x087f c0x0000 (---------------) + I ch
+ 0x002a7346, // n0x0880 c0x0000 (---------------) + I chieti
+ 0x00220182, // n0x0881 c0x0000 (---------------) + I ci
+ 0x00200402, // n0x0882 c0x0000 (---------------) + I cl
+ 0x0022fe42, // n0x0883 c0x0000 (---------------) + I cn
+ 0x00200882, // n0x0884 c0x0000 (---------------) + I co
+ 0x00233284, // n0x0885 c0x0000 (---------------) + I como
+ 0x0023cf87, // n0x0886 c0x0000 (---------------) + I cosenza
+ 0x0020b542, // n0x0887 c0x0000 (---------------) + I cr
+ 0x0023fe07, // n0x0888 c0x0000 (---------------) + I cremona
+ 0x00242347, // n0x0889 c0x0000 (---------------) + I crotone
+ 0x0021a142, // n0x088a c0x0000 (---------------) + I cs
+ 0x0022a082, // n0x088b c0x0000 (---------------) + I ct
+ 0x00245005, // n0x088c c0x0000 (---------------) + I cuneo
+ 0x00202882, // n0x088d c0x0000 (---------------) + I cz
+ 0x00231b4e, // n0x088e c0x0000 (---------------) + I dell-ogliastra
+ 0x00242dcd, // n0x088f c0x0000 (---------------) + I dellogliastra
+ 0x0021e083, // n0x0890 c0x0000 (---------------) + I edu
+ 0x002416ce, // n0x0891 c0x0000 (---------------) + I emilia-romagna
+ 0x0026a94d, // n0x0892 c0x0000 (---------------) + I emiliaromagna
+ 0x002141c3, // n0x0893 c0x0000 (---------------) + I emr
+ 0x00202242, // n0x0894 c0x0000 (---------------) + I en
+ 0x00276004, // n0x0895 c0x0000 (---------------) + I enna
+ 0x0033a302, // n0x0896 c0x0000 (---------------) + I fc
+ 0x00223342, // n0x0897 c0x0000 (---------------) + I fe
+ 0x00353ac5, // n0x0898 c0x0000 (---------------) + I fermo
+ 0x00245687, // n0x0899 c0x0000 (---------------) + I ferrara
+ 0x002460c2, // n0x089a c0x0000 (---------------) + I fg
+ 0x00206f02, // n0x089b c0x0000 (---------------) + I fi
+ 0x00249907, // n0x089c c0x0000 (---------------) + I firenze
+ 0x0024de08, // n0x089d c0x0000 (---------------) + I florence
+ 0x00257f82, // n0x089e c0x0000 (---------------) + I fm
+ 0x00208ac6, // n0x089f c0x0000 (---------------) + I foggia
+ 0x0025300c, // n0x08a0 c0x0000 (---------------) + I forli-cesena
+ 0x0025334b, // n0x08a1 c0x0000 (---------------) + I forlicesena
+ 0x0022fc02, // n0x08a2 c0x0000 (---------------) + I fr
+ 0x0025890f, // n0x08a3 c0x0000 (---------------) + I friuli-v-giulia
+ 0x00258cd0, // n0x08a4 c0x0000 (---------------) + I friuli-ve-giulia
+ 0x002590cf, // n0x08a5 c0x0000 (---------------) + I friuli-vegiulia
+ 0x00259495, // n0x08a6 c0x0000 (---------------) + I friuli-venezia-giulia
+ 0x002599d4, // n0x08a7 c0x0000 (---------------) + I friuli-veneziagiulia
+ 0x00259ece, // n0x08a8 c0x0000 (---------------) + I friuli-vgiulia
+ 0x0025a24e, // n0x08a9 c0x0000 (---------------) + I friuliv-giulia
+ 0x0025a5cf, // n0x08aa c0x0000 (---------------) + I friulive-giulia
+ 0x0025a98e, // n0x08ab c0x0000 (---------------) + I friulivegiulia
+ 0x0025ad14, // n0x08ac c0x0000 (---------------) + I friulivenezia-giulia
+ 0x0025b213, // n0x08ad c0x0000 (---------------) + I friuliveneziagiulia
+ 0x0025b6cd, // n0x08ae c0x0000 (---------------) + I friulivgiulia
+ 0x0026e909, // n0x08af c0x0000 (---------------) + I frosinone
+ 0x002820c3, // n0x08b0 c0x0000 (---------------) + I fvg
+ 0x002029c2, // n0x08b1 c0x0000 (---------------) + I ge
+ 0x00285ac5, // n0x08b2 c0x0000 (---------------) + I genoa
+ 0x0020a0c6, // n0x08b3 c0x0000 (---------------) + I genova
+ 0x00209ac2, // n0x08b4 c0x0000 (---------------) + I go
+ 0x00258747, // n0x08b5 c0x0000 (---------------) + I gorizia
+ 0x00209ac3, // n0x08b6 c0x0000 (---------------) + I gov
+ 0x00206b02, // n0x08b7 c0x0000 (---------------) + I gr
+ 0x00231748, // n0x08b8 c0x0000 (---------------) + I grosseto
+ 0x002ef111, // n0x08b9 c0x0000 (---------------) + I iglesias-carbonia
+ 0x002ef550, // n0x08ba c0x0000 (---------------) + I iglesiascarbonia
+ 0x002051c2, // n0x08bb c0x0000 (---------------) + I im
+ 0x0020c707, // n0x08bc c0x0000 (---------------) + I imperia
+ 0x002066c2, // n0x08bd c0x0000 (---------------) + I is
+ 0x002558c7, // n0x08be c0x0000 (---------------) + I isernia
+ 0x0020c642, // n0x08bf c0x0000 (---------------) + I kr
+ 0x00365c49, // n0x08c0 c0x0000 (---------------) + I la-spezia
+ 0x002c0ec7, // n0x08c1 c0x0000 (---------------) + I laquila
+ 0x0034cd08, // n0x08c2 c0x0000 (---------------) + I laspezia
+ 0x0020b0c6, // n0x08c3 c0x0000 (---------------) + I latina
+ 0x002cb443, // n0x08c4 c0x0000 (---------------) + I laz
+ 0x00341c05, // n0x08c5 c0x0000 (---------------) + I lazio
+ 0x0021e302, // n0x08c6 c0x0000 (---------------) + I lc
+ 0x00202042, // n0x08c7 c0x0000 (---------------) + I le
+ 0x00202045, // n0x08c8 c0x0000 (---------------) + I lecce
+ 0x0022dd05, // n0x08c9 c0x0000 (---------------) + I lecco
+ 0x00206682, // n0x08ca c0x0000 (---------------) + I li
+ 0x00216903, // n0x08cb c0x0000 (---------------) + I lig
+ 0x002536c7, // n0x08cc c0x0000 (---------------) + I liguria
+ 0x00376a87, // n0x08cd c0x0000 (---------------) + I livorno
+ 0x00200782, // n0x08ce c0x0000 (---------------) + I lo
+ 0x002ca104, // n0x08cf c0x0000 (---------------) + I lodi
+ 0x00210a03, // n0x08d0 c0x0000 (---------------) + I lom
+ 0x002b5a09, // n0x08d1 c0x0000 (---------------) + I lombardia
+ 0x00210a08, // n0x08d2 c0x0000 (---------------) + I lombardy
+ 0x0021a082, // n0x08d3 c0x0000 (---------------) + I lt
+ 0x00208042, // n0x08d4 c0x0000 (---------------) + I lu
+ 0x0022c3c7, // n0x08d5 c0x0000 (---------------) + I lucania
+ 0x0023b945, // n0x08d6 c0x0000 (---------------) + I lucca
+ 0x00309348, // n0x08d7 c0x0000 (---------------) + I macerata
+ 0x00225c87, // n0x08d8 c0x0000 (---------------) + I mantova
+ 0x00204483, // n0x08d9 c0x0000 (---------------) + I mar
+ 0x0024c886, // n0x08da c0x0000 (---------------) + I marche
+ 0x002bf70d, // n0x08db c0x0000 (---------------) + I massa-carrara
+ 0x002bfa8c, // n0x08dc c0x0000 (---------------) + I massacarrara
+ 0x002b8d46, // n0x08dd c0x0000 (---------------) + I matera
+ 0x00207b82, // n0x08de c0x0000 (---------------) + I mb
+ 0x0020f0c2, // n0x08df c0x0000 (---------------) + I mc
+ 0x00204342, // n0x08e0 c0x0000 (---------------) + I me
+ 0x0023e00f, // n0x08e1 c0x0000 (---------------) + I medio-campidano
+ 0x0023e40e, // n0x08e2 c0x0000 (---------------) + I mediocampidano
+ 0x00299947, // n0x08e3 c0x0000 (---------------) + I messina
+ 0x00200f42, // n0x08e4 c0x0000 (---------------) + I mi
+ 0x00331245, // n0x08e5 c0x0000 (---------------) + I milan
+ 0x00331246, // n0x08e6 c0x0000 (---------------) + I milano
+ 0x0022c7c2, // n0x08e7 c0x0000 (---------------) + I mn
+ 0x00205202, // n0x08e8 c0x0000 (---------------) + I mo
+ 0x00282b86, // n0x08e9 c0x0000 (---------------) + I modena
+ 0x002b3e43, // n0x08ea c0x0000 (---------------) + I mol
+ 0x002b8ec6, // n0x08eb c0x0000 (---------------) + I molise
+ 0x002b70c5, // n0x08ec c0x0000 (---------------) + I monza
+ 0x002b70cd, // n0x08ed c0x0000 (---------------) + I monza-brianza
+ 0x002b7695, // n0x08ee c0x0000 (---------------) + I monza-e-della-brianza
+ 0x002b7c4c, // n0x08ef c0x0000 (---------------) + I monzabrianza
+ 0x002b7f4d, // n0x08f0 c0x0000 (---------------) + I monzaebrianza
+ 0x002b8292, // n0x08f1 c0x0000 (---------------) + I monzaedellabrianza
+ 0x0020e602, // n0x08f2 c0x0000 (---------------) + I ms
+ 0x00266782, // n0x08f3 c0x0000 (---------------) + I mt
+ 0x002015c2, // n0x08f4 c0x0000 (---------------) + I na
+ 0x0026d5c6, // n0x08f5 c0x0000 (---------------) + I naples
+ 0x002e26c6, // n0x08f6 c0x0000 (---------------) + I napoli
+ 0x00200cc2, // n0x08f7 c0x0000 (---------------) + I no
+ 0x0020a146, // n0x08f8 c0x0000 (---------------) + I novara
+ 0x0020fd82, // n0x08f9 c0x0000 (---------------) + I nu
+ 0x0037bbc5, // n0x08fa c0x0000 (---------------) + I nuoro
+ 0x00204f42, // n0x08fb c0x0000 (---------------) + I og
+ 0x00231c89, // n0x08fc c0x0000 (---------------) + I ogliastra
+ 0x00239f4c, // n0x08fd c0x0000 (---------------) + I olbia-tempio
+ 0x0023a28b, // n0x08fe c0x0000 (---------------) + I olbiatempio
+ 0x00200d02, // n0x08ff c0x0000 (---------------) + I or
+ 0x0024e248, // n0x0900 c0x0000 (---------------) + I oristano
+ 0x00201902, // n0x0901 c0x0000 (---------------) + I ot
+ 0x00200ac2, // n0x0902 c0x0000 (---------------) + I pa
+ 0x00209006, // n0x0903 c0x0000 (---------------) + I padova
+ 0x0033c945, // n0x0904 c0x0000 (---------------) + I padua
+ 0x0022b647, // n0x0905 c0x0000 (---------------) + I palermo
+ 0x00279585, // n0x0906 c0x0000 (---------------) + I parma
+ 0x002c5485, // n0x0907 c0x0000 (---------------) + I pavia
+ 0x0021c6c2, // n0x0908 c0x0000 (---------------) + I pc
+ 0x0022c302, // n0x0909 c0x0000 (---------------) + I pd
+ 0x0020c782, // n0x090a c0x0000 (---------------) + I pe
+ 0x00277607, // n0x090b c0x0000 (---------------) + I perugia
+ 0x0022a24d, // n0x090c c0x0000 (---------------) + I pesaro-urbino
+ 0x0022a5cc, // n0x090d c0x0000 (---------------) + I pesarourbino
+ 0x0022f787, // n0x090e c0x0000 (---------------) + I pescara
+ 0x002a6f42, // n0x090f c0x0000 (---------------) + I pg
+ 0x00218302, // n0x0910 c0x0000 (---------------) + I pi
+ 0x00243808, // n0x0911 c0x0000 (---------------) + I piacenza
+ 0x00222448, // n0x0912 c0x0000 (---------------) + I piedmont
+ 0x002c8c08, // n0x0913 c0x0000 (---------------) + I piemonte
+ 0x0027cf84, // n0x0914 c0x0000 (---------------) + I pisa
+ 0x002a9447, // n0x0915 c0x0000 (---------------) + I pistoia
+ 0x002cc583, // n0x0916 c0x0000 (---------------) + I pmn
+ 0x002a2b42, // n0x0917 c0x0000 (---------------) + I pn
+ 0x002167c2, // n0x0918 c0x0000 (---------------) + I po
+ 0x002cdd09, // n0x0919 c0x0000 (---------------) + I pordenone
+ 0x00249287, // n0x091a c0x0000 (---------------) + I potenza
+ 0x0022ad42, // n0x091b c0x0000 (---------------) + I pr
+ 0x00337145, // n0x091c c0x0000 (---------------) + I prato
+ 0x0029ab02, // n0x091d c0x0000 (---------------) + I pt
+ 0x00234882, // n0x091e c0x0000 (---------------) + I pu
+ 0x00268e03, // n0x091f c0x0000 (---------------) + I pug
+ 0x00268e06, // n0x0920 c0x0000 (---------------) + I puglia
+ 0x002d35c2, // n0x0921 c0x0000 (---------------) + I pv
+ 0x002d39c2, // n0x0922 c0x0000 (---------------) + I pz
+ 0x00201082, // n0x0923 c0x0000 (---------------) + I ra
+ 0x00378446, // n0x0924 c0x0000 (---------------) + I ragusa
+ 0x00275f47, // n0x0925 c0x0000 (---------------) + I ravenna
+ 0x00229f02, // n0x0926 c0x0000 (---------------) + I rc
+ 0x00207082, // n0x0927 c0x0000 (---------------) + I re
+ 0x00230ecf, // n0x0928 c0x0000 (---------------) + I reggio-calabria
+ 0x0024150d, // n0x0929 c0x0000 (---------------) + I reggio-emilia
+ 0x0021face, // n0x092a c0x0000 (---------------) + I reggiocalabria
+ 0x0026a7cc, // n0x092b c0x0000 (---------------) + I reggioemilia
+ 0x00204042, // n0x092c c0x0000 (---------------) + I rg
+ 0x00200d42, // n0x092d c0x0000 (---------------) + I ri
+ 0x00229385, // n0x092e c0x0000 (---------------) + I rieti
+ 0x003860c6, // n0x092f c0x0000 (---------------) + I rimini
+ 0x00212642, // n0x0930 c0x0000 (---------------) + I rm
+ 0x002065c2, // n0x0931 c0x0000 (---------------) + I rn
+ 0x00200982, // n0x0932 c0x0000 (---------------) + I ro
+ 0x00225c04, // n0x0933 c0x0000 (---------------) + I roma
+ 0x002e1ac4, // n0x0934 c0x0000 (---------------) + I rome
+ 0x002e4b86, // n0x0935 c0x0000 (---------------) + I rovigo
+ 0x00203a82, // n0x0936 c0x0000 (---------------) + I sa
+ 0x0027e2c7, // n0x0937 c0x0000 (---------------) + I salerno
+ 0x0022a2c3, // n0x0938 c0x0000 (---------------) + I sar
+ 0x00248748, // n0x0939 c0x0000 (---------------) + I sardegna
+ 0x0024a108, // n0x093a c0x0000 (---------------) + I sardinia
+ 0x00252c07, // n0x093b c0x0000 (---------------) + I sassari
+ 0x00262306, // n0x093c c0x0000 (---------------) + I savona
+ 0x002058c2, // n0x093d c0x0000 (---------------) + I si
+ 0x002203c3, // n0x093e c0x0000 (---------------) + I sic
+ 0x002203c7, // n0x093f c0x0000 (---------------) + I sicilia
+ 0x002636c6, // n0x0940 c0x0000 (---------------) + I sicily
+ 0x00285245, // n0x0941 c0x0000 (---------------) + I siena
+ 0x002d0688, // n0x0942 c0x0000 (---------------) + I siracusa
+ 0x00209f02, // n0x0943 c0x0000 (---------------) + I so
+ 0x002ee7c7, // n0x0944 c0x0000 (---------------) + I sondrio
+ 0x0022e802, // n0x0945 c0x0000 (---------------) + I sp
+ 0x002dc282, // n0x0946 c0x0000 (---------------) + I sr
+ 0x00203a42, // n0x0947 c0x0000 (---------------) + I ss
+ 0x002b2989, // n0x0948 c0x0000 (---------------) + I suedtirol
+ 0x00201e82, // n0x0949 c0x0000 (---------------) + I sv
+ 0x00202542, // n0x094a c0x0000 (---------------) + I ta
+ 0x0022fa03, // n0x094b c0x0000 (---------------) + I taa
+ 0x00344c87, // n0x094c c0x0000 (---------------) + I taranto
+ 0x00207302, // n0x094d c0x0000 (---------------) + I te
+ 0x0023a0cc, // n0x094e c0x0000 (---------------) + I tempio-olbia
+ 0x0023a3cb, // n0x094f c0x0000 (---------------) + I tempioolbia
+ 0x002b8dc6, // n0x0950 c0x0000 (---------------) + I teramo
+ 0x002d8e05, // n0x0951 c0x0000 (---------------) + I terni
+ 0x00201942, // n0x0952 c0x0000 (---------------) + I tn
+ 0x00200302, // n0x0953 c0x0000 (---------------) + I to
+ 0x002a6206, // n0x0954 c0x0000 (---------------) + I torino
+ 0x00223503, // n0x0955 c0x0000 (---------------) + I tos
+ 0x00343e47, // n0x0956 c0x0000 (---------------) + I toscana
+ 0x0020df02, // n0x0957 c0x0000 (---------------) + I tp
+ 0x00200942, // n0x0958 c0x0000 (---------------) + I tr
+ 0x0027b555, // n0x0959 c0x0000 (---------------) + I trani-andria-barletta
+ 0x0025ffd5, // n0x095a c0x0000 (---------------) + I trani-barletta-andria
+ 0x0027d2d3, // n0x095b c0x0000 (---------------) + I traniandriabarletta
+ 0x00260513, // n0x095c c0x0000 (---------------) + I tranibarlettaandria
+ 0x0028f3c7, // n0x095d c0x0000 (---------------) + I trapani
+ 0x0029e608, // n0x095e c0x0000 (---------------) + I trentino
+ 0x0029e610, // n0x095f c0x0000 (---------------) + I trentino-a-adige
+ 0x0029f0cf, // n0x0960 c0x0000 (---------------) + I trentino-aadige
+ 0x0029fb93, // n0x0961 c0x0000 (---------------) + I trentino-alto-adige
+ 0x002e3492, // n0x0962 c0x0000 (---------------) + I trentino-altoadige
+ 0x003074d0, // n0x0963 c0x0000 (---------------) + I trentino-s-tirol
+ 0x0032bf8f, // n0x0964 c0x0000 (---------------) + I trentino-stirol
+ 0x0032fdd2, // n0x0965 c0x0000 (---------------) + I trentino-sud-tirol
+ 0x002a13d1, // n0x0966 c0x0000 (---------------) + I trentino-sudtirol
+ 0x002aa113, // n0x0967 c0x0000 (---------------) + I trentino-sued-tirol
+ 0x002b2752, // n0x0968 c0x0000 (---------------) + I trentino-suedtirol
+ 0x002bb58f, // n0x0969 c0x0000 (---------------) + I trentinoa-adige
+ 0x002c17ce, // n0x096a c0x0000 (---------------) + I trentinoaadige
+ 0x002c2592, // n0x096b c0x0000 (---------------) + I trentinoalto-adige
+ 0x002c8211, // n0x096c c0x0000 (---------------) + I trentinoaltoadige
+ 0x002d114f, // n0x096d c0x0000 (---------------) + I trentinos-tirol
+ 0x002d364e, // n0x096e c0x0000 (---------------) + I trentinostirol
+ 0x0031b2d1, // n0x096f c0x0000 (---------------) + I trentinosud-tirol
+ 0x002d5750, // n0x0970 c0x0000 (---------------) + I trentinosudtirol
+ 0x002de012, // n0x0971 c0x0000 (---------------) + I trentinosued-tirol
+ 0x002e1151, // n0x0972 c0x0000 (---------------) + I trentinosuedtirol
+ 0x002f10c6, // n0x0973 c0x0000 (---------------) + I trento
+ 0x0037a787, // n0x0974 c0x0000 (---------------) + I treviso
+ 0x00383747, // n0x0975 c0x0000 (---------------) + I trieste
+ 0x00201a82, // n0x0976 c0x0000 (---------------) + I ts
+ 0x002b4e85, // n0x0977 c0x0000 (---------------) + I turin
+ 0x002e4e47, // n0x0978 c0x0000 (---------------) + I tuscany
+ 0x0028dc82, // n0x0979 c0x0000 (---------------) + I tv
+ 0x00200802, // n0x097a c0x0000 (---------------) + I ud
+ 0x002c0045, // n0x097b c0x0000 (---------------) + I udine
+ 0x00221483, // n0x097c c0x0000 (---------------) + I umb
+ 0x00263e86, // n0x097d c0x0000 (---------------) + I umbria
+ 0x0022a40d, // n0x097e c0x0000 (---------------) + I urbino-pesaro
+ 0x0022a74c, // n0x097f c0x0000 (---------------) + I urbinopesaro
+ 0x00203242, // n0x0980 c0x0000 (---------------) + I va
+ 0x00382e4b, // n0x0981 c0x0000 (---------------) + I val-d-aosta
+ 0x002a59ca, // n0x0982 c0x0000 (---------------) + I val-daosta
+ 0x0020910a, // n0x0983 c0x0000 (---------------) + I vald-aosta
+ 0x00225dc9, // n0x0984 c0x0000 (---------------) + I valdaosta
+ 0x002cd68b, // n0x0985 c0x0000 (---------------) + I valle-aosta
+ 0x002e578d, // n0x0986 c0x0000 (---------------) + I valle-d-aosta
+ 0x0036618c, // n0x0987 c0x0000 (---------------) + I valle-daosta
+ 0x0023da0a, // n0x0988 c0x0000 (---------------) + I valleaosta
+ 0x0024078c, // n0x0989 c0x0000 (---------------) + I valled-aosta
+ 0x0024640b, // n0x098a c0x0000 (---------------) + I valledaosta
+ 0x0025528c, // n0x098b c0x0000 (---------------) + I vallee-aoste
+ 0x0026730b, // n0x098c c0x0000 (---------------) + I valleeaoste
+ 0x0026e083, // n0x098d c0x0000 (---------------) + I vao
+ 0x002dc306, // n0x098e c0x0000 (---------------) + I varese
+ 0x002e5f42, // n0x098f c0x0000 (---------------) + I vb
+ 0x002e6442, // n0x0990 c0x0000 (---------------) + I vc
+ 0x0023b883, // n0x0991 c0x0000 (---------------) + I vda
+ 0x00203f02, // n0x0992 c0x0000 (---------------) + I ve
+ 0x00203f03, // n0x0993 c0x0000 (---------------) + I ven
+ 0x002185c6, // n0x0994 c0x0000 (---------------) + I veneto
+ 0x00259647, // n0x0995 c0x0000 (---------------) + I venezia
+ 0x00268586, // n0x0996 c0x0000 (---------------) + I venice
+ 0x00227e88, // n0x0997 c0x0000 (---------------) + I verbania
+ 0x0028eb08, // n0x0998 c0x0000 (---------------) + I vercelli
+ 0x002e7686, // n0x0999 c0x0000 (---------------) + I verona
+ 0x00201642, // n0x099a c0x0000 (---------------) + I vi
+ 0x002eb7cd, // n0x099b c0x0000 (---------------) + I vibo-valentia
+ 0x002ebb0c, // n0x099c c0x0000 (---------------) + I vibovalentia
+ 0x00252607, // n0x099d c0x0000 (---------------) + I vicenza
+ 0x002f0a87, // n0x099e c0x0000 (---------------) + I viterbo
+ 0x00226342, // n0x099f c0x0000 (---------------) + I vr
+ 0x0023ccc2, // n0x09a0 c0x0000 (---------------) + I vs
+ 0x002170c2, // n0x09a1 c0x0000 (---------------) + I vt
+ 0x00203ec2, // n0x09a2 c0x0000 (---------------) + I vv
+ 0x00200882, // n0x09a3 c0x0000 (---------------) + I co
+ 0x00218643, // n0x09a4 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x09a5 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x09a6 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x09a7 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x09a8 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x09a9 c0x0000 (---------------) + I mil
+ 0x00267944, // n0x09aa c0x0000 (---------------) + I name
+ 0x00218643, // n0x09ab c0x0000 (---------------) + I net
+ 0x0024d043, // n0x09ac c0x0000 (---------------) + I org
+ 0x00251983, // n0x09ad c0x0000 (---------------) + I sch
+ 0x00200b82, // n0x09ae c0x0000 (---------------) + I ac
+ 0x00202902, // n0x09af c0x0000 (---------------) + I ad
+ 0x1c665d85, // n0x09b0 c0x0071 (n0x0a1d-n0x0a51) + I aichi
+ 0x1ca12185, // n0x09b1 c0x0072 (n0x0a51-n0x0a6d) + I akita
+ 0x1ce6e0c6, // n0x09b2 c0x0073 (n0x0a6d-n0x0a83) + I aomori
+ 0x0009e448, // n0x09b3 c0x0000 (---------------) + blogspot
+ 0x1d2a6985, // n0x09b4 c0x0074 (n0x0a83-n0x0abd) + I chiba
+ 0x00200882, // n0x09b5 c0x0000 (---------------) + I co
+ 0x00205742, // n0x09b6 c0x0000 (---------------) + I ed
+ 0x1d606d05, // n0x09b7 c0x0075 (n0x0abd-n0x0ad3) + I ehime
+ 0x1da77205, // n0x09b8 c0x0076 (n0x0ad3-n0x0ae2) + I fukui
+ 0x1de77a87, // n0x09b9 c0x0077 (n0x0ae2-n0x0b21) + I fukuoka
+ 0x1e279049, // n0x09ba c0x0078 (n0x0b21-n0x0b54) + I fukushima
+ 0x1e669a44, // n0x09bb c0x0079 (n0x0b54-n0x0b7a) + I gifu
+ 0x00209ac2, // n0x09bc c0x0000 (---------------) + I go
+ 0x00206b02, // n0x09bd c0x0000 (---------------) + I gr
+ 0x1ea4c7c5, // n0x09be c0x007a (n0x0b7a-n0x0b9e) + I gunma
+ 0x1ee8aa89, // n0x09bf c0x007b (n0x0b9e-n0x0bb7) + I hiroshima
+ 0x1f20d548, // n0x09c0 c0x007c (n0x0bb7-n0x0c45) + I hokkaido
+ 0x1f6a0045, // n0x09c1 c0x007d (n0x0c45-n0x0c73) + I hyogo
+ 0x1fb16ec7, // n0x09c2 c0x007e (n0x0c73-n0x0ca6) + I ibaraki
+ 0x1fe1a288, // n0x09c3 c0x007f (n0x0ca6-n0x0cb9) + I ishikawa
+ 0x2034f5c5, // n0x09c4 c0x0080 (n0x0cb9-n0x0cdb) + I iwate
+ 0x206038c6, // n0x09c5 c0x0081 (n0x0cdb-n0x0cea) + I kagawa
+ 0x20b60c89, // n0x09c6 c0x0082 (n0x0cea-n0x0cfe) + I kagoshima
+ 0x20ecc148, // n0x09c7 c0x0083 (n0x0cfe-n0x0d1c) + I kanagawa
+ 0x212ac548, // n0x09c8 c0x0084 (n0x0d1c-n0x0d1d)* o I kawasaki
+ 0x2168b0ca, // n0x09c9 c0x0085 (n0x0d1d-n0x0d1e)* o I kitakyushu
+ 0x21a6f144, // n0x09ca c0x0086 (n0x0d1e-n0x0d1f)* o I kobe
+ 0x21ebecc5, // n0x09cb c0x0087 (n0x0d1f-n0x0d3e) + I kochi
+ 0x222bf488, // n0x09cc c0x0088 (n0x0d3e-n0x0d58) + I kumamoto
+ 0x22662fc5, // n0x09cd c0x0089 (n0x0d58-n0x0d77) + I kyoto
+ 0x00219682, // n0x09ce c0x0000 (---------------) + I lg
+ 0x22a01f83, // n0x09cf c0x008a (n0x0d77-n0x0d95) + I mie
+ 0x22e977c6, // n0x09d0 c0x008b (n0x0d95-n0x0db6) + I miyagi
+ 0x232475c8, // n0x09d1 c0x008c (n0x0db6-n0x0dd1) + I miyazaki
+ 0x2376fe86, // n0x09d2 c0x008d (n0x0dd1-n0x0e1c) + I nagano
+ 0x23a76088, // n0x09d3 c0x008e (n0x0e1c-n0x0e32) + I nagasaki
+ 0x23f7bf46, // n0x09d4 c0x008f (n0x0e32-n0x0e33)* o I nagoya
+ 0x242e7784, // n0x09d5 c0x0090 (n0x0e33-n0x0e59) + I nara
+ 0x00209e82, // n0x09d6 c0x0000 (---------------) + I ne
+ 0x247589c7, // n0x09d7 c0x0091 (n0x0e59-n0x0e7b) + I niigata
+ 0x24aa2444, // n0x09d8 c0x0092 (n0x0e7b-n0x0e8e) + I oita
+ 0x24e71f47, // n0x09d9 c0x0093 (n0x0e8e-n0x0ea8) + I okayama
+ 0x252130c7, // n0x09da c0x0094 (n0x0ea8-n0x0ed2) + I okinawa
+ 0x00200d02, // n0x09db c0x0000 (---------------) + I or
+ 0x256905c5, // n0x09dc c0x0095 (n0x0ed2-n0x0f04) + I osaka
+ 0x25aaf744, // n0x09dd c0x0096 (n0x0f04-n0x0f1e) + I saga
+ 0x25f0c587, // n0x09de c0x0097 (n0x0f1e-n0x0f63) + I saitama
+ 0x26243347, // n0x09df c0x0098 (n0x0f63-n0x0f64)* o I sapporo
+ 0x2667af06, // n0x09e0 c0x0099 (n0x0f64-n0x0f65)* o I sendai
+ 0x26a5c545, // n0x09e1 c0x009a (n0x0f65-n0x0f7c) + I shiga
+ 0x26e8ab87, // n0x09e2 c0x009b (n0x0f7c-n0x0f93) + I shimane
+ 0x272f07c8, // n0x09e3 c0x009c (n0x0f93-n0x0fb7) + I shizuoka
+ 0x2774d487, // n0x09e4 c0x009d (n0x0fb7-n0x0fd6) + I tochigi
+ 0x27ac69c9, // n0x09e5 c0x009e (n0x0fd6-n0x0fe7) + I tokushima
+ 0x27ebc8c5, // n0x09e6 c0x009f (n0x0fe7-n0x1020) + I tokyo
+ 0x282f11c7, // n0x09e7 c0x00a0 (n0x1020-n0x102d) + I tottori
+ 0x286873c6, // n0x09e8 c0x00a1 (n0x102d-n0x1045) + I toyama
+ 0x28b0a988, // n0x09e9 c0x00a2 (n0x1045-n0x1062) + I wakayama
+ 0x0024534d, // n0x09ea c0x0000 (---------------) + I xn--0trq7p7nn
+ 0x00255c89, // n0x09eb c0x0000 (---------------) + I xn--1ctwo
+ 0x0026bc4b, // n0x09ec c0x0000 (---------------) + I xn--1lqs03n
+ 0x0026c98b, // n0x09ed c0x0000 (---------------) + I xn--1lqs71d
+ 0x0029960b, // n0x09ee c0x0000 (---------------) + I xn--2m4a15e
+ 0x002b9c0b, // n0x09ef c0x0000 (---------------) + I xn--32vp30h
+ 0x002f490b, // n0x09f0 c0x0000 (---------------) + I xn--4it168d
+ 0x002f4bcb, // n0x09f1 c0x0000 (---------------) + I xn--4it797k
+ 0x002f5549, // n0x09f2 c0x0000 (---------------) + I xn--4pvxs
+ 0x002f694b, // n0x09f3 c0x0000 (---------------) + I xn--5js045d
+ 0x002f6c0b, // n0x09f4 c0x0000 (---------------) + I xn--5rtp49c
+ 0x002f714b, // n0x09f5 c0x0000 (---------------) + I xn--5rtq34k
+ 0x002f754a, // n0x09f6 c0x0000 (---------------) + I xn--6btw5a
+ 0x002f7a8a, // n0x09f7 c0x0000 (---------------) + I xn--6orx2r
+ 0x002f808c, // n0x09f8 c0x0000 (---------------) + I xn--7t0a264c
+ 0x002fe0cb, // n0x09f9 c0x0000 (---------------) + I xn--8ltr62k
+ 0x002fe50a, // n0x09fa c0x0000 (---------------) + I xn--8pvr4u
+ 0x0030d64a, // n0x09fb c0x0000 (---------------) + I xn--c3s14m
+ 0x0031350e, // n0x09fc c0x0000 (---------------) + I xn--d5qv7z876c
+ 0x0031474e, // n0x09fd c0x0000 (---------------) + I xn--djrs72d6uy
+ 0x00314aca, // n0x09fe c0x0000 (---------------) + I xn--djty4k
+ 0x0031640a, // n0x09ff c0x0000 (---------------) + I xn--efvn9s
+ 0x0031768b, // n0x0a00 c0x0000 (---------------) + I xn--ehqz56n
+ 0x0031794b, // n0x0a01 c0x0000 (---------------) + I xn--elqq16h
+ 0x0031838b, // n0x0a02 c0x0000 (---------------) + I xn--f6qx53a
+ 0x003285cb, // n0x0a03 c0x0000 (---------------) + I xn--k7yn95e
+ 0x00328bca, // n0x0a04 c0x0000 (---------------) + I xn--kbrq7o
+ 0x0032988b, // n0x0a05 c0x0000 (---------------) + I xn--klt787d
+ 0x00329b4a, // n0x0a06 c0x0000 (---------------) + I xn--kltp7d
+ 0x00329dca, // n0x0a07 c0x0000 (---------------) + I xn--kltx9a
+ 0x0032a04a, // n0x0a08 c0x0000 (---------------) + I xn--klty5x
+ 0x00340acb, // n0x0a09 c0x0000 (---------------) + I xn--mkru45i
+ 0x00348a4b, // n0x0a0a c0x0000 (---------------) + I xn--nit225k
+ 0x0034ac0e, // n0x0a0b c0x0000 (---------------) + I xn--ntso0iqx3a
+ 0x0034af8b, // n0x0a0c c0x0000 (---------------) + I xn--ntsq17g
+ 0x00350acb, // n0x0a0d c0x0000 (---------------) + I xn--pssu33l
+ 0x00351b4b, // n0x0a0e c0x0000 (---------------) + I xn--qqqt11m
+ 0x0035468a, // n0x0a0f c0x0000 (---------------) + I xn--rht27z
+ 0x00354909, // n0x0a10 c0x0000 (---------------) + I xn--rht3d
+ 0x00354b4a, // n0x0a11 c0x0000 (---------------) + I xn--rht61e
+ 0x0035600a, // n0x0a12 c0x0000 (---------------) + I xn--rny31h
+ 0x0037180b, // n0x0a13 c0x0000 (---------------) + I xn--tor131o
+ 0x003732cb, // n0x0a14 c0x0000 (---------------) + I xn--uist22h
+ 0x0037380a, // n0x0a15 c0x0000 (---------------) + I xn--uisz3g
+ 0x0037454b, // n0x0a16 c0x0000 (---------------) + I xn--uuwu58a
+ 0x0037904b, // n0x0a17 c0x0000 (---------------) + I xn--vgu402c
+ 0x00383f0b, // n0x0a18 c0x0000 (---------------) + I xn--zbx025d
+ 0x28e797c8, // n0x0a19 c0x00a3 (n0x1062-n0x1084) + I yamagata
+ 0x292809c9, // n0x0a1a c0x00a4 (n0x1084-n0x1094) + I yamaguchi
+ 0x29779ac9, // n0x0a1b c0x00a5 (n0x1094-n0x10b0) + I yamanashi
+ 0x29b45bc8, // n0x0a1c c0x00a6 (n0x10b0-n0x10b1)* o I yokohama
+ 0x002a8745, // n0x0a1d c0x0000 (---------------) + I aisai
+ 0x00203583, // n0x0a1e c0x0000 (---------------) + I ama
+ 0x00202d84, // n0x0a1f c0x0000 (---------------) + I anjo
+ 0x00375ac5, // n0x0a20 c0x0000 (---------------) + I asuke
+ 0x00269786, // n0x0a21 c0x0000 (---------------) + I chiryu
+ 0x00276ac5, // n0x0a22 c0x0000 (---------------) + I chita
+ 0x002802c4, // n0x0a23 c0x0000 (---------------) + I fuso
+ 0x00258648, // n0x0a24 c0x0000 (---------------) + I gamagori
+ 0x00354285, // n0x0a25 c0x0000 (---------------) + I handa
+ 0x00289044, // n0x0a26 c0x0000 (---------------) + I hazu
+ 0x0024f407, // n0x0a27 c0x0000 (---------------) + I hekinan
+ 0x00292c0a, // n0x0a28 c0x0000 (---------------) + I higashiura
+ 0x0030b0ca, // n0x0a29 c0x0000 (---------------) + I ichinomiya
+ 0x002d8a47, // n0x0a2a c0x0000 (---------------) + I inazawa
+ 0x00211b47, // n0x0a2b c0x0000 (---------------) + I inuyama
+ 0x002e3187, // n0x0a2c c0x0000 (---------------) + I isshiki
+ 0x0026b507, // n0x0a2d c0x0000 (---------------) + I iwakura
+ 0x0021c585, // n0x0a2e c0x0000 (---------------) + I kanie
+ 0x0036d0c6, // n0x0a2f c0x0000 (---------------) + I kariya
+ 0x002b6b07, // n0x0a30 c0x0000 (---------------) + I kasugai
+ 0x00239784, // n0x0a31 c0x0000 (---------------) + I kira
+ 0x002f3186, // n0x0a32 c0x0000 (---------------) + I kiyosu
+ 0x003027c6, // n0x0a33 c0x0000 (---------------) + I komaki
+ 0x002ca805, // n0x0a34 c0x0000 (---------------) + I konan
+ 0x0029bcc4, // n0x0a35 c0x0000 (---------------) + I kota
+ 0x002985c6, // n0x0a36 c0x0000 (---------------) + I mihama
+ 0x00291c87, // n0x0a37 c0x0000 (---------------) + I miyoshi
+ 0x00221a46, // n0x0a38 c0x0000 (---------------) + I nishio
+ 0x00227147, // n0x0a39 c0x0000 (---------------) + I nisshin
+ 0x002078c3, // n0x0a3a c0x0000 (---------------) + I obu
+ 0x0024ea46, // n0x0a3b c0x0000 (---------------) + I oguchi
+ 0x00236005, // n0x0a3c c0x0000 (---------------) + I oharu
+ 0x00277b87, // n0x0a3d c0x0000 (---------------) + I okazaki
+ 0x002b1d4a, // n0x0a3e c0x0000 (---------------) + I owariasahi
+ 0x00231844, // n0x0a3f c0x0000 (---------------) + I seto
+ 0x00219888, // n0x0a40 c0x0000 (---------------) + I shikatsu
+ 0x002c5849, // n0x0a41 c0x0000 (---------------) + I shinshiro
+ 0x002e9807, // n0x0a42 c0x0000 (---------------) + I shitara
+ 0x00203006, // n0x0a43 c0x0000 (---------------) + I tahara
+ 0x00322e48, // n0x0a44 c0x0000 (---------------) + I takahama
+ 0x00213449, // n0x0a45 c0x0000 (---------------) + I tobishima
+ 0x00295e44, // n0x0a46 c0x0000 (---------------) + I toei
+ 0x002186c4, // n0x0a47 c0x0000 (---------------) + I togo
+ 0x002f1d45, // n0x0a48 c0x0000 (---------------) + I tokai
+ 0x002b3248, // n0x0a49 c0x0000 (---------------) + I tokoname
+ 0x002b4307, // n0x0a4a c0x0000 (---------------) + I toyoake
+ 0x002bc609, // n0x0a4b c0x0000 (---------------) + I toyohashi
+ 0x00327fc8, // n0x0a4c c0x0000 (---------------) + I toyokawa
+ 0x003245c6, // n0x0a4d c0x0000 (---------------) + I toyone
+ 0x00244606, // n0x0a4e c0x0000 (---------------) + I toyota
+ 0x0028ca08, // n0x0a4f c0x0000 (---------------) + I tsushima
+ 0x003332c6, // n0x0a50 c0x0000 (---------------) + I yatomi
+ 0x00212185, // n0x0a51 c0x0000 (---------------) + I akita
+ 0x0027afc6, // n0x0a52 c0x0000 (---------------) + I daisen
+ 0x00272348, // n0x0a53 c0x0000 (---------------) + I fujisato
+ 0x0021e486, // n0x0a54 c0x0000 (---------------) + I gojome
+ 0x00270f0b, // n0x0a55 c0x0000 (---------------) + I hachirogata
+ 0x00283e46, // n0x0a56 c0x0000 (---------------) + I happou
+ 0x0028df4d, // n0x0a57 c0x0000 (---------------) + I higashinaruse
+ 0x00206445, // n0x0a58 c0x0000 (---------------) + I honjo
+ 0x0029c3c6, // n0x0a59 c0x0000 (---------------) + I honjyo
+ 0x00202405, // n0x0a5a c0x0000 (---------------) + I ikawa
+ 0x0036a389, // n0x0a5b c0x0000 (---------------) + I kamikoani
+ 0x0036a247, // n0x0a5c c0x0000 (---------------) + I kamioka
+ 0x003310c8, // n0x0a5d c0x0000 (---------------) + I katagami
+ 0x00314146, // n0x0a5e c0x0000 (---------------) + I kazuno
+ 0x0028d389, // n0x0a5f c0x0000 (---------------) + I kitaakita
+ 0x002e1846, // n0x0a60 c0x0000 (---------------) + I kosaka
+ 0x002b1cc5, // n0x0a61 c0x0000 (---------------) + I kyowa
+ 0x002467c6, // n0x0a62 c0x0000 (---------------) + I misato
+ 0x002a5f86, // n0x0a63 c0x0000 (---------------) + I mitane
+ 0x002ba6c9, // n0x0a64 c0x0000 (---------------) + I moriyoshi
+ 0x00273706, // n0x0a65 c0x0000 (---------------) + I nikaho
+ 0x00257207, // n0x0a66 c0x0000 (---------------) + I noshiro
+ 0x00294f85, // n0x0a67 c0x0000 (---------------) + I odate
+ 0x00207743, // n0x0a68 c0x0000 (---------------) + I oga
+ 0x00271085, // n0x0a69 c0x0000 (---------------) + I ogata
+ 0x002bf347, // n0x0a6a c0x0000 (---------------) + I semboku
+ 0x002db006, // n0x0a6b c0x0000 (---------------) + I yokote
+ 0x00206349, // n0x0a6c c0x0000 (---------------) + I yurihonjo
+ 0x0026e0c6, // n0x0a6d c0x0000 (---------------) + I aomori
+ 0x00264206, // n0x0a6e c0x0000 (---------------) + I gonohe
+ 0x0024f249, // n0x0a6f c0x0000 (---------------) + I hachinohe
+ 0x0027a9c9, // n0x0a70 c0x0000 (---------------) + I hashikami
+ 0x00295907, // n0x0a71 c0x0000 (---------------) + I hiranai
+ 0x00344608, // n0x0a72 c0x0000 (---------------) + I hirosaki
+ 0x002e0449, // n0x0a73 c0x0000 (---------------) + I itayanagi
+ 0x00278908, // n0x0a74 c0x0000 (---------------) + I kuroishi
+ 0x003482c6, // n0x0a75 c0x0000 (---------------) + I misawa
+ 0x002c2e05, // n0x0a76 c0x0000 (---------------) + I mutsu
+ 0x0023d20a, // n0x0a77 c0x0000 (---------------) + I nakadomari
+ 0x00264286, // n0x0a78 c0x0000 (---------------) + I noheji
+ 0x002ec746, // n0x0a79 c0x0000 (---------------) + I oirase
+ 0x00292605, // n0x0a7a c0x0000 (---------------) + I owani
+ 0x00241b48, // n0x0a7b c0x0000 (---------------) + I rokunohe
+ 0x0035a387, // n0x0a7c c0x0000 (---------------) + I sannohe
+ 0x00379c4a, // n0x0a7d c0x0000 (---------------) + I shichinohe
+ 0x0024ac86, // n0x0a7e c0x0000 (---------------) + I shingo
+ 0x00305fc5, // n0x0a7f c0x0000 (---------------) + I takko
+ 0x002fd846, // n0x0a80 c0x0000 (---------------) + I towada
+ 0x0025de07, // n0x0a81 c0x0000 (---------------) + I tsugaru
+ 0x00202ec7, // n0x0a82 c0x0000 (---------------) + I tsuruta
+ 0x00305685, // n0x0a83 c0x0000 (---------------) + I abiko
+ 0x002b1e85, // n0x0a84 c0x0000 (---------------) + I asahi
+ 0x002bd846, // n0x0a85 c0x0000 (---------------) + I chonan
+ 0x002cb5c6, // n0x0a86 c0x0000 (---------------) + I chosei
+ 0x002dfb86, // n0x0a87 c0x0000 (---------------) + I choshi
+ 0x00347284, // n0x0a88 c0x0000 (---------------) + I chuo
+ 0x00279e49, // n0x0a89 c0x0000 (---------------) + I funabashi
+ 0x00281886, // n0x0a8a c0x0000 (---------------) + I futtsu
+ 0x00231f0a, // n0x0a8b c0x0000 (---------------) + I hanamigawa
+ 0x00287d08, // n0x0a8c c0x0000 (---------------) + I ichihara
+ 0x0034fec8, // n0x0a8d c0x0000 (---------------) + I ichikawa
+ 0x0030b0ca, // n0x0a8e c0x0000 (---------------) + I ichinomiya
+ 0x00369345, // n0x0a8f c0x0000 (---------------) + I inzai
+ 0x00291bc5, // n0x0a90 c0x0000 (---------------) + I isumi
+ 0x0020d808, // n0x0a91 c0x0000 (---------------) + I kamagaya
+ 0x002bea48, // n0x0a92 c0x0000 (---------------) + I kamogawa
+ 0x00375e87, // n0x0a93 c0x0000 (---------------) + I kashiwa
+ 0x00219046, // n0x0a94 c0x0000 (---------------) + I katori
+ 0x00304a08, // n0x0a95 c0x0000 (---------------) + I katsuura
+ 0x002fbf07, // n0x0a96 c0x0000 (---------------) + I kimitsu
+ 0x00277cc8, // n0x0a97 c0x0000 (---------------) + I kisarazu
+ 0x002a3306, // n0x0a98 c0x0000 (---------------) + I kozaki
+ 0x0027c108, // n0x0a99 c0x0000 (---------------) + I kujukuri
+ 0x00288b46, // n0x0a9a c0x0000 (---------------) + I kyonan
+ 0x002cca07, // n0x0a9b c0x0000 (---------------) + I matsudo
+ 0x00279a46, // n0x0a9c c0x0000 (---------------) + I midori
+ 0x002985c6, // n0x0a9d c0x0000 (---------------) + I mihama
+ 0x003333ca, // n0x0a9e c0x0000 (---------------) + I minamiboso
+ 0x00233306, // n0x0a9f c0x0000 (---------------) + I mobara
+ 0x002c2e09, // n0x0aa0 c0x0000 (---------------) + I mutsuzawa
+ 0x00364746, // n0x0aa1 c0x0000 (---------------) + I nagara
+ 0x002f97ca, // n0x0aa2 c0x0000 (---------------) + I nagareyama
+ 0x002e7789, // n0x0aa3 c0x0000 (---------------) + I narashino
+ 0x00306ec6, // n0x0aa4 c0x0000 (---------------) + I narita
+ 0x00238104, // n0x0aa5 c0x0000 (---------------) + I noda
+ 0x00285b8d, // n0x0aa6 c0x0000 (---------------) + I oamishirasato
+ 0x00280c47, // n0x0aa7 c0x0000 (---------------) + I omigawa
+ 0x003090c6, // n0x0aa8 c0x0000 (---------------) + I onjuku
+ 0x002ac405, // n0x0aa9 c0x0000 (---------------) + I otaki
+ 0x002e18c5, // n0x0aaa c0x0000 (---------------) + I sakae
+ 0x0020e0c6, // n0x0aab c0x0000 (---------------) + I sakura
+ 0x002ea189, // n0x0aac c0x0000 (---------------) + I shimofusa
+ 0x002d2a87, // n0x0aad c0x0000 (---------------) + I shirako
+ 0x00272f86, // n0x0aae c0x0000 (---------------) + I shiroi
+ 0x002e7d86, // n0x0aaf c0x0000 (---------------) + I shisui
+ 0x00383cc9, // n0x0ab0 c0x0000 (---------------) + I sodegaura
+ 0x00322bc4, // n0x0ab1 c0x0000 (---------------) + I sosa
+ 0x0024db04, // n0x0ab2 c0x0000 (---------------) + I tako
+ 0x002128c8, // n0x0ab3 c0x0000 (---------------) + I tateyama
+ 0x00273bc6, // n0x0ab4 c0x0000 (---------------) + I togane
+ 0x00294a08, // n0x0ab5 c0x0000 (---------------) + I tohnosho
+ 0x00246748, // n0x0ab6 c0x0000 (---------------) + I tomisato
+ 0x002122c7, // n0x0ab7 c0x0000 (---------------) + I urayasu
+ 0x002c3a49, // n0x0ab8 c0x0000 (---------------) + I yachimata
+ 0x00202a47, // n0x0ab9 c0x0000 (---------------) + I yachiyo
+ 0x002a684a, // n0x0aba c0x0000 (---------------) + I yokaichiba
+ 0x002d698f, // n0x0abb c0x0000 (---------------) + I yokoshibahikari
+ 0x0024b64a, // n0x0abc c0x0000 (---------------) + I yotsukaido
+ 0x00229185, // n0x0abd c0x0000 (---------------) + I ainan
+ 0x00272585, // n0x0abe c0x0000 (---------------) + I honai
+ 0x00218f05, // n0x0abf c0x0000 (---------------) + I ikata
+ 0x00288dc7, // n0x0ac0 c0x0000 (---------------) + I imabari
+ 0x00202b43, // n0x0ac1 c0x0000 (---------------) + I iyo
+ 0x00344808, // n0x0ac2 c0x0000 (---------------) + I kamijima
+ 0x0029b286, // n0x0ac3 c0x0000 (---------------) + I kihoku
+ 0x0029b389, // n0x0ac4 c0x0000 (---------------) + I kumakogen
+ 0x0037fe06, // n0x0ac5 c0x0000 (---------------) + I masaki
+ 0x002ba507, // n0x0ac6 c0x0000 (---------------) + I matsuno
+ 0x0028d149, // n0x0ac7 c0x0000 (---------------) + I matsuyama
+ 0x00330fc8, // n0x0ac8 c0x0000 (---------------) + I namikata
+ 0x0036a547, // n0x0ac9 c0x0000 (---------------) + I niihama
+ 0x00347343, // n0x0aca c0x0000 (---------------) + I ozu
+ 0x002a87c5, // n0x0acb c0x0000 (---------------) + I saijo
+ 0x002d68c5, // n0x0acc c0x0000 (---------------) + I seiyo
+ 0x00348e8b, // n0x0acd c0x0000 (---------------) + I shikokuchuo
+ 0x00263084, // n0x0ace c0x0000 (---------------) + I tobe
+ 0x0021dec4, // n0x0acf c0x0000 (---------------) + I toon
+ 0x00270b06, // n0x0ad0 c0x0000 (---------------) + I uchiko
+ 0x002c96c7, // n0x0ad1 c0x0000 (---------------) + I uwajima
+ 0x0035830a, // n0x0ad2 c0x0000 (---------------) + I yawatahama
+ 0x00216d87, // n0x0ad3 c0x0000 (---------------) + I echizen
+ 0x00295ec7, // n0x0ad4 c0x0000 (---------------) + I eiheiji
+ 0x00277205, // n0x0ad5 c0x0000 (---------------) + I fukui
+ 0x002056c5, // n0x0ad6 c0x0000 (---------------) + I ikeda
+ 0x0021d4c9, // n0x0ad7 c0x0000 (---------------) + I katsuyama
+ 0x002985c6, // n0x0ad8 c0x0000 (---------------) + I mihama
+ 0x00216c0d, // n0x0ad9 c0x0000 (---------------) + I minamiechizen
+ 0x00285e85, // n0x0ada c0x0000 (---------------) + I obama
+ 0x002903c3, // n0x0adb c0x0000 (---------------) + I ohi
+ 0x00210683, // n0x0adc c0x0000 (---------------) + I ono
+ 0x002336c5, // n0x0add c0x0000 (---------------) + I sabae
+ 0x00327d85, // n0x0ade c0x0000 (---------------) + I sakai
+ 0x00322e48, // n0x0adf c0x0000 (---------------) + I takahama
+ 0x00281947, // n0x0ae0 c0x0000 (---------------) + I tsuruga
+ 0x0024d886, // n0x0ae1 c0x0000 (---------------) + I wakasa
+ 0x00293506, // n0x0ae2 c0x0000 (---------------) + I ashiya
+ 0x0022d1c5, // n0x0ae3 c0x0000 (---------------) + I buzen
+ 0x0021e347, // n0x0ae4 c0x0000 (---------------) + I chikugo
+ 0x00211dc7, // n0x0ae5 c0x0000 (---------------) + I chikuho
+ 0x0036dbc7, // n0x0ae6 c0x0000 (---------------) + I chikujo
+ 0x002bed4a, // n0x0ae7 c0x0000 (---------------) + I chikushino
+ 0x0024eb08, // n0x0ae8 c0x0000 (---------------) + I chikuzen
+ 0x00347284, // n0x0ae9 c0x0000 (---------------) + I chuo
+ 0x00205987, // n0x0aea c0x0000 (---------------) + I dazaifu
+ 0x00276507, // n0x0aeb c0x0000 (---------------) + I fukuchi
+ 0x00317bc6, // n0x0aec c0x0000 (---------------) + I hakata
+ 0x00260cc7, // n0x0aed c0x0000 (---------------) + I higashi
+ 0x002c4a48, // n0x0aee c0x0000 (---------------) + I hirokawa
+ 0x003799c8, // n0x0aef c0x0000 (---------------) + I hisayama
+ 0x00258106, // n0x0af0 c0x0000 (---------------) + I iizuka
+ 0x0020f5c8, // n0x0af1 c0x0000 (---------------) + I inatsuki
+ 0x00273784, // n0x0af2 c0x0000 (---------------) + I kaho
+ 0x002b6b06, // n0x0af3 c0x0000 (---------------) + I kasuga
+ 0x002041c6, // n0x0af4 c0x0000 (---------------) + I kasuya
+ 0x003029c6, // n0x0af5 c0x0000 (---------------) + I kawara
+ 0x0030b346, // n0x0af6 c0x0000 (---------------) + I keisen
+ 0x00293a84, // n0x0af7 c0x0000 (---------------) + I koga
+ 0x0026b5c6, // n0x0af8 c0x0000 (---------------) + I kurate
+ 0x002aaa46, // n0x0af9 c0x0000 (---------------) + I kurogi
+ 0x0028c486, // n0x0afa c0x0000 (---------------) + I kurume
+ 0x00216c06, // n0x0afb c0x0000 (---------------) + I minami
+ 0x00210546, // n0x0afc c0x0000 (---------------) + I miyako
+ 0x0029b946, // n0x0afd c0x0000 (---------------) + I miyama
+ 0x0024d788, // n0x0afe c0x0000 (---------------) + I miyawaka
+ 0x002e6d08, // n0x0aff c0x0000 (---------------) + I mizumaki
+ 0x002c0408, // n0x0b00 c0x0000 (---------------) + I munakata
+ 0x00276cc8, // n0x0b01 c0x0000 (---------------) + I nakagawa
+ 0x0020d786, // n0x0b02 c0x0000 (---------------) + I nakama
+ 0x00215405, // n0x0b03 c0x0000 (---------------) + I nishi
+ 0x0027e406, // n0x0b04 c0x0000 (---------------) + I nogata
+ 0x002a00c5, // n0x0b05 c0x0000 (---------------) + I ogori
+ 0x00347047, // n0x0b06 c0x0000 (---------------) + I okagaki
+ 0x00230345, // n0x0b07 c0x0000 (---------------) + I okawa
+ 0x002130c3, // n0x0b08 c0x0000 (---------------) + I oki
+ 0x002087c5, // n0x0b09 c0x0000 (---------------) + I omuta
+ 0x0037c804, // n0x0b0a c0x0000 (---------------) + I onga
+ 0x00210685, // n0x0b0b c0x0000 (---------------) + I onojo
+ 0x00242043, // n0x0b0c c0x0000 (---------------) + I oto
+ 0x002ddc47, // n0x0b0d c0x0000 (---------------) + I saigawa
+ 0x0030d908, // n0x0b0e c0x0000 (---------------) + I sasaguri
+ 0x00227206, // n0x0b0f c0x0000 (---------------) + I shingu
+ 0x002c8f4d, // n0x0b10 c0x0000 (---------------) + I shinyoshitomi
+ 0x00272546, // n0x0b11 c0x0000 (---------------) + I shonai
+ 0x0028ba85, // n0x0b12 c0x0000 (---------------) + I soeda
+ 0x002aa343, // n0x0b13 c0x0000 (---------------) + I sue
+ 0x002a8589, // n0x0b14 c0x0000 (---------------) + I tachiarai
+ 0x002be046, // n0x0b15 c0x0000 (---------------) + I tagawa
+ 0x0020ed06, // n0x0b16 c0x0000 (---------------) + I takata
+ 0x002f4544, // n0x0b17 c0x0000 (---------------) + I toho
+ 0x0024b5c7, // n0x0b18 c0x0000 (---------------) + I toyotsu
+ 0x00239106, // n0x0b19 c0x0000 (---------------) + I tsuiki
+ 0x00306205, // n0x0b1a c0x0000 (---------------) + I ukiha
+ 0x00200f03, // n0x0b1b c0x0000 (---------------) + I umi
+ 0x0020bd44, // n0x0b1c c0x0000 (---------------) + I usui
+ 0x002766c6, // n0x0b1d c0x0000 (---------------) + I yamada
+ 0x002042c4, // n0x0b1e c0x0000 (---------------) + I yame
+ 0x002cef88, // n0x0b1f c0x0000 (---------------) + I yanagawa
+ 0x00204fc9, // n0x0b20 c0x0000 (---------------) + I yukuhashi
+ 0x002305c9, // n0x0b21 c0x0000 (---------------) + I aizubange
+ 0x0029480a, // n0x0b22 c0x0000 (---------------) + I aizumisato
+ 0x00286bcd, // n0x0b23 c0x0000 (---------------) + I aizuwakamatsu
+ 0x0024fd87, // n0x0b24 c0x0000 (---------------) + I asakawa
+ 0x00261e86, // n0x0b25 c0x0000 (---------------) + I bandai
+ 0x00218204, // n0x0b26 c0x0000 (---------------) + I date
+ 0x00279049, // n0x0b27 c0x0000 (---------------) + I fukushima
+ 0x0027fcc8, // n0x0b28 c0x0000 (---------------) + I furudono
+ 0x00280846, // n0x0b29 c0x0000 (---------------) + I futaba
+ 0x00251146, // n0x0b2a c0x0000 (---------------) + I hanawa
+ 0x00260cc7, // n0x0b2b c0x0000 (---------------) + I higashi
+ 0x002dd346, // n0x0b2c c0x0000 (---------------) + I hirata
+ 0x0021c286, // n0x0b2d c0x0000 (---------------) + I hirono
+ 0x00364146, // n0x0b2e c0x0000 (---------------) + I iitate
+ 0x0021314a, // n0x0b2f c0x0000 (---------------) + I inawashiro
+ 0x0021a288, // n0x0b30 c0x0000 (---------------) + I ishikawa
+ 0x00225485, // n0x0b31 c0x0000 (---------------) + I iwaki
+ 0x002395c9, // n0x0b32 c0x0000 (---------------) + I izumizaki
+ 0x002b4a8a, // n0x0b33 c0x0000 (---------------) + I kagamiishi
+ 0x0021a508, // n0x0b34 c0x0000 (---------------) + I kaneyama
+ 0x00291648, // n0x0b35 c0x0000 (---------------) + I kawamata
+ 0x0020ec88, // n0x0b36 c0x0000 (---------------) + I kitakata
+ 0x00299bcc, // n0x0b37 c0x0000 (---------------) + I kitashiobara
+ 0x00316805, // n0x0b38 c0x0000 (---------------) + I koori
+ 0x00293788, // n0x0b39 c0x0000 (---------------) + I koriyama
+ 0x00315146, // n0x0b3a c0x0000 (---------------) + I kunimi
+ 0x002eabc6, // n0x0b3b c0x0000 (---------------) + I miharu
+ 0x002b20c7, // n0x0b3c c0x0000 (---------------) + I mishima
+ 0x00216c85, // n0x0b3d c0x0000 (---------------) + I namie
+ 0x0027b145, // n0x0b3e c0x0000 (---------------) + I nango
+ 0x00230489, // n0x0b3f c0x0000 (---------------) + I nishiaizu
+ 0x00216f07, // n0x0b40 c0x0000 (---------------) + I nishigo
+ 0x0029b345, // n0x0b41 c0x0000 (---------------) + I okuma
+ 0x0021da87, // n0x0b42 c0x0000 (---------------) + I omotego
+ 0x00210683, // n0x0b43 c0x0000 (---------------) + I ono
+ 0x002b5145, // n0x0b44 c0x0000 (---------------) + I otama
+ 0x00229988, // n0x0b45 c0x0000 (---------------) + I samegawa
+ 0x002718c7, // n0x0b46 c0x0000 (---------------) + I shimogo
+ 0x00291509, // n0x0b47 c0x0000 (---------------) + I shirakawa
+ 0x002f5745, // n0x0b48 c0x0000 (---------------) + I showa
+ 0x002d4c04, // n0x0b49 c0x0000 (---------------) + I soma
+ 0x00296908, // n0x0b4a c0x0000 (---------------) + I sukagawa
+ 0x00384e07, // n0x0b4b c0x0000 (---------------) + I taishin
+ 0x0036a708, // n0x0b4c c0x0000 (---------------) + I tamakawa
+ 0x00202548, // n0x0b4d c0x0000 (---------------) + I tanagura
+ 0x00219dc5, // n0x0b4e c0x0000 (---------------) + I tenei
+ 0x0025c686, // n0x0b4f c0x0000 (---------------) + I yabuki
+ 0x00293606, // n0x0b50 c0x0000 (---------------) + I yamato
+ 0x00363549, // n0x0b51 c0x0000 (---------------) + I yamatsuri
+ 0x00300ec7, // n0x0b52 c0x0000 (---------------) + I yanaizu
+ 0x002a0b06, // n0x0b53 c0x0000 (---------------) + I yugawa
+ 0x0029abc7, // n0x0b54 c0x0000 (---------------) + I anpachi
+ 0x00202243, // n0x0b55 c0x0000 (---------------) + I ena
+ 0x00269a44, // n0x0b56 c0x0000 (---------------) + I gifu
+ 0x00363e05, // n0x0b57 c0x0000 (---------------) + I ginan
+ 0x00214644, // n0x0b58 c0x0000 (---------------) + I godo
+ 0x00246cc4, // n0x0b59 c0x0000 (---------------) + I gujo
+ 0x00271247, // n0x0b5a c0x0000 (---------------) + I hashima
+ 0x00380487, // n0x0b5b c0x0000 (---------------) + I hichiso
+ 0x00273144, // n0x0b5c c0x0000 (---------------) + I hida
+ 0x00291350, // n0x0b5d c0x0000 (---------------) + I higashishirakawa
+ 0x0036d387, // n0x0b5e c0x0000 (---------------) + I ibigawa
+ 0x002056c5, // n0x0b5f c0x0000 (---------------) + I ikeda
+ 0x00275ccc, // n0x0b60 c0x0000 (---------------) + I kakamigahara
+ 0x00202304, // n0x0b61 c0x0000 (---------------) + I kani
+ 0x002c8a08, // n0x0b62 c0x0000 (---------------) + I kasahara
+ 0x002cc909, // n0x0b63 c0x0000 (---------------) + I kasamatsu
+ 0x00267ac6, // n0x0b64 c0x0000 (---------------) + I kawaue
+ 0x00322cc8, // n0x0b65 c0x0000 (---------------) + I kitagata
+ 0x00230284, // n0x0b66 c0x0000 (---------------) + I mino
+ 0x002d2108, // n0x0b67 c0x0000 (---------------) + I minokamo
+ 0x002b39c6, // n0x0b68 c0x0000 (---------------) + I mitake
+ 0x002236c8, // n0x0b69 c0x0000 (---------------) + I mizunami
+ 0x00292246, // n0x0b6a c0x0000 (---------------) + I motosu
+ 0x0020198b, // n0x0b6b c0x0000 (---------------) + I nakatsugawa
+ 0x00207745, // n0x0b6c c0x0000 (---------------) + I ogaki
+ 0x002bb008, // n0x0b6d c0x0000 (---------------) + I sakahogi
+ 0x00205404, // n0x0b6e c0x0000 (---------------) + I seki
+ 0x0020540a, // n0x0b6f c0x0000 (---------------) + I sekigahara
+ 0x00291509, // n0x0b70 c0x0000 (---------------) + I shirakawa
+ 0x00279946, // n0x0b71 c0x0000 (---------------) + I tajimi
+ 0x002d6ec8, // n0x0b72 c0x0000 (---------------) + I takayama
+ 0x002da345, // n0x0b73 c0x0000 (---------------) + I tarui
+ 0x00221004, // n0x0b74 c0x0000 (---------------) + I toki
+ 0x002c8906, // n0x0b75 c0x0000 (---------------) + I tomika
+ 0x00380148, // n0x0b76 c0x0000 (---------------) + I wanouchi
+ 0x002797c8, // n0x0b77 c0x0000 (---------------) + I yamagata
+ 0x0031f2c6, // n0x0b78 c0x0000 (---------------) + I yaotsu
+ 0x002068c4, // n0x0b79 c0x0000 (---------------) + I yoro
+ 0x0023d186, // n0x0b7a c0x0000 (---------------) + I annaka
+ 0x00202ac7, // n0x0b7b c0x0000 (---------------) + I chiyoda
+ 0x00271e47, // n0x0b7c c0x0000 (---------------) + I fujioka
+ 0x00260ccf, // n0x0b7d c0x0000 (---------------) + I higashiagatsuma
+ 0x002ec447, // n0x0b7e c0x0000 (---------------) + I isesaki
+ 0x00306f87, // n0x0b7f c0x0000 (---------------) + I itakura
+ 0x002eaa85, // n0x0b80 c0x0000 (---------------) + I kanna
+ 0x002f0945, // n0x0b81 c0x0000 (---------------) + I kanra
+ 0x002955c9, // n0x0b82 c0x0000 (---------------) + I katashina
+ 0x002c3d86, // n0x0b83 c0x0000 (---------------) + I kawaba
+ 0x002657c5, // n0x0b84 c0x0000 (---------------) + I kiryu
+ 0x0027acc7, // n0x0b85 c0x0000 (---------------) + I kusatsu
+ 0x002b2348, // n0x0b86 c0x0000 (---------------) + I maebashi
+ 0x00204345, // n0x0b87 c0x0000 (---------------) + I meiwa
+ 0x00279a46, // n0x0b88 c0x0000 (---------------) + I midori
+ 0x00224f48, // n0x0b89 c0x0000 (---------------) + I minakami
+ 0x0036fe8a, // n0x0b8a c0x0000 (---------------) + I naganohara
+ 0x0026ac08, // n0x0b8b c0x0000 (---------------) + I nakanojo
+ 0x00282907, // n0x0b8c c0x0000 (---------------) + I nanmoku
+ 0x002d6dc6, // n0x0b8d c0x0000 (---------------) + I numata
+ 0x00239586, // n0x0b8e c0x0000 (---------------) + I oizumi
+ 0x0021be03, // n0x0b8f c0x0000 (---------------) + I ora
+ 0x00211083, // n0x0b90 c0x0000 (---------------) + I ota
+ 0x002dfc49, // n0x0b91 c0x0000 (---------------) + I shibukawa
+ 0x002e02c9, // n0x0b92 c0x0000 (---------------) + I shimonita
+ 0x002c68c6, // n0x0b93 c0x0000 (---------------) + I shinto
+ 0x002f5745, // n0x0b94 c0x0000 (---------------) + I showa
+ 0x002e83c8, // n0x0b95 c0x0000 (---------------) + I takasaki
+ 0x002d6ec8, // n0x0b96 c0x0000 (---------------) + I takayama
+ 0x002a1988, // n0x0b97 c0x0000 (---------------) + I tamamura
+ 0x003641cb, // n0x0b98 c0x0000 (---------------) + I tatebayashi
+ 0x002c9187, // n0x0b99 c0x0000 (---------------) + I tomioka
+ 0x00352d89, // n0x0b9a c0x0000 (---------------) + I tsukiyono
+ 0x00260f48, // n0x0b9b c0x0000 (---------------) + I tsumagoi
+ 0x0020e3c4, // n0x0b9c c0x0000 (---------------) + I ueno
+ 0x002ba7c8, // n0x0b9d c0x0000 (---------------) + I yoshioka
+ 0x00284f09, // n0x0b9e c0x0000 (---------------) + I asaminami
+ 0x00261f45, // n0x0b9f c0x0000 (---------------) + I daiwa
+ 0x002bdc07, // n0x0ba0 c0x0000 (---------------) + I etajima
+ 0x00205ac5, // n0x0ba1 c0x0000 (---------------) + I fuchu
+ 0x002796c8, // n0x0ba2 c0x0000 (---------------) + I fukuyama
+ 0x00287b4b, // n0x0ba3 c0x0000 (---------------) + I hatsukaichi
+ 0x0028a8d0, // n0x0ba4 c0x0000 (---------------) + I higashihiroshima
+ 0x0029c005, // n0x0ba5 c0x0000 (---------------) + I hongo
+ 0x0021798c, // n0x0ba6 c0x0000 (---------------) + I jinsekikogen
+ 0x0024da45, // n0x0ba7 c0x0000 (---------------) + I kaita
+ 0x00277283, // n0x0ba8 c0x0000 (---------------) + I kui
+ 0x002b5ec6, // n0x0ba9 c0x0000 (---------------) + I kumano
+ 0x002a9fc4, // n0x0baa c0x0000 (---------------) + I kure
+ 0x002af846, // n0x0bab c0x0000 (---------------) + I mihara
+ 0x00291c87, // n0x0bac c0x0000 (---------------) + I miyoshi
+ 0x00201984, // n0x0bad c0x0000 (---------------) + I naka
+ 0x0030afc8, // n0x0bae c0x0000 (---------------) + I onomichi
+ 0x003446cd, // n0x0baf c0x0000 (---------------) + I osakikamijima
+ 0x002e8285, // n0x0bb0 c0x0000 (---------------) + I otake
+ 0x0024fdc4, // n0x0bb1 c0x0000 (---------------) + I saka
+ 0x00228ec4, // n0x0bb2 c0x0000 (---------------) + I sera
+ 0x0032ae09, // n0x0bb3 c0x0000 (---------------) + I seranishi
+ 0x002aee48, // n0x0bb4 c0x0000 (---------------) + I shinichi
+ 0x002aba07, // n0x0bb5 c0x0000 (---------------) + I shobara
+ 0x002b3a48, // n0x0bb6 c0x0000 (---------------) + I takehara
+ 0x00279f08, // n0x0bb7 c0x0000 (---------------) + I abashiri
+ 0x00273285, // n0x0bb8 c0x0000 (---------------) + I abira
+ 0x00237947, // n0x0bb9 c0x0000 (---------------) + I aibetsu
+ 0x00273207, // n0x0bba c0x0000 (---------------) + I akabira
+ 0x002edc87, // n0x0bbb c0x0000 (---------------) + I akkeshi
+ 0x002b1e89, // n0x0bbc c0x0000 (---------------) + I asahikawa
+ 0x00238f89, // n0x0bbd c0x0000 (---------------) + I ashibetsu
+ 0x0023ff86, // n0x0bbe c0x0000 (---------------) + I ashoro
+ 0x002bfdc6, // n0x0bbf c0x0000 (---------------) + I assabu
+ 0x00260f06, // n0x0bc0 c0x0000 (---------------) + I atsuma
+ 0x00381bc5, // n0x0bc1 c0x0000 (---------------) + I bibai
+ 0x00272a04, // n0x0bc2 c0x0000 (---------------) + I biei
+ 0x002037c6, // n0x0bc3 c0x0000 (---------------) + I bifuka
+ 0x00204d86, // n0x0bc4 c0x0000 (---------------) + I bihoro
+ 0x002732c8, // n0x0bc5 c0x0000 (---------------) + I biratori
+ 0x0025dacb, // n0x0bc6 c0x0000 (---------------) + I chippubetsu
+ 0x00295c87, // n0x0bc7 c0x0000 (---------------) + I chitose
+ 0x00218204, // n0x0bc8 c0x0000 (---------------) + I date
+ 0x002fa746, // n0x0bc9 c0x0000 (---------------) + I ebetsu
+ 0x002d7ac7, // n0x0bca c0x0000 (---------------) + I embetsu
+ 0x0029b545, // n0x0bcb c0x0000 (---------------) + I eniwa
+ 0x00309e85, // n0x0bcc c0x0000 (---------------) + I erimo
+ 0x00232a84, // n0x0bcd c0x0000 (---------------) + I esan
+ 0x00238f06, // n0x0bce c0x0000 (---------------) + I esashi
+ 0x00203848, // n0x0bcf c0x0000 (---------------) + I fukagawa
+ 0x00279049, // n0x0bd0 c0x0000 (---------------) + I fukushima
+ 0x00247fc6, // n0x0bd1 c0x0000 (---------------) + I furano
+ 0x0027ed88, // n0x0bd2 c0x0000 (---------------) + I furubira
+ 0x002f5046, // n0x0bd3 c0x0000 (---------------) + I haboro
+ 0x0031e808, // n0x0bd4 c0x0000 (---------------) + I hakodate
+ 0x002d028c, // n0x0bd5 c0x0000 (---------------) + I hamatonbetsu
+ 0x00273146, // n0x0bd6 c0x0000 (---------------) + I hidaka
+ 0x0028b74d, // n0x0bd7 c0x0000 (---------------) + I higashikagura
+ 0x0028bbcb, // n0x0bd8 c0x0000 (---------------) + I higashikawa
+ 0x002572c5, // n0x0bd9 c0x0000 (---------------) + I hiroo
+ 0x00211f07, // n0x0bda c0x0000 (---------------) + I hokuryu
+ 0x00273806, // n0x0bdb c0x0000 (---------------) + I hokuto
+ 0x00335148, // n0x0bdc c0x0000 (---------------) + I honbetsu
+ 0x00240009, // n0x0bdd c0x0000 (---------------) + I horokanai
+ 0x002ad7c8, // n0x0bde c0x0000 (---------------) + I horonobe
+ 0x002056c5, // n0x0bdf c0x0000 (---------------) + I ikeda
+ 0x002bdd07, // n0x0be0 c0x0000 (---------------) + I imakane
+ 0x002b4c08, // n0x0be1 c0x0000 (---------------) + I ishikari
+ 0x0032d609, // n0x0be2 c0x0000 (---------------) + I iwamizawa
+ 0x0024e546, // n0x0be3 c0x0000 (---------------) + I iwanai
+ 0x0025700a, // n0x0be4 c0x0000 (---------------) + I kamifurano
+ 0x00334ec8, // n0x0be5 c0x0000 (---------------) + I kamikawa
+ 0x002ad60b, // n0x0be6 c0x0000 (---------------) + I kamishihoro
+ 0x002a3e0c, // n0x0be7 c0x0000 (---------------) + I kamisunagawa
+ 0x002d2208, // n0x0be8 c0x0000 (---------------) + I kamoenai
+ 0x00275986, // n0x0be9 c0x0000 (---------------) + I kayabe
+ 0x0036da88, // n0x0bea c0x0000 (---------------) + I kembuchi
+ 0x002ec587, // n0x0beb c0x0000 (---------------) + I kikonai
+ 0x0037ff09, // n0x0bec c0x0000 (---------------) + I kimobetsu
+ 0x0031700d, // n0x0bed c0x0000 (---------------) + I kitahiroshima
+ 0x0028c006, // n0x0bee c0x0000 (---------------) + I kitami
+ 0x00308208, // n0x0bef c0x0000 (---------------) + I kiyosato
+ 0x002e6bc9, // n0x0bf0 c0x0000 (---------------) + I koshimizu
+ 0x002a9608, // n0x0bf1 c0x0000 (---------------) + I kunneppu
+ 0x0027c208, // n0x0bf2 c0x0000 (---------------) + I kuriyama
+ 0x002ab70c, // n0x0bf3 c0x0000 (---------------) + I kuromatsunai
+ 0x002ae4c7, // n0x0bf4 c0x0000 (---------------) + I kushiro
+ 0x002af107, // n0x0bf5 c0x0000 (---------------) + I kutchan
+ 0x002b1cc5, // n0x0bf6 c0x0000 (---------------) + I kyowa
+ 0x0024c447, // n0x0bf7 c0x0000 (---------------) + I mashike
+ 0x002b2208, // n0x0bf8 c0x0000 (---------------) + I matsumae
+ 0x002c8986, // n0x0bf9 c0x0000 (---------------) + I mikasa
+ 0x00247e4c, // n0x0bfa c0x0000 (---------------) + I minamifurano
+ 0x002d15c8, // n0x0bfb c0x0000 (---------------) + I mombetsu
+ 0x002bbcc8, // n0x0bfc c0x0000 (---------------) + I moseushi
+ 0x00203b06, // n0x0bfd c0x0000 (---------------) + I mukawa
+ 0x0025c307, // n0x0bfe c0x0000 (---------------) + I muroran
+ 0x00240184, // n0x0bff c0x0000 (---------------) + I naie
+ 0x00276cc8, // n0x0c00 c0x0000 (---------------) + I nakagawa
+ 0x0028530c, // n0x0c01 c0x0000 (---------------) + I nakasatsunai
+ 0x0022b9cc, // n0x0c02 c0x0000 (---------------) + I nakatombetsu
+ 0x00229205, // n0x0c03 c0x0000 (---------------) + I nanae
+ 0x0037ee47, // n0x0c04 c0x0000 (---------------) + I nanporo
+ 0x00206846, // n0x0c05 c0x0000 (---------------) + I nayoro
+ 0x0025c286, // n0x0c06 c0x0000 (---------------) + I nemuro
+ 0x002d8ec8, // n0x0c07 c0x0000 (---------------) + I niikappu
+ 0x0029b204, // n0x0c08 c0x0000 (---------------) + I niki
+ 0x00221a4b, // n0x0c09 c0x0000 (---------------) + I nishiokoppe
+ 0x0030a4cb, // n0x0c0a c0x0000 (---------------) + I noboribetsu
+ 0x002d6dc6, // n0x0c0b c0x0000 (---------------) + I numata
+ 0x00344547, // n0x0c0c c0x0000 (---------------) + I obihiro
+ 0x0035f745, // n0x0c0d c0x0000 (---------------) + I obira
+ 0x002690c5, // n0x0c0e c0x0000 (---------------) + I oketo
+ 0x00221b86, // n0x0c0f c0x0000 (---------------) + I okoppe
+ 0x002da305, // n0x0c10 c0x0000 (---------------) + I otaru
+ 0x00263045, // n0x0c11 c0x0000 (---------------) + I otobe
+ 0x002b3807, // n0x0c12 c0x0000 (---------------) + I otofuke
+ 0x00268c49, // n0x0c13 c0x0000 (---------------) + I otoineppu
+ 0x002ed344, // n0x0c14 c0x0000 (---------------) + I oumu
+ 0x002fb245, // n0x0c15 c0x0000 (---------------) + I ozora
+ 0x002c95c5, // n0x0c16 c0x0000 (---------------) + I pippu
+ 0x0025c408, // n0x0c17 c0x0000 (---------------) + I rankoshi
+ 0x0030ae05, // n0x0c18 c0x0000 (---------------) + I rebun
+ 0x00289f89, // n0x0c19 c0x0000 (---------------) + I rikubetsu
+ 0x002cb087, // n0x0c1a c0x0000 (---------------) + I rishiri
+ 0x002cb08b, // n0x0c1b c0x0000 (---------------) + I rishirifuji
+ 0x0022a946, // n0x0c1c c0x0000 (---------------) + I saroma
+ 0x0024d4c9, // n0x0c1d c0x0000 (---------------) + I sarufutsu
+ 0x0029bc08, // n0x0c1e c0x0000 (---------------) + I shakotan
+ 0x002a7e85, // n0x0c1f c0x0000 (---------------) + I shari
+ 0x002edd88, // n0x0c20 c0x0000 (---------------) + I shibecha
+ 0x00238fc8, // n0x0c21 c0x0000 (---------------) + I shibetsu
+ 0x0021ca47, // n0x0c22 c0x0000 (---------------) + I shikabe
+ 0x00239447, // n0x0c23 c0x0000 (---------------) + I shikaoi
+ 0x002712c9, // n0x0c24 c0x0000 (---------------) + I shimamaki
+ 0x00223607, // n0x0c25 c0x0000 (---------------) + I shimizu
+ 0x002d5349, // n0x0c26 c0x0000 (---------------) + I shimokawa
+ 0x002bcc0c, // n0x0c27 c0x0000 (---------------) + I shinshinotsu
+ 0x002c68c8, // n0x0c28 c0x0000 (---------------) + I shintoku
+ 0x002ea8c9, // n0x0c29 c0x0000 (---------------) + I shiranuka
+ 0x002d3ec7, // n0x0c2a c0x0000 (---------------) + I shiraoi
+ 0x00279fc9, // n0x0c2b c0x0000 (---------------) + I shiriuchi
+ 0x003805c7, // n0x0c2c c0x0000 (---------------) + I sobetsu
+ 0x002a3f08, // n0x0c2d c0x0000 (---------------) + I sunagawa
+ 0x00332845, // n0x0c2e c0x0000 (---------------) + I taiki
+ 0x002b6a86, // n0x0c2f c0x0000 (---------------) + I takasu
+ 0x002ac448, // n0x0c30 c0x0000 (---------------) + I takikawa
+ 0x002560c8, // n0x0c31 c0x0000 (---------------) + I takinoue
+ 0x002b4949, // n0x0c32 c0x0000 (---------------) + I teshikaga
+ 0x00263087, // n0x0c33 c0x0000 (---------------) + I tobetsu
+ 0x0026b385, // n0x0c34 c0x0000 (---------------) + I tohma
+ 0x002d0a49, // n0x0c35 c0x0000 (---------------) + I tomakomai
+ 0x002468c6, // n0x0c36 c0x0000 (---------------) + I tomari
+ 0x002873c4, // n0x0c37 c0x0000 (---------------) + I toya
+ 0x002f4246, // n0x0c38 c0x0000 (---------------) + I toyako
+ 0x00247448, // n0x0c39 c0x0000 (---------------) + I toyotomi
+ 0x00256b47, // n0x0c3a c0x0000 (---------------) + I toyoura
+ 0x0025dcc8, // n0x0c3b c0x0000 (---------------) + I tsubetsu
+ 0x0020f689, // n0x0c3c c0x0000 (---------------) + I tsukigata
+ 0x002fc647, // n0x0c3d c0x0000 (---------------) + I urakawa
+ 0x00292dc6, // n0x0c3e c0x0000 (---------------) + I urausu
+ 0x00211fc4, // n0x0c3f c0x0000 (---------------) + I uryu
+ 0x00208849, // n0x0c40 c0x0000 (---------------) + I utashinai
+ 0x002377c8, // n0x0c41 c0x0000 (---------------) + I wakkanai
+ 0x002039c7, // n0x0c42 c0x0000 (---------------) + I wassamu
+ 0x002fb786, // n0x0c43 c0x0000 (---------------) + I yakumo
+ 0x0029c4c6, // n0x0c44 c0x0000 (---------------) + I yoichi
+ 0x002ec6c4, // n0x0c45 c0x0000 (---------------) + I aioi
+ 0x002b3506, // n0x0c46 c0x0000 (---------------) + I akashi
+ 0x00210603, // n0x0c47 c0x0000 (---------------) + I ako
+ 0x00378049, // n0x0c48 c0x0000 (---------------) + I amagasaki
+ 0x00207706, // n0x0c49 c0x0000 (---------------) + I aogaki
+ 0x002aad85, // n0x0c4a c0x0000 (---------------) + I asago
+ 0x00293506, // n0x0c4b c0x0000 (---------------) + I ashiya
+ 0x002239c5, // n0x0c4c c0x0000 (---------------) + I awaji
+ 0x00278dc8, // n0x0c4d c0x0000 (---------------) + I fukusaki
+ 0x002d1f47, // n0x0c4e c0x0000 (---------------) + I goshiki
+ 0x003604c6, // n0x0c4f c0x0000 (---------------) + I harima
+ 0x00206d46, // n0x0c50 c0x0000 (---------------) + I himeji
+ 0x0034fec8, // n0x0c51 c0x0000 (---------------) + I ichikawa
+ 0x00295747, // n0x0c52 c0x0000 (---------------) + I inagawa
+ 0x0028c045, // n0x0c53 c0x0000 (---------------) + I itami
+ 0x00293a08, // n0x0c54 c0x0000 (---------------) + I kakogawa
+ 0x003563c8, // n0x0c55 c0x0000 (---------------) + I kamigori
+ 0x00334ec8, // n0x0c56 c0x0000 (---------------) + I kamikawa
+ 0x0024d905, // n0x0c57 c0x0000 (---------------) + I kasai
+ 0x002b6b06, // n0x0c58 c0x0000 (---------------) + I kasuga
+ 0x00230389, // n0x0c59 c0x0000 (---------------) + I kawanishi
+ 0x002a2684, // n0x0c5a c0x0000 (---------------) + I miki
+ 0x0022384b, // n0x0c5b c0x0000 (---------------) + I minamiawaji
+ 0x0021bf8b, // n0x0c5c c0x0000 (---------------) + I nishinomiya
+ 0x00225389, // n0x0c5d c0x0000 (---------------) + I nishiwaki
+ 0x00210683, // n0x0c5e c0x0000 (---------------) + I ono
+ 0x00253cc5, // n0x0c5f c0x0000 (---------------) + I sanda
+ 0x00351146, // n0x0c60 c0x0000 (---------------) + I sannan
+ 0x0024ee88, // n0x0c61 c0x0000 (---------------) + I sasayama
+ 0x00265c04, // n0x0c62 c0x0000 (---------------) + I sayo
+ 0x00227206, // n0x0c63 c0x0000 (---------------) + I shingu
+ 0x002bee89, // n0x0c64 c0x0000 (---------------) + I shinonsen
+ 0x002e5305, // n0x0c65 c0x0000 (---------------) + I shiso
+ 0x002b3746, // n0x0c66 c0x0000 (---------------) + I sumoto
+ 0x00384e06, // n0x0c67 c0x0000 (---------------) + I taishi
+ 0x0020ed04, // n0x0c68 c0x0000 (---------------) + I taka
+ 0x0036a04a, // n0x0c69 c0x0000 (---------------) + I takarazuka
+ 0x002aacc8, // n0x0c6a c0x0000 (---------------) + I takasago
+ 0x002560c6, // n0x0c6b c0x0000 (---------------) + I takino
+ 0x002fb045, // n0x0c6c c0x0000 (---------------) + I tamba
+ 0x00217107, // n0x0c6d c0x0000 (---------------) + I tatsuno
+ 0x0022fec7, // n0x0c6e c0x0000 (---------------) + I toyooka
+ 0x0025c684, // n0x0c6f c0x0000 (---------------) + I yabu
+ 0x0021c1c7, // n0x0c70 c0x0000 (---------------) + I yashiro
+ 0x002a6844, // n0x0c71 c0x0000 (---------------) + I yoka
+ 0x00302946, // n0x0c72 c0x0000 (---------------) + I yokawa
+ 0x00216cc3, // n0x0c73 c0x0000 (---------------) + I ami
+ 0x002b1e85, // n0x0c74 c0x0000 (---------------) + I asahi
+ 0x0032ca45, // n0x0c75 c0x0000 (---------------) + I bando
+ 0x00380288, // n0x0c76 c0x0000 (---------------) + I chikusei
+ 0x00269b45, // n0x0c77 c0x0000 (---------------) + I daigo
+ 0x00272e89, // n0x0c78 c0x0000 (---------------) + I fujishiro
+ 0x00276b07, // n0x0c79 c0x0000 (---------------) + I hitachi
+ 0x00276b0b, // n0x0c7a c0x0000 (---------------) + I hitachinaka
+ 0x002975cc, // n0x0c7b c0x0000 (---------------) + I hitachiomiya
+ 0x00297c0a, // n0x0c7c c0x0000 (---------------) + I hitachiota
+ 0x00316ec7, // n0x0c7d c0x0000 (---------------) + I ibaraki
+ 0x00208983, // n0x0c7e c0x0000 (---------------) + I ina
+ 0x00299a48, // n0x0c7f c0x0000 (---------------) + I inashiki
+ 0x0024dac5, // n0x0c80 c0x0000 (---------------) + I itako
+ 0x002043c5, // n0x0c81 c0x0000 (---------------) + I iwama
+ 0x00210744, // n0x0c82 c0x0000 (---------------) + I joso
+ 0x002a3e06, // n0x0c83 c0x0000 (---------------) + I kamisu
+ 0x002cc906, // n0x0c84 c0x0000 (---------------) + I kasama
+ 0x002b3547, // n0x0c85 c0x0000 (---------------) + I kashima
+ 0x00200e4b, // n0x0c86 c0x0000 (---------------) + I kasumigaura
+ 0x00293a84, // n0x0c87 c0x0000 (---------------) + I koga
+ 0x002df804, // n0x0c88 c0x0000 (---------------) + I miho
+ 0x00258284, // n0x0c89 c0x0000 (---------------) + I mito
+ 0x002ba386, // n0x0c8a c0x0000 (---------------) + I moriya
+ 0x00201984, // n0x0c8b c0x0000 (---------------) + I naka
+ 0x002b3348, // n0x0c8c c0x0000 (---------------) + I namegata
+ 0x0031ce85, // n0x0c8d c0x0000 (---------------) + I oarai
+ 0x00228905, // n0x0c8e c0x0000 (---------------) + I ogawa
+ 0x002a18c7, // n0x0c8f c0x0000 (---------------) + I omitama
+ 0x00212009, // n0x0c90 c0x0000 (---------------) + I ryugasaki
+ 0x00327d85, // n0x0c91 c0x0000 (---------------) + I sakai
+ 0x0020e0ca, // n0x0c92 c0x0000 (---------------) + I sakuragawa
+ 0x00294e89, // n0x0c93 c0x0000 (---------------) + I shimodate
+ 0x002a8b8a, // n0x0c94 c0x0000 (---------------) + I shimotsuma
+ 0x00213289, // n0x0c95 c0x0000 (---------------) + I shirosato
+ 0x002d90c4, // n0x0c96 c0x0000 (---------------) + I sowa
+ 0x002e7e45, // n0x0c97 c0x0000 (---------------) + I suifu
+ 0x002dd448, // n0x0c98 c0x0000 (---------------) + I takahagi
+ 0x0030c64b, // n0x0c99 c0x0000 (---------------) + I tamatsukuri
+ 0x002f1d45, // n0x0c9a c0x0000 (---------------) + I tokai
+ 0x00344dc6, // n0x0c9b c0x0000 (---------------) + I tomobe
+ 0x00216684, // n0x0c9c c0x0000 (---------------) + I tone
+ 0x002733c6, // n0x0c9d c0x0000 (---------------) + I toride
+ 0x002fc4c9, // n0x0c9e c0x0000 (---------------) + I tsuchiura
+ 0x002fa807, // n0x0c9f c0x0000 (---------------) + I tsukuba
+ 0x0026e288, // n0x0ca0 c0x0000 (---------------) + I uchihara
+ 0x00286f46, // n0x0ca1 c0x0000 (---------------) + I ushiku
+ 0x00202a47, // n0x0ca2 c0x0000 (---------------) + I yachiyo
+ 0x002797c8, // n0x0ca3 c0x0000 (---------------) + I yamagata
+ 0x00355e86, // n0x0ca4 c0x0000 (---------------) + I yawara
+ 0x00383544, // n0x0ca5 c0x0000 (---------------) + I yuki
+ 0x0033b707, // n0x0ca6 c0x0000 (---------------) + I anamizu
+ 0x0032aa05, // n0x0ca7 c0x0000 (---------------) + I hakui
+ 0x0033c0c7, // n0x0ca8 c0x0000 (---------------) + I hakusan
+ 0x002038c4, // n0x0ca9 c0x0000 (---------------) + I kaga
+ 0x00273786, // n0x0caa c0x0000 (---------------) + I kahoku
+ 0x00204b88, // n0x0cab c0x0000 (---------------) + I kanazawa
+ 0x0028bd88, // n0x0cac c0x0000 (---------------) + I kawakita
+ 0x00307e47, // n0x0cad c0x0000 (---------------) + I komatsu
+ 0x00282c88, // n0x0cae c0x0000 (---------------) + I nakanoto
+ 0x00288c05, // n0x0caf c0x0000 (---------------) + I nanao
+ 0x002104c4, // n0x0cb0 c0x0000 (---------------) + I nomi
+ 0x0034fdc8, // n0x0cb1 c0x0000 (---------------) + I nonoichi
+ 0x00282d84, // n0x0cb2 c0x0000 (---------------) + I noto
+ 0x00218e85, // n0x0cb3 c0x0000 (---------------) + I shika
+ 0x002df344, // n0x0cb4 c0x0000 (---------------) + I suzu
+ 0x002fc007, // n0x0cb5 c0x0000 (---------------) + I tsubata
+ 0x00363cc7, // n0x0cb6 c0x0000 (---------------) + I tsurugi
+ 0x0027a108, // n0x0cb7 c0x0000 (---------------) + I uchinada
+ 0x002c9706, // n0x0cb8 c0x0000 (---------------) + I wajima
+ 0x00269ac5, // n0x0cb9 c0x0000 (---------------) + I fudai
+ 0x00272c88, // n0x0cba c0x0000 (---------------) + I fujisawa
+ 0x0026ae08, // n0x0cbb c0x0000 (---------------) + I hanamaki
+ 0x00294749, // n0x0cbc c0x0000 (---------------) + I hiraizumi
+ 0x0021c286, // n0x0cbd c0x0000 (---------------) + I hirono
+ 0x00379cc8, // n0x0cbe c0x0000 (---------------) + I ichinohe
+ 0x0020528a, // n0x0cbf c0x0000 (---------------) + I ichinoseki
+ 0x0029b5c8, // n0x0cc0 c0x0000 (---------------) + I iwaizumi
+ 0x0034f5c5, // n0x0cc1 c0x0000 (---------------) + I iwate
+ 0x0036dd06, // n0x0cc2 c0x0000 (---------------) + I joboji
+ 0x00294d48, // n0x0cc3 c0x0000 (---------------) + I kamaishi
+ 0x002bddca, // n0x0cc4 c0x0000 (---------------) + I kanegasaki
+ 0x002fa087, // n0x0cc5 c0x0000 (---------------) + I karumai
+ 0x0027de85, // n0x0cc6 c0x0000 (---------------) + I kawai
+ 0x002875c8, // n0x0cc7 c0x0000 (---------------) + I kitakami
+ 0x00235604, // n0x0cc8 c0x0000 (---------------) + I kuji
+ 0x00241bc6, // n0x0cc9 c0x0000 (---------------) + I kunohe
+ 0x002af9c8, // n0x0cca c0x0000 (---------------) + I kuzumaki
+ 0x00210546, // n0x0ccb c0x0000 (---------------) + I miyako
+ 0x00364d08, // n0x0ccc c0x0000 (---------------) + I mizusawa
+ 0x0020ef07, // n0x0ccd c0x0000 (---------------) + I morioka
+ 0x0020ea06, // n0x0cce c0x0000 (---------------) + I ninohe
+ 0x00238104, // n0x0ccf c0x0000 (---------------) + I noda
+ 0x002a1dc7, // n0x0cd0 c0x0000 (---------------) + I ofunato
+ 0x002f2e04, // n0x0cd1 c0x0000 (---------------) + I oshu
+ 0x002fc487, // n0x0cd2 c0x0000 (---------------) + I otsuchi
+ 0x002a1f8d, // n0x0cd3 c0x0000 (---------------) + I rikuzentakata
+ 0x00225405, // n0x0cd4 c0x0000 (---------------) + I shiwa
+ 0x002e9f8b, // n0x0cd5 c0x0000 (---------------) + I shizukuishi
+ 0x00292346, // n0x0cd6 c0x0000 (---------------) + I sumita
+ 0x0024e348, // n0x0cd7 c0x0000 (---------------) + I tanohata
+ 0x003793c4, // n0x0cd8 c0x0000 (---------------) + I tono
+ 0x0020d986, // n0x0cd9 c0x0000 (---------------) + I yahaba
+ 0x002766c6, // n0x0cda c0x0000 (---------------) + I yamada
+ 0x0026f707, // n0x0cdb c0x0000 (---------------) + I ayagawa
+ 0x0028b40d, // n0x0cdc c0x0000 (---------------) + I higashikagawa
+ 0x002d9707, // n0x0cdd c0x0000 (---------------) + I kanonji
+ 0x002fdb88, // n0x0cde c0x0000 (---------------) + I kotohira
+ 0x00272085, // n0x0cdf c0x0000 (---------------) + I manno
+ 0x0028cb88, // n0x0ce0 c0x0000 (---------------) + I marugame
+ 0x002b4286, // n0x0ce1 c0x0000 (---------------) + I mitoyo
+ 0x00288c88, // n0x0ce2 c0x0000 (---------------) + I naoshima
+ 0x0023f706, // n0x0ce3 c0x0000 (---------------) + I sanuki
+ 0x00363bc7, // n0x0ce4 c0x0000 (---------------) + I tadotsu
+ 0x00358b09, // n0x0ce5 c0x0000 (---------------) + I takamatsu
+ 0x003793c7, // n0x0ce6 c0x0000 (---------------) + I tonosho
+ 0x00280b08, // n0x0ce7 c0x0000 (---------------) + I uchinomi
+ 0x0026cd85, // n0x0ce8 c0x0000 (---------------) + I utazu
+ 0x0021b648, // n0x0ce9 c0x0000 (---------------) + I zentsuji
+ 0x0025c1c5, // n0x0cea c0x0000 (---------------) + I akune
+ 0x00249405, // n0x0ceb c0x0000 (---------------) + I amami
+ 0x00345145, // n0x0cec c0x0000 (---------------) + I hioki
+ 0x00213e43, // n0x0ced c0x0000 (---------------) + I isa
+ 0x0020e944, // n0x0cee c0x0000 (---------------) + I isen
+ 0x002395c5, // n0x0cef c0x0000 (---------------) + I izumi
+ 0x00360c89, // n0x0cf0 c0x0000 (---------------) + I kagoshima
+ 0x002e5446, // n0x0cf1 c0x0000 (---------------) + I kanoya
+ 0x002c4b48, // n0x0cf2 c0x0000 (---------------) + I kawanabe
+ 0x00239205, // n0x0cf3 c0x0000 (---------------) + I kinko
+ 0x00348cc7, // n0x0cf4 c0x0000 (---------------) + I kouyama
+ 0x0033548a, // n0x0cf5 c0x0000 (---------------) + I makurazaki
+ 0x002b3689, // n0x0cf6 c0x0000 (---------------) + I matsumoto
+ 0x002a5e8a, // n0x0cf7 c0x0000 (---------------) + I minamitane
+ 0x002c0488, // n0x0cf8 c0x0000 (---------------) + I nakatane
+ 0x0021d8cc, // n0x0cf9 c0x0000 (---------------) + I nishinoomote
+ 0x0027ad4d, // n0x0cfa c0x0000 (---------------) + I satsumasendai
+ 0x002d5583, // n0x0cfb c0x0000 (---------------) + I soo
+ 0x00364c08, // n0x0cfc c0x0000 (---------------) + I tarumizu
+ 0x0020bd05, // n0x0cfd c0x0000 (---------------) + I yusui
+ 0x002c3d06, // n0x0cfe c0x0000 (---------------) + I aikawa
+ 0x00330e46, // n0x0cff c0x0000 (---------------) + I atsugi
+ 0x002d1c85, // n0x0d00 c0x0000 (---------------) + I ayase
+ 0x0029acc9, // n0x0d01 c0x0000 (---------------) + I chigasaki
+ 0x00383b05, // n0x0d02 c0x0000 (---------------) + I ebina
+ 0x00272c88, // n0x0d03 c0x0000 (---------------) + I fujisawa
+ 0x00283106, // n0x0d04 c0x0000 (---------------) + I hadano
+ 0x00320a86, // n0x0d05 c0x0000 (---------------) + I hakone
+ 0x002967c9, // n0x0d06 c0x0000 (---------------) + I hiratsuka
+ 0x00357b07, // n0x0d07 c0x0000 (---------------) + I isehara
+ 0x002d6806, // n0x0d08 c0x0000 (---------------) + I kaisei
+ 0x00335408, // n0x0d09 c0x0000 (---------------) + I kamakura
+ 0x003028c8, // n0x0d0a c0x0000 (---------------) + I kiyokawa
+ 0x00345dc7, // n0x0d0b c0x0000 (---------------) + I matsuda
+ 0x0028f5ce, // n0x0d0c c0x0000 (---------------) + I minamiashigara
+ 0x002b44c5, // n0x0d0d c0x0000 (---------------) + I miura
+ 0x0032d505, // n0x0d0e c0x0000 (---------------) + I nakai
+ 0x00210448, // n0x0d0f c0x0000 (---------------) + I ninomiya
+ 0x00238147, // n0x0d10 c0x0000 (---------------) + I odawara
+ 0x00205242, // n0x0d11 c0x0000 (---------------) + I oi
+ 0x002ab204, // n0x0d12 c0x0000 (---------------) + I oiso
+ 0x002af74a, // n0x0d13 c0x0000 (---------------) + I sagamihara
+ 0x00203a88, // n0x0d14 c0x0000 (---------------) + I samukawa
+ 0x002d7bc6, // n0x0d15 c0x0000 (---------------) + I tsukui
+ 0x0028d288, // n0x0d16 c0x0000 (---------------) + I yamakita
+ 0x00293606, // n0x0d17 c0x0000 (---------------) + I yamato
+ 0x0036cf48, // n0x0d18 c0x0000 (---------------) + I yokosuka
+ 0x002a0b08, // n0x0d19 c0x0000 (---------------) + I yugawara
+ 0x002493c4, // n0x0d1a c0x0000 (---------------) + I zama
+ 0x0035af85, // n0x0d1b c0x0000 (---------------) + I zushi
+ 0x007242c4, // n0x0d1c c0x0001 (---------------) ! I city
+ 0x007242c4, // n0x0d1d c0x0001 (---------------) ! I city
+ 0x007242c4, // n0x0d1e c0x0001 (---------------) ! I city
+ 0x002077c3, // n0x0d1f c0x0000 (---------------) + I aki
+ 0x002ed186, // n0x0d20 c0x0000 (---------------) + I geisei
+ 0x00273146, // n0x0d21 c0x0000 (---------------) + I hidaka
+ 0x0029278c, // n0x0d22 c0x0000 (---------------) + I higashitsuno
+ 0x00200c83, // n0x0d23 c0x0000 (---------------) + I ino
+ 0x0027f346, // n0x0d24 c0x0000 (---------------) + I kagami
+ 0x00225044, // n0x0d25 c0x0000 (---------------) + I kami
+ 0x002bdfc8, // n0x0d26 c0x0000 (---------------) + I kitagawa
+ 0x002becc5, // n0x0d27 c0x0000 (---------------) + I kochi
+ 0x002af846, // n0x0d28 c0x0000 (---------------) + I mihara
+ 0x002bf588, // n0x0d29 c0x0000 (---------------) + I motoyama
+ 0x002c1506, // n0x0d2a c0x0000 (---------------) + I muroto
+ 0x00360446, // n0x0d2b c0x0000 (---------------) + I nahari
+ 0x00234008, // n0x0d2c c0x0000 (---------------) + I nakamura
+ 0x00363e87, // n0x0d2d c0x0000 (---------------) + I nankoku
+ 0x002233c9, // n0x0d2e c0x0000 (---------------) + I nishitosa
+ 0x002287ca, // n0x0d2f c0x0000 (---------------) + I niyodogawa
+ 0x0024fb04, // n0x0d30 c0x0000 (---------------) + I ochi
+ 0x00230345, // n0x0d31 c0x0000 (---------------) + I okawa
+ 0x002bc5c5, // n0x0d32 c0x0000 (---------------) + I otoyo
+ 0x00322a46, // n0x0d33 c0x0000 (---------------) + I otsuki
+ 0x0024fdc6, // n0x0d34 c0x0000 (---------------) + I sakawa
+ 0x002931c6, // n0x0d35 c0x0000 (---------------) + I sukumo
+ 0x002de606, // n0x0d36 c0x0000 (---------------) + I susaki
+ 0x00223504, // n0x0d37 c0x0000 (---------------) + I tosa
+ 0x0022350b, // n0x0d38 c0x0000 (---------------) + I tosashimizu
+ 0x0022fec4, // n0x0d39 c0x0000 (---------------) + I toyo
+ 0x00217185, // n0x0d3a c0x0000 (---------------) + I tsuno
+ 0x0029f6c5, // n0x0d3b c0x0000 (---------------) + I umaji
+ 0x00212386, // n0x0d3c c0x0000 (---------------) + I yasuda
+ 0x00207d88, // n0x0d3d c0x0000 (---------------) + I yusuhara
+ 0x0027ac07, // n0x0d3e c0x0000 (---------------) + I amakusa
+ 0x00370044, // n0x0d3f c0x0000 (---------------) + I arao
+ 0x0028ba43, // n0x0d40 c0x0000 (---------------) + I aso
+ 0x002e6485, // n0x0d41 c0x0000 (---------------) + I choyo
+ 0x00337407, // n0x0d42 c0x0000 (---------------) + I gyokuto
+ 0x00298389, // n0x0d43 c0x0000 (---------------) + I hitoyoshi
+ 0x0027ab0b, // n0x0d44 c0x0000 (---------------) + I kamiamakusa
+ 0x002b3547, // n0x0d45 c0x0000 (---------------) + I kashima
+ 0x0026f407, // n0x0d46 c0x0000 (---------------) + I kikuchi
+ 0x002ddbc4, // n0x0d47 c0x0000 (---------------) + I kosa
+ 0x002bf488, // n0x0d48 c0x0000 (---------------) + I kumamoto
+ 0x003080c7, // n0x0d49 c0x0000 (---------------) + I mashiki
+ 0x0028ddc6, // n0x0d4a c0x0000 (---------------) + I mifune
+ 0x00255f48, // n0x0d4b c0x0000 (---------------) + I minamata
+ 0x002ba04b, // n0x0d4c c0x0000 (---------------) + I minamioguni
+ 0x00375a06, // n0x0d4d c0x0000 (---------------) + I nagasu
+ 0x00217509, // n0x0d4e c0x0000 (---------------) + I nishihara
+ 0x002ba1c5, // n0x0d4f c0x0000 (---------------) + I oguni
+ 0x00347343, // n0x0d50 c0x0000 (---------------) + I ozu
+ 0x002b3746, // n0x0d51 c0x0000 (---------------) + I sumoto
+ 0x0020ee08, // n0x0d52 c0x0000 (---------------) + I takamori
+ 0x0020f703, // n0x0d53 c0x0000 (---------------) + I uki
+ 0x00262c83, // n0x0d54 c0x0000 (---------------) + I uto
+ 0x002797c6, // n0x0d55 c0x0000 (---------------) + I yamaga
+ 0x00293606, // n0x0d56 c0x0000 (---------------) + I yamato
+ 0x0034e90a, // n0x0d57 c0x0000 (---------------) + I yatsushiro
+ 0x002759c5, // n0x0d58 c0x0000 (---------------) + I ayabe
+ 0x0027650b, // n0x0d59 c0x0000 (---------------) + I fukuchiyama
+ 0x0029344b, // n0x0d5a c0x0000 (---------------) + I higashiyama
+ 0x00207c83, // n0x0d5b c0x0000 (---------------) + I ide
+ 0x0021e883, // n0x0d5c c0x0000 (---------------) + I ine
+ 0x002a2384, // n0x0d5d c0x0000 (---------------) + I joyo
+ 0x0020f207, // n0x0d5e c0x0000 (---------------) + I kameoka
+ 0x0020ee84, // n0x0d5f c0x0000 (---------------) + I kamo
+ 0x0020ec84, // n0x0d60 c0x0000 (---------------) + I kita
+ 0x00314fc4, // n0x0d61 c0x0000 (---------------) + I kizu
+ 0x0029b8c8, // n0x0d62 c0x0000 (---------------) + I kumiyama
+ 0x002faf88, // n0x0d63 c0x0000 (---------------) + I kyotamba
+ 0x00211009, // n0x0d64 c0x0000 (---------------) + I kyotanabe
+ 0x002bc948, // n0x0d65 c0x0000 (---------------) + I kyotango
+ 0x00360e47, // n0x0d66 c0x0000 (---------------) + I maizuru
+ 0x00216c06, // n0x0d67 c0x0000 (---------------) + I minami
+ 0x002c478f, // n0x0d68 c0x0000 (---------------) + I minamiyamashiro
+ 0x002b4606, // n0x0d69 c0x0000 (---------------) + I miyazu
+ 0x002bec44, // n0x0d6a c0x0000 (---------------) + I muko
+ 0x002fadca, // n0x0d6b c0x0000 (---------------) + I nagaokakyo
+ 0x00337307, // n0x0d6c c0x0000 (---------------) + I nakagyo
+ 0x002ca886, // n0x0d6d c0x0000 (---------------) + I nantan
+ 0x00287409, // n0x0d6e c0x0000 (---------------) + I oyamazaki
+ 0x00210f85, // n0x0d6f c0x0000 (---------------) + I sakyo
+ 0x002cb685, // n0x0d70 c0x0000 (---------------) + I seika
+ 0x002110c6, // n0x0d71 c0x0000 (---------------) + I tanabe
+ 0x0021b783, // n0x0d72 c0x0000 (---------------) + I uji
+ 0x00235649, // n0x0d73 c0x0000 (---------------) + I ujitawara
+ 0x0021a406, // n0x0d74 c0x0000 (---------------) + I wazuka
+ 0x0020f449, // n0x0d75 c0x0000 (---------------) + I yamashina
+ 0x00358306, // n0x0d76 c0x0000 (---------------) + I yawata
+ 0x002b1e85, // n0x0d77 c0x0000 (---------------) + I asahi
+ 0x0020b185, // n0x0d78 c0x0000 (---------------) + I inabe
+ 0x0020e943, // n0x0d79 c0x0000 (---------------) + I ise
+ 0x0020f348, // n0x0d7a c0x0000 (---------------) + I kameyama
+ 0x0024fe47, // n0x0d7b c0x0000 (---------------) + I kawagoe
+ 0x0029b284, // n0x0d7c c0x0000 (---------------) + I kiho
+ 0x00322b48, // n0x0d7d c0x0000 (---------------) + I kisosaki
+ 0x002df584, // n0x0d7e c0x0000 (---------------) + I kiwa
+ 0x002a4986, // n0x0d7f c0x0000 (---------------) + I komono
+ 0x002b5ec6, // n0x0d80 c0x0000 (---------------) + I kumano
+ 0x0023f446, // n0x0d81 c0x0000 (---------------) + I kuwana
+ 0x002baec9, // n0x0d82 c0x0000 (---------------) + I matsusaka
+ 0x00204345, // n0x0d83 c0x0000 (---------------) + I meiwa
+ 0x002985c6, // n0x0d84 c0x0000 (---------------) + I mihama
+ 0x00255749, // n0x0d85 c0x0000 (---------------) + I minamiise
+ 0x002b30c6, // n0x0d86 c0x0000 (---------------) + I misugi
+ 0x0029b946, // n0x0d87 c0x0000 (---------------) + I miyama
+ 0x00352b86, // n0x0d88 c0x0000 (---------------) + I nabari
+ 0x00213545, // n0x0d89 c0x0000 (---------------) + I shima
+ 0x002df346, // n0x0d8a c0x0000 (---------------) + I suzuka
+ 0x00363bc4, // n0x0d8b c0x0000 (---------------) + I tado
+ 0x00332845, // n0x0d8c c0x0000 (---------------) + I taiki
+ 0x002560c4, // n0x0d8d c0x0000 (---------------) + I taki
+ 0x00314ec6, // n0x0d8e c0x0000 (---------------) + I tamaki
+ 0x00285e44, // n0x0d8f c0x0000 (---------------) + I toba
+ 0x00201a83, // n0x0d90 c0x0000 (---------------) + I tsu
+ 0x0027fd85, // n0x0d91 c0x0000 (---------------) + I udono
+ 0x00238cc8, // n0x0d92 c0x0000 (---------------) + I ureshino
+ 0x00342a07, // n0x0d93 c0x0000 (---------------) + I watarai
+ 0x00265c89, // n0x0d94 c0x0000 (---------------) + I yokkaichi
+ 0x0027ffc8, // n0x0d95 c0x0000 (---------------) + I furukawa
+ 0x0028c7d1, // n0x0d96 c0x0000 (---------------) + I higashimatsushima
+ 0x00384e8a, // n0x0d97 c0x0000 (---------------) + I ishinomaki
+ 0x002d6d07, // n0x0d98 c0x0000 (---------------) + I iwanuma
+ 0x002cb746, // n0x0d99 c0x0000 (---------------) + I kakuda
+ 0x00225044, // n0x0d9a c0x0000 (---------------) + I kami
+ 0x002ac548, // n0x0d9b c0x0000 (---------------) + I kawasaki
+ 0x00375b89, // n0x0d9c c0x0000 (---------------) + I kesennuma
+ 0x00356788, // n0x0d9d c0x0000 (---------------) + I marumori
+ 0x0028c98a, // n0x0d9e c0x0000 (---------------) + I matsushima
+ 0x00289d4d, // n0x0d9f c0x0000 (---------------) + I minamisanriku
+ 0x002467c6, // n0x0da0 c0x0000 (---------------) + I misato
+ 0x00234106, // n0x0da1 c0x0000 (---------------) + I murata
+ 0x002a1e86, // n0x0da2 c0x0000 (---------------) + I natori
+ 0x00305507, // n0x0da3 c0x0000 (---------------) + I ogawara
+ 0x002fdc45, // n0x0da4 c0x0000 (---------------) + I ohira
+ 0x00237687, // n0x0da5 c0x0000 (---------------) + I onagawa
+ 0x00322c05, // n0x0da6 c0x0000 (---------------) + I osaki
+ 0x002cb1c4, // n0x0da7 c0x0000 (---------------) + I rifu
+ 0x002dc406, // n0x0da8 c0x0000 (---------------) + I semine
+ 0x00369f07, // n0x0da9 c0x0000 (---------------) + I shibata
+ 0x0023534d, // n0x0daa c0x0000 (---------------) + I shichikashuku
+ 0x00294c87, // n0x0dab c0x0000 (---------------) + I shikama
+ 0x00258548, // n0x0dac c0x0000 (---------------) + I shiogama
+ 0x00272f89, // n0x0dad c0x0000 (---------------) + I shiroishi
+ 0x0027e506, // n0x0dae c0x0000 (---------------) + I tagajo
+ 0x0024e4c5, // n0x0daf c0x0000 (---------------) + I taiwa
+ 0x00242084, // n0x0db0 c0x0000 (---------------) + I tome
+ 0x00247546, // n0x0db1 c0x0000 (---------------) + I tomiya
+ 0x002c3946, // n0x0db2 c0x0000 (---------------) + I wakuya
+ 0x00203c06, // n0x0db3 c0x0000 (---------------) + I watari
+ 0x00290788, // n0x0db4 c0x0000 (---------------) + I yamamoto
+ 0x00213043, // n0x0db5 c0x0000 (---------------) + I zao
+ 0x00203503, // n0x0db6 c0x0000 (---------------) + I aya
+ 0x00200c05, // n0x0db7 c0x0000 (---------------) + I ebino
+ 0x00269c06, // n0x0db8 c0x0000 (---------------) + I gokase
+ 0x002a0ac5, // n0x0db9 c0x0000 (---------------) + I hyuga
+ 0x00287148, // n0x0dba c0x0000 (---------------) + I kadogawa
+ 0x00291e4a, // n0x0dbb c0x0000 (---------------) + I kawaminami
+ 0x00207804, // n0x0dbc c0x0000 (---------------) + I kijo
+ 0x002bdfc8, // n0x0dbd c0x0000 (---------------) + I kitagawa
+ 0x0020ec88, // n0x0dbe c0x0000 (---------------) + I kitakata
+ 0x002121c7, // n0x0dbf c0x0000 (---------------) + I kitaura
+ 0x002392c9, // n0x0dc0 c0x0000 (---------------) + I kobayashi
+ 0x002a8e08, // n0x0dc1 c0x0000 (---------------) + I kunitomi
+ 0x002790c7, // n0x0dc2 c0x0000 (---------------) + I kushima
+ 0x002aabc6, // n0x0dc3 c0x0000 (---------------) + I mimata
+ 0x0021054a, // n0x0dc4 c0x0000 (---------------) + I miyakonojo
+ 0x002475c8, // n0x0dc5 c0x0000 (---------------) + I miyazaki
+ 0x002ad449, // n0x0dc6 c0x0000 (---------------) + I morotsuka
+ 0x002aef08, // n0x0dc7 c0x0000 (---------------) + I nichinan
+ 0x0021ac09, // n0x0dc8 c0x0000 (---------------) + I nishimera
+ 0x002ad8c7, // n0x0dc9 c0x0000 (---------------) + I nobeoka
+ 0x00261385, // n0x0dca c0x0000 (---------------) + I saito
+ 0x003643c6, // n0x0dcb c0x0000 (---------------) + I shiiba
+ 0x002c8808, // n0x0dcc c0x0000 (---------------) + I shintomi
+ 0x00254cc8, // n0x0dcd c0x0000 (---------------) + I takaharu
+ 0x0020f848, // n0x0dce c0x0000 (---------------) + I takanabe
+ 0x00240a08, // n0x0dcf c0x0000 (---------------) + I takazaki
+ 0x00217185, // n0x0dd0 c0x0000 (---------------) + I tsuno
+ 0x00202a84, // n0x0dd1 c0x0000 (---------------) + I achi
+ 0x0036f9c8, // n0x0dd2 c0x0000 (---------------) + I agematsu
+ 0x00274b04, // n0x0dd3 c0x0000 (---------------) + I anan
+ 0x00213084, // n0x0dd4 c0x0000 (---------------) + I aoki
+ 0x002b1e85, // n0x0dd5 c0x0000 (---------------) + I asahi
+ 0x00289087, // n0x0dd6 c0x0000 (---------------) + I azumino
+ 0x00211dc9, // n0x0dd7 c0x0000 (---------------) + I chikuhoku
+ 0x0026f507, // n0x0dd8 c0x0000 (---------------) + I chikuma
+ 0x002052c5, // n0x0dd9 c0x0000 (---------------) + I chino
+ 0x00270d06, // n0x0dda c0x0000 (---------------) + I fujimi
+ 0x00327586, // n0x0ddb c0x0000 (---------------) + I hakuba
+ 0x00203084, // n0x0ddc c0x0000 (---------------) + I hara
+ 0x00296b06, // n0x0ddd c0x0000 (---------------) + I hiraya
+ 0x00205904, // n0x0dde c0x0000 (---------------) + I iida
+ 0x00288306, // n0x0ddf c0x0000 (---------------) + I iijima
+ 0x00369446, // n0x0de0 c0x0000 (---------------) + I iiyama
+ 0x00217d46, // n0x0de1 c0x0000 (---------------) + I iizuna
+ 0x002056c5, // n0x0de2 c0x0000 (---------------) + I ikeda
+ 0x00287007, // n0x0de3 c0x0000 (---------------) + I ikusaka
+ 0x00208983, // n0x0de4 c0x0000 (---------------) + I ina
+ 0x002da849, // n0x0de5 c0x0000 (---------------) + I karuizawa
+ 0x002d6508, // n0x0de6 c0x0000 (---------------) + I kawakami
+ 0x00278f44, // n0x0de7 c0x0000 (---------------) + I kiso
+ 0x00278f4d, // n0x0de8 c0x0000 (---------------) + I kisofukushima
+ 0x0028be88, // n0x0de9 c0x0000 (---------------) + I kitaaiki
+ 0x0029be08, // n0x0dea c0x0000 (---------------) + I komagane
+ 0x002ad3c6, // n0x0deb c0x0000 (---------------) + I komoro
+ 0x00358c09, // n0x0dec c0x0000 (---------------) + I matsukawa
+ 0x002b3689, // n0x0ded c0x0000 (---------------) + I matsumoto
+ 0x002fc1c5, // n0x0dee c0x0000 (---------------) + I miasa
+ 0x00291f4a, // n0x0def c0x0000 (---------------) + I minamiaiki
+ 0x00267dca, // n0x0df0 c0x0000 (---------------) + I minamimaki
+ 0x0027534c, // n0x0df1 c0x0000 (---------------) + I minamiminowa
+ 0x002754c6, // n0x0df2 c0x0000 (---------------) + I minowa
+ 0x00271cc6, // n0x0df3 c0x0000 (---------------) + I miyada
+ 0x002b5086, // n0x0df4 c0x0000 (---------------) + I miyota
+ 0x00265609, // n0x0df5 c0x0000 (---------------) + I mochizuki
+ 0x0036fe86, // n0x0df6 c0x0000 (---------------) + I nagano
+ 0x002376c6, // n0x0df7 c0x0000 (---------------) + I nagawa
+ 0x00383bc6, // n0x0df8 c0x0000 (---------------) + I nagiso
+ 0x00276cc8, // n0x0df9 c0x0000 (---------------) + I nakagawa
+ 0x0026ac06, // n0x0dfa c0x0000 (---------------) + I nakano
+ 0x0029794b, // n0x0dfb c0x0000 (---------------) + I nozawaonsen
+ 0x00289205, // n0x0dfc c0x0000 (---------------) + I obuse
+ 0x00228905, // n0x0dfd c0x0000 (---------------) + I ogawa
+ 0x00271f45, // n0x0dfe c0x0000 (---------------) + I okaya
+ 0x0025da06, // n0x0dff c0x0000 (---------------) + I omachi
+ 0x00210503, // n0x0e00 c0x0000 (---------------) + I omi
+ 0x0023f3c6, // n0x0e01 c0x0000 (---------------) + I ookuwa
+ 0x00294c07, // n0x0e02 c0x0000 (---------------) + I ooshika
+ 0x002ac405, // n0x0e03 c0x0000 (---------------) + I otaki
+ 0x002446c5, // n0x0e04 c0x0000 (---------------) + I otari
+ 0x002e18c5, // n0x0e05 c0x0000 (---------------) + I sakae
+ 0x003023c6, // n0x0e06 c0x0000 (---------------) + I sakaki
+ 0x0020d444, // n0x0e07 c0x0000 (---------------) + I saku
+ 0x0020d446, // n0x0e08 c0x0000 (---------------) + I sakuho
+ 0x002adc49, // n0x0e09 c0x0000 (---------------) + I shimosuwa
+ 0x0025d88c, // n0x0e0a c0x0000 (---------------) + I shinanomachi
+ 0x002caf08, // n0x0e0b c0x0000 (---------------) + I shiojiri
+ 0x002add84, // n0x0e0c c0x0000 (---------------) + I suwa
+ 0x002defc6, // n0x0e0d c0x0000 (---------------) + I suzaka
+ 0x00292446, // n0x0e0e c0x0000 (---------------) + I takagi
+ 0x0020ee08, // n0x0e0f c0x0000 (---------------) + I takamori
+ 0x002d6ec8, // n0x0e10 c0x0000 (---------------) + I takayama
+ 0x0025d789, // n0x0e11 c0x0000 (---------------) + I tateshina
+ 0x00217107, // n0x0e12 c0x0000 (---------------) + I tatsuno
+ 0x00273909, // n0x0e13 c0x0000 (---------------) + I togakushi
+ 0x00269186, // n0x0e14 c0x0000 (---------------) + I togura
+ 0x0022ebc4, // n0x0e15 c0x0000 (---------------) + I tomi
+ 0x00211344, // n0x0e16 c0x0000 (---------------) + I ueda
+ 0x00278cc4, // n0x0e17 c0x0000 (---------------) + I wada
+ 0x002797c8, // n0x0e18 c0x0000 (---------------) + I yamagata
+ 0x00211c0a, // n0x0e19 c0x0000 (---------------) + I yamanouchi
+ 0x00327d06, // n0x0e1a c0x0000 (---------------) + I yasaka
+ 0x00330c47, // n0x0e1b c0x0000 (---------------) + I yasuoka
+ 0x00231987, // n0x0e1c c0x0000 (---------------) + I chijiwa
+ 0x0024d5c5, // n0x0e1d c0x0000 (---------------) + I futsu
+ 0x002bc584, // n0x0e1e c0x0000 (---------------) + I goto
+ 0x00284ec6, // n0x0e1f c0x0000 (---------------) + I hasami
+ 0x002fdc86, // n0x0e20 c0x0000 (---------------) + I hirado
+ 0x00223ac3, // n0x0e21 c0x0000 (---------------) + I iki
+ 0x002d6347, // n0x0e22 c0x0000 (---------------) + I isahaya
+ 0x00202448, // n0x0e23 c0x0000 (---------------) + I kawatana
+ 0x002fc30a, // n0x0e24 c0x0000 (---------------) + I kuchinotsu
+ 0x002035c8, // n0x0e25 c0x0000 (---------------) + I matsuura
+ 0x00276088, // n0x0e26 c0x0000 (---------------) + I nagasaki
+ 0x00285e85, // n0x0e27 c0x0000 (---------------) + I obama
+ 0x002573c5, // n0x0e28 c0x0000 (---------------) + I omura
+ 0x00295d85, // n0x0e29 c0x0000 (---------------) + I oseto
+ 0x0024d986, // n0x0e2a c0x0000 (---------------) + I saikai
+ 0x00251a86, // n0x0e2b c0x0000 (---------------) + I sasebo
+ 0x003803c5, // n0x0e2c c0x0000 (---------------) + I seihi
+ 0x00378289, // n0x0e2d c0x0000 (---------------) + I shimabara
+ 0x002bc38c, // n0x0e2e c0x0000 (---------------) + I shinkamigoto
+ 0x002342c7, // n0x0e2f c0x0000 (---------------) + I togitsu
+ 0x0028ca08, // n0x0e30 c0x0000 (---------------) + I tsushima
+ 0x0026ce85, // n0x0e31 c0x0000 (---------------) + I unzen
+ 0x007242c4, // n0x0e32 c0x0001 (---------------) ! I city
+ 0x0032ca84, // n0x0e33 c0x0000 (---------------) + I ando
+ 0x00271a04, // n0x0e34 c0x0000 (---------------) + I gose
+ 0x00379e46, // n0x0e35 c0x0000 (---------------) + I heguri
+ 0x00293fce, // n0x0e36 c0x0000 (---------------) + I higashiyoshino
+ 0x0020aac7, // n0x0e37 c0x0000 (---------------) + I ikaruga
+ 0x00305705, // n0x0e38 c0x0000 (---------------) + I ikoma
+ 0x002a260c, // n0x0e39 c0x0000 (---------------) + I kamikitayama
+ 0x002c92c7, // n0x0e3a c0x0000 (---------------) + I kanmaki
+ 0x00369e87, // n0x0e3b c0x0000 (---------------) + I kashiba
+ 0x0036b589, // n0x0e3c c0x0000 (---------------) + I kashihara
+ 0x00219949, // n0x0e3d c0x0000 (---------------) + I katsuragi
+ 0x0027de85, // n0x0e3e c0x0000 (---------------) + I kawai
+ 0x002d6508, // n0x0e3f c0x0000 (---------------) + I kawakami
+ 0x00230389, // n0x0e40 c0x0000 (---------------) + I kawanishi
+ 0x002dba45, // n0x0e41 c0x0000 (---------------) + I koryo
+ 0x002ac348, // n0x0e42 c0x0000 (---------------) + I kurotaki
+ 0x002ba9c6, // n0x0e43 c0x0000 (---------------) + I mitsue
+ 0x0030b246, // n0x0e44 c0x0000 (---------------) + I miyake
+ 0x002e7784, // n0x0e45 c0x0000 (---------------) + I nara
+ 0x00272148, // n0x0e46 c0x0000 (---------------) + I nosegawa
+ 0x00254b43, // n0x0e47 c0x0000 (---------------) + I oji
+ 0x0037e404, // n0x0e48 c0x0000 (---------------) + I ouda
+ 0x002e6505, // n0x0e49 c0x0000 (---------------) + I oyodo
+ 0x0020e647, // n0x0e4a c0x0000 (---------------) + I sakurai
+ 0x002e6945, // n0x0e4b c0x0000 (---------------) + I sango
+ 0x00205149, // n0x0e4c c0x0000 (---------------) + I shimoichi
+ 0x002deb0d, // n0x0e4d c0x0000 (---------------) + I shimokitayama
+ 0x002b9446, // n0x0e4e c0x0000 (---------------) + I shinjo
+ 0x00358944, // n0x0e4f c0x0000 (---------------) + I soni
+ 0x00218fc8, // n0x0e50 c0x0000 (---------------) + I takatori
+ 0x00268a8a, // n0x0e51 c0x0000 (---------------) + I tawaramoto
+ 0x00208587, // n0x0e52 c0x0000 (---------------) + I tenkawa
+ 0x0026b6c5, // n0x0e53 c0x0000 (---------------) + I tenri
+ 0x00212443, // n0x0e54 c0x0000 (---------------) + I uda
+ 0x0029360e, // n0x0e55 c0x0000 (---------------) + I yamatokoriyama
+ 0x002a280c, // n0x0e56 c0x0000 (---------------) + I yamatotakada
+ 0x0029d147, // n0x0e57 c0x0000 (---------------) + I yamazoe
+ 0x00294187, // n0x0e58 c0x0000 (---------------) + I yoshino
+ 0x00203903, // n0x0e59 c0x0000 (---------------) + I aga
+ 0x0036fec5, // n0x0e5a c0x0000 (---------------) + I agano
+ 0x00271a05, // n0x0e5b c0x0000 (---------------) + I gosen
+ 0x0028d648, // n0x0e5c c0x0000 (---------------) + I itoigawa
+ 0x0028af09, // n0x0e5d c0x0000 (---------------) + I izumozaki
+ 0x00202e06, // n0x0e5e c0x0000 (---------------) + I joetsu
+ 0x0020ee84, // n0x0e5f c0x0000 (---------------) + I kamo
+ 0x002d6c46, // n0x0e60 c0x0000 (---------------) + I kariwa
+ 0x00382a4b, // n0x0e61 c0x0000 (---------------) + I kashiwazaki
+ 0x002b8acc, // n0x0e62 c0x0000 (---------------) + I minamiuonuma
+ 0x002778c7, // n0x0e63 c0x0000 (---------------) + I mitsuke
+ 0x002be985, // n0x0e64 c0x0000 (---------------) + I muika
+ 0x003562c8, // n0x0e65 c0x0000 (---------------) + I murakami
+ 0x00345b85, // n0x0e66 c0x0000 (---------------) + I myoko
+ 0x002fadc7, // n0x0e67 c0x0000 (---------------) + I nagaoka
+ 0x003589c7, // n0x0e68 c0x0000 (---------------) + I niigata
+ 0x00254b45, // n0x0e69 c0x0000 (---------------) + I ojiya
+ 0x00210503, // n0x0e6a c0x0000 (---------------) + I omi
+ 0x0035a204, // n0x0e6b c0x0000 (---------------) + I sado
+ 0x00324485, // n0x0e6c c0x0000 (---------------) + I sanjo
+ 0x002ed245, // n0x0e6d c0x0000 (---------------) + I seiro
+ 0x002ed246, // n0x0e6e c0x0000 (---------------) + I seirou
+ 0x002a2e48, // n0x0e6f c0x0000 (---------------) + I sekikawa
+ 0x00369f07, // n0x0e70 c0x0000 (---------------) + I shibata
+ 0x00331146, // n0x0e71 c0x0000 (---------------) + I tagami
+ 0x002c3c06, // n0x0e72 c0x0000 (---------------) + I tainai
+ 0x00345086, // n0x0e73 c0x0000 (---------------) + I tochio
+ 0x00308389, // n0x0e74 c0x0000 (---------------) + I tokamachi
+ 0x00237a47, // n0x0e75 c0x0000 (---------------) + I tsubame
+ 0x00202c86, // n0x0e76 c0x0000 (---------------) + I tsunan
+ 0x002b8c46, // n0x0e77 c0x0000 (---------------) + I uonuma
+ 0x0026f046, // n0x0e78 c0x0000 (---------------) + I yahiko
+ 0x002a2405, // n0x0e79 c0x0000 (---------------) + I yoita
+ 0x0021ea86, // n0x0e7a c0x0000 (---------------) + I yuzawa
+ 0x00375785, // n0x0e7b c0x0000 (---------------) + I beppu
+ 0x0030ae88, // n0x0e7c c0x0000 (---------------) + I bungoono
+ 0x0033e7cb, // n0x0e7d c0x0000 (---------------) + I bungotakada
+ 0x00284cc6, // n0x0e7e c0x0000 (---------------) + I hasama
+ 0x002319c4, // n0x0e7f c0x0000 (---------------) + I hiji
+ 0x002d4509, // n0x0e80 c0x0000 (---------------) + I himeshima
+ 0x00276b04, // n0x0e81 c0x0000 (---------------) + I hita
+ 0x002ba948, // n0x0e82 c0x0000 (---------------) + I kamitsue
+ 0x00295307, // n0x0e83 c0x0000 (---------------) + I kokonoe
+ 0x0027c104, // n0x0e84 c0x0000 (---------------) + I kuju
+ 0x002a6fc8, // n0x0e85 c0x0000 (---------------) + I kunisaki
+ 0x002aec04, // n0x0e86 c0x0000 (---------------) + I kusu
+ 0x002a2444, // n0x0e87 c0x0000 (---------------) + I oita
+ 0x002d0805, // n0x0e88 c0x0000 (---------------) + I saiki
+ 0x002e82c6, // n0x0e89 c0x0000 (---------------) + I taketa
+ 0x0029b807, // n0x0e8a c0x0000 (---------------) + I tsukumi
+ 0x00232883, // n0x0e8b c0x0000 (---------------) + I usa
+ 0x00292e85, // n0x0e8c c0x0000 (---------------) + I usuki
+ 0x00373e84, // n0x0e8d c0x0000 (---------------) + I yufu
+ 0x0032d546, // n0x0e8e c0x0000 (---------------) + I akaiwa
+ 0x002fc248, // n0x0e8f c0x0000 (---------------) + I asakuchi
+ 0x00202185, // n0x0e90 c0x0000 (---------------) + I bizen
+ 0x00288749, // n0x0e91 c0x0000 (---------------) + I hayashima
+ 0x002d0c45, // n0x0e92 c0x0000 (---------------) + I ibara
+ 0x0027f348, // n0x0e93 c0x0000 (---------------) + I kagamino
+ 0x00363287, // n0x0e94 c0x0000 (---------------) + I kasaoka
+ 0x00347188, // n0x0e95 c0x0000 (---------------) + I kibichuo
+ 0x002a6687, // n0x0e96 c0x0000 (---------------) + I kumenan
+ 0x00307049, // n0x0e97 c0x0000 (---------------) + I kurashiki
+ 0x0026b446, // n0x0e98 c0x0000 (---------------) + I maniwa
+ 0x002d73c6, // n0x0e99 c0x0000 (---------------) + I misaki
+ 0x002e0584, // n0x0e9a c0x0000 (---------------) + I nagi
+ 0x0028f505, // n0x0e9b c0x0000 (---------------) + I niimi
+ 0x002eb04c, // n0x0e9c c0x0000 (---------------) + I nishiawakura
+ 0x00271f47, // n0x0e9d c0x0000 (---------------) + I okayama
+ 0x00272447, // n0x0e9e c0x0000 (---------------) + I satosho
+ 0x00231848, // n0x0e9f c0x0000 (---------------) + I setouchi
+ 0x002b9446, // n0x0ea0 c0x0000 (---------------) + I shinjo
+ 0x00294b44, // n0x0ea1 c0x0000 (---------------) + I shoo
+ 0x003335c4, // n0x0ea2 c0x0000 (---------------) + I soja
+ 0x00271149, // n0x0ea3 c0x0000 (---------------) + I takahashi
+ 0x002b5186, // n0x0ea4 c0x0000 (---------------) + I tamano
+ 0x0021d547, // n0x0ea5 c0x0000 (---------------) + I tsuyama
+ 0x0036da04, // n0x0ea6 c0x0000 (---------------) + I wake
+ 0x00296c06, // n0x0ea7 c0x0000 (---------------) + I yakage
+ 0x00382645, // n0x0ea8 c0x0000 (---------------) + I aguni
+ 0x00292547, // n0x0ea9 c0x0000 (---------------) + I ginowan
+ 0x002978c6, // n0x0eaa c0x0000 (---------------) + I ginoza
+ 0x00256ec9, // n0x0eab c0x0000 (---------------) + I gushikami
+ 0x002b9e87, // n0x0eac c0x0000 (---------------) + I haebaru
+ 0x00260cc7, // n0x0ead c0x0000 (---------------) + I higashi
+ 0x00296646, // n0x0eae c0x0000 (---------------) + I hirara
+ 0x002fb6c5, // n0x0eaf c0x0000 (---------------) + I iheya
+ 0x00278a08, // n0x0eb0 c0x0000 (---------------) + I ishigaki
+ 0x0021a288, // n0x0eb1 c0x0000 (---------------) + I ishikawa
+ 0x002fbb86, // n0x0eb2 c0x0000 (---------------) + I itoman
+ 0x002021c5, // n0x0eb3 c0x0000 (---------------) + I izena
+ 0x002b0946, // n0x0eb4 c0x0000 (---------------) + I kadena
+ 0x00211b03, // n0x0eb5 c0x0000 (---------------) + I kin
+ 0x0028d4c9, // n0x0eb6 c0x0000 (---------------) + I kitadaito
+ 0x00292f4e, // n0x0eb7 c0x0000 (---------------) + I kitanakagusuku
+ 0x002a6388, // n0x0eb8 c0x0000 (---------------) + I kumejima
+ 0x002df688, // n0x0eb9 c0x0000 (---------------) + I kunigami
+ 0x002fb98b, // n0x0eba c0x0000 (---------------) + I minamidaito
+ 0x00288986, // n0x0ebb c0x0000 (---------------) + I motobu
+ 0x0024fa44, // n0x0ebc c0x0000 (---------------) + I nago
+ 0x0027a944, // n0x0ebd c0x0000 (---------------) + I naha
+ 0x0029304a, // n0x0ebe c0x0000 (---------------) + I nakagusuku
+ 0x00217887, // n0x0ebf c0x0000 (---------------) + I nakijin
+ 0x00202d45, // n0x0ec0 c0x0000 (---------------) + I nanjo
+ 0x00217509, // n0x0ec1 c0x0000 (---------------) + I nishihara
+ 0x002aab05, // n0x0ec2 c0x0000 (---------------) + I ogimi
+ 0x002130c7, // n0x0ec3 c0x0000 (---------------) + I okinawa
+ 0x0020d704, // n0x0ec4 c0x0000 (---------------) + I onna
+ 0x002e8d47, // n0x0ec5 c0x0000 (---------------) + I shimoji
+ 0x00246648, // n0x0ec6 c0x0000 (---------------) + I taketomi
+ 0x002e98c6, // n0x0ec7 c0x0000 (---------------) + I tarama
+ 0x002f2fc9, // n0x0ec8 c0x0000 (---------------) + I tokashiki
+ 0x002a8f0a, // n0x0ec9 c0x0000 (---------------) + I tomigusuku
+ 0x00217806, // n0x0eca c0x0000 (---------------) + I tonaki
+ 0x0028b9c6, // n0x0ecb c0x0000 (---------------) + I urasoe
+ 0x0029f645, // n0x0ecc c0x0000 (---------------) + I uruma
+ 0x0034b545, // n0x0ecd c0x0000 (---------------) + I yaese
+ 0x00344387, // n0x0ece c0x0000 (---------------) + I yomitan
+ 0x00365348, // n0x0ecf c0x0000 (---------------) + I yonabaru
+ 0x00382588, // n0x0ed0 c0x0000 (---------------) + I yonaguni
+ 0x002493c6, // n0x0ed1 c0x0000 (---------------) + I zamami
+ 0x002ad045, // n0x0ed2 c0x0000 (---------------) + I abeno
+ 0x0024fb4e, // n0x0ed3 c0x0000 (---------------) + I chihayaakasaka
+ 0x00347284, // n0x0ed4 c0x0000 (---------------) + I chuo
+ 0x0028d5c5, // n0x0ed5 c0x0000 (---------------) + I daito
+ 0x00270689, // n0x0ed6 c0x0000 (---------------) + I fujiidera
+ 0x0027dc88, // n0x0ed7 c0x0000 (---------------) + I habikino
+ 0x00282846, // n0x0ed8 c0x0000 (---------------) + I hannan
+ 0x0029040c, // n0x0ed9 c0x0000 (---------------) + I higashiosaka
+ 0x00291a50, // n0x0eda c0x0000 (---------------) + I higashisumiyoshi
+ 0x00293c0f, // n0x0edb c0x0000 (---------------) + I higashiyodogawa
+ 0x002954c8, // n0x0edc c0x0000 (---------------) + I hirakata
+ 0x00316ec7, // n0x0edd c0x0000 (---------------) + I ibaraki
+ 0x002056c5, // n0x0ede c0x0000 (---------------) + I ikeda
+ 0x002395c5, // n0x0edf c0x0000 (---------------) + I izumi
+ 0x0029b689, // n0x0ee0 c0x0000 (---------------) + I izumiotsu
+ 0x002877c9, // n0x0ee1 c0x0000 (---------------) + I izumisano
+ 0x0023d286, // n0x0ee2 c0x0000 (---------------) + I kadoma
+ 0x002f1dc7, // n0x0ee3 c0x0000 (---------------) + I kaizuka
+ 0x0037edc5, // n0x0ee4 c0x0000 (---------------) + I kanan
+ 0x00375e89, // n0x0ee5 c0x0000 (---------------) + I kashiwara
+ 0x00317c46, // n0x0ee6 c0x0000 (---------------) + I katano
+ 0x0036fccd, // n0x0ee7 c0x0000 (---------------) + I kawachinagano
+ 0x00278b89, // n0x0ee8 c0x0000 (---------------) + I kishiwada
+ 0x0020ec84, // n0x0ee9 c0x0000 (---------------) + I kita
+ 0x002a6108, // n0x0eea c0x0000 (---------------) + I kumatori
+ 0x0036fa89, // n0x0eeb c0x0000 (---------------) + I matsubara
+ 0x00327ec6, // n0x0eec c0x0000 (---------------) + I minato
+ 0x00270e05, // n0x0eed c0x0000 (---------------) + I minoh
+ 0x002d73c6, // n0x0eee c0x0000 (---------------) + I misaki
+ 0x0026e149, // n0x0eef c0x0000 (---------------) + I moriguchi
+ 0x00236308, // n0x0ef0 c0x0000 (---------------) + I neyagawa
+ 0x00215405, // n0x0ef1 c0x0000 (---------------) + I nishi
+ 0x00205384, // n0x0ef2 c0x0000 (---------------) + I nose
+ 0x002905cb, // n0x0ef3 c0x0000 (---------------) + I osakasayama
+ 0x00327d85, // n0x0ef4 c0x0000 (---------------) + I sakai
+ 0x0024ef06, // n0x0ef5 c0x0000 (---------------) + I sayama
+ 0x0027b086, // n0x0ef6 c0x0000 (---------------) + I sennan
+ 0x00290cc6, // n0x0ef7 c0x0000 (---------------) + I settsu
+ 0x0032b20b, // n0x0ef8 c0x0000 (---------------) + I shijonawate
+ 0x00288849, // n0x0ef9 c0x0000 (---------------) + I shimamoto
+ 0x0030a705, // n0x0efa c0x0000 (---------------) + I suita
+ 0x00346f47, // n0x0efb c0x0000 (---------------) + I tadaoka
+ 0x00384e06, // n0x0efc c0x0000 (---------------) + I taishi
+ 0x0027a486, // n0x0efd c0x0000 (---------------) + I tajiri
+ 0x00271788, // n0x0efe c0x0000 (---------------) + I takaishi
+ 0x003427c9, // n0x0eff c0x0000 (---------------) + I takatsuki
+ 0x0025830c, // n0x0f00 c0x0000 (---------------) + I tondabayashi
+ 0x00337208, // n0x0f01 c0x0000 (---------------) + I toyonaka
+ 0x0037a286, // n0x0f02 c0x0000 (---------------) + I toyono
+ 0x0031f2c3, // n0x0f03 c0x0000 (---------------) + I yao
+ 0x00288ec6, // n0x0f04 c0x0000 (---------------) + I ariake
+ 0x00306f05, // n0x0f05 c0x0000 (---------------) + I arita
+ 0x00276848, // n0x0f06 c0x0000 (---------------) + I fukudomi
+ 0x00229086, // n0x0f07 c0x0000 (---------------) + I genkai
+ 0x0036a608, // n0x0f08 c0x0000 (---------------) + I hamatama
+ 0x00216e05, // n0x0f09 c0x0000 (---------------) + I hizen
+ 0x00317285, // n0x0f0a c0x0000 (---------------) + I imari
+ 0x002ada08, // n0x0f0b c0x0000 (---------------) + I kamimine
+ 0x002df447, // n0x0f0c c0x0000 (---------------) + I kanzaki
+ 0x00330d87, // n0x0f0d c0x0000 (---------------) + I karatsu
+ 0x002b3547, // n0x0f0e c0x0000 (---------------) + I kashima
+ 0x00322cc8, // n0x0f0f c0x0000 (---------------) + I kitagata
+ 0x00271488, // n0x0f10 c0x0000 (---------------) + I kitahata
+ 0x0024c346, // n0x0f11 c0x0000 (---------------) + I kiyama
+ 0x00314d07, // n0x0f12 c0x0000 (---------------) + I kouhoku
+ 0x00269907, // n0x0f13 c0x0000 (---------------) + I kyuragi
+ 0x0032af0a, // n0x0f14 c0x0000 (---------------) + I nishiarita
+ 0x00234303, // n0x0f15 c0x0000 (---------------) + I ogi
+ 0x0025da06, // n0x0f16 c0x0000 (---------------) + I omachi
+ 0x00211d45, // n0x0f17 c0x0000 (---------------) + I ouchi
+ 0x002af744, // n0x0f18 c0x0000 (---------------) + I saga
+ 0x00272f89, // n0x0f19 c0x0000 (---------------) + I shiroishi
+ 0x00306fc4, // n0x0f1a c0x0000 (---------------) + I taku
+ 0x002e08c4, // n0x0f1b c0x0000 (---------------) + I tara
+ 0x002922c4, // n0x0f1c c0x0000 (---------------) + I tosu
+ 0x0029418b, // n0x0f1d c0x0000 (---------------) + I yoshinogari
+ 0x0036fc07, // n0x0f1e c0x0000 (---------------) + I arakawa
+ 0x0024fd85, // n0x0f1f c0x0000 (---------------) + I asaka
+ 0x0028a5c8, // n0x0f20 c0x0000 (---------------) + I chichibu
+ 0x00270d06, // n0x0f21 c0x0000 (---------------) + I fujimi
+ 0x00270d08, // n0x0f22 c0x0000 (---------------) + I fujimino
+ 0x00275906, // n0x0f23 c0x0000 (---------------) + I fukaya
+ 0x00282f85, // n0x0f24 c0x0000 (---------------) + I hanno
+ 0x00283845, // n0x0f25 c0x0000 (---------------) + I hanyu
+ 0x00286386, // n0x0f26 c0x0000 (---------------) + I hasuda
+ 0x00286a08, // n0x0f27 c0x0000 (---------------) + I hatogaya
+ 0x00287348, // n0x0f28 c0x0000 (---------------) + I hatoyama
+ 0x00273146, // n0x0f29 c0x0000 (---------------) + I hidaka
+ 0x0028a40f, // n0x0f2a c0x0000 (---------------) + I higashichichibu
+ 0x0028cf90, // n0x0f2b c0x0000 (---------------) + I higashimatsuyama
+ 0x00206445, // n0x0f2c c0x0000 (---------------) + I honjo
+ 0x00208983, // n0x0f2d c0x0000 (---------------) + I ina
+ 0x00283b45, // n0x0f2e c0x0000 (---------------) + I iruma
+ 0x00352cc8, // n0x0f2f c0x0000 (---------------) + I iwatsuki
+ 0x002876c9, // n0x0f30 c0x0000 (---------------) + I kamiizumi
+ 0x00334ec8, // n0x0f31 c0x0000 (---------------) + I kamikawa
+ 0x002f43c8, // n0x0f32 c0x0000 (---------------) + I kamisato
+ 0x00200488, // n0x0f33 c0x0000 (---------------) + I kasukabe
+ 0x0024fe47, // n0x0f34 c0x0000 (---------------) + I kawagoe
+ 0x002709c9, // n0x0f35 c0x0000 (---------------) + I kawaguchi
+ 0x0036a808, // n0x0f36 c0x0000 (---------------) + I kawajima
+ 0x002f7044, // n0x0f37 c0x0000 (---------------) + I kazo
+ 0x00292148, // n0x0f38 c0x0000 (---------------) + I kitamoto
+ 0x0025c4c9, // n0x0f39 c0x0000 (---------------) + I koshigaya
+ 0x00337647, // n0x0f3a c0x0000 (---------------) + I kounosu
+ 0x002a9104, // n0x0f3b c0x0000 (---------------) + I kuki
+ 0x0026f5c8, // n0x0f3c c0x0000 (---------------) + I kumagaya
+ 0x00286dca, // n0x0f3d c0x0000 (---------------) + I matsubushi
+ 0x002c7006, // n0x0f3e c0x0000 (---------------) + I minano
+ 0x002467c6, // n0x0f3f c0x0000 (---------------) + I misato
+ 0x0021c149, // n0x0f40 c0x0000 (---------------) + I miyashiro
+ 0x00291c87, // n0x0f41 c0x0000 (---------------) + I miyoshi
+ 0x002bad48, // n0x0f42 c0x0000 (---------------) + I moroyama
+ 0x002419c8, // n0x0f43 c0x0000 (---------------) + I nagatoro
+ 0x002c37c8, // n0x0f44 c0x0000 (---------------) + I namegawa
+ 0x0020c9c5, // n0x0f45 c0x0000 (---------------) + I niiza
+ 0x002fcb45, // n0x0f46 c0x0000 (---------------) + I ogano
+ 0x00228905, // n0x0f47 c0x0000 (---------------) + I ogawa
+ 0x002719c5, // n0x0f48 c0x0000 (---------------) + I ogose
+ 0x002b0047, // n0x0f49 c0x0000 (---------------) + I okegawa
+ 0x00210505, // n0x0f4a c0x0000 (---------------) + I omiya
+ 0x002ac405, // n0x0f4b c0x0000 (---------------) + I otaki
+ 0x0037e886, // n0x0f4c c0x0000 (---------------) + I ranzan
+ 0x00334e07, // n0x0f4d c0x0000 (---------------) + I ryokami
+ 0x0030c587, // n0x0f4e c0x0000 (---------------) + I saitama
+ 0x002870c6, // n0x0f4f c0x0000 (---------------) + I sakado
+ 0x002c09c5, // n0x0f50 c0x0000 (---------------) + I satte
+ 0x0024ef06, // n0x0f51 c0x0000 (---------------) + I sayama
+ 0x00299b05, // n0x0f52 c0x0000 (---------------) + I shiki
+ 0x002d9588, // n0x0f53 c0x0000 (---------------) + I shiraoka
+ 0x002e53c4, // n0x0f54 c0x0000 (---------------) + I soka
+ 0x002b3146, // n0x0f55 c0x0000 (---------------) + I sugito
+ 0x003501c4, // n0x0f56 c0x0000 (---------------) + I toda
+ 0x00221008, // n0x0f57 c0x0000 (---------------) + I tokigawa
+ 0x0035dc4a, // n0x0f58 c0x0000 (---------------) + I tokorozawa
+ 0x0028194c, // n0x0f59 c0x0000 (---------------) + I tsurugashima
+ 0x00201045, // n0x0f5a c0x0000 (---------------) + I urawa
+ 0x003055c6, // n0x0f5b c0x0000 (---------------) + I warabi
+ 0x002584c6, // n0x0f5c c0x0000 (---------------) + I yashio
+ 0x002db446, // n0x0f5d c0x0000 (---------------) + I yokoze
+ 0x00352ec4, // n0x0f5e c0x0000 (---------------) + I yono
+ 0x00382905, // n0x0f5f c0x0000 (---------------) + I yorii
+ 0x00275747, // n0x0f60 c0x0000 (---------------) + I yoshida
+ 0x00291d09, // n0x0f61 c0x0000 (---------------) + I yoshikawa
+ 0x00298487, // n0x0f62 c0x0000 (---------------) + I yoshimi
+ 0x007242c4, // n0x0f63 c0x0001 (---------------) ! I city
+ 0x007242c4, // n0x0f64 c0x0001 (---------------) ! I city
+ 0x002ab985, // n0x0f65 c0x0000 (---------------) + I aisho
+ 0x002b5784, // n0x0f66 c0x0000 (---------------) + I gamo
+ 0x0028fb8a, // n0x0f67 c0x0000 (---------------) + I higashiomi
+ 0x00270b86, // n0x0f68 c0x0000 (---------------) + I hikone
+ 0x002f4344, // n0x0f69 c0x0000 (---------------) + I koka
+ 0x002ca805, // n0x0f6a c0x0000 (---------------) + I konan
+ 0x0033ab85, // n0x0f6b c0x0000 (---------------) + I kosei
+ 0x002fdb84, // n0x0f6c c0x0000 (---------------) + I koto
+ 0x0027acc7, // n0x0f6d c0x0000 (---------------) + I kusatsu
+ 0x002d0bc7, // n0x0f6e c0x0000 (---------------) + I maibara
+ 0x002ba388, // n0x0f6f c0x0000 (---------------) + I moriyama
+ 0x002b0a48, // n0x0f70 c0x0000 (---------------) + I nagahama
+ 0x00215409, // n0x0f71 c0x0000 (---------------) + I nishiazai
+ 0x00317d48, // n0x0f72 c0x0000 (---------------) + I notogawa
+ 0x0028fd4b, // n0x0f73 c0x0000 (---------------) + I omihachiman
+ 0x0024b684, // n0x0f74 c0x0000 (---------------) + I otsu
+ 0x0026b2c5, // n0x0f75 c0x0000 (---------------) + I ritto
+ 0x00265845, // n0x0f76 c0x0000 (---------------) + I ryuoh
+ 0x002b34c9, // n0x0f77 c0x0000 (---------------) + I takashima
+ 0x003427c9, // n0x0f78 c0x0000 (---------------) + I takatsuki
+ 0x002d4408, // n0x0f79 c0x0000 (---------------) + I torahime
+ 0x00243d88, // n0x0f7a c0x0000 (---------------) + I toyosato
+ 0x00212384, // n0x0f7b c0x0000 (---------------) + I yasu
+ 0x00292485, // n0x0f7c c0x0000 (---------------) + I akagi
+ 0x00203583, // n0x0f7d c0x0000 (---------------) + I ama
+ 0x00322a05, // n0x0f7e c0x0000 (---------------) + I gotsu
+ 0x00298646, // n0x0f7f c0x0000 (---------------) + I hamada
+ 0x0028ad4c, // n0x0f80 c0x0000 (---------------) + I higashiizumo
+ 0x0021a306, // n0x0f81 c0x0000 (---------------) + I hikawa
+ 0x002d2006, // n0x0f82 c0x0000 (---------------) + I hikimi
+ 0x00282ac5, // n0x0f83 c0x0000 (---------------) + I izumo
+ 0x00302448, // n0x0f84 c0x0000 (---------------) + I kakinoki
+ 0x002a6506, // n0x0f85 c0x0000 (---------------) + I masuda
+ 0x002cb8c6, // n0x0f86 c0x0000 (---------------) + I matsue
+ 0x002467c6, // n0x0f87 c0x0000 (---------------) + I misato
+ 0x0021ef8c, // n0x0f88 c0x0000 (---------------) + I nishinoshima
+ 0x00203dc4, // n0x0f89 c0x0000 (---------------) + I ohda
+ 0x003451ca, // n0x0f8a c0x0000 (---------------) + I okinoshima
+ 0x00282a08, // n0x0f8b c0x0000 (---------------) + I okuizumo
+ 0x0028ab87, // n0x0f8c c0x0000 (---------------) + I shimane
+ 0x00373d86, // n0x0f8d c0x0000 (---------------) + I tamayu
+ 0x00380087, // n0x0f8e c0x0000 (---------------) + I tsuwano
+ 0x002ce685, // n0x0f8f c0x0000 (---------------) + I unnan
+ 0x002fb786, // n0x0f90 c0x0000 (---------------) + I yakumo
+ 0x0032c646, // n0x0f91 c0x0000 (---------------) + I yasugi
+ 0x00342fc7, // n0x0f92 c0x0000 (---------------) + I yatsuka
+ 0x002a0c44, // n0x0f93 c0x0000 (---------------) + I arai
+ 0x002fc105, // n0x0f94 c0x0000 (---------------) + I atami
+ 0x00270684, // n0x0f95 c0x0000 (---------------) + I fuji
+ 0x002cb247, // n0x0f96 c0x0000 (---------------) + I fujieda
+ 0x002708c8, // n0x0f97 c0x0000 (---------------) + I fujikawa
+ 0x00271b4a, // n0x0f98 c0x0000 (---------------) + I fujinomiya
+ 0x00278887, // n0x0f99 c0x0000 (---------------) + I fukuroi
+ 0x002aae47, // n0x0f9a c0x0000 (---------------) + I gotemba
+ 0x00316e47, // n0x0f9b c0x0000 (---------------) + I haibara
+ 0x00345cc9, // n0x0f9c c0x0000 (---------------) + I hamamatsu
+ 0x0028ad4a, // n0x0f9d c0x0000 (---------------) + I higashiizu
+ 0x002234c3, // n0x0f9e c0x0000 (---------------) + I ito
+ 0x003429c5, // n0x0f9f c0x0000 (---------------) + I iwata
+ 0x00217d83, // n0x0fa0 c0x0000 (---------------) + I izu
+ 0x00315009, // n0x0fa1 c0x0000 (---------------) + I izunokuni
+ 0x00205cc8, // n0x0fa2 c0x0000 (---------------) + I kakegawa
+ 0x002eaa87, // n0x0fa3 c0x0000 (---------------) + I kannami
+ 0x00334fc9, // n0x0fa4 c0x0000 (---------------) + I kawanehon
+ 0x0021a386, // n0x0fa5 c0x0000 (---------------) + I kawazu
+ 0x00276208, // n0x0fa6 c0x0000 (---------------) + I kikugawa
+ 0x002ddbc5, // n0x0fa7 c0x0000 (---------------) + I kosai
+ 0x0026af0a, // n0x0fa8 c0x0000 (---------------) + I makinohara
+ 0x0021f209, // n0x0fa9 c0x0000 (---------------) + I matsuzaki
+ 0x00257fc9, // n0x0faa c0x0000 (---------------) + I minamiizu
+ 0x002b20c7, // n0x0fab c0x0000 (---------------) + I mishima
+ 0x00356889, // n0x0fac c0x0000 (---------------) + I morimachi
+ 0x00217c48, // n0x0fad c0x0000 (---------------) + I nishiizu
+ 0x002df146, // n0x0fae c0x0000 (---------------) + I numazu
+ 0x00305788, // n0x0faf c0x0000 (---------------) + I omaezaki
+ 0x003701c7, // n0x0fb0 c0x0000 (---------------) + I shimada
+ 0x00223607, // n0x0fb1 c0x0000 (---------------) + I shimizu
+ 0x00294e87, // n0x0fb2 c0x0000 (---------------) + I shimoda
+ 0x002f07c8, // n0x0fb3 c0x0000 (---------------) + I shizuoka
+ 0x002dee46, // n0x0fb4 c0x0000 (---------------) + I susono
+ 0x00286b85, // n0x0fb5 c0x0000 (---------------) + I yaizu
+ 0x00275747, // n0x0fb6 c0x0000 (---------------) + I yoshida
+ 0x0028b4c8, // n0x0fb7 c0x0000 (---------------) + I ashikaga
+ 0x0034d404, // n0x0fb8 c0x0000 (---------------) + I bato
+ 0x002b5704, // n0x0fb9 c0x0000 (---------------) + I haga
+ 0x002d6707, // n0x0fba c0x0000 (---------------) + I ichikai
+ 0x00261fc7, // n0x0fbb c0x0000 (---------------) + I iwafune
+ 0x0023020a, // n0x0fbc c0x0000 (---------------) + I kaminokawa
+ 0x002df0c6, // n0x0fbd c0x0000 (---------------) + I kanuma
+ 0x0029cfca, // n0x0fbe c0x0000 (---------------) + I karasuyama
+ 0x002ab147, // n0x0fbf c0x0000 (---------------) + I kuroiso
+ 0x00348e07, // n0x0fc0 c0x0000 (---------------) + I mashiko
+ 0x0033e744, // n0x0fc1 c0x0000 (---------------) + I mibu
+ 0x002d5404, // n0x0fc2 c0x0000 (---------------) + I moka
+ 0x00224446, // n0x0fc3 c0x0000 (---------------) + I motegi
+ 0x0036b984, // n0x0fc4 c0x0000 (---------------) + I nasu
+ 0x0036b98c, // n0x0fc5 c0x0000 (---------------) + I nasushiobara
+ 0x0020ce85, // n0x0fc6 c0x0000 (---------------) + I nikko
+ 0x00218e09, // n0x0fc7 c0x0000 (---------------) + I nishikata
+ 0x0027f4c4, // n0x0fc8 c0x0000 (---------------) + I nogi
+ 0x002fdc45, // n0x0fc9 c0x0000 (---------------) + I ohira
+ 0x00268a08, // n0x0fca c0x0000 (---------------) + I ohtawara
+ 0x00287405, // n0x0fcb c0x0000 (---------------) + I oyama
+ 0x0020e0c6, // n0x0fcc c0x0000 (---------------) + I sakura
+ 0x00287904, // n0x0fcd c0x0000 (---------------) + I sano
+ 0x002f344a, // n0x0fce c0x0000 (---------------) + I shimotsuke
+ 0x002cee86, // n0x0fcf c0x0000 (---------------) + I shioya
+ 0x002917ca, // n0x0fd0 c0x0000 (---------------) + I takanezawa
+ 0x0034d487, // n0x0fd1 c0x0000 (---------------) + I tochigi
+ 0x00201a85, // n0x0fd2 c0x0000 (---------------) + I tsuga
+ 0x0021b785, // n0x0fd3 c0x0000 (---------------) + I ujiie
+ 0x0024d60a, // n0x0fd4 c0x0000 (---------------) + I utsunomiya
+ 0x00254c05, // n0x0fd5 c0x0000 (---------------) + I yaita
+ 0x00294806, // n0x0fd6 c0x0000 (---------------) + I aizumi
+ 0x00274b04, // n0x0fd7 c0x0000 (---------------) + I anan
+ 0x002a6946, // n0x0fd8 c0x0000 (---------------) + I ichiba
+ 0x00344445, // n0x0fd9 c0x0000 (---------------) + I itano
+ 0x00229146, // n0x0fda c0x0000 (---------------) + I kainan
+ 0x00307e4c, // n0x0fdb c0x0000 (---------------) + I komatsushima
+ 0x002c1e8a, // n0x0fdc c0x0000 (---------------) + I matsushige
+ 0x00267ec4, // n0x0fdd c0x0000 (---------------) + I mima
+ 0x00216c06, // n0x0fde c0x0000 (---------------) + I minami
+ 0x00291c87, // n0x0fdf c0x0000 (---------------) + I miyoshi
+ 0x002be3c4, // n0x0fe0 c0x0000 (---------------) + I mugi
+ 0x00276cc8, // n0x0fe1 c0x0000 (---------------) + I nakagawa
+ 0x0035db46, // n0x0fe2 c0x0000 (---------------) + I naruto
+ 0x0024f9c9, // n0x0fe3 c0x0000 (---------------) + I sanagochi
+ 0x002e45c9, // n0x0fe4 c0x0000 (---------------) + I shishikui
+ 0x002c69c9, // n0x0fe5 c0x0000 (---------------) + I tokushima
+ 0x00223a06, // n0x0fe6 c0x0000 (---------------) + I wajiki
+ 0x003702c6, // n0x0fe7 c0x0000 (---------------) + I adachi
+ 0x003058c7, // n0x0fe8 c0x0000 (---------------) + I akiruno
+ 0x003781c8, // n0x0fe9 c0x0000 (---------------) + I akishima
+ 0x003700c9, // n0x0fea c0x0000 (---------------) + I aogashima
+ 0x0036fc07, // n0x0feb c0x0000 (---------------) + I arakawa
+ 0x00288a86, // n0x0fec c0x0000 (---------------) + I bunkyo
+ 0x00202ac7, // n0x0fed c0x0000 (---------------) + I chiyoda
+ 0x002a1d45, // n0x0fee c0x0000 (---------------) + I chofu
+ 0x00347284, // n0x0fef c0x0000 (---------------) + I chuo
+ 0x00305487, // n0x0ff0 c0x0000 (---------------) + I edogawa
+ 0x00205ac5, // n0x0ff1 c0x0000 (---------------) + I fuchu
+ 0x00280485, // n0x0ff2 c0x0000 (---------------) + I fussa
+ 0x00381e07, // n0x0ff3 c0x0000 (---------------) + I hachijo
+ 0x00254a08, // n0x0ff4 c0x0000 (---------------) + I hachioji
+ 0x00356246, // n0x0ff5 c0x0000 (---------------) + I hamura
+ 0x0028c2cd, // n0x0ff6 c0x0000 (---------------) + I higashikurume
+ 0x0028d84f, // n0x0ff7 c0x0000 (---------------) + I higashimurayama
+ 0x0029344d, // n0x0ff8 c0x0000 (---------------) + I higashiyamato
+ 0x00205304, // n0x0ff9 c0x0000 (---------------) + I hino
+ 0x00238dc6, // n0x0ffa c0x0000 (---------------) + I hinode
+ 0x002c2248, // n0x0ffb c0x0000 (---------------) + I hinohara
+ 0x00383b85, // n0x0ffc c0x0000 (---------------) + I inagi
+ 0x0032b0c8, // n0x0ffd c0x0000 (---------------) + I itabashi
+ 0x0021c90a, // n0x0ffe c0x0000 (---------------) + I katsushika
+ 0x0020ec84, // n0x0fff c0x0000 (---------------) + I kita
+ 0x002e6e86, // n0x1000 c0x0000 (---------------) + I kiyose
+ 0x00248a87, // n0x1001 c0x0000 (---------------) + I kodaira
+ 0x002d4f07, // n0x1002 c0x0000 (---------------) + I koganei
+ 0x00363f49, // n0x1003 c0x0000 (---------------) + I kokubunji
+ 0x00305745, // n0x1004 c0x0000 (---------------) + I komae
+ 0x002fdb84, // n0x1005 c0x0000 (---------------) + I koto
+ 0x0035aeca, // n0x1006 c0x0000 (---------------) + I kouzushima
+ 0x002a8489, // n0x1007 c0x0000 (---------------) + I kunitachi
+ 0x00356987, // n0x1008 c0x0000 (---------------) + I machida
+ 0x002e4a86, // n0x1009 c0x0000 (---------------) + I meguro
+ 0x00327ec6, // n0x100a c0x0000 (---------------) + I minato
+ 0x002923c6, // n0x100b c0x0000 (---------------) + I mitaka
+ 0x0033b7c6, // n0x100c c0x0000 (---------------) + I mizuho
+ 0x002c1b4f, // n0x100d c0x0000 (---------------) + I musashimurayama
+ 0x002c2109, // n0x100e c0x0000 (---------------) + I musashino
+ 0x0026ac06, // n0x100f c0x0000 (---------------) + I nakano
+ 0x0033f046, // n0x1010 c0x0000 (---------------) + I nerima
+ 0x00367549, // n0x1011 c0x0000 (---------------) + I ogasawara
+ 0x00314e07, // n0x1012 c0x0000 (---------------) + I okutama
+ 0x0020de03, // n0x1013 c0x0000 (---------------) + I ome
+ 0x0021f106, // n0x1014 c0x0000 (---------------) + I oshima
+ 0x00211083, // n0x1015 c0x0000 (---------------) + I ota
+ 0x002d1b48, // n0x1016 c0x0000 (---------------) + I setagaya
+ 0x002e66c7, // n0x1017 c0x0000 (---------------) + I shibuya
+ 0x002956c9, // n0x1018 c0x0000 (---------------) + I shinagawa
+ 0x002b5d48, // n0x1019 c0x0000 (---------------) + I shinjuku
+ 0x00330ec8, // n0x101a c0x0000 (---------------) + I suginami
+ 0x002631c6, // n0x101b c0x0000 (---------------) + I sumida
+ 0x0030a7c9, // n0x101c c0x0000 (---------------) + I tachikawa
+ 0x00234205, // n0x101d c0x0000 (---------------) + I taito
+ 0x002a1984, // n0x101e c0x0000 (---------------) + I tama
+ 0x00243f07, // n0x101f c0x0000 (---------------) + I toshima
+ 0x00265685, // n0x1020 c0x0000 (---------------) + I chizu
+ 0x00205304, // n0x1021 c0x0000 (---------------) + I hino
+ 0x002800c8, // n0x1022 c0x0000 (---------------) + I kawahara
+ 0x00217b44, // n0x1023 c0x0000 (---------------) + I koge
+ 0x002fe347, // n0x1024 c0x0000 (---------------) + I kotoura
+ 0x0030d886, // n0x1025 c0x0000 (---------------) + I misasa
+ 0x002bd905, // n0x1026 c0x0000 (---------------) + I nanbu
+ 0x002aef08, // n0x1027 c0x0000 (---------------) + I nichinan
+ 0x00327d8b, // n0x1028 c0x0000 (---------------) + I sakaiminato
+ 0x002f11c7, // n0x1029 c0x0000 (---------------) + I tottori
+ 0x0024d886, // n0x102a c0x0000 (---------------) + I wakasa
+ 0x002b4684, // n0x102b c0x0000 (---------------) + I yazu
+ 0x0037bec6, // n0x102c c0x0000 (---------------) + I yonago
+ 0x002b1e85, // n0x102d c0x0000 (---------------) + I asahi
+ 0x00205ac5, // n0x102e c0x0000 (---------------) + I fuchu
+ 0x002777c9, // n0x102f c0x0000 (---------------) + I fukumitsu
+ 0x0027a8c9, // n0x1030 c0x0000 (---------------) + I funahashi
+ 0x00223644, // n0x1031 c0x0000 (---------------) + I himi
+ 0x00223685, // n0x1032 c0x0000 (---------------) + I imizu
+ 0x00216c45, // n0x1033 c0x0000 (---------------) + I inami
+ 0x0026ad86, // n0x1034 c0x0000 (---------------) + I johana
+ 0x002d6608, // n0x1035 c0x0000 (---------------) + I kamiichi
+ 0x002aa746, // n0x1036 c0x0000 (---------------) + I kurobe
+ 0x0020228b, // n0x1037 c0x0000 (---------------) + I nakaniikawa
+ 0x0026794a, // n0x1038 c0x0000 (---------------) + I namerikawa
+ 0x002f2f05, // n0x1039 c0x0000 (---------------) + I nanto
+ 0x002838c6, // n0x103a c0x0000 (---------------) + I nyuzen
+ 0x002acfc5, // n0x103b c0x0000 (---------------) + I oyabe
+ 0x002a2245, // n0x103c c0x0000 (---------------) + I taira
+ 0x002a24c7, // n0x103d c0x0000 (---------------) + I takaoka
+ 0x002128c8, // n0x103e c0x0000 (---------------) + I tateyama
+ 0x00273904, // n0x103f c0x0000 (---------------) + I toga
+ 0x0029dc46, // n0x1040 c0x0000 (---------------) + I tonami
+ 0x002873c6, // n0x1041 c0x0000 (---------------) + I toyama
+ 0x00217e07, // n0x1042 c0x0000 (---------------) + I unazuki
+ 0x00347304, // n0x1043 c0x0000 (---------------) + I uozu
+ 0x002766c6, // n0x1044 c0x0000 (---------------) + I yamada
+ 0x0036e185, // n0x1045 c0x0000 (---------------) + I arida
+ 0x0036e189, // n0x1046 c0x0000 (---------------) + I aridagawa
+ 0x003704c4, // n0x1047 c0x0000 (---------------) + I gobo
+ 0x002bc709, // n0x1048 c0x0000 (---------------) + I hashimoto
+ 0x00273146, // n0x1049 c0x0000 (---------------) + I hidaka
+ 0x002ae588, // n0x104a c0x0000 (---------------) + I hirogawa
+ 0x00216c45, // n0x104b c0x0000 (---------------) + I inami
+ 0x00231a85, // n0x104c c0x0000 (---------------) + I iwade
+ 0x00229146, // n0x104d c0x0000 (---------------) + I kainan
+ 0x00258209, // n0x104e c0x0000 (---------------) + I kamitonda
+ 0x00219949, // n0x104f c0x0000 (---------------) + I katsuragi
+ 0x002d2086, // n0x1050 c0x0000 (---------------) + I kimino
+ 0x0027dd88, // n0x1051 c0x0000 (---------------) + I kinokawa
+ 0x002a2708, // n0x1052 c0x0000 (---------------) + I kitayama
+ 0x002acf84, // n0x1053 c0x0000 (---------------) + I koya
+ 0x002a3104, // n0x1054 c0x0000 (---------------) + I koza
+ 0x002a3108, // n0x1055 c0x0000 (---------------) + I kozagawa
+ 0x003091c8, // n0x1056 c0x0000 (---------------) + I kudoyama
+ 0x00273a09, // n0x1057 c0x0000 (---------------) + I kushimoto
+ 0x002985c6, // n0x1058 c0x0000 (---------------) + I mihama
+ 0x002467c6, // n0x1059 c0x0000 (---------------) + I misato
+ 0x003048cd, // n0x105a c0x0000 (---------------) + I nachikatsuura
+ 0x00227206, // n0x105b c0x0000 (---------------) + I shingu
+ 0x002d0149, // n0x105c c0x0000 (---------------) + I shirahama
+ 0x0036d285, // n0x105d c0x0000 (---------------) + I taiji
+ 0x002110c6, // n0x105e c0x0000 (---------------) + I tanabe
+ 0x0030a988, // n0x105f c0x0000 (---------------) + I wakayama
+ 0x00302305, // n0x1060 c0x0000 (---------------) + I yuasa
+ 0x00269944, // n0x1061 c0x0000 (---------------) + I yura
+ 0x002b1e85, // n0x1062 c0x0000 (---------------) + I asahi
+ 0x0027a308, // n0x1063 c0x0000 (---------------) + I funagata
+ 0x0028f949, // n0x1064 c0x0000 (---------------) + I higashine
+ 0x00270744, // n0x1065 c0x0000 (---------------) + I iide
+ 0x00273786, // n0x1066 c0x0000 (---------------) + I kahoku
+ 0x003633ca, // n0x1067 c0x0000 (---------------) + I kaminoyama
+ 0x0021a508, // n0x1068 c0x0000 (---------------) + I kaneyama
+ 0x00230389, // n0x1069 c0x0000 (---------------) + I kawanishi
+ 0x003605ca, // n0x106a c0x0000 (---------------) + I mamurogawa
+ 0x00334f46, // n0x106b c0x0000 (---------------) + I mikawa
+ 0x0028da08, // n0x106c c0x0000 (---------------) + I murayama
+ 0x002fab85, // n0x106d c0x0000 (---------------) + I nagai
+ 0x00203448, // n0x106e c0x0000 (---------------) + I nakayama
+ 0x002a6785, // n0x106f c0x0000 (---------------) + I nanyo
+ 0x0021a249, // n0x1070 c0x0000 (---------------) + I nishikawa
+ 0x0033cd89, // n0x1071 c0x0000 (---------------) + I obanazawa
+ 0x00202e42, // n0x1072 c0x0000 (---------------) + I oe
+ 0x002ba1c5, // n0x1073 c0x0000 (---------------) + I oguni
+ 0x00265906, // n0x1074 c0x0000 (---------------) + I ohkura
+ 0x00273087, // n0x1075 c0x0000 (---------------) + I oishida
+ 0x0034c905, // n0x1076 c0x0000 (---------------) + I sagae
+ 0x003426c6, // n0x1077 c0x0000 (---------------) + I sakata
+ 0x0034a308, // n0x1078 c0x0000 (---------------) + I sakegawa
+ 0x002b9446, // n0x1079 c0x0000 (---------------) + I shinjo
+ 0x002dd309, // n0x107a c0x0000 (---------------) + I shirataka
+ 0x00272546, // n0x107b c0x0000 (---------------) + I shonai
+ 0x00271608, // n0x107c c0x0000 (---------------) + I takahata
+ 0x0029d3c5, // n0x107d c0x0000 (---------------) + I tendo
+ 0x00257a46, // n0x107e c0x0000 (---------------) + I tozawa
+ 0x00335288, // n0x107f c0x0000 (---------------) + I tsuruoka
+ 0x002797c8, // n0x1080 c0x0000 (---------------) + I yamagata
+ 0x003694c8, // n0x1081 c0x0000 (---------------) + I yamanobe
+ 0x00324648, // n0x1082 c0x0000 (---------------) + I yonezawa
+ 0x0021ea84, // n0x1083 c0x0000 (---------------) + I yuza
+ 0x00229583, // n0x1084 c0x0000 (---------------) + I abu
+ 0x002dd544, // n0x1085 c0x0000 (---------------) + I hagi
+ 0x002b4c86, // n0x1086 c0x0000 (---------------) + I hikari
+ 0x002a1d84, // n0x1087 c0x0000 (---------------) + I hofu
+ 0x002df5c7, // n0x1088 c0x0000 (---------------) + I iwakuni
+ 0x002cb7c9, // n0x1089 c0x0000 (---------------) + I kudamatsu
+ 0x002b3c45, // n0x108a c0x0000 (---------------) + I mitou
+ 0x002419c6, // n0x108b c0x0000 (---------------) + I nagato
+ 0x0021f106, // n0x108c c0x0000 (---------------) + I oshima
+ 0x002a2c8b, // n0x108d c0x0000 (---------------) + I shimonoseki
+ 0x002f2e46, // n0x108e c0x0000 (---------------) + I shunan
+ 0x003094c6, // n0x108f c0x0000 (---------------) + I tabuse
+ 0x00261448, // n0x1090 c0x0000 (---------------) + I tokuyama
+ 0x00244606, // n0x1091 c0x0000 (---------------) + I toyota
+ 0x0025dc03, // n0x1092 c0x0000 (---------------) + I ube
+ 0x00216b03, // n0x1093 c0x0000 (---------------) + I yuu
+ 0x00347284, // n0x1094 c0x0000 (---------------) + I chuo
+ 0x002352c5, // n0x1095 c0x0000 (---------------) + I doshi
+ 0x00306107, // n0x1096 c0x0000 (---------------) + I fuefuki
+ 0x002708c8, // n0x1097 c0x0000 (---------------) + I fujikawa
+ 0x002708cf, // n0x1098 c0x0000 (---------------) + I fujikawaguchiko
+ 0x0027564b, // n0x1099 c0x0000 (---------------) + I fujiyoshida
+ 0x002d6408, // n0x109a c0x0000 (---------------) + I hayakawa
+ 0x00273806, // n0x109b c0x0000 (---------------) + I hokuto
+ 0x0034fece, // n0x109c c0x0000 (---------------) + I ichikawamisato
+ 0x0020d603, // n0x109d c0x0000 (---------------) + I kai
+ 0x00306084, // n0x109e c0x0000 (---------------) + I kofu
+ 0x002f2dc5, // n0x109f c0x0000 (---------------) + I koshu
+ 0x002f73c6, // n0x10a0 c0x0000 (---------------) + I kosuge
+ 0x00284fcb, // n0x10a1 c0x0000 (---------------) + I minami-alps
+ 0x00289146, // n0x10a2 c0x0000 (---------------) + I minobu
+ 0x00224fc9, // n0x10a3 c0x0000 (---------------) + I nakamichi
+ 0x002bd905, // n0x10a4 c0x0000 (---------------) + I nanbu
+ 0x00357548, // n0x10a5 c0x0000 (---------------) + I narusawa
+ 0x00211988, // n0x10a6 c0x0000 (---------------) + I nirasaki
+ 0x0021980c, // n0x10a7 c0x0000 (---------------) + I nishikatsura
+ 0x002941c6, // n0x10a8 c0x0000 (---------------) + I oshino
+ 0x00322a46, // n0x10a9 c0x0000 (---------------) + I otsuki
+ 0x002f5745, // n0x10aa c0x0000 (---------------) + I showa
+ 0x002808c8, // n0x10ab c0x0000 (---------------) + I tabayama
+ 0x00202ec5, // n0x10ac c0x0000 (---------------) + I tsuru
+ 0x0020e3c8, // n0x10ad c0x0000 (---------------) + I uenohara
+ 0x0029388a, // n0x10ae c0x0000 (---------------) + I yamanakako
+ 0x00379ac9, // n0x10af c0x0000 (---------------) + I yamanashi
+ 0x007242c4, // n0x10b0 c0x0001 (---------------) ! I city
+ 0x00232dc3, // n0x10b1 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x10b2 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x10b3 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x10b4 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x10b5 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x10b6 c0x0000 (---------------) + I org
+ 0x00202183, // n0x10b7 c0x0000 (---------------) + I biz
+ 0x00232dc3, // n0x10b8 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x10b9 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x10ba c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x10bb c0x0000 (---------------) + I info
+ 0x00218643, // n0x10bc c0x0000 (---------------) + I net
+ 0x0024d043, // n0x10bd c0x0000 (---------------) + I org
+ 0x00203a03, // n0x10be c0x0000 (---------------) + I ass
+ 0x00278344, // n0x10bf c0x0000 (---------------) + I asso
+ 0x00232dc3, // n0x10c0 c0x0000 (---------------) + I com
+ 0x0023a884, // n0x10c1 c0x0000 (---------------) + I coop
+ 0x0021e083, // n0x10c2 c0x0000 (---------------) + I edu
+ 0x00252544, // n0x10c3 c0x0000 (---------------) + I gouv
+ 0x00209ac3, // n0x10c4 c0x0000 (---------------) + I gov
+ 0x002e1b47, // n0x10c5 c0x0000 (---------------) + I medecin
+ 0x00240443, // n0x10c6 c0x0000 (---------------) + I mil
+ 0x002104c3, // n0x10c7 c0x0000 (---------------) + I nom
+ 0x00283208, // n0x10c8 c0x0000 (---------------) + I notaires
+ 0x0024d043, // n0x10c9 c0x0000 (---------------) + I org
+ 0x002c55cb, // n0x10ca c0x0000 (---------------) + I pharmaciens
+ 0x002cf303, // n0x10cb c0x0000 (---------------) + I prd
+ 0x0022ad46, // n0x10cc c0x0000 (---------------) + I presse
+ 0x002032c2, // n0x10cd c0x0000 (---------------) + I tm
+ 0x002ff6cb, // n0x10ce c0x0000 (---------------) + I veterinaire
+ 0x0021e083, // n0x10cf c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x10d0 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x10d1 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x10d2 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x10d3 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x10d4 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x10d5 c0x0000 (---------------) + I gov
+ 0x0024d043, // n0x10d6 c0x0000 (---------------) + I org
+ 0x00222883, // n0x10d7 c0x0000 (---------------) + I rep
+ 0x00208103, // n0x10d8 c0x0000 (---------------) + I tra
+ 0x00200b82, // n0x10d9 c0x0000 (---------------) + I ac
+ 0x0009e448, // n0x10da c0x0000 (---------------) + blogspot
+ 0x00232845, // n0x10db c0x0000 (---------------) + I busan
+ 0x002f6e88, // n0x10dc c0x0000 (---------------) + I chungbuk
+ 0x002f8348, // n0x10dd c0x0000 (---------------) + I chungnam
+ 0x00200882, // n0x10de c0x0000 (---------------) + I co
+ 0x00345f05, // n0x10df c0x0000 (---------------) + I daegu
+ 0x002fd947, // n0x10e0 c0x0000 (---------------) + I daejeon
+ 0x00201e42, // n0x10e1 c0x0000 (---------------) + I es
+ 0x00225207, // n0x10e2 c0x0000 (---------------) + I gangwon
+ 0x00209ac2, // n0x10e3 c0x0000 (---------------) + I go
+ 0x00257d87, // n0x10e4 c0x0000 (---------------) + I gwangju
+ 0x00307c49, // n0x10e5 c0x0000 (---------------) + I gyeongbuk
+ 0x002ecb08, // n0x10e6 c0x0000 (---------------) + I gyeonggi
+ 0x002c3649, // n0x10e7 c0x0000 (---------------) + I gyeongnam
+ 0x00209702, // n0x10e8 c0x0000 (---------------) + I hs
+ 0x002ae307, // n0x10e9 c0x0000 (---------------) + I incheon
+ 0x002d1e04, // n0x10ea c0x0000 (---------------) + I jeju
+ 0x002fda07, // n0x10eb c0x0000 (---------------) + I jeonbuk
+ 0x00267847, // n0x10ec c0x0000 (---------------) + I jeonnam
+ 0x003797c2, // n0x10ed c0x0000 (---------------) + I kg
+ 0x00240443, // n0x10ee c0x0000 (---------------) + I mil
+ 0x0020e602, // n0x10ef c0x0000 (---------------) + I ms
+ 0x00209e82, // n0x10f0 c0x0000 (---------------) + I ne
+ 0x00200d02, // n0x10f1 c0x0000 (---------------) + I or
+ 0x0020c782, // n0x10f2 c0x0000 (---------------) + I pe
+ 0x00207082, // n0x10f3 c0x0000 (---------------) + I re
+ 0x0021bcc2, // n0x10f4 c0x0000 (---------------) + I sc
+ 0x0034b605, // n0x10f5 c0x0000 (---------------) + I seoul
+ 0x00250985, // n0x10f6 c0x0000 (---------------) + I ulsan
+ 0x00232dc3, // n0x10f7 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x10f8 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x10f9 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x10fa c0x0000 (---------------) + I net
+ 0x0024d043, // n0x10fb c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x10fc c0x0000 (---------------) + I com
+ 0x0021e083, // n0x10fd c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x10fe c0x0000 (---------------) + I gov
+ 0x00240443, // n0x10ff c0x0000 (---------------) + I mil
+ 0x00218643, // n0x1100 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1101 c0x0000 (---------------) + I org
+ 0x00000401, // n0x1102 c0x0000 (---------------) + c
+ 0x00232dc3, // n0x1103 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1104 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1105 c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x1106 c0x0000 (---------------) + I info
+ 0x002188c3, // n0x1107 c0x0000 (---------------) + I int
+ 0x00218643, // n0x1108 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1109 c0x0000 (---------------) + I org
+ 0x0020c783, // n0x110a c0x0000 (---------------) + I per
+ 0x00232dc3, // n0x110b c0x0000 (---------------) + I com
+ 0x0021e083, // n0x110c c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x110d c0x0000 (---------------) + I gov
+ 0x00218643, // n0x110e c0x0000 (---------------) + I net
+ 0x0024d043, // n0x110f c0x0000 (---------------) + I org
+ 0x00200882, // n0x1110 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x1111 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1112 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1113 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x1114 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1115 c0x0000 (---------------) + I org
+ 0x002af5c4, // n0x1116 c0x0000 (---------------) + I assn
+ 0x00232dc3, // n0x1117 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1118 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1119 c0x0000 (---------------) + I gov
+ 0x0023c403, // n0x111a c0x0000 (---------------) + I grp
+ 0x0029d805, // n0x111b c0x0000 (---------------) + I hotel
+ 0x002188c3, // n0x111c c0x0000 (---------------) + I int
+ 0x00220e43, // n0x111d c0x0000 (---------------) + I ltd
+ 0x00218643, // n0x111e c0x0000 (---------------) + I net
+ 0x0024ad43, // n0x111f c0x0000 (---------------) + I ngo
+ 0x0024d043, // n0x1120 c0x0000 (---------------) + I org
+ 0x00251983, // n0x1121 c0x0000 (---------------) + I sch
+ 0x002783c3, // n0x1122 c0x0000 (---------------) + I soc
+ 0x002071c3, // n0x1123 c0x0000 (---------------) + I web
+ 0x00232dc3, // n0x1124 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1125 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1126 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x1127 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1128 c0x0000 (---------------) + I org
+ 0x00200882, // n0x1129 c0x0000 (---------------) + I co
+ 0x0024d043, // n0x112a c0x0000 (---------------) + I org
+ 0x00209ac3, // n0x112b c0x0000 (---------------) + I gov
+ 0x002a4783, // n0x112c c0x0000 (---------------) + I asn
+ 0x00232dc3, // n0x112d c0x0000 (---------------) + I com
+ 0x00235884, // n0x112e c0x0000 (---------------) + I conf
+ 0x0021e083, // n0x112f c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1130 c0x0000 (---------------) + I gov
+ 0x00205942, // n0x1131 c0x0000 (---------------) + I id
+ 0x00240443, // n0x1132 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x1133 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1134 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x1135 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1136 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1137 c0x0000 (---------------) + I gov
+ 0x00205942, // n0x1138 c0x0000 (---------------) + I id
+ 0x00210e83, // n0x1139 c0x0000 (---------------) + I med
+ 0x00218643, // n0x113a c0x0000 (---------------) + I net
+ 0x0024d043, // n0x113b c0x0000 (---------------) + I org
+ 0x002cb543, // n0x113c c0x0000 (---------------) + I plc
+ 0x00251983, // n0x113d c0x0000 (---------------) + I sch
+ 0x00200b82, // n0x113e c0x0000 (---------------) + I ac
+ 0x00200882, // n0x113f c0x0000 (---------------) + I co
+ 0x00209ac3, // n0x1140 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x1141 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1142 c0x0000 (---------------) + I org
+ 0x0022ad45, // n0x1143 c0x0000 (---------------) + I press
+ 0x00278344, // n0x1144 c0x0000 (---------------) + I asso
+ 0x002032c2, // n0x1145 c0x0000 (---------------) + I tm
+ 0x00200b82, // n0x1146 c0x0000 (---------------) + I ac
+ 0x00200882, // n0x1147 c0x0000 (---------------) + I co
+ 0x0021e083, // n0x1148 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1149 c0x0000 (---------------) + I gov
+ 0x00234383, // n0x114a c0x0000 (---------------) + I its
+ 0x00218643, // n0x114b c0x0000 (---------------) + I net
+ 0x0024d043, // n0x114c c0x0000 (---------------) + I org
+ 0x002cfac4, // n0x114d c0x0000 (---------------) + I priv
+ 0x00232dc3, // n0x114e c0x0000 (---------------) + I com
+ 0x0021e083, // n0x114f c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1150 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x1151 c0x0000 (---------------) + I mil
+ 0x002104c3, // n0x1152 c0x0000 (---------------) + I nom
+ 0x0024d043, // n0x1153 c0x0000 (---------------) + I org
+ 0x002cf303, // n0x1154 c0x0000 (---------------) + I prd
+ 0x002032c2, // n0x1155 c0x0000 (---------------) + I tm
+ 0x00232dc3, // n0x1156 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1157 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1158 c0x0000 (---------------) + I gov
+ 0x00206e83, // n0x1159 c0x0000 (---------------) + I inf
+ 0x00267944, // n0x115a c0x0000 (---------------) + I name
+ 0x00218643, // n0x115b c0x0000 (---------------) + I net
+ 0x0024d043, // n0x115c c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x115d c0x0000 (---------------) + I com
+ 0x0021e083, // n0x115e c0x0000 (---------------) + I edu
+ 0x00252544, // n0x115f c0x0000 (---------------) + I gouv
+ 0x00209ac3, // n0x1160 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x1161 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1162 c0x0000 (---------------) + I org
+ 0x0022ad46, // n0x1163 c0x0000 (---------------) + I presse
+ 0x0021e083, // n0x1164 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1165 c0x0000 (---------------) + I gov
+ 0x0001af43, // n0x1166 c0x0000 (---------------) + nyc
+ 0x0024d043, // n0x1167 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x1168 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1169 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x116a c0x0000 (---------------) + I gov
+ 0x00218643, // n0x116b c0x0000 (---------------) + I net
+ 0x0024d043, // n0x116c c0x0000 (---------------) + I org
+ 0x0009e448, // n0x116d c0x0000 (---------------) + blogspot
+ 0x00209ac3, // n0x116e c0x0000 (---------------) + I gov
+ 0x00232dc3, // n0x116f c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1170 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1171 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x1172 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1173 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x1174 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1175 c0x0000 (---------------) + I edu
+ 0x00218643, // n0x1176 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1177 c0x0000 (---------------) + I org
+ 0x00200b82, // n0x1178 c0x0000 (---------------) + I ac
+ 0x00200882, // n0x1179 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x117a c0x0000 (---------------) + I com
+ 0x00209ac3, // n0x117b c0x0000 (---------------) + I gov
+ 0x00218643, // n0x117c c0x0000 (---------------) + I net
+ 0x00200d02, // n0x117d c0x0000 (---------------) + I or
+ 0x0024d043, // n0x117e c0x0000 (---------------) + I org
+ 0x002fe987, // n0x117f c0x0000 (---------------) + I academy
+ 0x002ee00b, // n0x1180 c0x0000 (---------------) + I agriculture
+ 0x00222943, // n0x1181 c0x0000 (---------------) + I air
+ 0x0024e648, // n0x1182 c0x0000 (---------------) + I airguard
+ 0x00377f47, // n0x1183 c0x0000 (---------------) + I alabama
+ 0x002abec6, // n0x1184 c0x0000 (---------------) + I alaska
+ 0x002f8e05, // n0x1185 c0x0000 (---------------) + I amber
+ 0x00383909, // n0x1186 c0x0000 (---------------) + I ambulance
+ 0x00237b48, // n0x1187 c0x0000 (---------------) + I american
+ 0x00237b49, // n0x1188 c0x0000 (---------------) + I americana
+ 0x00274990, // n0x1189 c0x0000 (---------------) + I americanantiques
+ 0x00237b4b, // n0x118a c0x0000 (---------------) + I americanart
+ 0x002f8c49, // n0x118b c0x0000 (---------------) + I amsterdam
+ 0x00205fc3, // n0x118c c0x0000 (---------------) + I and
+ 0x002e0e49, // n0x118d c0x0000 (---------------) + I annefrank
+ 0x00236846, // n0x118e c0x0000 (---------------) + I anthro
+ 0x0023684c, // n0x118f c0x0000 (---------------) + I anthropology
+ 0x00232908, // n0x1190 c0x0000 (---------------) + I antiques
+ 0x0036bc48, // n0x1191 c0x0000 (---------------) + I aquarium
+ 0x00263cc9, // n0x1192 c0x0000 (---------------) + I arboretum
+ 0x002d828e, // n0x1193 c0x0000 (---------------) + I archaeological
+ 0x002c340b, // n0x1194 c0x0000 (---------------) + I archaeology
+ 0x00229ecc, // n0x1195 c0x0000 (---------------) + I architecture
+ 0x00208d43, // n0x1196 c0x0000 (---------------) + I art
+ 0x00237d4c, // n0x1197 c0x0000 (---------------) + I artanddesign
+ 0x002ec189, // n0x1198 c0x0000 (---------------) + I artcenter
+ 0x00208d47, // n0x1199 c0x0000 (---------------) + I artdeco
+ 0x0021dfcc, // n0x119a c0x0000 (---------------) + I arteducation
+ 0x002372ca, // n0x119b c0x0000 (---------------) + I artgallery
+ 0x0020b384, // n0x119c c0x0000 (---------------) + I arts
+ 0x0020b38d, // n0x119d c0x0000 (---------------) + I artsandcrafts
+ 0x002ec048, // n0x119e c0x0000 (---------------) + I asmatart
+ 0x0036f4cd, // n0x119f c0x0000 (---------------) + I assassination
+ 0x0029b006, // n0x11a0 c0x0000 (---------------) + I assisi
+ 0x002c51cb, // n0x11a1 c0x0000 (---------------) + I association
+ 0x003459c9, // n0x11a2 c0x0000 (---------------) + I astronomy
+ 0x002b6947, // n0x11a3 c0x0000 (---------------) + I atlanta
+ 0x0036b806, // n0x11a4 c0x0000 (---------------) + I austin
+ 0x0032d809, // n0x11a5 c0x0000 (---------------) + I australia
+ 0x0033490a, // n0x11a6 c0x0000 (---------------) + I automotive
+ 0x00332d48, // n0x11a7 c0x0000 (---------------) + I aviation
+ 0x0026a344, // n0x11a8 c0x0000 (---------------) + I axis
+ 0x002fb107, // n0x11a9 c0x0000 (---------------) + I badajoz
+ 0x0020da87, // n0x11aa c0x0000 (---------------) + I baghdad
+ 0x0030b4c4, // n0x11ab c0x0000 (---------------) + I bahn
+ 0x00349604, // n0x11ac c0x0000 (---------------) + I bale
+ 0x002d9c49, // n0x11ad c0x0000 (---------------) + I baltimore
+ 0x002f9609, // n0x11ae c0x0000 (---------------) + I barcelona
+ 0x00285848, // n0x11af c0x0000 (---------------) + I baseball
+ 0x00212c85, // n0x11b0 c0x0000 (---------------) + I basel
+ 0x00214405, // n0x11b1 c0x0000 (---------------) + I baths
+ 0x0020cd46, // n0x11b2 c0x0000 (---------------) + I bauern
+ 0x0020b249, // n0x11b3 c0x0000 (---------------) + I beauxarts
+ 0x0036964d, // n0x11b4 c0x0000 (---------------) + I beeldengeluid
+ 0x002111c8, // n0x11b5 c0x0000 (---------------) + I bellevue
+ 0x0020cc47, // n0x11b6 c0x0000 (---------------) + I bergbau
+ 0x002f8e88, // n0x11b7 c0x0000 (---------------) + I berkeley
+ 0x00376686, // n0x11b8 c0x0000 (---------------) + I berlin
+ 0x0037bb04, // n0x11b9 c0x0000 (---------------) + I bern
+ 0x0023ac45, // n0x11ba c0x0000 (---------------) + I bible
+ 0x00207606, // n0x11bb c0x0000 (---------------) + I bilbao
+ 0x00207f84, // n0x11bc c0x0000 (---------------) + I bill
+ 0x00208c47, // n0x11bd c0x0000 (---------------) + I birdart
+ 0x0020a2ca, // n0x11be c0x0000 (---------------) + I birthplace
+ 0x00217444, // n0x11bf c0x0000 (---------------) + I bonn
+ 0x00217746, // n0x11c0 c0x0000 (---------------) + I boston
+ 0x00219489, // n0x11c1 c0x0000 (---------------) + I botanical
+ 0x0021948f, // n0x11c2 c0x0000 (---------------) + I botanicalgarden
+ 0x0021a90d, // n0x11c3 c0x0000 (---------------) + I botanicgarden
+ 0x0021ae46, // n0x11c4 c0x0000 (---------------) + I botany
+ 0x0021e6d0, // n0x11c5 c0x0000 (---------------) + I brandywinevalley
+ 0x0021ec06, // n0x11c6 c0x0000 (---------------) + I brasil
+ 0x00220587, // n0x11c7 c0x0000 (---------------) + I bristol
+ 0x00221207, // n0x11c8 c0x0000 (---------------) + I british
+ 0x0022120f, // n0x11c9 c0x0000 (---------------) + I britishcolumbia
+ 0x002248c9, // n0x11ca c0x0000 (---------------) + I broadcast
+ 0x00228a46, // n0x11cb c0x0000 (---------------) + I brunel
+ 0x002297c7, // n0x11cc c0x0000 (---------------) + I brussel
+ 0x002297c8, // n0x11cd c0x0000 (---------------) + I brussels
+ 0x00229b89, // n0x11ce c0x0000 (---------------) + I bruxelles
+ 0x002bd9c8, // n0x11cf c0x0000 (---------------) + I building
+ 0x002c9ac7, // n0x11d0 c0x0000 (---------------) + I burghof
+ 0x00232843, // n0x11d1 c0x0000 (---------------) + I bus
+ 0x0028a746, // n0x11d2 c0x0000 (---------------) + I bushey
+ 0x0023bd48, // n0x11d3 c0x0000 (---------------) + I cadaques
+ 0x002d854a, // n0x11d4 c0x0000 (---------------) + I california
+ 0x00216409, // n0x11d5 c0x0000 (---------------) + I cambridge
+ 0x002180c3, // n0x11d6 c0x0000 (---------------) + I can
+ 0x00343f06, // n0x11d7 c0x0000 (---------------) + I canada
+ 0x0029da8a, // n0x11d8 c0x0000 (---------------) + I capebreton
+ 0x0021afc7, // n0x11d9 c0x0000 (---------------) + I carrier
+ 0x0021de0a, // n0x11da c0x0000 (---------------) + I cartoonart
+ 0x00320f8e, // n0x11db c0x0000 (---------------) + I casadelamoneda
+ 0x00224a06, // n0x11dc c0x0000 (---------------) + I castle
+ 0x0033a347, // n0x11dd c0x0000 (---------------) + I castres
+ 0x0021a006, // n0x11de c0x0000 (---------------) + I celtic
+ 0x002442c6, // n0x11df c0x0000 (---------------) + I center
+ 0x002fc94b, // n0x11e0 c0x0000 (---------------) + I chattanooga
+ 0x0031394a, // n0x11e1 c0x0000 (---------------) + I cheltenham
+ 0x0032e04d, // n0x11e2 c0x0000 (---------------) + I chesapeakebay
+ 0x00370387, // n0x11e3 c0x0000 (---------------) + I chicago
+ 0x00308508, // n0x11e4 c0x0000 (---------------) + I children
+ 0x00308509, // n0x11e5 c0x0000 (---------------) + I childrens
+ 0x0030850f, // n0x11e6 c0x0000 (---------------) + I childrensgarden
+ 0x0029c58c, // n0x11e7 c0x0000 (---------------) + I chiropractic
+ 0x002a0d89, // n0x11e8 c0x0000 (---------------) + I chocolate
+ 0x003516ce, // n0x11e9 c0x0000 (---------------) + I christiansburg
+ 0x0027468a, // n0x11ea c0x0000 (---------------) + I cincinnati
+ 0x002e1c46, // n0x11eb c0x0000 (---------------) + I cinema
+ 0x0031de46, // n0x11ec c0x0000 (---------------) + I circus
+ 0x0033688c, // n0x11ed c0x0000 (---------------) + I civilisation
+ 0x00338a8c, // n0x11ee c0x0000 (---------------) + I civilization
+ 0x0033e488, // n0x11ef c0x0000 (---------------) + I civilwar
+ 0x003792c7, // n0x11f0 c0x0000 (---------------) + I clinton
+ 0x002060c5, // n0x11f1 c0x0000 (---------------) + I clock
+ 0x00208e84, // n0x11f2 c0x0000 (---------------) + I coal
+ 0x002fa40e, // n0x11f3 c0x0000 (---------------) + I coastaldefence
+ 0x00359204, // n0x11f4 c0x0000 (---------------) + I cody
+ 0x0025e187, // n0x11f5 c0x0000 (---------------) + I coldwar
+ 0x0022ddca, // n0x11f6 c0x0000 (---------------) + I collection
+ 0x00231294, // n0x11f7 c0x0000 (---------------) + I colonialwilliamsburg
+ 0x0023218f, // n0x11f8 c0x0000 (---------------) + I coloradoplateau
+ 0x002213c8, // n0x11f9 c0x0000 (---------------) + I columbia
+ 0x00232708, // n0x11fa c0x0000 (---------------) + I columbus
+ 0x002ceb4d, // n0x11fb c0x0000 (---------------) + I communication
+ 0x002ceb4e, // n0x11fc c0x0000 (---------------) + I communications
+ 0x00232dc9, // n0x11fd c0x0000 (---------------) + I community
+ 0x00234a08, // n0x11fe c0x0000 (---------------) + I computer
+ 0x00234a0f, // n0x11ff c0x0000 (---------------) + I computerhistory
+ 0x00236fcc, // n0x1200 c0x0000 (---------------) + I contemporary
+ 0x00236fcf, // n0x1201 c0x0000 (---------------) + I contemporaryart
+ 0x00238b07, // n0x1202 c0x0000 (---------------) + I convent
+ 0x0023b08a, // n0x1203 c0x0000 (---------------) + I copenhagen
+ 0x0021bd0b, // n0x1204 c0x0000 (---------------) + I corporation
+ 0x0023c808, // n0x1205 c0x0000 (---------------) + I corvette
+ 0x0023dec7, // n0x1206 c0x0000 (---------------) + I costume
+ 0x0025d54d, // n0x1207 c0x0000 (---------------) + I countryestate
+ 0x00322546, // n0x1208 c0x0000 (---------------) + I county
+ 0x0020b546, // n0x1209 c0x0000 (---------------) + I crafts
+ 0x0023f249, // n0x120a c0x0000 (---------------) + I cranbrook
+ 0x0031e188, // n0x120b c0x0000 (---------------) + I creation
+ 0x002440c8, // n0x120c c0x0000 (---------------) + I cultural
+ 0x002440ce, // n0x120d c0x0000 (---------------) + I culturalcenter
+ 0x002ee107, // n0x120e c0x0000 (---------------) + I culture
+ 0x0020a6c5, // n0x120f c0x0000 (---------------) + I cyber
+ 0x002c5c05, // n0x1210 c0x0000 (---------------) + I cymru
+ 0x00222244, // n0x1211 c0x0000 (---------------) + I dali
+ 0x0034cc46, // n0x1212 c0x0000 (---------------) + I dallas
+ 0x00285748, // n0x1213 c0x0000 (---------------) + I database
+ 0x0020fbc3, // n0x1214 c0x0000 (---------------) + I ddr
+ 0x00249dce, // n0x1215 c0x0000 (---------------) + I decorativearts
+ 0x002b6448, // n0x1216 c0x0000 (---------------) + I delaware
+ 0x002a7a8b, // n0x1217 c0x0000 (---------------) + I delmenhorst
+ 0x0035c787, // n0x1218 c0x0000 (---------------) + I denmark
+ 0x002da245, // n0x1219 c0x0000 (---------------) + I depot
+ 0x00237ec6, // n0x121a c0x0000 (---------------) + I design
+ 0x0029ef47, // n0x121b c0x0000 (---------------) + I detroit
+ 0x002f0dc8, // n0x121c c0x0000 (---------------) + I dinosaur
+ 0x00334c49, // n0x121d c0x0000 (---------------) + I discovery
+ 0x0035a285, // n0x121e c0x0000 (---------------) + I dolls
+ 0x0027fdc8, // n0x121f c0x0000 (---------------) + I donostia
+ 0x0036f206, // n0x1220 c0x0000 (---------------) + I durham
+ 0x0034fb4a, // n0x1221 c0x0000 (---------------) + I eastafrica
+ 0x002fa309, // n0x1222 c0x0000 (---------------) + I eastcoast
+ 0x0021e089, // n0x1223 c0x0000 (---------------) + I education
+ 0x0021e08b, // n0x1224 c0x0000 (---------------) + I educational
+ 0x0029aa48, // n0x1225 c0x0000 (---------------) + I egyptian
+ 0x0030b389, // n0x1226 c0x0000 (---------------) + I eisenbahn
+ 0x00212d46, // n0x1227 c0x0000 (---------------) + I elburg
+ 0x003454ca, // n0x1228 c0x0000 (---------------) + I elvendrell
+ 0x00207b4a, // n0x1229 c0x0000 (---------------) + I embroidery
+ 0x0023b28c, // n0x122a c0x0000 (---------------) + I encyclopedic
+ 0x002b0e07, // n0x122b c0x0000 (---------------) + I england
+ 0x00307a4a, // n0x122c c0x0000 (---------------) + I entomology
+ 0x0027f68b, // n0x122d c0x0000 (---------------) + I environment
+ 0x0027f699, // n0x122e c0x0000 (---------------) + I environmentalconservation
+ 0x002182c8, // n0x122f c0x0000 (---------------) + I epilepsy
+ 0x0022adc5, // n0x1230 c0x0000 (---------------) + I essex
+ 0x0025d706, // n0x1231 c0x0000 (---------------) + I estate
+ 0x003003c9, // n0x1232 c0x0000 (---------------) + I ethnology
+ 0x00252886, // n0x1233 c0x0000 (---------------) + I exeter
+ 0x0020138a, // n0x1234 c0x0000 (---------------) + I exhibition
+ 0x002db306, // n0x1235 c0x0000 (---------------) + I family
+ 0x002125c4, // n0x1236 c0x0000 (---------------) + I farm
+ 0x002125cd, // n0x1237 c0x0000 (---------------) + I farmequipment
+ 0x0021f607, // n0x1238 c0x0000 (---------------) + I farmers
+ 0x0024ae49, // n0x1239 c0x0000 (---------------) + I farmstead
+ 0x00287a05, // n0x123a c0x0000 (---------------) + I field
+ 0x002470c8, // n0x123b c0x0000 (---------------) + I figueres
+ 0x00247b49, // n0x123c c0x0000 (---------------) + I filatelia
+ 0x00247d84, // n0x123d c0x0000 (---------------) + I film
+ 0x00248587, // n0x123e c0x0000 (---------------) + I fineart
+ 0x00248588, // n0x123f c0x0000 (---------------) + I finearts
+ 0x00248c47, // n0x1240 c0x0000 (---------------) + I finland
+ 0x0025f808, // n0x1241 c0x0000 (---------------) + I flanders
+ 0x0024e007, // n0x1242 c0x0000 (---------------) + I florida
+ 0x002d2445, // n0x1243 c0x0000 (---------------) + I force
+ 0x002541cc, // n0x1244 c0x0000 (---------------) + I fortmissoula
+ 0x00254809, // n0x1245 c0x0000 (---------------) + I fortworth
+ 0x002d994a, // n0x1246 c0x0000 (---------------) + I foundation
+ 0x00357989, // n0x1247 c0x0000 (---------------) + I francaise
+ 0x002e0f49, // n0x1248 c0x0000 (---------------) + I frankfurt
+ 0x0033ee0c, // n0x1249 c0x0000 (---------------) + I franziskaner
+ 0x0038230b, // n0x124a c0x0000 (---------------) + I freemasonry
+ 0x00256d08, // n0x124b c0x0000 (---------------) + I freiburg
+ 0x00257bc8, // n0x124c c0x0000 (---------------) + I fribourg
+ 0x0025bac4, // n0x124d c0x0000 (---------------) + I frog
+ 0x0027bdc8, // n0x124e c0x0000 (---------------) + I fundacio
+ 0x0027da49, // n0x124f c0x0000 (---------------) + I furniture
+ 0x00237387, // n0x1250 c0x0000 (---------------) + I gallery
+ 0x002196c6, // n0x1251 c0x0000 (---------------) + I garden
+ 0x00216987, // n0x1252 c0x0000 (---------------) + I gateway
+ 0x0032e6c9, // n0x1253 c0x0000 (---------------) + I geelvinck
+ 0x0036138b, // n0x1254 c0x0000 (---------------) + I gemological
+ 0x00344207, // n0x1255 c0x0000 (---------------) + I geology
+ 0x00321f47, // n0x1256 c0x0000 (---------------) + I georgia
+ 0x0027f547, // n0x1257 c0x0000 (---------------) + I giessen
+ 0x0036f444, // n0x1258 c0x0000 (---------------) + I glas
+ 0x0036f445, // n0x1259 c0x0000 (---------------) + I glass
+ 0x0029c0c5, // n0x125a c0x0000 (---------------) + I gorge
+ 0x0031568b, // n0x125b c0x0000 (---------------) + I grandrapids
+ 0x0035e7c4, // n0x125c c0x0000 (---------------) + I graz
+ 0x00227308, // n0x125d c0x0000 (---------------) + I guernsey
+ 0x00290fca, // n0x125e c0x0000 (---------------) + I halloffame
+ 0x0036f2c7, // n0x125f c0x0000 (---------------) + I hamburg
+ 0x00358847, // n0x1260 c0x0000 (---------------) + I handson
+ 0x00284852, // n0x1261 c0x0000 (---------------) + I harvestcelebration
+ 0x00288206, // n0x1262 c0x0000 (---------------) + I hawaii
+ 0x00241cc6, // n0x1263 c0x0000 (---------------) + I health
+ 0x002dab8e, // n0x1264 c0x0000 (---------------) + I heimatunduhren
+ 0x002ace06, // n0x1265 c0x0000 (---------------) + I hellas
+ 0x0020eb08, // n0x1266 c0x0000 (---------------) + I helsinki
+ 0x0035a4cf, // n0x1267 c0x0000 (---------------) + I hembygdsforbund
+ 0x0036f888, // n0x1268 c0x0000 (---------------) + I heritage
+ 0x0026a648, // n0x1269 c0x0000 (---------------) + I histoire
+ 0x002e884a, // n0x126a c0x0000 (---------------) + I historical
+ 0x002e8851, // n0x126b c0x0000 (---------------) + I historicalsociety
+ 0x00296d8e, // n0x126c c0x0000 (---------------) + I historichouses
+ 0x002517ca, // n0x126d c0x0000 (---------------) + I historisch
+ 0x002517cc, // n0x126e c0x0000 (---------------) + I historisches
+ 0x00234c07, // n0x126f c0x0000 (---------------) + I history
+ 0x00234c10, // n0x1270 c0x0000 (---------------) + I historyofscience
+ 0x00204e08, // n0x1271 c0x0000 (---------------) + I horology
+ 0x0022ca85, // n0x1272 c0x0000 (---------------) + I house
+ 0x002e50ca, // n0x1273 c0x0000 (---------------) + I humanities
+ 0x00207fcc, // n0x1274 c0x0000 (---------------) + I illustration
+ 0x002d468d, // n0x1275 c0x0000 (---------------) + I imageandsound
+ 0x00226c06, // n0x1276 c0x0000 (---------------) + I indian
+ 0x002e2587, // n0x1277 c0x0000 (---------------) + I indiana
+ 0x002e258c, // n0x1278 c0x0000 (---------------) + I indianapolis
+ 0x00226c0c, // n0x1279 c0x0000 (---------------) + I indianmarket
+ 0x002188cc, // n0x127a c0x0000 (---------------) + I intelligence
+ 0x002a038b, // n0x127b c0x0000 (---------------) + I interactive
+ 0x0027eec4, // n0x127c c0x0000 (---------------) + I iraq
+ 0x0021c2c4, // n0x127d c0x0000 (---------------) + I iron
+ 0x003406c9, // n0x127e c0x0000 (---------------) + I isleofman
+ 0x002bd2c7, // n0x127f c0x0000 (---------------) + I jamison
+ 0x0022eec9, // n0x1280 c0x0000 (---------------) + I jefferson
+ 0x002d7909, // n0x1281 c0x0000 (---------------) + I jerusalem
+ 0x00378e87, // n0x1282 c0x0000 (---------------) + I jewelry
+ 0x002a11c6, // n0x1283 c0x0000 (---------------) + I jewish
+ 0x002a11c9, // n0x1284 c0x0000 (---------------) + I jewishart
+ 0x002a1803, // n0x1285 c0x0000 (---------------) + I jfk
+ 0x002b954a, // n0x1286 c0x0000 (---------------) + I journalism
+ 0x00367007, // n0x1287 c0x0000 (---------------) + I judaica
+ 0x002384cb, // n0x1288 c0x0000 (---------------) + I judygarland
+ 0x0032deca, // n0x1289 c0x0000 (---------------) + I juedisches
+ 0x00257ec4, // n0x128a c0x0000 (---------------) + I juif
+ 0x002f1f06, // n0x128b c0x0000 (---------------) + I karate
+ 0x002b4d09, // n0x128c c0x0000 (---------------) + I karikatur
+ 0x0025c784, // n0x128d c0x0000 (---------------) + I kids
+ 0x0020cf4a, // n0x128e c0x0000 (---------------) + I koebenhavn
+ 0x0024db85, // n0x128f c0x0000 (---------------) + I koeln
+ 0x002a9905, // n0x1290 c0x0000 (---------------) + I kunst
+ 0x002a990d, // n0x1291 c0x0000 (---------------) + I kunstsammlung
+ 0x002a9c4e, // n0x1292 c0x0000 (---------------) + I kunstunddesign
+ 0x00306685, // n0x1293 c0x0000 (---------------) + I labor
+ 0x0035e106, // n0x1294 c0x0000 (---------------) + I labour
+ 0x003819c7, // n0x1295 c0x0000 (---------------) + I lajolla
+ 0x0022268a, // n0x1296 c0x0000 (---------------) + I lancashire
+ 0x0037d1c6, // n0x1297 c0x0000 (---------------) + I landes
+ 0x002a8ac4, // n0x1298 c0x0000 (---------------) + I lans
+ 0x003109c7, // n0x1299 c0x0000 (---------------) + I larsson
+ 0x0029730b, // n0x129a c0x0000 (---------------) + I lewismiller
+ 0x00376747, // n0x129b c0x0000 (---------------) + I lincoln
+ 0x00369304, // n0x129c c0x0000 (---------------) + I linz
+ 0x00284006, // n0x129d c0x0000 (---------------) + I living
+ 0x0028400d, // n0x129e c0x0000 (---------------) + I livinghistory
+ 0x00253ecc, // n0x129f c0x0000 (---------------) + I localhistory
+ 0x0021d286, // n0x12a0 c0x0000 (---------------) + I london
+ 0x0021500a, // n0x12a1 c0x0000 (---------------) + I losangeles
+ 0x00226286, // n0x12a2 c0x0000 (---------------) + I louvre
+ 0x0036be88, // n0x12a3 c0x0000 (---------------) + I loyalist
+ 0x00380847, // n0x12a4 c0x0000 (---------------) + I lucerne
+ 0x00242aca, // n0x12a5 c0x0000 (---------------) + I luxembourg
+ 0x00248246, // n0x12a6 c0x0000 (---------------) + I luzern
+ 0x00276743, // n0x12a7 c0x0000 (---------------) + I mad
+ 0x00309b86, // n0x12a8 c0x0000 (---------------) + I madrid
+ 0x00364908, // n0x12a9 c0x0000 (---------------) + I mallorca
+ 0x0034084a, // n0x12aa c0x0000 (---------------) + I manchester
+ 0x00279207, // n0x12ab c0x0000 (---------------) + I mansion
+ 0x00279208, // n0x12ac c0x0000 (---------------) + I mansions
+ 0x0027c384, // n0x12ad c0x0000 (---------------) + I manx
+ 0x00322fc7, // n0x12ae c0x0000 (---------------) + I marburg
+ 0x00246948, // n0x12af c0x0000 (---------------) + I maritime
+ 0x003172c8, // n0x12b0 c0x0000 (---------------) + I maritimo
+ 0x0036a988, // n0x12b1 c0x0000 (---------------) + I maryland
+ 0x0020448a, // n0x12b2 c0x0000 (---------------) + I marylhurst
+ 0x0021e585, // n0x12b3 c0x0000 (---------------) + I media
+ 0x00384a47, // n0x12b4 c0x0000 (---------------) + I medical
+ 0x00251613, // n0x12b5 c0x0000 (---------------) + I medizinhistorisches
+ 0x00264ac6, // n0x12b6 c0x0000 (---------------) + I meeres
+ 0x0035fe88, // n0x12b7 c0x0000 (---------------) + I memorial
+ 0x002a78c9, // n0x12b8 c0x0000 (---------------) + I mesaverde
+ 0x002250c8, // n0x12b9 c0x0000 (---------------) + I michigan
+ 0x0026324b, // n0x12ba c0x0000 (---------------) + I midatlantic
+ 0x00315248, // n0x12bb c0x0000 (---------------) + I military
+ 0x00240444, // n0x12bc c0x0000 (---------------) + I mill
+ 0x002adb06, // n0x12bd c0x0000 (---------------) + I miners
+ 0x00386146, // n0x12be c0x0000 (---------------) + I mining
+ 0x002e8109, // n0x12bf c0x0000 (---------------) + I minnesota
+ 0x002b2bc7, // n0x12c0 c0x0000 (---------------) + I missile
+ 0x002542c8, // n0x12c1 c0x0000 (---------------) + I missoula
+ 0x002932c6, // n0x12c2 c0x0000 (---------------) + I modern
+ 0x0022b784, // n0x12c3 c0x0000 (---------------) + I moma
+ 0x002bac05, // n0x12c4 c0x0000 (---------------) + I money
+ 0x002b5548, // n0x12c5 c0x0000 (---------------) + I monmouth
+ 0x002b580a, // n0x12c6 c0x0000 (---------------) + I monticello
+ 0x002b6048, // n0x12c7 c0x0000 (---------------) + I montreal
+ 0x002bbb46, // n0x12c8 c0x0000 (---------------) + I moscow
+ 0x0029088a, // n0x12c9 c0x0000 (---------------) + I motorcycle
+ 0x002ed3c8, // n0x12ca c0x0000 (---------------) + I muenchen
+ 0x002be1c8, // n0x12cb c0x0000 (---------------) + I muenster
+ 0x002bf1c8, // n0x12cc c0x0000 (---------------) + I mulhouse
+ 0x002c0686, // n0x12cd c0x0000 (---------------) + I muncie
+ 0x002c2446, // n0x12ce c0x0000 (---------------) + I museet
+ 0x00311b0c, // n0x12cf c0x0000 (---------------) + I museumcenter
+ 0x002c2a10, // n0x12d0 c0x0000 (---------------) + I museumvereniging
+ 0x00294545, // n0x12d1 c0x0000 (---------------) + I music
+ 0x002f0408, // n0x12d2 c0x0000 (---------------) + I national
+ 0x002f0410, // n0x12d3 c0x0000 (---------------) + I nationalfirearms
+ 0x0036f690, // n0x12d4 c0x0000 (---------------) + I nationalheritage
+ 0x0027480e, // n0x12d5 c0x0000 (---------------) + I nativeamerican
+ 0x0031178e, // n0x12d6 c0x0000 (---------------) + I naturalhistory
+ 0x00311794, // n0x12d7 c0x0000 (---------------) + I naturalhistorymuseum
+ 0x0031288f, // n0x12d8 c0x0000 (---------------) + I naturalsciences
+ 0x00312c46, // n0x12d9 c0x0000 (---------------) + I nature
+ 0x0031a4d1, // n0x12da c0x0000 (---------------) + I naturhistorisches
+ 0x0036ae13, // n0x12db c0x0000 (---------------) + I natuurwetenschappen
+ 0x0036b288, // n0x12dc c0x0000 (---------------) + I naumburg
+ 0x00382dc5, // n0x12dd c0x0000 (---------------) + I naval
+ 0x00272788, // n0x12de c0x0000 (---------------) + I nebraska
+ 0x0022c645, // n0x12df c0x0000 (---------------) + I neues
+ 0x00230c4c, // n0x12e0 c0x0000 (---------------) + I newhampshire
+ 0x00242489, // n0x12e1 c0x0000 (---------------) + I newjersey
+ 0x00273cc9, // n0x12e2 c0x0000 (---------------) + I newmexico
+ 0x00216707, // n0x12e3 c0x0000 (---------------) + I newport
+ 0x00234589, // n0x12e4 c0x0000 (---------------) + I newspaper
+ 0x0021f847, // n0x12e5 c0x0000 (---------------) + I newyork
+ 0x0021c606, // n0x12e6 c0x0000 (---------------) + I niepce
+ 0x0023aa47, // n0x12e7 c0x0000 (---------------) + I norfolk
+ 0x002e6285, // n0x12e8 c0x0000 (---------------) + I north
+ 0x0022d2c3, // n0x12e9 c0x0000 (---------------) + I nrw
+ 0x0020fd89, // n0x12ea c0x0000 (---------------) + I nuernberg
+ 0x002f6009, // n0x12eb c0x0000 (---------------) + I nuremberg
+ 0x0021af43, // n0x12ec c0x0000 (---------------) + I nyc
+ 0x002335c4, // n0x12ed c0x0000 (---------------) + I nyny
+ 0x00376c0d, // n0x12ee c0x0000 (---------------) + I oceanographic
+ 0x0020698f, // n0x12ef c0x0000 (---------------) + I oceanographique
+ 0x002f4f85, // n0x12f0 c0x0000 (---------------) + I omaha
+ 0x0030be06, // n0x12f1 c0x0000 (---------------) + I online
+ 0x0022fc87, // n0x12f2 c0x0000 (---------------) + I ontario
+ 0x00347807, // n0x12f3 c0x0000 (---------------) + I openair
+ 0x002814c6, // n0x12f4 c0x0000 (---------------) + I oregon
+ 0x002814cb, // n0x12f5 c0x0000 (---------------) + I oregontrail
+ 0x00297dc5, // n0x12f6 c0x0000 (---------------) + I otago
+ 0x003810c6, // n0x12f7 c0x0000 (---------------) + I oxford
+ 0x00269607, // n0x12f8 c0x0000 (---------------) + I pacific
+ 0x00225709, // n0x12f9 c0x0000 (---------------) + I paderborn
+ 0x00200ac6, // n0x12fa c0x0000 (---------------) + I palace
+ 0x0022b305, // n0x12fb c0x0000 (---------------) + I paleo
+ 0x0022e70b, // n0x12fc c0x0000 (---------------) + I palmsprings
+ 0x0024aa86, // n0x12fd c0x0000 (---------------) + I panama
+ 0x00256585, // n0x12fe c0x0000 (---------------) + I paris
+ 0x002cbe48, // n0x12ff c0x0000 (---------------) + I pasadena
+ 0x002c5a88, // n0x1300 c0x0000 (---------------) + I pharmacy
+ 0x002c5e4c, // n0x1301 c0x0000 (---------------) + I philadelphia
+ 0x002c5e50, // n0x1302 c0x0000 (---------------) + I philadelphiaarea
+ 0x002c6509, // n0x1303 c0x0000 (---------------) + I philately
+ 0x002c6c07, // n0x1304 c0x0000 (---------------) + I phoenix
+ 0x002c718b, // n0x1305 c0x0000 (---------------) + I photography
+ 0x002c8e06, // n0x1306 c0x0000 (---------------) + I pilots
+ 0x002c998a, // n0x1307 c0x0000 (---------------) + I pittsburgh
+ 0x002ca30b, // n0x1308 c0x0000 (---------------) + I planetarium
+ 0x002cab4a, // n0x1309 c0x0000 (---------------) + I plantation
+ 0x002cadc6, // n0x130a c0x0000 (---------------) + I plants
+ 0x002cb405, // n0x130b c0x0000 (---------------) + I plaza
+ 0x00366d46, // n0x130c c0x0000 (---------------) + I portal
+ 0x0027e008, // n0x130d c0x0000 (---------------) + I portland
+ 0x002167ca, // n0x130e c0x0000 (---------------) + I portlligat
+ 0x002ce7dc, // n0x130f c0x0000 (---------------) + I posts-and-telecommunications
+ 0x002cf3cc, // n0x1310 c0x0000 (---------------) + I preservation
+ 0x002cf6c8, // n0x1311 c0x0000 (---------------) + I presidio
+ 0x0022ad45, // n0x1312 c0x0000 (---------------) + I press
+ 0x002d0fc7, // n0x1313 c0x0000 (---------------) + I project
+ 0x002d7ec6, // n0x1314 c0x0000 (---------------) + I public
+ 0x00375845, // n0x1315 c0x0000 (---------------) + I pubol
+ 0x0021b2c6, // n0x1316 c0x0000 (---------------) + I quebec
+ 0x00281688, // n0x1317 c0x0000 (---------------) + I railroad
+ 0x00342b07, // n0x1318 c0x0000 (---------------) + I railway
+ 0x002d8188, // n0x1319 c0x0000 (---------------) + I research
+ 0x0033a44a, // n0x131a c0x0000 (---------------) + I resistance
+ 0x002ee8cc, // n0x131b c0x0000 (---------------) + I riodejaneiro
+ 0x002eeb49, // n0x131c c0x0000 (---------------) + I rochester
+ 0x0037bc87, // n0x131d c0x0000 (---------------) + I rockart
+ 0x00225c04, // n0x131e c0x0000 (---------------) + I roma
+ 0x002c5cc6, // n0x131f c0x0000 (---------------) + I russia
+ 0x002ea34a, // n0x1320 c0x0000 (---------------) + I saintlouis
+ 0x002d7a05, // n0x1321 c0x0000 (---------------) + I salem
+ 0x0022204c, // n0x1322 c0x0000 (---------------) + I salvadordali
+ 0x00224d48, // n0x1323 c0x0000 (---------------) + I salzburg
+ 0x00322888, // n0x1324 c0x0000 (---------------) + I sandiego
+ 0x00250a0c, // n0x1325 c0x0000 (---------------) + I sanfrancisco
+ 0x00232acc, // n0x1326 c0x0000 (---------------) + I santabarbara
+ 0x0023bf09, // n0x1327 c0x0000 (---------------) + I santacruz
+ 0x0023ed47, // n0x1328 c0x0000 (---------------) + I santafe
+ 0x0025220c, // n0x1329 c0x0000 (---------------) + I saskatchewan
+ 0x00255bc4, // n0x132a c0x0000 (---------------) + I satx
+ 0x0025e88a, // n0x132b c0x0000 (---------------) + I savannahga
+ 0x003856cc, // n0x132c c0x0000 (---------------) + I schlesisches
+ 0x0026638b, // n0x132d c0x0000 (---------------) + I schoenbrunn
+ 0x0026d70b, // n0x132e c0x0000 (---------------) + I schokoladen
+ 0x00275006, // n0x132f c0x0000 (---------------) + I school
+ 0x0027cb07, // n0x1330 c0x0000 (---------------) + I schweiz
+ 0x00234e47, // n0x1331 c0x0000 (---------------) + I science
+ 0x00234e4f, // n0x1332 c0x0000 (---------------) + I science-fiction
+ 0x002e2cd1, // n0x1333 c0x0000 (---------------) + I scienceandhistory
+ 0x0026fc12, // n0x1334 c0x0000 (---------------) + I scienceandindustry
+ 0x0027e6cd, // n0x1335 c0x0000 (---------------) + I sciencecenter
+ 0x0027e6ce, // n0x1336 c0x0000 (---------------) + I sciencecenters
+ 0x0027ea0e, // n0x1337 c0x0000 (---------------) + I sciencehistory
+ 0x00312a48, // n0x1338 c0x0000 (---------------) + I sciences
+ 0x00312a52, // n0x1339 c0x0000 (---------------) + I sciencesnaturelles
+ 0x00250c48, // n0x133a c0x0000 (---------------) + I scotland
+ 0x002f2807, // n0x133b c0x0000 (---------------) + I seaport
+ 0x0024b38a, // n0x133c c0x0000 (---------------) + I settlement
+ 0x0021d048, // n0x133d c0x0000 (---------------) + I settlers
+ 0x002acdc5, // n0x133e c0x0000 (---------------) + I shell
+ 0x002afe8a, // n0x133f c0x0000 (---------------) + I sherbrooke
+ 0x0029b107, // n0x1340 c0x0000 (---------------) + I sibenik
+ 0x0033aac4, // n0x1341 c0x0000 (---------------) + I silk
+ 0x00221943, // n0x1342 c0x0000 (---------------) + I ski
+ 0x002f5245, // n0x1343 c0x0000 (---------------) + I skole
+ 0x002e8ac7, // n0x1344 c0x0000 (---------------) + I society
+ 0x0034f247, // n0x1345 c0x0000 (---------------) + I sologne
+ 0x002d488e, // n0x1346 c0x0000 (---------------) + I soundandvision
+ 0x002d87cd, // n0x1347 c0x0000 (---------------) + I southcarolina
+ 0x002d8c09, // n0x1348 c0x0000 (---------------) + I southwest
+ 0x002d91c5, // n0x1349 c0x0000 (---------------) + I space
+ 0x002dc043, // n0x134a c0x0000 (---------------) + I spy
+ 0x00365006, // n0x134b c0x0000 (---------------) + I square
+ 0x00256a45, // n0x134c c0x0000 (---------------) + I stadt
+ 0x002a7cc8, // n0x134d c0x0000 (---------------) + I stalbans
+ 0x002c01c9, // n0x134e c0x0000 (---------------) + I starnberg
+ 0x0025d745, // n0x134f c0x0000 (---------------) + I state
+ 0x002b628f, // n0x1350 c0x0000 (---------------) + I stateofdelaware
+ 0x00225f47, // n0x1351 c0x0000 (---------------) + I station
+ 0x00383845, // n0x1352 c0x0000 (---------------) + I steam
+ 0x002ff18a, // n0x1353 c0x0000 (---------------) + I steiermark
+ 0x00206706, // n0x1354 c0x0000 (---------------) + I stjohn
+ 0x0036c009, // n0x1355 c0x0000 (---------------) + I stockholm
+ 0x002dcc0c, // n0x1356 c0x0000 (---------------) + I stpetersburg
+ 0x002dde09, // n0x1357 c0x0000 (---------------) + I stuttgart
+ 0x0020bd86, // n0x1358 c0x0000 (---------------) + I suisse
+ 0x00290dcc, // n0x1359 c0x0000 (---------------) + I surgeonshall
+ 0x002de486, // n0x135a c0x0000 (---------------) + I surrey
+ 0x002e1e48, // n0x135b c0x0000 (---------------) + I svizzera
+ 0x00245d86, // n0x135c c0x0000 (---------------) + I sweden
+ 0x00266bc6, // n0x135d c0x0000 (---------------) + I sydney
+ 0x0029bd44, // n0x135e c0x0000 (---------------) + I tank
+ 0x002a4403, // n0x135f c0x0000 (---------------) + I tcm
+ 0x002a394a, // n0x1360 c0x0000 (---------------) + I technology
+ 0x00311391, // n0x1361 c0x0000 (---------------) + I telekommunikation
+ 0x002a0f4a, // n0x1362 c0x0000 (---------------) + I television
+ 0x0031e985, // n0x1363 c0x0000 (---------------) + I texas
+ 0x00295047, // n0x1364 c0x0000 (---------------) + I textile
+ 0x0036d6c7, // n0x1365 c0x0000 (---------------) + I theater
+ 0x00246a44, // n0x1366 c0x0000 (---------------) + I time
+ 0x00246a4b, // n0x1367 c0x0000 (---------------) + I timekeeping
+ 0x002ec988, // n0x1368 c0x0000 (---------------) + I topology
+ 0x002a6206, // n0x1369 c0x0000 (---------------) + I torino
+ 0x002318c5, // n0x136a c0x0000 (---------------) + I touch
+ 0x0023bb04, // n0x136b c0x0000 (---------------) + I town
+ 0x0028f1c9, // n0x136c c0x0000 (---------------) + I transport
+ 0x0029d704, // n0x136d c0x0000 (---------------) + I tree
+ 0x00222d07, // n0x136e c0x0000 (---------------) + I trolley
+ 0x00313345, // n0x136f c0x0000 (---------------) + I trust
+ 0x00313347, // n0x1370 c0x0000 (---------------) + I trustee
+ 0x002dadc5, // n0x1371 c0x0000 (---------------) + I uhren
+ 0x00216b83, // n0x1372 c0x0000 (---------------) + I ulm
+ 0x002f26c8, // n0x1373 c0x0000 (---------------) + I undersea
+ 0x003826ca, // n0x1374 c0x0000 (---------------) + I university
+ 0x00232883, // n0x1375 c0x0000 (---------------) + I usa
+ 0x0023288a, // n0x1376 c0x0000 (---------------) + I usantiques
+ 0x00378506, // n0x1377 c0x0000 (---------------) + I usarts
+ 0x0025d4cf, // n0x1378 c0x0000 (---------------) + I uscountryestate
+ 0x0031df49, // n0x1379 c0x0000 (---------------) + I usculture
+ 0x00249d50, // n0x137a c0x0000 (---------------) + I usdecorativearts
+ 0x0025f208, // n0x137b c0x0000 (---------------) + I usgarden
+ 0x002bbdc9, // n0x137c c0x0000 (---------------) + I ushistory
+ 0x0028b247, // n0x137d c0x0000 (---------------) + I ushuaia
+ 0x00283f8f, // n0x137e c0x0000 (---------------) + I uslivinghistory
+ 0x00202fc4, // n0x137f c0x0000 (---------------) + I utah
+ 0x002525c4, // n0x1380 c0x0000 (---------------) + I uvic
+ 0x0021e946, // n0x1381 c0x0000 (---------------) + I valley
+ 0x0022f946, // n0x1382 c0x0000 (---------------) + I vantaa
+ 0x002e7b4a, // n0x1383 c0x0000 (---------------) + I versailles
+ 0x002b67c6, // n0x1384 c0x0000 (---------------) + I viking
+ 0x0031d1c7, // n0x1385 c0x0000 (---------------) + I village
+ 0x002efb88, // n0x1386 c0x0000 (---------------) + I virginia
+ 0x002efd87, // n0x1387 c0x0000 (---------------) + I virtual
+ 0x002eff47, // n0x1388 c0x0000 (---------------) + I virtuel
+ 0x00326bca, // n0x1389 c0x0000 (---------------) + I vlaanderen
+ 0x002f250b, // n0x138a c0x0000 (---------------) + I volkenkunde
+ 0x00236485, // n0x138b c0x0000 (---------------) + I wales
+ 0x0026f848, // n0x138c c0x0000 (---------------) + I wallonie
+ 0x00235783, // n0x138d c0x0000 (---------------) + I war
+ 0x0020014c, // n0x138e c0x0000 (---------------) + I washingtondc
+ 0x00205e4f, // n0x138f c0x0000 (---------------) + I watch-and-clock
+ 0x0036e34d, // n0x1390 c0x0000 (---------------) + I watchandclock
+ 0x002d8d47, // n0x1391 c0x0000 (---------------) + I western
+ 0x00211789, // n0x1392 c0x0000 (---------------) + I westfalen
+ 0x0022d347, // n0x1393 c0x0000 (---------------) + I whaling
+ 0x00276ec8, // n0x1394 c0x0000 (---------------) + I wildlife
+ 0x0023148c, // n0x1395 c0x0000 (---------------) + I williamsburg
+ 0x00240348, // n0x1396 c0x0000 (---------------) + I windmill
+ 0x0022e548, // n0x1397 c0x0000 (---------------) + I workshop
+ 0x0030004e, // n0x1398 c0x0000 (---------------) + I xn--9dbhblg6di
+ 0x0030f0d4, // n0x1399 c0x0000 (---------------) + I xn--comunicaes-v6a2o
+ 0x0030f5e4, // n0x139a c0x0000 (---------------) + I xn--correios-e-telecomunicaes-ghc29a
+ 0x0032084a, // n0x139b c0x0000 (---------------) + I xn--h1aegh
+ 0x0033794b, // n0x139c c0x0000 (---------------) + I xn--lns-qla
+ 0x0021f904, // n0x139d c0x0000 (---------------) + I york
+ 0x0021f909, // n0x139e c0x0000 (---------------) + I yorkshire
+ 0x002e6f08, // n0x139f c0x0000 (---------------) + I yosemite
+ 0x00341085, // n0x13a0 c0x0000 (---------------) + I youth
+ 0x00377d4a, // n0x13a1 c0x0000 (---------------) + I zoological
+ 0x003651c7, // n0x13a2 c0x0000 (---------------) + I zoology
+ 0x00233784, // n0x13a3 c0x0000 (---------------) + I aero
+ 0x00202183, // n0x13a4 c0x0000 (---------------) + I biz
+ 0x00232dc3, // n0x13a5 c0x0000 (---------------) + I com
+ 0x0023a884, // n0x13a6 c0x0000 (---------------) + I coop
+ 0x0021e083, // n0x13a7 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x13a8 c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x13a9 c0x0000 (---------------) + I info
+ 0x002188c3, // n0x13aa c0x0000 (---------------) + I int
+ 0x00240443, // n0x13ab c0x0000 (---------------) + I mil
+ 0x002c2a06, // n0x13ac c0x0000 (---------------) + I museum
+ 0x00267944, // n0x13ad c0x0000 (---------------) + I name
+ 0x00218643, // n0x13ae c0x0000 (---------------) + I net
+ 0x0024d043, // n0x13af c0x0000 (---------------) + I org
+ 0x002cfc43, // n0x13b0 c0x0000 (---------------) + I pro
+ 0x00200b82, // n0x13b1 c0x0000 (---------------) + I ac
+ 0x00202183, // n0x13b2 c0x0000 (---------------) + I biz
+ 0x00200882, // n0x13b3 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x13b4 c0x0000 (---------------) + I com
+ 0x0023a884, // n0x13b5 c0x0000 (---------------) + I coop
+ 0x0021e083, // n0x13b6 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x13b7 c0x0000 (---------------) + I gov
+ 0x002188c3, // n0x13b8 c0x0000 (---------------) + I int
+ 0x002c2a06, // n0x13b9 c0x0000 (---------------) + I museum
+ 0x00218643, // n0x13ba c0x0000 (---------------) + I net
+ 0x0024d043, // n0x13bb c0x0000 (---------------) + I org
+ 0x0009e448, // n0x13bc c0x0000 (---------------) + blogspot
+ 0x00232dc3, // n0x13bd c0x0000 (---------------) + I com
+ 0x0021e083, // n0x13be c0x0000 (---------------) + I edu
+ 0x003704c3, // n0x13bf c0x0000 (---------------) + I gob
+ 0x00218643, // n0x13c0 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x13c1 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x13c2 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x13c3 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x13c4 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x13c5 c0x0000 (---------------) + I mil
+ 0x00267944, // n0x13c6 c0x0000 (---------------) + I name
+ 0x00218643, // n0x13c7 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x13c8 c0x0000 (---------------) + I org
+ 0x00685648, // n0x13c9 c0x0001 (---------------) ! I teledata
+ 0x00214582, // n0x13ca c0x0000 (---------------) + I ca
+ 0x002020c2, // n0x13cb c0x0000 (---------------) + I cc
+ 0x00200882, // n0x13cc c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x13cd c0x0000 (---------------) + I com
+ 0x0020fc02, // n0x13ce c0x0000 (---------------) + I dr
+ 0x00200242, // n0x13cf c0x0000 (---------------) + I in
+ 0x00208a44, // n0x13d0 c0x0000 (---------------) + I info
+ 0x00277f84, // n0x13d1 c0x0000 (---------------) + I mobi
+ 0x0022cd82, // n0x13d2 c0x0000 (---------------) + I mx
+ 0x00267944, // n0x13d3 c0x0000 (---------------) + I name
+ 0x00200d02, // n0x13d4 c0x0000 (---------------) + I or
+ 0x0024d043, // n0x13d5 c0x0000 (---------------) + I org
+ 0x002cfc43, // n0x13d6 c0x0000 (---------------) + I pro
+ 0x00275006, // n0x13d7 c0x0000 (---------------) + I school
+ 0x0028dc82, // n0x13d8 c0x0000 (---------------) + I tv
+ 0x002073c2, // n0x13d9 c0x0000 (---------------) + I us
+ 0x002012c2, // n0x13da c0x0000 (---------------) + I ws
+ 0x33241483, // n0x13db c0x00cc (n0x13dd-n0x13de) o I her
+ 0x33634c03, // n0x13dc c0x00cd (n0x13de-n0x13df) o I his
+ 0x00052a06, // n0x13dd c0x0000 (---------------) + forgot
+ 0x00052a06, // n0x13de c0x0000 (---------------) + forgot
+ 0x00278344, // n0x13df c0x0000 (---------------) + I asso
+ 0x0010964c, // n0x13e0 c0x0000 (---------------) + at-band-camp
+ 0x00077e0c, // n0x13e1 c0x0000 (---------------) + azure-mobile
+ 0x000b46cd, // n0x13e2 c0x0000 (---------------) + azurewebsites
+ 0x000dd187, // n0x13e3 c0x0000 (---------------) + blogdns
+ 0x00027508, // n0x13e4 c0x0000 (---------------) + broke-it
+ 0x0002c98a, // n0x13e5 c0x0000 (---------------) + buyshouses
+ 0x0017e388, // n0x13e6 c0x0000 (---------------) + cloudapp
+ 0x0002faca, // n0x13e7 c0x0000 (---------------) + cloudfront
+ 0x000c7a88, // n0x13e8 c0x0000 (---------------) + dnsalias
+ 0x00181687, // n0x13e9 c0x0000 (---------------) + dnsdojo
+ 0x000100c7, // n0x13ea c0x0000 (---------------) + does-it
+ 0x0012cb09, // n0x13eb c0x0000 (---------------) + dontexist
+ 0x00159288, // n0x13ec c0x0000 (---------------) + dynalias
+ 0x0008ee89, // n0x13ed c0x0000 (---------------) + dynathome
+ 0x0009d40d, // n0x13ee c0x0000 (---------------) + endofinternet
+ 0x342d0e46, // n0x13ef c0x00d0 (n0x140f-n0x1411) o I fastly
+ 0x0005cdc7, // n0x13f0 c0x0000 (---------------) + from-az
+ 0x0005e047, // n0x13f1 c0x0000 (---------------) + from-co
+ 0x00063947, // n0x13f2 c0x0000 (---------------) + from-la
+ 0x00068707, // n0x13f3 c0x0000 (---------------) + from-ny
+ 0x0000cd02, // n0x13f4 c0x0000 (---------------) + gb
+ 0x0009c187, // n0x13f5 c0x0000 (---------------) + gets-it
+ 0x00113b0c, // n0x13f6 c0x0000 (---------------) + ham-radio-op
+ 0x0000ddc7, // n0x13f7 c0x0000 (---------------) + homeftp
+ 0x000b9206, // n0x13f8 c0x0000 (---------------) + homeip
+ 0x00099409, // n0x13f9 c0x0000 (---------------) + homelinux
+ 0x00099ec8, // n0x13fa c0x0000 (---------------) + homeunix
+ 0x000045c2, // n0x13fb c0x0000 (---------------) + hu
+ 0x00000242, // n0x13fc c0x0000 (---------------) + in
+ 0x00061ccb, // n0x13fd c0x0000 (---------------) + in-the-band
+ 0x0001f409, // n0x13fe c0x0000 (---------------) + is-a-chef
+ 0x00047789, // n0x13ff c0x0000 (---------------) + is-a-geek
+ 0x00013e48, // n0x1400 c0x0000 (---------------) + isa-geek
+ 0x000a2b02, // n0x1401 c0x0000 (---------------) + jp
+ 0x00132909, // n0x1402 c0x0000 (---------------) + kicks-ass
+ 0x00015fcd, // n0x1403 c0x0000 (---------------) + office-on-the
+ 0x000ccf07, // n0x1404 c0x0000 (---------------) + podzone
+ 0x000866cd, // n0x1405 c0x0000 (---------------) + scrapper-site
+ 0x00004982, // n0x1406 c0x0000 (---------------) + se
+ 0x00141246, // n0x1407 c0x0000 (---------------) + selfip
+ 0x0009f9c8, // n0x1408 c0x0000 (---------------) + sells-it
+ 0x0000be88, // n0x1409 c0x0000 (---------------) + servebbs
+ 0x0008e548, // n0x140a c0x0000 (---------------) + serveftp
+ 0x00041388, // n0x140b c0x0000 (---------------) + thruhere
+ 0x00000542, // n0x140c c0x0000 (---------------) + uk
+ 0x0002c186, // n0x140d c0x0000 (---------------) + webhop
+ 0x000028c2, // n0x140e c0x0000 (---------------) + za
+ 0x346cfec4, // n0x140f c0x00d1 (n0x1411-n0x1413) o I prod
+ 0x34a89b83, // n0x1410 c0x00d2 (n0x1413-n0x1416) o I ssl
+ 0x00000101, // n0x1411 c0x0000 (---------------) + a
+ 0x0000af86, // n0x1412 c0x0000 (---------------) + global
+ 0x00000101, // n0x1413 c0x0000 (---------------) + a
+ 0x00000001, // n0x1414 c0x0000 (---------------) + b
+ 0x0000af86, // n0x1415 c0x0000 (---------------) + global
+ 0x0020b384, // n0x1416 c0x0000 (---------------) + I arts
+ 0x00232dc3, // n0x1417 c0x0000 (---------------) + I com
+ 0x0024a304, // n0x1418 c0x0000 (---------------) + I firm
+ 0x00208a44, // n0x1419 c0x0000 (---------------) + I info
+ 0x00218643, // n0x141a c0x0000 (---------------) + I net
+ 0x00256305, // n0x141b c0x0000 (---------------) + I other
+ 0x0020c783, // n0x141c c0x0000 (---------------) + I per
+ 0x0022a143, // n0x141d c0x0000 (---------------) + I rec
+ 0x002dc745, // n0x141e c0x0000 (---------------) + I store
+ 0x002071c3, // n0x141f c0x0000 (---------------) + I web
+ 0x00232dc3, // n0x1420 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1421 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1422 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x1423 c0x0000 (---------------) + I mil
+ 0x00277f84, // n0x1424 c0x0000 (---------------) + I mobi
+ 0x00267944, // n0x1425 c0x0000 (---------------) + I name
+ 0x00218643, // n0x1426 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1427 c0x0000 (---------------) + I org
+ 0x00251983, // n0x1428 c0x0000 (---------------) + I sch
+ 0x0009e448, // n0x1429 c0x0000 (---------------) + blogspot
+ 0x0036ed42, // n0x142a c0x0000 (---------------) + I bv
+ 0x00000882, // n0x142b c0x0000 (---------------) + co
+ 0x35e01d82, // n0x142c c0x00d7 (n0x1702-n0x1703) + I aa
+ 0x00367188, // n0x142d c0x0000 (---------------) + I aarborte
+ 0x002292c6, // n0x142e c0x0000 (---------------) + I aejrie
+ 0x002137c6, // n0x142f c0x0000 (---------------) + I afjord
+ 0x00228c47, // n0x1430 c0x0000 (---------------) + I agdenes
+ 0x36203042, // n0x1431 c0x00d8 (n0x1703-n0x1704) + I ah
+ 0x3665d348, // n0x1432 c0x00d9 (n0x1704-n0x1705) o I akershus
+ 0x0033264a, // n0x1433 c0x0000 (---------------) + I aknoluokta
+ 0x0036ac48, // n0x1434 c0x0000 (---------------) + I akrehamn
+ 0x00200b02, // n0x1435 c0x0000 (---------------) + I al
+ 0x00366e49, // n0x1436 c0x0000 (---------------) + I alaheadju
+ 0x002364c7, // n0x1437 c0x0000 (---------------) + I alesund
+ 0x00219646, // n0x1438 c0x0000 (---------------) + I algard
+ 0x00381289, // n0x1439 c0x0000 (---------------) + I alstahaug
+ 0x0036d204, // n0x143a c0x0000 (---------------) + I alta
+ 0x002ac1c6, // n0x143b c0x0000 (---------------) + I alvdal
+ 0x002b0684, // n0x143c c0x0000 (---------------) + I amli
+ 0x00268bc4, // n0x143d c0x0000 (---------------) + I amot
+ 0x00253d09, // n0x143e c0x0000 (---------------) + I andasuolo
+ 0x0032dc86, // n0x143f c0x0000 (---------------) + I andebu
+ 0x0033c205, // n0x1440 c0x0000 (---------------) + I andoy
+ 0x00220845, // n0x1441 c0x0000 (---------------) + I ardal
+ 0x002650c7, // n0x1442 c0x0000 (---------------) + I aremark
+ 0x002b6587, // n0x1443 c0x0000 (---------------) + I arendal
+ 0x00283c44, // n0x1444 c0x0000 (---------------) + I arna
+ 0x00228e86, // n0x1445 c0x0000 (---------------) + I aseral
+ 0x002e7545, // n0x1446 c0x0000 (---------------) + I asker
+ 0x002fbe85, // n0x1447 c0x0000 (---------------) + I askim
+ 0x002acf05, // n0x1448 c0x0000 (---------------) + I askoy
+ 0x002e71c7, // n0x1449 c0x0000 (---------------) + I askvoll
+ 0x0035c5c5, // n0x144a c0x0000 (---------------) + I asnes
+ 0x002324c9, // n0x144b c0x0000 (---------------) + I audnedaln
+ 0x00360805, // n0x144c c0x0000 (---------------) + I aukra
+ 0x002f0f04, // n0x144d c0x0000 (---------------) + I aure
+ 0x0037d107, // n0x144e c0x0000 (---------------) + I aurland
+ 0x003656ce, // n0x144f c0x0000 (---------------) + I aurskog-holand
+ 0x00362fc9, // n0x1450 c0x0000 (---------------) + I austevoll
+ 0x002daa49, // n0x1451 c0x0000 (---------------) + I austrheim
+ 0x00296406, // n0x1452 c0x0000 (---------------) + I averoy
+ 0x0030e488, // n0x1453 c0x0000 (---------------) + I badaddja
+ 0x002fa94b, // n0x1454 c0x0000 (---------------) + I bahcavuotna
+ 0x003644cc, // n0x1455 c0x0000 (---------------) + I bahccavuotna
+ 0x00381c46, // n0x1456 c0x0000 (---------------) + I baidar
+ 0x002c32c7, // n0x1457 c0x0000 (---------------) + I bajddar
+ 0x0020b045, // n0x1458 c0x0000 (---------------) + I balat
+ 0x0034960a, // n0x1459 c0x0000 (---------------) + I balestrand
+ 0x00285949, // n0x145a c0x0000 (---------------) + I ballangen
+ 0x0032d049, // n0x145b c0x0000 (---------------) + I balsfjord
+ 0x002e5f86, // n0x145c c0x0000 (---------------) + I bamble
+ 0x002e0c85, // n0x145d c0x0000 (---------------) + I bardu
+ 0x002b9f45, // n0x145e c0x0000 (---------------) + I barum
+ 0x0035f049, // n0x145f c0x0000 (---------------) + I batsfjord
+ 0x0026f1cb, // n0x1460 c0x0000 (---------------) + I bearalvahki
+ 0x00275a86, // n0x1461 c0x0000 (---------------) + I beardu
+ 0x0021cb86, // n0x1462 c0x0000 (---------------) + I beiarn
+ 0x0020cc44, // n0x1463 c0x0000 (---------------) + I berg
+ 0x00284506, // n0x1464 c0x0000 (---------------) + I bergen
+ 0x0020a748, // n0x1465 c0x0000 (---------------) + I berlevag
+ 0x00203186, // n0x1466 c0x0000 (---------------) + I bievat
+ 0x0034cb86, // n0x1467 c0x0000 (---------------) + I bindal
+ 0x00209d48, // n0x1468 c0x0000 (---------------) + I birkenes
+ 0x0020bb87, // n0x1469 c0x0000 (---------------) + I bjarkoy
+ 0x0020c549, // n0x146a c0x0000 (---------------) + I bjerkreim
+ 0x0020c8c5, // n0x146b c0x0000 (---------------) + I bjugn
+ 0x0009e448, // n0x146c c0x0000 (---------------) + blogspot
+ 0x00210044, // n0x146d c0x0000 (---------------) + I bodo
+ 0x00251b84, // n0x146e c0x0000 (---------------) + I bokn
+ 0x00214285, // n0x146f c0x0000 (---------------) + I bomlo
+ 0x0021fe49, // n0x1470 c0x0000 (---------------) + I bremanger
+ 0x00227987, // n0x1471 c0x0000 (---------------) + I bronnoy
+ 0x0022798b, // n0x1472 c0x0000 (---------------) + I bronnoysund
+ 0x0022808a, // n0x1473 c0x0000 (---------------) + I brumunddal
+ 0x0022c585, // n0x1474 c0x0000 (---------------) + I bryne
+ 0x36a07902, // n0x1475 c0x00da (n0x1705-n0x1706) + I bu
+ 0x0032dd87, // n0x1476 c0x0000 (---------------) + I budejju
+ 0x36ebfec8, // n0x1477 c0x00db (n0x1706-n0x1707) o I buskerud
+ 0x002be7c7, // n0x1478 c0x0000 (---------------) + I bygland
+ 0x002be5c5, // n0x1479 c0x0000 (---------------) + I bykle
+ 0x00245a8a, // n0x147a c0x0000 (---------------) + I cahcesuolo
+ 0x00000882, // n0x147b c0x0000 (---------------) + co
+ 0x00203e4b, // n0x147c c0x0000 (---------------) + I davvenjarga
+ 0x0020578a, // n0x147d c0x0000 (---------------) + I davvesiida
+ 0x002f5f06, // n0x147e c0x0000 (---------------) + I deatnu
+ 0x002da243, // n0x147f c0x0000 (---------------) + I dep
+ 0x00359e8d, // n0x1480 c0x0000 (---------------) + I dielddanuorri
+ 0x003601cc, // n0x1481 c0x0000 (---------------) + I divtasvuodna
+ 0x0032d24d, // n0x1482 c0x0000 (---------------) + I divttasvuotna
+ 0x0020d6c5, // n0x1483 c0x0000 (---------------) + I donna
+ 0x0024b845, // n0x1484 c0x0000 (---------------) + I dovre
+ 0x0020fc07, // n0x1485 c0x0000 (---------------) + I drammen
+ 0x00369b09, // n0x1486 c0x0000 (---------------) + I drangedal
+ 0x0036ab46, // n0x1487 c0x0000 (---------------) + I drobak
+ 0x00233dc5, // n0x1488 c0x0000 (---------------) + I dyroy
+ 0x00230908, // n0x1489 c0x0000 (---------------) + I egersund
+ 0x00272a83, // n0x148a c0x0000 (---------------) + I eid
+ 0x002f8648, // n0x148b c0x0000 (---------------) + I eidfjord
+ 0x00284408, // n0x148c c0x0000 (---------------) + I eidsberg
+ 0x002b1847, // n0x148d c0x0000 (---------------) + I eidskog
+ 0x00272a88, // n0x148e c0x0000 (---------------) + I eidsvoll
+ 0x00233bc9, // n0x148f c0x0000 (---------------) + I eigersund
+ 0x002e7f87, // n0x1490 c0x0000 (---------------) + I elverum
+ 0x002edb87, // n0x1491 c0x0000 (---------------) + I enebakk
+ 0x002abd48, // n0x1492 c0x0000 (---------------) + I engerdal
+ 0x0028c604, // n0x1493 c0x0000 (---------------) + I etne
+ 0x0028c607, // n0x1494 c0x0000 (---------------) + I etnedal
+ 0x0029af08, // n0x1495 c0x0000 (---------------) + I evenassi
+ 0x0025e746, // n0x1496 c0x0000 (---------------) + I evenes
+ 0x00220a4f, // n0x1497 c0x0000 (---------------) + I evje-og-hornnes
+ 0x002a4547, // n0x1498 c0x0000 (---------------) + I farsund
+ 0x002d1806, // n0x1499 c0x0000 (---------------) + I fauske
+ 0x00350705, // n0x149a c0x0000 (---------------) + I fedje
+ 0x00245f03, // n0x149b c0x0000 (---------------) + I fet
+ 0x00245f07, // n0x149c c0x0000 (---------------) + I fetsund
+ 0x00379703, // n0x149d c0x0000 (---------------) + I fhs
+ 0x00248e06, // n0x149e c0x0000 (---------------) + I finnoy
+ 0x0024b086, // n0x149f c0x0000 (---------------) + I fitjar
+ 0x0024bb06, // n0x14a0 c0x0000 (---------------) + I fjaler
+ 0x00288005, // n0x14a1 c0x0000 (---------------) + I fjell
+ 0x0025f803, // n0x14a2 c0x0000 (---------------) + I fla
+ 0x00346e08, // n0x14a3 c0x0000 (---------------) + I flakstad
+ 0x0033f849, // n0x14a4 c0x0000 (---------------) + I flatanger
+ 0x0034df8b, // n0x14a5 c0x0000 (---------------) + I flekkefjord
+ 0x0024c608, // n0x14a6 c0x0000 (---------------) + I flesberg
+ 0x0024dcc5, // n0x14a7 c0x0000 (---------------) + I flora
+ 0x0024e845, // n0x14a8 c0x0000 (---------------) + I floro
+ 0x37257f82, // n0x14a9 c0x00dc (n0x1707-n0x1708) + I fm
+ 0x0023ab09, // n0x14aa c0x0000 (---------------) + I folkebibl
+ 0x00250187, // n0x14ab c0x0000 (---------------) + I folldal
+ 0x00381145, // n0x14ac c0x0000 (---------------) + I forde
+ 0x00253c07, // n0x14ad c0x0000 (---------------) + I forsand
+ 0x00255a86, // n0x14ae c0x0000 (---------------) + I fosnes
+ 0x0033b685, // n0x14af c0x0000 (---------------) + I frana
+ 0x0025688b, // n0x14b0 c0x0000 (---------------) + I fredrikstad
+ 0x00256d04, // n0x14b1 c0x0000 (---------------) + I frei
+ 0x0025bd85, // n0x14b2 c0x0000 (---------------) + I frogn
+ 0x0025bec7, // n0x14b3 c0x0000 (---------------) + I froland
+ 0x0026eb46, // n0x14b4 c0x0000 (---------------) + I frosta
+ 0x0026ef85, // n0x14b5 c0x0000 (---------------) + I froya
+ 0x0027bfc7, // n0x14b6 c0x0000 (---------------) + I fuoisku
+ 0x0027c707, // n0x14b7 c0x0000 (---------------) + I fuossko
+ 0x002ea2c4, // n0x14b8 c0x0000 (---------------) + I fusa
+ 0x0028218a, // n0x14b9 c0x0000 (---------------) + I fylkesbibl
+ 0x00282648, // n0x14ba c0x0000 (---------------) + I fyresdal
+ 0x002fac09, // n0x14bb c0x0000 (---------------) + I gaivuotna
+ 0x00253a45, // n0x14bc c0x0000 (---------------) + I galsa
+ 0x00204086, // n0x14bd c0x0000 (---------------) + I gamvik
+ 0x0020a90a, // n0x14be c0x0000 (---------------) + I gangaviika
+ 0x00220746, // n0x14bf c0x0000 (---------------) + I gaular
+ 0x0020ac07, // n0x14c0 c0x0000 (---------------) + I gausdal
+ 0x002ecc8d, // n0x14c1 c0x0000 (---------------) + I giehtavuoatna
+ 0x00224549, // n0x14c2 c0x0000 (---------------) + I gildeskal
+ 0x002e4005, // n0x14c3 c0x0000 (---------------) + I giske
+ 0x00323147, // n0x14c4 c0x0000 (---------------) + I gjemnes
+ 0x0035fcc8, // n0x14c5 c0x0000 (---------------) + I gjerdrum
+ 0x00363a88, // n0x14c6 c0x0000 (---------------) + I gjerstad
+ 0x00369187, // n0x14c7 c0x0000 (---------------) + I gjesdal
+ 0x0036b446, // n0x14c8 c0x0000 (---------------) + I gjovik
+ 0x00212e87, // n0x14c9 c0x0000 (---------------) + I gloppen
+ 0x00218743, // n0x14ca c0x0000 (---------------) + I gol
+ 0x00315684, // n0x14cb c0x0000 (---------------) + I gran
+ 0x0031cac5, // n0x14cc c0x0000 (---------------) + I grane
+ 0x00338fc7, // n0x14cd c0x0000 (---------------) + I granvin
+ 0x00356d89, // n0x14ce c0x0000 (---------------) + I gratangen
+ 0x002f6208, // n0x14cf c0x0000 (---------------) + I grimstad
+ 0x0037c785, // n0x14d0 c0x0000 (---------------) + I grong
+ 0x0023c704, // n0x14d1 c0x0000 (---------------) + I grue
+ 0x002497c5, // n0x14d2 c0x0000 (---------------) + I gulen
+ 0x0025068d, // n0x14d3 c0x0000 (---------------) + I guovdageaidnu
+ 0x00203082, // n0x14d4 c0x0000 (---------------) + I ha
+ 0x003062c6, // n0x14d5 c0x0000 (---------------) + I habmer
+ 0x00341186, // n0x14d6 c0x0000 (---------------) + I hadsel
+ 0x002ffdca, // n0x14d7 c0x0000 (---------------) + I hagebostad
+ 0x003467c6, // n0x14d8 c0x0000 (---------------) + I halden
+ 0x0034c845, // n0x14d9 c0x0000 (---------------) + I halsa
+ 0x002b0b45, // n0x14da c0x0000 (---------------) + I hamar
+ 0x002b0b47, // n0x14db c0x0000 (---------------) + I hamaroy
+ 0x0034f98c, // n0x14dc c0x0000 (---------------) + I hammarfeasta
+ 0x0036c68a, // n0x14dd c0x0000 (---------------) + I hammerfest
+ 0x00283a46, // n0x14de c0x0000 (---------------) + I hapmir
+ 0x0026e385, // n0x14df c0x0000 (---------------) + I haram
+ 0x00284346, // n0x14e0 c0x0000 (---------------) + I hareid
+ 0x00284687, // n0x14e1 c0x0000 (---------------) + I harstad
+ 0x00286506, // n0x14e2 c0x0000 (---------------) + I hasvik
+ 0x00287f0c, // n0x14e3 c0x0000 (---------------) + I hattfjelldal
+ 0x003813c9, // n0x14e4 c0x0000 (---------------) + I haugesund
+ 0x37651fc7, // n0x14e5 c0x00dd (n0x1708-n0x170b) o I hedmark
+ 0x00289485, // n0x14e6 c0x0000 (---------------) + I hemne
+ 0x00289486, // n0x14e7 c0x0000 (---------------) + I hemnes
+ 0x00289808, // n0x14e8 c0x0000 (---------------) + I hemsedal
+ 0x0025c905, // n0x14e9 c0x0000 (---------------) + I herad
+ 0x002987c5, // n0x14ea c0x0000 (---------------) + I hitra
+ 0x00298a08, // n0x14eb c0x0000 (---------------) + I hjartdal
+ 0x00298c0a, // n0x14ec c0x0000 (---------------) + I hjelmeland
+ 0x37a9c882, // n0x14ed c0x00de (n0x170b-n0x170c) + I hl
+ 0x37e4c142, // n0x14ee c0x00df (n0x170c-n0x170d) + I hm
+ 0x002df885, // n0x14ef c0x0000 (---------------) + I hobol
+ 0x002a1d83, // n0x14f0 c0x0000 (---------------) + I hof
+ 0x0022e1c8, // n0x14f1 c0x0000 (---------------) + I hokksund
+ 0x00274dc3, // n0x14f2 c0x0000 (---------------) + I hol
+ 0x00298e84, // n0x14f3 c0x0000 (---------------) + I hole
+ 0x0036c14b, // n0x14f4 c0x0000 (---------------) + I holmestrand
+ 0x002abbc8, // n0x14f5 c0x0000 (---------------) + I holtalen
+ 0x0029a448, // n0x14f6 c0x0000 (---------------) + I honefoss
+ 0x38322189, // n0x14f7 c0x00e0 (n0x170d-n0x170e) o I hordaland
+ 0x0029c989, // n0x14f8 c0x0000 (---------------) + I hornindal
+ 0x0029d306, // n0x14f9 c0x0000 (---------------) + I horten
+ 0x0029ebc8, // n0x14fa c0x0000 (---------------) + I hoyanger
+ 0x0029edc9, // n0x14fb c0x0000 (---------------) + I hoylandet
+ 0x0029f486, // n0x14fc c0x0000 (---------------) + I hurdal
+ 0x0029f605, // n0x14fd c0x0000 (---------------) + I hurum
+ 0x00246f46, // n0x14fe c0x0000 (---------------) + I hvaler
+ 0x00233049, // n0x14ff c0x0000 (---------------) + I hyllestad
+ 0x0036de47, // n0x1500 c0x0000 (---------------) + I ibestad
+ 0x00257906, // n0x1501 c0x0000 (---------------) + I idrett
+ 0x003850c7, // n0x1502 c0x0000 (---------------) + I inderoy
+ 0x00334ac7, // n0x1503 c0x0000 (---------------) + I iveland
+ 0x00262884, // n0x1504 c0x0000 (---------------) + I ivgu
+ 0x3861ed89, // n0x1505 c0x00e1 (n0x170e-n0x170f) + I jan-mayen
+ 0x002b8908, // n0x1506 c0x0000 (---------------) + I jessheim
+ 0x00336388, // n0x1507 c0x0000 (---------------) + I jevnaker
+ 0x00246d47, // n0x1508 c0x0000 (---------------) + I jolster
+ 0x002b5346, // n0x1509 c0x0000 (---------------) + I jondal
+ 0x00381f49, // n0x150a c0x0000 (---------------) + I jorpeland
+ 0x00213787, // n0x150b c0x0000 (---------------) + I kafjord
+ 0x0023000a, // n0x150c c0x0000 (---------------) + I karasjohka
+ 0x002e4308, // n0x150d c0x0000 (---------------) + I karasjok
+ 0x00366687, // n0x150e c0x0000 (---------------) + I karlsoy
+ 0x0036ce06, // n0x150f c0x0000 (---------------) + I karmoy
+ 0x00262c0a, // n0x1510 c0x0000 (---------------) + I kautokeino
+ 0x00335688, // n0x1511 c0x0000 (---------------) + I kirkenes
+ 0x00274105, // n0x1512 c0x0000 (---------------) + I klabu
+ 0x0022b205, // n0x1513 c0x0000 (---------------) + I klepp
+ 0x00331e87, // n0x1514 c0x0000 (---------------) + I kommune
+ 0x002b2e89, // n0x1515 c0x0000 (---------------) + I kongsberg
+ 0x002b3fcb, // n0x1516 c0x0000 (---------------) + I kongsvinger
+ 0x00331cc8, // n0x1517 c0x0000 (---------------) + I kopervik
+ 0x00360889, // n0x1518 c0x0000 (---------------) + I kraanghke
+ 0x002a3bc7, // n0x1519 c0x0000 (---------------) + I kragero
+ 0x002a4d4c, // n0x151a c0x0000 (---------------) + I kristiansand
+ 0x002a51cc, // n0x151b c0x0000 (---------------) + I kristiansund
+ 0x002a54ca, // n0x151c c0x0000 (---------------) + I krodsherad
+ 0x002a574c, // n0x151d c0x0000 (---------------) + I krokstadelva
+ 0x002b0208, // n0x151e c0x0000 (---------------) + I kvafjord
+ 0x002b0408, // n0x151f c0x0000 (---------------) + I kvalsund
+ 0x002b0604, // n0x1520 c0x0000 (---------------) + I kvam
+ 0x002b0fc9, // n0x1521 c0x0000 (---------------) + I kvanangen
+ 0x002b1209, // n0x1522 c0x0000 (---------------) + I kvinesdal
+ 0x002b144a, // n0x1523 c0x0000 (---------------) + I kvinnherad
+ 0x002b16c9, // n0x1524 c0x0000 (---------------) + I kviteseid
+ 0x002b1a07, // n0x1525 c0x0000 (---------------) + I kvitsoy
+ 0x00201d4c, // n0x1526 c0x0000 (---------------) + I laakesvuemie
+ 0x00243706, // n0x1527 c0x0000 (---------------) + I lahppi
+ 0x00263a88, // n0x1528 c0x0000 (---------------) + I langevag
+ 0x00220806, // n0x1529 c0x0000 (---------------) + I lardal
+ 0x002c1006, // n0x152a c0x0000 (---------------) + I larvik
+ 0x002e3f07, // n0x152b c0x0000 (---------------) + I lavagis
+ 0x00337b88, // n0x152c c0x0000 (---------------) + I lavangen
+ 0x0027f10b, // n0x152d c0x0000 (---------------) + I leangaviika
+ 0x002be687, // n0x152e c0x0000 (---------------) + I lebesby
+ 0x0033bb49, // n0x152f c0x0000 (---------------) + I leikanger
+ 0x002f5309, // n0x1530 c0x0000 (---------------) + I leirfjord
+ 0x00295187, // n0x1531 c0x0000 (---------------) + I leirvik
+ 0x0021c504, // n0x1532 c0x0000 (---------------) + I leka
+ 0x002b2d07, // n0x1533 c0x0000 (---------------) + I leksvik
+ 0x002b6706, // n0x1534 c0x0000 (---------------) + I lenvik
+ 0x0024bbc6, // n0x1535 c0x0000 (---------------) + I lerdal
+ 0x00229d05, // n0x1536 c0x0000 (---------------) + I lesja
+ 0x00278688, // n0x1537 c0x0000 (---------------) + I levanger
+ 0x00234484, // n0x1538 c0x0000 (---------------) + I lier
+ 0x00234486, // n0x1539 c0x0000 (---------------) + I lierne
+ 0x0036c54b, // n0x153a c0x0000 (---------------) + I lillehammer
+ 0x00322749, // n0x153b c0x0000 (---------------) + I lillesand
+ 0x002fbd86, // n0x153c c0x0000 (---------------) + I lindas
+ 0x002fce09, // n0x153d c0x0000 (---------------) + I lindesnes
+ 0x00214346, // n0x153e c0x0000 (---------------) + I loabat
+ 0x002ca108, // n0x153f c0x0000 (---------------) + I lodingen
+ 0x00210a03, // n0x1540 c0x0000 (---------------) + I lom
+ 0x00208f45, // n0x1541 c0x0000 (---------------) + I loppa
+ 0x0020ad89, // n0x1542 c0x0000 (---------------) + I lorenskog
+ 0x00219d45, // n0x1543 c0x0000 (---------------) + I loten
+ 0x002d3bc4, // n0x1544 c0x0000 (---------------) + I lund
+ 0x0026dd86, // n0x1545 c0x0000 (---------------) + I lunner
+ 0x00236e85, // n0x1546 c0x0000 (---------------) + I luroy
+ 0x0023ea46, // n0x1547 c0x0000 (---------------) + I luster
+ 0x002f3747, // n0x1548 c0x0000 (---------------) + I lyngdal
+ 0x002637c6, // n0x1549 c0x0000 (---------------) + I lyngen
+ 0x0028db8b, // n0x154a c0x0000 (---------------) + I malatvuopmi
+ 0x003453c7, // n0x154b c0x0000 (---------------) + I malselv
+ 0x00375d46, // n0x154c c0x0000 (---------------) + I malvik
+ 0x002fbc46, // n0x154d c0x0000 (---------------) + I mandal
+ 0x00265186, // n0x154e c0x0000 (---------------) + I marker
+ 0x00283c09, // n0x154f c0x0000 (---------------) + I marnardal
+ 0x0021d68a, // n0x1550 c0x0000 (---------------) + I masfjorden
+ 0x0035b0c5, // n0x1551 c0x0000 (---------------) + I masoy
+ 0x0034498d, // n0x1552 c0x0000 (---------------) + I matta-varjjat
+ 0x00298d06, // n0x1553 c0x0000 (---------------) + I meland
+ 0x002911c6, // n0x1554 c0x0000 (---------------) + I meldal
+ 0x0025f106, // n0x1555 c0x0000 (---------------) + I melhus
+ 0x0036be05, // n0x1556 c0x0000 (---------------) + I meloy
+ 0x0025d287, // n0x1557 c0x0000 (---------------) + I meraker
+ 0x0028c107, // n0x1558 c0x0000 (---------------) + I midsund
+ 0x0026c10e, // n0x1559 c0x0000 (---------------) + I midtre-gauldal
+ 0x00240443, // n0x155a c0x0000 (---------------) + I mil
+ 0x002b5309, // n0x155b c0x0000 (---------------) + I mjondalen
+ 0x00309f49, // n0x155c c0x0000 (---------------) + I mo-i-rana
+ 0x00349a07, // n0x155d c0x0000 (---------------) + I moareke
+ 0x00226fc7, // n0x155e c0x0000 (---------------) + I modalen
+ 0x002fb885, // n0x155f c0x0000 (---------------) + I modum
+ 0x002da185, // n0x1560 c0x0000 (---------------) + I molde
+ 0x38ad9d8f, // n0x1561 c0x00e2 (n0x170f-n0x1711) o I more-og-romsdal
+ 0x002bc007, // n0x1562 c0x0000 (---------------) + I mosjoen
+ 0x002bc1c8, // n0x1563 c0x0000 (---------------) + I moskenes
+ 0x002bcb44, // n0x1564 c0x0000 (---------------) + I moss
+ 0x002bd046, // n0x1565 c0x0000 (---------------) + I mosvik
+ 0x38e14202, // n0x1566 c0x00e3 (n0x1711-n0x1712) + I mr
+ 0x002c0906, // n0x1567 c0x0000 (---------------) + I muosat
+ 0x002c2a06, // n0x1568 c0x0000 (---------------) + I museum
+ 0x0030a10e, // n0x1569 c0x0000 (---------------) + I naamesjevuemie
+ 0x002f848a, // n0x156a c0x0000 (---------------) + I namdalseid
+ 0x00262406, // n0x156b c0x0000 (---------------) + I namsos
+ 0x002d4dca, // n0x156c c0x0000 (---------------) + I namsskogan
+ 0x0024f509, // n0x156d c0x0000 (---------------) + I nannestad
+ 0x00355045, // n0x156e c0x0000 (---------------) + I naroy
+ 0x0037ec48, // n0x156f c0x0000 (---------------) + I narviika
+ 0x00366546, // n0x1570 c0x0000 (---------------) + I narvik
+ 0x003768c8, // n0x1571 c0x0000 (---------------) + I naustdal
+ 0x00201808, // n0x1572 c0x0000 (---------------) + I navuotna
+ 0x002860cb, // n0x1573 c0x0000 (---------------) + I nedre-eiker
+ 0x00228d45, // n0x1574 c0x0000 (---------------) + I nesna
+ 0x0035c648, // n0x1575 c0x0000 (---------------) + I nesodden
+ 0x00209e8c, // n0x1576 c0x0000 (---------------) + I nesoddtangen
+ 0x002742c7, // n0x1577 c0x0000 (---------------) + I nesseby
+ 0x0024b2c6, // n0x1578 c0x0000 (---------------) + I nesset
+ 0x002260c8, // n0x1579 c0x0000 (---------------) + I nissedal
+ 0x002ac048, // n0x157a c0x0000 (---------------) + I nittedal
+ 0x39248cc2, // n0x157b c0x00e4 (n0x1712-n0x1713) + I nl
+ 0x003596cb, // n0x157c c0x0000 (---------------) + I nord-aurdal
+ 0x002c7e89, // n0x157d c0x0000 (---------------) + I nord-fron
+ 0x002fcc09, // n0x157e c0x0000 (---------------) + I nord-odal
+ 0x002ad107, // n0x157f c0x0000 (---------------) + I norddal
+ 0x002a6d88, // n0x1580 c0x0000 (---------------) + I nordkapp
+ 0x39749c08, // n0x1581 c0x00e5 (n0x1713-n0x1717) o I nordland
+ 0x00215b8b, // n0x1582 c0x0000 (---------------) + I nordre-land
+ 0x00213cc9, // n0x1583 c0x0000 (---------------) + I nordreisa
+ 0x0023b64d, // n0x1584 c0x0000 (---------------) + I nore-og-uvdal
+ 0x00282d88, // n0x1585 c0x0000 (---------------) + I notodden
+ 0x00292a08, // n0x1586 c0x0000 (---------------) + I notteroy
+ 0x39a00902, // n0x1587 c0x00e6 (n0x1717-n0x1718) + I nt
+ 0x00320204, // n0x1588 c0x0000 (---------------) + I odda
+ 0x39e15fc2, // n0x1589 c0x00e7 (n0x1718-n0x1719) + I of
+ 0x002e4486, // n0x158a c0x0000 (---------------) + I oksnes
+ 0x3a2009c2, // n0x158b c0x00e8 (n0x1719-n0x171a) + I ol
+ 0x0022b7ca, // n0x158c c0x0000 (---------------) + I omasvuotna
+ 0x0022c286, // n0x158d c0x0000 (---------------) + I oppdal
+ 0x00221c08, // n0x158e c0x0000 (---------------) + I oppegard
+ 0x0030ce08, // n0x158f c0x0000 (---------------) + I orkanger
+ 0x0030e786, // n0x1590 c0x0000 (---------------) + I orkdal
+ 0x002ffa46, // n0x1591 c0x0000 (---------------) + I orland
+ 0x002d3386, // n0x1592 c0x0000 (---------------) + I orskog
+ 0x002a7c45, // n0x1593 c0x0000 (---------------) + I orsta
+ 0x0023cfc4, // n0x1594 c0x0000 (---------------) + I osen
+ 0x3a610984, // n0x1595 c0x00e9 (n0x171a-n0x171b) + I oslo
+ 0x00210786, // n0x1596 c0x0000 (---------------) + I osoyro
+ 0x00255487, // n0x1597 c0x0000 (---------------) + I osteroy
+ 0x3aaf1447, // n0x1598 c0x00ea (n0x171b-n0x171c) o I ostfold
+ 0x0020838b, // n0x1599 c0x0000 (---------------) + I ostre-toten
+ 0x00365a89, // n0x159a c0x0000 (---------------) + I overhalla
+ 0x0024b88a, // n0x159b c0x0000 (---------------) + I ovre-eiker
+ 0x00309e04, // n0x159c c0x0000 (---------------) + I oyer
+ 0x002b0c88, // n0x159d c0x0000 (---------------) + I oygarden
+ 0x002576cd, // n0x159e c0x0000 (---------------) + I oystre-slidre
+ 0x002ce049, // n0x159f c0x0000 (---------------) + I porsanger
+ 0x002ce288, // n0x15a0 c0x0000 (---------------) + I porsangu
+ 0x002ce509, // n0x15a1 c0x0000 (---------------) + I porsgrunn
+ 0x002cfac4, // n0x15a2 c0x0000 (---------------) + I priv
+ 0x0021bbc4, // n0x15a3 c0x0000 (---------------) + I rade
+ 0x0022d985, // n0x15a4 c0x0000 (---------------) + I radoy
+ 0x0023828b, // n0x15a5 c0x0000 (---------------) + I rahkkeravju
+ 0x002abb46, // n0x15a6 c0x0000 (---------------) + I raholt
+ 0x002a8705, // n0x15a7 c0x0000 (---------------) + I raisa
+ 0x002fb309, // n0x15a8 c0x0000 (---------------) + I rakkestad
+ 0x00228f48, // n0x15a9 c0x0000 (---------------) + I ralingen
+ 0x0026d544, // n0x15aa c0x0000 (---------------) + I rana
+ 0x00349789, // n0x15ab c0x0000 (---------------) + I randaberg
+ 0x00364845, // n0x15ac c0x0000 (---------------) + I rauma
+ 0x002b65c8, // n0x15ad c0x0000 (---------------) + I rendalen
+ 0x002ee247, // n0x15ae c0x0000 (---------------) + I rennebu
+ 0x002dae48, // n0x15af c0x0000 (---------------) + I rennesoy
+ 0x002b4f06, // n0x15b0 c0x0000 (---------------) + I rindal
+ 0x0024a707, // n0x15b1 c0x0000 (---------------) + I ringebu
+ 0x0030de09, // n0x15b2 c0x0000 (---------------) + I ringerike
+ 0x0022e889, // n0x15b3 c0x0000 (---------------) + I ringsaker
+ 0x00256605, // n0x15b4 c0x0000 (---------------) + I risor
+ 0x0035a145, // n0x15b5 c0x0000 (---------------) + I rissa
+ 0x3ae0a7c2, // n0x15b6 c0x00eb (n0x171c-n0x171d) + I rl
+ 0x002f0cc4, // n0x15b7 c0x0000 (---------------) + I roan
+ 0x00353185, // n0x15b8 c0x0000 (---------------) + I rodoy
+ 0x00307806, // n0x15b9 c0x0000 (---------------) + I rollag
+ 0x0030c4c5, // n0x15ba c0x0000 (---------------) + I romsa
+ 0x0024e907, // n0x15bb c0x0000 (---------------) + I romskog
+ 0x002f5145, // n0x15bc c0x0000 (---------------) + I roros
+ 0x0026eb84, // n0x15bd c0x0000 (---------------) + I rost
+ 0x002964c6, // n0x15be c0x0000 (---------------) + I royken
+ 0x00233e47, // n0x15bf c0x0000 (---------------) + I royrvik
+ 0x002360c6, // n0x15c0 c0x0000 (---------------) + I ruovat
+ 0x0032e605, // n0x15c1 c0x0000 (---------------) + I rygge
+ 0x00215248, // n0x15c2 c0x0000 (---------------) + I salangen
+ 0x00215885, // n0x15c3 c0x0000 (---------------) + I salat
+ 0x00220dc7, // n0x15c4 c0x0000 (---------------) + I saltdal
+ 0x0022c749, // n0x15c5 c0x0000 (---------------) + I samnanger
+ 0x002a4f4a, // n0x15c6 c0x0000 (---------------) + I sandefjord
+ 0x002ccc07, // n0x15c7 c0x0000 (---------------) + I sandnes
+ 0x002ccc0c, // n0x15c8 c0x0000 (---------------) + I sandnessjoen
+ 0x0033c1c6, // n0x15c9 c0x0000 (---------------) + I sandoy
+ 0x0024cec9, // n0x15ca c0x0000 (---------------) + I sarpsborg
+ 0x0025bc45, // n0x15cb c0x0000 (---------------) + I sauda
+ 0x0025c848, // n0x15cc c0x0000 (---------------) + I sauherad
+ 0x00212d03, // n0x15cd c0x0000 (---------------) + I sel
+ 0x00212d05, // n0x15ce c0x0000 (---------------) + I selbu
+ 0x002d1d45, // n0x15cf c0x0000 (---------------) + I selje
+ 0x002892c7, // n0x15d0 c0x0000 (---------------) + I seljord
+ 0x3b21a182, // n0x15d1 c0x00ec (n0x171d-n0x171e) + I sf
+ 0x002cc787, // n0x15d2 c0x0000 (---------------) + I siellak
+ 0x00315906, // n0x15d3 c0x0000 (---------------) + I sigdal
+ 0x0021ecc6, // n0x15d4 c0x0000 (---------------) + I siljan
+ 0x0031ae06, // n0x15d5 c0x0000 (---------------) + I sirdal
+ 0x002abf86, // n0x15d6 c0x0000 (---------------) + I skanit
+ 0x002f9b88, // n0x15d7 c0x0000 (---------------) + I skanland
+ 0x002728c5, // n0x15d8 c0x0000 (---------------) + I skaun
+ 0x002d18c7, // n0x15d9 c0x0000 (---------------) + I skedsmo
+ 0x002d18cd, // n0x15da c0x0000 (---------------) + I skedsmokorset
+ 0x00221943, // n0x15db c0x0000 (---------------) + I ski
+ 0x00221945, // n0x15dc c0x0000 (---------------) + I skien
+ 0x002fef47, // n0x15dd c0x0000 (---------------) + I skierva
+ 0x002ff588, // n0x15de c0x0000 (---------------) + I skiptvet
+ 0x00332585, // n0x15df c0x0000 (---------------) + I skjak
+ 0x00361148, // n0x15e0 c0x0000 (---------------) + I skjervoy
+ 0x0022edc6, // n0x15e1 c0x0000 (---------------) + I skodje
+ 0x00289bc7, // n0x15e2 c0x0000 (---------------) + I slattum
+ 0x002b9745, // n0x15e3 c0x0000 (---------------) + I smola
+ 0x00228dc6, // n0x15e4 c0x0000 (---------------) + I snaase
+ 0x0036ef85, // n0x15e5 c0x0000 (---------------) + I snasa
+ 0x00223fca, // n0x15e6 c0x0000 (---------------) + I snillfjord
+ 0x002af646, // n0x15e7 c0x0000 (---------------) + I snoasa
+ 0x0026d1c7, // n0x15e8 c0x0000 (---------------) + I sogndal
+ 0x00280345, // n0x15e9 c0x0000 (---------------) + I sogne
+ 0x0037a8c7, // n0x15ea c0x0000 (---------------) + I sokndal
+ 0x00310944, // n0x15eb c0x0000 (---------------) + I sola
+ 0x002d3b46, // n0x15ec c0x0000 (---------------) + I solund
+ 0x002d4d05, // n0x15ed c0x0000 (---------------) + I somna
+ 0x0032da8b, // n0x15ee c0x0000 (---------------) + I sondre-land
+ 0x00218c09, // n0x15ef c0x0000 (---------------) + I songdalen
+ 0x00244c4a, // n0x15f0 c0x0000 (---------------) + I sor-aurdal
+ 0x00256688, // n0x15f1 c0x0000 (---------------) + I sor-fron
+ 0x002d5b48, // n0x15f2 c0x0000 (---------------) + I sor-odal
+ 0x002d5d4c, // n0x15f3 c0x0000 (---------------) + I sor-varanger
+ 0x002d6047, // n0x15f4 c0x0000 (---------------) + I sorfold
+ 0x002d6208, // n0x15f5 c0x0000 (---------------) + I sorreisa
+ 0x002d70c8, // n0x15f6 c0x0000 (---------------) + I sortland
+ 0x002d72c5, // n0x15f7 c0x0000 (---------------) + I sorum
+ 0x002db80a, // n0x15f8 c0x0000 (---------------) + I spjelkavik
+ 0x002dc049, // n0x15f9 c0x0000 (---------------) + I spydeberg
+ 0x3b604682, // n0x15fa c0x00ed (n0x171e-n0x171f) + I st
+ 0x00344106, // n0x15fb c0x0000 (---------------) + I stange
+ 0x002092c4, // n0x15fc c0x0000 (---------------) + I stat
+ 0x002092c9, // n0x15fd c0x0000 (---------------) + I stathelle
+ 0x002e5a09, // n0x15fe c0x0000 (---------------) + I stavanger
+ 0x003663c7, // n0x15ff c0x0000 (---------------) + I stavern
+ 0x00267507, // n0x1600 c0x0000 (---------------) + I steigen
+ 0x002d7789, // n0x1601 c0x0000 (---------------) + I steinkjer
+ 0x00204688, // n0x1602 c0x0000 (---------------) + I stjordal
+ 0x0020468f, // n0x1603 c0x0000 (---------------) + I stjordalshalsen
+ 0x0023a706, // n0x1604 c0x0000 (---------------) + I stokke
+ 0x0028358b, // n0x1605 c0x0000 (---------------) + I stor-elvdal
+ 0x002dc585, // n0x1606 c0x0000 (---------------) + I stord
+ 0x002dc587, // n0x1607 c0x0000 (---------------) + I stordal
+ 0x002dc9c9, // n0x1608 c0x0000 (---------------) + I storfjord
+ 0x00349706, // n0x1609 c0x0000 (---------------) + I strand
+ 0x00349707, // n0x160a c0x0000 (---------------) + I stranda
+ 0x0026ff85, // n0x160b c0x0000 (---------------) + I stryn
+ 0x00235ec4, // n0x160c c0x0000 (---------------) + I sula
+ 0x00380706, // n0x160d c0x0000 (---------------) + I suldal
+ 0x00227b44, // n0x160e c0x0000 (---------------) + I sund
+ 0x00337787, // n0x160f c0x0000 (---------------) + I sunndal
+ 0x0031f3c8, // n0x1610 c0x0000 (---------------) + I surnadal
+ 0x3bae0b88, // n0x1611 c0x00ee (n0x171f-n0x1720) + I svalbard
+ 0x002e1585, // n0x1612 c0x0000 (---------------) + I sveio
+ 0x002e16c7, // n0x1613 c0x0000 (---------------) + I svelvik
+ 0x00218449, // n0x1614 c0x0000 (---------------) + I sykkylven
+ 0x00202544, // n0x1615 c0x0000 (---------------) + I tana
+ 0x002ca948, // n0x1616 c0x0000 (---------------) + I tananger
+ 0x3bf13f88, // n0x1617 c0x00ef (n0x1720-n0x1722) o I telemark
+ 0x00246a44, // n0x1618 c0x0000 (---------------) + I time
+ 0x00236cc8, // n0x1619 c0x0000 (---------------) + I tingvoll
+ 0x0036b8c4, // n0x161a c0x0000 (---------------) + I tinn
+ 0x0022bdc9, // n0x161b c0x0000 (---------------) + I tjeldsund
+ 0x0025f045, // n0x161c c0x0000 (---------------) + I tjome
+ 0x3c2032c2, // n0x161d c0x00f0 (n0x1722-n0x1723) + I tm
+ 0x0023a745, // n0x161e c0x0000 (---------------) + I tokke
+ 0x00220685, // n0x161f c0x0000 (---------------) + I tolga
+ 0x00305ac8, // n0x1620 c0x0000 (---------------) + I tonsberg
+ 0x00238947, // n0x1621 c0x0000 (---------------) + I torsken
+ 0x3c600942, // n0x1622 c0x00f1 (n0x1723-n0x1724) + I tr
+ 0x0026d505, // n0x1623 c0x0000 (---------------) + I trana
+ 0x00270506, // n0x1624 c0x0000 (---------------) + I tranby
+ 0x002885c6, // n0x1625 c0x0000 (---------------) + I tranoy
+ 0x002f0c88, // n0x1626 c0x0000 (---------------) + I troandin
+ 0x002f2988, // n0x1627 c0x0000 (---------------) + I trogstad
+ 0x0030c486, // n0x1628 c0x0000 (---------------) + I tromsa
+ 0x00310846, // n0x1629 c0x0000 (---------------) + I tromso
+ 0x0036ca89, // n0x162a c0x0000 (---------------) + I trondheim
+ 0x0033aa06, // n0x162b c0x0000 (---------------) + I trysil
+ 0x00372d4b, // n0x162c c0x0000 (---------------) + I tvedestrand
+ 0x00322645, // n0x162d c0x0000 (---------------) + I tydal
+ 0x0021cf86, // n0x162e c0x0000 (---------------) + I tynset
+ 0x00280648, // n0x162f c0x0000 (---------------) + I tysfjord
+ 0x002e8c06, // n0x1630 c0x0000 (---------------) + I tysnes
+ 0x002c7806, // n0x1631 c0x0000 (---------------) + I tysvar
+ 0x00214a4a, // n0x1632 c0x0000 (---------------) + I ullensaker
+ 0x0034b6ca, // n0x1633 c0x0000 (---------------) + I ullensvang
+ 0x00254e85, // n0x1634 c0x0000 (---------------) + I ulvik
+ 0x0021a747, // n0x1635 c0x0000 (---------------) + I unjarga
+ 0x002d0606, // n0x1636 c0x0000 (---------------) + I utsira
+ 0x3ca03242, // n0x1637 c0x00f2 (n0x1724-n0x1725) + I va
+ 0x002ff087, // n0x1638 c0x0000 (---------------) + I vaapste
+ 0x0026d105, // n0x1639 c0x0000 (---------------) + I vadso
+ 0x0020a884, // n0x163a c0x0000 (---------------) + I vaga
+ 0x0020a885, // n0x163b c0x0000 (---------------) + I vagan
+ 0x00309d06, // n0x163c c0x0000 (---------------) + I vagsoy
+ 0x003336c7, // n0x163d c0x0000 (---------------) + I vaksdal
+ 0x0021e945, // n0x163e c0x0000 (---------------) + I valle
+ 0x00278704, // n0x163f c0x0000 (---------------) + I vang
+ 0x00268448, // n0x1640 c0x0000 (---------------) + I vanylven
+ 0x002c78c5, // n0x1641 c0x0000 (---------------) + I vardo
+ 0x0037a607, // n0x1642 c0x0000 (---------------) + I varggat
+ 0x002e5e05, // n0x1643 c0x0000 (---------------) + I varoy
+ 0x00223f05, // n0x1644 c0x0000 (---------------) + I vefsn
+ 0x0028e884, // n0x1645 c0x0000 (---------------) + I vega
+ 0x002a05c9, // n0x1646 c0x0000 (---------------) + I vegarshei
+ 0x002e7388, // n0x1647 c0x0000 (---------------) + I vennesla
+ 0x002e5c86, // n0x1648 c0x0000 (---------------) + I verdal
+ 0x002e79c6, // n0x1649 c0x0000 (---------------) + I verran
+ 0x002be4c6, // n0x164a c0x0000 (---------------) + I vestby
+ 0x3cee9488, // n0x164b c0x00f3 (n0x1725-n0x1726) o I vestfold
+ 0x002e9687, // n0x164c c0x0000 (---------------) + I vestnes
+ 0x002e9a4d, // n0x164d c0x0000 (---------------) + I vestre-slidre
+ 0x002ead4c, // n0x164e c0x0000 (---------------) + I vestre-toten
+ 0x002eb349, // n0x164f c0x0000 (---------------) + I vestvagoy
+ 0x002eb589, // n0x1650 c0x0000 (---------------) + I vevelstad
+ 0x3d3306c2, // n0x1651 c0x00f4 (n0x1726-n0x1727) + I vf
+ 0x00378c43, // n0x1652 c0x0000 (---------------) + I vgs
+ 0x00204143, // n0x1653 c0x0000 (---------------) + I vik
+ 0x00233f45, // n0x1654 c0x0000 (---------------) + I vikna
+ 0x003390ca, // n0x1655 c0x0000 (---------------) + I vindafjord
+ 0x0030c346, // n0x1656 c0x0000 (---------------) + I voagat
+ 0x002f2185, // n0x1657 c0x0000 (---------------) + I volda
+ 0x002f3c84, // n0x1658 c0x0000 (---------------) + I voss
+ 0x002f3c8b, // n0x1659 c0x0000 (---------------) + I vossevangen
+ 0x0030088c, // n0x165a c0x0000 (---------------) + I xn--andy-ira
+ 0x0030108c, // n0x165b c0x0000 (---------------) + I xn--asky-ira
+ 0x00301395, // n0x165c c0x0000 (---------------) + I xn--aurskog-hland-jnb
+ 0x0030208d, // n0x165d c0x0000 (---------------) + I xn--avery-yua
+ 0x0030310f, // n0x165e c0x0000 (---------------) + I xn--bdddj-mrabd
+ 0x003034d2, // n0x165f c0x0000 (---------------) + I xn--bearalvhki-y4a
+ 0x0030394f, // n0x1660 c0x0000 (---------------) + I xn--berlevg-jxa
+ 0x00303d12, // n0x1661 c0x0000 (---------------) + I xn--bhcavuotna-s4a
+ 0x00304193, // n0x1662 c0x0000 (---------------) + I xn--bhccavuotna-k7a
+ 0x0030464d, // n0x1663 c0x0000 (---------------) + I xn--bidr-5nac
+ 0x00304c0d, // n0x1664 c0x0000 (---------------) + I xn--bievt-0qa
+ 0x00304f4e, // n0x1665 c0x0000 (---------------) + I xn--bjarky-fya
+ 0x00305cce, // n0x1666 c0x0000 (---------------) + I xn--bjddar-pta
+ 0x0030644c, // n0x1667 c0x0000 (---------------) + I xn--blt-elab
+ 0x003067cc, // n0x1668 c0x0000 (---------------) + I xn--bmlo-gra
+ 0x00306c8b, // n0x1669 c0x0000 (---------------) + I xn--bod-2na
+ 0x003088ce, // n0x166a c0x0000 (---------------) + I xn--brnny-wuac
+ 0x0030b5d2, // n0x166b c0x0000 (---------------) + I xn--brnnysund-m8ac
+ 0x0030c10c, // n0x166c c0x0000 (---------------) + I xn--brum-voa
+ 0x0030d010, // n0x166d c0x0000 (---------------) + I xn--btsfjord-9za
+ 0x003142d2, // n0x166e c0x0000 (---------------) + I xn--davvenjrga-y4a
+ 0x0031544c, // n0x166f c0x0000 (---------------) + I xn--dnna-gra
+ 0x00315a8d, // n0x1670 c0x0000 (---------------) + I xn--drbak-wua
+ 0x00315dcc, // n0x1671 c0x0000 (---------------) + I xn--dyry-ira
+ 0x00317f51, // n0x1672 c0x0000 (---------------) + I xn--eveni-0qa01ga
+ 0x0031864d, // n0x1673 c0x0000 (---------------) + I xn--finny-yua
+ 0x0031b70d, // n0x1674 c0x0000 (---------------) + I xn--fjord-lra
+ 0x0031bd0a, // n0x1675 c0x0000 (---------------) + I xn--fl-zia
+ 0x0031bf8c, // n0x1676 c0x0000 (---------------) + I xn--flor-jra
+ 0x0031c88c, // n0x1677 c0x0000 (---------------) + I xn--frde-gra
+ 0x0031cc0c, // n0x1678 c0x0000 (---------------) + I xn--frna-woa
+ 0x0031d38c, // n0x1679 c0x0000 (---------------) + I xn--frya-hra
+ 0x0031e393, // n0x167a c0x0000 (---------------) + I xn--ggaviika-8ya47h
+ 0x0031eb50, // n0x167b c0x0000 (---------------) + I xn--gildeskl-g0a
+ 0x0031ef50, // n0x167c c0x0000 (---------------) + I xn--givuotna-8ya
+ 0x0031f5cd, // n0x167d c0x0000 (---------------) + I xn--gjvik-wua
+ 0x0031f90c, // n0x167e c0x0000 (---------------) + I xn--gls-elac
+ 0x00320589, // n0x167f c0x0000 (---------------) + I xn--h-2fa
+ 0x0032130d, // n0x1680 c0x0000 (---------------) + I xn--hbmer-xqa
+ 0x00321653, // n0x1681 c0x0000 (---------------) + I xn--hcesuolo-7ya35b
+ 0x00323a11, // n0x1682 c0x0000 (---------------) + I xn--hgebostad-g3a
+ 0x00323e53, // n0x1683 c0x0000 (---------------) + I xn--hmmrfeasta-s4ac
+ 0x0032484f, // n0x1684 c0x0000 (---------------) + I xn--hnefoss-q1a
+ 0x00324c0c, // n0x1685 c0x0000 (---------------) + I xn--hobl-ira
+ 0x00324f0f, // n0x1686 c0x0000 (---------------) + I xn--holtlen-hxa
+ 0x003252cd, // n0x1687 c0x0000 (---------------) + I xn--hpmir-xqa
+ 0x003258cf, // n0x1688 c0x0000 (---------------) + I xn--hyanger-q1a
+ 0x00325c90, // n0x1689 c0x0000 (---------------) + I xn--hylandet-54a
+ 0x0032670e, // n0x168a c0x0000 (---------------) + I xn--indery-fya
+ 0x00327a0e, // n0x168b c0x0000 (---------------) + I xn--jlster-bya
+ 0x003281d0, // n0x168c c0x0000 (---------------) + I xn--jrpeland-54a
+ 0x0032888d, // n0x168d c0x0000 (---------------) + I xn--karmy-yua
+ 0x0032920e, // n0x168e c0x0000 (---------------) + I xn--kfjord-iua
+ 0x0032958c, // n0x168f c0x0000 (---------------) + I xn--klbu-woa
+ 0x0032a593, // n0x1690 c0x0000 (---------------) + I xn--koluokta-7ya57h
+ 0x0032c34e, // n0x1691 c0x0000 (---------------) + I xn--krager-gya
+ 0x0032ec50, // n0x1692 c0x0000 (---------------) + I xn--kranghke-b0a
+ 0x0032f051, // n0x1693 c0x0000 (---------------) + I xn--krdsherad-m8a
+ 0x0032f48f, // n0x1694 c0x0000 (---------------) + I xn--krehamn-dxa
+ 0x0032f853, // n0x1695 c0x0000 (---------------) + I xn--krjohka-hwab49j
+ 0x0033024d, // n0x1696 c0x0000 (---------------) + I xn--ksnes-uua
+ 0x0033058f, // n0x1697 c0x0000 (---------------) + I xn--kvfjord-nxa
+ 0x0033094e, // n0x1698 c0x0000 (---------------) + I xn--kvitsy-fya
+ 0x003313d0, // n0x1699 c0x0000 (---------------) + I xn--kvnangen-k0a
+ 0x003317c9, // n0x169a c0x0000 (---------------) + I xn--l-1fa
+ 0x00332f50, // n0x169b c0x0000 (---------------) + I xn--laheadju-7ya
+ 0x0033388f, // n0x169c c0x0000 (---------------) + I xn--langevg-jxa
+ 0x00333f0f, // n0x169d c0x0000 (---------------) + I xn--ldingen-q1a
+ 0x003342d2, // n0x169e c0x0000 (---------------) + I xn--leagaviika-52b
+ 0x00335c8e, // n0x169f c0x0000 (---------------) + I xn--lesund-hua
+ 0x0033658d, // n0x16a0 c0x0000 (---------------) + I xn--lgrd-poac
+ 0x00336b8d, // n0x16a1 c0x0000 (---------------) + I xn--lhppi-xqa
+ 0x00336ecd, // n0x16a2 c0x0000 (---------------) + I xn--linds-pra
+ 0x00337d8d, // n0x16a3 c0x0000 (---------------) + I xn--loabt-0qa
+ 0x003380cd, // n0x16a4 c0x0000 (---------------) + I xn--lrdal-sra
+ 0x00338410, // n0x16a5 c0x0000 (---------------) + I xn--lrenskog-54a
+ 0x0033880b, // n0x16a6 c0x0000 (---------------) + I xn--lt-liac
+ 0x00338d8c, // n0x16a7 c0x0000 (---------------) + I xn--lten-gra
+ 0x0033934c, // n0x16a8 c0x0000 (---------------) + I xn--lury-ira
+ 0x0033964c, // n0x16a9 c0x0000 (---------------) + I xn--mely-ira
+ 0x0033994e, // n0x16aa c0x0000 (---------------) + I xn--merker-kua
+ 0x00340090, // n0x16ab c0x0000 (---------------) + I xn--mjndalen-64a
+ 0x00341552, // n0x16ac c0x0000 (---------------) + I xn--mlatvuopmi-s4a
+ 0x003419cb, // n0x16ad c0x0000 (---------------) + I xn--mli-tla
+ 0x00341d4e, // n0x16ae c0x0000 (---------------) + I xn--mlselv-iua
+ 0x003420ce, // n0x16af c0x0000 (---------------) + I xn--moreke-jua
+ 0x00342cce, // n0x16b0 c0x0000 (---------------) + I xn--mosjen-eya
+ 0x003432cb, // n0x16b1 c0x0000 (---------------) + I xn--mot-tla
+ 0x3d743596, // n0x16b2 c0x00f5 (n0x1727-n0x1729) o I xn--mre-og-romsdal-qqb
+ 0x003464cd, // n0x16b3 c0x0000 (---------------) + I xn--msy-ula0h
+ 0x00346954, // n0x16b4 c0x0000 (---------------) + I xn--mtta-vrjjat-k7af
+ 0x00347d4d, // n0x16b5 c0x0000 (---------------) + I xn--muost-0qa
+ 0x00349155, // n0x16b6 c0x0000 (---------------) + I xn--nmesjevuemie-tcba
+ 0x0034a8cd, // n0x16b7 c0x0000 (---------------) + I xn--nry-yla5g
+ 0x0034b24f, // n0x16b8 c0x0000 (---------------) + I xn--nttery-byae
+ 0x0034b94f, // n0x16b9 c0x0000 (---------------) + I xn--nvuotna-hwa
+ 0x0034e24f, // n0x16ba c0x0000 (---------------) + I xn--oppegrd-ixa
+ 0x0034e60e, // n0x16bb c0x0000 (---------------) + I xn--ostery-fya
+ 0x0034eb8d, // n0x16bc c0x0000 (---------------) + I xn--osyro-wua
+ 0x00350311, // n0x16bd c0x0000 (---------------) + I xn--porsgu-sta26f
+ 0x0035208c, // n0x16be c0x0000 (---------------) + I xn--rady-ira
+ 0x0035238c, // n0x16bf c0x0000 (---------------) + I xn--rdal-poa
+ 0x0035268b, // n0x16c0 c0x0000 (---------------) + I xn--rde-ula
+ 0x0035294c, // n0x16c1 c0x0000 (---------------) + I xn--rdy-0nab
+ 0x003532cf, // n0x16c2 c0x0000 (---------------) + I xn--rennesy-v1a
+ 0x00353692, // n0x16c3 c0x0000 (---------------) + I xn--rhkkervju-01af
+ 0x00353d0d, // n0x16c4 c0x0000 (---------------) + I xn--rholt-mra
+ 0x00354dcc, // n0x16c5 c0x0000 (---------------) + I xn--risa-5na
+ 0x0035518c, // n0x16c6 c0x0000 (---------------) + I xn--risr-ira
+ 0x0035548d, // n0x16c7 c0x0000 (---------------) + I xn--rland-uua
+ 0x003557cf, // n0x16c8 c0x0000 (---------------) + I xn--rlingen-mxa
+ 0x00355b8e, // n0x16c9 c0x0000 (---------------) + I xn--rmskog-bya
+ 0x00356b4c, // n0x16ca c0x0000 (---------------) + I xn--rros-gra
+ 0x00356fcd, // n0x16cb c0x0000 (---------------) + I xn--rskog-uua
+ 0x0035730b, // n0x16cc c0x0000 (---------------) + I xn--rst-0na
+ 0x0035774c, // n0x16cd c0x0000 (---------------) + I xn--rsta-fra
+ 0x00357ccd, // n0x16ce c0x0000 (---------------) + I xn--ryken-vua
+ 0x0035800e, // n0x16cf c0x0000 (---------------) + I xn--ryrvik-bya
+ 0x00358589, // n0x16d0 c0x0000 (---------------) + I xn--s-1fa
+ 0x0035a893, // n0x16d1 c0x0000 (---------------) + I xn--sandnessjen-ogb
+ 0x0035b20d, // n0x16d2 c0x0000 (---------------) + I xn--sandy-yua
+ 0x0035b54d, // n0x16d3 c0x0000 (---------------) + I xn--seral-lra
+ 0x0035bb4c, // n0x16d4 c0x0000 (---------------) + I xn--sgne-gra
+ 0x0035c20e, // n0x16d5 c0x0000 (---------------) + I xn--skierv-uta
+ 0x0035cb0f, // n0x16d6 c0x0000 (---------------) + I xn--skjervy-v1a
+ 0x0035cecc, // n0x16d7 c0x0000 (---------------) + I xn--skjk-soa
+ 0x0035d1cd, // n0x16d8 c0x0000 (---------------) + I xn--sknit-yqa
+ 0x0035d50f, // n0x16d9 c0x0000 (---------------) + I xn--sknland-fxa
+ 0x0035d8cc, // n0x16da c0x0000 (---------------) + I xn--slat-5na
+ 0x0035decc, // n0x16db c0x0000 (---------------) + I xn--slt-elab
+ 0x0035e28c, // n0x16dc c0x0000 (---------------) + I xn--smla-hra
+ 0x0035e58c, // n0x16dd c0x0000 (---------------) + I xn--smna-gra
+ 0x0035e8cd, // n0x16de c0x0000 (---------------) + I xn--snase-nra
+ 0x0035ec12, // n0x16df c0x0000 (---------------) + I xn--sndre-land-0cb
+ 0x0036188c, // n0x16e0 c0x0000 (---------------) + I xn--snes-poa
+ 0x00361b8c, // n0x16e1 c0x0000 (---------------) + I xn--snsa-roa
+ 0x00361e91, // n0x16e2 c0x0000 (---------------) + I xn--sr-aurdal-l8a
+ 0x003622cf, // n0x16e3 c0x0000 (---------------) + I xn--sr-fron-q1a
+ 0x0036268f, // n0x16e4 c0x0000 (---------------) + I xn--sr-odal-q1a
+ 0x00362a53, // n0x16e5 c0x0000 (---------------) + I xn--sr-varanger-ggb
+ 0x003679ce, // n0x16e6 c0x0000 (---------------) + I xn--srfold-bya
+ 0x00367d4f, // n0x16e7 c0x0000 (---------------) + I xn--srreisa-q1a
+ 0x0036810c, // n0x16e8 c0x0000 (---------------) + I xn--srum-gra
+ 0x3db6840e, // n0x16e9 c0x00f6 (n0x1729-n0x172a) o I xn--stfold-9xa
+ 0x0036878f, // n0x16ea c0x0000 (---------------) + I xn--stjrdal-s1a
+ 0x00368b56, // n0x16eb c0x0000 (---------------) + I xn--stjrdalshalsen-sqb
+ 0x0036e8d2, // n0x16ec c0x0000 (---------------) + I xn--stre-toten-zcb
+ 0x00370c8c, // n0x16ed c0x0000 (---------------) + I xn--tjme-hra
+ 0x0037144f, // n0x16ee c0x0000 (---------------) + I xn--tnsberg-q1a
+ 0x00371acd, // n0x16ef c0x0000 (---------------) + I xn--trany-yua
+ 0x00371e0f, // n0x16f0 c0x0000 (---------------) + I xn--trgstad-r1a
+ 0x003721cc, // n0x16f1 c0x0000 (---------------) + I xn--trna-woa
+ 0x003724cd, // n0x16f2 c0x0000 (---------------) + I xn--troms-zua
+ 0x0037280d, // n0x16f3 c0x0000 (---------------) + I xn--tysvr-vra
+ 0x00373a8e, // n0x16f4 c0x0000 (---------------) + I xn--unjrga-rta
+ 0x0037480c, // n0x16f5 c0x0000 (---------------) + I xn--vads-jra
+ 0x00374b0c, // n0x16f6 c0x0000 (---------------) + I xn--vard-jra
+ 0x00374e10, // n0x16f7 c0x0000 (---------------) + I xn--vegrshei-c0a
+ 0x00377591, // n0x16f8 c0x0000 (---------------) + I xn--vestvgy-ixa6o
+ 0x003779cb, // n0x16f9 c0x0000 (---------------) + I xn--vg-yiab
+ 0x0037884c, // n0x16fa c0x0000 (---------------) + I xn--vgan-qoa
+ 0x00378b4e, // n0x16fb c0x0000 (---------------) + I xn--vgsy-qoa0j
+ 0x0037ad91, // n0x16fc c0x0000 (---------------) + I xn--vre-eiker-k8a
+ 0x0037b1ce, // n0x16fd c0x0000 (---------------) + I xn--vrggt-xqad
+ 0x0037b54d, // n0x16fe c0x0000 (---------------) + I xn--vry-yla5g
+ 0x0037ea0b, // n0x16ff c0x0000 (---------------) + I xn--yer-zna
+ 0x0037f34f, // n0x1700 c0x0000 (---------------) + I xn--ygarden-p1a
+ 0x00380a14, // n0x1701 c0x0000 (---------------) + I xn--ystre-slidre-ujb
+ 0x00209602, // n0x1702 c0x0000 (---------------) + I gs
+ 0x00209602, // n0x1703 c0x0000 (---------------) + I gs
+ 0x00209e83, // n0x1704 c0x0000 (---------------) + I nes
+ 0x00209602, // n0x1705 c0x0000 (---------------) + I gs
+ 0x00209e83, // n0x1706 c0x0000 (---------------) + I nes
+ 0x00209602, // n0x1707 c0x0000 (---------------) + I gs
+ 0x002053c2, // n0x1708 c0x0000 (---------------) + I os
+ 0x00246f85, // n0x1709 c0x0000 (---------------) + I valer
+ 0x0037aa8c, // n0x170a c0x0000 (---------------) + I xn--vler-qoa
+ 0x00209602, // n0x170b c0x0000 (---------------) + I gs
+ 0x00209602, // n0x170c c0x0000 (---------------) + I gs
+ 0x002053c2, // n0x170d c0x0000 (---------------) + I os
+ 0x00209602, // n0x170e c0x0000 (---------------) + I gs
+ 0x0028a2c5, // n0x170f c0x0000 (---------------) + I heroy
+ 0x002a4f45, // n0x1710 c0x0000 (---------------) + I sande
+ 0x00209602, // n0x1711 c0x0000 (---------------) + I gs
+ 0x00209602, // n0x1712 c0x0000 (---------------) + I gs
+ 0x00210042, // n0x1713 c0x0000 (---------------) + I bo
+ 0x0028a2c5, // n0x1714 c0x0000 (---------------) + I heroy
+ 0x00302b49, // n0x1715 c0x0000 (---------------) + I xn--b-5ga
+ 0x0032370c, // n0x1716 c0x0000 (---------------) + I xn--hery-ira
+ 0x00209602, // n0x1717 c0x0000 (---------------) + I gs
+ 0x00209602, // n0x1718 c0x0000 (---------------) + I gs
+ 0x00209602, // n0x1719 c0x0000 (---------------) + I gs
+ 0x00209602, // n0x171a c0x0000 (---------------) + I gs
+ 0x00246f85, // n0x171b c0x0000 (---------------) + I valer
+ 0x00209602, // n0x171c c0x0000 (---------------) + I gs
+ 0x00209602, // n0x171d c0x0000 (---------------) + I gs
+ 0x00209602, // n0x171e c0x0000 (---------------) + I gs
+ 0x00209602, // n0x171f c0x0000 (---------------) + I gs
+ 0x00210042, // n0x1720 c0x0000 (---------------) + I bo
+ 0x00302b49, // n0x1721 c0x0000 (---------------) + I xn--b-5ga
+ 0x00209602, // n0x1722 c0x0000 (---------------) + I gs
+ 0x00209602, // n0x1723 c0x0000 (---------------) + I gs
+ 0x00209602, // n0x1724 c0x0000 (---------------) + I gs
+ 0x002a4f45, // n0x1725 c0x0000 (---------------) + I sande
+ 0x00209602, // n0x1726 c0x0000 (---------------) + I gs
+ 0x002a4f45, // n0x1727 c0x0000 (---------------) + I sande
+ 0x0032370c, // n0x1728 c0x0000 (---------------) + I xn--hery-ira
+ 0x0037aa8c, // n0x1729 c0x0000 (---------------) + I xn--vler-qoa
+ 0x00202183, // n0x172a c0x0000 (---------------) + I biz
+ 0x00232dc3, // n0x172b c0x0000 (---------------) + I com
+ 0x0021e083, // n0x172c c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x172d c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x172e c0x0000 (---------------) + I info
+ 0x00218643, // n0x172f c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1730 c0x0000 (---------------) + I org
+ 0x0001f6c8, // n0x1731 c0x0000 (---------------) + merseine
+ 0x000adb04, // n0x1732 c0x0000 (---------------) + mine
+ 0x000b2588, // n0x1733 c0x0000 (---------------) + shacknet
+ 0x00200b82, // n0x1734 c0x0000 (---------------) + I ac
+ 0x3ea00882, // n0x1735 c0x00fa (n0x1744-n0x1745) + I co
+ 0x00240f03, // n0x1736 c0x0000 (---------------) + I cri
+ 0x00213f44, // n0x1737 c0x0000 (---------------) + I geek
+ 0x0020a0c3, // n0x1738 c0x0000 (---------------) + I gen
+ 0x00217044, // n0x1739 c0x0000 (---------------) + I govt
+ 0x00241cc6, // n0x173a c0x0000 (---------------) + I health
+ 0x00207a43, // n0x173b c0x0000 (---------------) + I iwi
+ 0x00382c84, // n0x173c c0x0000 (---------------) + I kiwi
+ 0x00281bc5, // n0x173d c0x0000 (---------------) + I maori
+ 0x00240443, // n0x173e c0x0000 (---------------) + I mil
+ 0x00218643, // n0x173f c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1740 c0x0000 (---------------) + I org
+ 0x002702ca, // n0x1741 c0x0000 (---------------) + I parliament
+ 0x00275006, // n0x1742 c0x0000 (---------------) + I school
+ 0x0034244c, // n0x1743 c0x0000 (---------------) + I xn--mori-qsa
+ 0x0009e448, // n0x1744 c0x0000 (---------------) + blogspot
+ 0x00200882, // n0x1745 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x1746 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1747 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1748 c0x0000 (---------------) + I gov
+ 0x00210e83, // n0x1749 c0x0000 (---------------) + I med
+ 0x002c2a06, // n0x174a c0x0000 (---------------) + I museum
+ 0x00218643, // n0x174b c0x0000 (---------------) + I net
+ 0x0024d043, // n0x174c c0x0000 (---------------) + I org
+ 0x002cfc43, // n0x174d c0x0000 (---------------) + I pro
+ 0x0000d2c2, // n0x174e c0x0000 (---------------) + ae
+ 0x000dd187, // n0x174f c0x0000 (---------------) + blogdns
+ 0x000c6308, // n0x1750 c0x0000 (---------------) + blogsite
+ 0x00080ed2, // n0x1751 c0x0000 (---------------) + boldlygoingnowhere
+ 0x000c7a88, // n0x1752 c0x0000 (---------------) + dnsalias
+ 0x00181687, // n0x1753 c0x0000 (---------------) + dnsdojo
+ 0x000146cb, // n0x1754 c0x0000 (---------------) + doesntexist
+ 0x0012cb09, // n0x1755 c0x0000 (---------------) + dontexist
+ 0x000c7987, // n0x1756 c0x0000 (---------------) + doomdns
+ 0x001815c6, // n0x1757 c0x0000 (---------------) + dvrdns
+ 0x00159288, // n0x1758 c0x0000 (---------------) + dynalias
+ 0x3f40dc06, // n0x1759 c0x00fd (n0x1784-n0x1786) + dyndns
+ 0x0009d40d, // n0x175a c0x0000 (---------------) + endofinternet
+ 0x000ed550, // n0x175b c0x0000 (---------------) + endoftheinternet
+ 0x00064987, // n0x175c c0x0000 (---------------) + from-me
+ 0x0008cc89, // n0x175d c0x0000 (---------------) + game-host
+ 0x00052ac6, // n0x175e c0x0000 (---------------) + gotdns
+ 0x000301c2, // n0x175f c0x0000 (---------------) + hk
+ 0x000f45ca, // n0x1760 c0x0000 (---------------) + hobby-site
+ 0x00010e07, // n0x1761 c0x0000 (---------------) + homedns
+ 0x0000ddc7, // n0x1762 c0x0000 (---------------) + homeftp
+ 0x00099409, // n0x1763 c0x0000 (---------------) + homelinux
+ 0x00099ec8, // n0x1764 c0x0000 (---------------) + homeunix
+ 0x000ea54e, // n0x1765 c0x0000 (---------------) + is-a-bruinsfan
+ 0x00017f8e, // n0x1766 c0x0000 (---------------) + is-a-candidate
+ 0x00019ecf, // n0x1767 c0x0000 (---------------) + is-a-celticsfan
+ 0x0001f409, // n0x1768 c0x0000 (---------------) + is-a-chef
+ 0x00047789, // n0x1769 c0x0000 (---------------) + is-a-geek
+ 0x0006b7cb, // n0x176a c0x0000 (---------------) + is-a-knight
+ 0x0012ab0f, // n0x176b c0x0000 (---------------) + is-a-linux-user
+ 0x000a07cc, // n0x176c c0x0000 (---------------) + is-a-patsfan
+ 0x0011690b, // n0x176d c0x0000 (---------------) + is-a-soxfan
+ 0x000d9888, // n0x176e c0x0000 (---------------) + is-found
+ 0x000f1347, // n0x176f c0x0000 (---------------) + is-lost
+ 0x000e3c88, // n0x1770 c0x0000 (---------------) + is-saved
+ 0x0010e28b, // n0x1771 c0x0000 (---------------) + is-very-bad
+ 0x0011cf8c, // n0x1772 c0x0000 (---------------) + is-very-evil
+ 0x0011ff8c, // n0x1773 c0x0000 (---------------) + is-very-good
+ 0x0012708c, // n0x1774 c0x0000 (---------------) + is-very-nice
+ 0x0012bc8d, // n0x1775 c0x0000 (---------------) + is-very-sweet
+ 0x00013e48, // n0x1776 c0x0000 (---------------) + isa-geek
+ 0x00132909, // n0x1777 c0x0000 (---------------) + kicks-ass
+ 0x00151dcb, // n0x1778 c0x0000 (---------------) + misconfused
+ 0x000ccf07, // n0x1779 c0x0000 (---------------) + podzone
+ 0x000c618a, // n0x177a c0x0000 (---------------) + readmyblog
+ 0x00141246, // n0x177b c0x0000 (---------------) + selfip
+ 0x000b8fcd, // n0x177c c0x0000 (---------------) + sellsyourhome
+ 0x0000be88, // n0x177d c0x0000 (---------------) + servebbs
+ 0x0008e548, // n0x177e c0x0000 (---------------) + serveftp
+ 0x0008e7c9, // n0x177f c0x0000 (---------------) + servegame
+ 0x000dd7cc, // n0x1780 c0x0000 (---------------) + stuff-4-sale
+ 0x000073c2, // n0x1781 c0x0000 (---------------) + us
+ 0x0002c186, // n0x1782 c0x0000 (---------------) + webhop
+ 0x000028c2, // n0x1783 c0x0000 (---------------) + za
+ 0x00009ac2, // n0x1784 c0x0000 (---------------) + go
+ 0x0000ddc4, // n0x1785 c0x0000 (---------------) + home
+ 0x00217403, // n0x1786 c0x0000 (---------------) + I abo
+ 0x00200b82, // n0x1787 c0x0000 (---------------) + I ac
+ 0x00232dc3, // n0x1788 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1789 c0x0000 (---------------) + I edu
+ 0x003704c3, // n0x178a c0x0000 (---------------) + I gob
+ 0x00200243, // n0x178b c0x0000 (---------------) + I ing
+ 0x00210e83, // n0x178c c0x0000 (---------------) + I med
+ 0x00218643, // n0x178d c0x0000 (---------------) + I net
+ 0x002104c3, // n0x178e c0x0000 (---------------) + I nom
+ 0x0024d043, // n0x178f c0x0000 (---------------) + I org
+ 0x002d3a83, // n0x1790 c0x0000 (---------------) + I sld
+ 0x00232dc3, // n0x1791 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1792 c0x0000 (---------------) + I edu
+ 0x003704c3, // n0x1793 c0x0000 (---------------) + I gob
+ 0x00240443, // n0x1794 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x1795 c0x0000 (---------------) + I net
+ 0x002104c3, // n0x1796 c0x0000 (---------------) + I nom
+ 0x0024d043, // n0x1797 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x1798 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1799 c0x0000 (---------------) + I edu
+ 0x0024d043, // n0x179a c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x179b c0x0000 (---------------) + I com
+ 0x0021e083, // n0x179c c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x179d c0x0000 (---------------) + I gov
+ 0x00200041, // n0x179e c0x0000 (---------------) + I i
+ 0x00240443, // n0x179f c0x0000 (---------------) + I mil
+ 0x00218643, // n0x17a0 c0x0000 (---------------) + I net
+ 0x0024ad43, // n0x17a1 c0x0000 (---------------) + I ngo
+ 0x0024d043, // n0x17a2 c0x0000 (---------------) + I org
+ 0x00202183, // n0x17a3 c0x0000 (---------------) + I biz
+ 0x00232dc3, // n0x17a4 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x17a5 c0x0000 (---------------) + I edu
+ 0x00291143, // n0x17a6 c0x0000 (---------------) + I fam
+ 0x003704c3, // n0x17a7 c0x0000 (---------------) + I gob
+ 0x00269c03, // n0x17a8 c0x0000 (---------------) + I gok
+ 0x00264203, // n0x17a9 c0x0000 (---------------) + I gon
+ 0x00297e83, // n0x17aa c0x0000 (---------------) + I gop
+ 0x0021dbc3, // n0x17ab c0x0000 (---------------) + I gos
+ 0x00209ac3, // n0x17ac c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x17ad c0x0000 (---------------) + I info
+ 0x00218643, // n0x17ae c0x0000 (---------------) + I net
+ 0x0024d043, // n0x17af c0x0000 (---------------) + I org
+ 0x002071c3, // n0x17b0 c0x0000 (---------------) + I web
+ 0x0036d504, // n0x17b1 c0x0000 (---------------) + I agro
+ 0x0020d643, // n0x17b2 c0x0000 (---------------) + I aid
+ 0x00008d43, // n0x17b3 c0x0000 (---------------) + art
+ 0x00203283, // n0x17b4 c0x0000 (---------------) + I atm
+ 0x002fd708, // n0x17b5 c0x0000 (---------------) + I augustow
+ 0x00262c44, // n0x17b6 c0x0000 (---------------) + I auto
+ 0x002c3e8a, // n0x17b7 c0x0000 (---------------) + I babia-gora
+ 0x0020f9c6, // n0x17b8 c0x0000 (---------------) + I bedzin
+ 0x0037ce07, // n0x17b9 c0x0000 (---------------) + I beskidy
+ 0x0022150a, // n0x17ba c0x0000 (---------------) + I bialowieza
+ 0x0023a5c9, // n0x17bb c0x0000 (---------------) + I bialystok
+ 0x00200007, // n0x17bc c0x0000 (---------------) + I bielawa
+ 0x0020274a, // n0x17bd c0x0000 (---------------) + I bieszczady
+ 0x00202183, // n0x17be c0x0000 (---------------) + I biz
+ 0x002df90b, // n0x17bf c0x0000 (---------------) + I boleslawiec
+ 0x00274409, // n0x17c0 c0x0000 (---------------) + I bydgoszcz
+ 0x002d09c5, // n0x17c1 c0x0000 (---------------) + I bytom
+ 0x002c0747, // n0x17c2 c0x0000 (---------------) + I cieszyn
+ 0x00000882, // n0x17c3 c0x0000 (---------------) + co
+ 0x00232dc3, // n0x17c4 c0x0000 (---------------) + I com
+ 0x0032ea07, // n0x17c5 c0x0000 (---------------) + I czeladz
+ 0x002283c5, // n0x17c6 c0x0000 (---------------) + I czest
+ 0x002b0789, // n0x17c7 c0x0000 (---------------) + I dlugoleka
+ 0x0021e083, // n0x17c8 c0x0000 (---------------) + I edu
+ 0x00228b46, // n0x17c9 c0x0000 (---------------) + I elblag
+ 0x002af303, // n0x17ca c0x0000 (---------------) + I elk
+ 0x00018cc3, // n0x17cb c0x0000 (---------------) + gda
+ 0x000f2c86, // n0x17cc c0x0000 (---------------) + gdansk
+ 0x00166b06, // n0x17cd c0x0000 (---------------) + gdynia
+ 0x000079c7, // n0x17ce c0x0000 (---------------) + gliwice
+ 0x00211506, // n0x17cf c0x0000 (---------------) + I glogow
+ 0x00224f05, // n0x17d0 c0x0000 (---------------) + I gmina
+ 0x00237fc7, // n0x17d1 c0x0000 (---------------) + I gniezno
+ 0x002e4c87, // n0x17d2 c0x0000 (---------------) + I gorlice
+ 0x41209ac3, // n0x17d3 c0x0104 (n0x1856-n0x185f) + I gov
+ 0x00306a07, // n0x17d4 c0x0000 (---------------) + I grajewo
+ 0x0033ba43, // n0x17d5 c0x0000 (---------------) + I gsm
+ 0x0036d945, // n0x17d6 c0x0000 (---------------) + I ilawa
+ 0x00208a44, // n0x17d7 c0x0000 (---------------) + I info
+ 0x0022cfc8, // n0x17d8 c0x0000 (---------------) + I jaworzno
+ 0x003507cc, // n0x17d9 c0x0000 (---------------) + I jelenia-gora
+ 0x002a1b85, // n0x17da c0x0000 (---------------) + I jgora
+ 0x002a6b06, // n0x17db c0x0000 (---------------) + I kalisz
+ 0x0032e8c7, // n0x17dc c0x0000 (---------------) + I karpacz
+ 0x0037bd47, // n0x17dd c0x0000 (---------------) + I kartuzy
+ 0x002061c7, // n0x17de c0x0000 (---------------) + I kaszuby
+ 0x00214008, // n0x17df c0x0000 (---------------) + I katowice
+ 0x00269dcf, // n0x17e0 c0x0000 (---------------) + I kazimierz-dolny
+ 0x00349b45, // n0x17e1 c0x0000 (---------------) + I kepno
+ 0x00241007, // n0x17e2 c0x0000 (---------------) + I ketrzyn
+ 0x00248947, // n0x17e3 c0x0000 (---------------) + I klodzko
+ 0x00298fca, // n0x17e4 c0x0000 (---------------) + I kobierzyce
+ 0x0029a889, // n0x17e5 c0x0000 (---------------) + I kolobrzeg
+ 0x002bd185, // n0x17e6 c0x0000 (---------------) + I konin
+ 0x002c0cca, // n0x17e7 c0x0000 (---------------) + I konskowola
+ 0x000a4106, // n0x17e8 c0x0000 (---------------) + krakow
+ 0x002af385, // n0x17e9 c0x0000 (---------------) + I kutno
+ 0x002b9804, // n0x17ea c0x0000 (---------------) + I lapy
+ 0x00262ac6, // n0x17eb c0x0000 (---------------) + I lebork
+ 0x00278087, // n0x17ec c0x0000 (---------------) + I legnica
+ 0x002dda47, // n0x17ed c0x0000 (---------------) + I lezajsk
+ 0x00345708, // n0x17ee c0x0000 (---------------) + I limanowa
+ 0x002cba85, // n0x17ef c0x0000 (---------------) + I lomza
+ 0x002282c6, // n0x17f0 c0x0000 (---------------) + I lowicz
+ 0x0034cb05, // n0x17f1 c0x0000 (---------------) + I lubin
+ 0x00359945, // n0x17f2 c0x0000 (---------------) + I lukow
+ 0x00214f44, // n0x17f3 c0x0000 (---------------) + I mail
+ 0x0030e687, // n0x17f4 c0x0000 (---------------) + I malbork
+ 0x002f99ca, // n0x17f5 c0x0000 (---------------) + I malopolska
+ 0x002011c8, // n0x17f6 c0x0000 (---------------) + I mazowsze
+ 0x002df1c6, // n0x17f7 c0x0000 (---------------) + I mazury
+ 0x00010e83, // n0x17f8 c0x0000 (---------------) + med
+ 0x0021e585, // n0x17f9 c0x0000 (---------------) + I media
+ 0x0029dd46, // n0x17fa c0x0000 (---------------) + I miasta
+ 0x00201f86, // n0x17fb c0x0000 (---------------) + I mielec
+ 0x0030a3c6, // n0x17fc c0x0000 (---------------) + I mielno
+ 0x00240443, // n0x17fd c0x0000 (---------------) + I mil
+ 0x00353f87, // n0x17fe c0x0000 (---------------) + I mragowo
+ 0x002488c5, // n0x17ff c0x0000 (---------------) + I naklo
+ 0x00218643, // n0x1800 c0x0000 (---------------) + I net
+ 0x0026f98d, // n0x1801 c0x0000 (---------------) + I nieruchomosci
+ 0x002104c3, // n0x1802 c0x0000 (---------------) + I nom
+ 0x00345808, // n0x1803 c0x0000 (---------------) + I nowaruda
+ 0x00233644, // n0x1804 c0x0000 (---------------) + I nysa
+ 0x0026ee45, // n0x1805 c0x0000 (---------------) + I olawa
+ 0x00298ec6, // n0x1806 c0x0000 (---------------) + I olecko
+ 0x00275106, // n0x1807 c0x0000 (---------------) + I olkusz
+ 0x0021ce87, // n0x1808 c0x0000 (---------------) + I olsztyn
+ 0x0023a907, // n0x1809 c0x0000 (---------------) + I opoczno
+ 0x00297245, // n0x180a c0x0000 (---------------) + I opole
+ 0x0024d043, // n0x180b c0x0000 (---------------) + I org
+ 0x00217287, // n0x180c c0x0000 (---------------) + I ostroda
+ 0x0021c3c9, // n0x180d c0x0000 (---------------) + I ostroleka
+ 0x0021dc09, // n0x180e c0x0000 (---------------) + I ostrowiec
+ 0x0022b40a, // n0x180f c0x0000 (---------------) + I ostrowwlkp
+ 0x0021c6c2, // n0x1810 c0x0000 (---------------) + I pc
+ 0x0036d904, // n0x1811 c0x0000 (---------------) + I pila
+ 0x002c9884, // n0x1812 c0x0000 (---------------) + I pisz
+ 0x00242907, // n0x1813 c0x0000 (---------------) + I podhale
+ 0x002cc648, // n0x1814 c0x0000 (---------------) + I podlasie
+ 0x002cd309, // n0x1815 c0x0000 (---------------) + I polkowice
+ 0x00221809, // n0x1816 c0x0000 (---------------) + I pomorskie
+ 0x002cda47, // n0x1817 c0x0000 (---------------) + I pomorze
+ 0x00226a06, // n0x1818 c0x0000 (---------------) + I powiat
+ 0x000cf186, // n0x1819 c0x0000 (---------------) + poznan
+ 0x002cfac4, // n0x181a c0x0000 (---------------) + I priv
+ 0x002cfc4a, // n0x181b c0x0000 (---------------) + I prochowice
+ 0x002d3048, // n0x181c c0x0000 (---------------) + I pruszkow
+ 0x002d3249, // n0x181d c0x0000 (---------------) + I przeworsk
+ 0x002a9786, // n0x181e c0x0000 (---------------) + I pulawy
+ 0x002fdd05, // n0x181f c0x0000 (---------------) + I radom
+ 0x00201088, // n0x1820 c0x0000 (---------------) + I rawa-maz
+ 0x002b614a, // n0x1821 c0x0000 (---------------) + I realestate
+ 0x0027f043, // n0x1822 c0x0000 (---------------) + I rel
+ 0x00273646, // n0x1823 c0x0000 (---------------) + I rybnik
+ 0x002cdb47, // n0x1824 c0x0000 (---------------) + I rzeszow
+ 0x003795c5, // n0x1825 c0x0000 (---------------) + I sanok
+ 0x002546c5, // n0x1826 c0x0000 (---------------) + I sejny
+ 0x0022ae43, // n0x1827 c0x0000 (---------------) + I sex
+ 0x0022e644, // n0x1828 c0x0000 (---------------) + I shop
+ 0x0022b1c5, // n0x1829 c0x0000 (---------------) + I sklep
+ 0x0027c807, // n0x182a c0x0000 (---------------) + I skoczow
+ 0x002e74c5, // n0x182b c0x0000 (---------------) + I slask
+ 0x00331b86, // n0x182c c0x0000 (---------------) + I slupsk
+ 0x000d5645, // n0x182d c0x0000 (---------------) + sopot
+ 0x002624c3, // n0x182e c0x0000 (---------------) + I sos
+ 0x002624c9, // n0x182f c0x0000 (---------------) + I sosnowiec
+ 0x0026ec0c, // n0x1830 c0x0000 (---------------) + I stalowa-wola
+ 0x002e088c, // n0x1831 c0x0000 (---------------) + I starachowice
+ 0x002bd588, // n0x1832 c0x0000 (---------------) + I stargard
+ 0x002add87, // n0x1833 c0x0000 (---------------) + I suwalki
+ 0x002e2048, // n0x1834 c0x0000 (---------------) + I swidnica
+ 0x002e238a, // n0x1835 c0x0000 (---------------) + I swiebodzin
+ 0x002e2b0b, // n0x1836 c0x0000 (---------------) + I swinoujscie
+ 0x00274548, // n0x1837 c0x0000 (---------------) + I szczecin
+ 0x002a6c08, // n0x1838 c0x0000 (---------------) + I szczytno
+ 0x003818c6, // n0x1839 c0x0000 (---------------) + I szkola
+ 0x002fb5c5, // n0x183a c0x0000 (---------------) + I targi
+ 0x0036384a, // n0x183b c0x0000 (---------------) + I tarnobrzeg
+ 0x002276c5, // n0x183c c0x0000 (---------------) + I tgory
+ 0x002032c2, // n0x183d c0x0000 (---------------) + I tm
+ 0x002b3cc7, // n0x183e c0x0000 (---------------) + I tourism
+ 0x00290186, // n0x183f c0x0000 (---------------) + I travel
+ 0x00332305, // n0x1840 c0x0000 (---------------) + I turek
+ 0x002e4149, // n0x1841 c0x0000 (---------------) + I turystyka
+ 0x00232f85, // n0x1842 c0x0000 (---------------) + I tychy
+ 0x0029cf05, // n0x1843 c0x0000 (---------------) + I ustka
+ 0x002fc789, // n0x1844 c0x0000 (---------------) + I walbrzych
+ 0x0033e5c6, // n0x1845 c0x0000 (---------------) + I warmia
+ 0x0025e288, // n0x1846 c0x0000 (---------------) + I warszawa
+ 0x00276e43, // n0x1847 c0x0000 (---------------) + I waw
+ 0x00211646, // n0x1848 c0x0000 (---------------) + I wegrow
+ 0x0026dcc6, // n0x1849 c0x0000 (---------------) + I wielun
+ 0x0029a685, // n0x184a c0x0000 (---------------) + I wlocl
+ 0x0029a689, // n0x184b c0x0000 (---------------) + I wloclawek
+ 0x0029dfc9, // n0x184c c0x0000 (---------------) + I wodzislaw
+ 0x00255e47, // n0x184d c0x0000 (---------------) + I wolomin
+ 0x000a4244, // n0x184e c0x0000 (---------------) + wroc
+ 0x002a4247, // n0x184f c0x0000 (---------------) + I wroclaw
+ 0x00221709, // n0x1850 c0x0000 (---------------) + I zachpomor
+ 0x0023d0c5, // n0x1851 c0x0000 (---------------) + I zagan
+ 0x00043988, // n0x1852 c0x0000 (---------------) + zakopane
+ 0x0035fa45, // n0x1853 c0x0000 (---------------) + I zarow
+ 0x0022af45, // n0x1854 c0x0000 (---------------) + I zgora
+ 0x0022db89, // n0x1855 c0x0000 (---------------) + I zgorzelec
+ 0x00200ac2, // n0x1856 c0x0000 (---------------) + I pa
+ 0x002167c2, // n0x1857 c0x0000 (---------------) + I po
+ 0x00209f02, // n0x1858 c0x0000 (---------------) + I so
+ 0x002dc282, // n0x1859 c0x0000 (---------------) + I sr
+ 0x0029de09, // n0x185a c0x0000 (---------------) + I starostwo
+ 0x00201b02, // n0x185b c0x0000 (---------------) + I ug
+ 0x00200f02, // n0x185c c0x0000 (---------------) + I um
+ 0x002269c4, // n0x185d c0x0000 (---------------) + I upow
+ 0x0023f482, // n0x185e c0x0000 (---------------) + I uw
+ 0x00200882, // n0x185f c0x0000 (---------------) + I co
+ 0x0021e083, // n0x1860 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1861 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x1862 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1863 c0x0000 (---------------) + I org
+ 0x00200b82, // n0x1864 c0x0000 (---------------) + I ac
+ 0x00202183, // n0x1865 c0x0000 (---------------) + I biz
+ 0x00232dc3, // n0x1866 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1867 c0x0000 (---------------) + I edu
+ 0x00209c03, // n0x1868 c0x0000 (---------------) + I est
+ 0x00209ac3, // n0x1869 c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x186a c0x0000 (---------------) + I info
+ 0x0029e0c4, // n0x186b c0x0000 (---------------) + I isla
+ 0x00267944, // n0x186c c0x0000 (---------------) + I name
+ 0x00218643, // n0x186d c0x0000 (---------------) + I net
+ 0x0024d043, // n0x186e c0x0000 (---------------) + I org
+ 0x002cfc43, // n0x186f c0x0000 (---------------) + I pro
+ 0x002d0d84, // n0x1870 c0x0000 (---------------) + I prof
+ 0x002bfb83, // n0x1871 c0x0000 (---------------) + I aca
+ 0x00210ac3, // n0x1872 c0x0000 (---------------) + I bar
+ 0x002256c3, // n0x1873 c0x0000 (---------------) + I cpa
+ 0x002abd43, // n0x1874 c0x0000 (---------------) + I eng
+ 0x002a3043, // n0x1875 c0x0000 (---------------) + I jur
+ 0x002000c3, // n0x1876 c0x0000 (---------------) + I law
+ 0x00210e83, // n0x1877 c0x0000 (---------------) + I med
+ 0x00232dc3, // n0x1878 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1879 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x187a c0x0000 (---------------) + I gov
+ 0x00218643, // n0x187b c0x0000 (---------------) + I net
+ 0x0024d043, // n0x187c c0x0000 (---------------) + I org
+ 0x002cba43, // n0x187d c0x0000 (---------------) + I plo
+ 0x002e6143, // n0x187e c0x0000 (---------------) + I sec
+ 0x0009e448, // n0x187f c0x0000 (---------------) + blogspot
+ 0x00232dc3, // n0x1880 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1881 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1882 c0x0000 (---------------) + I gov
+ 0x002188c3, // n0x1883 c0x0000 (---------------) + I int
+ 0x00218643, // n0x1884 c0x0000 (---------------) + I net
+ 0x0023e704, // n0x1885 c0x0000 (---------------) + I nome
+ 0x0024d043, // n0x1886 c0x0000 (---------------) + I org
+ 0x002d7ec4, // n0x1887 c0x0000 (---------------) + I publ
+ 0x002aa845, // n0x1888 c0x0000 (---------------) + I belau
+ 0x00200882, // n0x1889 c0x0000 (---------------) + I co
+ 0x00205742, // n0x188a c0x0000 (---------------) + I ed
+ 0x00209ac2, // n0x188b c0x0000 (---------------) + I go
+ 0x00209e82, // n0x188c c0x0000 (---------------) + I ne
+ 0x00200d02, // n0x188d c0x0000 (---------------) + I or
+ 0x00232dc3, // n0x188e c0x0000 (---------------) + I com
+ 0x0023a884, // n0x188f c0x0000 (---------------) + I coop
+ 0x0021e083, // n0x1890 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1891 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x1892 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x1893 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1894 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x1895 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1896 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1897 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x1898 c0x0000 (---------------) + I mil
+ 0x00267944, // n0x1899 c0x0000 (---------------) + I name
+ 0x00218643, // n0x189a c0x0000 (---------------) + I net
+ 0x0024d043, // n0x189b c0x0000 (---------------) + I org
+ 0x00251983, // n0x189c c0x0000 (---------------) + I sch
+ 0x00278344, // n0x189d c0x0000 (---------------) + I asso
+ 0x0009e448, // n0x189e c0x0000 (---------------) + blogspot
+ 0x00232dc3, // n0x189f c0x0000 (---------------) + I com
+ 0x002104c3, // n0x18a0 c0x0000 (---------------) + I nom
+ 0x0020b384, // n0x18a1 c0x0000 (---------------) + I arts
+ 0x0009e448, // n0x18a2 c0x0000 (---------------) + blogspot
+ 0x00232dc3, // n0x18a3 c0x0000 (---------------) + I com
+ 0x0024a304, // n0x18a4 c0x0000 (---------------) + I firm
+ 0x00208a44, // n0x18a5 c0x0000 (---------------) + I info
+ 0x002104c3, // n0x18a6 c0x0000 (---------------) + I nom
+ 0x00200902, // n0x18a7 c0x0000 (---------------) + I nt
+ 0x0024d043, // n0x18a8 c0x0000 (---------------) + I org
+ 0x0022a143, // n0x18a9 c0x0000 (---------------) + I rec
+ 0x002dc745, // n0x18aa c0x0000 (---------------) + I store
+ 0x002032c2, // n0x18ab c0x0000 (---------------) + I tm
+ 0x002b1c03, // n0x18ac c0x0000 (---------------) + I www
+ 0x00200b82, // n0x18ad c0x0000 (---------------) + I ac
+ 0x00200882, // n0x18ae c0x0000 (---------------) + I co
+ 0x0021e083, // n0x18af c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x18b0 c0x0000 (---------------) + I gov
+ 0x00200242, // n0x18b1 c0x0000 (---------------) + I in
+ 0x0024d043, // n0x18b2 c0x0000 (---------------) + I org
+ 0x00200b82, // n0x18b3 c0x0000 (---------------) + I ac
+ 0x00202907, // n0x18b4 c0x0000 (---------------) + I adygeya
+ 0x0036d205, // n0x18b5 c0x0000 (---------------) + I altai
+ 0x002340c4, // n0x18b6 c0x0000 (---------------) + I amur
+ 0x00332486, // n0x18b7 c0x0000 (---------------) + I amursk
+ 0x002ff34b, // n0x18b8 c0x0000 (---------------) + I arkhangelsk
+ 0x00231d89, // n0x18b9 c0x0000 (---------------) + I astrakhan
+ 0x002a6a46, // n0x18ba c0x0000 (---------------) + I baikal
+ 0x00334709, // n0x18bb c0x0000 (---------------) + I bashkiria
+ 0x002c4cc8, // n0x18bc c0x0000 (---------------) + I belgorod
+ 0x00208c43, // n0x18bd c0x0000 (---------------) + I bir
+ 0x0009e448, // n0x18be c0x0000 (---------------) + blogspot
+ 0x0022b087, // n0x18bf c0x0000 (---------------) + I bryansk
+ 0x002295c8, // n0x18c0 c0x0000 (---------------) + I buryatia
+ 0x0033ffc3, // n0x18c1 c0x0000 (---------------) + I cbg
+ 0x00313944, // n0x18c2 c0x0000 (---------------) + I chel
+ 0x0034c18b, // n0x18c3 c0x0000 (---------------) + I chelyabinsk
+ 0x00276ac5, // n0x18c4 c0x0000 (---------------) + I chita
+ 0x00205b48, // n0x18c5 c0x0000 (---------------) + I chukotka
+ 0x0031d989, // n0x18c6 c0x0000 (---------------) + I chuvashia
+ 0x002a4443, // n0x18c7 c0x0000 (---------------) + I cmw
+ 0x00232dc3, // n0x18c8 c0x0000 (---------------) + I com
+ 0x00344008, // n0x18c9 c0x0000 (---------------) + I dagestan
+ 0x00275b87, // n0x18ca c0x0000 (---------------) + I dudinka
+ 0x002db146, // n0x18cb c0x0000 (---------------) + I e-burg
+ 0x0021e083, // n0x18cc c0x0000 (---------------) + I edu
+ 0x002fa247, // n0x18cd c0x0000 (---------------) + I fareast
+ 0x00209ac3, // n0x18ce c0x0000 (---------------) + I gov
+ 0x00239d46, // n0x18cf c0x0000 (---------------) + I grozny
+ 0x002188c3, // n0x18d0 c0x0000 (---------------) + I int
+ 0x0022ec87, // n0x18d1 c0x0000 (---------------) + I irkutsk
+ 0x002fec47, // n0x18d2 c0x0000 (---------------) + I ivanovo
+ 0x0035ad47, // n0x18d3 c0x0000 (---------------) + I izhevsk
+ 0x0030e605, // n0x18d4 c0x0000 (---------------) + I jamal
+ 0x00203fc3, // n0x18d5 c0x0000 (---------------) + I jar
+ 0x002a888b, // n0x18d6 c0x0000 (---------------) + I joshkar-ola
+ 0x0036e648, // n0x18d7 c0x0000 (---------------) + I k-uralsk
+ 0x002246c8, // n0x18d8 c0x0000 (---------------) + I kalmykia
+ 0x0022f506, // n0x18d9 c0x0000 (---------------) + I kaluga
+ 0x0020f049, // n0x18da c0x0000 (---------------) + I kamchatka
+ 0x00343107, // n0x18db c0x0000 (---------------) + I karelia
+ 0x002f1805, // n0x18dc c0x0000 (---------------) + I kazan
+ 0x00351684, // n0x18dd c0x0000 (---------------) + I kchr
+ 0x00360a48, // n0x18de c0x0000 (---------------) + I kemerovo
+ 0x0023cb0a, // n0x18df c0x0000 (---------------) + I khabarovsk
+ 0x0023cd49, // n0x18e0 c0x0000 (---------------) + I khakassia
+ 0x00267283, // n0x18e1 c0x0000 (---------------) + I khv
+ 0x0022d7c5, // n0x18e2 c0x0000 (---------------) + I kirov
+ 0x00286643, // n0x18e3 c0x0000 (---------------) + I kms
+ 0x002d2bc6, // n0x18e4 c0x0000 (---------------) + I koenig
+ 0x002a1884, // n0x18e5 c0x0000 (---------------) + I komi
+ 0x002f4e48, // n0x18e6 c0x0000 (---------------) + I kostroma
+ 0x002a470b, // n0x18e7 c0x0000 (---------------) + I krasnoyarsk
+ 0x00327605, // n0x18e8 c0x0000 (---------------) + I kuban
+ 0x002aa5c6, // n0x18e9 c0x0000 (---------------) + I kurgan
+ 0x002ad2c5, // n0x18ea c0x0000 (---------------) + I kursk
+ 0x002ae788, // n0x18eb c0x0000 (---------------) + I kustanai
+ 0x002af4c7, // n0x18ec c0x0000 (---------------) + I kuzbass
+ 0x00369d07, // n0x18ed c0x0000 (---------------) + I lipetsk
+ 0x0030ab07, // n0x18ee c0x0000 (---------------) + I magadan
+ 0x00213608, // n0x18ef c0x0000 (---------------) + I magnitka
+ 0x0023d384, // n0x18f0 c0x0000 (---------------) + I mari
+ 0x0023d387, // n0x18f1 c0x0000 (---------------) + I mari-el
+ 0x0033f146, // n0x18f2 c0x0000 (---------------) + I marine
+ 0x00240443, // n0x18f3 c0x0000 (---------------) + I mil
+ 0x002b8708, // n0x18f4 c0x0000 (---------------) + I mordovia
+ 0x0024e983, // n0x18f5 c0x0000 (---------------) + I msk
+ 0x002c0b08, // n0x18f6 c0x0000 (---------------) + I murmansk
+ 0x002c4305, // n0x18f7 c0x0000 (---------------) + I mytis
+ 0x002cbfc8, // n0x18f8 c0x0000 (---------------) + I nakhodka
+ 0x0021e287, // n0x18f9 c0x0000 (---------------) + I nalchik
+ 0x00218643, // n0x18fa c0x0000 (---------------) + I net
+ 0x00371383, // n0x18fb c0x0000 (---------------) + I nkz
+ 0x00283004, // n0x18fc c0x0000 (---------------) + I nnov
+ 0x00200cc7, // n0x18fd c0x0000 (---------------) + I norilsk
+ 0x0020a143, // n0x18fe c0x0000 (---------------) + I nov
+ 0x002fed0b, // n0x18ff c0x0000 (---------------) + I novosibirsk
+ 0x0020ae83, // n0x1900 c0x0000 (---------------) + I nsk
+ 0x0024e944, // n0x1901 c0x0000 (---------------) + I omsk
+ 0x002dc7c8, // n0x1902 c0x0000 (---------------) + I orenburg
+ 0x0024d043, // n0x1903 c0x0000 (---------------) + I org
+ 0x002dba85, // n0x1904 c0x0000 (---------------) + I oryol
+ 0x002f5205, // n0x1905 c0x0000 (---------------) + I oskol
+ 0x00203346, // n0x1906 c0x0000 (---------------) + I palana
+ 0x00212f85, // n0x1907 c0x0000 (---------------) + I penza
+ 0x002c46c4, // n0x1908 c0x0000 (---------------) + I perm
+ 0x00200a82, // n0x1909 c0x0000 (---------------) + I pp
+ 0x002d3503, // n0x190a c0x0000 (---------------) + I ptz
+ 0x002b988a, // n0x190b c0x0000 (---------------) + I pyatigorsk
+ 0x0032e3c3, // n0x190c c0x0000 (---------------) + I rnd
+ 0x00360f89, // n0x190d c0x0000 (---------------) + I rubtsovsk
+ 0x002374c6, // n0x190e c0x0000 (---------------) + I ryazan
+ 0x00223048, // n0x190f c0x0000 (---------------) + I sakhalin
+ 0x00284d46, // n0x1910 c0x0000 (---------------) + I samara
+ 0x00246287, // n0x1911 c0x0000 (---------------) + I saratov
+ 0x00316648, // n0x1912 c0x0000 (---------------) + I simbirsk
+ 0x002b3e08, // n0x1913 c0x0000 (---------------) + I smolensk
+ 0x00339f83, // n0x1914 c0x0000 (---------------) + I snz
+ 0x002d9bc3, // n0x1915 c0x0000 (---------------) + I spb
+ 0x0023dbc9, // n0x1916 c0x0000 (---------------) + I stavropol
+ 0x002eb3c3, // n0x1917 c0x0000 (---------------) + I stv
+ 0x002d0506, // n0x1918 c0x0000 (---------------) + I surgut
+ 0x0037e7c6, // n0x1919 c0x0000 (---------------) + I syzran
+ 0x00366046, // n0x191a c0x0000 (---------------) + I tambov
+ 0x00210249, // n0x191b c0x0000 (---------------) + I tatarstan
+ 0x0029e284, // n0x191c c0x0000 (---------------) + I test
+ 0x0022bac3, // n0x191d c0x0000 (---------------) + I tom
+ 0x00337545, // n0x191e c0x0000 (---------------) + I tomsk
+ 0x00378609, // n0x191f c0x0000 (---------------) + I tsaritsyn
+ 0x0021d443, // n0x1920 c0x0000 (---------------) + I tsk
+ 0x002e3e84, // n0x1921 c0x0000 (---------------) + I tula
+ 0x002e5704, // n0x1922 c0x0000 (---------------) + I tuva
+ 0x002e5c44, // n0x1923 c0x0000 (---------------) + I tver
+ 0x002d2ec6, // n0x1924 c0x0000 (---------------) + I tyumen
+ 0x00365503, // n0x1925 c0x0000 (---------------) + I udm
+ 0x00365508, // n0x1926 c0x0000 (---------------) + I udmurtia
+ 0x00254408, // n0x1927 c0x0000 (---------------) + I ulan-ude
+ 0x002e6a86, // n0x1928 c0x0000 (---------------) + I vdonsk
+ 0x002f160b, // n0x1929 c0x0000 (---------------) + I vladikavkaz
+ 0x002f1948, // n0x192a c0x0000 (---------------) + I vladimir
+ 0x002f1b4b, // n0x192b c0x0000 (---------------) + I vladivostok
+ 0x002f22c9, // n0x192c c0x0000 (---------------) + I volgograd
+ 0x002f2b87, // n0x192d c0x0000 (---------------) + I vologda
+ 0x002f3908, // n0x192e c0x0000 (---------------) + I voronezh
+ 0x002f4843, // n0x192f c0x0000 (---------------) + I vrn
+ 0x00204a86, // n0x1930 c0x0000 (---------------) + I vyatka
+ 0x002e5547, // n0x1931 c0x0000 (---------------) + I yakutia
+ 0x0028db05, // n0x1932 c0x0000 (---------------) + I yamal
+ 0x00326a09, // n0x1933 c0x0000 (---------------) + I yaroslavl
+ 0x0036680d, // n0x1934 c0x0000 (---------------) + I yekaterinburg
+ 0x00222e91, // n0x1935 c0x0000 (---------------) + I yuzhno-sakhalinsk
+ 0x0023af45, // n0x1936 c0x0000 (---------------) + I zgrad
+ 0x00200b82, // n0x1937 c0x0000 (---------------) + I ac
+ 0x00200882, // n0x1938 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x1939 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x193a c0x0000 (---------------) + I edu
+ 0x00252544, // n0x193b c0x0000 (---------------) + I gouv
+ 0x00209ac3, // n0x193c c0x0000 (---------------) + I gov
+ 0x002188c3, // n0x193d c0x0000 (---------------) + I int
+ 0x00240443, // n0x193e c0x0000 (---------------) + I mil
+ 0x00218643, // n0x193f c0x0000 (---------------) + I net
+ 0x00232dc3, // n0x1940 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1941 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1942 c0x0000 (---------------) + I gov
+ 0x00210e83, // n0x1943 c0x0000 (---------------) + I med
+ 0x00218643, // n0x1944 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1945 c0x0000 (---------------) + I org
+ 0x0025dbc3, // n0x1946 c0x0000 (---------------) + I pub
+ 0x00251983, // n0x1947 c0x0000 (---------------) + I sch
+ 0x00232dc3, // n0x1948 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1949 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x194a c0x0000 (---------------) + I gov
+ 0x00218643, // n0x194b c0x0000 (---------------) + I net
+ 0x0024d043, // n0x194c c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x194d c0x0000 (---------------) + I com
+ 0x0021e083, // n0x194e c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x194f c0x0000 (---------------) + I gov
+ 0x00218643, // n0x1950 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1951 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x1952 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1953 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1954 c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x1955 c0x0000 (---------------) + I info
+ 0x00210e83, // n0x1956 c0x0000 (---------------) + I med
+ 0x00218643, // n0x1957 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1958 c0x0000 (---------------) + I org
+ 0x0028dc82, // n0x1959 c0x0000 (---------------) + I tv
+ 0x00200101, // n0x195a c0x0000 (---------------) + I a
+ 0x00200b82, // n0x195b c0x0000 (---------------) + I ac
+ 0x00200001, // n0x195c c0x0000 (---------------) + I b
+ 0x00303202, // n0x195d c0x0000 (---------------) + I bd
+ 0x0009e448, // n0x195e c0x0000 (---------------) + blogspot
+ 0x0021e6c5, // n0x195f c0x0000 (---------------) + I brand
+ 0x00200401, // n0x1960 c0x0000 (---------------) + I c
+ 0x00032dc3, // n0x1961 c0x0000 (---------------) + com
+ 0x002003c1, // n0x1962 c0x0000 (---------------) + I d
+ 0x00200081, // n0x1963 c0x0000 (---------------) + I e
+ 0x00203841, // n0x1964 c0x0000 (---------------) + I f
+ 0x00246f02, // n0x1965 c0x0000 (---------------) + I fh
+ 0x00379704, // n0x1966 c0x0000 (---------------) + I fhsk
+ 0x00246f03, // n0x1967 c0x0000 (---------------) + I fhv
+ 0x002002c1, // n0x1968 c0x0000 (---------------) + I g
+ 0x00200201, // n0x1969 c0x0000 (---------------) + I h
+ 0x00200041, // n0x196a c0x0000 (---------------) + I i
+ 0x00200481, // n0x196b c0x0000 (---------------) + I k
+ 0x0032cec7, // n0x196c c0x0000 (---------------) + I komforb
+ 0x002c114f, // n0x196d c0x0000 (---------------) + I kommunalforbund
+ 0x002b9ac6, // n0x196e c0x0000 (---------------) + I komvux
+ 0x002000c1, // n0x196f c0x0000 (---------------) + I l
+ 0x00381b06, // n0x1970 c0x0000 (---------------) + I lanbib
+ 0x00200f41, // n0x1971 c0x0000 (---------------) + I m
+ 0x00200281, // n0x1972 c0x0000 (---------------) + I n
+ 0x0031a18e, // n0x1973 c0x0000 (---------------) + I naturbruksgymn
+ 0x00200341, // n0x1974 c0x0000 (---------------) + I o
+ 0x0024d043, // n0x1975 c0x0000 (---------------) + I org
+ 0x00200a81, // n0x1976 c0x0000 (---------------) + I p
+ 0x00297f05, // n0x1977 c0x0000 (---------------) + I parti
+ 0x00200a82, // n0x1978 c0x0000 (---------------) + I pp
+ 0x0022ad45, // n0x1979 c0x0000 (---------------) + I press
+ 0x002006c1, // n0x197a c0x0000 (---------------) + I r
+ 0x002001c1, // n0x197b c0x0000 (---------------) + I s
+ 0x00200301, // n0x197c c0x0000 (---------------) + I t
+ 0x002032c2, // n0x197d c0x0000 (---------------) + I tm
+ 0x00200541, // n0x197e c0x0000 (---------------) + I u
+ 0x00200141, // n0x197f c0x0000 (---------------) + I w
+ 0x002013c1, // n0x1980 c0x0000 (---------------) + I x
+ 0x00202981, // n0x1981 c0x0000 (---------------) + I y
+ 0x00201241, // n0x1982 c0x0000 (---------------) + I z
+ 0x0009e448, // n0x1983 c0x0000 (---------------) + blogspot
+ 0x00232dc3, // n0x1984 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1985 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1986 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x1987 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1988 c0x0000 (---------------) + I org
+ 0x0020c783, // n0x1989 c0x0000 (---------------) + I per
+ 0x00232dc3, // n0x198a c0x0000 (---------------) + I com
+ 0x00209ac3, // n0x198b c0x0000 (---------------) + I gov
+ 0x00240443, // n0x198c c0x0000 (---------------) + I mil
+ 0x00218643, // n0x198d c0x0000 (---------------) + I net
+ 0x0024d043, // n0x198e c0x0000 (---------------) + I org
+ 0x0009e448, // n0x198f c0x0000 (---------------) + blogspot
+ 0x00232dc3, // n0x1990 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1991 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1992 c0x0000 (---------------) + I gov
+ 0x00218643, // n0x1993 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1994 c0x0000 (---------------) + I org
+ 0x00208d43, // n0x1995 c0x0000 (---------------) + I art
+ 0x00232dc3, // n0x1996 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1997 c0x0000 (---------------) + I edu
+ 0x00252544, // n0x1998 c0x0000 (---------------) + I gouv
+ 0x0024d043, // n0x1999 c0x0000 (---------------) + I org
+ 0x002a80c5, // n0x199a c0x0000 (---------------) + I perso
+ 0x003826c4, // n0x199b c0x0000 (---------------) + I univ
+ 0x00232dc3, // n0x199c c0x0000 (---------------) + I com
+ 0x00218643, // n0x199d c0x0000 (---------------) + I net
+ 0x0024d043, // n0x199e c0x0000 (---------------) + I org
+ 0x00200882, // n0x199f c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x19a0 c0x0000 (---------------) + I com
+ 0x00235e09, // n0x19a1 c0x0000 (---------------) + I consulado
+ 0x0021e083, // n0x19a2 c0x0000 (---------------) + I edu
+ 0x002aaf09, // n0x19a3 c0x0000 (---------------) + I embaixada
+ 0x00209ac3, // n0x19a4 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x19a5 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x19a6 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x19a7 c0x0000 (---------------) + I org
+ 0x002cf8c8, // n0x19a8 c0x0000 (---------------) + I principe
+ 0x00241fc7, // n0x19a9 c0x0000 (---------------) + I saotome
+ 0x002dc745, // n0x19aa c0x0000 (---------------) + I store
+ 0x00232dc3, // n0x19ab c0x0000 (---------------) + I com
+ 0x0021e083, // n0x19ac c0x0000 (---------------) + I edu
+ 0x003704c3, // n0x19ad c0x0000 (---------------) + I gob
+ 0x0024d043, // n0x19ae c0x0000 (---------------) + I org
+ 0x0023fbc3, // n0x19af c0x0000 (---------------) + I red
+ 0x00209ac3, // n0x19b0 c0x0000 (---------------) + I gov
+ 0x00232dc3, // n0x19b1 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x19b2 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x19b3 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x19b4 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x19b5 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x19b6 c0x0000 (---------------) + I org
+ 0x00200b82, // n0x19b7 c0x0000 (---------------) + I ac
+ 0x00200882, // n0x19b8 c0x0000 (---------------) + I co
+ 0x0024d043, // n0x19b9 c0x0000 (---------------) + I org
+ 0x0009e448, // n0x19ba c0x0000 (---------------) + blogspot
+ 0x00200b82, // n0x19bb c0x0000 (---------------) + I ac
+ 0x00200882, // n0x19bc c0x0000 (---------------) + I co
+ 0x00209ac2, // n0x19bd c0x0000 (---------------) + I go
+ 0x00200242, // n0x19be c0x0000 (---------------) + I in
+ 0x00200f42, // n0x19bf c0x0000 (---------------) + I mi
+ 0x00218643, // n0x19c0 c0x0000 (---------------) + I net
+ 0x00200d02, // n0x19c1 c0x0000 (---------------) + I or
+ 0x00200b82, // n0x19c2 c0x0000 (---------------) + I ac
+ 0x00202183, // n0x19c3 c0x0000 (---------------) + I biz
+ 0x00200882, // n0x19c4 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x19c5 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x19c6 c0x0000 (---------------) + I edu
+ 0x00209ac2, // n0x19c7 c0x0000 (---------------) + I go
+ 0x00209ac3, // n0x19c8 c0x0000 (---------------) + I gov
+ 0x002188c3, // n0x19c9 c0x0000 (---------------) + I int
+ 0x00240443, // n0x19ca c0x0000 (---------------) + I mil
+ 0x00267944, // n0x19cb c0x0000 (---------------) + I name
+ 0x00218643, // n0x19cc c0x0000 (---------------) + I net
+ 0x00219583, // n0x19cd c0x0000 (---------------) + I nic
+ 0x0024d043, // n0x19ce c0x0000 (---------------) + I org
+ 0x0029e284, // n0x19cf c0x0000 (---------------) + I test
+ 0x002071c3, // n0x19d0 c0x0000 (---------------) + I web
+ 0x00209ac3, // n0x19d1 c0x0000 (---------------) + I gov
+ 0x00200882, // n0x19d2 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x19d3 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x19d4 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x19d5 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x19d6 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x19d7 c0x0000 (---------------) + I net
+ 0x002104c3, // n0x19d8 c0x0000 (---------------) + I nom
+ 0x0024d043, // n0x19d9 c0x0000 (---------------) + I org
+ 0x00371147, // n0x19da c0x0000 (---------------) + I agrinet
+ 0x00232dc3, // n0x19db c0x0000 (---------------) + I com
+ 0x00254587, // n0x19dc c0x0000 (---------------) + I defense
+ 0x0030cc46, // n0x19dd c0x0000 (---------------) + I edunet
+ 0x0020ae43, // n0x19de c0x0000 (---------------) + I ens
+ 0x00206f03, // n0x19df c0x0000 (---------------) + I fin
+ 0x00209ac3, // n0x19e0 c0x0000 (---------------) + I gov
+ 0x002202c3, // n0x19e1 c0x0000 (---------------) + I ind
+ 0x00208a44, // n0x19e2 c0x0000 (---------------) + I info
+ 0x002ea3c4, // n0x19e3 c0x0000 (---------------) + I intl
+ 0x002ca586, // n0x19e4 c0x0000 (---------------) + I mincom
+ 0x0020f603, // n0x19e5 c0x0000 (---------------) + I nat
+ 0x00218643, // n0x19e6 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x19e7 c0x0000 (---------------) + I org
+ 0x002a80c5, // n0x19e8 c0x0000 (---------------) + I perso
+ 0x0021cc84, // n0x19e9 c0x0000 (---------------) + I rnrt
+ 0x002273c3, // n0x19ea c0x0000 (---------------) + I rns
+ 0x0037bb83, // n0x19eb c0x0000 (---------------) + I rnu
+ 0x002b3cc7, // n0x19ec c0x0000 (---------------) + I tourism
+ 0x002ee1c5, // n0x19ed c0x0000 (---------------) + I turen
+ 0x00232dc3, // n0x19ee c0x0000 (---------------) + I com
+ 0x0021e083, // n0x19ef c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x19f0 c0x0000 (---------------) + I gov
+ 0x00240443, // n0x19f1 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x19f2 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x19f3 c0x0000 (---------------) + I org
+ 0x00201602, // n0x19f4 c0x0000 (---------------) + I av
+ 0x0020bfc3, // n0x19f5 c0x0000 (---------------) + I bbs
+ 0x002111c3, // n0x19f6 c0x0000 (---------------) + I bel
+ 0x00202183, // n0x19f7 c0x0000 (---------------) + I biz
+ 0x4aa32dc3, // n0x19f8 c0x012a (n0x1a09-n0x1a0a) + I com
+ 0x0020fc02, // n0x19f9 c0x0000 (---------------) + I dr
+ 0x0021e083, // n0x19fa c0x0000 (---------------) + I edu
+ 0x0020a0c3, // n0x19fb c0x0000 (---------------) + I gen
+ 0x00209ac3, // n0x19fc c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x19fd c0x0000 (---------------) + I info
+ 0x0036e803, // n0x19fe c0x0000 (---------------) + I k12
+ 0x00349b43, // n0x19ff c0x0000 (---------------) + I kep
+ 0x00240443, // n0x1a00 c0x0000 (---------------) + I mil
+ 0x00267944, // n0x1a01 c0x0000 (---------------) + I name
+ 0x4ae0a682, // n0x1a02 c0x012b (n0x1a0a-n0x1a0b) + I nc
+ 0x00218643, // n0x1a03 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1a04 c0x0000 (---------------) + I org
+ 0x002369c3, // n0x1a05 c0x0000 (---------------) + I pol
+ 0x00218943, // n0x1a06 c0x0000 (---------------) + I tel
+ 0x0028dc82, // n0x1a07 c0x0000 (---------------) + I tv
+ 0x002071c3, // n0x1a08 c0x0000 (---------------) + I web
+ 0x0009e448, // n0x1a09 c0x0000 (---------------) + blogspot
+ 0x00209ac3, // n0x1a0a c0x0000 (---------------) + I gov
+ 0x00233784, // n0x1a0b c0x0000 (---------------) + I aero
+ 0x00202183, // n0x1a0c c0x0000 (---------------) + I biz
+ 0x00200882, // n0x1a0d c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x1a0e c0x0000 (---------------) + I com
+ 0x0023a884, // n0x1a0f c0x0000 (---------------) + I coop
+ 0x0021e083, // n0x1a10 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1a11 c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x1a12 c0x0000 (---------------) + I info
+ 0x002188c3, // n0x1a13 c0x0000 (---------------) + I int
+ 0x0027e604, // n0x1a14 c0x0000 (---------------) + I jobs
+ 0x00277f84, // n0x1a15 c0x0000 (---------------) + I mobi
+ 0x002c2a06, // n0x1a16 c0x0000 (---------------) + I museum
+ 0x00267944, // n0x1a17 c0x0000 (---------------) + I name
+ 0x00218643, // n0x1a18 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1a19 c0x0000 (---------------) + I org
+ 0x002cfc43, // n0x1a1a c0x0000 (---------------) + I pro
+ 0x00290186, // n0x1a1b c0x0000 (---------------) + I travel
+ 0x00050f4b, // n0x1a1c c0x0000 (---------------) + better-than
+ 0x0000dc06, // n0x1a1d c0x0000 (---------------) + dyndns
+ 0x0001618a, // n0x1a1e c0x0000 (---------------) + on-the-web
+ 0x001540ca, // n0x1a1f c0x0000 (---------------) + worse-than
+ 0x0009e448, // n0x1a20 c0x0000 (---------------) + blogspot
+ 0x0034cac4, // n0x1a21 c0x0000 (---------------) + I club
+ 0x00232dc3, // n0x1a22 c0x0000 (---------------) + I com
+ 0x00202144, // n0x1a23 c0x0000 (---------------) + I ebiz
+ 0x0021e083, // n0x1a24 c0x0000 (---------------) + I edu
+ 0x0028cc84, // n0x1a25 c0x0000 (---------------) + I game
+ 0x00209ac3, // n0x1a26 c0x0000 (---------------) + I gov
+ 0x00309c83, // n0x1a27 c0x0000 (---------------) + I idv
+ 0x00240443, // n0x1a28 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x1a29 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1a2a c0x0000 (---------------) + I org
+ 0x00310e0b, // n0x1a2b c0x0000 (---------------) + I xn--czrw28b
+ 0x00372b4a, // n0x1a2c c0x0000 (---------------) + I xn--uc0atv
+ 0x003841cc, // n0x1a2d c0x0000 (---------------) + I xn--zf0ao64a
+ 0x00200b82, // n0x1a2e c0x0000 (---------------) + I ac
+ 0x00200882, // n0x1a2f c0x0000 (---------------) + I co
+ 0x00209ac2, // n0x1a30 c0x0000 (---------------) + I go
+ 0x0029d805, // n0x1a31 c0x0000 (---------------) + I hotel
+ 0x00208a44, // n0x1a32 c0x0000 (---------------) + I info
+ 0x00204342, // n0x1a33 c0x0000 (---------------) + I me
+ 0x00240443, // n0x1a34 c0x0000 (---------------) + I mil
+ 0x00277f84, // n0x1a35 c0x0000 (---------------) + I mobi
+ 0x00209e82, // n0x1a36 c0x0000 (---------------) + I ne
+ 0x00200d02, // n0x1a37 c0x0000 (---------------) + I or
+ 0x0021bcc2, // n0x1a38 c0x0000 (---------------) + I sc
+ 0x0028dc82, // n0x1a39 c0x0000 (---------------) + I tv
+ 0x002a3649, // n0x1a3a c0x0000 (---------------) + I cherkassy
+ 0x0037e648, // n0x1a3b c0x0000 (---------------) + I cherkasy
+ 0x0025ec89, // n0x1a3c c0x0000 (---------------) + I chernigov
+ 0x002626c9, // n0x1a3d c0x0000 (---------------) + I chernihiv
+ 0x002634ca, // n0x1a3e c0x0000 (---------------) + I chernivtsi
+ 0x002669ca, // n0x1a3f c0x0000 (---------------) + I chernovtsy
+ 0x00206182, // n0x1a40 c0x0000 (---------------) + I ck
+ 0x0022fe42, // n0x1a41 c0x0000 (---------------) + I cn
+ 0x00200882, // n0x1a42 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x1a43 c0x0000 (---------------) + I com
+ 0x0020b542, // n0x1a44 c0x0000 (---------------) + I cr
+ 0x002411c6, // n0x1a45 c0x0000 (---------------) + I crimea
+ 0x00333d82, // n0x1a46 c0x0000 (---------------) + I cv
+ 0x0020dcc2, // n0x1a47 c0x0000 (---------------) + I dn
+ 0x002da50e, // n0x1a48 c0x0000 (---------------) + I dnepropetrovsk
+ 0x002f9d4e, // n0x1a49 c0x0000 (---------------) + I dnipropetrovsk
+ 0x00276947, // n0x1a4a c0x0000 (---------------) + I dominic
+ 0x0021d347, // n0x1a4b c0x0000 (---------------) + I donetsk
+ 0x00218802, // n0x1a4c c0x0000 (---------------) + I dp
+ 0x0021e083, // n0x1a4d c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1a4e c0x0000 (---------------) + I gov
+ 0x00203802, // n0x1a4f c0x0000 (---------------) + I if
+ 0x00200242, // n0x1a50 c0x0000 (---------------) + I in
+ 0x0024bd8f, // n0x1a51 c0x0000 (---------------) + I ivano-frankivsk
+ 0x002230c2, // n0x1a52 c0x0000 (---------------) + I kh
+ 0x0023d887, // n0x1a53 c0x0000 (---------------) + I kharkiv
+ 0x00240607, // n0x1a54 c0x0000 (---------------) + I kharkov
+ 0x00247987, // n0x1a55 c0x0000 (---------------) + I kherson
+ 0x0024c10c, // n0x1a56 c0x0000 (---------------) + I khmelnitskiy
+ 0x00254f8c, // n0x1a57 c0x0000 (---------------) + I khmelnytskyi
+ 0x0029ae84, // n0x1a58 c0x0000 (---------------) + I kiev
+ 0x0022d7ca, // n0x1a59 c0x0000 (---------------) + I kirovograd
+ 0x00286642, // n0x1a5a c0x0000 (---------------) + I km
+ 0x0020c642, // n0x1a5b c0x0000 (---------------) + I kr
+ 0x002a5dc4, // n0x1a5c c0x0000 (---------------) + I krym
+ 0x0021f9c2, // n0x1a5d c0x0000 (---------------) + I ks
+ 0x002b0202, // n0x1a5e c0x0000 (---------------) + I kv
+ 0x002551c4, // n0x1a5f c0x0000 (---------------) + I kyiv
+ 0x00219682, // n0x1a60 c0x0000 (---------------) + I lg
+ 0x0021a082, // n0x1a61 c0x0000 (---------------) + I lt
+ 0x0022f587, // n0x1a62 c0x0000 (---------------) + I lugansk
+ 0x00240505, // n0x1a63 c0x0000 (---------------) + I lutsk
+ 0x00218582, // n0x1a64 c0x0000 (---------------) + I lv
+ 0x0024bd04, // n0x1a65 c0x0000 (---------------) + I lviv
+ 0x00340582, // n0x1a66 c0x0000 (---------------) + I mk
+ 0x002feac8, // n0x1a67 c0x0000 (---------------) + I mykolaiv
+ 0x00218643, // n0x1a68 c0x0000 (---------------) + I net
+ 0x0020d188, // n0x1a69 c0x0000 (---------------) + I nikolaev
+ 0x00202bc2, // n0x1a6a c0x0000 (---------------) + I od
+ 0x00238e85, // n0x1a6b c0x0000 (---------------) + I odesa
+ 0x0034a206, // n0x1a6c c0x0000 (---------------) + I odessa
+ 0x0024d043, // n0x1a6d c0x0000 (---------------) + I org
+ 0x0020a402, // n0x1a6e c0x0000 (---------------) + I pl
+ 0x002cd547, // n0x1a6f c0x0000 (---------------) + I poltava
+ 0x00200a82, // n0x1a70 c0x0000 (---------------) + I pp
+ 0x002cfb05, // n0x1a71 c0x0000 (---------------) + I rivne
+ 0x00210885, // n0x1a72 c0x0000 (---------------) + I rovno
+ 0x0020bf02, // n0x1a73 c0x0000 (---------------) + I rv
+ 0x00214502, // n0x1a74 c0x0000 (---------------) + I sb
+ 0x002ec84a, // n0x1a75 c0x0000 (---------------) + I sebastopol
+ 0x002970ca, // n0x1a76 c0x0000 (---------------) + I sevastopol
+ 0x0024f102, // n0x1a77 c0x0000 (---------------) + I sm
+ 0x002f3284, // n0x1a78 c0x0000 (---------------) + I sumy
+ 0x00207302, // n0x1a79 c0x0000 (---------------) + I te
+ 0x0036d7c8, // n0x1a7a c0x0000 (---------------) + I ternopil
+ 0x0021eac2, // n0x1a7b c0x0000 (---------------) + I uz
+ 0x00353048, // n0x1a7c c0x0000 (---------------) + I uzhgorod
+ 0x002eed87, // n0x1a7d c0x0000 (---------------) + I vinnica
+ 0x002ef949, // n0x1a7e c0x0000 (---------------) + I vinnytsia
+ 0x0020d142, // n0x1a7f c0x0000 (---------------) + I vn
+ 0x002f36c5, // n0x1a80 c0x0000 (---------------) + I volyn
+ 0x0036d1c5, // n0x1a81 c0x0000 (---------------) + I yalta
+ 0x002cbb4b, // n0x1a82 c0x0000 (---------------) + I zaporizhzhe
+ 0x002b738c, // n0x1a83 c0x0000 (---------------) + I zaporizhzhia
+ 0x0022eb08, // n0x1a84 c0x0000 (---------------) + I zhitomir
+ 0x002f3a88, // n0x1a85 c0x0000 (---------------) + I zhytomyr
+ 0x00279542, // n0x1a86 c0x0000 (---------------) + I zp
+ 0x0021cf42, // n0x1a87 c0x0000 (---------------) + I zt
+ 0x00200b82, // n0x1a88 c0x0000 (---------------) + I ac
+ 0x00200882, // n0x1a89 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x1a8a c0x0000 (---------------) + I com
+ 0x00209ac2, // n0x1a8b c0x0000 (---------------) + I go
+ 0x00209e82, // n0x1a8c c0x0000 (---------------) + I ne
+ 0x00200d02, // n0x1a8d c0x0000 (---------------) + I or
+ 0x0024d043, // n0x1a8e c0x0000 (---------------) + I org
+ 0x0021bcc2, // n0x1a8f c0x0000 (---------------) + I sc
+ 0x00200b82, // n0x1a90 c0x0000 (---------------) + I ac
+ 0x4ce00882, // n0x1a91 c0x0133 (n0x1a9b-n0x1a9c) + I co
+ 0x4d209ac3, // n0x1a92 c0x0134 (n0x1a9c-n0x1a9d) + I gov
+ 0x00220e43, // n0x1a93 c0x0000 (---------------) + I ltd
+ 0x00204342, // n0x1a94 c0x0000 (---------------) + I me
+ 0x00218643, // n0x1a95 c0x0000 (---------------) + I net
+ 0x002096c3, // n0x1a96 c0x0000 (---------------) + I nhs
+ 0x0024d043, // n0x1a97 c0x0000 (---------------) + I org
+ 0x002cb543, // n0x1a98 c0x0000 (---------------) + I plc
+ 0x0023dd46, // n0x1a99 c0x0000 (---------------) + I police
+ 0x01651983, // n0x1a9a c0x0005 (---------------)* o I sch
+ 0x0009e448, // n0x1a9b c0x0000 (---------------) + blogspot
+ 0x00090b07, // n0x1a9c c0x0000 (---------------) + service
+ 0x4da019c2, // n0x1a9d c0x0136 (n0x1adc-n0x1adf) + I ak
+ 0x4de00b02, // n0x1a9e c0x0137 (n0x1adf-n0x1ae2) + I al
+ 0x4e2030c2, // n0x1a9f c0x0138 (n0x1ae2-n0x1ae5) + I ar
+ 0x4e600182, // n0x1aa0 c0x0139 (n0x1ae5-n0x1ae8) + I as
+ 0x4ea01202, // n0x1aa1 c0x013a (n0x1ae8-n0x1aeb) + I az
+ 0x4ee14582, // n0x1aa2 c0x013b (n0x1aeb-n0x1aee) + I ca
+ 0x4f200882, // n0x1aa3 c0x013c (n0x1aee-n0x1af1) + I co
+ 0x4f62a082, // n0x1aa4 c0x013d (n0x1af1-n0x1af4) + I ct
+ 0x4fa003c2, // n0x1aa5 c0x013e (n0x1af4-n0x1af7) + I dc
+ 0x4fe07cc2, // n0x1aa6 c0x013f (n0x1af7-n0x1afa) + I de
+ 0x002e2103, // n0x1aa7 c0x0000 (---------------) + I dni
+ 0x0023ee83, // n0x1aa8 c0x0000 (---------------) + I fed
+ 0x5024c602, // n0x1aa9 c0x0140 (n0x1afa-n0x1afd) + I fl
+ 0x50600fc2, // n0x1aaa c0x0141 (n0x1afd-n0x1b00) + I ga
+ 0x50a02642, // n0x1aab c0x0142 (n0x1b00-n0x1b03) + I gu
+ 0x50e00202, // n0x1aac c0x0143 (n0x1b03-n0x1b05) + I hi
+ 0x51208bc2, // n0x1aad c0x0144 (n0x1b05-n0x1b08) + I ia
+ 0x51605942, // n0x1aae c0x0145 (n0x1b08-n0x1b0b) + I id
+ 0x51a00d82, // n0x1aaf c0x0146 (n0x1b0b-n0x1b0e) + I il
+ 0x51e00242, // n0x1ab0 c0x0147 (n0x1b0e-n0x1b11) + I in
+ 0x000d0905, // n0x1ab1 c0x0000 (---------------) + is-by
+ 0x00213e43, // n0x1ab2 c0x0000 (---------------) + I isa
+ 0x0025c784, // n0x1ab3 c0x0000 (---------------) + I kids
+ 0x5221f9c2, // n0x1ab4 c0x0148 (n0x1b11-n0x1b14) + I ks
+ 0x52611002, // n0x1ab5 c0x0149 (n0x1b14-n0x1b17) + I ky
+ 0x52a000c2, // n0x1ab6 c0x014a (n0x1b17-n0x1b1a) + I la
+ 0x0007e10b, // n0x1ab7 c0x0000 (---------------) + land-4-sale
+ 0x52e011c2, // n0x1ab8 c0x014b (n0x1b1a-n0x1b1d) + I ma
+ 0x5364a3c2, // n0x1ab9 c0x014d (n0x1b20-n0x1b23) + I md
+ 0x53a04342, // n0x1aba c0x014e (n0x1b23-n0x1b26) + I me
+ 0x53e00f42, // n0x1abb c0x014f (n0x1b26-n0x1b29) + I mi
+ 0x5422c7c2, // n0x1abc c0x0150 (n0x1b29-n0x1b2c) + I mn
+ 0x54605202, // n0x1abd c0x0151 (n0x1b2c-n0x1b2f) + I mo
+ 0x54a0e602, // n0x1abe c0x0152 (n0x1b2f-n0x1b32) + I ms
+ 0x54e66782, // n0x1abf c0x0153 (n0x1b32-n0x1b35) + I mt
+ 0x5520a682, // n0x1ac0 c0x0154 (n0x1b35-n0x1b38) + I nc
+ 0x55600382, // n0x1ac1 c0x0155 (n0x1b38-n0x1b3a) + I nd
+ 0x55a09e82, // n0x1ac2 c0x0156 (n0x1b3a-n0x1b3d) + I ne
+ 0x55e096c2, // n0x1ac3 c0x0157 (n0x1b3d-n0x1b40) + I nh
+ 0x56202dc2, // n0x1ac4 c0x0158 (n0x1b40-n0x1b43) + I nj
+ 0x56626d42, // n0x1ac5 c0x0159 (n0x1b43-n0x1b46) + I nm
+ 0x0036ef43, // n0x1ac6 c0x0000 (---------------) + I nsn
+ 0x56a15642, // n0x1ac7 c0x015a (n0x1b46-n0x1b49) + I nv
+ 0x56e1af42, // n0x1ac8 c0x015b (n0x1b49-n0x1b4c) + I ny
+ 0x57203dc2, // n0x1ac9 c0x015c (n0x1b4c-n0x1b4f) + I oh
+ 0x5760d582, // n0x1aca c0x015d (n0x1b4f-n0x1b52) + I ok
+ 0x57a00d02, // n0x1acb c0x015e (n0x1b52-n0x1b55) + I or
+ 0x57e00ac2, // n0x1acc c0x015f (n0x1b55-n0x1b58) + I pa
+ 0x5822ad42, // n0x1acd c0x0160 (n0x1b58-n0x1b5b) + I pr
+ 0x58600d42, // n0x1ace c0x0161 (n0x1b5b-n0x1b5e) + I ri
+ 0x58a1bcc2, // n0x1acf c0x0162 (n0x1b5e-n0x1b61) + I sc
+ 0x58e0acc2, // n0x1ad0 c0x0163 (n0x1b61-n0x1b63) + I sd
+ 0x000dd7cc, // n0x1ad1 c0x0000 (---------------) + stuff-4-sale
+ 0x59201942, // n0x1ad2 c0x0164 (n0x1b63-n0x1b66) + I tn
+ 0x59655c42, // n0x1ad3 c0x0165 (n0x1b66-n0x1b69) + I tx
+ 0x59a02fc2, // n0x1ad4 c0x0166 (n0x1b69-n0x1b6c) + I ut
+ 0x59e03242, // n0x1ad5 c0x0167 (n0x1b6c-n0x1b6f) + I va
+ 0x5a201642, // n0x1ad6 c0x0168 (n0x1b6f-n0x1b72) + I vi
+ 0x5a6170c2, // n0x1ad7 c0x0169 (n0x1b72-n0x1b75) + I vt
+ 0x5aa00142, // n0x1ad8 c0x016a (n0x1b75-n0x1b78) + I wa
+ 0x5ae07a82, // n0x1ad9 c0x016b (n0x1b78-n0x1b7b) + I wi
+ 0x5b26e042, // n0x1ada c0x016c (n0x1b7b-n0x1b7c) + I wv
+ 0x5b61f8c2, // n0x1adb c0x016d (n0x1b7c-n0x1b7f) + I wy
+ 0x002020c2, // n0x1adc c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1add c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1ade c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1adf c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1ae0 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1ae1 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1ae2 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1ae3 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1ae4 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1ae5 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1ae6 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1ae7 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1ae8 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1ae9 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1aea c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1aeb c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1aec c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1aed c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1aee c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1aef c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1af0 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1af1 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1af2 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1af3 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1af4 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1af5 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1af6 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1af7 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1af8 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1af9 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1afa c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1afb c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1afc c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1afd c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1afe c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1aff c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b00 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b01 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b02 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b03 c0x0000 (---------------) + I cc
+ 0x0027a703, // n0x1b04 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b05 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b06 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b07 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b08 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b09 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b0a c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b0b c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b0c c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b0d c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b0e c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b0f c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b10 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b11 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b12 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b13 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b14 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b15 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b16 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b17 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b18 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b19 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b1a c0x0000 (---------------) + I cc
+ 0x5336e803, // n0x1b1b c0x014c (n0x1b1d-n0x1b20) + I k12
+ 0x0027a703, // n0x1b1c c0x0000 (---------------) + I lib
+ 0x002f5bc4, // n0x1b1d c0x0000 (---------------) + I chtr
+ 0x0037e546, // n0x1b1e c0x0000 (---------------) + I paroch
+ 0x002d35c3, // n0x1b1f c0x0000 (---------------) + I pvt
+ 0x002020c2, // n0x1b20 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b21 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b22 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b23 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b24 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b25 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b26 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b27 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b28 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b29 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b2a c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b2b c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b2c c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b2d c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b2e c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b2f c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b30 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b31 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b32 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b33 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b34 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b35 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b36 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b37 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b38 c0x0000 (---------------) + I cc
+ 0x0027a703, // n0x1b39 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b3a c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b3b c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b3c c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b3d c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b3e c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b3f c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b40 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b41 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b42 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b43 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b44 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b45 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b46 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b47 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b48 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b49 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b4a c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b4b c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b4c c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b4d c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b4e c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b4f c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b50 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b51 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b52 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b53 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b54 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b55 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b56 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b57 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b58 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b59 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b5a c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b5b c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b5c c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b5d c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b5e c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b5f c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b60 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b61 c0x0000 (---------------) + I cc
+ 0x0027a703, // n0x1b62 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b63 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b64 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b65 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b66 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b67 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b68 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b69 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b6a c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b6b c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b6c c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b6d c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b6e c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b6f c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b70 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b71 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b72 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b73 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b74 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b75 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b76 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b77 c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b78 c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b79 c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b7a c0x0000 (---------------) + I lib
+ 0x002020c2, // n0x1b7b c0x0000 (---------------) + I cc
+ 0x002020c2, // n0x1b7c c0x0000 (---------------) + I cc
+ 0x0036e803, // n0x1b7d c0x0000 (---------------) + I k12
+ 0x0027a703, // n0x1b7e c0x0000 (---------------) + I lib
+ 0x00232dc3, // n0x1b7f c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1b80 c0x0000 (---------------) + I edu
+ 0x00345fc3, // n0x1b81 c0x0000 (---------------) + I gub
+ 0x00240443, // n0x1b82 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x1b83 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1b84 c0x0000 (---------------) + I org
+ 0x00200882, // n0x1b85 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x1b86 c0x0000 (---------------) + I com
+ 0x00218643, // n0x1b87 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1b88 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x1b89 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1b8a c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1b8b c0x0000 (---------------) + I gov
+ 0x00240443, // n0x1b8c c0x0000 (---------------) + I mil
+ 0x00218643, // n0x1b8d c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1b8e c0x0000 (---------------) + I org
+ 0x0020b384, // n0x1b8f c0x0000 (---------------) + I arts
+ 0x00200882, // n0x1b90 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x1b91 c0x0000 (---------------) + I com
+ 0x002db583, // n0x1b92 c0x0000 (---------------) + I e12
+ 0x0021e083, // n0x1b93 c0x0000 (---------------) + I edu
+ 0x0024a304, // n0x1b94 c0x0000 (---------------) + I firm
+ 0x003704c3, // n0x1b95 c0x0000 (---------------) + I gob
+ 0x00209ac3, // n0x1b96 c0x0000 (---------------) + I gov
+ 0x00208a44, // n0x1b97 c0x0000 (---------------) + I info
+ 0x002188c3, // n0x1b98 c0x0000 (---------------) + I int
+ 0x00240443, // n0x1b99 c0x0000 (---------------) + I mil
+ 0x00218643, // n0x1b9a c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1b9b c0x0000 (---------------) + I org
+ 0x0022a143, // n0x1b9c c0x0000 (---------------) + I rec
+ 0x002dc745, // n0x1b9d c0x0000 (---------------) + I store
+ 0x0022a003, // n0x1b9e c0x0000 (---------------) + I tec
+ 0x002071c3, // n0x1b9f c0x0000 (---------------) + I web
+ 0x00200882, // n0x1ba0 c0x0000 (---------------) + I co
+ 0x00232dc3, // n0x1ba1 c0x0000 (---------------) + I com
+ 0x0036e803, // n0x1ba2 c0x0000 (---------------) + I k12
+ 0x00218643, // n0x1ba3 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1ba4 c0x0000 (---------------) + I org
+ 0x00200b82, // n0x1ba5 c0x0000 (---------------) + I ac
+ 0x00202183, // n0x1ba6 c0x0000 (---------------) + I biz
+ 0x00232dc3, // n0x1ba7 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1ba8 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1ba9 c0x0000 (---------------) + I gov
+ 0x00241cc6, // n0x1baa c0x0000 (---------------) + I health
+ 0x00208a44, // n0x1bab c0x0000 (---------------) + I info
+ 0x002188c3, // n0x1bac c0x0000 (---------------) + I int
+ 0x00267944, // n0x1bad c0x0000 (---------------) + I name
+ 0x00218643, // n0x1bae c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1baf c0x0000 (---------------) + I org
+ 0x002cfc43, // n0x1bb0 c0x0000 (---------------) + I pro
+ 0x00232dc3, // n0x1bb1 c0x0000 (---------------) + I com
+ 0x0021e083, // n0x1bb2 c0x0000 (---------------) + I edu
+ 0x00218643, // n0x1bb3 c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1bb4 c0x0000 (---------------) + I org
+ 0x00232dc3, // n0x1bb5 c0x0000 (---------------) + I com
+ 0x0000dc06, // n0x1bb6 c0x0000 (---------------) + dyndns
+ 0x0021e083, // n0x1bb7 c0x0000 (---------------) + I edu
+ 0x00209ac3, // n0x1bb8 c0x0000 (---------------) + I gov
+ 0x000f3306, // n0x1bb9 c0x0000 (---------------) + mypets
+ 0x00218643, // n0x1bba c0x0000 (---------------) + I net
+ 0x0024d043, // n0x1bbb c0x0000 (---------------) + I org
+ 0x002fd588, // n0x1bbc c0x0000 (---------------) + I xn--80au
+ 0x002ffbc9, // n0x1bbd c0x0000 (---------------) + I xn--90azh
+ 0x0030d409, // n0x1bbe c0x0000 (---------------) + I xn--c1avg
+ 0x00313188, // n0x1bbf c0x0000 (---------------) + I xn--d1at
+ 0x0034bfc8, // n0x1bc0 c0x0000 (---------------) + I xn--o1ac
+ 0x0034bfc9, // n0x1bc1 c0x0000 (---------------) + I xn--o1ach
}
// children is the list of nodes' children, the parent's wildcard bit and the
@@ -7274,378 +7560,379 @@
0x40000000, // c0x0003 (---------------)* +
0x50000000, // c0x0004 (---------------)* !
0x60000000, // c0x0005 (---------------)* o
- 0x00ce4333, // c0x0006 (n0x0333-n0x0339) +
- 0x00ce8339, // c0x0007 (n0x0339-n0x033a) +
- 0x00d0433a, // c0x0008 (n0x033a-n0x0341) +
- 0x00e68341, // c0x0009 (n0x0341-n0x039a) +
- 0x00e7c39a, // c0x000a (n0x039a-n0x039f) +
- 0x00e9039f, // c0x000b (n0x039f-n0x03a4) +
- 0x00ea03a4, // c0x000c (n0x03a4-n0x03a8) +
- 0x00eb83a8, // c0x000d (n0x03a8-n0x03ae) +
- 0x00ec83ae, // c0x000e (n0x03ae-n0x03b2) +
- 0x00ee03b2, // c0x000f (n0x03b2-n0x03b8) +
- 0x00f043b8, // c0x0010 (n0x03b8-n0x03c1) +
- 0x00f083c1, // c0x0011 (n0x03c1-n0x03c2) +
- 0x00f203c2, // c0x0012 (n0x03c2-n0x03c8) +
- 0x00f243c8, // c0x0013 (n0x03c8-n0x03c9) +
- 0x00f403c9, // c0x0014 (n0x03c9-n0x03d0) +
- 0x00f443d0, // c0x0015 (n0x03d0-n0x03d1) +
- 0x00f8c3d1, // c0x0016 (n0x03d1-n0x03e3) +
- 0x00f903e3, // c0x0017 (n0x03e3-n0x03e4) +
- 0x00fb03e4, // c0x0018 (n0x03e4-n0x03ec) +
- 0x00fc43ec, // c0x0019 (n0x03ec-n0x03f1) +
- 0x00fc83f1, // c0x001a (n0x03f1-n0x03f2) +
- 0x00ff83f2, // c0x001b (n0x03f2-n0x03fe) +
- 0x010203fe, // c0x001c (n0x03fe-n0x0408) +
- 0x01048408, // c0x001d (n0x0408-n0x0412) +
- 0x01050412, // c0x001e (n0x0412-n0x0414) +
- 0x01054414, // c0x001f (n0x0414-n0x0415) +
- 0x010e4415, // c0x0020 (n0x0415-n0x0439) +
- 0x010f8439, // c0x0021 (n0x0439-n0x043e) +
- 0x0110c43e, // c0x0022 (n0x043e-n0x0443) +
- 0x01128443, // c0x0023 (n0x0443-n0x044a) +
- 0x0113844a, // c0x0024 (n0x044a-n0x044e) +
- 0x0114c44e, // c0x0025 (n0x044e-n0x0453) +
- 0x01170453, // c0x0026 (n0x0453-n0x045c) +
- 0x0128845c, // c0x0027 (n0x045c-n0x04a2) +
- 0x0128c4a2, // c0x0028 (n0x04a2-n0x04a3) +
- 0x012a04a3, // c0x0029 (n0x04a3-n0x04a8) +
- 0x012b44a8, // c0x002a (n0x04a8-n0x04ad) +
- 0x012bc4ad, // c0x002b (n0x04ad-n0x04af) +
- 0x012cc4af, // c0x002c (n0x04af-n0x04b3) +
- 0x012e44b3, // c0x002d (n0x04b3-n0x04b9) +
- 0x013284b9, // c0x002e (n0x04b9-n0x04ca) +
- 0x013384ca, // c0x002f (n0x04ca-n0x04ce) +
- 0x0133c4ce, // c0x0030 (n0x04ce-n0x04cf) +
- 0x013404cf, // c0x0031 (n0x04cf-n0x04d0) +
- 0x013444d0, // c0x0032 (n0x04d0-n0x04d1) +
- 0x013804d1, // c0x0033 (n0x04d1-n0x04e0) +
- 0x613844e0, // c0x0034 (n0x04e0-n0x04e1)* o
- 0x013944e1, // c0x0035 (n0x04e1-n0x04e5) +
- 0x013a44e5, // c0x0036 (n0x04e5-n0x04e9) +
- 0x014584e9, // c0x0037 (n0x04e9-n0x0516) +
- 0x2145c516, // c0x0038 (n0x0516-n0x0517) o
- 0x01460517, // c0x0039 (n0x0517-n0x0518) +
- 0x01494518, // c0x003a (n0x0518-n0x0525) +
- 0x017a0525, // c0x003b (n0x0525-n0x05e8) +
- 0x217fc5e8, // c0x003c (n0x05e8-n0x05ff) o
- 0x0181c5ff, // c0x003d (n0x05ff-n0x0607) +
- 0x01824607, // c0x003e (n0x0607-n0x0609) +
- 0x01840609, // c0x003f (n0x0609-n0x0610) +
- 0x01858610, // c0x0040 (n0x0610-n0x0616) +
- 0x0185c616, // c0x0041 (n0x0616-n0x0617) +
- 0x0186c617, // c0x0042 (n0x0617-n0x061b) +
- 0x0187461b, // c0x0043 (n0x061b-n0x061d) +
- 0x0187861d, // c0x0044 (n0x061d-n0x061e) +
- 0x0189861e, // c0x0045 (n0x061e-n0x0626) +
- 0x0189c626, // c0x0046 (n0x0626-n0x0627) +
- 0x018b0627, // c0x0047 (n0x0627-n0x062c) +
- 0x018d862c, // c0x0048 (n0x062c-n0x0636) +
- 0x018f8636, // c0x0049 (n0x0636-n0x063e) +
- 0x0192863e, // c0x004a (n0x063e-n0x064a) +
- 0x0195064a, // c0x004b (n0x064a-n0x0654) +
- 0x01974654, // c0x004c (n0x0654-n0x065d) +
- 0x0198865d, // c0x004d (n0x065d-n0x0662) +
- 0x0198c662, // c0x004e (n0x0662-n0x0663) +
- 0x019a8663, // c0x004f (n0x0663-n0x066a) +
- 0x019b466a, // c0x0050 (n0x066a-n0x066d) +
- 0x01a1466d, // c0x0051 (n0x066d-n0x0685) +
- 0x01a30685, // c0x0052 (n0x0685-n0x068c) +
- 0x01a3c68c, // c0x0053 (n0x068c-n0x068f) +
- 0x01a5068f, // c0x0054 (n0x068f-n0x0694) +
- 0x01a68694, // c0x0055 (n0x0694-n0x069a) +
- 0x01a8069a, // c0x0056 (n0x069a-n0x06a0) +
- 0x01a986a0, // c0x0057 (n0x06a0-n0x06a6) +
- 0x01ab06a6, // c0x0058 (n0x06a6-n0x06ac) +
- 0x01acc6ac, // c0x0059 (n0x06ac-n0x06b3) +
- 0x01ad86b3, // c0x005a (n0x06b3-n0x06b6) +
- 0x01b306b6, // c0x005b (n0x06b6-n0x06cc) +
- 0x01b486cc, // c0x005c (n0x06cc-n0x06d2) +
- 0x01b586d2, // c0x005d (n0x06d2-n0x06d6) +
- 0x01b9c6d6, // c0x005e (n0x06d6-n0x06e7) +
- 0x01c1c6e7, // c0x005f (n0x06e7-n0x0707) +
- 0x01c48707, // c0x0060 (n0x0707-n0x0712) +
- 0x01c50712, // c0x0061 (n0x0712-n0x0714) +
- 0x61c54714, // c0x0062 (n0x0714-n0x0715)* o
- 0x21c58715, // c0x0063 (n0x0715-n0x0716) o
- 0x01c74716, // c0x0064 (n0x0716-n0x071d) +
- 0x01c7c71d, // c0x0065 (n0x071d-n0x071f) +
- 0x01cb071f, // c0x0066 (n0x071f-n0x072c) +
- 0x01cd872c, // c0x0067 (n0x072c-n0x0736) +
- 0x01cdc736, // c0x0068 (n0x0736-n0x0737) +
- 0x01ce8737, // c0x0069 (n0x0737-n0x073a) +
- 0x01d0073a, // c0x006a (n0x073a-n0x0740) +
- 0x01d24740, // c0x006b (n0x0740-n0x0749) +
- 0x01d40749, // c0x006c (n0x0749-n0x0750) +
- 0x02304750, // c0x006d (n0x0750-n0x08c1) +
- 0x023108c1, // c0x006e (n0x08c1-n0x08c4) +
- 0x023308c4, // c0x006f (n0x08c4-n0x08cc) +
- 0x024308cc, // c0x0070 (n0x08cc-n0x090c) +
- 0x0250090c, // c0x0071 (n0x090c-n0x0940) +
- 0x02570940, // c0x0072 (n0x0940-n0x095c) +
- 0x025c895c, // c0x0073 (n0x095c-n0x0972) +
- 0x026b0972, // c0x0074 (n0x0972-n0x09ac) +
- 0x027089ac, // c0x0075 (n0x09ac-n0x09c2) +
- 0x027449c2, // c0x0076 (n0x09c2-n0x09d1) +
- 0x028409d1, // c0x0077 (n0x09d1-n0x0a10) +
- 0x0290ca10, // c0x0078 (n0x0a10-n0x0a43) +
- 0x029a4a43, // c0x0079 (n0x0a43-n0x0a69) +
- 0x02a34a69, // c0x007a (n0x0a69-n0x0a8d) +
- 0x02a98a8d, // c0x007b (n0x0a8d-n0x0aa6) +
- 0x02cd0aa6, // c0x007c (n0x0aa6-n0x0b34) +
- 0x02d88b34, // c0x007d (n0x0b34-n0x0b62) +
- 0x02e54b62, // c0x007e (n0x0b62-n0x0b95) +
- 0x02ea0b95, // c0x007f (n0x0b95-n0x0ba8) +
- 0x02f28ba8, // c0x0080 (n0x0ba8-n0x0bca) +
- 0x02f64bca, // c0x0081 (n0x0bca-n0x0bd9) +
- 0x02fb4bd9, // c0x0082 (n0x0bd9-n0x0bed) +
- 0x0302cbed, // c0x0083 (n0x0bed-n0x0c0b) +
- 0x63030c0b, // c0x0084 (n0x0c0b-n0x0c0c)* o
- 0x63034c0c, // c0x0085 (n0x0c0c-n0x0c0d)* o
- 0x63038c0d, // c0x0086 (n0x0c0d-n0x0c0e)* o
- 0x030b4c0e, // c0x0087 (n0x0c0e-n0x0c2d) +
- 0x0311cc2d, // c0x0088 (n0x0c2d-n0x0c47) +
- 0x03198c47, // c0x0089 (n0x0c47-n0x0c66) +
- 0x03210c66, // c0x008a (n0x0c66-n0x0c84) +
- 0x03294c84, // c0x008b (n0x0c84-n0x0ca5) +
- 0x03300ca5, // c0x008c (n0x0ca5-n0x0cc0) +
- 0x0342ccc0, // c0x008d (n0x0cc0-n0x0d0b) +
- 0x03484d0b, // c0x008e (n0x0d0b-n0x0d21) +
- 0x63488d21, // c0x008f (n0x0d21-n0x0d22)* o
- 0x03520d22, // c0x0090 (n0x0d22-n0x0d48) +
- 0x035a8d48, // c0x0091 (n0x0d48-n0x0d6a) +
- 0x035f4d6a, // c0x0092 (n0x0d6a-n0x0d7d) +
- 0x0365cd7d, // c0x0093 (n0x0d7d-n0x0d97) +
- 0x03704d97, // c0x0094 (n0x0d97-n0x0dc1) +
- 0x037ccdc1, // c0x0095 (n0x0dc1-n0x0df3) +
- 0x03834df3, // c0x0096 (n0x0df3-n0x0e0d) +
- 0x03948e0d, // c0x0097 (n0x0e0d-n0x0e52) +
- 0x6394ce52, // c0x0098 (n0x0e52-n0x0e53)* o
- 0x63950e53, // c0x0099 (n0x0e53-n0x0e54)* o
- 0x039ace54, // c0x009a (n0x0e54-n0x0e6b) +
- 0x03a08e6b, // c0x009b (n0x0e6b-n0x0e82) +
- 0x03a98e82, // c0x009c (n0x0e82-n0x0ea6) +
- 0x03b14ea6, // c0x009d (n0x0ea6-n0x0ec5) +
- 0x03b58ec5, // c0x009e (n0x0ec5-n0x0ed6) +
- 0x03c3ced6, // c0x009f (n0x0ed6-n0x0f0f) +
- 0x03c70f0f, // c0x00a0 (n0x0f0f-n0x0f1c) +
- 0x03cd0f1c, // c0x00a1 (n0x0f1c-n0x0f34) +
- 0x03d44f34, // c0x00a2 (n0x0f34-n0x0f51) +
- 0x03dccf51, // c0x00a3 (n0x0f51-n0x0f73) +
- 0x03e0cf73, // c0x00a4 (n0x0f73-n0x0f83) +
- 0x03e7cf83, // c0x00a5 (n0x0f83-n0x0f9f) +
- 0x63e80f9f, // c0x00a6 (n0x0f9f-n0x0fa0)* o
- 0x03e98fa0, // c0x00a7 (n0x0fa0-n0x0fa6) +
- 0x03eb4fa6, // c0x00a8 (n0x0fa6-n0x0fad) +
- 0x03ef8fad, // c0x00a9 (n0x0fad-n0x0fbe) +
- 0x03f08fbe, // c0x00aa (n0x0fbe-n0x0fc2) +
- 0x03f20fc2, // c0x00ab (n0x0fc2-n0x0fc8) +
- 0x03f98fc8, // c0x00ac (n0x0fc8-n0x0fe6) +
- 0x03facfe6, // c0x00ad (n0x0fe6-n0x0feb) +
- 0x03fc4feb, // c0x00ae (n0x0feb-n0x0ff1) +
- 0x03fe8ff1, // c0x00af (n0x0ff1-n0x0ffa) +
- 0x03ffcffa, // c0x00b0 (n0x0ffa-n0x0fff) +
- 0x04014fff, // c0x00b1 (n0x0fff-n0x1005) +
- 0x0404d005, // c0x00b2 (n0x1005-n0x1013) +
- 0x04061013, // c0x00b3 (n0x1013-n0x1018) +
- 0x04069018, // c0x00b4 (n0x1018-n0x101a) +
- 0x0406d01a, // c0x00b5 (n0x101a-n0x101b) +
- 0x0409101b, // c0x00b6 (n0x101b-n0x1024) +
- 0x040b5024, // c0x00b7 (n0x1024-n0x102d) +
- 0x040cd02d, // c0x00b8 (n0x102d-n0x1033) +
- 0x040d5033, // c0x00b9 (n0x1033-n0x1035) +
- 0x040f5035, // c0x00ba (n0x1035-n0x103d) +
- 0x0411503d, // c0x00bb (n0x103d-n0x1045) +
- 0x04131045, // c0x00bc (n0x1045-n0x104c) +
- 0x0414d04c, // c0x00bd (n0x104c-n0x1053) +
- 0x0415d053, // c0x00be (n0x1053-n0x1057) +
- 0x04171057, // c0x00bf (n0x1057-n0x105c) +
- 0x0417905c, // c0x00c0 (n0x105c-n0x105e) +
- 0x0418d05e, // c0x00c1 (n0x105e-n0x1063) +
- 0x0419d063, // c0x00c2 (n0x1063-n0x1067) +
- 0x041b9067, // c0x00c3 (n0x1067-n0x106e) +
- 0x04a4906e, // c0x00c4 (n0x106e-n0x1292) +
- 0x04a81292, // c0x00c5 (n0x1292-n0x12a0) +
- 0x04aad2a0, // c0x00c6 (n0x12a0-n0x12ab) +
- 0x04ac52ab, // c0x00c7 (n0x12ab-n0x12b1) +
- 0x04ae12b1, // c0x00c8 (n0x12b1-n0x12b8) +
- 0x64ae52b8, // c0x00c9 (n0x12b8-n0x12b9)* o
- 0x04b292b9, // c0x00ca (n0x12b9-n0x12ca) +
- 0x04b312ca, // c0x00cb (n0x12ca-n0x12cc) +
- 0x24b352cc, // c0x00cc (n0x12cc-n0x12cd) o
- 0x24b392cd, // c0x00cd (n0x12cd-n0x12ce) o
- 0x04b3d2ce, // c0x00ce (n0x12ce-n0x12cf) +
- 0x04bf92cf, // c0x00cf (n0x12cf-n0x12fe) +
- 0x24c012fe, // c0x00d0 (n0x12fe-n0x1300) o
- 0x24c09300, // c0x00d1 (n0x1300-n0x1302) o
- 0x24c15302, // c0x00d2 (n0x1302-n0x1305) o
- 0x04c3d305, // c0x00d3 (n0x1305-n0x130f) +
- 0x04c6130f, // c0x00d4 (n0x130f-n0x1318) +
- 0x04c6d318, // c0x00d5 (n0x1318-n0x131b) +
- 0x057c531b, // c0x00d6 (n0x131b-n0x15f1) +
- 0x057c95f1, // c0x00d7 (n0x15f1-n0x15f2) +
- 0x057cd5f2, // c0x00d8 (n0x15f2-n0x15f3) +
- 0x257d15f3, // c0x00d9 (n0x15f3-n0x15f4) o
- 0x057d55f4, // c0x00da (n0x15f4-n0x15f5) +
- 0x257d95f5, // c0x00db (n0x15f5-n0x15f6) o
- 0x057dd5f6, // c0x00dc (n0x15f6-n0x15f7) +
- 0x257e95f7, // c0x00dd (n0x15f7-n0x15fa) o
- 0x057ed5fa, // c0x00de (n0x15fa-n0x15fb) +
- 0x057f15fb, // c0x00df (n0x15fb-n0x15fc) +
- 0x257f55fc, // c0x00e0 (n0x15fc-n0x15fd) o
- 0x057f95fd, // c0x00e1 (n0x15fd-n0x15fe) +
- 0x258015fe, // c0x00e2 (n0x15fe-n0x1600) o
- 0x05805600, // c0x00e3 (n0x1600-n0x1601) +
- 0x05809601, // c0x00e4 (n0x1601-n0x1602) +
- 0x25819602, // c0x00e5 (n0x1602-n0x1606) o
- 0x0581d606, // c0x00e6 (n0x1606-n0x1607) +
- 0x05821607, // c0x00e7 (n0x1607-n0x1608) +
- 0x05825608, // c0x00e8 (n0x1608-n0x1609) +
- 0x05829609, // c0x00e9 (n0x1609-n0x160a) +
- 0x2582d60a, // c0x00ea (n0x160a-n0x160b) o
- 0x0583160b, // c0x00eb (n0x160b-n0x160c) +
- 0x0583560c, // c0x00ec (n0x160c-n0x160d) +
- 0x0583960d, // c0x00ed (n0x160d-n0x160e) +
- 0x0583d60e, // c0x00ee (n0x160e-n0x160f) +
- 0x2584560f, // c0x00ef (n0x160f-n0x1611) o
- 0x05849611, // c0x00f0 (n0x1611-n0x1612) +
- 0x0584d612, // c0x00f1 (n0x1612-n0x1613) +
- 0x05851613, // c0x00f2 (n0x1613-n0x1614) +
- 0x25855614, // c0x00f3 (n0x1614-n0x1615) o
- 0x05859615, // c0x00f4 (n0x1615-n0x1616) +
- 0x25861616, // c0x00f5 (n0x1616-n0x1618) o
- 0x25865618, // c0x00f6 (n0x1618-n0x1619) o
- 0x05881619, // c0x00f7 (n0x1619-n0x1620) +
- 0x0588d620, // c0x00f8 (n0x1620-n0x1623) +
- 0x058cd623, // c0x00f9 (n0x1623-n0x1633) +
- 0x058d1633, // c0x00fa (n0x1633-n0x1634) +
- 0x058f5634, // c0x00fb (n0x1634-n0x163d) +
- 0x059c963d, // c0x00fc (n0x163d-n0x1672) +
- 0x059d1672, // c0x00fd (n0x1672-n0x1674) +
- 0x059fd674, // c0x00fe (n0x1674-n0x167f) +
- 0x05a1967f, // c0x00ff (n0x167f-n0x1686) +
- 0x05a25686, // c0x0100 (n0x1686-n0x1689) +
- 0x05a45689, // c0x0101 (n0x1689-n0x1691) +
- 0x05a7d691, // c0x0102 (n0x1691-n0x169f) +
- 0x05d2969f, // c0x0103 (n0x169f-n0x174a) +
- 0x05d4d74a, // c0x0104 (n0x174a-n0x1753) +
- 0x05d61753, // c0x0105 (n0x1753-n0x1758) +
- 0x05d95758, // c0x0106 (n0x1758-n0x1765) +
- 0x05db1765, // c0x0107 (n0x1765-n0x176c) +
- 0x05dcd76c, // c0x0108 (n0x176c-n0x1773) +
- 0x05df1773, // c0x0109 (n0x1773-n0x177c) +
- 0x05e0977c, // c0x010a (n0x177c-n0x1782) +
- 0x05e25782, // c0x010b (n0x1782-n0x1789) +
- 0x05e45789, // c0x010c (n0x1789-n0x1791) +
- 0x05e55791, // c0x010d (n0x1791-n0x1795) +
- 0x05e85795, // c0x010e (n0x1795-n0x17a1) +
- 0x05e9d7a1, // c0x010f (n0x17a1-n0x17a7) +
- 0x060ad7a7, // c0x0110 (n0x17a7-n0x182b) +
- 0x060d182b, // c0x0111 (n0x182b-n0x1834) +
- 0x060f1834, // c0x0112 (n0x1834-n0x183c) +
- 0x0610583c, // c0x0113 (n0x183c-n0x1841) +
- 0x06119841, // c0x0114 (n0x1841-n0x1846) +
- 0x06139846, // c0x0115 (n0x1846-n0x184e) +
- 0x061dd84e, // c0x0116 (n0x184e-n0x1877) +
- 0x061f9877, // c0x0117 (n0x1877-n0x187e) +
- 0x0620d87e, // c0x0118 (n0x187e-n0x1883) +
- 0x06211883, // c0x0119 (n0x1883-n0x1884) +
- 0x06225884, // c0x011a (n0x1884-n0x1889) +
- 0x06241889, // c0x011b (n0x1889-n0x1890) +
- 0x0624d890, // c0x011c (n0x1890-n0x1893) +
- 0x0627d893, // c0x011d (n0x1893-n0x189f) +
- 0x0629189f, // c0x011e (n0x189f-n0x18a4) +
- 0x062958a4, // c0x011f (n0x18a4-n0x18a5) +
- 0x062ad8a5, // c0x0120 (n0x18a5-n0x18ab) +
- 0x062b98ab, // c0x0121 (n0x18ab-n0x18ae) +
- 0x062bd8ae, // c0x0122 (n0x18ae-n0x18af) +
- 0x062d98af, // c0x0123 (n0x18af-n0x18b6) +
- 0x063158b6, // c0x0124 (n0x18b6-n0x18c5) +
- 0x063198c5, // c0x0125 (n0x18c5-n0x18c6) +
- 0x063398c6, // c0x0126 (n0x18c6-n0x18ce) +
- 0x063898ce, // c0x0127 (n0x18ce-n0x18e2) +
- 0x063a18e2, // c0x0128 (n0x18e2-n0x18e8) +
- 0x063f58e8, // c0x0129 (n0x18e8-n0x18fd) +
- 0x063f98fd, // c0x012a (n0x18fd-n0x18fe) +
- 0x0643d8fe, // c0x012b (n0x18fe-n0x190f) +
- 0x0644d90f, // c0x012c (n0x190f-n0x1913) +
- 0x06485913, // c0x012d (n0x1913-n0x1921) +
- 0x064b5921, // c0x012e (n0x1921-n0x192d) +
- 0x065ed92d, // c0x012f (n0x192d-n0x197b) +
- 0x0660d97b, // c0x0130 (n0x197b-n0x1983) +
- 0x06639983, // c0x0131 (n0x1983-n0x198e) +
- 0x0663d98e, // c0x0132 (n0x198e-n0x198f) +
- 0x0664198f, // c0x0133 (n0x198f-n0x1990) +
- 0x0673d990, // c0x0134 (n0x1990-n0x19cf) +
- 0x067499cf, // c0x0135 (n0x19cf-n0x19d2) +
- 0x067559d2, // c0x0136 (n0x19d2-n0x19d5) +
- 0x067619d5, // c0x0137 (n0x19d5-n0x19d8) +
- 0x0676d9d8, // c0x0138 (n0x19d8-n0x19db) +
- 0x067799db, // c0x0139 (n0x19db-n0x19de) +
- 0x067859de, // c0x013a (n0x19de-n0x19e1) +
- 0x067919e1, // c0x013b (n0x19e1-n0x19e4) +
- 0x0679d9e4, // c0x013c (n0x19e4-n0x19e7) +
- 0x067a99e7, // c0x013d (n0x19e7-n0x19ea) +
- 0x067b59ea, // c0x013e (n0x19ea-n0x19ed) +
- 0x067c19ed, // c0x013f (n0x19ed-n0x19f0) +
- 0x067cd9f0, // c0x0140 (n0x19f0-n0x19f3) +
- 0x067d99f3, // c0x0141 (n0x19f3-n0x19f6) +
- 0x067e19f6, // c0x0142 (n0x19f6-n0x19f8) +
- 0x067ed9f8, // c0x0143 (n0x19f8-n0x19fb) +
- 0x067f99fb, // c0x0144 (n0x19fb-n0x19fe) +
- 0x068059fe, // c0x0145 (n0x19fe-n0x1a01) +
- 0x06811a01, // c0x0146 (n0x1a01-n0x1a04) +
- 0x0681da04, // c0x0147 (n0x1a04-n0x1a07) +
- 0x06829a07, // c0x0148 (n0x1a07-n0x1a0a) +
- 0x06835a0a, // c0x0149 (n0x1a0a-n0x1a0d) +
- 0x06841a0d, // c0x014a (n0x1a0d-n0x1a10) +
- 0x0684da10, // c0x014b (n0x1a10-n0x1a13) +
- 0x06859a13, // c0x014c (n0x1a13-n0x1a16) +
- 0x06865a16, // c0x014d (n0x1a16-n0x1a19) +
- 0x06871a19, // c0x014e (n0x1a19-n0x1a1c) +
- 0x0687da1c, // c0x014f (n0x1a1c-n0x1a1f) +
- 0x06889a1f, // c0x0150 (n0x1a1f-n0x1a22) +
- 0x06895a22, // c0x0151 (n0x1a22-n0x1a25) +
- 0x068a1a25, // c0x0152 (n0x1a25-n0x1a28) +
- 0x068ada28, // c0x0153 (n0x1a28-n0x1a2b) +
- 0x068b5a2b, // c0x0154 (n0x1a2b-n0x1a2d) +
- 0x068c1a2d, // c0x0155 (n0x1a2d-n0x1a30) +
- 0x068cda30, // c0x0156 (n0x1a30-n0x1a33) +
- 0x068d9a33, // c0x0157 (n0x1a33-n0x1a36) +
- 0x068e5a36, // c0x0158 (n0x1a36-n0x1a39) +
- 0x068f1a39, // c0x0159 (n0x1a39-n0x1a3c) +
- 0x068fda3c, // c0x015a (n0x1a3c-n0x1a3f) +
- 0x06909a3f, // c0x015b (n0x1a3f-n0x1a42) +
- 0x06915a42, // c0x015c (n0x1a42-n0x1a45) +
- 0x06921a45, // c0x015d (n0x1a45-n0x1a48) +
- 0x0692da48, // c0x015e (n0x1a48-n0x1a4b) +
- 0x06939a4b, // c0x015f (n0x1a4b-n0x1a4e) +
- 0x06945a4e, // c0x0160 (n0x1a4e-n0x1a51) +
- 0x06951a51, // c0x0161 (n0x1a51-n0x1a54) +
- 0x06959a54, // c0x0162 (n0x1a54-n0x1a56) +
- 0x06965a56, // c0x0163 (n0x1a56-n0x1a59) +
- 0x06971a59, // c0x0164 (n0x1a59-n0x1a5c) +
- 0x0697da5c, // c0x0165 (n0x1a5c-n0x1a5f) +
- 0x06989a5f, // c0x0166 (n0x1a5f-n0x1a62) +
- 0x06995a62, // c0x0167 (n0x1a62-n0x1a65) +
- 0x069a1a65, // c0x0168 (n0x1a65-n0x1a68) +
- 0x069ada68, // c0x0169 (n0x1a68-n0x1a6b) +
- 0x069b9a6b, // c0x016a (n0x1a6b-n0x1a6e) +
- 0x069bda6e, // c0x016b (n0x1a6e-n0x1a6f) +
- 0x069c9a6f, // c0x016c (n0x1a6f-n0x1a72) +
- 0x069e1a72, // c0x016d (n0x1a72-n0x1a78) +
- 0x069f1a78, // c0x016e (n0x1a78-n0x1a7c) +
- 0x06a09a7c, // c0x016f (n0x1a7c-n0x1a82) +
- 0x06a4da82, // c0x0170 (n0x1a82-n0x1a93) +
- 0x06a61a93, // c0x0171 (n0x1a93-n0x1a98) +
- 0x06a91a98, // c0x0172 (n0x1a98-n0x1aa4) +
- 0x06aa1aa4, // c0x0173 (n0x1aa4-n0x1aa8) +
- 0x06abdaa8, // c0x0174 (n0x1aa8-n0x1aaf) +
- 0x06ad5aaf, // c0x0175 (n0x1aaf-n0x1ab5) +
+ 0x0105440f, // c0x0006 (n0x040f-n0x0415) +
+ 0x01058415, // c0x0007 (n0x0415-n0x0416) +
+ 0x01078416, // c0x0008 (n0x0416-n0x041e) +
+ 0x011dc41e, // c0x0009 (n0x041e-n0x0477) +
+ 0x011f0477, // c0x000a (n0x0477-n0x047c) +
+ 0x0120447c, // c0x000b (n0x047c-n0x0481) +
+ 0x01214481, // c0x000c (n0x0481-n0x0485) +
+ 0x0122c485, // c0x000d (n0x0485-n0x048b) +
+ 0x0123c48b, // c0x000e (n0x048b-n0x048f) +
+ 0x0125448f, // c0x000f (n0x048f-n0x0495) +
+ 0x01278495, // c0x0010 (n0x0495-n0x049e) +
+ 0x0127c49e, // c0x0011 (n0x049e-n0x049f) +
+ 0x0129449f, // c0x0012 (n0x049f-n0x04a5) +
+ 0x012984a5, // c0x0013 (n0x04a5-n0x04a6) +
+ 0x012b44a6, // c0x0014 (n0x04a6-n0x04ad) +
+ 0x012b84ad, // c0x0015 (n0x04ad-n0x04ae) +
+ 0x013004ae, // c0x0016 (n0x04ae-n0x04c0) +
+ 0x013044c0, // c0x0017 (n0x04c0-n0x04c1) +
+ 0x013244c1, // c0x0018 (n0x04c1-n0x04c9) +
+ 0x013384c9, // c0x0019 (n0x04c9-n0x04ce) +
+ 0x0133c4ce, // c0x001a (n0x04ce-n0x04cf) +
+ 0x0136c4cf, // c0x001b (n0x04cf-n0x04db) +
+ 0x013944db, // c0x001c (n0x04db-n0x04e5) +
+ 0x013bc4e5, // c0x001d (n0x04e5-n0x04ef) +
+ 0x013c44ef, // c0x001e (n0x04ef-n0x04f1) +
+ 0x013c84f1, // c0x001f (n0x04f1-n0x04f2) +
+ 0x014584f2, // c0x0020 (n0x04f2-n0x0516) +
+ 0x0146c516, // c0x0021 (n0x0516-n0x051b) +
+ 0x0148051b, // c0x0022 (n0x051b-n0x0520) +
+ 0x0149c520, // c0x0023 (n0x0520-n0x0527) +
+ 0x014ac527, // c0x0024 (n0x0527-n0x052b) +
+ 0x014c052b, // c0x0025 (n0x052b-n0x0530) +
+ 0x014e4530, // c0x0026 (n0x0530-n0x0539) +
+ 0x015fc539, // c0x0027 (n0x0539-n0x057f) +
+ 0x0160057f, // c0x0028 (n0x057f-n0x0580) +
+ 0x01614580, // c0x0029 (n0x0580-n0x0585) +
+ 0x01628585, // c0x002a (n0x0585-n0x058a) +
+ 0x0163058a, // c0x002b (n0x058a-n0x058c) +
+ 0x0164058c, // c0x002c (n0x058c-n0x0590) +
+ 0x01658590, // c0x002d (n0x0590-n0x0596) +
+ 0x0169c596, // c0x002e (n0x0596-n0x05a7) +
+ 0x016ac5a7, // c0x002f (n0x05a7-n0x05ab) +
+ 0x016b05ab, // c0x0030 (n0x05ab-n0x05ac) +
+ 0x016b45ac, // c0x0031 (n0x05ac-n0x05ad) +
+ 0x016b85ad, // c0x0032 (n0x05ad-n0x05ae) +
+ 0x016f45ae, // c0x0033 (n0x05ae-n0x05bd) +
+ 0x616f85bd, // c0x0034 (n0x05bd-n0x05be)* o
+ 0x017085be, // c0x0035 (n0x05be-n0x05c2) +
+ 0x017185c2, // c0x0036 (n0x05c2-n0x05c6) +
+ 0x017cc5c6, // c0x0037 (n0x05c6-n0x05f3) +
+ 0x217d05f3, // c0x0038 (n0x05f3-n0x05f4) o
+ 0x017d45f4, // c0x0039 (n0x05f4-n0x05f5) +
+ 0x018085f5, // c0x003a (n0x05f5-n0x0602) +
+ 0x01b1c602, // c0x003b (n0x0602-n0x06c7) +
+ 0x21b786c7, // c0x003c (n0x06c7-n0x06de) o
+ 0x01b9c6de, // c0x003d (n0x06de-n0x06e7) +
+ 0x01ba46e7, // c0x003e (n0x06e7-n0x06e9) +
+ 0x01bc06e9, // c0x003f (n0x06e9-n0x06f0) +
+ 0x01bd86f0, // c0x0040 (n0x06f0-n0x06f6) +
+ 0x01bdc6f6, // c0x0041 (n0x06f6-n0x06f7) +
+ 0x01bec6f7, // c0x0042 (n0x06f7-n0x06fb) +
+ 0x01bf46fb, // c0x0043 (n0x06fb-n0x06fd) +
+ 0x01bf86fd, // c0x0044 (n0x06fd-n0x06fe) +
+ 0x01c186fe, // c0x0045 (n0x06fe-n0x0706) +
+ 0x01c1c706, // c0x0046 (n0x0706-n0x0707) +
+ 0x01c30707, // c0x0047 (n0x0707-n0x070c) +
+ 0x01c5870c, // c0x0048 (n0x070c-n0x0716) +
+ 0x01c78716, // c0x0049 (n0x0716-n0x071e) +
+ 0x01ca871e, // c0x004a (n0x071e-n0x072a) +
+ 0x01cd072a, // c0x004b (n0x072a-n0x0734) +
+ 0x01cf4734, // c0x004c (n0x0734-n0x073d) +
+ 0x01d0873d, // c0x004d (n0x073d-n0x0742) +
+ 0x01d0c742, // c0x004e (n0x0742-n0x0743) +
+ 0x01d28743, // c0x004f (n0x0743-n0x074a) +
+ 0x01d3474a, // c0x0050 (n0x074a-n0x074d) +
+ 0x01d9474d, // c0x0051 (n0x074d-n0x0765) +
+ 0x01db0765, // c0x0052 (n0x0765-n0x076c) +
+ 0x01dbc76c, // c0x0053 (n0x076c-n0x076f) +
+ 0x01dd076f, // c0x0054 (n0x076f-n0x0774) +
+ 0x01de8774, // c0x0055 (n0x0774-n0x077a) +
+ 0x01e0077a, // c0x0056 (n0x077a-n0x0780) +
+ 0x01e18780, // c0x0057 (n0x0780-n0x0786) +
+ 0x01e30786, // c0x0058 (n0x0786-n0x078c) +
+ 0x01e4c78c, // c0x0059 (n0x078c-n0x0793) +
+ 0x01e58793, // c0x005a (n0x0793-n0x0796) +
+ 0x01eb8796, // c0x005b (n0x0796-n0x07ae) +
+ 0x01ed07ae, // c0x005c (n0x07ae-n0x07b4) +
+ 0x01ee07b4, // c0x005d (n0x07b4-n0x07b8) +
+ 0x01f247b8, // c0x005e (n0x07b8-n0x07c9) +
+ 0x01fa47c9, // c0x005f (n0x07c9-n0x07e9) +
+ 0x01fd07e9, // c0x0060 (n0x07e9-n0x07f4) +
+ 0x01fd87f4, // c0x0061 (n0x07f4-n0x07f6) +
+ 0x61fdc7f6, // c0x0062 (n0x07f6-n0x07f7)* o
+ 0x21fe07f7, // c0x0063 (n0x07f7-n0x07f8) o
+ 0x01ffc7f8, // c0x0064 (n0x07f8-n0x07ff) +
+ 0x020047ff, // c0x0065 (n0x07ff-n0x0801) +
+ 0x02038801, // c0x0066 (n0x0801-n0x080e) +
+ 0x0206080e, // c0x0067 (n0x080e-n0x0818) +
+ 0x02064818, // c0x0068 (n0x0818-n0x0819) +
+ 0x02070819, // c0x0069 (n0x0819-n0x081c) +
+ 0x0208881c, // c0x006a (n0x081c-n0x0822) +
+ 0x020ac822, // c0x006b (n0x0822-n0x082b) +
+ 0x020c882b, // c0x006c (n0x082b-n0x0832) +
+ 0x0268c832, // c0x006d (n0x0832-n0x09a3) +
+ 0x026989a3, // c0x006e (n0x09a3-n0x09a6) +
+ 0x026b89a6, // c0x006f (n0x09a6-n0x09ae) +
+ 0x028749ae, // c0x0070 (n0x09ae-n0x0a1d) +
+ 0x02944a1d, // c0x0071 (n0x0a1d-n0x0a51) +
+ 0x029b4a51, // c0x0072 (n0x0a51-n0x0a6d) +
+ 0x02a0ca6d, // c0x0073 (n0x0a6d-n0x0a83) +
+ 0x02af4a83, // c0x0074 (n0x0a83-n0x0abd) +
+ 0x02b4cabd, // c0x0075 (n0x0abd-n0x0ad3) +
+ 0x02b88ad3, // c0x0076 (n0x0ad3-n0x0ae2) +
+ 0x02c84ae2, // c0x0077 (n0x0ae2-n0x0b21) +
+ 0x02d50b21, // c0x0078 (n0x0b21-n0x0b54) +
+ 0x02de8b54, // c0x0079 (n0x0b54-n0x0b7a) +
+ 0x02e78b7a, // c0x007a (n0x0b7a-n0x0b9e) +
+ 0x02edcb9e, // c0x007b (n0x0b9e-n0x0bb7) +
+ 0x03114bb7, // c0x007c (n0x0bb7-n0x0c45) +
+ 0x031ccc45, // c0x007d (n0x0c45-n0x0c73) +
+ 0x03298c73, // c0x007e (n0x0c73-n0x0ca6) +
+ 0x032e4ca6, // c0x007f (n0x0ca6-n0x0cb9) +
+ 0x0336ccb9, // c0x0080 (n0x0cb9-n0x0cdb) +
+ 0x033a8cdb, // c0x0081 (n0x0cdb-n0x0cea) +
+ 0x033f8cea, // c0x0082 (n0x0cea-n0x0cfe) +
+ 0x03470cfe, // c0x0083 (n0x0cfe-n0x0d1c) +
+ 0x63474d1c, // c0x0084 (n0x0d1c-n0x0d1d)* o
+ 0x63478d1d, // c0x0085 (n0x0d1d-n0x0d1e)* o
+ 0x6347cd1e, // c0x0086 (n0x0d1e-n0x0d1f)* o
+ 0x034f8d1f, // c0x0087 (n0x0d1f-n0x0d3e) +
+ 0x03560d3e, // c0x0088 (n0x0d3e-n0x0d58) +
+ 0x035dcd58, // c0x0089 (n0x0d58-n0x0d77) +
+ 0x03654d77, // c0x008a (n0x0d77-n0x0d95) +
+ 0x036d8d95, // c0x008b (n0x0d95-n0x0db6) +
+ 0x03744db6, // c0x008c (n0x0db6-n0x0dd1) +
+ 0x03870dd1, // c0x008d (n0x0dd1-n0x0e1c) +
+ 0x038c8e1c, // c0x008e (n0x0e1c-n0x0e32) +
+ 0x638cce32, // c0x008f (n0x0e32-n0x0e33)* o
+ 0x03964e33, // c0x0090 (n0x0e33-n0x0e59) +
+ 0x039ece59, // c0x0091 (n0x0e59-n0x0e7b) +
+ 0x03a38e7b, // c0x0092 (n0x0e7b-n0x0e8e) +
+ 0x03aa0e8e, // c0x0093 (n0x0e8e-n0x0ea8) +
+ 0x03b48ea8, // c0x0094 (n0x0ea8-n0x0ed2) +
+ 0x03c10ed2, // c0x0095 (n0x0ed2-n0x0f04) +
+ 0x03c78f04, // c0x0096 (n0x0f04-n0x0f1e) +
+ 0x03d8cf1e, // c0x0097 (n0x0f1e-n0x0f63) +
+ 0x63d90f63, // c0x0098 (n0x0f63-n0x0f64)* o
+ 0x63d94f64, // c0x0099 (n0x0f64-n0x0f65)* o
+ 0x03df0f65, // c0x009a (n0x0f65-n0x0f7c) +
+ 0x03e4cf7c, // c0x009b (n0x0f7c-n0x0f93) +
+ 0x03edcf93, // c0x009c (n0x0f93-n0x0fb7) +
+ 0x03f58fb7, // c0x009d (n0x0fb7-n0x0fd6) +
+ 0x03f9cfd6, // c0x009e (n0x0fd6-n0x0fe7) +
+ 0x04080fe7, // c0x009f (n0x0fe7-n0x1020) +
+ 0x040b5020, // c0x00a0 (n0x1020-n0x102d) +
+ 0x0411502d, // c0x00a1 (n0x102d-n0x1045) +
+ 0x04189045, // c0x00a2 (n0x1045-n0x1062) +
+ 0x04211062, // c0x00a3 (n0x1062-n0x1084) +
+ 0x04251084, // c0x00a4 (n0x1084-n0x1094) +
+ 0x042c1094, // c0x00a5 (n0x1094-n0x10b0) +
+ 0x642c50b0, // c0x00a6 (n0x10b0-n0x10b1)* o
+ 0x042dd0b1, // c0x00a7 (n0x10b1-n0x10b7) +
+ 0x042f90b7, // c0x00a8 (n0x10b7-n0x10be) +
+ 0x0433d0be, // c0x00a9 (n0x10be-n0x10cf) +
+ 0x0434d0cf, // c0x00aa (n0x10cf-n0x10d3) +
+ 0x043650d3, // c0x00ab (n0x10d3-n0x10d9) +
+ 0x043dd0d9, // c0x00ac (n0x10d9-n0x10f7) +
+ 0x043f10f7, // c0x00ad (n0x10f7-n0x10fc) +
+ 0x044090fc, // c0x00ae (n0x10fc-n0x1102) +
+ 0x0442d102, // c0x00af (n0x1102-n0x110b) +
+ 0x0444110b, // c0x00b0 (n0x110b-n0x1110) +
+ 0x04459110, // c0x00b1 (n0x1110-n0x1116) +
+ 0x04491116, // c0x00b2 (n0x1116-n0x1124) +
+ 0x044a5124, // c0x00b3 (n0x1124-n0x1129) +
+ 0x044ad129, // c0x00b4 (n0x1129-n0x112b) +
+ 0x044b112b, // c0x00b5 (n0x112b-n0x112c) +
+ 0x044d512c, // c0x00b6 (n0x112c-n0x1135) +
+ 0x044f9135, // c0x00b7 (n0x1135-n0x113e) +
+ 0x0451113e, // c0x00b8 (n0x113e-n0x1144) +
+ 0x04519144, // c0x00b9 (n0x1144-n0x1146) +
+ 0x04539146, // c0x00ba (n0x1146-n0x114e) +
+ 0x0455914e, // c0x00bb (n0x114e-n0x1156) +
+ 0x04575156, // c0x00bc (n0x1156-n0x115d) +
+ 0x0459115d, // c0x00bd (n0x115d-n0x1164) +
+ 0x045a1164, // c0x00be (n0x1164-n0x1168) +
+ 0x045b5168, // c0x00bf (n0x1168-n0x116d) +
+ 0x045bd16d, // c0x00c0 (n0x116d-n0x116f) +
+ 0x045d116f, // c0x00c1 (n0x116f-n0x1174) +
+ 0x045e1174, // c0x00c2 (n0x1174-n0x1178) +
+ 0x045fd178, // c0x00c3 (n0x1178-n0x117f) +
+ 0x04e8d17f, // c0x00c4 (n0x117f-n0x13a3) +
+ 0x04ec53a3, // c0x00c5 (n0x13a3-n0x13b1) +
+ 0x04ef13b1, // c0x00c6 (n0x13b1-n0x13bc) +
+ 0x04f093bc, // c0x00c7 (n0x13bc-n0x13c2) +
+ 0x04f253c2, // c0x00c8 (n0x13c2-n0x13c9) +
+ 0x64f293c9, // c0x00c9 (n0x13c9-n0x13ca)* o
+ 0x04f6d3ca, // c0x00ca (n0x13ca-n0x13db) +
+ 0x04f753db, // c0x00cb (n0x13db-n0x13dd) +
+ 0x24f793dd, // c0x00cc (n0x13dd-n0x13de) o
+ 0x24f7d3de, // c0x00cd (n0x13de-n0x13df) o
+ 0x04f813df, // c0x00ce (n0x13df-n0x13e0) +
+ 0x0503d3e0, // c0x00cf (n0x13e0-n0x140f) +
+ 0x2504540f, // c0x00d0 (n0x140f-n0x1411) o
+ 0x2504d411, // c0x00d1 (n0x1411-n0x1413) o
+ 0x25059413, // c0x00d2 (n0x1413-n0x1416) o
+ 0x05081416, // c0x00d3 (n0x1416-n0x1420) +
+ 0x050a5420, // c0x00d4 (n0x1420-n0x1429) +
+ 0x050b1429, // c0x00d5 (n0x1429-n0x142c) +
+ 0x05c0942c, // c0x00d6 (n0x142c-n0x1702) +
+ 0x05c0d702, // c0x00d7 (n0x1702-n0x1703) +
+ 0x05c11703, // c0x00d8 (n0x1703-n0x1704) +
+ 0x25c15704, // c0x00d9 (n0x1704-n0x1705) o
+ 0x05c19705, // c0x00da (n0x1705-n0x1706) +
+ 0x25c1d706, // c0x00db (n0x1706-n0x1707) o
+ 0x05c21707, // c0x00dc (n0x1707-n0x1708) +
+ 0x25c2d708, // c0x00dd (n0x1708-n0x170b) o
+ 0x05c3170b, // c0x00de (n0x170b-n0x170c) +
+ 0x05c3570c, // c0x00df (n0x170c-n0x170d) +
+ 0x25c3970d, // c0x00e0 (n0x170d-n0x170e) o
+ 0x05c3d70e, // c0x00e1 (n0x170e-n0x170f) +
+ 0x25c4570f, // c0x00e2 (n0x170f-n0x1711) o
+ 0x05c49711, // c0x00e3 (n0x1711-n0x1712) +
+ 0x05c4d712, // c0x00e4 (n0x1712-n0x1713) +
+ 0x25c5d713, // c0x00e5 (n0x1713-n0x1717) o
+ 0x05c61717, // c0x00e6 (n0x1717-n0x1718) +
+ 0x05c65718, // c0x00e7 (n0x1718-n0x1719) +
+ 0x05c69719, // c0x00e8 (n0x1719-n0x171a) +
+ 0x05c6d71a, // c0x00e9 (n0x171a-n0x171b) +
+ 0x25c7171b, // c0x00ea (n0x171b-n0x171c) o
+ 0x05c7571c, // c0x00eb (n0x171c-n0x171d) +
+ 0x05c7971d, // c0x00ec (n0x171d-n0x171e) +
+ 0x05c7d71e, // c0x00ed (n0x171e-n0x171f) +
+ 0x05c8171f, // c0x00ee (n0x171f-n0x1720) +
+ 0x25c89720, // c0x00ef (n0x1720-n0x1722) o
+ 0x05c8d722, // c0x00f0 (n0x1722-n0x1723) +
+ 0x05c91723, // c0x00f1 (n0x1723-n0x1724) +
+ 0x05c95724, // c0x00f2 (n0x1724-n0x1725) +
+ 0x25c99725, // c0x00f3 (n0x1725-n0x1726) o
+ 0x05c9d726, // c0x00f4 (n0x1726-n0x1727) +
+ 0x25ca5727, // c0x00f5 (n0x1727-n0x1729) o
+ 0x25ca9729, // c0x00f6 (n0x1729-n0x172a) o
+ 0x05cc572a, // c0x00f7 (n0x172a-n0x1731) +
+ 0x05cd1731, // c0x00f8 (n0x1731-n0x1734) +
+ 0x05d11734, // c0x00f9 (n0x1734-n0x1744) +
+ 0x05d15744, // c0x00fa (n0x1744-n0x1745) +
+ 0x05d39745, // c0x00fb (n0x1745-n0x174e) +
+ 0x05e1174e, // c0x00fc (n0x174e-n0x1784) +
+ 0x05e19784, // c0x00fd (n0x1784-n0x1786) +
+ 0x05e45786, // c0x00fe (n0x1786-n0x1791) +
+ 0x05e61791, // c0x00ff (n0x1791-n0x1798) +
+ 0x05e6d798, // c0x0100 (n0x1798-n0x179b) +
+ 0x05e8d79b, // c0x0101 (n0x179b-n0x17a3) +
+ 0x05ec57a3, // c0x0102 (n0x17a3-n0x17b1) +
+ 0x061597b1, // c0x0103 (n0x17b1-n0x1856) +
+ 0x0617d856, // c0x0104 (n0x1856-n0x185f) +
+ 0x0619185f, // c0x0105 (n0x185f-n0x1864) +
+ 0x061c5864, // c0x0106 (n0x1864-n0x1871) +
+ 0x061e1871, // c0x0107 (n0x1871-n0x1878) +
+ 0x061fd878, // c0x0108 (n0x1878-n0x187f) +
+ 0x0622187f, // c0x0109 (n0x187f-n0x1888) +
+ 0x06239888, // c0x010a (n0x1888-n0x188e) +
+ 0x0625588e, // c0x010b (n0x188e-n0x1895) +
+ 0x06275895, // c0x010c (n0x1895-n0x189d) +
+ 0x0628589d, // c0x010d (n0x189d-n0x18a1) +
+ 0x062b58a1, // c0x010e (n0x18a1-n0x18ad) +
+ 0x062cd8ad, // c0x010f (n0x18ad-n0x18b3) +
+ 0x064dd8b3, // c0x0110 (n0x18b3-n0x1937) +
+ 0x06501937, // c0x0111 (n0x1937-n0x1940) +
+ 0x06521940, // c0x0112 (n0x1940-n0x1948) +
+ 0x06535948, // c0x0113 (n0x1948-n0x194d) +
+ 0x0654994d, // c0x0114 (n0x194d-n0x1952) +
+ 0x06569952, // c0x0115 (n0x1952-n0x195a) +
+ 0x0660d95a, // c0x0116 (n0x195a-n0x1983) +
+ 0x06629983, // c0x0117 (n0x1983-n0x198a) +
+ 0x0663d98a, // c0x0118 (n0x198a-n0x198f) +
+ 0x0664198f, // c0x0119 (n0x198f-n0x1990) +
+ 0x06655990, // c0x011a (n0x1990-n0x1995) +
+ 0x06671995, // c0x011b (n0x1995-n0x199c) +
+ 0x0667d99c, // c0x011c (n0x199c-n0x199f) +
+ 0x066ad99f, // c0x011d (n0x199f-n0x19ab) +
+ 0x066c19ab, // c0x011e (n0x19ab-n0x19b0) +
+ 0x066c59b0, // c0x011f (n0x19b0-n0x19b1) +
+ 0x066dd9b1, // c0x0120 (n0x19b1-n0x19b7) +
+ 0x066e99b7, // c0x0121 (n0x19b7-n0x19ba) +
+ 0x066ed9ba, // c0x0122 (n0x19ba-n0x19bb) +
+ 0x067099bb, // c0x0123 (n0x19bb-n0x19c2) +
+ 0x067459c2, // c0x0124 (n0x19c2-n0x19d1) +
+ 0x067499d1, // c0x0125 (n0x19d1-n0x19d2) +
+ 0x067699d2, // c0x0126 (n0x19d2-n0x19da) +
+ 0x067b99da, // c0x0127 (n0x19da-n0x19ee) +
+ 0x067d19ee, // c0x0128 (n0x19ee-n0x19f4) +
+ 0x068259f4, // c0x0129 (n0x19f4-n0x1a09) +
+ 0x06829a09, // c0x012a (n0x1a09-n0x1a0a) +
+ 0x0682da0a, // c0x012b (n0x1a0a-n0x1a0b) +
+ 0x06871a0b, // c0x012c (n0x1a0b-n0x1a1c) +
+ 0x06881a1c, // c0x012d (n0x1a1c-n0x1a20) +
+ 0x068b9a20, // c0x012e (n0x1a20-n0x1a2e) +
+ 0x068e9a2e, // c0x012f (n0x1a2e-n0x1a3a) +
+ 0x06a21a3a, // c0x0130 (n0x1a3a-n0x1a88) +
+ 0x06a41a88, // c0x0131 (n0x1a88-n0x1a90) +
+ 0x06a6da90, // c0x0132 (n0x1a90-n0x1a9b) +
+ 0x06a71a9b, // c0x0133 (n0x1a9b-n0x1a9c) +
+ 0x06a75a9c, // c0x0134 (n0x1a9c-n0x1a9d) +
+ 0x06b71a9d, // c0x0135 (n0x1a9d-n0x1adc) +
+ 0x06b7dadc, // c0x0136 (n0x1adc-n0x1adf) +
+ 0x06b89adf, // c0x0137 (n0x1adf-n0x1ae2) +
+ 0x06b95ae2, // c0x0138 (n0x1ae2-n0x1ae5) +
+ 0x06ba1ae5, // c0x0139 (n0x1ae5-n0x1ae8) +
+ 0x06badae8, // c0x013a (n0x1ae8-n0x1aeb) +
+ 0x06bb9aeb, // c0x013b (n0x1aeb-n0x1aee) +
+ 0x06bc5aee, // c0x013c (n0x1aee-n0x1af1) +
+ 0x06bd1af1, // c0x013d (n0x1af1-n0x1af4) +
+ 0x06bddaf4, // c0x013e (n0x1af4-n0x1af7) +
+ 0x06be9af7, // c0x013f (n0x1af7-n0x1afa) +
+ 0x06bf5afa, // c0x0140 (n0x1afa-n0x1afd) +
+ 0x06c01afd, // c0x0141 (n0x1afd-n0x1b00) +
+ 0x06c0db00, // c0x0142 (n0x1b00-n0x1b03) +
+ 0x06c15b03, // c0x0143 (n0x1b03-n0x1b05) +
+ 0x06c21b05, // c0x0144 (n0x1b05-n0x1b08) +
+ 0x06c2db08, // c0x0145 (n0x1b08-n0x1b0b) +
+ 0x06c39b0b, // c0x0146 (n0x1b0b-n0x1b0e) +
+ 0x06c45b0e, // c0x0147 (n0x1b0e-n0x1b11) +
+ 0x06c51b11, // c0x0148 (n0x1b11-n0x1b14) +
+ 0x06c5db14, // c0x0149 (n0x1b14-n0x1b17) +
+ 0x06c69b17, // c0x014a (n0x1b17-n0x1b1a) +
+ 0x06c75b1a, // c0x014b (n0x1b1a-n0x1b1d) +
+ 0x06c81b1d, // c0x014c (n0x1b1d-n0x1b20) +
+ 0x06c8db20, // c0x014d (n0x1b20-n0x1b23) +
+ 0x06c99b23, // c0x014e (n0x1b23-n0x1b26) +
+ 0x06ca5b26, // c0x014f (n0x1b26-n0x1b29) +
+ 0x06cb1b29, // c0x0150 (n0x1b29-n0x1b2c) +
+ 0x06cbdb2c, // c0x0151 (n0x1b2c-n0x1b2f) +
+ 0x06cc9b2f, // c0x0152 (n0x1b2f-n0x1b32) +
+ 0x06cd5b32, // c0x0153 (n0x1b32-n0x1b35) +
+ 0x06ce1b35, // c0x0154 (n0x1b35-n0x1b38) +
+ 0x06ce9b38, // c0x0155 (n0x1b38-n0x1b3a) +
+ 0x06cf5b3a, // c0x0156 (n0x1b3a-n0x1b3d) +
+ 0x06d01b3d, // c0x0157 (n0x1b3d-n0x1b40) +
+ 0x06d0db40, // c0x0158 (n0x1b40-n0x1b43) +
+ 0x06d19b43, // c0x0159 (n0x1b43-n0x1b46) +
+ 0x06d25b46, // c0x015a (n0x1b46-n0x1b49) +
+ 0x06d31b49, // c0x015b (n0x1b49-n0x1b4c) +
+ 0x06d3db4c, // c0x015c (n0x1b4c-n0x1b4f) +
+ 0x06d49b4f, // c0x015d (n0x1b4f-n0x1b52) +
+ 0x06d55b52, // c0x015e (n0x1b52-n0x1b55) +
+ 0x06d61b55, // c0x015f (n0x1b55-n0x1b58) +
+ 0x06d6db58, // c0x0160 (n0x1b58-n0x1b5b) +
+ 0x06d79b5b, // c0x0161 (n0x1b5b-n0x1b5e) +
+ 0x06d85b5e, // c0x0162 (n0x1b5e-n0x1b61) +
+ 0x06d8db61, // c0x0163 (n0x1b61-n0x1b63) +
+ 0x06d99b63, // c0x0164 (n0x1b63-n0x1b66) +
+ 0x06da5b66, // c0x0165 (n0x1b66-n0x1b69) +
+ 0x06db1b69, // c0x0166 (n0x1b69-n0x1b6c) +
+ 0x06dbdb6c, // c0x0167 (n0x1b6c-n0x1b6f) +
+ 0x06dc9b6f, // c0x0168 (n0x1b6f-n0x1b72) +
+ 0x06dd5b72, // c0x0169 (n0x1b72-n0x1b75) +
+ 0x06de1b75, // c0x016a (n0x1b75-n0x1b78) +
+ 0x06dedb78, // c0x016b (n0x1b78-n0x1b7b) +
+ 0x06df1b7b, // c0x016c (n0x1b7b-n0x1b7c) +
+ 0x06dfdb7c, // c0x016d (n0x1b7c-n0x1b7f) +
+ 0x06e15b7f, // c0x016e (n0x1b7f-n0x1b85) +
+ 0x06e25b85, // c0x016f (n0x1b85-n0x1b89) +
+ 0x06e3db89, // c0x0170 (n0x1b89-n0x1b8f) +
+ 0x06e81b8f, // c0x0171 (n0x1b8f-n0x1ba0) +
+ 0x06e95ba0, // c0x0172 (n0x1ba0-n0x1ba5) +
+ 0x06ec5ba5, // c0x0173 (n0x1ba5-n0x1bb1) +
+ 0x06ed5bb1, // c0x0174 (n0x1bb1-n0x1bb5) +
+ 0x06ef1bb5, // c0x0175 (n0x1bb5-n0x1bbc) +
+ 0x06f09bbc, // c0x0176 (n0x1bbc-n0x1bc2) +
}
-// max children 373 (capacity 511)
-// max text offset 23896 (capacity 32767)
+// max children 374 (capacity 511)
+// max text offset 24971 (capacity 32767)
// max text length 36 (capacity 63)
-// max hi 6837 (capacity 16383)
-// max lo 6831 (capacity 16383)
+// max hi 7106 (capacity 16383)
+// max lo 7100 (capacity 16383)
diff --git a/go/src/golang.org/x/net/publicsuffix/table_test.go b/go/src/golang.org/x/net/publicsuffix/table_test.go
index f92963a..df2b191 100644
--- a/go/src/golang.org/x/net/publicsuffix/table_test.go
+++ b/go/src/golang.org/x/net/publicsuffix/table_test.go
@@ -1325,6 +1325,53 @@
"yamagata.jp",
"yamaguchi.jp",
"yamanashi.jp",
+ "xn--4pvxs.jp",
+ "xn--vgu402c.jp",
+ "xn--c3s14m.jp",
+ "xn--f6qx53a.jp",
+ "xn--8pvr4u.jp",
+ "xn--uist22h.jp",
+ "xn--djrs72d6uy.jp",
+ "xn--mkru45i.jp",
+ "xn--0trq7p7nn.jp",
+ "xn--8ltr62k.jp",
+ "xn--2m4a15e.jp",
+ "xn--efvn9s.jp",
+ "xn--32vp30h.jp",
+ "xn--4it797k.jp",
+ "xn--1lqs71d.jp",
+ "xn--5rtp49c.jp",
+ "xn--5js045d.jp",
+ "xn--ehqz56n.jp",
+ "xn--1lqs03n.jp",
+ "xn--qqqt11m.jp",
+ "xn--kbrq7o.jp",
+ "xn--pssu33l.jp",
+ "xn--ntsq17g.jp",
+ "xn--uisz3g.jp",
+ "xn--6btw5a.jp",
+ "xn--1ctwo.jp",
+ "xn--6orx2r.jp",
+ "xn--rht61e.jp",
+ "xn--rht27z.jp",
+ "xn--djty4k.jp",
+ "xn--nit225k.jp",
+ "xn--rht3d.jp",
+ "xn--klty5x.jp",
+ "xn--kltx9a.jp",
+ "xn--kltp7d.jp",
+ "xn--uuwu58a.jp",
+ "xn--zbx025d.jp",
+ "xn--ntso0iqx3a.jp",
+ "xn--elqq16h.jp",
+ "xn--4it168d.jp",
+ "xn--klt787d.jp",
+ "xn--rny31h.jp",
+ "xn--7t0a264c.jp",
+ "xn--5rtq34k.jp",
+ "xn--k7yn95e.jp",
+ "xn--tor131o.jp",
+ "xn--d5qv7z876c.jp",
"*.kawasaki.jp",
"*.kitakyushu.jp",
"*.kobe.jp",
@@ -4740,24 +4787,26 @@
"gos.pk",
"info.pk",
"pl",
+ "com.pl",
+ "net.pl",
+ "org.pl",
+ "info.pl",
+ "waw.pl",
+ "gov.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",
@@ -4773,10 +4822,6 @@
"tourism.pl",
"travel.pl",
"turystyka.pl",
- "6bone.pl",
- "art.pl",
- "mbone.pl",
- "gov.pl",
"uw.gov.pl",
"um.gov.pl",
"ug.gov.pl",
@@ -4786,9 +4831,6 @@
"sr.gov.pl",
"po.gov.pl",
"pa.gov.pl",
- "ngo.pl",
- "irc.pl",
- "usenet.pl",
"augustow.pl",
"babia-gora.pl",
"bedzin.pl",
@@ -4874,7 +4916,6 @@
"rzeszow.pl",
"sanok.pl",
"sejny.pl",
- "siedlce.pl",
"slask.pl",
"slupsk.pl",
"sosnowiec.pl",
@@ -4896,7 +4937,6 @@
"walbrzych.pl",
"warmia.pl",
"warszawa.pl",
- "waw.pl",
"wegrow.pl",
"wielun.pl",
"wlocl.pl",
@@ -4909,16 +4949,6 @@
"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",
@@ -5070,7 +5100,6 @@
"mari-el.ru",
"marine.ru",
"mordovia.ru",
- "mosreg.ru",
"msk.ru",
"murmansk.ru",
"nalchik.ru",
@@ -5886,66 +5915,98 @@
"*.za",
"*.zm",
"*.zw",
+ "abb",
"abbott",
"abogado",
"academy",
"accenture",
+ "accountant",
"accountants",
"active",
"actor",
+ "ads",
+ "adult",
+ "afl",
"africa",
"agency",
+ "aig",
"airforce",
+ "airtel",
"allfinanz",
"alsace",
"amsterdam",
+ "analytics",
"android",
+ "apartments",
"aquarelle",
+ "aramco",
"archi",
"army",
+ "arte",
"associates",
"attorney",
"auction",
"audio",
+ "author",
+ "auto",
"autos",
"axa",
+ "azure",
"band",
+ "bank",
"bar",
"barcelona",
+ "barclaycard",
+ "barclays",
"bargains",
"bauhaus",
"bayern",
+ "bbc",
+ "bbva",
"bcn",
"beer",
+ "bentley",
"berlin",
"best",
"bharti",
"bible",
"bid",
"bike",
+ "bing",
+ "bingo",
"bio",
"black",
"blackfriday",
"bloomberg",
"blue",
+ "bms",
"bmw",
"bnl",
"bnpparibas",
+ "boats",
+ "bom",
"bond",
"boo",
+ "bot",
"boutique",
+ "bradesco",
+ "bridgestone",
+ "broker",
"brussels",
"budapest",
"build",
"builders",
"business",
+ "buy",
"buzz",
"bzh",
"cab",
"cal",
+ "call",
"camera",
"camp",
"cancerresearch",
+ "canon",
"capetown",
"capital",
"caravan",
@@ -5953,9 +6014,11 @@
"care",
"career",
"careers",
+ "cars",
"cartier",
"casa",
"cash",
+ "casino",
"catering",
"cba",
"cbn",
@@ -5963,19 +6026,25 @@
"ceo",
"cern",
"cfa",
+ "cfd",
"channel",
+ "chat",
"cheap",
+ "chloe",
"christmas",
"chrome",
"church",
+ "circle",
"citic",
"city",
+ "cityeats",
"claims",
"cleaning",
"click",
"clinic",
"clothing",
"club",
+ "coach",
"codes",
"coffee",
"college",
@@ -5990,25 +6059,36 @@
"contractors",
"cooking",
"cool",
+ "corsica",
"country",
+ "courses",
"credit",
"creditcard",
+ "cricket",
+ "crown",
"crs",
"cruises",
+ "csc",
"cuisinella",
"cymru",
"dabur",
"dad",
"dance",
+ "date",
"dating",
"datsun",
"day",
+ "dclk",
"deals",
"degree",
+ "delivery",
+ "dell",
"democrat",
"dental",
"dentist",
"desi",
+ "design",
+ "dev",
"diamonds",
"diet",
"digital",
@@ -6016,17 +6096,25 @@
"directory",
"discount",
"dnp",
+ "docs",
+ "dog",
+ "doha",
"domains",
"doosan",
+ "download",
"durban",
"dvag",
+ "earth",
"eat",
+ "edeka",
"education",
"email",
"emerck",
+ "energy",
"engineer",
"engineering",
"enterprises",
+ "epson",
"equipment",
"erni",
"esq",
@@ -6038,22 +6126,35 @@
"exchange",
"expert",
"exposed",
+ "fage",
"fail",
+ "fairwinds",
+ "faith",
"fan",
+ "fans",
"farm",
"fashion",
+ "fast",
"feedback",
+ "ferrero",
+ "final",
"finance",
"financial",
+ "firestone",
"firmdale",
"fish",
"fishing",
+ "fit",
"fitness",
"flights",
"florist",
+ "flowers",
"flsmidth",
"fly",
"foo",
+ "football",
+ "ford",
+ "forex",
"forsale",
"foundation",
"frl",
@@ -6066,11 +6167,13 @@
"garden",
"gbiz",
"gdn",
+ "gea",
"gent",
"ggee",
"gift",
"gifts",
"gives",
+ "giving",
"glass",
"gle",
"global",
@@ -6078,34 +6181,46 @@
"gmail",
"gmo",
"gmx",
+ "goldpoint",
+ "golf",
+ "goo",
+ "goog",
"google",
"gop",
+ "got",
"graphics",
"gratis",
"green",
"gripe",
"group",
+ "gucci",
"guge",
"guide",
"guitars",
"guru",
"hamburg",
+ "hangout",
"haus",
"healthcare",
"help",
"here",
"hermes",
"hiphop",
+ "hitachi",
"hiv",
"holdings",
"holiday",
"homes",
+ "honda",
"horse",
"host",
"hosting",
+ "hotmail",
"house",
"how",
+ "hsbc",
"ibm",
+ "ice",
"ifm",
"iinet",
"immo",
@@ -6122,150 +6237,236 @@
"irish",
"ist",
"istanbul",
+ "itau",
"iwc",
+ "jaguar",
"java",
+ "jcb",
"jetzt",
+ "jlc",
"joburg",
+ "jot",
+ "joy",
+ "jprs",
"juegos",
"kaufen",
+ "kddi",
+ "kfh",
"kim",
+ "kinder",
"kitchen",
"kiwi",
"koeln",
"krd",
"kred",
+ "kyoto",
"lacaixa",
"land",
+ "landrover",
+ "lat",
"latrobe",
"lawyer",
"lds",
"lease",
"leclerc",
+ "legal",
"lgbt",
+ "liaison",
+ "lidl",
"life",
+ "lifestyle",
"lighting",
+ "like",
"limited",
"limo",
+ "lincoln",
+ "linde",
"link",
+ "live",
+ "loan",
"loans",
"london",
+ "lotte",
"lotto",
+ "ltd",
"ltda",
+ "lupin",
"luxe",
"luxury",
"madrid",
+ "maif",
"maison",
+ "man",
"management",
"mango",
"market",
"marketing",
+ "markets",
+ "marriott",
"media",
"meet",
"melbourne",
"meme",
+ "memorial",
"menu",
+ "meo",
"miami",
+ "microsoft",
"mini",
+ "mma",
+ "mobily",
"moda",
"moe",
+ "moi",
"monash",
+ "money",
"montblanc",
"mormon",
"mortgage",
"moscow",
"motorcycles",
"mov",
+ "movistar",
+ "mtn",
+ "mtpc",
+ "nadex",
"nagoya",
"navy",
"netbank",
"network",
"neustar",
"new",
+ "news",
"nexus",
"ngo",
"nhk",
+ "nico",
"ninja",
"nissan",
+ "norton",
+ "nowruz",
"nra",
"nrw",
+ "ntt",
"nyc",
+ "obi",
"okinawa",
+ "one",
"ong",
"onl",
"ooo",
"oracle",
"organic",
+ "osaka",
"otsuka",
"ovh",
+ "page",
+ "panerai",
"paris",
+ "pars",
"partners",
"parts",
+ "party",
"pharmacy",
+ "philips",
"photo",
"photography",
"photos",
"physio",
+ "piaget",
"pics",
"pictet",
"pictures",
+ "pin",
"pink",
"pizza",
"place",
"plumbing",
"pohl",
"poker",
+ "porn",
"praxi",
"press",
"prod",
"productions",
"prof",
+ "promo",
"properties",
"property",
"pub",
"qpon",
"quebec",
+ "racing",
+ "read",
"realtor",
"recipes",
"red",
+ "redstone",
"rehab",
"reise",
"reisen",
+ "reit",
"ren",
+ "rent",
"rentals",
"repair",
"report",
"republican",
"rest",
"restaurant",
+ "review",
"reviews",
"rich",
+ "ricoh",
"rio",
"rip",
+ "rocher",
"rocks",
"rodeo",
+ "room",
"rsvp",
"ruhr",
"ryukyu",
"saarland",
+ "safe",
+ "sakura",
+ "sale",
+ "salon",
"samsung",
+ "sandvik",
+ "sandvikcoromant",
+ "sanofi",
"sap",
+ "sapo",
"sarl",
+ "saxo",
+ "sbs",
"sca",
"scb",
"schmidt",
"scholarships",
+ "school",
"schule",
+ "schwarz",
+ "science",
+ "scor",
"scot",
"seat",
+ "seek",
+ "sener",
"services",
"sew",
+ "sex",
"sexy",
"sharp",
+ "shia",
"shiksha",
"shoes",
"shriram",
"singles",
"sky",
+ "skype",
+ "smile",
"social",
"software",
"sohu",
@@ -6274,43 +6475,70 @@
"soy",
"space",
"spiegel",
+ "spreadbetting",
+ "stada",
+ "statoil",
+ "stc",
+ "stcgroup",
+ "stockholm",
+ "study",
+ "style",
"supplies",
"supply",
"support",
"surf",
"surgery",
"suzuki",
+ "swiss",
+ "sydney",
+ "symantec",
"systems",
+ "tab",
"taipei",
"tatar",
"tattoo",
"tax",
+ "tci",
"technology",
+ "telefonica",
"temasek",
+ "tennis",
"tienda",
"tips",
+ "tires",
"tirol",
"today",
"tokyo",
"tools",
"top",
+ "toray",
"toshiba",
"town",
"toys",
"trade",
+ "trading",
"training",
+ "trust",
"tui",
+ "tushu",
+ "ubs",
"university",
"uno",
"uol",
"vacations",
+ "vana",
"vegas",
"ventures",
"versicherung",
"vet",
"viajes",
+ "video",
"villas",
+ "virgin",
"vision",
+ "vista",
+ "vistaprint",
+ "viva",
"vlaanderen",
"vodka",
"vote",
@@ -6318,7 +6546,9 @@
"voto",
"voyage",
"wales",
+ "walter",
"wang",
+ "wanggou",
"watch",
"webcam",
"website",
@@ -6328,12 +6558,17 @@
"wien",
"wiki",
"williamhill",
+ "win",
+ "windows",
"wme",
"work",
"works",
"world",
"wtc",
"wtf",
+ "xbox",
+ "xerox",
+ "xin",
"xn--1qqw23a",
"xn--30rr7y",
"xn--3bst00m",
@@ -6355,6 +6590,7 @@
"xn--czrs0t",
"xn--czru2d",
"xn--d1acj3b",
+ "xn--eckvdtc9d",
"xn--efvy88h",
"xn--fiq228c5hs",
"xn--fiq64b",
@@ -6362,13 +6598,20 @@
"xn--flw351e",
"xn--hxt814e",
"xn--i1b6b1a6a2e",
+ "xn--imr513n",
"xn--io0a7i",
+ "xn--kcrx77d1x4a",
"xn--kput3i",
+ "xn--mgba3a3ejt",
"xn--mgbab2bd",
+ "xn--mgbb9fbpob",
+ "xn--mgbt3dhd",
"xn--mxtq1m",
"xn--ngbc5azd",
+ "xn--ngbe9e0a",
"xn--nqv7f",
"xn--nqv7fs00ema",
+ "xn--nyqy26a",
"xn--p1acf",
"xn--q9jyb4c",
"xn--qcka1pmc",
@@ -6378,16 +6621,22 @@
"xn--vermgensberater-ctb",
"xn--vermgensberatung-pwb",
"xn--vhquv",
+ "xn--vuq861b",
"xn--xhq521b",
"xn--zfr164b",
"xyz",
"yachts",
+ "yamaxun",
"yandex",
+ "yodobashi",
"yoga",
"yokohama",
"youtube",
+ "zara",
+ "zero",
"zip",
"zone",
+ "zuerich",
"cloudfront.net",
"ap-northeast-1.compute.amazonaws.com",
"ap-southeast-1.compute.amazonaws.com",
@@ -6397,6 +6646,7 @@
"compute.amazonaws.com",
"compute-1.amazonaws.com",
"eu-west-1.compute.amazonaws.com",
+ "eu-central-1.compute.amazonaws.com",
"sa-east-1.compute.amazonaws.com",
"us-east-1.amazonaws.com",
"us-gov-west-1.compute.amazonaws.com",
@@ -6757,6 +7007,7 @@
"githubusercontent.com",
"ro.com",
"appspot.com",
+ "blogspot.ae",
"blogspot.be",
"blogspot.bj",
"blogspot.ca",
@@ -6771,6 +7022,7 @@
"blogspot.com.au",
"blogspot.com.br",
"blogspot.com.es",
+ "blogspot.com.tr",
"blogspot.cv",
"blogspot.cz",
"blogspot.de",
@@ -6792,6 +7044,7 @@
"blogspot.pt",
"blogspot.re",
"blogspot.ro",
+ "blogspot.ru",
"blogspot.se",
"blogspot.sg",
"blogspot.sk",
@@ -6800,6 +7053,7 @@
"codespot.com",
"googleapis.com",
"googlecode.com",
+ "pagespeedmobilizer.com",
"withgoogle.com",
"herokuapp.com",
"herokussl.com",
@@ -6815,46 +7069,72 @@
"nid.io",
"operaunite.com",
"outsystemscloud.com",
+ "art.pl",
+ "gliwice.pl",
+ "krakow.pl",
+ "poznan.pl",
+ "wroc.pl",
+ "zakopane.pl",
"rhcloud.com",
"service.gov.uk",
"priv.at",
+ "gda.pl",
+ "gdansk.pl",
+ "gdynia.pl",
+ "med.pl",
+ "sopot.pl",
+ "hk.com",
+ "hk.org",
+ "ltd.hk",
+ "inc.hk",
"yolasite.com",
"za.net",
"za.org",
}
var nodeLabels = [...]string{
+ "abb",
"abbott",
"abogado",
"ac",
"academy",
"accenture",
+ "accountant",
"accountants",
"active",
"actor",
"ad",
+ "ads",
+ "adult",
"ae",
"aero",
"af",
+ "afl",
"africa",
"ag",
"agency",
"ai",
+ "aig",
"airforce",
+ "airtel",
"al",
"allfinanz",
"alsace",
"am",
"amsterdam",
"an",
+ "analytics",
"android",
"ao",
+ "apartments",
"aq",
"aquarelle",
"ar",
+ "aramco",
"archi",
"army",
"arpa",
+ "arte",
"as",
"asia",
"associates",
@@ -6863,23 +7143,32 @@
"au",
"auction",
"audio",
+ "author",
+ "auto",
"autos",
"aw",
"ax",
"axa",
"az",
+ "azure",
"ba",
"band",
+ "bank",
"bar",
"barcelona",
+ "barclaycard",
+ "barclays",
"bargains",
"bauhaus",
"bayern",
"bb",
+ "bbc",
+ "bbva",
"bcn",
"bd",
"be",
"beer",
+ "bentley",
"berlin",
"best",
"bf",
@@ -6890,6 +7179,8 @@
"bible",
"bid",
"bike",
+ "bing",
+ "bingo",
"bio",
"biz",
"bj",
@@ -6898,15 +7189,22 @@
"bloomberg",
"blue",
"bm",
+ "bms",
"bmw",
"bn",
"bnl",
"bnpparibas",
"bo",
+ "boats",
+ "bom",
"bond",
"boo",
+ "bot",
"boutique",
"br",
+ "bradesco",
+ "bridgestone",
+ "broker",
"brussels",
"bs",
"bt",
@@ -6914,6 +7212,7 @@
"build",
"builders",
"business",
+ "buy",
"buzz",
"bv",
"bw",
@@ -6923,9 +7222,11 @@
"ca",
"cab",
"cal",
+ "call",
"camera",
"camp",
"cancerresearch",
+ "canon",
"capetown",
"capital",
"caravan",
@@ -6933,9 +7234,11 @@
"care",
"career",
"careers",
+ "cars",
"cartier",
"casa",
"cash",
+ "casino",
"cat",
"catering",
"cba",
@@ -6947,16 +7250,21 @@
"cern",
"cf",
"cfa",
+ "cfd",
"cg",
"ch",
"channel",
+ "chat",
"cheap",
+ "chloe",
"christmas",
"chrome",
"church",
"ci",
+ "circle",
"citic",
"city",
+ "cityeats",
"ck",
"cl",
"claims",
@@ -6968,6 +7276,7 @@
"cm",
"cn",
"co",
+ "coach",
"codes",
"coffee",
"college",
@@ -6984,12 +7293,17 @@
"cooking",
"cool",
"coop",
+ "corsica",
"country",
+ "courses",
"cr",
"credit",
"creditcard",
+ "cricket",
+ "crown",
"crs",
"cruises",
+ "csc",
"cu",
"cuisinella",
"cv",
@@ -7001,16 +7315,22 @@
"dabur",
"dad",
"dance",
+ "date",
"dating",
"datsun",
"day",
+ "dclk",
"de",
"deals",
"degree",
+ "delivery",
+ "dell",
"democrat",
"dental",
"dentist",
"desi",
+ "design",
+ "dev",
"diamonds",
"diet",
"digital",
@@ -7022,22 +7342,30 @@
"dm",
"dnp",
"do",
+ "docs",
+ "dog",
+ "doha",
"domains",
"doosan",
+ "download",
"durban",
"dvag",
"dz",
+ "earth",
"eat",
"ec",
+ "edeka",
"edu",
"education",
"ee",
"eg",
"email",
"emerck",
+ "energy",
"engineer",
"engineering",
"enterprises",
+ "epson",
"equipment",
"er",
"erni",
@@ -7053,27 +7381,40 @@
"exchange",
"expert",
"exposed",
+ "fage",
"fail",
+ "fairwinds",
+ "faith",
"fan",
+ "fans",
"farm",
"fashion",
+ "fast",
"feedback",
+ "ferrero",
"fi",
+ "final",
"finance",
"financial",
+ "firestone",
"firmdale",
"fish",
"fishing",
+ "fit",
"fitness",
"fj",
"fk",
"flights",
"florist",
+ "flowers",
"flsmidth",
"fly",
"fm",
"fo",
"foo",
+ "football",
+ "ford",
+ "forex",
"forsale",
"foundation",
"fr",
@@ -7091,6 +7432,7 @@
"gd",
"gdn",
"ge",
+ "gea",
"gent",
"gf",
"gg",
@@ -7100,6 +7442,7 @@
"gift",
"gifts",
"gives",
+ "giving",
"gl",
"glass",
"gle",
@@ -7110,8 +7453,13 @@
"gmo",
"gmx",
"gn",
+ "goldpoint",
+ "golf",
+ "goo",
+ "goog",
"google",
"gop",
+ "got",
"gov",
"gp",
"gq",
@@ -7124,6 +7472,7 @@
"gs",
"gt",
"gu",
+ "gucci",
"guge",
"guide",
"guitars",
@@ -7131,12 +7480,14 @@
"gw",
"gy",
"hamburg",
+ "hangout",
"haus",
"healthcare",
"help",
"here",
"hermes",
"hiphop",
+ "hitachi",
"hiv",
"hk",
"hm",
@@ -7144,15 +7495,19 @@
"holdings",
"holiday",
"homes",
+ "honda",
"horse",
"host",
"hosting",
+ "hotmail",
"house",
"how",
"hr",
+ "hsbc",
"ht",
"hu",
"ibm",
+ "ice",
"id",
"ie",
"ifm",
@@ -7181,22 +7536,32 @@
"ist",
"istanbul",
"it",
+ "itau",
"iwc",
+ "jaguar",
"java",
+ "jcb",
"je",
"jetzt",
+ "jlc",
"jm",
"jo",
"jobs",
"joburg",
+ "jot",
+ "joy",
"jp",
+ "jprs",
"juegos",
"kaufen",
+ "kddi",
"ke",
+ "kfh",
"kg",
"kh",
"ki",
"kim",
+ "kinder",
"kitchen",
"kiwi",
"km",
@@ -7208,10 +7573,13 @@
"kred",
"kw",
"ky",
+ "kyoto",
"kz",
"la",
"lacaixa",
"land",
+ "landrover",
+ "lat",
"latrobe",
"lawyer",
"lb",
@@ -7219,33 +7587,49 @@
"lds",
"lease",
"leclerc",
+ "legal",
"lgbt",
"li",
+ "liaison",
+ "lidl",
"life",
+ "lifestyle",
"lighting",
+ "like",
"limited",
"limo",
+ "lincoln",
+ "linde",
"link",
+ "live",
"lk",
+ "loan",
"loans",
"london",
+ "lotte",
"lotto",
"lr",
"ls",
"lt",
+ "ltd",
"ltda",
"lu",
+ "lupin",
"luxe",
"luxury",
"lv",
"ly",
"ma",
"madrid",
+ "maif",
"maison",
+ "man",
"management",
"mango",
"market",
"marketing",
+ "markets",
+ "marriott",
"mc",
"md",
"me",
@@ -7253,32 +7637,42 @@
"meet",
"melbourne",
"meme",
+ "memorial",
"menu",
+ "meo",
"mg",
"mh",
"miami",
+ "microsoft",
"mil",
"mini",
"mk",
"ml",
"mm",
+ "mma",
"mn",
"mo",
"mobi",
+ "mobily",
"moda",
"moe",
+ "moi",
"monash",
+ "money",
"montblanc",
"mormon",
"mortgage",
"moscow",
"motorcycles",
"mov",
+ "movistar",
"mp",
"mq",
"mr",
"ms",
"mt",
+ "mtn",
+ "mtpc",
"mu",
"museum",
"mv",
@@ -7287,6 +7681,7 @@
"my",
"mz",
"na",
+ "nadex",
"nagoya",
"name",
"navy",
@@ -7297,49 +7692,64 @@
"network",
"neustar",
"new",
+ "news",
"nexus",
"nf",
"ng",
"ngo",
"nhk",
"ni",
+ "nico",
"ninja",
"nissan",
"nl",
"no",
+ "norton",
+ "nowruz",
"np",
"nr",
"nra",
"nrw",
+ "ntt",
"nu",
"nyc",
"nz",
+ "obi",
"okinawa",
"om",
+ "one",
"ong",
"onl",
"ooo",
"oracle",
"org",
"organic",
+ "osaka",
"otsuka",
"ovh",
"pa",
+ "page",
+ "panerai",
"paris",
+ "pars",
"partners",
"parts",
+ "party",
"pe",
"pf",
"pg",
"ph",
"pharmacy",
+ "philips",
"photo",
"photography",
"photos",
"physio",
+ "piaget",
"pics",
"pictet",
"pictures",
+ "pin",
"pink",
"pizza",
"pk",
@@ -7350,6 +7760,7 @@
"pn",
"pohl",
"poker",
+ "porn",
"post",
"pr",
"praxi",
@@ -7358,6 +7769,7 @@
"prod",
"productions",
"prof",
+ "promo",
"properties",
"property",
"ps",
@@ -7368,27 +7780,36 @@
"qa",
"qpon",
"quebec",
+ "racing",
"re",
+ "read",
"realtor",
"recipes",
"red",
+ "redstone",
"rehab",
"reise",
"reisen",
+ "reit",
"ren",
+ "rent",
"rentals",
"repair",
"report",
"republican",
"rest",
"restaurant",
+ "review",
"reviews",
"rich",
+ "ricoh",
"rio",
"rip",
"ro",
+ "rocher",
"rocks",
"rodeo",
+ "room",
"rs",
"rsvp",
"ru",
@@ -7397,26 +7818,44 @@
"ryukyu",
"sa",
"saarland",
+ "safe",
+ "sakura",
+ "sale",
+ "salon",
"samsung",
+ "sandvik",
+ "sandvikcoromant",
+ "sanofi",
"sap",
+ "sapo",
"sarl",
+ "saxo",
"sb",
+ "sbs",
"sc",
"sca",
"scb",
"schmidt",
"scholarships",
+ "school",
"schule",
+ "schwarz",
+ "science",
+ "scor",
"scot",
"sd",
"se",
"seat",
+ "seek",
+ "sener",
"services",
"sew",
+ "sex",
"sexy",
"sg",
"sh",
"sharp",
+ "shia",
"shiksha",
"shoes",
"shriram",
@@ -7425,8 +7864,10 @@
"sj",
"sk",
"sky",
+ "skype",
"sl",
"sm",
+ "smile",
"sn",
"so",
"social",
@@ -7437,8 +7878,16 @@
"soy",
"space",
"spiegel",
+ "spreadbetting",
"sr",
"st",
+ "stada",
+ "statoil",
+ "stc",
+ "stcgroup",
+ "stockholm",
+ "study",
+ "style",
"su",
"supplies",
"supply",
@@ -7447,24 +7896,32 @@
"surgery",
"suzuki",
"sv",
+ "swiss",
"sx",
"sy",
+ "sydney",
+ "symantec",
"systems",
"sz",
+ "tab",
"taipei",
"tatar",
"tattoo",
"tax",
"tc",
+ "tci",
"td",
"technology",
"tel",
+ "telefonica",
"temasek",
+ "tennis",
"tf",
"tg",
"th",
"tienda",
"tips",
+ "tires",
"tirol",
"tj",
"tk",
@@ -7476,20 +7933,25 @@
"tokyo",
"tools",
"top",
+ "toray",
"toshiba",
"town",
"toys",
"tp",
"tr",
"trade",
+ "trading",
"training",
"travel",
+ "trust",
"tt",
"tui",
+ "tushu",
"tv",
"tw",
"tz",
"ua",
+ "ubs",
"ug",
"uk",
"university",
@@ -7500,6 +7962,7 @@
"uz",
"va",
"vacations",
+ "vana",
"vc",
"ve",
"vegas",
@@ -7509,8 +7972,13 @@
"vg",
"vi",
"viajes",
+ "video",
"villas",
+ "virgin",
"vision",
+ "vista",
+ "vistaprint",
+ "viva",
"vlaanderen",
"vn",
"vodka",
@@ -7520,7 +7988,9 @@
"voyage",
"vu",
"wales",
+ "walter",
"wang",
+ "wanggou",
"watch",
"webcam",
"website",
@@ -7531,6 +8001,8 @@
"wien",
"wiki",
"williamhill",
+ "win",
+ "windows",
"wme",
"work",
"works",
@@ -7538,6 +8010,9 @@
"ws",
"wtc",
"wtf",
+ "xbox",
+ "xerox",
+ "xin",
"xn--1qqw23a",
"xn--30rr7y",
"xn--3bst00m",
@@ -7565,6 +8040,7 @@
"xn--czrs0t",
"xn--czru2d",
"xn--d1acj3b",
+ "xn--eckvdtc9d",
"xn--efvy88h",
"xn--fiq228c5hs",
"xn--fiq64b",
@@ -7578,9 +8054,11 @@
"xn--h2brj9c",
"xn--hxt814e",
"xn--i1b6b1a6a2e",
+ "xn--imr513n",
"xn--io0a7i",
"xn--j1amh",
"xn--j6w193g",
+ "xn--kcrx77d1x4a",
"xn--kprw13d",
"xn--kpry57d",
"xn--kput3i",
@@ -7588,25 +8066,30 @@
"xn--lgbbat1ad8j",
"xn--mgb2ddes",
"xn--mgb9awbf",
+ "xn--mgba3a3ejt",
"xn--mgba3a4f16a",
"xn--mgba3a4fra",
"xn--mgbaam7a8h",
"xn--mgbab2bd",
"xn--mgbayh7gpa",
+ "xn--mgbb9fbpob",
"xn--mgbbh1a71e",
"xn--mgbc0a9azcg",
"xn--mgberp4a5d4a87g",
"xn--mgberp4a5d4ar",
"xn--mgbqly7c0a67fbc",
"xn--mgbqly7cvafr",
+ "xn--mgbt3dhd",
"xn--mgbtf8fl",
"xn--mgbx4cd0ab",
"xn--mxtq1m",
"xn--ngbc5azd",
+ "xn--ngbe9e0a",
"xn--nnx388a",
"xn--node",
"xn--nqv7f",
"xn--nqv7fs00ema",
+ "xn--nyqy26a",
"xn--o3cw4h",
"xn--ogbpf8fl",
"xn--p1acf",
@@ -7621,6 +8104,7 @@
"xn--vermgensberater-ctb",
"xn--vermgensberatung-pwb",
"xn--vhquv",
+ "xn--vuq861b",
"xn--wgbh1c",
"xn--wgbl6a",
"xn--xhq521b",
@@ -7632,16 +8116,21 @@
"xxx",
"xyz",
"yachts",
+ "yamaxun",
"yandex",
"ye",
+ "yodobashi",
"yoga",
"yokohama",
"youtube",
"yt",
"za",
+ "zara",
+ "zero",
"zip",
"zm",
"zone",
+ "zuerich",
"zw",
"com",
"edu",
@@ -7651,6 +8140,7 @@
"org",
"nom",
"ac",
+ "blogspot",
"co",
"gov",
"mil",
@@ -8242,6 +8732,7 @@
"gr",
"herokuapp",
"herokussl",
+ "hk",
"hobby-site",
"homelinux",
"homeunix",
@@ -8315,6 +8806,7 @@
"no",
"operaunite",
"outsystemscloud",
+ "pagespeedmobilizer",
"qc",
"rhcloud",
"ro",
@@ -8362,6 +8854,7 @@
"ap-northeast-1",
"ap-southeast-1",
"ap-southeast-2",
+ "eu-central-1",
"eu-west-1",
"sa-east-1",
"us-gov-west-1",
@@ -8547,6 +9040,8 @@
"edu",
"gov",
"idv",
+ "inc",
+ "ltd",
"net",
"org",
"xn--55qx5d",
@@ -9136,6 +9631,53 @@
"tottori",
"toyama",
"wakayama",
+ "xn--0trq7p7nn",
+ "xn--1ctwo",
+ "xn--1lqs03n",
+ "xn--1lqs71d",
+ "xn--2m4a15e",
+ "xn--32vp30h",
+ "xn--4it168d",
+ "xn--4it797k",
+ "xn--4pvxs",
+ "xn--5js045d",
+ "xn--5rtp49c",
+ "xn--5rtq34k",
+ "xn--6btw5a",
+ "xn--6orx2r",
+ "xn--7t0a264c",
+ "xn--8ltr62k",
+ "xn--8pvr4u",
+ "xn--c3s14m",
+ "xn--d5qv7z876c",
+ "xn--djrs72d6uy",
+ "xn--djty4k",
+ "xn--efvn9s",
+ "xn--ehqz56n",
+ "xn--elqq16h",
+ "xn--f6qx53a",
+ "xn--k7yn95e",
+ "xn--kbrq7o",
+ "xn--klt787d",
+ "xn--kltp7d",
+ "xn--kltx9a",
+ "xn--klty5x",
+ "xn--mkru45i",
+ "xn--nit225k",
+ "xn--ntso0iqx3a",
+ "xn--ntsq17g",
+ "xn--pssu33l",
+ "xn--qqqt11m",
+ "xn--rht27z",
+ "xn--rht3d",
+ "xn--rht61e",
+ "xn--rny31h",
+ "xn--tor131o",
+ "xn--uist22h",
+ "xn--uisz3g",
+ "xn--uuwu58a",
+ "xn--vgu402c",
+ "xn--zbx025d",
"yamagata",
"yamaguchi",
"yamanashi",
@@ -12534,6 +13076,7 @@
"from-me",
"game-host",
"gotdns",
+ "hk",
"hobby-site",
"homedns",
"homeftp",
@@ -12615,7 +13158,6 @@
"net",
"org",
"web",
- "6bone",
"agro",
"aid",
"art",
@@ -12655,7 +13197,6 @@
"gsm",
"ilawa",
"info",
- "irc",
"jaworzno",
"jelenia-gora",
"jgora",
@@ -12688,7 +13229,6 @@
"malopolska",
"mazowsze",
"mazury",
- "mbone",
"med",
"media",
"miasta",
@@ -12698,7 +13238,6 @@
"mragowo",
"naklo",
"net",
- "ngo",
"nieruchomosci",
"nom",
"nowaruda",
@@ -12739,7 +13278,6 @@
"sejny",
"sex",
"shop",
- "siedlce",
"sklep",
"skoczow",
"slask",
@@ -12766,7 +13304,6 @@
"turek",
"turystyka",
"tychy",
- "usenet",
"ustka",
"walbrzych",
"warmia",
@@ -12890,6 +13427,7 @@
"bashkiria",
"belgorod",
"bir",
+ "blogspot",
"bryansk",
"buryatia",
"cbg",
@@ -12944,7 +13482,6 @@
"marine",
"mil",
"mordovia",
- "mosreg",
"msk",
"murmansk",
"mytis",
@@ -13221,6 +13758,7 @@
"tel",
"tv",
"web",
+ "blogspot",
"gov",
"aero",
"biz",
diff --git a/go/src/golang.org/x/net/spdy/dictionary.go b/go/src/golang.org/x/net/spdy/dictionary.go
deleted file mode 100644
index 5a5ff0e..0000000
--- a/go/src/golang.org/x/net/spdy/dictionary.go
+++ /dev/null
@@ -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 --git a/go/src/golang.org/x/net/spdy/read.go b/go/src/golang.org/x/net/spdy/read.go
deleted file mode 100644
index 9359a95..0000000
--- a/go/src/golang.org/x/net/spdy/read.go
+++ /dev/null
@@ -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 --git a/go/src/golang.org/x/net/spdy/spdy_test.go b/go/src/golang.org/x/net/spdy/spdy_test.go
deleted file mode 100644
index ce581f1..0000000
--- a/go/src/golang.org/x/net/spdy/spdy_test.go
+++ /dev/null
@@ -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 --git a/go/src/golang.org/x/net/spdy/types.go b/go/src/golang.org/x/net/spdy/types.go
deleted file mode 100644
index f0b6d2b..0000000
--- a/go/src/golang.org/x/net/spdy/types.go
+++ /dev/null
@@ -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 "golang.org/x/net/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, represented 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 --git a/go/src/golang.org/x/net/spdy/write.go b/go/src/golang.org/x/net/spdy/write.go
deleted file mode 100644
index b212f66..0000000
--- a/go/src/golang.org/x/net/spdy/write.go
+++ /dev/null
@@ -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 --git a/go/src/golang.org/x/net/trace/histogram.go b/go/src/golang.org/x/net/trace/histogram.go
new file mode 100644
index 0000000..bb42aa5
--- /dev/null
+++ b/go/src/golang.org/x/net/trace/histogram.go
@@ -0,0 +1,356 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package trace
+
+// This file implements histogramming for RPC statistics collection.
+
+import (
+ "bytes"
+ "fmt"
+ "html/template"
+ "log"
+ "math"
+
+ "golang.org/x/net/internal/timeseries"
+)
+
+const (
+ bucketCount = 38
+)
+
+// histogram keeps counts of values in buckets that are spaced
+// out in powers of 2: 0-1, 2-3, 4-7...
+// histogram implements timeseries.Observable
+type histogram struct {
+ sum int64 // running total of measurements
+ sumOfSquares float64 // square of running total
+ buckets []int64 // bucketed values for histogram
+ value int // holds a single value as an optimization
+ valueCount int64 // number of values recorded for single value
+}
+
+// AddMeasurement records a value measurement observation to the histogram.
+func (h *histogram) addMeasurement(value int64) {
+ // TODO: assert invariant
+ h.sum += value
+ h.sumOfSquares += float64(value) * float64(value)
+
+ bucketIndex := getBucket(value)
+
+ if h.valueCount == 0 || (h.valueCount > 0 && h.value == bucketIndex) {
+ h.value = bucketIndex
+ h.valueCount++
+ } else {
+ h.allocateBuckets()
+ h.buckets[bucketIndex]++
+ }
+}
+
+func (h *histogram) allocateBuckets() {
+ if h.buckets == nil {
+ h.buckets = make([]int64, bucketCount)
+ h.buckets[h.value] = h.valueCount
+ h.value = 0
+ h.valueCount = -1
+ }
+}
+
+func log2(i int64) int {
+ n := 0
+ for ; i >= 0x100; i >>= 8 {
+ n += 8
+ }
+ for ; i > 0; i >>= 1 {
+ n += 1
+ }
+ return n
+}
+
+func getBucket(i int64) (index int) {
+ index = log2(i) - 1
+ if index < 0 {
+ index = 0
+ }
+ if index >= bucketCount {
+ index = bucketCount - 1
+ }
+ return
+}
+
+// Total returns the number of recorded observations.
+func (h *histogram) total() (total int64) {
+ if h.valueCount >= 0 {
+ total = h.valueCount
+ }
+ for _, val := range h.buckets {
+ total += int64(val)
+ }
+ return
+}
+
+// Average returns the average value of recorded observations.
+func (h *histogram) average() float64 {
+ t := h.total()
+ if t == 0 {
+ return 0
+ }
+ return float64(h.sum) / float64(t)
+}
+
+// Variance returns the variance of recorded observations.
+func (h *histogram) variance() float64 {
+ t := float64(h.total())
+ if t == 0 {
+ return 0
+ }
+ s := float64(h.sum) / t
+ return h.sumOfSquares/t - s*s
+}
+
+// StandardDeviation returns the standard deviation of recorded observations.
+func (h *histogram) standardDeviation() float64 {
+ return math.Sqrt(h.variance())
+}
+
+// PercentileBoundary estimates the value that the given fraction of recorded
+// observations are less than.
+func (h *histogram) percentileBoundary(percentile float64) int64 {
+ total := h.total()
+
+ // Corner cases (make sure result is strictly less than Total())
+ if total == 0 {
+ return 0
+ } else if total == 1 {
+ return int64(h.average())
+ }
+
+ percentOfTotal := round(float64(total) * percentile)
+ var runningTotal int64
+
+ for i := range h.buckets {
+ value := h.buckets[i]
+ runningTotal += value
+ if runningTotal == percentOfTotal {
+ // We hit an exact bucket boundary. If the next bucket has data, it is a
+ // good estimate of the value. If the bucket is empty, we interpolate the
+ // midpoint between the next bucket's boundary and the next non-zero
+ // bucket. If the remaining buckets are all empty, then we use the
+ // boundary for the next bucket as the estimate.
+ j := uint8(i + 1)
+ min := bucketBoundary(j)
+ if runningTotal < total {
+ for h.buckets[j] == 0 {
+ j++
+ }
+ }
+ max := bucketBoundary(j)
+ return min + round(float64(max-min)/2)
+ } else if runningTotal > percentOfTotal {
+ // The value is in this bucket. Interpolate the value.
+ delta := runningTotal - percentOfTotal
+ percentBucket := float64(value-delta) / float64(value)
+ bucketMin := bucketBoundary(uint8(i))
+ nextBucketMin := bucketBoundary(uint8(i + 1))
+ bucketSize := nextBucketMin - bucketMin
+ return bucketMin + round(percentBucket*float64(bucketSize))
+ }
+ }
+ return bucketBoundary(bucketCount - 1)
+}
+
+// Median returns the estimated median of the observed values.
+func (h *histogram) median() int64 {
+ return h.percentileBoundary(0.5)
+}
+
+// Add adds other to h.
+func (h *histogram) Add(other timeseries.Observable) {
+ o := other.(*histogram)
+ if o.valueCount == 0 {
+ // Other histogram is empty
+ } else if h.valueCount >= 0 && o.valueCount > 0 && h.value == o.value {
+ // Both have a single bucketed value, aggregate them
+ h.valueCount += o.valueCount
+ } else {
+ // Two different values necessitate buckets in this histogram
+ h.allocateBuckets()
+ if o.valueCount >= 0 {
+ h.buckets[o.value] += o.valueCount
+ } else {
+ for i := range h.buckets {
+ h.buckets[i] += o.buckets[i]
+ }
+ }
+ }
+ h.sumOfSquares += o.sumOfSquares
+ h.sum += o.sum
+}
+
+// Clear resets the histogram to an empty state, removing all observed values.
+func (h *histogram) Clear() {
+ h.buckets = nil
+ h.value = 0
+ h.valueCount = 0
+ h.sum = 0
+ h.sumOfSquares = 0
+}
+
+// CopyFrom copies from other, which must be a *histogram, into h.
+func (h *histogram) CopyFrom(other timeseries.Observable) {
+ o := other.(*histogram)
+ if o.valueCount == -1 {
+ h.allocateBuckets()
+ copy(h.buckets, o.buckets)
+ }
+ h.sum = o.sum
+ h.sumOfSquares = o.sumOfSquares
+ h.value = o.value
+ h.valueCount = o.valueCount
+}
+
+// Multiply scales the histogram by the specified ratio.
+func (h *histogram) Multiply(ratio float64) {
+ if h.valueCount == -1 {
+ for i := range h.buckets {
+ h.buckets[i] = int64(float64(h.buckets[i]) * ratio)
+ }
+ } else {
+ h.valueCount = int64(float64(h.valueCount) * ratio)
+ }
+ h.sum = int64(float64(h.sum) * ratio)
+ h.sumOfSquares = h.sumOfSquares * ratio
+}
+
+// New creates a new histogram.
+func (h *histogram) New() timeseries.Observable {
+ r := new(histogram)
+ r.Clear()
+ return r
+}
+
+func (h *histogram) String() string {
+ return fmt.Sprintf("%d, %f, %d, %d, %v",
+ h.sum, h.sumOfSquares, h.value, h.valueCount, h.buckets)
+}
+
+// round returns the closest int64 to the argument
+func round(in float64) int64 {
+ return int64(math.Floor(in + 0.5))
+}
+
+// bucketBoundary returns the first value in the bucket.
+func bucketBoundary(bucket uint8) int64 {
+ if bucket == 0 {
+ return 0
+ }
+ return 1 << bucket
+}
+
+// bucketData holds data about a specific bucket for use in distTmpl.
+type bucketData struct {
+ Lower, Upper int64
+ N int64
+ Pct, CumulativePct float64
+ GraphWidth int
+}
+
+// data holds data about a Distribution for use in distTmpl.
+type data struct {
+ Buckets []*bucketData
+ Count, Median int64
+ Mean, StandardDeviation float64
+}
+
+// maxHTMLBarWidth is the maximum width of the HTML bar for visualizing buckets.
+const maxHTMLBarWidth = 350.0
+
+// newData returns data representing h for use in distTmpl.
+func (h *histogram) newData() *data {
+ // Force the allocation of buckets to simplify the rendering implementation
+ h.allocateBuckets()
+ // We scale the bars on the right so that the largest bar is
+ // maxHTMLBarWidth pixels in width.
+ maxBucket := int64(0)
+ for _, n := range h.buckets {
+ if n > maxBucket {
+ maxBucket = n
+ }
+ }
+ total := h.total()
+ barsizeMult := maxHTMLBarWidth / float64(maxBucket)
+ var pctMult float64
+ if total == 0 {
+ pctMult = 1.0
+ } else {
+ pctMult = 100.0 / float64(total)
+ }
+
+ buckets := make([]*bucketData, len(h.buckets))
+ runningTotal := int64(0)
+ for i, n := range h.buckets {
+ if n == 0 {
+ continue
+ }
+ runningTotal += n
+ var upperBound int64
+ if i < bucketCount-1 {
+ upperBound = bucketBoundary(uint8(i + 1))
+ } else {
+ upperBound = math.MaxInt64
+ }
+ buckets[i] = &bucketData{
+ Lower: bucketBoundary(uint8(i)),
+ Upper: upperBound,
+ N: n,
+ Pct: float64(n) * pctMult,
+ CumulativePct: float64(runningTotal) * pctMult,
+ GraphWidth: int(float64(n) * barsizeMult),
+ }
+ }
+ return &data{
+ Buckets: buckets,
+ Count: total,
+ Median: h.median(),
+ Mean: h.average(),
+ StandardDeviation: h.standardDeviation(),
+ }
+}
+
+func (h *histogram) html() template.HTML {
+ buf := new(bytes.Buffer)
+ if err := distTmpl.Execute(buf, h.newData()); err != nil {
+ buf.Reset()
+ log.Printf("net/trace: couldn't execute template: %v", err)
+ }
+ return template.HTML(buf.String())
+}
+
+// Input: data
+var distTmpl = template.Must(template.New("distTmpl").Parse(`
+<table>
+<tr>
+ <td style="padding:0.25em">Count: {{.Count}}</td>
+ <td style="padding:0.25em">Mean: {{printf "%.0f" .Mean}}</td>
+ <td style="padding:0.25em">StdDev: {{printf "%.0f" .StandardDeviation}}</td>
+ <td style="padding:0.25em">Median: {{.Median}}</td>
+</tr>
+</table>
+<hr>
+<table>
+{{range $b := .Buckets}}
+{{if $b}}
+ <tr>
+ <td style="padding:0 0 0 0.25em">[</td>
+ <td style="text-align:right;padding:0 0.25em">{{.Lower}},</td>
+ <td style="text-align:right;padding:0 0.25em">{{.Upper}})</td>
+ <td style="text-align:right;padding:0 0.25em">{{.N}}</td>
+ <td style="text-align:right;padding:0 0.25em">{{printf "%#.3f" .Pct}}%</td>
+ <td style="text-align:right;padding:0 0.25em">{{printf "%#.3f" .CumulativePct}}%</td>
+ <td><div style="background-color: blue; height: 1em; width: {{.GraphWidth}};"></div></td>
+ </tr>
+{{end}}
+{{end}}
+</table>
+`))
diff --git a/go/src/golang.org/x/net/trace/histogram_test.go b/go/src/golang.org/x/net/trace/histogram_test.go
new file mode 100644
index 0000000..d384b93
--- /dev/null
+++ b/go/src/golang.org/x/net/trace/histogram_test.go
@@ -0,0 +1,325 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package trace
+
+import (
+ "math"
+ "testing"
+)
+
+type sumTest struct {
+ value int64
+ sum int64
+ sumOfSquares float64
+ total int64
+}
+
+var sumTests = []sumTest{
+ {100, 100, 10000, 1},
+ {50, 150, 12500, 2},
+ {50, 200, 15000, 3},
+ {50, 250, 17500, 4},
+}
+
+type bucketingTest struct {
+ in int64
+ log int
+ bucket int
+}
+
+var bucketingTests = []bucketingTest{
+ {0, 0, 0},
+ {1, 1, 0},
+ {2, 2, 1},
+ {3, 2, 1},
+ {4, 3, 2},
+ {1000, 10, 9},
+ {1023, 10, 9},
+ {1024, 11, 10},
+ {1000000, 20, 19},
+}
+
+type multiplyTest struct {
+ in int64
+ ratio float64
+ expectedSum int64
+ expectedTotal int64
+ expectedSumOfSquares float64
+}
+
+var multiplyTests = []multiplyTest{
+ {15, 2.5, 37, 2, 562.5},
+ {128, 4.6, 758, 13, 77953.9},
+}
+
+type percentileTest struct {
+ fraction float64
+ expected int64
+}
+
+var percentileTests = []percentileTest{
+ {0.25, 48},
+ {0.5, 96},
+ {0.6, 109},
+ {0.75, 128},
+ {0.90, 205},
+ {0.95, 230},
+ {0.99, 256},
+}
+
+func TestSum(t *testing.T) {
+ var h histogram
+
+ for _, test := range sumTests {
+ h.addMeasurement(test.value)
+ sum := h.sum
+ if sum != test.sum {
+ t.Errorf("h.Sum = %v WANT: %v", sum, test.sum)
+ }
+
+ sumOfSquares := h.sumOfSquares
+ if sumOfSquares != test.sumOfSquares {
+ t.Errorf("h.SumOfSquares = %v WANT: %v", sumOfSquares, test.sumOfSquares)
+ }
+
+ total := h.total()
+ if total != test.total {
+ t.Errorf("h.Total = %v WANT: %v", total, test.total)
+ }
+ }
+}
+
+func TestMultiply(t *testing.T) {
+ var h histogram
+ for i, test := range multiplyTests {
+ h.addMeasurement(test.in)
+ h.Multiply(test.ratio)
+ if h.sum != test.expectedSum {
+ t.Errorf("#%v: h.sum = %v WANT: %v", i, h.sum, test.expectedSum)
+ }
+ if h.total() != test.expectedTotal {
+ t.Errorf("#%v: h.total = %v WANT: %v", i, h.total(), test.expectedTotal)
+ }
+ if h.sumOfSquares != test.expectedSumOfSquares {
+ t.Errorf("#%v: h.SumOfSquares = %v WANT: %v", i, test.expectedSumOfSquares, h.sumOfSquares)
+ }
+ }
+}
+
+func TestBucketingFunctions(t *testing.T) {
+ for _, test := range bucketingTests {
+ log := log2(test.in)
+ if log != test.log {
+ t.Errorf("log2 = %v WANT: %v", log, test.log)
+ }
+
+ bucket := getBucket(test.in)
+ if bucket != test.bucket {
+ t.Errorf("getBucket = %v WANT: %v", bucket, test.bucket)
+ }
+ }
+}
+
+func TestAverage(t *testing.T) {
+ a := new(histogram)
+ average := a.average()
+ if average != 0 {
+ t.Errorf("Average of empty histogram was %v WANT: 0", average)
+ }
+
+ a.addMeasurement(1)
+ a.addMeasurement(1)
+ a.addMeasurement(3)
+ const expected = float64(5) / float64(3)
+ average = a.average()
+
+ if !isApproximate(average, expected) {
+ t.Errorf("Average = %g WANT: %v", average, expected)
+ }
+}
+
+func TestStandardDeviation(t *testing.T) {
+ a := new(histogram)
+ add(a, 10, 1<<4)
+ add(a, 10, 1<<5)
+ add(a, 10, 1<<6)
+ stdDev := a.standardDeviation()
+ const expected = 19.95
+
+ if !isApproximate(stdDev, expected) {
+ t.Errorf("StandardDeviation = %v WANT: %v", stdDev, expected)
+ }
+
+ // No values
+ a = new(histogram)
+ stdDev = a.standardDeviation()
+
+ if !isApproximate(stdDev, 0) {
+ t.Errorf("StandardDeviation = %v WANT: 0", stdDev)
+ }
+
+ add(a, 1, 1<<4)
+ if !isApproximate(stdDev, 0) {
+ t.Errorf("StandardDeviation = %v WANT: 0", stdDev)
+ }
+
+ add(a, 10, 1<<4)
+ if !isApproximate(stdDev, 0) {
+ t.Errorf("StandardDeviation = %v WANT: 0", stdDev)
+ }
+}
+
+func TestPercentileBoundary(t *testing.T) {
+ a := new(histogram)
+ add(a, 5, 1<<4)
+ add(a, 10, 1<<6)
+ add(a, 5, 1<<7)
+
+ for _, test := range percentileTests {
+ percentile := a.percentileBoundary(test.fraction)
+ if percentile != test.expected {
+ t.Errorf("h.PercentileBoundary (fraction=%v) = %v WANT: %v", test.fraction, percentile, test.expected)
+ }
+ }
+}
+
+func TestCopyFrom(t *testing.T) {
+ a := histogram{5, 25, []int64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38}, 4, -1}
+ b := histogram{6, 36, []int64{2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39}, 5, -1}
+
+ a.CopyFrom(&b)
+
+ if a.String() != b.String() {
+ t.Errorf("a.String = %s WANT: %s", a.String(), b.String())
+ }
+}
+
+func TestClear(t *testing.T) {
+ a := histogram{5, 25, []int64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38}, 4, -1}
+
+ a.Clear()
+
+ expected := "0, 0.000000, 0, 0, []"
+ if a.String() != expected {
+ t.Errorf("a.String = %s WANT %s", a.String(), expected)
+ }
+}
+
+func TestNew(t *testing.T) {
+ a := histogram{5, 25, []int64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38}, 4, -1}
+ b := a.New()
+
+ expected := "0, 0.000000, 0, 0, []"
+ if b.(*histogram).String() != expected {
+ t.Errorf("b.(*histogram).String = %s WANT: %s", b.(*histogram).String(), expected)
+ }
+}
+
+func TestAdd(t *testing.T) {
+ // The tests here depend on the associativity of addMeasurement and Add.
+ // Add empty observation
+ a := histogram{5, 25, []int64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38}, 4, -1}
+ b := a.New()
+
+ expected := a.String()
+ a.Add(b)
+ if a.String() != expected {
+ t.Errorf("a.String = %s WANT: %s", a.String(), expected)
+ }
+
+ // Add same bucketed value, no new buckets
+ c := new(histogram)
+ d := new(histogram)
+ e := new(histogram)
+ c.addMeasurement(12)
+ d.addMeasurement(11)
+ e.addMeasurement(12)
+ e.addMeasurement(11)
+ c.Add(d)
+ if c.String() != e.String() {
+ t.Errorf("c.String = %s WANT: %s", c.String(), e.String())
+ }
+
+ // Add bucketed values
+ f := new(histogram)
+ g := new(histogram)
+ h := new(histogram)
+ f.addMeasurement(4)
+ f.addMeasurement(12)
+ f.addMeasurement(100)
+ g.addMeasurement(18)
+ g.addMeasurement(36)
+ g.addMeasurement(255)
+ h.addMeasurement(4)
+ h.addMeasurement(12)
+ h.addMeasurement(100)
+ h.addMeasurement(18)
+ h.addMeasurement(36)
+ h.addMeasurement(255)
+ f.Add(g)
+ if f.String() != h.String() {
+ t.Errorf("f.String = %q WANT: %q", f.String(), h.String())
+ }
+
+ // add buckets to no buckets
+ i := new(histogram)
+ j := new(histogram)
+ k := new(histogram)
+ j.addMeasurement(18)
+ j.addMeasurement(36)
+ j.addMeasurement(255)
+ k.addMeasurement(18)
+ k.addMeasurement(36)
+ k.addMeasurement(255)
+ i.Add(j)
+ if i.String() != k.String() {
+ t.Errorf("i.String = %q WANT: %q", i.String(), k.String())
+ }
+
+ // add buckets to single value (no overlap)
+ l := new(histogram)
+ m := new(histogram)
+ n := new(histogram)
+ l.addMeasurement(0)
+ m.addMeasurement(18)
+ m.addMeasurement(36)
+ m.addMeasurement(255)
+ n.addMeasurement(0)
+ n.addMeasurement(18)
+ n.addMeasurement(36)
+ n.addMeasurement(255)
+ l.Add(m)
+ if l.String() != n.String() {
+ t.Errorf("l.String = %q WANT: %q", l.String(), n.String())
+ }
+
+ // mixed order
+ o := new(histogram)
+ p := new(histogram)
+ o.addMeasurement(0)
+ o.addMeasurement(2)
+ o.addMeasurement(0)
+ p.addMeasurement(0)
+ p.addMeasurement(0)
+ p.addMeasurement(2)
+ if o.String() != p.String() {
+ t.Errorf("o.String = %q WANT: %q", o.String(), p.String())
+ }
+}
+
+func add(h *histogram, times int, val int64) {
+ for i := 0; i < times; i++ {
+ h.addMeasurement(val)
+ }
+}
+
+func isApproximate(x, y float64) bool {
+ return math.Abs(x-y) < 1e-2
+}
diff --git a/go/src/golang.org/x/net/trace/trace.go b/go/src/golang.org/x/net/trace/trace.go
new file mode 100644
index 0000000..0bd8d1e
--- /dev/null
+++ b/go/src/golang.org/x/net/trace/trace.go
@@ -0,0 +1,1004 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+/*
+Package trace implements tracing of requests.
+It exports an HTTP interface on /debug/requests.
+
+A request handler might be implemented like this:
+ func myHandler(w http.ResponseWriter, req *http.Request) {
+ tr := trace.New("Received", req.URL.Path)
+ defer tr.Finish()
+ ...
+ tr.LazyPrintf("some event %q happened", str)
+ ...
+ if err := somethingImportant(); err != nil {
+ tr.LazyPrintf("somethingImportant failed: %v", err)
+ tr.SetError()
+ }
+ }
+*/
+package trace // import "golang.org/x/net/trace"
+
+import (
+ "bytes"
+ "fmt"
+ "html/template"
+ "io"
+ "log"
+ "net"
+ "net/http"
+ "runtime"
+ "sort"
+ "strconv"
+ "sync"
+ "sync/atomic"
+ "time"
+
+ "golang.org/x/net/context"
+ "golang.org/x/net/internal/timeseries"
+)
+
+// DebugUseAfterFinish controls whether to debug uses of Trace values after finishing.
+// FOR DEBUGGING ONLY. This will slow down the program.
+var DebugUseAfterFinish = false
+
+// AuthRequest determines whether a specific request is permitted to load the /debug/requests page.
+// It returns two bools; the first indicates whether the page may be viewed at all,
+// and the second indicates whether sensitive events will be shown.
+//
+// AuthRequest may be replaced by a program to customise its authorisation requirements.
+//
+// The default AuthRequest function returns (true, true) iff the request comes from localhost/127.0.0.1/[::1].
+var AuthRequest = func(req *http.Request) (any, sensitive bool) {
+ host, _, err := net.SplitHostPort(req.RemoteAddr)
+ switch {
+ case err != nil: // Badly formed address; fail closed.
+ return false, false
+ case host == "localhost" || host == "127.0.0.1" || host == "::1":
+ return true, true
+ default:
+ return false, false
+ }
+}
+
+func init() {
+ http.HandleFunc("/debug/requests", func(w http.ResponseWriter, req *http.Request) {
+ any, sensitive := AuthRequest(req)
+ if !any {
+ http.Error(w, "not allowed", http.StatusUnauthorized)
+ return
+ }
+ render(w, req, sensitive)
+ })
+}
+
+// render renders the HTML page.
+// req may be nil.
+func render(w io.Writer, req *http.Request, sensitive bool) {
+ data := &struct {
+ Families []string
+ ActiveTraceCount map[string]int
+ CompletedTraces map[string]*family
+
+ // Set when a bucket has been selected.
+ Traces traceList
+ Family string
+ Bucket int
+ Expanded bool
+ Traced bool
+ Active bool
+ ShowSensitive bool // whether to show sensitive events
+
+ Histogram template.HTML
+ HistogramWindow string // e.g. "last minute", "last hour", "all time"
+
+ // If non-zero, the set of traces is a partial set,
+ // and this is the total number.
+ Total int
+ }{
+ CompletedTraces: completedTraces,
+ }
+
+ data.ShowSensitive = sensitive
+ if req != nil {
+ // Allow show_sensitive=0 to force hiding of sensitive data for testing.
+ // This only goes one way; you can't use show_sensitive=1 to see things.
+ if req.FormValue("show_sensitive") == "0" {
+ data.ShowSensitive = false
+ }
+
+ if exp, err := strconv.ParseBool(req.FormValue("exp")); err == nil {
+ data.Expanded = exp
+ }
+ if exp, err := strconv.ParseBool(req.FormValue("rtraced")); err == nil {
+ data.Traced = exp
+ }
+ }
+
+ completedMu.RLock()
+ data.Families = make([]string, 0, len(completedTraces))
+ for fam, _ := range completedTraces {
+ data.Families = append(data.Families, fam)
+ }
+ completedMu.RUnlock()
+ sort.Strings(data.Families)
+
+ // We are careful here to minimize the time spent locking activeMu,
+ // since that lock is required every time an RPC starts and finishes.
+ data.ActiveTraceCount = make(map[string]int, len(data.Families))
+ activeMu.RLock()
+ for fam, s := range activeTraces {
+ data.ActiveTraceCount[fam] = s.Len()
+ }
+ activeMu.RUnlock()
+
+ var ok bool
+ data.Family, data.Bucket, ok = parseArgs(req)
+ switch {
+ case !ok:
+ // No-op
+ case data.Bucket == -1:
+ data.Active = true
+ n := data.ActiveTraceCount[data.Family]
+ data.Traces = getActiveTraces(data.Family)
+ if len(data.Traces) < n {
+ data.Total = n
+ }
+ case data.Bucket < bucketsPerFamily:
+ if b := lookupBucket(data.Family, data.Bucket); b != nil {
+ data.Traces = b.Copy(data.Traced)
+ }
+ default:
+ if f := getFamily(data.Family, false); f != nil {
+ var obs timeseries.Observable
+ f.LatencyMu.RLock()
+ switch o := data.Bucket - bucketsPerFamily; o {
+ case 0:
+ obs = f.Latency.Minute()
+ data.HistogramWindow = "last minute"
+ case 1:
+ obs = f.Latency.Hour()
+ data.HistogramWindow = "last hour"
+ case 2:
+ obs = f.Latency.Total()
+ data.HistogramWindow = "all time"
+ }
+ f.LatencyMu.RUnlock()
+ if obs != nil {
+ data.Histogram = obs.(*histogram).html()
+ }
+ }
+ }
+
+ if data.Traces != nil {
+ defer data.Traces.Free()
+ sort.Sort(data.Traces)
+ }
+
+ completedMu.RLock()
+ defer completedMu.RUnlock()
+ if err := pageTmpl.ExecuteTemplate(w, "Page", data); err != nil {
+ log.Printf("net/trace: Failed executing template: %v", err)
+ }
+}
+
+func parseArgs(req *http.Request) (fam string, b int, ok bool) {
+ if req == nil {
+ return "", 0, false
+ }
+ fam, bStr := req.FormValue("fam"), req.FormValue("b")
+ if fam == "" || bStr == "" {
+ return "", 0, false
+ }
+ b, err := strconv.Atoi(bStr)
+ if err != nil || b < -1 {
+ return "", 0, false
+ }
+
+ return fam, b, true
+}
+
+func lookupBucket(fam string, b int) *traceBucket {
+ f := getFamily(fam, false)
+ if f == nil || b < 0 || b >= len(f.Buckets) {
+ return nil
+ }
+ return f.Buckets[b]
+}
+
+type contextKeyT string
+
+var contextKey = contextKeyT("golang.org/x/net/trace.Trace")
+
+// NewContext returns a copy of the parent context
+// and associates it with a Trace.
+func NewContext(ctx context.Context, tr Trace) context.Context {
+ return context.WithValue(ctx, contextKey, tr)
+}
+
+// FromContext returns the Trace bound to the context, if any.
+func FromContext(ctx context.Context) (tr Trace, ok bool) {
+ tr, ok = ctx.Value(contextKey).(Trace)
+ return
+}
+
+// Trace represents an active request.
+type Trace interface {
+ // LazyLog adds x to the event log. It will be evaluated each time the
+ // /debug/requests page is rendered. Any memory referenced by x will be
+ // pinned until the trace is finished and later discarded.
+ LazyLog(x fmt.Stringer, sensitive bool)
+
+ // LazyPrintf evaluates its arguments with fmt.Sprintf each time the
+ // /debug/requests page is rendered. Any memory referenced by a will be
+ // pinned until the trace is finished and later discarded.
+ LazyPrintf(format string, a ...interface{})
+
+ // SetError declares that this trace resulted in an error.
+ SetError()
+
+ // SetRecycler sets a recycler for the trace.
+ // f will be called for each event passed to LazyLog at a time when
+ // it is no longer required, whether while the trace is still active
+ // and the event is discarded, or when a completed trace is discarded.
+ SetRecycler(f func(interface{}))
+
+ // SetTraceInfo sets the trace info for the trace.
+ // This is currently unused.
+ SetTraceInfo(traceID, spanID uint64)
+
+ // SetMaxEvents sets the maximum number of events that will be stored
+ // in the trace. This has no effect if any events have already been
+ // added to the trace.
+ SetMaxEvents(m int)
+
+ // Finish declares that this trace is complete.
+ // The trace should not be used after calling this method.
+ Finish()
+}
+
+type lazySprintf struct {
+ format string
+ a []interface{}
+}
+
+func (l *lazySprintf) String() string {
+ return fmt.Sprintf(l.format, l.a...)
+}
+
+// New returns a new Trace with the specified family and title.
+func New(family, title string) Trace {
+ tr := newTrace()
+ tr.ref()
+ tr.Family, tr.Title = family, title
+ tr.Start = time.Now()
+ tr.events = make([]event, 0, maxEventsPerTrace)
+
+ activeMu.RLock()
+ s := activeTraces[tr.Family]
+ activeMu.RUnlock()
+ if s == nil {
+ activeMu.Lock()
+ s = activeTraces[tr.Family] // check again
+ if s == nil {
+ s = new(traceSet)
+ activeTraces[tr.Family] = s
+ }
+ activeMu.Unlock()
+ }
+ s.Add(tr)
+
+ // Trigger allocation of the completed trace structure for this family.
+ // This will cause the family to be present in the request page during
+ // the first trace of this family. We don't care about the return value,
+ // nor is there any need for this to run inline, so we execute it in its
+ // own goroutine, but only if the family isn't allocated yet.
+ completedMu.RLock()
+ if _, ok := completedTraces[tr.Family]; !ok {
+ go allocFamily(tr.Family)
+ }
+ completedMu.RUnlock()
+
+ return tr
+}
+
+func (tr *trace) Finish() {
+ tr.Elapsed = time.Now().Sub(tr.Start)
+ if DebugUseAfterFinish {
+ buf := make([]byte, 4<<10) // 4 KB should be enough
+ n := runtime.Stack(buf, false)
+ tr.finishStack = buf[:n]
+ }
+
+ activeMu.RLock()
+ m := activeTraces[tr.Family]
+ activeMu.RUnlock()
+ m.Remove(tr)
+
+ f := getFamily(tr.Family, true)
+ for _, b := range f.Buckets {
+ if b.Cond.match(tr) {
+ b.Add(tr)
+ }
+ }
+ // Add a sample of elapsed time as microseconds to the family's timeseries
+ h := new(histogram)
+ h.addMeasurement(tr.Elapsed.Nanoseconds() / 1e3)
+ f.LatencyMu.Lock()
+ f.Latency.Add(h)
+ f.LatencyMu.Unlock()
+
+ tr.unref() // matches ref in New
+}
+
+const (
+ bucketsPerFamily = 9
+ tracesPerBucket = 10
+ maxActiveTraces = 20 // Maximum number of active traces to show.
+ maxEventsPerTrace = 10
+ numHistogramBuckets = 38
+)
+
+var (
+ // The active traces.
+ activeMu sync.RWMutex
+ activeTraces = make(map[string]*traceSet) // family -> traces
+
+ // Families of completed traces.
+ completedMu sync.RWMutex
+ completedTraces = make(map[string]*family) // family -> traces
+)
+
+type traceSet struct {
+ mu sync.RWMutex
+ m map[*trace]bool
+
+ // We could avoid the entire map scan in FirstN by having a slice of all the traces
+ // ordered by start time, and an index into that from the trace struct, with a periodic
+ // repack of the slice after enough traces finish; we could also use a skip list or similar.
+ // However, that would shift some of the expense from /debug/requests time to RPC time,
+ // which is probably the wrong trade-off.
+}
+
+func (ts *traceSet) Len() int {
+ ts.mu.RLock()
+ defer ts.mu.RUnlock()
+ return len(ts.m)
+}
+
+func (ts *traceSet) Add(tr *trace) {
+ ts.mu.Lock()
+ if ts.m == nil {
+ ts.m = make(map[*trace]bool)
+ }
+ ts.m[tr] = true
+ ts.mu.Unlock()
+}
+
+func (ts *traceSet) Remove(tr *trace) {
+ ts.mu.Lock()
+ delete(ts.m, tr)
+ ts.mu.Unlock()
+}
+
+// FirstN returns the first n traces ordered by time.
+func (ts *traceSet) FirstN(n int) traceList {
+ ts.mu.RLock()
+ defer ts.mu.RUnlock()
+
+ if n > len(ts.m) {
+ n = len(ts.m)
+ }
+ trl := make(traceList, 0, n)
+
+ // Fast path for when no selectivity is needed.
+ if n == len(ts.m) {
+ for tr := range ts.m {
+ tr.ref()
+ trl = append(trl, tr)
+ }
+ sort.Sort(trl)
+ return trl
+ }
+
+ // Pick the oldest n traces.
+ // This is inefficient. See the comment in the traceSet struct.
+ for tr := range ts.m {
+ // Put the first n traces into trl in the order they occur.
+ // When we have n, sort trl, and thereafter maintain its order.
+ if len(trl) < n {
+ tr.ref()
+ trl = append(trl, tr)
+ if len(trl) == n {
+ // This is guaranteed to happen exactly once during this loop.
+ sort.Sort(trl)
+ }
+ continue
+ }
+ if tr.Start.After(trl[n-1].Start) {
+ continue
+ }
+
+ // Find where to insert this one.
+ tr.ref()
+ i := sort.Search(n, func(i int) bool { return trl[i].Start.After(tr.Start) })
+ trl[n-1].unref()
+ copy(trl[i+1:], trl[i:])
+ trl[i] = tr
+ }
+
+ return trl
+}
+
+func getActiveTraces(fam string) traceList {
+ activeMu.RLock()
+ s := activeTraces[fam]
+ activeMu.RUnlock()
+ if s == nil {
+ return nil
+ }
+ return s.FirstN(maxActiveTraces)
+}
+
+func getFamily(fam string, allocNew bool) *family {
+ completedMu.RLock()
+ f := completedTraces[fam]
+ completedMu.RUnlock()
+ if f == nil && allocNew {
+ f = allocFamily(fam)
+ }
+ return f
+}
+
+func allocFamily(fam string) *family {
+ completedMu.Lock()
+ defer completedMu.Unlock()
+ f := completedTraces[fam]
+ if f == nil {
+ f = newFamily()
+ completedTraces[fam] = f
+ }
+ return f
+}
+
+// family represents a set of trace buckets and associated latency information.
+type family struct {
+ // traces may occur in multiple buckets.
+ Buckets [bucketsPerFamily]*traceBucket
+
+ // latency time series
+ LatencyMu sync.RWMutex
+ Latency *timeseries.MinuteHourSeries
+}
+
+func newFamily() *family {
+ return &family{
+ Buckets: [bucketsPerFamily]*traceBucket{
+ {Cond: minCond(0)},
+ {Cond: minCond(50 * time.Millisecond)},
+ {Cond: minCond(100 * time.Millisecond)},
+ {Cond: minCond(200 * time.Millisecond)},
+ {Cond: minCond(500 * time.Millisecond)},
+ {Cond: minCond(1 * time.Second)},
+ {Cond: minCond(10 * time.Second)},
+ {Cond: minCond(100 * time.Second)},
+ {Cond: errorCond{}},
+ },
+ Latency: timeseries.NewMinuteHourSeries(func() timeseries.Observable { return new(histogram) }),
+ }
+}
+
+// traceBucket represents a size-capped bucket of historic traces,
+// along with a condition for a trace to belong to the bucket.
+type traceBucket struct {
+ Cond cond
+
+ // Ring buffer implementation of a fixed-size FIFO queue.
+ mu sync.RWMutex
+ buf [tracesPerBucket]*trace
+ start int // < tracesPerBucket
+ length int // <= tracesPerBucket
+}
+
+func (b *traceBucket) Add(tr *trace) {
+ b.mu.Lock()
+ defer b.mu.Unlock()
+
+ i := b.start + b.length
+ if i >= tracesPerBucket {
+ i -= tracesPerBucket
+ }
+ if b.length == tracesPerBucket {
+ // "Remove" an element from the bucket.
+ b.buf[i].unref()
+ b.start++
+ if b.start == tracesPerBucket {
+ b.start = 0
+ }
+ }
+ b.buf[i] = tr
+ if b.length < tracesPerBucket {
+ b.length++
+ }
+ tr.ref()
+}
+
+// Copy returns a copy of the traces in the bucket.
+// If tracedOnly is true, only the traces with trace information will be returned.
+// The logs will be ref'd before returning; the caller should call
+// the Free method when it is done with them.
+// TODO(dsymonds): keep track of traced requests in separate buckets.
+func (b *traceBucket) Copy(tracedOnly bool) traceList {
+ b.mu.RLock()
+ defer b.mu.RUnlock()
+
+ trl := make(traceList, 0, b.length)
+ for i, x := 0, b.start; i < b.length; i++ {
+ tr := b.buf[x]
+ if !tracedOnly || tr.spanID != 0 {
+ tr.ref()
+ trl = append(trl, tr)
+ }
+ x++
+ if x == b.length {
+ x = 0
+ }
+ }
+ return trl
+}
+
+func (b *traceBucket) Empty() bool {
+ b.mu.RLock()
+ defer b.mu.RUnlock()
+ return b.length == 0
+}
+
+// cond represents a condition on a trace.
+type cond interface {
+ match(t *trace) bool
+ String() string
+}
+
+type minCond time.Duration
+
+func (m minCond) match(t *trace) bool { return t.Elapsed >= time.Duration(m) }
+func (m minCond) String() string { return fmt.Sprintf("≥%gs", time.Duration(m).Seconds()) }
+
+type errorCond struct{}
+
+func (e errorCond) match(t *trace) bool { return t.IsError }
+func (e errorCond) String() string { return "errors" }
+
+type traceList []*trace
+
+// Free calls unref on each element of the list.
+func (trl traceList) Free() {
+ for _, t := range trl {
+ t.unref()
+ }
+}
+
+// traceList may be sorted in reverse chronological order.
+func (trl traceList) Len() int { return len(trl) }
+func (trl traceList) Less(i, j int) bool { return trl[i].Start.After(trl[j].Start) }
+func (trl traceList) Swap(i, j int) { trl[i], trl[j] = trl[j], trl[i] }
+
+// An event is a timestamped log entry in a trace.
+type event struct {
+ When time.Time
+ Elapsed time.Duration // since previous event in trace
+ NewDay bool // whether this event is on a different day to the previous event
+ Recyclable bool // whether this event was passed via LazyLog
+ What interface{} // string or fmt.Stringer
+ Sensitive bool // whether this event contains sensitive information
+}
+
+// WhenString returns a string representation of the elapsed time of the event.
+// It will include the date if midnight was crossed.
+func (e event) WhenString() string {
+ if e.NewDay {
+ return e.When.Format("2006/01/02 15:04:05.000000")
+ }
+ return e.When.Format("15:04:05.000000")
+}
+
+// discarded represents a number of discarded events.
+// It is stored as *discarded to make it easier to update in-place.
+type discarded int
+
+func (d *discarded) String() string {
+ return fmt.Sprintf("(%d events discarded)", int(*d))
+}
+
+// trace represents an active or complete request,
+// either sent or received by this program.
+type trace struct {
+ // Family is the top-level grouping of traces to which this belongs.
+ Family string
+
+ // Title is the title of this trace.
+ Title string
+
+ // Timing information.
+ Start time.Time
+ Elapsed time.Duration // zero while active
+
+ // Trace information if non-zero.
+ traceID uint64
+ spanID uint64
+
+ // Whether this trace resulted in an error.
+ IsError bool
+
+ // Append-only sequence of events (modulo discards).
+ mu sync.RWMutex
+ events []event
+
+ refs int32 // how many buckets this is in
+ recycler func(interface{})
+ disc discarded // scratch space to avoid allocation
+
+ finishStack []byte // where finish was called, if DebugUseAfterFinish is set
+}
+
+func (tr *trace) reset() {
+ // Clear all but the mutex. Mutexes may not be copied, even when unlocked.
+ tr.Family = ""
+ tr.Title = ""
+ tr.Start = time.Time{}
+ tr.Elapsed = 0
+ tr.traceID = 0
+ tr.spanID = 0
+ tr.IsError = false
+ tr.events = nil
+ tr.refs = 0
+ tr.recycler = nil
+ tr.disc = 0
+ tr.finishStack = nil
+}
+
+// delta returns the elapsed time since the last event or the trace start,
+// and whether it spans midnight.
+// L >= tr.mu
+func (tr *trace) delta(t time.Time) (time.Duration, bool) {
+ if len(tr.events) == 0 {
+ return t.Sub(tr.Start), false
+ }
+ prev := tr.events[len(tr.events)-1].When
+ return t.Sub(prev), prev.Day() != t.Day()
+}
+
+func (tr *trace) addEvent(x interface{}, recyclable, sensitive bool) {
+ if DebugUseAfterFinish && tr.finishStack != nil {
+ buf := make([]byte, 4<<10) // 4 KB should be enough
+ n := runtime.Stack(buf, false)
+ log.Printf("net/trace: trace used after finish:\nFinished at:\n%s\nUsed at:\n%s", tr.finishStack, buf[:n])
+ }
+
+ /*
+ NOTE TO DEBUGGERS
+
+ If you are here because your program panicked in this code,
+ it is almost definitely the fault of code using this package,
+ and very unlikely to be the fault of this code.
+
+ The most likely scenario is that some code elsewhere is using
+ a requestz.Trace after its Finish method is called.
+ You can temporarily set the DebugUseAfterFinish var
+ to help discover where that is; do not leave that var set,
+ since it makes this package much less efficient.
+ */
+
+ e := event{When: time.Now(), What: x, Recyclable: recyclable, Sensitive: sensitive}
+ tr.mu.Lock()
+ e.Elapsed, e.NewDay = tr.delta(e.When)
+ if len(tr.events) < cap(tr.events) {
+ tr.events = append(tr.events, e)
+ } else {
+ // Discard the middle events.
+ di := int((cap(tr.events) - 1) / 2)
+ if d, ok := tr.events[di].What.(*discarded); ok {
+ (*d)++
+ } else {
+ // disc starts at two to count for the event it is replacing,
+ // plus the next one that we are about to drop.
+ tr.disc = 2
+ if tr.recycler != nil && tr.events[di].Recyclable {
+ go tr.recycler(tr.events[di].What)
+ }
+ tr.events[di].What = &tr.disc
+ }
+ // The timestamp of the discarded meta-event should be
+ // the time of the last event it is representing.
+ tr.events[di].When = tr.events[di+1].When
+
+ if tr.recycler != nil && tr.events[di+1].Recyclable {
+ go tr.recycler(tr.events[di+1].What)
+ }
+ copy(tr.events[di+1:], tr.events[di+2:])
+ tr.events[cap(tr.events)-1] = e
+ }
+ tr.mu.Unlock()
+}
+
+func (tr *trace) LazyLog(x fmt.Stringer, sensitive bool) {
+ tr.addEvent(x, true, sensitive)
+}
+
+func (tr *trace) LazyPrintf(format string, a ...interface{}) {
+ tr.addEvent(&lazySprintf{format, a}, false, false)
+}
+
+func (tr *trace) SetError() { tr.IsError = true }
+
+func (tr *trace) SetRecycler(f func(interface{})) {
+ tr.recycler = f
+}
+
+func (tr *trace) SetTraceInfo(traceID, spanID uint64) {
+ tr.traceID, tr.spanID = traceID, spanID
+}
+
+func (tr *trace) SetMaxEvents(m int) {
+ // Always keep at least three events: first, discarded count, last.
+ if len(tr.events) == 0 && m > 3 {
+ tr.events = make([]event, 0, m)
+ }
+}
+
+func (tr *trace) ref() {
+ atomic.AddInt32(&tr.refs, 1)
+}
+
+func (tr *trace) unref() {
+ if atomic.AddInt32(&tr.refs, -1) == 0 {
+ if tr.recycler != nil {
+ // freeTrace clears tr, so we hold tr.recycler and tr.events here.
+ go func(f func(interface{}), es []event) {
+ for _, e := range es {
+ if e.Recyclable {
+ f(e.What)
+ }
+ }
+ }(tr.recycler, tr.events)
+ }
+
+ freeTrace(tr)
+ }
+}
+
+func (tr *trace) When() string {
+ return tr.Start.Format("2006/01/02 15:04:05.000000")
+}
+
+func (tr *trace) ElapsedTime() string {
+ t := tr.Elapsed
+ if t == 0 {
+ // Active trace.
+ t = time.Since(tr.Start)
+ }
+ return fmt.Sprintf("%.6f", t.Seconds())
+}
+
+func (tr *trace) Events() []event {
+ tr.mu.RLock()
+ defer tr.mu.RUnlock()
+ return tr.events
+}
+
+var traceFreeList = make(chan *trace, 1000) // TODO(dsymonds): Use sync.Pool?
+
+// newTrace returns a trace ready to use.
+func newTrace() *trace {
+ select {
+ case tr := <-traceFreeList:
+ return tr
+ default:
+ return new(trace)
+ }
+}
+
+// freeTrace adds tr to traceFreeList if there's room.
+// This is non-blocking.
+func freeTrace(tr *trace) {
+ if DebugUseAfterFinish {
+ return // never reuse
+ }
+ tr.reset()
+ select {
+ case traceFreeList <- tr:
+ default:
+ }
+}
+
+func elapsed(d time.Duration) string {
+ b := []byte(fmt.Sprintf("%.6f", d.Seconds()))
+
+ // For subsecond durations, blank all zeros before decimal point,
+ // and all zeros between the decimal point and the first non-zero digit.
+ if d < time.Second {
+ dot := bytes.IndexByte(b, '.')
+ for i := 0; i < dot; i++ {
+ b[i] = ' '
+ }
+ for i := dot + 1; i < len(b); i++ {
+ if b[i] == '0' {
+ b[i] = ' '
+ } else {
+ break
+ }
+ }
+ }
+
+ return string(b)
+}
+
+var pageTmpl = template.Must(template.New("Page").Funcs(template.FuncMap{
+ "elapsed": elapsed,
+ "add": func(a, b int) int { return a + b },
+}).Parse(pageHTML))
+
+const pageHTML = `
+{{template "Prolog" .}}
+{{template "StatusTable" .}}
+{{template "Epilog" .}}
+
+{{define "Prolog"}}
+<html>
+ <head>
+ <title>/debug/requests</title>
+ <style type="text/css">
+ body {
+ font-family: sans-serif;
+ }
+ table#tr-status td.family {
+ padding-right: 2em;
+ }
+ table#tr-status td.active {
+ padding-right: 1em;
+ }
+ table#tr-status td.latency-first {
+ padding-left: 1em;
+ }
+ table#tr-status td.empty {
+ color: #aaa;
+ }
+ table#reqs {
+ margin-top: 1em;
+ }
+ table#reqs tr.first {
+ {{if $.Expanded}}font-weight: bold;{{end}}
+ }
+ table#reqs td {
+ font-family: monospace;
+ }
+ table#reqs td.when {
+ text-align: right;
+ white-space: nowrap;
+ }
+ table#reqs td.elapsed {
+ padding: 0 0.5em;
+ text-align: right;
+ white-space: pre;
+ width: 10em;
+ }
+ address {
+ font-size: smaller;
+ margin-top: 5em;
+ }
+ </style>
+ </head>
+ <body>
+
+<h1>/debug/requests</h1>
+{{end}} {{/* end of Prolog */}}
+
+{{define "StatusTable"}}
+<table id="tr-status">
+ {{range $fam := .Families}}
+ <tr>
+ <td class="family">{{$fam}}</td>
+
+ {{$n := index $.ActiveTraceCount $fam}}
+ <td class="active {{if not $n}}empty{{end}}">
+ {{if $n}}<a href="/debug/requests?fam={{$fam}}&b=-1{{if $.Expanded}}&exp=1{{end}}">{{end}}
+ [{{$n}} active]
+ {{if $n}}</a>{{end}}
+ </td>
+
+ {{$f := index $.CompletedTraces $fam}}
+ {{range $i, $b := $f.Buckets}}
+ {{$empty := $b.Empty}}
+ <td {{if $empty}}class="empty"{{end}}>
+ {{if not $empty}}<a href="/debug/requests?fam={{$fam}}&b={{$i}}{{if $.Expanded}}&exp=1{{end}}">{{end}}
+ [{{.Cond}}]
+ {{if not $empty}}</a>{{end}}
+ </td>
+ {{end}}
+
+ {{$nb := len $f.Buckets}}
+ <td class="latency-first">
+ <a href="/debug/requests?fam={{$fam}}&b={{$nb}}">[minute]</a>
+ </td>
+ <td>
+ <a href="/debug/requests?fam={{$fam}}&b={{add $nb 1}}">[hour]</a>
+ </td>
+ <td>
+ <a href="/debug/requests?fam={{$fam}}&b={{add $nb 2}}">[total]</a>
+ </td>
+
+ </tr>
+ {{end}}
+</table>
+{{end}} {{/* end of StatusTable */}}
+
+{{define "Epilog"}}
+{{if $.Traces}}
+<hr />
+<h3>Family: {{$.Family}}</h3>
+
+{{if or $.Expanded $.Traced}}
+ <a href="/debug/requests?fam={{$.Family}}&b={{$.Bucket}}">[Normal/Summary]</a>
+{{else}}
+ [Normal/Summary]
+{{end}}
+
+{{if or (not $.Expanded) $.Traced}}
+ <a href="/debug/requests?fam={{$.Family}}&b={{$.Bucket}}&exp=1">[Normal/Expanded]</a>
+{{else}}
+ [Normal/Expanded]
+{{end}}
+
+{{if not $.Active}}
+ {{if or $.Expanded (not $.Traced)}}
+ <a href="/debug/requests?fam={{$.Family}}&b={{$.Bucket}}&rtraced=1">[Traced/Summary]</a>
+ {{else}}
+ [Traced/Summary]
+ {{end}}
+ {{if or (not $.Expanded) (not $.Traced)}}
+ <a href="/debug/requests?fam={{$.Family}}&b={{$.Bucket}}&exp=1&rtraced=1">[Traced/Expanded]</a>
+ {{else}}
+ [Traced/Expanded]
+ {{end}}
+{{end}}
+
+{{if $.Total}}
+<p><em>Showing <b>{{len $.Traces}}</b> of <b>{{$.Total}}</b> traces.</em></p>
+{{end}}
+
+<table id="reqs">
+ <caption>
+ {{if $.Active}}Active{{else}}Completed{{end}} Requests
+ </caption>
+ <tr><th>When</th><th>Elapsed (s)</th></tr>
+ {{range $tr := $.Traces}}
+ <tr class="first">
+ <td class="when">{{$tr.When}}</td>
+ <td class="elapsed">{{$tr.ElapsedTime}}</td>
+ <td>{{$tr.Title}}</td>
+ {{/* TODO: include traceID/spanID */}}
+ </tr>
+ {{if $.Expanded}}
+ {{range $tr.Events}}
+ <tr>
+ <td class="when">{{.WhenString}}</td>
+ <td class="elapsed">{{elapsed .Elapsed}}</td>
+ <td>{{if or $.ShowSensitive (not .Sensitive)}}... {{.What}}{{else}}<em>[redacted]</em>{{end}}</td>
+ </tr>
+ {{end}}
+ {{end}}
+ {{end}}
+</table>
+{{end}} {{/* if $.Traces */}}
+
+{{if $.Histogram}}
+<h4>Latency (µs) of {{$.Family}} over {{$.HistogramWindow}}</h4>
+{{$.Histogram}}
+{{end}} {{/* if $.Histogram */}}
+
+ </body>
+</html>
+{{end}} {{/* end of Epilog */}}
+`
diff --git a/go/src/golang.org/x/net/trace/trace_test.go b/go/src/golang.org/x/net/trace/trace_test.go
new file mode 100644
index 0000000..82f0f6b
--- /dev/null
+++ b/go/src/golang.org/x/net/trace/trace_test.go
@@ -0,0 +1,32 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package trace
+
+import (
+ "reflect"
+ "testing"
+)
+
+type s struct{}
+
+func (s) String() string { return "lazy string" }
+
+// TestReset checks whether all the fields are zeroed after reset.
+func TestReset(t *testing.T) {
+ tr := New("foo", "bar")
+ tr.LazyLog(s{}, false)
+ tr.LazyPrintf("%d", 1)
+ tr.SetRecycler(func(_ interface{}) {})
+ tr.SetTraceInfo(3, 4)
+ tr.SetMaxEvents(100)
+ tr.SetError()
+ tr.Finish()
+
+ tr.(*trace).reset()
+
+ if !reflect.DeepEqual(tr, new(trace)) {
+ t.Errorf("reset didn't clear all fields: %+v", tr)
+ }
+}
diff --git a/go/src/golang.org/x/net/webdav/file.go b/go/src/golang.org/x/net/webdav/file.go
index 097fe6b..3d95c6c 100644
--- a/go/src/golang.org/x/net/webdav/file.go
+++ b/go/src/golang.org/x/net/webdav/file.go
@@ -5,29 +5,49 @@
package webdav
import (
+ "encoding/xml"
"io"
"net/http"
"os"
"path"
"path/filepath"
"strings"
+ "sync"
+ "time"
)
+// slashClean is equivalent to but slightly more efficient than
+// path.Clean("/" + name).
+func slashClean(name string) string {
+ if name == "" || name[0] != '/' {
+ name = "/" + name
+ }
+ return path.Clean(name)
+}
+
// A FileSystem implements access to a collection of named files. The elements
// in a file path are separated by slash ('/', U+002F) characters, regardless
// of host operating system convention.
//
// Each method has the same semantics as the os package's function of the same
// name.
+//
+// Note that the os.Rename documentation says that "OS-specific restrictions
+// might apply". In particular, whether or not renaming a file or directory
+// overwriting another existing file or directory is an error is OS-dependent.
type FileSystem interface {
Mkdir(name string, perm os.FileMode) error
OpenFile(name string, flag int, perm os.FileMode) (File, error)
RemoveAll(name string) error
+ Rename(oldName, newName string) error
Stat(name string) (os.FileInfo, error)
}
// A File is returned by a FileSystem's OpenFile method and can be served by a
// Handler.
+//
+// A File may optionally implement the DeadPropsHolder interface, if it can
+// load and save dead properties.
type File interface {
http.File
io.Writer
@@ -53,7 +73,7 @@
if dir == "" {
dir = "."
}
- return filepath.Join(dir, filepath.FromSlash(path.Clean("/"+name)))
+ return filepath.Join(dir, filepath.FromSlash(slashClean(name)))
}
func (d Dir) Mkdir(name string, perm os.FileMode) error {
@@ -67,7 +87,11 @@
if name = d.resolve(name); name == "" {
return nil, os.ErrNotExist
}
- return os.OpenFile(name, flag, perm)
+ f, err := os.OpenFile(name, flag, perm)
+ if err != nil {
+ return nil, err
+ }
+ return f, nil
}
func (d Dir) RemoveAll(name string) error {
@@ -81,6 +105,20 @@
return os.RemoveAll(name)
}
+func (d Dir) Rename(oldName, newName string) error {
+ if oldName = d.resolve(oldName); oldName == "" {
+ return os.ErrNotExist
+ }
+ if newName = d.resolve(newName); newName == "" {
+ return os.ErrNotExist
+ }
+ if root := filepath.Clean(string(d)); root == oldName || root == newName {
+ // Prohibit renaming from or to the virtual root directory.
+ return os.ErrInvalid
+ }
+ return os.Rename(oldName, newName)
+}
+
func (d Dir) Stat(name string) (os.FileInfo, error) {
if name = d.resolve(name); name == "" {
return nil, os.ErrNotExist
@@ -88,4 +126,669 @@
return os.Stat(name)
}
-// TODO: a MemFS implementation.
+// NewMemFS returns a new in-memory FileSystem implementation.
+func NewMemFS() FileSystem {
+ return &memFS{
+ root: memFSNode{
+ children: make(map[string]*memFSNode),
+ mode: 0660 | os.ModeDir,
+ modTime: time.Now(),
+ },
+ }
+}
+
+// A memFS implements FileSystem, storing all metadata and actual file data
+// in-memory. No limits on filesystem size are used, so it is not recommended
+// this be used where the clients are untrusted.
+//
+// Concurrent access is permitted. The tree structure is protected by a mutex,
+// and each node's contents and metadata are protected by a per-node mutex.
+//
+// TODO: Enforce file permissions.
+type memFS struct {
+ mu sync.Mutex
+ root memFSNode
+}
+
+// TODO: clean up and rationalize the walk/find code.
+
+// walk walks the directory tree for the fullname, calling f at each step. If f
+// returns an error, the walk will be aborted and return that same error.
+//
+// dir is the directory at that step, frag is the name fragment, and final is
+// whether it is the final step. For example, walking "/foo/bar/x" will result
+// in 3 calls to f:
+// - "/", "foo", false
+// - "/foo/", "bar", false
+// - "/foo/bar/", "x", true
+// The frag argument will be empty only if dir is the root node and the walk
+// ends at that root node.
+func (fs *memFS) walk(op, fullname string, f func(dir *memFSNode, frag string, final bool) error) error {
+ original := fullname
+ fullname = slashClean(fullname)
+
+ // Strip any leading "/"s to make fullname a relative path, as the walk
+ // starts at fs.root.
+ if fullname[0] == '/' {
+ fullname = fullname[1:]
+ }
+ dir := &fs.root
+
+ for {
+ frag, remaining := fullname, ""
+ i := strings.IndexRune(fullname, '/')
+ final := i < 0
+ if !final {
+ frag, remaining = fullname[:i], fullname[i+1:]
+ }
+ if frag == "" && dir != &fs.root {
+ panic("webdav: empty path fragment for a clean path")
+ }
+ if err := f(dir, frag, final); err != nil {
+ return &os.PathError{
+ Op: op,
+ Path: original,
+ Err: err,
+ }
+ }
+ if final {
+ break
+ }
+ child := dir.children[frag]
+ if child == nil {
+ return &os.PathError{
+ Op: op,
+ Path: original,
+ Err: os.ErrNotExist,
+ }
+ }
+ if !child.mode.IsDir() {
+ return &os.PathError{
+ Op: op,
+ Path: original,
+ Err: os.ErrInvalid,
+ }
+ }
+ dir, fullname = child, remaining
+ }
+ return nil
+}
+
+// find returns the parent of the named node and the relative name fragment
+// from the parent to the child. For example, if finding "/foo/bar/baz" then
+// parent will be the node for "/foo/bar" and frag will be "baz".
+//
+// If the fullname names the root node, then parent, frag and err will be zero.
+//
+// find returns an error if the parent does not already exist or the parent
+// isn't a directory, but it will not return an error per se if the child does
+// not already exist. The error returned is either nil or an *os.PathError
+// whose Op is op.
+func (fs *memFS) find(op, fullname string) (parent *memFSNode, frag string, err error) {
+ err = fs.walk(op, fullname, func(parent0 *memFSNode, frag0 string, final bool) error {
+ if !final {
+ return nil
+ }
+ if frag0 != "" {
+ parent, frag = parent0, frag0
+ }
+ return nil
+ })
+ return parent, frag, err
+}
+
+func (fs *memFS) Mkdir(name string, perm os.FileMode) error {
+ fs.mu.Lock()
+ defer fs.mu.Unlock()
+
+ dir, frag, err := fs.find("mkdir", name)
+ if err != nil {
+ return err
+ }
+ if dir == nil {
+ // We can't create the root.
+ return os.ErrInvalid
+ }
+ if _, ok := dir.children[frag]; ok {
+ return os.ErrExist
+ }
+ dir.children[frag] = &memFSNode{
+ children: make(map[string]*memFSNode),
+ mode: perm.Perm() | os.ModeDir,
+ modTime: time.Now(),
+ }
+ return nil
+}
+
+func (fs *memFS) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
+ fs.mu.Lock()
+ defer fs.mu.Unlock()
+
+ dir, frag, err := fs.find("open", name)
+ if err != nil {
+ return nil, err
+ }
+ var n *memFSNode
+ if dir == nil {
+ // We're opening the root.
+ if flag&(os.O_WRONLY|os.O_RDWR) != 0 {
+ return nil, os.ErrPermission
+ }
+ n, frag = &fs.root, "/"
+
+ } else {
+ n = dir.children[frag]
+ if flag&(os.O_SYNC|os.O_APPEND) != 0 {
+ // memFile doesn't support these flags yet.
+ return nil, os.ErrInvalid
+ }
+ if flag&os.O_CREATE != 0 {
+ if flag&os.O_EXCL != 0 && n != nil {
+ return nil, os.ErrExist
+ }
+ if n == nil {
+ n = &memFSNode{
+ mode: perm.Perm(),
+ }
+ dir.children[frag] = n
+ }
+ }
+ if n == nil {
+ return nil, os.ErrNotExist
+ }
+ if flag&(os.O_WRONLY|os.O_RDWR) != 0 && flag&os.O_TRUNC != 0 {
+ n.mu.Lock()
+ n.data = nil
+ n.mu.Unlock()
+ }
+ }
+
+ children := make([]os.FileInfo, 0, len(n.children))
+ for cName, c := range n.children {
+ children = append(children, c.stat(cName))
+ }
+ return &memFile{
+ n: n,
+ nameSnapshot: frag,
+ childrenSnapshot: children,
+ }, nil
+}
+
+func (fs *memFS) RemoveAll(name string) error {
+ fs.mu.Lock()
+ defer fs.mu.Unlock()
+
+ dir, frag, err := fs.find("remove", name)
+ if err != nil {
+ return err
+ }
+ if dir == nil {
+ // We can't remove the root.
+ return os.ErrInvalid
+ }
+ delete(dir.children, frag)
+ return nil
+}
+
+func (fs *memFS) Rename(oldName, newName string) error {
+ fs.mu.Lock()
+ defer fs.mu.Unlock()
+
+ oldName = slashClean(oldName)
+ newName = slashClean(newName)
+ if oldName == newName {
+ return nil
+ }
+ if strings.HasPrefix(newName, oldName+"/") {
+ // We can't rename oldName to be a sub-directory of itself.
+ return os.ErrInvalid
+ }
+
+ oDir, oFrag, err := fs.find("rename", oldName)
+ if err != nil {
+ return err
+ }
+ if oDir == nil {
+ // We can't rename from the root.
+ return os.ErrInvalid
+ }
+
+ nDir, nFrag, err := fs.find("rename", newName)
+ if err != nil {
+ return err
+ }
+ if nDir == nil {
+ // We can't rename to the root.
+ return os.ErrInvalid
+ }
+
+ oNode, ok := oDir.children[oFrag]
+ if !ok {
+ return os.ErrNotExist
+ }
+ if oNode.children != nil {
+ if nNode, ok := nDir.children[nFrag]; ok {
+ if nNode.children == nil {
+ return errNotADirectory
+ }
+ if len(nNode.children) != 0 {
+ return errDirectoryNotEmpty
+ }
+ }
+ }
+ delete(oDir.children, oFrag)
+ nDir.children[nFrag] = oNode
+ return nil
+}
+
+func (fs *memFS) Stat(name string) (os.FileInfo, error) {
+ fs.mu.Lock()
+ defer fs.mu.Unlock()
+
+ dir, frag, err := fs.find("stat", name)
+ if err != nil {
+ return nil, err
+ }
+ if dir == nil {
+ // We're stat'ting the root.
+ return fs.root.stat("/"), nil
+ }
+ if n, ok := dir.children[frag]; ok {
+ return n.stat(path.Base(name)), nil
+ }
+ return nil, os.ErrNotExist
+}
+
+// A memFSNode represents a single entry in the in-memory filesystem and also
+// implements os.FileInfo.
+type memFSNode struct {
+ // children is protected by memFS.mu.
+ children map[string]*memFSNode
+
+ mu sync.Mutex
+ data []byte
+ mode os.FileMode
+ modTime time.Time
+ deadProps map[xml.Name]Property
+}
+
+func (n *memFSNode) stat(name string) *memFileInfo {
+ n.mu.Lock()
+ defer n.mu.Unlock()
+ return &memFileInfo{
+ name: name,
+ size: int64(len(n.data)),
+ mode: n.mode,
+ modTime: n.modTime,
+ }
+}
+
+func (n *memFSNode) DeadProps() (map[xml.Name]Property, error) {
+ n.mu.Lock()
+ defer n.mu.Unlock()
+ if len(n.deadProps) == 0 {
+ return nil, nil
+ }
+ ret := make(map[xml.Name]Property, len(n.deadProps))
+ for k, v := range n.deadProps {
+ ret[k] = v
+ }
+ return ret, nil
+}
+
+func (n *memFSNode) Patch(patches []Proppatch) ([]Propstat, error) {
+ n.mu.Lock()
+ defer n.mu.Unlock()
+ pstat := Propstat{Status: http.StatusOK}
+ for _, patch := range patches {
+ for _, p := range patch.Props {
+ pstat.Props = append(pstat.Props, Property{XMLName: p.XMLName})
+ if patch.Remove {
+ delete(n.deadProps, p.XMLName)
+ continue
+ }
+ if n.deadProps == nil {
+ n.deadProps = map[xml.Name]Property{}
+ }
+ n.deadProps[p.XMLName] = p
+ }
+ }
+ return []Propstat{pstat}, nil
+}
+
+type memFileInfo struct {
+ name string
+ size int64
+ mode os.FileMode
+ modTime time.Time
+}
+
+func (f *memFileInfo) Name() string { return f.name }
+func (f *memFileInfo) Size() int64 { return f.size }
+func (f *memFileInfo) Mode() os.FileMode { return f.mode }
+func (f *memFileInfo) ModTime() time.Time { return f.modTime }
+func (f *memFileInfo) IsDir() bool { return f.mode.IsDir() }
+func (f *memFileInfo) Sys() interface{} { return nil }
+
+// A memFile is a File implementation for a memFSNode. It is a per-file (not
+// per-node) read/write position, and a snapshot of the memFS' tree structure
+// (a node's name and children) for that node.
+type memFile struct {
+ n *memFSNode
+ nameSnapshot string
+ childrenSnapshot []os.FileInfo
+ // pos is protected by n.mu.
+ pos int
+}
+
+// A *memFile implements the optional DeadPropsHolder interface.
+var _ DeadPropsHolder = (*memFile)(nil)
+
+func (f *memFile) DeadProps() (map[xml.Name]Property, error) { return f.n.DeadProps() }
+func (f *memFile) Patch(patches []Proppatch) ([]Propstat, error) { return f.n.Patch(patches) }
+
+func (f *memFile) Close() error {
+ return nil
+}
+
+func (f *memFile) Read(p []byte) (int, error) {
+ f.n.mu.Lock()
+ defer f.n.mu.Unlock()
+ if f.n.mode.IsDir() {
+ return 0, os.ErrInvalid
+ }
+ if f.pos >= len(f.n.data) {
+ return 0, io.EOF
+ }
+ n := copy(p, f.n.data[f.pos:])
+ f.pos += n
+ return n, nil
+}
+
+func (f *memFile) Readdir(count int) ([]os.FileInfo, error) {
+ f.n.mu.Lock()
+ defer f.n.mu.Unlock()
+ if !f.n.mode.IsDir() {
+ return nil, os.ErrInvalid
+ }
+ old := f.pos
+ if old >= len(f.childrenSnapshot) {
+ // The os.File Readdir docs say that at the end of a directory,
+ // the error is io.EOF if count > 0 and nil if count <= 0.
+ if count > 0 {
+ return nil, io.EOF
+ }
+ return nil, nil
+ }
+ if count > 0 {
+ f.pos += count
+ if f.pos > len(f.childrenSnapshot) {
+ f.pos = len(f.childrenSnapshot)
+ }
+ } else {
+ f.pos = len(f.childrenSnapshot)
+ old = 0
+ }
+ return f.childrenSnapshot[old:f.pos], nil
+}
+
+func (f *memFile) Seek(offset int64, whence int) (int64, error) {
+ f.n.mu.Lock()
+ defer f.n.mu.Unlock()
+ npos := f.pos
+ // TODO: How to handle offsets greater than the size of system int?
+ switch whence {
+ case os.SEEK_SET:
+ npos = int(offset)
+ case os.SEEK_CUR:
+ npos += int(offset)
+ case os.SEEK_END:
+ npos = len(f.n.data) + int(offset)
+ default:
+ npos = -1
+ }
+ if npos < 0 {
+ return 0, os.ErrInvalid
+ }
+ f.pos = npos
+ return int64(f.pos), nil
+}
+
+func (f *memFile) Stat() (os.FileInfo, error) {
+ return f.n.stat(f.nameSnapshot), nil
+}
+
+func (f *memFile) Write(p []byte) (int, error) {
+ lenp := len(p)
+ f.n.mu.Lock()
+ defer f.n.mu.Unlock()
+
+ if f.n.mode.IsDir() {
+ return 0, os.ErrInvalid
+ }
+ if f.pos < len(f.n.data) {
+ n := copy(f.n.data[f.pos:], p)
+ f.pos += n
+ p = p[n:]
+ } else if f.pos > len(f.n.data) {
+ // Write permits the creation of holes, if we've seek'ed past the
+ // existing end of file.
+ if f.pos <= cap(f.n.data) {
+ oldLen := len(f.n.data)
+ f.n.data = f.n.data[:f.pos]
+ hole := f.n.data[oldLen:]
+ for i := range hole {
+ hole[i] = 0
+ }
+ } else {
+ d := make([]byte, f.pos, f.pos+len(p))
+ copy(d, f.n.data)
+ f.n.data = d
+ }
+ }
+
+ if len(p) > 0 {
+ // We should only get here if f.pos == len(f.n.data).
+ f.n.data = append(f.n.data, p...)
+ f.pos = len(f.n.data)
+ }
+ f.n.modTime = time.Now()
+ return lenp, nil
+}
+
+// moveFiles moves files and/or directories from src to dst.
+//
+// See section 9.9.4 for when various HTTP status codes apply.
+func moveFiles(fs FileSystem, src, dst string, overwrite bool) (status int, err error) {
+ created := false
+ if _, err := fs.Stat(dst); err != nil {
+ if !os.IsNotExist(err) {
+ return http.StatusForbidden, err
+ }
+ created = true
+ } else if overwrite {
+ // Section 9.9.3 says that "If a resource exists at the destination
+ // and the Overwrite header is "T", then prior to performing the move,
+ // the server must perform a DELETE with "Depth: infinity" on the
+ // destination resource.
+ if err := fs.RemoveAll(dst); err != nil {
+ return http.StatusForbidden, err
+ }
+ } else {
+ return http.StatusPreconditionFailed, os.ErrExist
+ }
+ if err := fs.Rename(src, dst); err != nil {
+ return http.StatusForbidden, err
+ }
+ if created {
+ return http.StatusCreated, nil
+ }
+ return http.StatusNoContent, nil
+}
+
+func copyProps(dst, src File) error {
+ d, ok := dst.(DeadPropsHolder)
+ if !ok {
+ return nil
+ }
+ s, ok := src.(DeadPropsHolder)
+ if !ok {
+ return nil
+ }
+ m, err := s.DeadProps()
+ if err != nil {
+ return err
+ }
+ props := make([]Property, 0, len(m))
+ for _, prop := range m {
+ props = append(props, prop)
+ }
+ _, err = d.Patch([]Proppatch{{Props: props}})
+ return err
+}
+
+// copyFiles copies files and/or directories from src to dst.
+//
+// See section 9.8.5 for when various HTTP status codes apply.
+func copyFiles(fs FileSystem, src, dst string, overwrite bool, depth int, recursion int) (status int, err error) {
+ if recursion == 1000 {
+ return http.StatusInternalServerError, errRecursionTooDeep
+ }
+ recursion++
+
+ // TODO: section 9.8.3 says that "Note that an infinite-depth COPY of /A/
+ // into /A/B/ could lead to infinite recursion if not handled correctly."
+
+ srcFile, err := fs.OpenFile(src, os.O_RDONLY, 0)
+ if err != nil {
+ if os.IsNotExist(err) {
+ return http.StatusNotFound, err
+ }
+ return http.StatusInternalServerError, err
+ }
+ defer srcFile.Close()
+ srcStat, err := srcFile.Stat()
+ if err != nil {
+ if os.IsNotExist(err) {
+ return http.StatusNotFound, err
+ }
+ return http.StatusInternalServerError, err
+ }
+ srcPerm := srcStat.Mode() & os.ModePerm
+
+ created := false
+ if _, err := fs.Stat(dst); err != nil {
+ if os.IsNotExist(err) {
+ created = true
+ } else {
+ return http.StatusForbidden, err
+ }
+ } else {
+ if !overwrite {
+ return http.StatusPreconditionFailed, os.ErrExist
+ }
+ if err := fs.RemoveAll(dst); err != nil && !os.IsNotExist(err) {
+ return http.StatusForbidden, err
+ }
+ }
+
+ if srcStat.IsDir() {
+ if err := fs.Mkdir(dst, srcPerm); err != nil {
+ return http.StatusForbidden, err
+ }
+ if depth == infiniteDepth {
+ children, err := srcFile.Readdir(-1)
+ if err != nil {
+ return http.StatusForbidden, err
+ }
+ for _, c := range children {
+ name := c.Name()
+ s := path.Join(src, name)
+ d := path.Join(dst, name)
+ cStatus, cErr := copyFiles(fs, s, d, overwrite, depth, recursion)
+ if cErr != nil {
+ // TODO: MultiStatus.
+ return cStatus, cErr
+ }
+ }
+ }
+
+ } else {
+ dstFile, err := fs.OpenFile(dst, os.O_RDWR|os.O_CREATE|os.O_TRUNC, srcPerm)
+ if err != nil {
+ if os.IsNotExist(err) {
+ return http.StatusConflict, err
+ }
+ return http.StatusForbidden, err
+
+ }
+ _, copyErr := io.Copy(dstFile, srcFile)
+ propsErr := copyProps(dstFile, srcFile)
+ closeErr := dstFile.Close()
+ if copyErr != nil {
+ return http.StatusInternalServerError, copyErr
+ }
+ if propsErr != nil {
+ return http.StatusInternalServerError, propsErr
+ }
+ if closeErr != nil {
+ return http.StatusInternalServerError, closeErr
+ }
+ }
+
+ if created {
+ return http.StatusCreated, nil
+ }
+ return http.StatusNoContent, nil
+}
+
+// walkFS traverses filesystem fs starting at name up to depth levels.
+//
+// Allowed values for depth are 0, 1 or infiniteDepth. For each visited node,
+// walkFS calls walkFn. If a visited file system node is a directory and
+// walkFn returns filepath.SkipDir, walkFS will skip traversal of this node.
+func walkFS(fs FileSystem, depth int, name string, info os.FileInfo, walkFn filepath.WalkFunc) error {
+ // This implementation is based on Walk's code in the standard path/filepath package.
+ err := walkFn(name, info, nil)
+ if err != nil {
+ if info.IsDir() && err == filepath.SkipDir {
+ return nil
+ }
+ return err
+ }
+ if !info.IsDir() || depth == 0 {
+ return nil
+ }
+ if depth == 1 {
+ depth = 0
+ }
+
+ // Read directory names.
+ f, err := fs.OpenFile(name, os.O_RDONLY, 0)
+ if err != nil {
+ return walkFn(name, info, err)
+ }
+ fileInfos, err := f.Readdir(0)
+ f.Close()
+ if err != nil {
+ return walkFn(name, info, err)
+ }
+
+ for _, fileInfo := range fileInfos {
+ filename := path.Join(name, fileInfo.Name())
+ fileInfo, err := fs.Stat(filename)
+ if err != nil {
+ if err := walkFn(filename, fileInfo, err); err != nil && err != filepath.SkipDir {
+ return err
+ }
+ } else {
+ err = walkFS(fs, depth, filename, fileInfo, walkFn)
+ if err != nil {
+ if !fileInfo.IsDir() || err != filepath.SkipDir {
+ return err
+ }
+ }
+ }
+ }
+ return nil
+}
diff --git a/go/src/golang.org/x/net/webdav/file_test.go b/go/src/golang.org/x/net/webdav/file_test.go
index 502b236..16c7ac9 100644
--- a/go/src/golang.org/x/net/webdav/file_test.go
+++ b/go/src/golang.org/x/net/webdav/file_test.go
@@ -5,11 +5,45 @@
package webdav
import (
+ "encoding/xml"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "os"
+ "path"
"path/filepath"
+ "reflect"
+ "sort"
+ "strconv"
+ "strings"
"testing"
)
-func TestDir(t *testing.T) {
+func TestSlashClean(t *testing.T) {
+ testCases := []string{
+ "",
+ ".",
+ "/",
+ "/./",
+ "//",
+ "//.",
+ "//a",
+ "/a",
+ "/a/b/c",
+ "/a//b/./../c/d/",
+ "a",
+ "a/b/c",
+ }
+ for _, tc := range testCases {
+ got := slashClean(tc)
+ want := path.Clean("/" + tc)
+ if got != want {
+ t.Errorf("tc=%q: got %q, want %q", tc, got, want)
+ }
+ }
+}
+
+func TestDirResolve(t *testing.T) {
testCases := []struct {
dir, name, want string
}{
@@ -115,3 +149,1010 @@
}
}
}
+
+func TestWalk(t *testing.T) {
+ type walkStep struct {
+ name, frag string
+ final bool
+ }
+
+ testCases := []struct {
+ dir string
+ want []walkStep
+ }{
+ {"", []walkStep{
+ {"", "", true},
+ }},
+ {"/", []walkStep{
+ {"", "", true},
+ }},
+ {"/a", []walkStep{
+ {"", "a", true},
+ }},
+ {"/a/", []walkStep{
+ {"", "a", true},
+ }},
+ {"/a/b", []walkStep{
+ {"", "a", false},
+ {"a", "b", true},
+ }},
+ {"/a/b/", []walkStep{
+ {"", "a", false},
+ {"a", "b", true},
+ }},
+ {"/a/b/c", []walkStep{
+ {"", "a", false},
+ {"a", "b", false},
+ {"b", "c", true},
+ }},
+ // The following test case is the one mentioned explicitly
+ // in the method description.
+ {"/foo/bar/x", []walkStep{
+ {"", "foo", false},
+ {"foo", "bar", false},
+ {"bar", "x", true},
+ }},
+ }
+
+ for _, tc := range testCases {
+ fs := NewMemFS().(*memFS)
+
+ parts := strings.Split(tc.dir, "/")
+ for p := 2; p < len(parts); p++ {
+ d := strings.Join(parts[:p], "/")
+ if err := fs.Mkdir(d, 0666); err != nil {
+ t.Errorf("tc.dir=%q: mkdir: %q: %v", tc.dir, d, err)
+ }
+ }
+
+ i, prevFrag := 0, ""
+ err := fs.walk("test", tc.dir, func(dir *memFSNode, frag string, final bool) error {
+ got := walkStep{
+ name: prevFrag,
+ frag: frag,
+ final: final,
+ }
+ want := tc.want[i]
+
+ if got != want {
+ return fmt.Errorf("got %+v, want %+v", got, want)
+ }
+ i, prevFrag = i+1, frag
+ return nil
+ })
+ if err != nil {
+ t.Errorf("tc.dir=%q: %v", tc.dir, err)
+ }
+ }
+}
+
+// find appends to ss the names of the named file and its children. It is
+// analogous to the Unix find command.
+//
+// The returned strings are not guaranteed to be in any particular order.
+func find(ss []string, fs FileSystem, name string) ([]string, error) {
+ stat, err := fs.Stat(name)
+ if err != nil {
+ return nil, err
+ }
+ ss = append(ss, name)
+ if stat.IsDir() {
+ f, err := fs.OpenFile(name, os.O_RDONLY, 0)
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+ children, err := f.Readdir(-1)
+ if err != nil {
+ return nil, err
+ }
+ for _, c := range children {
+ ss, err = find(ss, fs, path.Join(name, c.Name()))
+ if err != nil {
+ return nil, err
+ }
+ }
+ }
+ return ss, nil
+}
+
+func testFS(t *testing.T, fs FileSystem) {
+ errStr := func(err error) string {
+ switch {
+ case os.IsExist(err):
+ return "errExist"
+ case os.IsNotExist(err):
+ return "errNotExist"
+ case err != nil:
+ return "err"
+ }
+ return "ok"
+ }
+
+ // The non-"find" non-"stat" test cases should change the file system state. The
+ // indentation of the "find"s and "stat"s helps distinguish such test cases.
+ testCases := []string{
+ " stat / want dir",
+ " stat /a want errNotExist",
+ " stat /d want errNotExist",
+ " stat /d/e want errNotExist",
+ "create /a A want ok",
+ " stat /a want 1",
+ "create /d/e EEE want errNotExist",
+ "mk-dir /a want errExist",
+ "mk-dir /d/m want errNotExist",
+ "mk-dir /d want ok",
+ " stat /d want dir",
+ "create /d/e EEE want ok",
+ " stat /d/e want 3",
+ " find / /a /d /d/e",
+ "create /d/f FFFF want ok",
+ "create /d/g GGGGGGG want ok",
+ "mk-dir /d/m want ok",
+ "mk-dir /d/m want errExist",
+ "create /d/m/p PPPPP want ok",
+ " stat /d/e want 3",
+ " stat /d/f want 4",
+ " stat /d/g want 7",
+ " stat /d/h want errNotExist",
+ " stat /d/m want dir",
+ " stat /d/m/p want 5",
+ " find / /a /d /d/e /d/f /d/g /d/m /d/m/p",
+ "rm-all /d want ok",
+ " stat /a want 1",
+ " stat /d want errNotExist",
+ " stat /d/e want errNotExist",
+ " stat /d/f want errNotExist",
+ " stat /d/g want errNotExist",
+ " stat /d/m want errNotExist",
+ " stat /d/m/p want errNotExist",
+ " find / /a",
+ "mk-dir /d/m want errNotExist",
+ "mk-dir /d want ok",
+ "create /d/f FFFF want ok",
+ "rm-all /d/f want ok",
+ "mk-dir /d/m want ok",
+ "rm-all /z want ok",
+ "rm-all / want err",
+ "create /b BB want ok",
+ " stat / want dir",
+ " stat /a want 1",
+ " stat /b want 2",
+ " stat /c want errNotExist",
+ " stat /d want dir",
+ " stat /d/m want dir",
+ " find / /a /b /d /d/m",
+ "move__ o=F /b /c want ok",
+ " stat /b want errNotExist",
+ " stat /c want 2",
+ " stat /d/m want dir",
+ " stat /d/n want errNotExist",
+ " find / /a /c /d /d/m",
+ "move__ o=F /d/m /d/n want ok",
+ "create /d/n/q QQQQ want ok",
+ " stat /d/m want errNotExist",
+ " stat /d/n want dir",
+ " stat /d/n/q want 4",
+ "move__ o=F /d /d/n/z want err",
+ "move__ o=T /c /d/n/q want ok",
+ " stat /c want errNotExist",
+ " stat /d/n/q want 2",
+ " find / /a /d /d/n /d/n/q",
+ "create /d/n/r RRRRR want ok",
+ "mk-dir /u want ok",
+ "mk-dir /u/v want ok",
+ "move__ o=F /d/n /u want errExist",
+ "create /t TTTTTT want ok",
+ "move__ o=F /d/n /t want errExist",
+ "rm-all /t want ok",
+ "move__ o=F /d/n /t want ok",
+ " stat /d want dir",
+ " stat /d/n want errNotExist",
+ " stat /d/n/r want errNotExist",
+ " stat /t want dir",
+ " stat /t/q want 2",
+ " stat /t/r want 5",
+ " find / /a /d /t /t/q /t/r /u /u/v",
+ "move__ o=F /t / want errExist",
+ "move__ o=T /t /u/v want ok",
+ " stat /u/v/r want 5",
+ "move__ o=F / /z want err",
+ " find / /a /d /u /u/v /u/v/q /u/v/r",
+ " stat /a want 1",
+ " stat /b want errNotExist",
+ " stat /c want errNotExist",
+ " stat /u/v/r want 5",
+ "copy__ o=F d=0 /a /b want ok",
+ "copy__ o=T d=0 /a /c want ok",
+ " stat /a want 1",
+ " stat /b want 1",
+ " stat /c want 1",
+ " stat /u/v/r want 5",
+ "copy__ o=F d=0 /u/v/r /b want errExist",
+ " stat /b want 1",
+ "copy__ o=T d=0 /u/v/r /b want ok",
+ " stat /a want 1",
+ " stat /b want 5",
+ " stat /u/v/r want 5",
+ "rm-all /a want ok",
+ "rm-all /b want ok",
+ "mk-dir /u/v/w want ok",
+ "create /u/v/w/s SSSSSSSS want ok",
+ " stat /d want dir",
+ " stat /d/x want errNotExist",
+ " stat /d/y want errNotExist",
+ " stat /u/v/r want 5",
+ " stat /u/v/w/s want 8",
+ " find / /c /d /u /u/v /u/v/q /u/v/r /u/v/w /u/v/w/s",
+ "copy__ o=T d=0 /u/v /d/x want ok",
+ "copy__ o=T d=∞ /u/v /d/y want ok",
+ "rm-all /u want ok",
+ " stat /d/x want dir",
+ " stat /d/x/q want errNotExist",
+ " stat /d/x/r want errNotExist",
+ " stat /d/x/w want errNotExist",
+ " stat /d/x/w/s want errNotExist",
+ " stat /d/y want dir",
+ " stat /d/y/q want 2",
+ " stat /d/y/r want 5",
+ " stat /d/y/w want dir",
+ " stat /d/y/w/s want 8",
+ " stat /u want errNotExist",
+ " find / /c /d /d/x /d/y /d/y/q /d/y/r /d/y/w /d/y/w/s",
+ "copy__ o=F d=∞ /d/y /d/x want errExist",
+ }
+
+ for i, tc := range testCases {
+ tc = strings.TrimSpace(tc)
+ j := strings.IndexByte(tc, ' ')
+ if j < 0 {
+ t.Fatalf("test case #%d %q: invalid command", i, tc)
+ }
+ op, arg := tc[:j], tc[j+1:]
+
+ switch op {
+ default:
+ t.Fatalf("test case #%d %q: invalid operation %q", i, tc, op)
+
+ case "create":
+ parts := strings.Split(arg, " ")
+ if len(parts) != 4 || parts[2] != "want" {
+ t.Fatalf("test case #%d %q: invalid write", i, tc)
+ }
+ f, opErr := fs.OpenFile(parts[0], os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ if got := errStr(opErr); got != parts[3] {
+ t.Fatalf("test case #%d %q: OpenFile: got %q (%v), want %q", i, tc, got, opErr, parts[3])
+ }
+ if f != nil {
+ if _, err := f.Write([]byte(parts[1])); err != nil {
+ t.Fatalf("test case #%d %q: Write: %v", i, tc, err)
+ }
+ if err := f.Close(); err != nil {
+ t.Fatalf("test case #%d %q: Close: %v", i, tc, err)
+ }
+ }
+
+ case "find":
+ got, err := find(nil, fs, "/")
+ if err != nil {
+ t.Fatalf("test case #%d %q: find: %v", i, tc, err)
+ }
+ sort.Strings(got)
+ want := strings.Split(arg, " ")
+ if !reflect.DeepEqual(got, want) {
+ t.Fatalf("test case #%d %q:\ngot %s\nwant %s", i, tc, got, want)
+ }
+
+ case "copy__", "mk-dir", "move__", "rm-all", "stat":
+ nParts := 3
+ switch op {
+ case "copy__":
+ nParts = 6
+ case "move__":
+ nParts = 5
+ }
+ parts := strings.Split(arg, " ")
+ if len(parts) != nParts {
+ t.Fatalf("test case #%d %q: invalid %s", i, tc, op)
+ }
+
+ got, opErr := "", error(nil)
+ switch op {
+ case "copy__":
+ depth := 0
+ if parts[1] == "d=∞" {
+ depth = infiniteDepth
+ }
+ _, opErr = copyFiles(fs, parts[2], parts[3], parts[0] == "o=T", depth, 0)
+ case "mk-dir":
+ opErr = fs.Mkdir(parts[0], 0777)
+ case "move__":
+ _, opErr = moveFiles(fs, parts[1], parts[2], parts[0] == "o=T")
+ case "rm-all":
+ opErr = fs.RemoveAll(parts[0])
+ case "stat":
+ var stat os.FileInfo
+ fileName := parts[0]
+ if stat, opErr = fs.Stat(fileName); opErr == nil {
+ if stat.IsDir() {
+ got = "dir"
+ } else {
+ got = strconv.Itoa(int(stat.Size()))
+ }
+
+ if fileName == "/" {
+ // For a Dir FileSystem, the virtual file system root maps to a
+ // real file system name like "/tmp/webdav-test012345", which does
+ // not end with "/". We skip such cases.
+ } else if statName := stat.Name(); path.Base(fileName) != statName {
+ t.Fatalf("test case #%d %q: file name %q inconsistent with stat name %q",
+ i, tc, fileName, statName)
+ }
+ }
+ }
+ if got == "" {
+ got = errStr(opErr)
+ }
+
+ if parts[len(parts)-2] != "want" {
+ t.Fatalf("test case #%d %q: invalid %s", i, tc, op)
+ }
+ if want := parts[len(parts)-1]; got != want {
+ t.Fatalf("test case #%d %q: got %q (%v), want %q", i, tc, got, opErr, want)
+ }
+ }
+ }
+}
+
+func TestDir(t *testing.T) {
+ td, err := ioutil.TempDir("", "webdav-test")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.RemoveAll(td)
+ testFS(t, Dir(td))
+}
+
+func TestMemFS(t *testing.T) {
+ testFS(t, NewMemFS())
+}
+
+func TestMemFSRoot(t *testing.T) {
+ fs := NewMemFS()
+ for i := 0; i < 5; i++ {
+ stat, err := fs.Stat("/")
+ if err != nil {
+ t.Fatalf("i=%d: Stat: %v", i, err)
+ }
+ if !stat.IsDir() {
+ t.Fatalf("i=%d: Stat.IsDir is false, want true", i)
+ }
+
+ f, err := fs.OpenFile("/", os.O_RDONLY, 0)
+ if err != nil {
+ t.Fatalf("i=%d: OpenFile: %v", i, err)
+ }
+ defer f.Close()
+ children, err := f.Readdir(-1)
+ if err != nil {
+ t.Fatalf("i=%d: Readdir: %v", i, err)
+ }
+ if len(children) != i {
+ t.Fatalf("i=%d: got %d children, want %d", i, len(children), i)
+ }
+
+ if _, err := f.Write(make([]byte, 1)); err == nil {
+ t.Fatalf("i=%d: Write: got nil error, want non-nil", i)
+ }
+
+ if err := fs.Mkdir(fmt.Sprintf("/dir%d", i), 0777); err != nil {
+ t.Fatalf("i=%d: Mkdir: %v", i, err)
+ }
+ }
+}
+
+func TestMemFileReaddir(t *testing.T) {
+ fs := NewMemFS()
+ if err := fs.Mkdir("/foo", 0777); err != nil {
+ t.Fatalf("Mkdir: %v", err)
+ }
+ readdir := func(count int) ([]os.FileInfo, error) {
+ f, err := fs.OpenFile("/foo", os.O_RDONLY, 0)
+ if err != nil {
+ t.Fatalf("OpenFile: %v", err)
+ }
+ defer f.Close()
+ return f.Readdir(count)
+ }
+ if got, err := readdir(-1); len(got) != 0 || err != nil {
+ t.Fatalf("readdir(-1): got %d fileInfos with err=%v, want 0, <nil>", len(got), err)
+ }
+ if got, err := readdir(+1); len(got) != 0 || err != io.EOF {
+ t.Fatalf("readdir(+1): got %d fileInfos with err=%v, want 0, EOF", len(got), err)
+ }
+}
+
+func TestMemFile(t *testing.T) {
+ testCases := []string{
+ "wantData ",
+ "wantSize 0",
+ "write abc",
+ "wantData abc",
+ "write de",
+ "wantData abcde",
+ "wantSize 5",
+ "write 5*x",
+ "write 4*y+2*z",
+ "write 3*st",
+ "wantData abcdexxxxxyyyyzzststst",
+ "wantSize 22",
+ "seek set 4 want 4",
+ "write EFG",
+ "wantData abcdEFGxxxyyyyzzststst",
+ "wantSize 22",
+ "seek set 2 want 2",
+ "read cdEF",
+ "read Gx",
+ "seek cur 0 want 8",
+ "seek cur 2 want 10",
+ "seek cur -1 want 9",
+ "write J",
+ "wantData abcdEFGxxJyyyyzzststst",
+ "wantSize 22",
+ "seek cur -4 want 6",
+ "write ghijk",
+ "wantData abcdEFghijkyyyzzststst",
+ "wantSize 22",
+ "read yyyz",
+ "seek cur 0 want 15",
+ "write ",
+ "seek cur 0 want 15",
+ "read ",
+ "seek cur 0 want 15",
+ "seek end -3 want 19",
+ "write ZZ",
+ "wantData abcdEFghijkyyyzzstsZZt",
+ "wantSize 22",
+ "write 4*A",
+ "wantData abcdEFghijkyyyzzstsZZAAAA",
+ "wantSize 25",
+ "seek end 0 want 25",
+ "seek end -5 want 20",
+ "read Z+4*A",
+ "write 5*B",
+ "wantData abcdEFghijkyyyzzstsZZAAAABBBBB",
+ "wantSize 30",
+ "seek end 10 want 40",
+ "write C",
+ "wantData abcdEFghijkyyyzzstsZZAAAABBBBB..........C",
+ "wantSize 41",
+ "write D",
+ "wantData abcdEFghijkyyyzzstsZZAAAABBBBB..........CD",
+ "wantSize 42",
+ "seek set 43 want 43",
+ "write E",
+ "wantData abcdEFghijkyyyzzstsZZAAAABBBBB..........CD.E",
+ "wantSize 44",
+ "seek set 0 want 0",
+ "write 5*123456789_",
+ "wantData 123456789_123456789_123456789_123456789_123456789_",
+ "wantSize 50",
+ "seek cur 0 want 50",
+ "seek cur -99 want err",
+ }
+
+ const filename = "/foo"
+ fs := NewMemFS()
+ f, err := fs.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ if err != nil {
+ t.Fatalf("OpenFile: %v", err)
+ }
+ defer f.Close()
+
+ for i, tc := range testCases {
+ j := strings.IndexByte(tc, ' ')
+ if j < 0 {
+ t.Fatalf("test case #%d %q: invalid command", i, tc)
+ }
+ op, arg := tc[:j], tc[j+1:]
+
+ // Expand an arg like "3*a+2*b" to "aaabb".
+ parts := strings.Split(arg, "+")
+ for j, part := range parts {
+ if k := strings.IndexByte(part, '*'); k >= 0 {
+ repeatCount, repeatStr := part[:k], part[k+1:]
+ n, err := strconv.Atoi(repeatCount)
+ if err != nil {
+ t.Fatalf("test case #%d %q: invalid repeat count %q", i, tc, repeatCount)
+ }
+ parts[j] = strings.Repeat(repeatStr, n)
+ }
+ }
+ arg = strings.Join(parts, "")
+
+ switch op {
+ default:
+ t.Fatalf("test case #%d %q: invalid operation %q", i, tc, op)
+
+ case "read":
+ buf := make([]byte, len(arg))
+ if _, err := io.ReadFull(f, buf); err != nil {
+ t.Fatalf("test case #%d %q: ReadFull: %v", i, tc, err)
+ }
+ if got := string(buf); got != arg {
+ t.Fatalf("test case #%d %q:\ngot %q\nwant %q", i, tc, got, arg)
+ }
+
+ case "seek":
+ parts := strings.Split(arg, " ")
+ if len(parts) != 4 {
+ t.Fatalf("test case #%d %q: invalid seek", i, tc)
+ }
+
+ whence := 0
+ switch parts[0] {
+ default:
+ t.Fatalf("test case #%d %q: invalid seek whence", i, tc)
+ case "set":
+ whence = os.SEEK_SET
+ case "cur":
+ whence = os.SEEK_CUR
+ case "end":
+ whence = os.SEEK_END
+ }
+ offset, err := strconv.Atoi(parts[1])
+ if err != nil {
+ t.Fatalf("test case #%d %q: invalid offset %q", i, tc, parts[1])
+ }
+
+ if parts[2] != "want" {
+ t.Fatalf("test case #%d %q: invalid seek", i, tc)
+ }
+ if parts[3] == "err" {
+ _, err := f.Seek(int64(offset), whence)
+ if err == nil {
+ t.Fatalf("test case #%d %q: Seek returned nil error, want non-nil", i, tc)
+ }
+ } else {
+ got, err := f.Seek(int64(offset), whence)
+ if err != nil {
+ t.Fatalf("test case #%d %q: Seek: %v", i, tc, err)
+ }
+ want, err := strconv.Atoi(parts[3])
+ if err != nil {
+ t.Fatalf("test case #%d %q: invalid want %q", i, tc, parts[3])
+ }
+ if got != int64(want) {
+ t.Fatalf("test case #%d %q: got %d, want %d", i, tc, got, want)
+ }
+ }
+
+ case "write":
+ n, err := f.Write([]byte(arg))
+ if err != nil {
+ t.Fatalf("test case #%d %q: write: %v", i, tc, err)
+ }
+ if n != len(arg) {
+ t.Fatalf("test case #%d %q: write returned %d bytes, want %d", i, tc, n, len(arg))
+ }
+
+ case "wantData":
+ g, err := fs.OpenFile(filename, os.O_RDONLY, 0666)
+ if err != nil {
+ t.Fatalf("test case #%d %q: OpenFile: %v", i, tc, err)
+ }
+ gotBytes, err := ioutil.ReadAll(g)
+ if err != nil {
+ t.Fatalf("test case #%d %q: ReadAll: %v", i, tc, err)
+ }
+ for i, c := range gotBytes {
+ if c == '\x00' {
+ gotBytes[i] = '.'
+ }
+ }
+ got := string(gotBytes)
+ if got != arg {
+ t.Fatalf("test case #%d %q:\ngot %q\nwant %q", i, tc, got, arg)
+ }
+ if err := g.Close(); err != nil {
+ t.Fatalf("test case #%d %q: Close: %v", i, tc, err)
+ }
+
+ case "wantSize":
+ n, err := strconv.Atoi(arg)
+ if err != nil {
+ t.Fatalf("test case #%d %q: invalid size %q", i, tc, arg)
+ }
+ fi, err := fs.Stat(filename)
+ if err != nil {
+ t.Fatalf("test case #%d %q: Stat: %v", i, tc, err)
+ }
+ if got, want := fi.Size(), int64(n); got != want {
+ t.Fatalf("test case #%d %q: got %d, want %d", i, tc, got, want)
+ }
+ }
+ }
+}
+
+// TestMemFileWriteAllocs tests that writing N consecutive 1KiB chunks to a
+// memFile doesn't allocate a new buffer for each of those N times. Otherwise,
+// calling io.Copy(aMemFile, src) is likely to have quadratic complexity.
+func TestMemFileWriteAllocs(t *testing.T) {
+ fs := NewMemFS()
+ f, err := fs.OpenFile("/xxx", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ if err != nil {
+ t.Fatalf("OpenFile: %v", err)
+ }
+ defer f.Close()
+
+ xxx := make([]byte, 1024)
+ for i := range xxx {
+ xxx[i] = 'x'
+ }
+
+ a := testing.AllocsPerRun(100, func() {
+ f.Write(xxx)
+ })
+ // AllocsPerRun returns an integral value, so we compare the rounded-down
+ // number to zero.
+ if a > 0 {
+ t.Fatalf("%v allocs per run, want 0", a)
+ }
+}
+
+func BenchmarkMemFileWrite(b *testing.B) {
+ fs := NewMemFS()
+ xxx := make([]byte, 1024)
+ for i := range xxx {
+ xxx[i] = 'x'
+ }
+
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ f, err := fs.OpenFile("/xxx", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ if err != nil {
+ b.Fatalf("OpenFile: %v", err)
+ }
+ for j := 0; j < 100; j++ {
+ f.Write(xxx)
+ }
+ if err := f.Close(); err != nil {
+ b.Fatalf("Close: %v", err)
+ }
+ if err := fs.RemoveAll("/xxx"); err != nil {
+ b.Fatalf("RemoveAll: %v", err)
+ }
+ }
+}
+
+func TestCopyMoveProps(t *testing.T) {
+ fs := NewMemFS()
+ create := func(name string) error {
+ f, err := fs.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ if err != nil {
+ return err
+ }
+ _, wErr := f.Write([]byte("contents"))
+ cErr := f.Close()
+ if wErr != nil {
+ return wErr
+ }
+ return cErr
+ }
+ patch := func(name string, patches ...Proppatch) error {
+ f, err := fs.OpenFile(name, os.O_RDWR, 0666)
+ if err != nil {
+ return err
+ }
+ _, pErr := f.(DeadPropsHolder).Patch(patches)
+ cErr := f.Close()
+ if pErr != nil {
+ return pErr
+ }
+ return cErr
+ }
+ props := func(name string) (map[xml.Name]Property, error) {
+ f, err := fs.OpenFile(name, os.O_RDWR, 0666)
+ if err != nil {
+ return nil, err
+ }
+ m, pErr := f.(DeadPropsHolder).DeadProps()
+ cErr := f.Close()
+ if pErr != nil {
+ return nil, pErr
+ }
+ if cErr != nil {
+ return nil, cErr
+ }
+ return m, nil
+ }
+
+ p0 := Property{
+ XMLName: xml.Name{Space: "x:", Local: "boat"},
+ InnerXML: []byte("pea-green"),
+ }
+ p1 := Property{
+ XMLName: xml.Name{Space: "x:", Local: "ring"},
+ InnerXML: []byte("1 shilling"),
+ }
+ p2 := Property{
+ XMLName: xml.Name{Space: "x:", Local: "spoon"},
+ InnerXML: []byte("runcible"),
+ }
+ p3 := Property{
+ XMLName: xml.Name{Space: "x:", Local: "moon"},
+ InnerXML: []byte("light"),
+ }
+
+ if err := create("/src"); err != nil {
+ t.Fatalf("create /src: %v", err)
+ }
+ if err := patch("/src", Proppatch{Props: []Property{p0, p1}}); err != nil {
+ t.Fatalf("patch /src +p0 +p1: %v", err)
+ }
+ if _, err := copyFiles(fs, "/src", "/tmp", true, infiniteDepth, 0); err != nil {
+ t.Fatalf("copyFiles /src /tmp: %v", err)
+ }
+ if _, err := moveFiles(fs, "/tmp", "/dst", true); err != nil {
+ t.Fatalf("moveFiles /tmp /dst: %v", err)
+ }
+ if err := patch("/src", Proppatch{Props: []Property{p0}, Remove: true}); err != nil {
+ t.Fatalf("patch /src -p0: %v", err)
+ }
+ if err := patch("/src", Proppatch{Props: []Property{p2}}); err != nil {
+ t.Fatalf("patch /src +p2: %v", err)
+ }
+ if err := patch("/dst", Proppatch{Props: []Property{p1}, Remove: true}); err != nil {
+ t.Fatalf("patch /dst -p1: %v", err)
+ }
+ if err := patch("/dst", Proppatch{Props: []Property{p3}}); err != nil {
+ t.Fatalf("patch /dst +p3: %v", err)
+ }
+
+ gotSrc, err := props("/src")
+ if err != nil {
+ t.Fatalf("props /src: %v", err)
+ }
+ wantSrc := map[xml.Name]Property{
+ p1.XMLName: p1,
+ p2.XMLName: p2,
+ }
+ if !reflect.DeepEqual(gotSrc, wantSrc) {
+ t.Fatalf("props /src:\ngot %v\nwant %v", gotSrc, wantSrc)
+ }
+
+ gotDst, err := props("/dst")
+ if err != nil {
+ t.Fatalf("props /dst: %v", err)
+ }
+ wantDst := map[xml.Name]Property{
+ p0.XMLName: p0,
+ p3.XMLName: p3,
+ }
+ if !reflect.DeepEqual(gotDst, wantDst) {
+ t.Fatalf("props /dst:\ngot %v\nwant %v", gotDst, wantDst)
+ }
+}
+
+func TestWalkFS(t *testing.T) {
+ testCases := []struct {
+ desc string
+ buildfs []string
+ startAt string
+ depth int
+ walkFn filepath.WalkFunc
+ want []string
+ }{{
+ "just root",
+ []string{},
+ "/",
+ infiniteDepth,
+ nil,
+ []string{
+ "/",
+ },
+ }, {
+ "infinite walk from root",
+ []string{
+ "mkdir /a",
+ "mkdir /a/b",
+ "touch /a/b/c",
+ "mkdir /a/d",
+ "mkdir /e",
+ "touch /f",
+ },
+ "/",
+ infiniteDepth,
+ nil,
+ []string{
+ "/",
+ "/a",
+ "/a/b",
+ "/a/b/c",
+ "/a/d",
+ "/e",
+ "/f",
+ },
+ }, {
+ "infinite walk from subdir",
+ []string{
+ "mkdir /a",
+ "mkdir /a/b",
+ "touch /a/b/c",
+ "mkdir /a/d",
+ "mkdir /e",
+ "touch /f",
+ },
+ "/a",
+ infiniteDepth,
+ nil,
+ []string{
+ "/a",
+ "/a/b",
+ "/a/b/c",
+ "/a/d",
+ },
+ }, {
+ "depth 1 walk from root",
+ []string{
+ "mkdir /a",
+ "mkdir /a/b",
+ "touch /a/b/c",
+ "mkdir /a/d",
+ "mkdir /e",
+ "touch /f",
+ },
+ "/",
+ 1,
+ nil,
+ []string{
+ "/",
+ "/a",
+ "/e",
+ "/f",
+ },
+ }, {
+ "depth 1 walk from subdir",
+ []string{
+ "mkdir /a",
+ "mkdir /a/b",
+ "touch /a/b/c",
+ "mkdir /a/b/g",
+ "mkdir /a/b/g/h",
+ "touch /a/b/g/i",
+ "touch /a/b/g/h/j",
+ },
+ "/a/b",
+ 1,
+ nil,
+ []string{
+ "/a/b",
+ "/a/b/c",
+ "/a/b/g",
+ },
+ }, {
+ "depth 0 walk from subdir",
+ []string{
+ "mkdir /a",
+ "mkdir /a/b",
+ "touch /a/b/c",
+ "mkdir /a/b/g",
+ "mkdir /a/b/g/h",
+ "touch /a/b/g/i",
+ "touch /a/b/g/h/j",
+ },
+ "/a/b",
+ 0,
+ nil,
+ []string{
+ "/a/b",
+ },
+ }, {
+ "infinite walk from file",
+ []string{
+ "mkdir /a",
+ "touch /a/b",
+ "touch /a/c",
+ },
+ "/a/b",
+ 0,
+ nil,
+ []string{
+ "/a/b",
+ },
+ }, {
+ "infinite walk with skipped subdir",
+ []string{
+ "mkdir /a",
+ "mkdir /a/b",
+ "touch /a/b/c",
+ "mkdir /a/b/g",
+ "mkdir /a/b/g/h",
+ "touch /a/b/g/i",
+ "touch /a/b/g/h/j",
+ "touch /a/b/z",
+ },
+ "/",
+ infiniteDepth,
+ func(path string, info os.FileInfo, err error) error {
+ if path == "/a/b/g" {
+ return filepath.SkipDir
+ }
+ return nil
+ },
+ []string{
+ "/",
+ "/a",
+ "/a/b",
+ "/a/b/c",
+ "/a/b/z",
+ },
+ }}
+ for _, tc := range testCases {
+ fs, err := buildTestFS(tc.buildfs)
+ if err != nil {
+ t.Fatalf("%s: cannot create test filesystem: %v", tc.desc, err)
+ }
+ var got []string
+ traceFn := func(path string, info os.FileInfo, err error) error {
+ if tc.walkFn != nil {
+ err = tc.walkFn(path, info, err)
+ if err != nil {
+ return err
+ }
+ }
+ got = append(got, path)
+ return nil
+ }
+ fi, err := fs.Stat(tc.startAt)
+ if err != nil {
+ t.Fatalf("%s: cannot stat: %v", tc.desc, err)
+ }
+ err = walkFS(fs, tc.depth, tc.startAt, fi, traceFn)
+ if err != nil {
+ t.Errorf("%s:\ngot error %v, want nil", tc.desc, err)
+ continue
+ }
+ sort.Strings(got)
+ sort.Strings(tc.want)
+ if !reflect.DeepEqual(got, tc.want) {
+ t.Errorf("%s:\ngot %q\nwant %q", tc.desc, got, tc.want)
+ continue
+ }
+ }
+}
+
+func buildTestFS(buildfs []string) (FileSystem, error) {
+ // TODO: Could this be merged with the build logic in TestFS?
+
+ fs := NewMemFS()
+ for _, b := range buildfs {
+ op := strings.Split(b, " ")
+ switch op[0] {
+ case "mkdir":
+ err := fs.Mkdir(op[1], os.ModeDir|0777)
+ if err != nil {
+ return nil, err
+ }
+ case "touch":
+ f, err := fs.OpenFile(op[1], os.O_RDWR|os.O_CREATE, 0666)
+ if err != nil {
+ return nil, err
+ }
+ f.Close()
+ case "write":
+ f, err := fs.OpenFile(op[1], os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
+ if err != nil {
+ return nil, err
+ }
+ _, err = f.Write([]byte(op[2]))
+ f.Close()
+ if err != nil {
+ return nil, err
+ }
+ default:
+ return nil, fmt.Errorf("unknown file operation %q", op[0])
+ }
+ }
+ return fs, nil
+}
diff --git a/go/src/golang.org/x/net/webdav/litmus_test_server.go b/go/src/golang.org/x/net/webdav/litmus_test_server.go
new file mode 100644
index 0000000..514db5d
--- /dev/null
+++ b/go/src/golang.org/x/net/webdav/litmus_test_server.go
@@ -0,0 +1,94 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+/*
+This program is a server for the WebDAV 'litmus' compliance test at
+http://www.webdav.org/neon/litmus/
+To run the test:
+
+go run litmus_test_server.go
+
+and separately, from the downloaded litmus-xxx directory:
+
+make URL=http://localhost:9999/ check
+*/
+package main
+
+import (
+ "flag"
+ "fmt"
+ "log"
+ "net/http"
+ "net/url"
+
+ "golang.org/x/net/webdav"
+)
+
+var port = flag.Int("port", 9999, "server port")
+
+func main() {
+ flag.Parse()
+ log.SetFlags(0)
+ h := &webdav.Handler{
+ FileSystem: webdav.NewMemFS(),
+ LockSystem: webdav.NewMemLS(),
+ Logger: func(r *http.Request, err error) {
+ litmus := r.Header.Get("X-Litmus")
+ if len(litmus) > 19 {
+ litmus = litmus[:16] + "..."
+ }
+
+ switch r.Method {
+ case "COPY", "MOVE":
+ dst := ""
+ if u, err := url.Parse(r.Header.Get("Destination")); err == nil {
+ dst = u.Path
+ }
+ o := r.Header.Get("Overwrite")
+ log.Printf("%-20s%-10s%-30s%-30so=%-2s%v", litmus, r.Method, r.URL.Path, dst, o, err)
+ default:
+ log.Printf("%-20s%-10s%-30s%v", litmus, r.Method, r.URL.Path, err)
+ }
+ },
+ }
+
+ // The next line would normally be:
+ // http.Handle("/", h)
+ // but we wrap that HTTP handler h to cater for a special case.
+ //
+ // The propfind_invalid2 litmus test case expects an empty namespace prefix
+ // declaration to be an error. The FAQ in the webdav litmus test says:
+ //
+ // "What does the "propfind_invalid2" test check for?...
+ //
+ // If a request was sent with an XML body which included an empty namespace
+ // prefix declaration (xmlns:ns1=""), then the server must reject that with
+ // a "400 Bad Request" response, as it is invalid according to the XML
+ // Namespace specification."
+ //
+ // On the other hand, the Go standard library's encoding/xml package
+ // accepts an empty xmlns namespace, as per the discussion at
+ // https://github.com/golang/go/issues/8068
+ //
+ // Empty namespaces seem disallowed in the second (2006) edition of the XML
+ // standard, but allowed in a later edition. The grammar differs between
+ // http://www.w3.org/TR/2006/REC-xml-names-20060816/#ns-decl and
+ // http://www.w3.org/TR/REC-xml-names/#dt-prefix
+ //
+ // Thus, we assume that the propfind_invalid2 test is obsolete, and
+ // hard-code the 400 Bad Request response that the test expects.
+ http.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ if r.Header.Get("X-Litmus") == "props: 3 (propfind_invalid2)" {
+ http.Error(w, "400 Bad Request", http.StatusBadRequest)
+ return
+ }
+ h.ServeHTTP(w, r)
+ }))
+
+ addr := fmt.Sprintf(":%d", *port)
+ log.Printf("Serving %v", addr)
+ log.Fatal(http.ListenAndServe(addr, nil))
+}
diff --git a/go/src/golang.org/x/net/webdav/lock.go b/go/src/golang.org/x/net/webdav/lock.go
index 6538ded..344ac5c 100644
--- a/go/src/golang.org/x/net/webdav/lock.go
+++ b/go/src/golang.org/x/net/webdav/lock.go
@@ -5,15 +5,23 @@
package webdav
import (
+ "container/heap"
"errors"
- "io"
+ "strconv"
+ "strings"
+ "sync"
"time"
)
var (
+ // ErrConfirmationFailed is returned by a LockSystem's Confirm method.
ErrConfirmationFailed = errors.New("webdav: confirmation failed")
- ErrForbidden = errors.New("webdav: forbidden")
- ErrNoSuchLock = errors.New("webdav: no such lock")
+ // ErrForbidden is returned by a LockSystem's Unlock method.
+ ErrForbidden = errors.New("webdav: forbidden")
+ // ErrLocked is returned by a LockSystem's Create, Refresh and Unlock methods.
+ ErrLocked = errors.New("webdav: locked")
+ // ErrNoSuchLock is returned by a LockSystem's Refresh and Unlock methods.
+ ErrNoSuchLock = errors.New("webdav: no such lock")
)
// Condition can match a WebDAV resource, based on a token or ETag.
@@ -24,21 +32,414 @@
ETag string
}
+// LockSystem manages access to a collection of named resources. The elements
+// in a lock name are separated by slash ('/', U+002F) characters, regardless
+// of host operating system convention.
type LockSystem interface {
- // TODO: comment that the conditions should be ANDed together.
- Confirm(path string, conditions ...Condition) (c io.Closer, err error)
- // TODO: comment that token should be an absolute URI as defined by RFC 3986,
- // Section 4.3. In particular, it should not contain whitespace.
- Create(path string, now time.Time, ld LockDetails) (token string, c io.Closer, err error)
- Refresh(token string, now time.Time, duration time.Duration) (ld LockDetails, c io.Closer, err error)
- Unlock(token string) error
+ // Confirm confirms that the caller can claim all of the locks specified by
+ // the given conditions, and that holding the union of all of those locks
+ // gives exclusive access to all of the named resources. Up to two resources
+ // can be named. Empty names are ignored.
+ //
+ // Exactly one of release and err will be non-nil. If release is non-nil,
+ // all of the requested locks are held until release is called. Calling
+ // release does not unlock the lock, in the WebDAV UNLOCK sense, but once
+ // Confirm has confirmed that a lock claim is valid, that lock cannot be
+ // Confirmed again until it has been released.
+ //
+ // If Confirm returns ErrConfirmationFailed then the Handler will continue
+ // to try any other set of locks presented (a WebDAV HTTP request can
+ // present more than one set of locks). If it returns any other non-nil
+ // error, the Handler will write a "500 Internal Server Error" HTTP status.
+ Confirm(now time.Time, name0, name1 string, conditions ...Condition) (release func(), err error)
+
+ // Create creates a lock with the given depth, duration, owner and root
+ // (name). The depth will either be negative (meaning infinite) or zero.
+ //
+ // If Create returns ErrLocked then the Handler will write a "423 Locked"
+ // HTTP status. If it returns any other non-nil error, the Handler will
+ // write a "500 Internal Server Error" HTTP status.
+ //
+ // See http://www.webdav.org/specs/rfc4918.html#rfc.section.9.10.6 for
+ // when to use each error.
+ //
+ // The token returned identifies the created lock. It should be an absolute
+ // URI as defined by RFC 3986, Section 4.3. In particular, it should not
+ // contain whitespace.
+ Create(now time.Time, details LockDetails) (token string, err error)
+
+ // Refresh refreshes the lock with the given token.
+ //
+ // If Refresh returns ErrLocked then the Handler will write a "423 Locked"
+ // HTTP Status. If Refresh returns ErrNoSuchLock then the Handler will write
+ // a "412 Precondition Failed" HTTP Status. If it returns any other non-nil
+ // error, the Handler will write a "500 Internal Server Error" HTTP status.
+ //
+ // See http://www.webdav.org/specs/rfc4918.html#rfc.section.9.10.6 for
+ // when to use each error.
+ Refresh(now time.Time, token string, duration time.Duration) (LockDetails, error)
+
+ // Unlock unlocks the lock with the given token.
+ //
+ // If Unlock returns ErrForbidden then the Handler will write a "403
+ // Forbidden" HTTP Status. If Unlock returns ErrLocked then the Handler
+ // will write a "423 Locked" HTTP status. If Unlock returns ErrNoSuchLock
+ // then the Handler will write a "409 Conflict" HTTP Status. If it returns
+ // any other non-nil error, the Handler will write a "500 Internal Server
+ // Error" HTTP status.
+ //
+ // See http://www.webdav.org/specs/rfc4918.html#rfc.section.9.11.1 for
+ // when to use each error.
+ Unlock(now time.Time, token string) error
}
+// LockDetails are a lock's metadata.
type LockDetails struct {
- Depth int // Negative means infinite depth.
- Duration time.Duration // Negative means unlimited duration.
- OwnerXML string // Verbatim XML.
- Path string
+ // Root is the root resource name being locked. For a zero-depth lock, the
+ // root is the only resource being locked.
+ Root string
+ // Duration is the lock timeout. A negative duration means infinite.
+ Duration time.Duration
+ // OwnerXML is the verbatim <owner> XML given in a LOCK HTTP request.
+ //
+ // TODO: does the "verbatim" nature play well with XML namespaces?
+ // Does the OwnerXML field need to have more structure? See
+ // https://codereview.appspot.com/175140043/#msg2
+ OwnerXML string
+ // ZeroDepth is whether the lock has zero depth. If it does not have zero
+ // depth, it has infinite depth.
+ ZeroDepth bool
}
-// TODO: a MemLS implementation.
+// NewMemLS returns a new in-memory LockSystem.
+func NewMemLS() LockSystem {
+ return &memLS{
+ byName: make(map[string]*memLSNode),
+ byToken: make(map[string]*memLSNode),
+ gen: uint64(time.Now().Unix()),
+ }
+}
+
+type memLS struct {
+ mu sync.Mutex
+ byName map[string]*memLSNode
+ byToken map[string]*memLSNode
+ gen uint64
+ // byExpiry only contains those nodes whose LockDetails have a finite
+ // Duration and are yet to expire.
+ byExpiry byExpiry
+}
+
+func (m *memLS) nextToken() string {
+ m.gen++
+ return strconv.FormatUint(m.gen, 10)
+}
+
+func (m *memLS) collectExpiredNodes(now time.Time) {
+ for len(m.byExpiry) > 0 {
+ if now.Before(m.byExpiry[0].expiry) {
+ break
+ }
+ m.remove(m.byExpiry[0])
+ }
+}
+
+func (m *memLS) Confirm(now time.Time, name0, name1 string, conditions ...Condition) (func(), error) {
+ m.mu.Lock()
+ defer m.mu.Unlock()
+ m.collectExpiredNodes(now)
+
+ var n0, n1 *memLSNode
+ if name0 != "" {
+ if n0 = m.lookup(slashClean(name0), conditions...); n0 == nil {
+ return nil, ErrConfirmationFailed
+ }
+ }
+ if name1 != "" {
+ if n1 = m.lookup(slashClean(name1), conditions...); n1 == nil {
+ return nil, ErrConfirmationFailed
+ }
+ }
+
+ // Don't hold the same node twice.
+ if n1 == n0 {
+ n1 = nil
+ }
+
+ if n0 != nil {
+ m.hold(n0)
+ }
+ if n1 != nil {
+ m.hold(n1)
+ }
+ return func() {
+ m.mu.Lock()
+ defer m.mu.Unlock()
+ if n1 != nil {
+ m.unhold(n1)
+ }
+ if n0 != nil {
+ m.unhold(n0)
+ }
+ }, nil
+}
+
+// lookup returns the node n that locks the named resource, provided that n
+// matches at least one of the given conditions and that lock isn't held by
+// another party. Otherwise, it returns nil.
+//
+// n may be a parent of the named resource, if n is an infinite depth lock.
+func (m *memLS) lookup(name string, conditions ...Condition) (n *memLSNode) {
+ // TODO: support Condition.Not and Condition.ETag.
+ for _, c := range conditions {
+ n = m.byToken[c.Token]
+ if n == nil || n.held {
+ continue
+ }
+ if name == n.details.Root {
+ return n
+ }
+ if n.details.ZeroDepth {
+ continue
+ }
+ if n.details.Root == "/" || strings.HasPrefix(name, n.details.Root+"/") {
+ return n
+ }
+ }
+ return nil
+}
+
+func (m *memLS) hold(n *memLSNode) {
+ if n.held {
+ panic("webdav: memLS inconsistent held state")
+ }
+ n.held = true
+ if n.details.Duration >= 0 && n.byExpiryIndex >= 0 {
+ heap.Remove(&m.byExpiry, n.byExpiryIndex)
+ }
+}
+
+func (m *memLS) unhold(n *memLSNode) {
+ if !n.held {
+ panic("webdav: memLS inconsistent held state")
+ }
+ n.held = false
+ if n.details.Duration >= 0 {
+ heap.Push(&m.byExpiry, n)
+ }
+}
+
+func (m *memLS) Create(now time.Time, details LockDetails) (string, error) {
+ m.mu.Lock()
+ defer m.mu.Unlock()
+ m.collectExpiredNodes(now)
+ details.Root = slashClean(details.Root)
+
+ if !m.canCreate(details.Root, details.ZeroDepth) {
+ return "", ErrLocked
+ }
+ n := m.create(details.Root)
+ n.token = m.nextToken()
+ m.byToken[n.token] = n
+ n.details = details
+ if n.details.Duration >= 0 {
+ n.expiry = now.Add(n.details.Duration)
+ heap.Push(&m.byExpiry, n)
+ }
+ return n.token, nil
+}
+
+func (m *memLS) Refresh(now time.Time, token string, duration time.Duration) (LockDetails, error) {
+ m.mu.Lock()
+ defer m.mu.Unlock()
+ m.collectExpiredNodes(now)
+
+ n := m.byToken[token]
+ if n == nil {
+ return LockDetails{}, ErrNoSuchLock
+ }
+ if n.held {
+ return LockDetails{}, ErrLocked
+ }
+ if n.byExpiryIndex >= 0 {
+ heap.Remove(&m.byExpiry, n.byExpiryIndex)
+ }
+ n.details.Duration = duration
+ if n.details.Duration >= 0 {
+ n.expiry = now.Add(n.details.Duration)
+ heap.Push(&m.byExpiry, n)
+ }
+ return n.details, nil
+}
+
+func (m *memLS) Unlock(now time.Time, token string) error {
+ m.mu.Lock()
+ defer m.mu.Unlock()
+ m.collectExpiredNodes(now)
+
+ n := m.byToken[token]
+ if n == nil {
+ return ErrNoSuchLock
+ }
+ if n.held {
+ return ErrLocked
+ }
+ m.remove(n)
+ return nil
+}
+
+func (m *memLS) canCreate(name string, zeroDepth bool) bool {
+ return walkToRoot(name, func(name0 string, first bool) bool {
+ n := m.byName[name0]
+ if n == nil {
+ return true
+ }
+ if first {
+ if n.token != "" {
+ // The target node is already locked.
+ return false
+ }
+ if !zeroDepth {
+ // The requested lock depth is infinite, and the fact that n exists
+ // (n != nil) means that a descendent of the target node is locked.
+ return false
+ }
+ } else if n.token != "" && !n.details.ZeroDepth {
+ // An ancestor of the target node is locked with infinite depth.
+ return false
+ }
+ return true
+ })
+}
+
+func (m *memLS) create(name string) (ret *memLSNode) {
+ walkToRoot(name, func(name0 string, first bool) bool {
+ n := m.byName[name0]
+ if n == nil {
+ n = &memLSNode{
+ details: LockDetails{
+ Root: name0,
+ },
+ byExpiryIndex: -1,
+ }
+ m.byName[name0] = n
+ }
+ n.refCount++
+ if first {
+ ret = n
+ }
+ return true
+ })
+ return ret
+}
+
+func (m *memLS) remove(n *memLSNode) {
+ delete(m.byToken, n.token)
+ n.token = ""
+ walkToRoot(n.details.Root, func(name0 string, first bool) bool {
+ x := m.byName[name0]
+ x.refCount--
+ if x.refCount == 0 {
+ delete(m.byName, name0)
+ }
+ return true
+ })
+ if n.byExpiryIndex >= 0 {
+ heap.Remove(&m.byExpiry, n.byExpiryIndex)
+ }
+}
+
+func walkToRoot(name string, f func(name0 string, first bool) bool) bool {
+ for first := true; ; first = false {
+ if !f(name, first) {
+ return false
+ }
+ if name == "/" {
+ break
+ }
+ name = name[:strings.LastIndex(name, "/")]
+ if name == "" {
+ name = "/"
+ }
+ }
+ return true
+}
+
+type memLSNode struct {
+ // details are the lock metadata. Even if this node's name is not explicitly locked,
+ // details.Root will still equal the node's name.
+ details LockDetails
+ // token is the unique identifier for this node's lock. An empty token means that
+ // this node is not explicitly locked.
+ token string
+ // refCount is the number of self-or-descendent nodes that are explicitly locked.
+ refCount int
+ // expiry is when this node's lock expires.
+ expiry time.Time
+ // byExpiryIndex is the index of this node in memLS.byExpiry. It is -1
+ // if this node does not expire, or has expired.
+ byExpiryIndex int
+ // held is whether this node's lock is actively held by a Confirm call.
+ held bool
+}
+
+type byExpiry []*memLSNode
+
+func (b *byExpiry) Len() int {
+ return len(*b)
+}
+
+func (b *byExpiry) Less(i, j int) bool {
+ return (*b)[i].expiry.Before((*b)[j].expiry)
+}
+
+func (b *byExpiry) Swap(i, j int) {
+ (*b)[i], (*b)[j] = (*b)[j], (*b)[i]
+ (*b)[i].byExpiryIndex = i
+ (*b)[j].byExpiryIndex = j
+}
+
+func (b *byExpiry) Push(x interface{}) {
+ n := x.(*memLSNode)
+ n.byExpiryIndex = len(*b)
+ *b = append(*b, n)
+}
+
+func (b *byExpiry) Pop() interface{} {
+ i := len(*b) - 1
+ n := (*b)[i]
+ (*b)[i] = nil
+ n.byExpiryIndex = -1
+ *b = (*b)[:i]
+ return n
+}
+
+const infiniteTimeout = -1
+
+// parseTimeout parses the Timeout HTTP header, as per section 10.7. If s is
+// empty, an infiniteTimeout is returned.
+func parseTimeout(s string) (time.Duration, error) {
+ if s == "" {
+ return infiniteTimeout, nil
+ }
+ if i := strings.IndexByte(s, ','); i >= 0 {
+ s = s[:i]
+ }
+ s = strings.TrimSpace(s)
+ if s == "Infinite" {
+ return infiniteTimeout, nil
+ }
+ const pre = "Second-"
+ if !strings.HasPrefix(s, pre) {
+ return 0, errInvalidTimeout
+ }
+ s = s[len(pre):]
+ if s == "" || s[0] < '0' || '9' < s[0] {
+ return 0, errInvalidTimeout
+ }
+ n, err := strconv.ParseInt(s, 10, 64)
+ if err != nil || 1<<32-1 < n {
+ return 0, errInvalidTimeout
+ }
+ return time.Duration(n) * time.Second, nil
+}
diff --git a/go/src/golang.org/x/net/webdav/lock_test.go b/go/src/golang.org/x/net/webdav/lock_test.go
new file mode 100644
index 0000000..116d6c0
--- /dev/null
+++ b/go/src/golang.org/x/net/webdav/lock_test.go
@@ -0,0 +1,731 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package webdav
+
+import (
+ "fmt"
+ "math/rand"
+ "path"
+ "reflect"
+ "sort"
+ "strconv"
+ "strings"
+ "testing"
+ "time"
+)
+
+func TestWalkToRoot(t *testing.T) {
+ testCases := []struct {
+ name string
+ want []string
+ }{{
+ "/a/b/c/d",
+ []string{
+ "/a/b/c/d",
+ "/a/b/c",
+ "/a/b",
+ "/a",
+ "/",
+ },
+ }, {
+ "/a",
+ []string{
+ "/a",
+ "/",
+ },
+ }, {
+ "/",
+ []string{
+ "/",
+ },
+ }}
+
+ for _, tc := range testCases {
+ var got []string
+ if !walkToRoot(tc.name, func(name0 string, first bool) bool {
+ if first != (len(got) == 0) {
+ t.Errorf("name=%q: first=%t but len(got)==%d", tc.name, first, len(got))
+ return false
+ }
+ got = append(got, name0)
+ return true
+ }) {
+ continue
+ }
+ if !reflect.DeepEqual(got, tc.want) {
+ t.Errorf("name=%q:\ngot %q\nwant %q", tc.name, got, tc.want)
+ }
+ }
+}
+
+var lockTestDurations = []time.Duration{
+ infiniteTimeout, // infiniteTimeout means to never expire.
+ 0, // A zero duration means to expire immediately.
+ 100 * time.Hour, // A very large duration will not expire in these tests.
+}
+
+// lockTestNames are the names of a set of mutually compatible locks. For each
+// name fragment:
+// - _ means no explicit lock.
+// - i means a infinite-depth lock,
+// - z means a zero-depth lock,
+var lockTestNames = []string{
+ "/_/_/_/_/z",
+ "/_/_/i",
+ "/_/z",
+ "/_/z/i",
+ "/_/z/z",
+ "/_/z/_/i",
+ "/_/z/_/z",
+ "/i",
+ "/z",
+ "/z/_/i",
+ "/z/_/z",
+}
+
+func lockTestZeroDepth(name string) bool {
+ switch name[len(name)-1] {
+ case 'i':
+ return false
+ case 'z':
+ return true
+ }
+ panic(fmt.Sprintf("lock name %q did not end with 'i' or 'z'", name))
+}
+
+func TestMemLSCanCreate(t *testing.T) {
+ now := time.Unix(0, 0)
+ m := NewMemLS().(*memLS)
+
+ for _, name := range lockTestNames {
+ _, err := m.Create(now, LockDetails{
+ Root: name,
+ Duration: infiniteTimeout,
+ ZeroDepth: lockTestZeroDepth(name),
+ })
+ if err != nil {
+ t.Fatalf("creating lock for %q: %v", name, err)
+ }
+ }
+
+ wantCanCreate := func(name string, zeroDepth bool) bool {
+ for _, n := range lockTestNames {
+ switch {
+ case n == name:
+ // An existing lock has the same name as the proposed lock.
+ return false
+ case strings.HasPrefix(n, name):
+ // An existing lock would be a child of the proposed lock,
+ // which conflicts if the proposed lock has infinite depth.
+ if !zeroDepth {
+ return false
+ }
+ case strings.HasPrefix(name, n):
+ // An existing lock would be an ancestor of the proposed lock,
+ // which conflicts if the ancestor has infinite depth.
+ if n[len(n)-1] == 'i' {
+ return false
+ }
+ }
+ }
+ return true
+ }
+
+ var check func(int, string)
+ check = func(recursion int, name string) {
+ for _, zeroDepth := range []bool{false, true} {
+ got := m.canCreate(name, zeroDepth)
+ want := wantCanCreate(name, zeroDepth)
+ if got != want {
+ t.Errorf("canCreate name=%q zeroDepth=%t: got %t, want %t", name, zeroDepth, got, want)
+ }
+ }
+ if recursion == 6 {
+ return
+ }
+ if name != "/" {
+ name += "/"
+ }
+ for _, c := range "_iz" {
+ check(recursion+1, name+string(c))
+ }
+ }
+ check(0, "/")
+}
+
+func TestMemLSLookup(t *testing.T) {
+ now := time.Unix(0, 0)
+ m := NewMemLS().(*memLS)
+
+ badToken := m.nextToken()
+ t.Logf("badToken=%q", badToken)
+
+ for _, name := range lockTestNames {
+ token, err := m.Create(now, LockDetails{
+ Root: name,
+ Duration: infiniteTimeout,
+ ZeroDepth: lockTestZeroDepth(name),
+ })
+ if err != nil {
+ t.Fatalf("creating lock for %q: %v", name, err)
+ }
+ t.Logf("%-15q -> node=%p token=%q", name, m.byName[name], token)
+ }
+
+ baseNames := append([]string{"/a", "/b/c"}, lockTestNames...)
+ for _, baseName := range baseNames {
+ for _, suffix := range []string{"", "/0", "/1/2/3"} {
+ name := baseName + suffix
+
+ goodToken := ""
+ base := m.byName[baseName]
+ if base != nil && (suffix == "" || !lockTestZeroDepth(baseName)) {
+ goodToken = base.token
+ }
+
+ for _, token := range []string{badToken, goodToken} {
+ if token == "" {
+ continue
+ }
+
+ got := m.lookup(name, Condition{Token: token})
+ want := base
+ if token == badToken {
+ want = nil
+ }
+ if got != want {
+ t.Errorf("name=%-20qtoken=%q (bad=%t): got %p, want %p",
+ name, token, token == badToken, got, want)
+ }
+ }
+ }
+ }
+}
+
+func TestMemLSConfirm(t *testing.T) {
+ now := time.Unix(0, 0)
+ m := NewMemLS().(*memLS)
+ alice, err := m.Create(now, LockDetails{
+ Root: "/alice",
+ Duration: infiniteTimeout,
+ ZeroDepth: false,
+ })
+ tweedle, err := m.Create(now, LockDetails{
+ Root: "/tweedle",
+ Duration: infiniteTimeout,
+ ZeroDepth: false,
+ })
+ if err != nil {
+ t.Fatalf("Create: %v", err)
+ }
+ if err := m.consistent(); err != nil {
+ t.Fatalf("Create: inconsistent state: %v", err)
+ }
+
+ // Test a mismatch between name and condition.
+ _, err = m.Confirm(now, "/tweedle/dee", "", Condition{Token: alice})
+ if err != ErrConfirmationFailed {
+ t.Fatalf("Confirm (mismatch): got %v, want ErrConfirmationFailed", err)
+ }
+ if err := m.consistent(); err != nil {
+ t.Fatalf("Confirm (mismatch): inconsistent state: %v", err)
+ }
+
+ // Test two names (that fall under the same lock) in the one Confirm call.
+ release, err := m.Confirm(now, "/tweedle/dee", "/tweedle/dum", Condition{Token: tweedle})
+ if err != nil {
+ t.Fatalf("Confirm (twins): %v", err)
+ }
+ if err := m.consistent(); err != nil {
+ t.Fatalf("Confirm (twins): inconsistent state: %v", err)
+ }
+ release()
+ if err := m.consistent(); err != nil {
+ t.Fatalf("release (twins): inconsistent state: %v", err)
+ }
+
+ // Test the same two names in overlapping Confirm / release calls.
+ releaseDee, err := m.Confirm(now, "/tweedle/dee", "", Condition{Token: tweedle})
+ if err != nil {
+ t.Fatalf("Confirm (sequence #0): %v", err)
+ }
+ if err := m.consistent(); err != nil {
+ t.Fatalf("Confirm (sequence #0): inconsistent state: %v", err)
+ }
+
+ _, err = m.Confirm(now, "/tweedle/dum", "", Condition{Token: tweedle})
+ if err != ErrConfirmationFailed {
+ t.Fatalf("Confirm (sequence #1): got %v, want ErrConfirmationFailed", err)
+ }
+ if err := m.consistent(); err != nil {
+ t.Fatalf("Confirm (sequence #1): inconsistent state: %v", err)
+ }
+
+ releaseDee()
+ if err := m.consistent(); err != nil {
+ t.Fatalf("release (sequence #2): inconsistent state: %v", err)
+ }
+
+ releaseDum, err := m.Confirm(now, "/tweedle/dum", "", Condition{Token: tweedle})
+ if err != nil {
+ t.Fatalf("Confirm (sequence #3): %v", err)
+ }
+ if err := m.consistent(); err != nil {
+ t.Fatalf("Confirm (sequence #3): inconsistent state: %v", err)
+ }
+
+ // Test that you can't unlock a held lock.
+ err = m.Unlock(now, tweedle)
+ if err != ErrLocked {
+ t.Fatalf("Unlock (sequence #4): got %v, want ErrLocked", err)
+ }
+
+ releaseDum()
+ if err := m.consistent(); err != nil {
+ t.Fatalf("release (sequence #5): inconsistent state: %v", err)
+ }
+
+ err = m.Unlock(now, tweedle)
+ if err != nil {
+ t.Fatalf("Unlock (sequence #6): %v", err)
+ }
+ if err := m.consistent(); err != nil {
+ t.Fatalf("Unlock (sequence #6): inconsistent state: %v", err)
+ }
+}
+
+func TestMemLSNonCanonicalRoot(t *testing.T) {
+ now := time.Unix(0, 0)
+ m := NewMemLS().(*memLS)
+ token, err := m.Create(now, LockDetails{
+ Root: "/foo/./bar//",
+ Duration: 1 * time.Second,
+ })
+ if err != nil {
+ t.Fatalf("Create: %v", err)
+ }
+ if err := m.consistent(); err != nil {
+ t.Fatalf("Create: inconsistent state: %v", err)
+ }
+ if err := m.Unlock(now, token); err != nil {
+ t.Fatalf("Unlock: %v", err)
+ }
+ if err := m.consistent(); err != nil {
+ t.Fatalf("Unlock: inconsistent state: %v", err)
+ }
+}
+
+func TestMemLSExpiry(t *testing.T) {
+ m := NewMemLS().(*memLS)
+ testCases := []string{
+ "setNow 0",
+ "create /a.5",
+ "want /a.5",
+ "create /c.6",
+ "want /a.5 /c.6",
+ "create /a/b.7",
+ "want /a.5 /a/b.7 /c.6",
+ "setNow 4",
+ "want /a.5 /a/b.7 /c.6",
+ "setNow 5",
+ "want /a/b.7 /c.6",
+ "setNow 6",
+ "want /a/b.7",
+ "setNow 7",
+ "want ",
+ "setNow 8",
+ "want ",
+ "create /a.12",
+ "create /b.13",
+ "create /c.15",
+ "create /a/d.16",
+ "want /a.12 /a/d.16 /b.13 /c.15",
+ "refresh /a.14",
+ "want /a.14 /a/d.16 /b.13 /c.15",
+ "setNow 12",
+ "want /a.14 /a/d.16 /b.13 /c.15",
+ "setNow 13",
+ "want /a.14 /a/d.16 /c.15",
+ "setNow 14",
+ "want /a/d.16 /c.15",
+ "refresh /a/d.20",
+ "refresh /c.20",
+ "want /a/d.20 /c.20",
+ "setNow 20",
+ "want ",
+ }
+
+ tokens := map[string]string{}
+ zTime := time.Unix(0, 0)
+ now := zTime
+ for i, tc := range testCases {
+ j := strings.IndexByte(tc, ' ')
+ if j < 0 {
+ t.Fatalf("test case #%d %q: invalid command", i, tc)
+ }
+ op, arg := tc[:j], tc[j+1:]
+ switch op {
+ default:
+ t.Fatalf("test case #%d %q: invalid operation %q", i, tc, op)
+
+ case "create", "refresh":
+ parts := strings.Split(arg, ".")
+ if len(parts) != 2 {
+ t.Fatalf("test case #%d %q: invalid create", i, tc)
+ }
+ root := parts[0]
+ d, err := strconv.Atoi(parts[1])
+ if err != nil {
+ t.Fatalf("test case #%d %q: invalid duration", i, tc)
+ }
+ dur := time.Unix(0, 0).Add(time.Duration(d) * time.Second).Sub(now)
+
+ switch op {
+ case "create":
+ token, err := m.Create(now, LockDetails{
+ Root: root,
+ Duration: dur,
+ ZeroDepth: true,
+ })
+ if err != nil {
+ t.Fatalf("test case #%d %q: Create: %v", i, tc, err)
+ }
+ tokens[root] = token
+
+ case "refresh":
+ token := tokens[root]
+ if token == "" {
+ t.Fatalf("test case #%d %q: no token for %q", i, tc, root)
+ }
+ got, err := m.Refresh(now, token, dur)
+ if err != nil {
+ t.Fatalf("test case #%d %q: Refresh: %v", i, tc, err)
+ }
+ want := LockDetails{
+ Root: root,
+ Duration: dur,
+ ZeroDepth: true,
+ }
+ if got != want {
+ t.Fatalf("test case #%d %q:\ngot %v\nwant %v", i, tc, got, want)
+ }
+ }
+
+ case "setNow":
+ d, err := strconv.Atoi(arg)
+ if err != nil {
+ t.Fatalf("test case #%d %q: invalid duration", i, tc)
+ }
+ now = time.Unix(0, 0).Add(time.Duration(d) * time.Second)
+
+ case "want":
+ m.mu.Lock()
+ m.collectExpiredNodes(now)
+ got := make([]string, 0, len(m.byToken))
+ for _, n := range m.byToken {
+ got = append(got, fmt.Sprintf("%s.%d",
+ n.details.Root, n.expiry.Sub(zTime)/time.Second))
+ }
+ m.mu.Unlock()
+ sort.Strings(got)
+ want := []string{}
+ if arg != "" {
+ want = strings.Split(arg, " ")
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Fatalf("test case #%d %q:\ngot %q\nwant %q", i, tc, got, want)
+ }
+ }
+
+ if err := m.consistent(); err != nil {
+ t.Fatalf("test case #%d %q: inconsistent state: %v", i, tc, err)
+ }
+ }
+}
+
+func TestMemLS(t *testing.T) {
+ now := time.Unix(0, 0)
+ m := NewMemLS().(*memLS)
+ rng := rand.New(rand.NewSource(0))
+ tokens := map[string]string{}
+ nConfirm, nCreate, nRefresh, nUnlock := 0, 0, 0, 0
+ const N = 2000
+
+ for i := 0; i < N; i++ {
+ name := lockTestNames[rng.Intn(len(lockTestNames))]
+ duration := lockTestDurations[rng.Intn(len(lockTestDurations))]
+ confirmed, unlocked := false, false
+
+ // If the name was already locked, we randomly confirm/release, refresh
+ // or unlock it. Otherwise, we create a lock.
+ token := tokens[name]
+ if token != "" {
+ switch rng.Intn(3) {
+ case 0:
+ confirmed = true
+ nConfirm++
+ release, err := m.Confirm(now, name, "", Condition{Token: token})
+ if err != nil {
+ t.Fatalf("iteration #%d: Confirm %q: %v", i, name, err)
+ }
+ if err := m.consistent(); err != nil {
+ t.Fatalf("iteration #%d: inconsistent state: %v", i, err)
+ }
+ release()
+
+ case 1:
+ nRefresh++
+ if _, err := m.Refresh(now, token, duration); err != nil {
+ t.Fatalf("iteration #%d: Refresh %q: %v", i, name, err)
+ }
+
+ case 2:
+ unlocked = true
+ nUnlock++
+ if err := m.Unlock(now, token); err != nil {
+ t.Fatalf("iteration #%d: Unlock %q: %v", i, name, err)
+ }
+ }
+
+ } else {
+ nCreate++
+ var err error
+ token, err = m.Create(now, LockDetails{
+ Root: name,
+ Duration: duration,
+ ZeroDepth: lockTestZeroDepth(name),
+ })
+ if err != nil {
+ t.Fatalf("iteration #%d: Create %q: %v", i, name, err)
+ }
+ }
+
+ if !confirmed {
+ if duration == 0 || unlocked {
+ // A zero-duration lock should expire immediately and is
+ // effectively equivalent to being unlocked.
+ tokens[name] = ""
+ } else {
+ tokens[name] = token
+ }
+ }
+
+ if err := m.consistent(); err != nil {
+ t.Fatalf("iteration #%d: inconsistent state: %v", i, err)
+ }
+ }
+
+ if nConfirm < N/10 {
+ t.Fatalf("too few Confirm calls: got %d, want >= %d", nConfirm, N/10)
+ }
+ if nCreate < N/10 {
+ t.Fatalf("too few Create calls: got %d, want >= %d", nCreate, N/10)
+ }
+ if nRefresh < N/10 {
+ t.Fatalf("too few Refresh calls: got %d, want >= %d", nRefresh, N/10)
+ }
+ if nUnlock < N/10 {
+ t.Fatalf("too few Unlock calls: got %d, want >= %d", nUnlock, N/10)
+ }
+}
+
+func (m *memLS) consistent() error {
+ m.mu.Lock()
+ defer m.mu.Unlock()
+
+ // If m.byName is non-empty, then it must contain an entry for the root "/",
+ // and its refCount should equal the number of locked nodes.
+ if len(m.byName) > 0 {
+ n := m.byName["/"]
+ if n == nil {
+ return fmt.Errorf(`non-empty m.byName does not contain the root "/"`)
+ }
+ if n.refCount != len(m.byToken) {
+ return fmt.Errorf("root node refCount=%d, differs from len(m.byToken)=%d", n.refCount, len(m.byToken))
+ }
+ }
+
+ for name, n := range m.byName {
+ // The map keys should be consistent with the node's copy of the key.
+ if n.details.Root != name {
+ return fmt.Errorf("node name %q != byName map key %q", n.details.Root, name)
+ }
+
+ // A name must be clean, and start with a "/".
+ if len(name) == 0 || name[0] != '/' {
+ return fmt.Errorf(`node name %q does not start with "/"`, name)
+ }
+ if name != path.Clean(name) {
+ return fmt.Errorf(`node name %q is not clean`, name)
+ }
+
+ // A node's refCount should be positive.
+ if n.refCount <= 0 {
+ return fmt.Errorf("non-positive refCount for node at name %q", name)
+ }
+
+ // A node's refCount should be the number of self-or-descendents that
+ // are locked (i.e. have a non-empty token).
+ var list []string
+ for name0, n0 := range m.byName {
+ // All of lockTestNames' name fragments are one byte long: '_', 'i' or 'z',
+ // so strings.HasPrefix is equivalent to self-or-descendent name match.
+ // We don't have to worry about "/foo/bar" being a false positive match
+ // for "/foo/b".
+ if strings.HasPrefix(name0, name) && n0.token != "" {
+ list = append(list, name0)
+ }
+ }
+ if n.refCount != len(list) {
+ sort.Strings(list)
+ return fmt.Errorf("node at name %q has refCount %d but locked self-or-descendents are %q (len=%d)",
+ name, n.refCount, list, len(list))
+ }
+
+ // A node n is in m.byToken if it has a non-empty token.
+ if n.token != "" {
+ if _, ok := m.byToken[n.token]; !ok {
+ return fmt.Errorf("node at name %q has token %q but not in m.byToken", name, n.token)
+ }
+ }
+
+ // A node n is in m.byExpiry if it has a non-negative byExpiryIndex.
+ if n.byExpiryIndex >= 0 {
+ if n.byExpiryIndex >= len(m.byExpiry) {
+ return fmt.Errorf("node at name %q has byExpiryIndex %d but m.byExpiry has length %d", name, n.byExpiryIndex, len(m.byExpiry))
+ }
+ if n != m.byExpiry[n.byExpiryIndex] {
+ return fmt.Errorf("node at name %q has byExpiryIndex %d but that indexes a different node", name, n.byExpiryIndex)
+ }
+ }
+ }
+
+ for token, n := range m.byToken {
+ // The map keys should be consistent with the node's copy of the key.
+ if n.token != token {
+ return fmt.Errorf("node token %q != byToken map key %q", n.token, token)
+ }
+
+ // Every node in m.byToken is in m.byName.
+ if _, ok := m.byName[n.details.Root]; !ok {
+ return fmt.Errorf("node at name %q in m.byToken but not in m.byName", n.details.Root)
+ }
+ }
+
+ for i, n := range m.byExpiry {
+ // The slice indices should be consistent with the node's copy of the index.
+ if n.byExpiryIndex != i {
+ return fmt.Errorf("node byExpiryIndex %d != byExpiry slice index %d", n.byExpiryIndex, i)
+ }
+
+ // Every node in m.byExpiry is in m.byName.
+ if _, ok := m.byName[n.details.Root]; !ok {
+ return fmt.Errorf("node at name %q in m.byExpiry but not in m.byName", n.details.Root)
+ }
+
+ // No node in m.byExpiry should be held.
+ if n.held {
+ return fmt.Errorf("node at name %q in m.byExpiry is held", n.details.Root)
+ }
+ }
+ return nil
+}
+
+func TestParseTimeout(t *testing.T) {
+ testCases := []struct {
+ s string
+ want time.Duration
+ wantErr error
+ }{{
+ "",
+ infiniteTimeout,
+ nil,
+ }, {
+ "Infinite",
+ infiniteTimeout,
+ nil,
+ }, {
+ "Infinitesimal",
+ 0,
+ errInvalidTimeout,
+ }, {
+ "infinite",
+ 0,
+ errInvalidTimeout,
+ }, {
+ "Second-0",
+ 0 * time.Second,
+ nil,
+ }, {
+ "Second-123",
+ 123 * time.Second,
+ nil,
+ }, {
+ " Second-456 ",
+ 456 * time.Second,
+ nil,
+ }, {
+ "Second-4100000000",
+ 4100000000 * time.Second,
+ nil,
+ }, {
+ "junk",
+ 0,
+ errInvalidTimeout,
+ }, {
+ "Second-",
+ 0,
+ errInvalidTimeout,
+ }, {
+ "Second--1",
+ 0,
+ errInvalidTimeout,
+ }, {
+ "Second--123",
+ 0,
+ errInvalidTimeout,
+ }, {
+ "Second-+123",
+ 0,
+ errInvalidTimeout,
+ }, {
+ "Second-0x123",
+ 0,
+ errInvalidTimeout,
+ }, {
+ "second-123",
+ 0,
+ errInvalidTimeout,
+ }, {
+ "Second-4294967295",
+ 4294967295 * time.Second,
+ nil,
+ }, {
+ // Section 10.7 says that "The timeout value for TimeType "Second"
+ // must not be greater than 2^32-1."
+ "Second-4294967296",
+ 0,
+ errInvalidTimeout,
+ }, {
+ // This test case comes from section 9.10.9 of the spec. It says,
+ //
+ // "In this request, the client has specified that it desires an
+ // infinite-length lock, if available, otherwise a timeout of 4.1
+ // billion seconds, if available."
+ //
+ // The Go WebDAV package always supports infinite length locks,
+ // and ignores the fallback after the comma.
+ "Infinite, Second-4100000000",
+ infiniteTimeout,
+ nil,
+ }}
+
+ for _, tc := range testCases {
+ got, gotErr := parseTimeout(tc.s)
+ if got != tc.want || gotErr != tc.wantErr {
+ t.Errorf("parsing %q:\ngot %v, %v\nwant %v, %v", tc.s, got, gotErr, tc.want, tc.wantErr)
+ }
+ }
+}
diff --git a/go/src/golang.org/x/net/webdav/prop.go b/go/src/golang.org/x/net/webdav/prop.go
new file mode 100644
index 0000000..9431f5e
--- /dev/null
+++ b/go/src/golang.org/x/net/webdav/prop.go
@@ -0,0 +1,384 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package webdav
+
+import (
+ "encoding/xml"
+ "fmt"
+ "io"
+ "mime"
+ "net/http"
+ "os"
+ "path/filepath"
+ "strconv"
+)
+
+// Proppatch describes a property update instruction as defined in RFC 4918.
+// See http://www.webdav.org/specs/rfc4918.html#METHOD_PROPPATCH
+type Proppatch struct {
+ // Remove specifies whether this patch removes properties. If it does not
+ // remove them, it sets them.
+ Remove bool
+ // Props contains the properties to be set or removed.
+ Props []Property
+}
+
+// Propstat describes a XML propstat element as defined in RFC 4918.
+// See http://www.webdav.org/specs/rfc4918.html#ELEMENT_propstat
+type Propstat struct {
+ // Props contains the properties for which Status applies.
+ Props []Property
+
+ // Status defines the HTTP status code of the properties in Prop.
+ // Allowed values include, but are not limited to the WebDAV status
+ // code extensions for HTTP/1.1.
+ // http://www.webdav.org/specs/rfc4918.html#status.code.extensions.to.http11
+ Status int
+
+ // XMLError contains the XML representation of the optional error element.
+ // XML content within this field must not rely on any predefined
+ // namespace declarations or prefixes. If empty, the XML error element
+ // is omitted.
+ XMLError string
+
+ // ResponseDescription contains the contents of the optional
+ // responsedescription field. If empty, the XML element is omitted.
+ ResponseDescription string
+}
+
+// makePropstats returns a slice containing those of x and y whose Props slice
+// is non-empty. If both are empty, it returns a slice containing an otherwise
+// zero Propstat whose HTTP status code is 200 OK.
+func makePropstats(x, y Propstat) []Propstat {
+ pstats := make([]Propstat, 0, 2)
+ if len(x.Props) != 0 {
+ pstats = append(pstats, x)
+ }
+ if len(y.Props) != 0 {
+ pstats = append(pstats, y)
+ }
+ if len(pstats) == 0 {
+ pstats = append(pstats, Propstat{
+ Status: http.StatusOK,
+ })
+ }
+ return pstats
+}
+
+// DeadPropsHolder holds the dead properties of a resource.
+//
+// Dead properties are those properties that are explicitly defined. In
+// comparison, live properties, such as DAV:getcontentlength, are implicitly
+// defined by the underlying resource, and cannot be explicitly overridden or
+// removed. See the Terminology section of
+// http://www.webdav.org/specs/rfc4918.html#rfc.section.3
+//
+// There is a whitelist of the names of live properties. This package handles
+// all live properties, and will only pass non-whitelisted names to the Patch
+// method of DeadPropsHolder implementations.
+type DeadPropsHolder interface {
+ // DeadProps returns a copy of the dead properties held.
+ DeadProps() (map[xml.Name]Property, error)
+
+ // Patch patches the dead properties held.
+ //
+ // Patching is atomic; either all or no patches succeed. It returns (nil,
+ // non-nil) if an internal server error occurred, otherwise the Propstats
+ // collectively contain one Property for each proposed patch Property. If
+ // all patches succeed, Patch returns a slice of length one and a Propstat
+ // element with a 200 OK HTTP status code. If none succeed, for reasons
+ // other than an internal server error, no Propstat has status 200 OK.
+ //
+ // For more details on when various HTTP status codes apply, see
+ // http://www.webdav.org/specs/rfc4918.html#PROPPATCH-status
+ Patch([]Proppatch) ([]Propstat, error)
+}
+
+// liveProps contains all supported, protected DAV: properties.
+var liveProps = map[xml.Name]struct {
+ // findFn implements the propfind function of this property. If nil,
+ // it indicates a hidden property.
+ findFn func(FileSystem, LockSystem, string, os.FileInfo) (string, error)
+ // dir is true if the property applies to directories.
+ dir bool
+}{
+ xml.Name{Space: "DAV:", Local: "resourcetype"}: {
+ findFn: findResourceType,
+ dir: true,
+ },
+ xml.Name{Space: "DAV:", Local: "displayname"}: {
+ findFn: findDisplayName,
+ dir: true,
+ },
+ xml.Name{Space: "DAV:", Local: "getcontentlength"}: {
+ findFn: findContentLength,
+ dir: true,
+ },
+ xml.Name{Space: "DAV:", Local: "getlastmodified"}: {
+ findFn: findLastModified,
+ dir: true,
+ },
+ xml.Name{Space: "DAV:", Local: "creationdate"}: {
+ findFn: nil,
+ dir: true,
+ },
+ xml.Name{Space: "DAV:", Local: "getcontentlanguage"}: {
+ findFn: nil,
+ dir: true,
+ },
+ xml.Name{Space: "DAV:", Local: "getcontenttype"}: {
+ findFn: findContentType,
+ dir: true,
+ },
+ xml.Name{Space: "DAV:", Local: "getetag"}: {
+ findFn: findETag,
+ // findETag implements ETag as the concatenated hex values of a file's
+ // modification time and size. This is not a reliable synchronization
+ // mechanism for directories, so we do not advertise getetag for DAV
+ // collections.
+ dir: false,
+ },
+
+ // TODO: The lockdiscovery property requires LockSystem to list the
+ // active locks on a resource.
+ xml.Name{Space: "DAV:", Local: "lockdiscovery"}: {},
+ xml.Name{Space: "DAV:", Local: "supportedlock"}: {
+ findFn: findSupportedLock,
+ dir: true,
+ },
+}
+
+// TODO(nigeltao) merge props and allprop?
+
+// Props returns the status of the properties named pnames for resource name.
+//
+// Each Propstat has a unique status and each property name will only be part
+// of one Propstat element.
+func props(fs FileSystem, ls LockSystem, name string, pnames []xml.Name) ([]Propstat, error) {
+ f, err := fs.OpenFile(name, os.O_RDONLY, 0)
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+ fi, err := f.Stat()
+ if err != nil {
+ return nil, err
+ }
+ isDir := fi.IsDir()
+
+ var deadProps map[xml.Name]Property
+ if dph, ok := f.(DeadPropsHolder); ok {
+ deadProps, err = dph.DeadProps()
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ pstatOK := Propstat{Status: http.StatusOK}
+ pstatNotFound := Propstat{Status: http.StatusNotFound}
+ for _, pn := range pnames {
+ // If this file has dead properties, check if they contain pn.
+ if dp, ok := deadProps[pn]; ok {
+ pstatOK.Props = append(pstatOK.Props, dp)
+ continue
+ }
+ // Otherwise, it must either be a live property or we don't know it.
+ if prop := liveProps[pn]; prop.findFn != nil && (prop.dir || !isDir) {
+ innerXML, err := prop.findFn(fs, ls, name, fi)
+ if err != nil {
+ return nil, err
+ }
+ pstatOK.Props = append(pstatOK.Props, Property{
+ XMLName: pn,
+ InnerXML: []byte(innerXML),
+ })
+ } else {
+ pstatNotFound.Props = append(pstatNotFound.Props, Property{
+ XMLName: pn,
+ })
+ }
+ }
+ return makePropstats(pstatOK, pstatNotFound), nil
+}
+
+// Propnames returns the property names defined for resource name.
+func propnames(fs FileSystem, ls LockSystem, name string) ([]xml.Name, error) {
+ f, err := fs.OpenFile(name, os.O_RDONLY, 0)
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+ fi, err := f.Stat()
+ if err != nil {
+ return nil, err
+ }
+ isDir := fi.IsDir()
+
+ var deadProps map[xml.Name]Property
+ if dph, ok := f.(DeadPropsHolder); ok {
+ deadProps, err = dph.DeadProps()
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ pnames := make([]xml.Name, 0, len(liveProps)+len(deadProps))
+ for pn, prop := range liveProps {
+ if prop.findFn != nil && (prop.dir || !isDir) {
+ pnames = append(pnames, pn)
+ }
+ }
+ for pn := range deadProps {
+ pnames = append(pnames, pn)
+ }
+ return pnames, nil
+}
+
+// Allprop returns the properties defined for resource name and the properties
+// named in include.
+//
+// Note that RFC 4918 defines 'allprop' to return the DAV: properties defined
+// within the RFC plus dead properties. Other live properties should only be
+// returned if they are named in 'include'.
+//
+// See http://www.webdav.org/specs/rfc4918.html#METHOD_PROPFIND
+func allprop(fs FileSystem, ls LockSystem, name string, include []xml.Name) ([]Propstat, error) {
+ pnames, err := propnames(fs, ls, name)
+ if err != nil {
+ return nil, err
+ }
+ // Add names from include if they are not already covered in pnames.
+ nameset := make(map[xml.Name]bool)
+ for _, pn := range pnames {
+ nameset[pn] = true
+ }
+ for _, pn := range include {
+ if !nameset[pn] {
+ pnames = append(pnames, pn)
+ }
+ }
+ return props(fs, ls, name, pnames)
+}
+
+// Patch patches the properties of resource name. The return values are
+// constrained in the same manner as DeadPropsHolder.Patch.
+func patch(fs FileSystem, ls LockSystem, name string, patches []Proppatch) ([]Propstat, error) {
+ conflict := false
+loop:
+ for _, patch := range patches {
+ for _, p := range patch.Props {
+ if _, ok := liveProps[p.XMLName]; ok {
+ conflict = true
+ break loop
+ }
+ }
+ }
+ if conflict {
+ pstatForbidden := Propstat{
+ Status: http.StatusForbidden,
+ XMLError: `<D:cannot-modify-protected-property xmlns:D="DAV:"/>`,
+ }
+ pstatFailedDep := Propstat{
+ Status: StatusFailedDependency,
+ }
+ for _, patch := range patches {
+ for _, p := range patch.Props {
+ if _, ok := liveProps[p.XMLName]; ok {
+ pstatForbidden.Props = append(pstatForbidden.Props, Property{XMLName: p.XMLName})
+ } else {
+ pstatFailedDep.Props = append(pstatFailedDep.Props, Property{XMLName: p.XMLName})
+ }
+ }
+ }
+ return makePropstats(pstatForbidden, pstatFailedDep), nil
+ }
+
+ f, err := fs.OpenFile(name, os.O_RDWR, 0)
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+ if dph, ok := f.(DeadPropsHolder); ok {
+ ret, err := dph.Patch(patches)
+ if err != nil {
+ return nil, err
+ }
+ // http://www.webdav.org/specs/rfc4918.html#ELEMENT_propstat says that
+ // "The contents of the prop XML element must only list the names of
+ // properties to which the result in the status element applies."
+ for _, pstat := range ret {
+ for i, p := range pstat.Props {
+ pstat.Props[i] = Property{XMLName: p.XMLName}
+ }
+ }
+ return ret, nil
+ }
+ // The file doesn't implement the optional DeadPropsHolder interface, so
+ // all patches are forbidden.
+ pstat := Propstat{Status: http.StatusForbidden}
+ for _, patch := range patches {
+ for _, p := range patch.Props {
+ pstat.Props = append(pstat.Props, Property{XMLName: p.XMLName})
+ }
+ }
+ return []Propstat{pstat}, nil
+}
+
+func findResourceType(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+ if fi.IsDir() {
+ return `<D:collection xmlns:D="DAV:"/>`, nil
+ }
+ return "", nil
+}
+
+func findDisplayName(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+ if slashClean(name) == "/" {
+ // Hide the real name of a possibly prefixed root directory.
+ return "", nil
+ }
+ return fi.Name(), nil
+}
+
+func findContentLength(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+ return strconv.FormatInt(fi.Size(), 10), nil
+}
+
+func findLastModified(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+ return fi.ModTime().Format(http.TimeFormat), nil
+}
+
+func findContentType(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+ f, err := fs.OpenFile(name, os.O_RDONLY, 0)
+ if err != nil {
+ return "", err
+ }
+ defer f.Close()
+ // This implementation is based on serveContent's code in the standard net/http package.
+ ctype := mime.TypeByExtension(filepath.Ext(name))
+ if ctype == "" {
+ // Read a chunk to decide between utf-8 text and binary.
+ var buf [512]byte
+ n, _ := io.ReadFull(f, buf[:])
+ ctype = http.DetectContentType(buf[:n])
+ // Rewind file.
+ _, err = f.Seek(0, os.SEEK_SET)
+ }
+ return ctype, err
+}
+
+func findETag(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+ // The Apache http 2.4 web server by default concatenates the
+ // modification time and size of a file. We replicate the heuristic
+ // with nanosecond granularity.
+ return fmt.Sprintf(`"%x%x"`, fi.ModTime().UnixNano(), fi.Size()), nil
+}
+
+func findSupportedLock(fs FileSystem, ls LockSystem, name string, fi os.FileInfo) (string, error) {
+ return `` +
+ `<D:lockentry xmlns:D="DAV:">` +
+ `<D:lockscope><D:exclusive/></D:lockscope>` +
+ `<D:locktype><D:write/></D:locktype>` +
+ `</D:lockentry>`, nil
+}
diff --git a/go/src/golang.org/x/net/webdav/prop_test.go b/go/src/golang.org/x/net/webdav/prop_test.go
new file mode 100644
index 0000000..8bf4aee
--- /dev/null
+++ b/go/src/golang.org/x/net/webdav/prop_test.go
@@ -0,0 +1,618 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package webdav
+
+import (
+ "encoding/xml"
+ "fmt"
+ "net/http"
+ "os"
+ "reflect"
+ "sort"
+ "testing"
+)
+
+func TestMemPS(t *testing.T) {
+ // calcProps calculates the getlastmodified and getetag DAV: property
+ // values in pstats for resource name in file-system fs.
+ calcProps := func(name string, fs FileSystem, ls LockSystem, pstats []Propstat) error {
+ fi, err := fs.Stat(name)
+ if err != nil {
+ return err
+ }
+ for _, pst := range pstats {
+ for i, p := range pst.Props {
+ switch p.XMLName {
+ case xml.Name{Space: "DAV:", Local: "getlastmodified"}:
+ p.InnerXML = []byte(fi.ModTime().Format(http.TimeFormat))
+ pst.Props[i] = p
+ case xml.Name{Space: "DAV:", Local: "getetag"}:
+ if fi.IsDir() {
+ continue
+ }
+ etag, err := findETag(fs, ls, name, fi)
+ if err != nil {
+ return err
+ }
+ p.InnerXML = []byte(etag)
+ pst.Props[i] = p
+ }
+ }
+ }
+ return nil
+ }
+
+ const (
+ lockEntry = `` +
+ `<D:lockentry xmlns:D="DAV:">` +
+ `<D:lockscope><D:exclusive/></D:lockscope>` +
+ `<D:locktype><D:write/></D:locktype>` +
+ `</D:lockentry>`
+ statForbiddenError = `<D:cannot-modify-protected-property xmlns:D="DAV:"/>`
+ )
+
+ type propOp struct {
+ op string
+ name string
+ pnames []xml.Name
+ patches []Proppatch
+ wantPnames []xml.Name
+ wantPropstats []Propstat
+ }
+
+ testCases := []struct {
+ desc string
+ noDeadProps bool
+ buildfs []string
+ propOp []propOp
+ }{{
+ desc: "propname",
+ buildfs: []string{"mkdir /dir", "touch /file"},
+ propOp: []propOp{{
+ op: "propname",
+ name: "/dir",
+ wantPnames: []xml.Name{
+ xml.Name{Space: "DAV:", Local: "resourcetype"},
+ xml.Name{Space: "DAV:", Local: "displayname"},
+ xml.Name{Space: "DAV:", Local: "getcontentlength"},
+ xml.Name{Space: "DAV:", Local: "getlastmodified"},
+ xml.Name{Space: "DAV:", Local: "getcontenttype"},
+ xml.Name{Space: "DAV:", Local: "supportedlock"},
+ },
+ }, {
+ op: "propname",
+ name: "/file",
+ wantPnames: []xml.Name{
+ xml.Name{Space: "DAV:", Local: "resourcetype"},
+ xml.Name{Space: "DAV:", Local: "displayname"},
+ xml.Name{Space: "DAV:", Local: "getcontentlength"},
+ xml.Name{Space: "DAV:", Local: "getlastmodified"},
+ xml.Name{Space: "DAV:", Local: "getcontenttype"},
+ xml.Name{Space: "DAV:", Local: "getetag"},
+ xml.Name{Space: "DAV:", Local: "supportedlock"},
+ },
+ }},
+ }, {
+ desc: "allprop dir and file",
+ buildfs: []string{"mkdir /dir", "write /file foobarbaz"},
+ propOp: []propOp{{
+ op: "allprop",
+ name: "/dir",
+ wantPropstats: []Propstat{{
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "DAV:", Local: "resourcetype"},
+ InnerXML: []byte(`<D:collection xmlns:D="DAV:"/>`),
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "displayname"},
+ InnerXML: []byte("dir"),
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "getcontentlength"},
+ InnerXML: []byte("0"),
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "getlastmodified"},
+ InnerXML: nil, // Calculated during test.
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "getcontenttype"},
+ InnerXML: []byte("text/plain; charset=utf-8"),
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "supportedlock"},
+ InnerXML: []byte(lockEntry),
+ }},
+ }},
+ }, {
+ op: "allprop",
+ name: "/file",
+ wantPropstats: []Propstat{{
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "DAV:", Local: "resourcetype"},
+ InnerXML: []byte(""),
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "displayname"},
+ InnerXML: []byte("file"),
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "getcontentlength"},
+ InnerXML: []byte("9"),
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "getlastmodified"},
+ InnerXML: nil, // Calculated during test.
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "getcontenttype"},
+ InnerXML: []byte("text/plain; charset=utf-8"),
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "getetag"},
+ InnerXML: nil, // Calculated during test.
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "supportedlock"},
+ InnerXML: []byte(lockEntry),
+ }},
+ }},
+ }, {
+ op: "allprop",
+ name: "/file",
+ pnames: []xml.Name{
+ {"DAV:", "resourcetype"},
+ {"foo", "bar"},
+ },
+ wantPropstats: []Propstat{{
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "DAV:", Local: "resourcetype"},
+ InnerXML: []byte(""),
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "displayname"},
+ InnerXML: []byte("file"),
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "getcontentlength"},
+ InnerXML: []byte("9"),
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "getlastmodified"},
+ InnerXML: nil, // Calculated during test.
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "getcontenttype"},
+ InnerXML: []byte("text/plain; charset=utf-8"),
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "getetag"},
+ InnerXML: nil, // Calculated during test.
+ }, {
+ XMLName: xml.Name{Space: "DAV:", Local: "supportedlock"},
+ InnerXML: []byte(lockEntry),
+ }}}, {
+ Status: http.StatusNotFound,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ }}},
+ },
+ }},
+ }, {
+ desc: "propfind DAV:resourcetype",
+ buildfs: []string{"mkdir /dir", "touch /file"},
+ propOp: []propOp{{
+ op: "propfind",
+ name: "/dir",
+ pnames: []xml.Name{{"DAV:", "resourcetype"}},
+ wantPropstats: []Propstat{{
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "DAV:", Local: "resourcetype"},
+ InnerXML: []byte(`<D:collection xmlns:D="DAV:"/>`),
+ }},
+ }},
+ }, {
+ op: "propfind",
+ name: "/file",
+ pnames: []xml.Name{{"DAV:", "resourcetype"}},
+ wantPropstats: []Propstat{{
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "DAV:", Local: "resourcetype"},
+ InnerXML: []byte(""),
+ }},
+ }},
+ }},
+ }, {
+ desc: "propfind unsupported DAV properties",
+ buildfs: []string{"mkdir /dir"},
+ propOp: []propOp{{
+ op: "propfind",
+ name: "/dir",
+ pnames: []xml.Name{{"DAV:", "getcontentlanguage"}},
+ wantPropstats: []Propstat{{
+ Status: http.StatusNotFound,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "DAV:", Local: "getcontentlanguage"},
+ }},
+ }},
+ }, {
+ op: "propfind",
+ name: "/dir",
+ pnames: []xml.Name{{"DAV:", "creationdate"}},
+ wantPropstats: []Propstat{{
+ Status: http.StatusNotFound,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "DAV:", Local: "creationdate"},
+ }},
+ }},
+ }},
+ }, {
+ desc: "propfind getetag for files but not for directories",
+ buildfs: []string{"mkdir /dir", "touch /file"},
+ propOp: []propOp{{
+ op: "propfind",
+ name: "/dir",
+ pnames: []xml.Name{{"DAV:", "getetag"}},
+ wantPropstats: []Propstat{{
+ Status: http.StatusNotFound,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "DAV:", Local: "getetag"},
+ }},
+ }},
+ }, {
+ op: "propfind",
+ name: "/file",
+ pnames: []xml.Name{{"DAV:", "getetag"}},
+ wantPropstats: []Propstat{{
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "DAV:", Local: "getetag"},
+ InnerXML: nil, // Calculated during test.
+ }},
+ }},
+ }},
+ }, {
+ desc: "proppatch property on no-dead-properties file system",
+ buildfs: []string{"mkdir /dir"},
+ noDeadProps: true,
+ propOp: []propOp{{
+ op: "proppatch",
+ name: "/dir",
+ patches: []Proppatch{{
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ }},
+ }},
+ wantPropstats: []Propstat{{
+ Status: http.StatusForbidden,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ }},
+ }},
+ }, {
+ op: "proppatch",
+ name: "/dir",
+ patches: []Proppatch{{
+ Props: []Property{{
+ XMLName: xml.Name{Space: "DAV:", Local: "getetag"},
+ }},
+ }},
+ wantPropstats: []Propstat{{
+ Status: http.StatusForbidden,
+ XMLError: statForbiddenError,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "DAV:", Local: "getetag"},
+ }},
+ }},
+ }},
+ }, {
+ desc: "proppatch dead property",
+ buildfs: []string{"mkdir /dir"},
+ propOp: []propOp{{
+ op: "proppatch",
+ name: "/dir",
+ patches: []Proppatch{{
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ InnerXML: []byte("baz"),
+ }},
+ }},
+ wantPropstats: []Propstat{{
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ }},
+ }},
+ }, {
+ op: "propfind",
+ name: "/dir",
+ pnames: []xml.Name{{Space: "foo", Local: "bar"}},
+ wantPropstats: []Propstat{{
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ InnerXML: []byte("baz"),
+ }},
+ }},
+ }},
+ }, {
+ desc: "proppatch dead property with failed dependency",
+ buildfs: []string{"mkdir /dir"},
+ propOp: []propOp{{
+ op: "proppatch",
+ name: "/dir",
+ patches: []Proppatch{{
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ InnerXML: []byte("baz"),
+ }},
+ }, {
+ Props: []Property{{
+ XMLName: xml.Name{Space: "DAV:", Local: "displayname"},
+ InnerXML: []byte("xxx"),
+ }},
+ }},
+ wantPropstats: []Propstat{{
+ Status: http.StatusForbidden,
+ XMLError: statForbiddenError,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "DAV:", Local: "displayname"},
+ }},
+ }, {
+ Status: StatusFailedDependency,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ }},
+ }},
+ }, {
+ op: "propfind",
+ name: "/dir",
+ pnames: []xml.Name{{Space: "foo", Local: "bar"}},
+ wantPropstats: []Propstat{{
+ Status: http.StatusNotFound,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ }},
+ }},
+ }},
+ }, {
+ desc: "proppatch remove dead property",
+ buildfs: []string{"mkdir /dir"},
+ propOp: []propOp{{
+ op: "proppatch",
+ name: "/dir",
+ patches: []Proppatch{{
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ InnerXML: []byte("baz"),
+ }, {
+ XMLName: xml.Name{Space: "spam", Local: "ham"},
+ InnerXML: []byte("eggs"),
+ }},
+ }},
+ wantPropstats: []Propstat{{
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ }, {
+ XMLName: xml.Name{Space: "spam", Local: "ham"},
+ }},
+ }},
+ }, {
+ op: "propfind",
+ name: "/dir",
+ pnames: []xml.Name{
+ {Space: "foo", Local: "bar"},
+ {Space: "spam", Local: "ham"},
+ },
+ wantPropstats: []Propstat{{
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ InnerXML: []byte("baz"),
+ }, {
+ XMLName: xml.Name{Space: "spam", Local: "ham"},
+ InnerXML: []byte("eggs"),
+ }},
+ }},
+ }, {
+ op: "proppatch",
+ name: "/dir",
+ patches: []Proppatch{{
+ Remove: true,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ }},
+ }},
+ wantPropstats: []Propstat{{
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ }},
+ }},
+ }, {
+ op: "propfind",
+ name: "/dir",
+ pnames: []xml.Name{
+ {Space: "foo", Local: "bar"},
+ {Space: "spam", Local: "ham"},
+ },
+ wantPropstats: []Propstat{{
+ Status: http.StatusNotFound,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ }},
+ }, {
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "spam", Local: "ham"},
+ InnerXML: []byte("eggs"),
+ }},
+ }},
+ }},
+ }, {
+ desc: "propname with dead property",
+ buildfs: []string{"touch /file"},
+ propOp: []propOp{{
+ op: "proppatch",
+ name: "/file",
+ patches: []Proppatch{{
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ InnerXML: []byte("baz"),
+ }},
+ }},
+ wantPropstats: []Propstat{{
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ }},
+ }},
+ }, {
+ op: "propname",
+ name: "/file",
+ wantPnames: []xml.Name{
+ xml.Name{Space: "DAV:", Local: "resourcetype"},
+ xml.Name{Space: "DAV:", Local: "displayname"},
+ xml.Name{Space: "DAV:", Local: "getcontentlength"},
+ xml.Name{Space: "DAV:", Local: "getlastmodified"},
+ xml.Name{Space: "DAV:", Local: "getcontenttype"},
+ xml.Name{Space: "DAV:", Local: "getetag"},
+ xml.Name{Space: "DAV:", Local: "supportedlock"},
+ xml.Name{Space: "foo", Local: "bar"},
+ },
+ }},
+ }, {
+ desc: "proppatch remove unknown dead property",
+ buildfs: []string{"mkdir /dir"},
+ propOp: []propOp{{
+ op: "proppatch",
+ name: "/dir",
+ patches: []Proppatch{{
+ Remove: true,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ }},
+ }},
+ wantPropstats: []Propstat{{
+ Status: http.StatusOK,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo", Local: "bar"},
+ }},
+ }},
+ }},
+ }, {
+ desc: "bad: propfind unknown property",
+ buildfs: []string{"mkdir /dir"},
+ propOp: []propOp{{
+ op: "propfind",
+ name: "/dir",
+ pnames: []xml.Name{{"foo:", "bar"}},
+ wantPropstats: []Propstat{{
+ Status: http.StatusNotFound,
+ Props: []Property{{
+ XMLName: xml.Name{Space: "foo:", Local: "bar"},
+ }},
+ }},
+ }},
+ }}
+
+ for _, tc := range testCases {
+ fs, err := buildTestFS(tc.buildfs)
+ if err != nil {
+ t.Fatalf("%s: cannot create test filesystem: %v", tc.desc, err)
+ }
+ if tc.noDeadProps {
+ fs = noDeadPropsFS{fs}
+ }
+ ls := NewMemLS()
+ for _, op := range tc.propOp {
+ desc := fmt.Sprintf("%s: %s %s", tc.desc, op.op, op.name)
+ if err = calcProps(op.name, fs, ls, op.wantPropstats); err != nil {
+ t.Fatalf("%s: calcProps: %v", desc, err)
+ }
+
+ // Call property system.
+ var propstats []Propstat
+ switch op.op {
+ case "propname":
+ pnames, err := propnames(fs, ls, op.name)
+ if err != nil {
+ t.Errorf("%s: got error %v, want nil", desc, err)
+ continue
+ }
+ sort.Sort(byXMLName(pnames))
+ sort.Sort(byXMLName(op.wantPnames))
+ if !reflect.DeepEqual(pnames, op.wantPnames) {
+ t.Errorf("%s: pnames\ngot %q\nwant %q", desc, pnames, op.wantPnames)
+ }
+ continue
+ case "allprop":
+ propstats, err = allprop(fs, ls, op.name, op.pnames)
+ case "propfind":
+ propstats, err = props(fs, ls, op.name, op.pnames)
+ case "proppatch":
+ propstats, err = patch(fs, ls, op.name, op.patches)
+ default:
+ t.Fatalf("%s: %s not implemented", desc, op.op)
+ }
+ if err != nil {
+ t.Errorf("%s: got error %v, want nil", desc, err)
+ continue
+ }
+ // Compare return values from allprop, propfind or proppatch.
+ for _, pst := range propstats {
+ sort.Sort(byPropname(pst.Props))
+ }
+ for _, pst := range op.wantPropstats {
+ sort.Sort(byPropname(pst.Props))
+ }
+ sort.Sort(byStatus(propstats))
+ sort.Sort(byStatus(op.wantPropstats))
+ if !reflect.DeepEqual(propstats, op.wantPropstats) {
+ t.Errorf("%s: propstat\ngot %q\nwant %q", desc, propstats, op.wantPropstats)
+ }
+ }
+ }
+}
+
+func cmpXMLName(a, b xml.Name) bool {
+ if a.Space != b.Space {
+ return a.Space < b.Space
+ }
+ return a.Local < b.Local
+}
+
+type byXMLName []xml.Name
+
+func (b byXMLName) Len() int { return len(b) }
+func (b byXMLName) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
+func (b byXMLName) Less(i, j int) bool { return cmpXMLName(b[i], b[j]) }
+
+type byPropname []Property
+
+func (b byPropname) Len() int { return len(b) }
+func (b byPropname) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
+func (b byPropname) Less(i, j int) bool { return cmpXMLName(b[i].XMLName, b[j].XMLName) }
+
+type byStatus []Propstat
+
+func (b byStatus) Len() int { return len(b) }
+func (b byStatus) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
+func (b byStatus) Less(i, j int) bool { return b[i].Status < b[j].Status }
+
+type noDeadPropsFS struct {
+ FileSystem
+}
+
+func (fs noDeadPropsFS) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
+ f, err := fs.FileSystem.OpenFile(name, flag, perm)
+ if err != nil {
+ return nil, err
+ }
+ return noDeadPropsFile{f}, nil
+}
+
+// noDeadPropsFile wraps a File but strips any optional DeadPropsHolder methods
+// provided by the underlying File implementation.
+type noDeadPropsFile struct {
+ f File
+}
+
+func (f noDeadPropsFile) Close() error { return f.f.Close() }
+func (f noDeadPropsFile) Read(p []byte) (int, error) { return f.f.Read(p) }
+func (f noDeadPropsFile) Readdir(count int) ([]os.FileInfo, error) { return f.f.Readdir(count) }
+func (f noDeadPropsFile) Seek(off int64, whence int) (int64, error) { return f.f.Seek(off, whence) }
+func (f noDeadPropsFile) Stat() (os.FileInfo, error) { return f.f.Stat() }
+func (f noDeadPropsFile) Write(p []byte) (int, error) { return f.f.Write(p) }
diff --git a/go/src/golang.org/x/net/webdav/webdav.go b/go/src/golang.org/x/net/webdav/webdav.go
index 8a8f6dc..9bc4543 100644
--- a/go/src/golang.org/x/net/webdav/webdav.go
+++ b/go/src/golang.org/x/net/webdav/webdav.go
@@ -5,40 +5,58 @@
// Package webdav etc etc TODO.
package webdav // import "golang.org/x/net/webdav"
-// TODO: ETag, properties.
-
import (
"errors"
+ "fmt"
"io"
+ "log"
"net/http"
+ "net/url"
"os"
+ "runtime"
+ "strings"
"time"
)
-// TODO: define the PropSystem interface.
-type PropSystem interface{}
+// Package webdav's XML output requires the standard library's encoding/xml
+// package version 1.5 or greater. Otherwise, it will produce malformed XML.
+//
+// As of May 2015, the Go stable release is version 1.4, so we print a message
+// to let users know that this golang.org/x/etc package won't work yet.
+//
+// This package also won't work with Go 1.3 and earlier, but making this
+// runtime version check catch all the earlier versions too, and not just
+// "1.4.x", isn't worth the complexity.
+//
+// TODO: delete this check at some point after Go 1.5 is released.
+var go1Dot4 = strings.HasPrefix(runtime.Version(), "go1.4.")
+
+func init() {
+ if go1Dot4 {
+ log.Println("package webdav requires Go version 1.5 or greater")
+ }
+}
type Handler struct {
// FileSystem is the virtual file system.
FileSystem FileSystem
// LockSystem is the lock management system.
LockSystem LockSystem
- // PropSystem is an optional property management system. If non-nil, TODO.
- PropSystem PropSystem
// Logger is an optional error logger. If non-nil, it will be called
- // whenever handling a http.Request results in an error.
+ // for all HTTP requests.
Logger func(*http.Request, error)
}
func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
- status, err := http.StatusBadRequest, error(nil)
+ status, err := http.StatusBadRequest, errUnsupportedMethod
if h.FileSystem == nil {
status, err = http.StatusInternalServerError, errNoFileSystem
} else if h.LockSystem == nil {
status, err = http.StatusInternalServerError, errNoLockSystem
} else {
- // TODO: COPY, MOVE, PROPFIND, PROPPATCH methods. Also, OPTIONS??
switch r.Method {
+ case "OPTIONS":
+ status, err = h.handleOptions(w, r)
case "GET", "HEAD", "POST":
status, err = h.handleGetHeadPost(w, r)
case "DELETE":
@@ -47,10 +65,16 @@
status, err = h.handlePut(w, r)
case "MKCOL":
status, err = h.handleMkcol(w, r)
+ case "COPY", "MOVE":
+ status, err = h.handleCopyMove(w, r)
case "LOCK":
status, err = h.handleLock(w, r)
case "UNLOCK":
status, err = h.handleUnlock(w, r)
+ case "PROPFIND":
+ status, err = h.handlePropfind(w, r)
+ case "PROPPATCH":
+ status, err = h.handleProppatch(w, r)
}
}
@@ -60,32 +84,111 @@
w.Write([]byte(StatusText(status)))
}
}
- if h.Logger != nil && err != nil {
+ if h.Logger != nil {
h.Logger(r, err)
}
}
-func (h *Handler) confirmLocks(r *http.Request) (closer io.Closer, status int, err error) {
- ih, ok := parseIfHeader(r.Header.Get("If"))
+func (h *Handler) lock(now time.Time, root string) (token string, status int, err error) {
+ token, err = h.LockSystem.Create(now, LockDetails{
+ Root: root,
+ Duration: infiniteTimeout,
+ ZeroDepth: true,
+ })
+ if err != nil {
+ if err == ErrLocked {
+ return "", StatusLocked, err
+ }
+ return "", http.StatusInternalServerError, err
+ }
+ return token, 0, nil
+}
+
+func (h *Handler) confirmLocks(r *http.Request, src, dst string) (release func(), status int, err error) {
+ hdr := r.Header.Get("If")
+ if hdr == "" {
+ // An empty If header means that the client hasn't previously created locks.
+ // Even if this client doesn't care about locks, we still need to check that
+ // the resources aren't locked by another client, so we create temporary
+ // locks that would conflict with another client's locks. These temporary
+ // locks are unlocked at the end of the HTTP request.
+ now, srcToken, dstToken := time.Now(), "", ""
+ if src != "" {
+ srcToken, status, err = h.lock(now, src)
+ if err != nil {
+ return nil, status, err
+ }
+ }
+ if dst != "" {
+ dstToken, status, err = h.lock(now, dst)
+ if err != nil {
+ if srcToken != "" {
+ h.LockSystem.Unlock(now, srcToken)
+ }
+ return nil, status, err
+ }
+ }
+
+ return func() {
+ if dstToken != "" {
+ h.LockSystem.Unlock(now, dstToken)
+ }
+ if srcToken != "" {
+ h.LockSystem.Unlock(now, srcToken)
+ }
+ }, 0, nil
+ }
+
+ ih, ok := parseIfHeader(hdr)
if !ok {
return nil, http.StatusBadRequest, errInvalidIfHeader
}
// ih is a disjunction (OR) of ifLists, so any ifList will do.
for _, l := range ih.lists {
- path := l.resourceTag
- if path == "" {
- path = r.URL.Path
+ lsrc := l.resourceTag
+ if lsrc == "" {
+ lsrc = src
+ } else {
+ u, err := url.Parse(lsrc)
+ if err != nil {
+ continue
+ }
+ if u.Host != r.Host {
+ continue
+ }
+ lsrc = u.Path
}
- closer, err = h.LockSystem.Confirm(path, l.conditions...)
+ release, err = h.LockSystem.Confirm(time.Now(), lsrc, dst, l.conditions...)
if err == ErrConfirmationFailed {
continue
}
if err != nil {
return nil, http.StatusInternalServerError, err
}
- return closer, 0, nil
+ return release, 0, nil
}
- return nil, http.StatusPreconditionFailed, errLocked
+ // Section 10.4.1 says that "If this header is evaluated and all state lists
+ // fail, then the request must fail with a 412 (Precondition Failed) status."
+ // We follow the spec even though the cond_put_corrupt_token test case from
+ // the litmus test warns on seeing a 412 instead of a 423 (Locked).
+ return nil, http.StatusPreconditionFailed, ErrLocked
+}
+
+func (h *Handler) handleOptions(w http.ResponseWriter, r *http.Request) (status int, err error) {
+ allow := "OPTIONS, LOCK, PUT, MKCOL"
+ if fi, err := h.FileSystem.Stat(r.URL.Path); err == nil {
+ if fi.IsDir() {
+ allow = "OPTIONS, LOCK, GET, HEAD, POST, DELETE, PROPPATCH, COPY, MOVE, UNLOCK, PROPFIND"
+ } else {
+ allow = "OPTIONS, LOCK, GET, HEAD, POST, DELETE, PROPPATCH, COPY, MOVE, UNLOCK, PROPFIND, PUT"
+ }
+ }
+ w.Header().Set("Allow", allow)
+ // http://www.webdav.org/specs/rfc4918.html#dav.compliance.classes
+ w.Header().Set("DAV", "1, 2")
+ // http://msdn.microsoft.com/en-au/library/cc250217.aspx
+ w.Header().Set("MS-Author-Via", "DAV")
+ return 0, nil
}
func (h *Handler) handleGetHeadPost(w http.ResponseWriter, r *http.Request) (status int, err error) {
@@ -99,49 +202,86 @@
if err != nil {
return http.StatusNotFound, err
}
+ if !fi.IsDir() {
+ etag, err := findETag(h.FileSystem, h.LockSystem, r.URL.Path, fi)
+ if err != nil {
+ return http.StatusInternalServerError, err
+ }
+ w.Header().Set("ETag", etag)
+ }
+ // Let ServeContent determine the Content-Type header.
http.ServeContent(w, r, r.URL.Path, fi.ModTime(), f)
return 0, nil
}
func (h *Handler) handleDelete(w http.ResponseWriter, r *http.Request) (status int, err error) {
- closer, status, err := h.confirmLocks(r)
+ release, status, err := h.confirmLocks(r, r.URL.Path, "")
if err != nil {
return status, err
}
- defer closer.Close()
+ defer release()
+ // TODO: return MultiStatus where appropriate.
+
+ // "godoc os RemoveAll" says that "If the path does not exist, RemoveAll
+ // returns nil (no error)." WebDAV semantics are that it should return a
+ // "404 Not Found". We therefore have to Stat before we RemoveAll.
+ if _, err := h.FileSystem.Stat(r.URL.Path); err != nil {
+ if os.IsNotExist(err) {
+ return http.StatusNotFound, err
+ }
+ return http.StatusMethodNotAllowed, err
+ }
if err := h.FileSystem.RemoveAll(r.URL.Path); err != nil {
- // TODO: MultiStatus.
return http.StatusMethodNotAllowed, err
}
return http.StatusNoContent, nil
}
func (h *Handler) handlePut(w http.ResponseWriter, r *http.Request) (status int, err error) {
- closer, status, err := h.confirmLocks(r)
+ release, status, err := h.confirmLocks(r, r.URL.Path, "")
if err != nil {
return status, err
}
- defer closer.Close()
+ defer release()
+ // TODO(rost): Support the If-Match, If-None-Match headers? See bradfitz'
+ // comments in http.checkEtag.
f, err := h.FileSystem.OpenFile(r.URL.Path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
return http.StatusNotFound, err
}
- defer f.Close()
- if _, err := io.Copy(f, r.Body); err != nil {
- return http.StatusMethodNotAllowed, err
+ _, copyErr := io.Copy(f, r.Body)
+ fi, statErr := f.Stat()
+ closeErr := f.Close()
+ // TODO(rost): Returning 405 Method Not Allowed might not be appropriate.
+ if copyErr != nil {
+ return http.StatusMethodNotAllowed, copyErr
}
+ if statErr != nil {
+ return http.StatusMethodNotAllowed, statErr
+ }
+ if closeErr != nil {
+ return http.StatusMethodNotAllowed, closeErr
+ }
+ etag, err := findETag(h.FileSystem, h.LockSystem, r.URL.Path, fi)
+ if err != nil {
+ return http.StatusInternalServerError, err
+ }
+ w.Header().Set("ETag", etag)
return http.StatusCreated, nil
}
func (h *Handler) handleMkcol(w http.ResponseWriter, r *http.Request) (status int, err error) {
- closer, status, err := h.confirmLocks(r)
+ release, status, err := h.confirmLocks(r, r.URL.Path, "")
if err != nil {
return status, err
}
- defer closer.Close()
+ defer release()
+ if r.ContentLength > 0 {
+ return http.StatusUnsupportedMediaType, nil
+ }
if err := h.FileSystem.Mkdir(r.URL.Path, 0777); err != nil {
if os.IsNotExist(err) {
return http.StatusConflict, err
@@ -151,6 +291,70 @@
return http.StatusCreated, nil
}
+func (h *Handler) handleCopyMove(w http.ResponseWriter, r *http.Request) (status int, err error) {
+ hdr := r.Header.Get("Destination")
+ if hdr == "" {
+ return http.StatusBadRequest, errInvalidDestination
+ }
+ u, err := url.Parse(hdr)
+ if err != nil {
+ return http.StatusBadRequest, errInvalidDestination
+ }
+ if u.Host != r.Host {
+ return http.StatusBadGateway, errInvalidDestination
+ }
+
+ dst, src := u.Path, r.URL.Path
+ if dst == "" {
+ return http.StatusBadGateway, errInvalidDestination
+ }
+ if dst == src {
+ return http.StatusForbidden, errDestinationEqualsSource
+ }
+
+ if r.Method == "COPY" {
+ // Section 7.5.1 says that a COPY only needs to lock the destination,
+ // not both destination and source. Strictly speaking, this is racy,
+ // even though a COPY doesn't modify the source, if a concurrent
+ // operation modifies the source. However, the litmus test explicitly
+ // checks that COPYing a locked-by-another source is OK.
+ release, status, err := h.confirmLocks(r, "", dst)
+ if err != nil {
+ return status, err
+ }
+ defer release()
+
+ // Section 9.8.3 says that "The COPY method on a collection without a Depth
+ // header must act as if a Depth header with value "infinity" was included".
+ depth := infiniteDepth
+ if hdr := r.Header.Get("Depth"); hdr != "" {
+ depth = parseDepth(hdr)
+ if depth != 0 && depth != infiniteDepth {
+ // Section 9.8.3 says that "A client may submit a Depth header on a
+ // COPY on a collection with a value of "0" or "infinity"."
+ return http.StatusBadRequest, errInvalidDepth
+ }
+ }
+ return copyFiles(h.FileSystem, src, dst, r.Header.Get("Overwrite") != "F", depth, 0)
+ }
+
+ release, status, err := h.confirmLocks(r, src, dst)
+ if err != nil {
+ return status, err
+ }
+ defer release()
+
+ // Section 9.9.2 says that "The MOVE method on a collection must act as if
+ // a "Depth: infinity" header was used on it. A client must not submit a
+ // Depth header on a MOVE on a collection with any value but "infinity"."
+ if hdr := r.Header.Get("Depth"); hdr != "" {
+ if parseDepth(hdr) != infiniteDepth {
+ return http.StatusBadRequest, errInvalidDepth
+ }
+ }
+ return moveFiles(h.FileSystem, src, dst, r.Header.Get("Overwrite") == "T")
+}
+
func (h *Handler) handleLock(w http.ResponseWriter, r *http.Request) (retStatus int, retErr error) {
duration, err := parseTimeout(r.Header.Get("Timeout"))
if err != nil {
@@ -161,7 +365,7 @@
return status, err
}
- token, ld := "", LockDetails{}
+ token, ld, now, created := "", LockDetails{}, time.Now(), false
if li == (lockInfo{}) {
// An empty lockInfo means to refresh the lock.
ih, ok := parseIfHeader(r.Header.Get("If"))
@@ -174,38 +378,44 @@
if token == "" {
return http.StatusBadRequest, errInvalidLockToken
}
- var closer io.Closer
- ld, closer, err = h.LockSystem.Refresh(token, time.Now(), duration)
+ ld, err = h.LockSystem.Refresh(now, token, duration)
if err != nil {
if err == ErrNoSuchLock {
return http.StatusPreconditionFailed, err
}
return http.StatusInternalServerError, err
}
- defer closer.Close()
} else {
- depth, err := parseDepth(r.Header.Get("Depth"))
- if err != nil {
- return http.StatusBadRequest, err
+ // Section 9.10.3 says that "If no Depth header is submitted on a LOCK request,
+ // then the request MUST act as if a "Depth:infinity" had been submitted."
+ depth := infiniteDepth
+ if hdr := r.Header.Get("Depth"); hdr != "" {
+ depth = parseDepth(hdr)
+ if depth != 0 && depth != infiniteDepth {
+ // Section 9.10.3 says that "Values other than 0 or infinity must not be
+ // used with the Depth header on a LOCK method".
+ return http.StatusBadRequest, errInvalidDepth
+ }
}
ld = LockDetails{
- Depth: depth,
- Duration: duration,
- OwnerXML: li.Owner.InnerXML,
- Path: r.URL.Path,
+ Root: r.URL.Path,
+ Duration: duration,
+ OwnerXML: li.Owner.InnerXML,
+ ZeroDepth: depth == 0,
}
- var closer io.Closer
- token, closer, err = h.LockSystem.Create(r.URL.Path, time.Now(), ld)
+ token, err = h.LockSystem.Create(now, ld)
if err != nil {
+ if err == ErrLocked {
+ return StatusLocked, err
+ }
return http.StatusInternalServerError, err
}
defer func() {
if retErr != nil {
- h.LockSystem.Unlock(token)
+ h.LockSystem.Unlock(now, token)
}
}()
- defer closer.Close()
// Create the resource if it didn't previously exist.
if _, err := h.FileSystem.Stat(r.URL.Path); err != nil {
@@ -215,14 +425,21 @@
return http.StatusInternalServerError, err
}
f.Close()
- w.WriteHeader(http.StatusCreated)
- // http://www.webdav.org/specs/rfc4918.html#HEADER_Lock-Token says that the
- // Lock-Token value is a Coded-URL. We add angle brackets.
- w.Header().Set("Lock-Token", "<"+token+">")
+ created = true
}
+
+ // http://www.webdav.org/specs/rfc4918.html#HEADER_Lock-Token says that the
+ // Lock-Token value is a Coded-URL. We add angle brackets.
+ w.Header().Set("Lock-Token", "<"+token+">")
}
w.Header().Set("Content-Type", "application/xml; charset=utf-8")
+ if created {
+ // This is "w.WriteHeader(http.StatusCreated)" and not "return
+ // http.StatusCreated, nil" because we write our own (XML) response to w
+ // and Handler.ServeHTTP would otherwise write "Created".
+ w.WriteHeader(http.StatusCreated)
+ }
writeLockInfo(w, token, ld)
return 0, nil
}
@@ -236,11 +453,13 @@
}
t = t[1 : len(t)-1]
- switch err = h.LockSystem.Unlock(t); err {
+ switch err = h.LockSystem.Unlock(time.Now(), t); err {
case nil:
return http.StatusNoContent, err
case ErrForbidden:
return http.StatusForbidden, err
+ case ErrLocked:
+ return StatusLocked, err
case ErrNoSuchLock:
return http.StatusConflict, err
default:
@@ -248,14 +467,165 @@
}
}
-func parseDepth(s string) (int, error) {
- // TODO: implement.
- return -1, nil
+func (h *Handler) handlePropfind(w http.ResponseWriter, r *http.Request) (status int, err error) {
+ fi, err := h.FileSystem.Stat(r.URL.Path)
+ if err != nil {
+ if os.IsNotExist(err) {
+ return http.StatusNotFound, err
+ }
+ return http.StatusMethodNotAllowed, err
+ }
+ depth := infiniteDepth
+ if hdr := r.Header.Get("Depth"); hdr != "" {
+ depth = parseDepth(hdr)
+ if depth == invalidDepth {
+ return http.StatusBadRequest, errInvalidDepth
+ }
+ }
+ pf, status, err := readPropfind(r.Body)
+ if err != nil {
+ return status, err
+ }
+
+ mw := multistatusWriter{w: w}
+
+ walkFn := func(path string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+ var pstats []Propstat
+ if pf.Propname != nil {
+ pnames, err := propnames(h.FileSystem, h.LockSystem, path)
+ if err != nil {
+ return err
+ }
+ pstat := Propstat{Status: http.StatusOK}
+ for _, xmlname := range pnames {
+ pstat.Props = append(pstat.Props, Property{XMLName: xmlname})
+ }
+ pstats = append(pstats, pstat)
+ } else if pf.Allprop != nil {
+ pstats, err = allprop(h.FileSystem, h.LockSystem, path, pf.Prop)
+ } else {
+ pstats, err = props(h.FileSystem, h.LockSystem, path, pf.Prop)
+ }
+ if err != nil {
+ return err
+ }
+ return mw.write(makePropstatResponse(path, pstats))
+ }
+
+ walkErr := walkFS(h.FileSystem, depth, r.URL.Path, fi, walkFn)
+ closeErr := mw.close()
+ if walkErr != nil {
+ return http.StatusInternalServerError, walkErr
+ }
+ if closeErr != nil {
+ return http.StatusInternalServerError, closeErr
+ }
+ return 0, nil
}
-func parseTimeout(s string) (time.Duration, error) {
- // TODO: implement.
- return 1 * time.Second, nil
+func (h *Handler) handleProppatch(w http.ResponseWriter, r *http.Request) (status int, err error) {
+ release, status, err := h.confirmLocks(r, r.URL.Path, "")
+ if err != nil {
+ return status, err
+ }
+ defer release()
+
+ if _, err := h.FileSystem.Stat(r.URL.Path); err != nil {
+ if os.IsNotExist(err) {
+ return http.StatusNotFound, err
+ }
+ return http.StatusMethodNotAllowed, err
+ }
+ patches, status, err := readProppatch(r.Body)
+ if err != nil {
+ return status, err
+ }
+ pstats, err := patch(h.FileSystem, h.LockSystem, r.URL.Path, patches)
+ if err != nil {
+ return http.StatusInternalServerError, err
+ }
+ mw := multistatusWriter{w: w}
+ writeErr := mw.write(makePropstatResponse(r.URL.Path, pstats))
+ closeErr := mw.close()
+ if writeErr != nil {
+ return http.StatusInternalServerError, writeErr
+ }
+ if closeErr != nil {
+ return http.StatusInternalServerError, closeErr
+ }
+ return 0, nil
+}
+
+func makePropstatResponse(href string, pstats []Propstat) *response {
+ resp := response{
+ Href: []string{href},
+ Propstat: make([]propstat, 0, len(pstats)),
+ }
+ for _, p := range pstats {
+ var xmlErr *xmlError
+ if p.XMLError != "" {
+ xmlErr = &xmlError{InnerXML: []byte(p.XMLError)}
+ }
+ resp.Propstat = append(resp.Propstat, propstat{
+ Status: fmt.Sprintf("HTTP/1.1 %d %s", p.Status, StatusText(p.Status)),
+ Prop: p.Props,
+ ResponseDescription: p.ResponseDescription,
+ Error: xmlErr,
+ })
+ }
+ return &resp
+}
+
+const (
+ infiniteDepth = -1
+ invalidDepth = -2
+)
+
+// parseDepth maps the strings "0", "1" and "infinity" to 0, 1 and
+// infiniteDepth. Parsing any other string returns invalidDepth.
+//
+// Different WebDAV methods have further constraints on valid depths:
+// - PROPFIND has no further restrictions, as per section 9.1.
+// - COPY accepts only "0" or "infinity", as per section 9.8.3.
+// - MOVE accepts only "infinity", as per section 9.9.2.
+// - LOCK accepts only "0" or "infinity", as per section 9.10.3.
+// These constraints are enforced by the handleXxx methods.
+func parseDepth(s string) int {
+ switch s {
+ case "0":
+ return 0
+ case "1":
+ return 1
+ case "infinity":
+ return infiniteDepth
+ }
+ return invalidDepth
+}
+
+// StripPrefix is like http.StripPrefix but it also strips the prefix from any
+// Destination headers, so that COPY and MOVE requests also see stripped paths.
+func StripPrefix(prefix string, h http.Handler) http.Handler {
+ if prefix == "" {
+ return h
+ }
+ h = http.StripPrefix(prefix, h)
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ dsts := r.Header["Destination"]
+ for i, dst := range dsts {
+ u, err := url.Parse(dst)
+ if err != nil {
+ continue
+ }
+ if p := strings.TrimPrefix(u.Path, prefix); len(p) < len(u.Path) {
+ u.Path = p
+ dsts[i] = u.String()
+ }
+ }
+ h.ServeHTTP(w, r)
+ })
}
// http://www.webdav.org/specs/rfc4918.html#status.code.extensions.to.http11
@@ -284,11 +654,21 @@
}
var (
- errInvalidIfHeader = errors.New("webdav: invalid If header")
- errInvalidLockInfo = errors.New("webdav: invalid lock info")
- errInvalidLockToken = errors.New("webdav: invalid lock token")
- errLocked = errors.New("webdav: locked")
- errNoFileSystem = errors.New("webdav: no file system")
- errNoLockSystem = errors.New("webdav: no lock system")
- errUnsupportedLockInfo = errors.New("webdav: unsupported lock info")
+ errDestinationEqualsSource = errors.New("webdav: destination equals source")
+ errDirectoryNotEmpty = errors.New("webdav: directory not empty")
+ errInvalidDepth = errors.New("webdav: invalid depth")
+ errInvalidDestination = errors.New("webdav: invalid destination")
+ errInvalidIfHeader = errors.New("webdav: invalid If header")
+ errInvalidLockInfo = errors.New("webdav: invalid lock info")
+ errInvalidLockToken = errors.New("webdav: invalid lock token")
+ errInvalidPropfind = errors.New("webdav: invalid propfind")
+ errInvalidProppatch = errors.New("webdav: invalid proppatch")
+ errInvalidResponse = errors.New("webdav: invalid response")
+ errInvalidTimeout = errors.New("webdav: invalid timeout")
+ errNoFileSystem = errors.New("webdav: no file system")
+ errNoLockSystem = errors.New("webdav: no lock system")
+ errNotADirectory = errors.New("webdav: not a directory")
+ errRecursionTooDeep = errors.New("webdav: recursion too deep")
+ errUnsupportedLockInfo = errors.New("webdav: unsupported lock info")
+ errUnsupportedMethod = errors.New("webdav: unsupported method")
)
diff --git a/go/src/golang.org/x/net/webdav/webdav_test.go b/go/src/golang.org/x/net/webdav/webdav_test.go
new file mode 100644
index 0000000..c422860
--- /dev/null
+++ b/go/src/golang.org/x/net/webdav/webdav_test.go
@@ -0,0 +1,161 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package webdav
+
+import (
+ "fmt"
+ "io"
+ "net/http"
+ "net/http/httptest"
+ "reflect"
+ "sort"
+ "strings"
+ "testing"
+)
+
+// TestStripPrefix tests the StripPrefix function. We can't test the
+// StripPrefix function with the litmus test, even though all of the litmus
+// test paths start with "/litmus/", because one of the first things that the
+// litmus test does is "MKCOL /litmus/". That request succeeds without a
+// StripPrefix, but fails with a StripPrefix because you cannot MKCOL the root
+// directory of a FileSystem.
+func TestStripPrefix(t *testing.T) {
+ const dst, blah = "Destination", "blah blah blah"
+
+ do := func(method, urlStr string, body io.Reader, wantStatusCode int, headers ...string) error {
+ req, err := http.NewRequest(method, urlStr, body)
+ if err != nil {
+ return err
+ }
+ for len(headers) >= 2 {
+ req.Header.Add(headers[0], headers[1])
+ headers = headers[2:]
+ }
+ res, err := http.DefaultClient.Do(req)
+ if err != nil {
+ return err
+ }
+ defer res.Body.Close()
+ if res.StatusCode != wantStatusCode {
+ return fmt.Errorf("got status code %d, want %d", res.StatusCode, wantStatusCode)
+ }
+ return nil
+ }
+
+ prefixes := []string{
+ "/",
+ "/a/",
+ "/a/b/",
+ "/a/b/c/",
+ }
+ for _, prefix := range prefixes {
+ fs := NewMemFS()
+ h := http.Handler(&Handler{
+ FileSystem: fs,
+ LockSystem: NewMemLS(),
+ })
+ mux := http.NewServeMux()
+ if prefix != "/" {
+ // Note that this is webdav.StripPrefix, not http.StripPrefix.
+ h = StripPrefix(prefix, h)
+ }
+ mux.Handle(prefix, h)
+ srv := httptest.NewServer(mux)
+ defer srv.Close()
+
+ // The script is:
+ // MKCOL /a
+ // MKCOL /a/b
+ // PUT /a/b/c
+ // COPY /a/b/c /a/b/d
+ // MKCOL /a/b/e
+ // MOVE /a/b/d /a/b/e/f
+ // which should yield the (possibly stripped) filenames /a/b/c and
+ // /a/b/e/f, plus their parent directories.
+
+ wantA := map[string]int{
+ "/": http.StatusCreated,
+ "/a/": http.StatusMovedPermanently,
+ "/a/b/": http.StatusNotFound,
+ "/a/b/c/": http.StatusNotFound,
+ }[prefix]
+ if err := do("MKCOL", srv.URL+"/a", nil, wantA); err != nil {
+ t.Errorf("prefix=%-9q MKCOL /a: %v", prefix, err)
+ continue
+ }
+
+ wantB := map[string]int{
+ "/": http.StatusCreated,
+ "/a/": http.StatusCreated,
+ "/a/b/": http.StatusMovedPermanently,
+ "/a/b/c/": http.StatusNotFound,
+ }[prefix]
+ if err := do("MKCOL", srv.URL+"/a/b", nil, wantB); err != nil {
+ t.Errorf("prefix=%-9q MKCOL /a/b: %v", prefix, err)
+ continue
+ }
+
+ wantC := map[string]int{
+ "/": http.StatusCreated,
+ "/a/": http.StatusCreated,
+ "/a/b/": http.StatusCreated,
+ "/a/b/c/": http.StatusMovedPermanently,
+ }[prefix]
+ if err := do("PUT", srv.URL+"/a/b/c", strings.NewReader(blah), wantC); err != nil {
+ t.Errorf("prefix=%-9q PUT /a/b/c: %v", prefix, err)
+ continue
+ }
+
+ wantD := map[string]int{
+ "/": http.StatusCreated,
+ "/a/": http.StatusCreated,
+ "/a/b/": http.StatusCreated,
+ "/a/b/c/": http.StatusMovedPermanently,
+ }[prefix]
+ if err := do("COPY", srv.URL+"/a/b/c", nil, wantD, dst, srv.URL+"/a/b/d"); err != nil {
+ t.Errorf("prefix=%-9q COPY /a/b/c /a/b/d: %v", prefix, err)
+ continue
+ }
+
+ wantE := map[string]int{
+ "/": http.StatusCreated,
+ "/a/": http.StatusCreated,
+ "/a/b/": http.StatusCreated,
+ "/a/b/c/": http.StatusNotFound,
+ }[prefix]
+ if err := do("MKCOL", srv.URL+"/a/b/e", nil, wantE); err != nil {
+ t.Errorf("prefix=%-9q MKCOL /a/b/e: %v", prefix, err)
+ continue
+ }
+
+ wantF := map[string]int{
+ "/": http.StatusCreated,
+ "/a/": http.StatusCreated,
+ "/a/b/": http.StatusCreated,
+ "/a/b/c/": http.StatusNotFound,
+ }[prefix]
+ if err := do("MOVE", srv.URL+"/a/b/d", nil, wantF, dst, srv.URL+"/a/b/e/f"); err != nil {
+ t.Errorf("prefix=%-9q MOVE /a/b/d /a/b/e/f: %v", prefix, err)
+ continue
+ }
+
+ got, err := find(nil, fs, "/")
+ if err != nil {
+ t.Errorf("prefix=%-9q find: %v", prefix, err)
+ continue
+ }
+ sort.Strings(got)
+ want := map[string][]string{
+ "/": []string{"/", "/a", "/a/b", "/a/b/c", "/a/b/e", "/a/b/e/f"},
+ "/a/": []string{"/", "/b", "/b/c", "/b/e", "/b/e/f"},
+ "/a/b/": []string{"/", "/c", "/e", "/e/f"},
+ "/a/b/c/": []string{"/"},
+ }[prefix]
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("prefix=%-9q find:\ngot %v\nwant %v", prefix, got, want)
+ continue
+ }
+ }
+}
diff --git a/go/src/golang.org/x/net/webdav/xml.go b/go/src/golang.org/x/net/webdav/xml.go
index 5939373..79e5d07 100644
--- a/go/src/golang.org/x/net/webdav/xml.go
+++ b/go/src/golang.org/x/net/webdav/xml.go
@@ -13,7 +13,6 @@
"fmt"
"io"
"net/http"
- "strconv"
"time"
)
@@ -65,8 +64,8 @@
func writeLockInfo(w io.Writer, token string, ld LockDetails) (int, error) {
depth := "infinity"
- if d := ld.Depth; d >= 0 {
- depth = strconv.Itoa(d)
+ if ld.ZeroDepth {
+ depth = "0"
}
timeout := ld.Duration / time.Second
return fmt.Fprintf(w, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"+
@@ -79,7 +78,7 @@
" <D:locktoken><D:href>%s</D:href></D:locktoken>\n"+
" <D:lockroot><D:href>%s</D:href></D:lockroot>\n"+
"</D:activelock></D:lockdiscovery></D:prop>",
- depth, ld.OwnerXML, timeout, escape(token), escape(ld.Path),
+ depth, ld.OwnerXML, timeout, escape(token), escape(ld.Root),
)
}
@@ -94,3 +93,376 @@
}
return s
}
+
+// Next returns the next token, if any, in the XML stream of d.
+// RFC 4918 requires to ignore comments, processing instructions
+// and directives.
+// http://www.webdav.org/specs/rfc4918.html#property_values
+// http://www.webdav.org/specs/rfc4918.html#xml-extensibility
+func next(d *xml.Decoder) (xml.Token, error) {
+ for {
+ t, err := d.Token()
+ if err != nil {
+ return t, err
+ }
+ switch t.(type) {
+ case xml.Comment, xml.Directive, xml.ProcInst:
+ continue
+ default:
+ return t, nil
+ }
+ }
+}
+
+// http://www.webdav.org/specs/rfc4918.html#ELEMENT_prop (for propfind)
+type propfindProps []xml.Name
+
+// UnmarshalXML appends the property names enclosed within start to pn.
+//
+// It returns an error if start does not contain any properties or if
+// properties contain values. Character data between properties is ignored.
+func (pn *propfindProps) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+ for {
+ t, err := next(d)
+ if err != nil {
+ return err
+ }
+ switch t.(type) {
+ case xml.EndElement:
+ if len(*pn) == 0 {
+ return fmt.Errorf("%s must not be empty", start.Name.Local)
+ }
+ return nil
+ case xml.StartElement:
+ name := t.(xml.StartElement).Name
+ t, err = next(d)
+ if err != nil {
+ return err
+ }
+ if _, ok := t.(xml.EndElement); !ok {
+ return fmt.Errorf("unexpected token %T", t)
+ }
+ *pn = append(*pn, name)
+ }
+ }
+}
+
+// http://www.webdav.org/specs/rfc4918.html#ELEMENT_propfind
+type propfind struct {
+ XMLName xml.Name `xml:"DAV: propfind"`
+ Allprop *struct{} `xml:"DAV: allprop"`
+ Propname *struct{} `xml:"DAV: propname"`
+ Prop propfindProps `xml:"DAV: prop"`
+ Include propfindProps `xml:"DAV: include"`
+}
+
+func readPropfind(r io.Reader) (pf propfind, status int, err error) {
+ c := countingReader{r: r}
+ if err = xml.NewDecoder(&c).Decode(&pf); err != nil {
+ if err == io.EOF {
+ if c.n == 0 {
+ // An empty body means to propfind allprop.
+ // http://www.webdav.org/specs/rfc4918.html#METHOD_PROPFIND
+ return propfind{Allprop: new(struct{})}, 0, nil
+ }
+ err = errInvalidPropfind
+ }
+ return propfind{}, http.StatusBadRequest, err
+ }
+
+ if pf.Allprop == nil && pf.Include != nil {
+ return propfind{}, http.StatusBadRequest, errInvalidPropfind
+ }
+ if pf.Allprop != nil && (pf.Prop != nil || pf.Propname != nil) {
+ return propfind{}, http.StatusBadRequest, errInvalidPropfind
+ }
+ if pf.Prop != nil && pf.Propname != nil {
+ return propfind{}, http.StatusBadRequest, errInvalidPropfind
+ }
+ if pf.Propname == nil && pf.Allprop == nil && pf.Prop == nil {
+ return propfind{}, http.StatusBadRequest, errInvalidPropfind
+ }
+ return pf, 0, nil
+}
+
+// Property represents a single DAV resource property as defined in RFC 4918.
+// See http://www.webdav.org/specs/rfc4918.html#data.model.for.resource.properties
+type Property struct {
+ // XMLName is the fully qualified name that identifies this property.
+ XMLName xml.Name
+
+ // Lang is an optional xml:lang attribute.
+ Lang string `xml:"xml:lang,attr,omitempty"`
+
+ // InnerXML contains the XML representation of the property value.
+ // See http://www.webdav.org/specs/rfc4918.html#property_values
+ //
+ // Property values of complex type or mixed-content must have fully
+ // expanded XML namespaces or be self-contained with according
+ // XML namespace declarations. They must not rely on any XML
+ // namespace declarations within the scope of the XML document,
+ // even including the DAV: namespace.
+ InnerXML []byte `xml:",innerxml"`
+}
+
+// http://www.webdav.org/specs/rfc4918.html#ELEMENT_error
+// See multistatusWriter for the "D:" namespace prefix.
+type xmlError struct {
+ XMLName xml.Name `xml:"D:error"`
+ InnerXML []byte `xml:",innerxml"`
+}
+
+// http://www.webdav.org/specs/rfc4918.html#ELEMENT_propstat
+// See multistatusWriter for the "D:" namespace prefix.
+type propstat struct {
+ Prop []Property `xml:"D:prop>_ignored_"`
+ Status string `xml:"D:status"`
+ Error *xmlError `xml:"D:error"`
+ ResponseDescription string `xml:"D:responsedescription,omitempty"`
+}
+
+// MarshalXML prepends the "D:" namespace prefix on properties in the DAV: namespace
+// before encoding. See multistatusWriter.
+func (ps propstat) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+ for k, prop := range ps.Prop {
+ if prop.XMLName.Space == "DAV:" {
+ prop.XMLName = xml.Name{Space: "", Local: "D:" + prop.XMLName.Local}
+ ps.Prop[k] = prop
+ }
+ }
+ // Distinct type to avoid infinite recursion of MarshalXML.
+ type newpropstat propstat
+ return e.EncodeElement(newpropstat(ps), start)
+}
+
+// http://www.webdav.org/specs/rfc4918.html#ELEMENT_response
+// See multistatusWriter for the "D:" namespace prefix.
+type response struct {
+ XMLName xml.Name `xml:"D:response"`
+ Href []string `xml:"D:href"`
+ Propstat []propstat `xml:"D:propstat"`
+ Status string `xml:"D:status,omitempty"`
+ Error *xmlError `xml:"D:error"`
+ ResponseDescription string `xml:"D:responsedescription,omitempty"`
+}
+
+// MultistatusWriter marshals one or more Responses into a XML
+// multistatus response.
+// See http://www.webdav.org/specs/rfc4918.html#ELEMENT_multistatus
+// TODO(rsto, mpl): As a workaround, the "D:" namespace prefix, defined as
+// "DAV:" on this element, is prepended on the nested response, as well as on all
+// its nested elements. All property names in the DAV: namespace are prefixed as
+// well. This is because some versions of Mini-Redirector (on windows 7) ignore
+// elements with a default namespace (no prefixed namespace). A less intrusive fix
+// should be possible after golang.org/cl/11074. See https://golang.org/issue/11177
+type multistatusWriter struct {
+ // ResponseDescription contains the optional responsedescription
+ // of the multistatus XML element. Only the latest content before
+ // close will be emitted. Empty response descriptions are not
+ // written.
+ responseDescription string
+
+ w http.ResponseWriter
+ enc *xml.Encoder
+}
+
+// Write validates and emits a DAV response as part of a multistatus response
+// element.
+//
+// It sets the HTTP status code of its underlying http.ResponseWriter to 207
+// (Multi-Status) and populates the Content-Type header. If r is the
+// first, valid response to be written, Write prepends the XML representation
+// of r with a multistatus tag. Callers must call close after the last response
+// has been written.
+func (w *multistatusWriter) write(r *response) error {
+ switch len(r.Href) {
+ case 0:
+ return errInvalidResponse
+ case 1:
+ if len(r.Propstat) > 0 != (r.Status == "") {
+ return errInvalidResponse
+ }
+ default:
+ if len(r.Propstat) > 0 || r.Status == "" {
+ return errInvalidResponse
+ }
+ }
+ err := w.writeHeader()
+ if err != nil {
+ return err
+ }
+ return w.enc.Encode(r)
+}
+
+// writeHeader writes a XML multistatus start element on w's underlying
+// http.ResponseWriter and returns the result of the write operation.
+// After the first write attempt, writeHeader becomes a no-op.
+func (w *multistatusWriter) writeHeader() error {
+ if w.enc != nil {
+ return nil
+ }
+ w.w.Header().Add("Content-Type", "text/xml; charset=utf-8")
+ w.w.WriteHeader(StatusMulti)
+ _, err := fmt.Fprintf(w.w, `<?xml version="1.0" encoding="UTF-8"?>`)
+ if err != nil {
+ return err
+ }
+ w.enc = xml.NewEncoder(w.w)
+ return w.enc.EncodeToken(xml.StartElement{
+ Name: xml.Name{
+ Space: "DAV:",
+ Local: "multistatus",
+ },
+ Attr: []xml.Attr{{
+ Name: xml.Name{Space: "xmlns", Local: "D"},
+ Value: "DAV:",
+ }},
+ })
+}
+
+// Close completes the marshalling of the multistatus response. It returns
+// an error if the multistatus response could not be completed. If both the
+// return value and field enc of w are nil, then no multistatus response has
+// been written.
+func (w *multistatusWriter) close() error {
+ if w.enc == nil {
+ return nil
+ }
+ var end []xml.Token
+ if w.responseDescription != "" {
+ name := xml.Name{Space: "DAV:", Local: "responsedescription"}
+ end = append(end,
+ xml.StartElement{Name: name},
+ xml.CharData(w.responseDescription),
+ xml.EndElement{Name: name},
+ )
+ }
+ end = append(end, xml.EndElement{
+ Name: xml.Name{Space: "DAV:", Local: "multistatus"},
+ })
+ for _, t := range end {
+ err := w.enc.EncodeToken(t)
+ if err != nil {
+ return err
+ }
+ }
+ return w.enc.Flush()
+}
+
+// http://www.webdav.org/specs/rfc4918.html#ELEMENT_prop (for proppatch)
+type proppatchProps []Property
+
+var xmlLangName = xml.Name{Space: "http://www.w3.org/XML/1998/namespace", Local: "lang"}
+
+func xmlLang(s xml.StartElement, d string) string {
+ for _, attr := range s.Attr {
+ if attr.Name == xmlLangName {
+ return attr.Value
+ }
+ }
+ return d
+}
+
+type xmlValue []byte
+
+func (v *xmlValue) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+ // The XML value of a property can be arbitrary, mixed-content XML.
+ // To make sure that the unmarshalled value contains all required
+ // namespaces, we encode all the property value XML tokens into a
+ // buffer. This forces the encoder to redeclare any used namespaces.
+ var b bytes.Buffer
+ e := xml.NewEncoder(&b)
+ for {
+ t, err := next(d)
+ if err != nil {
+ return err
+ }
+ if e, ok := t.(xml.EndElement); ok && e.Name == start.Name {
+ break
+ }
+ if err = e.EncodeToken(t); err != nil {
+ return err
+ }
+ }
+ err := e.Flush()
+ if err != nil {
+ return err
+ }
+ *v = b.Bytes()
+ return nil
+}
+
+// UnmarshalXML appends the property names and values enclosed within start
+// to ps.
+//
+// An xml:lang attribute that is defined either on the DAV:prop or property
+// name XML element is propagated to the property's Lang field.
+//
+// UnmarshalXML returns an error if start does not contain any properties or if
+// property values contain syntactically incorrect XML.
+func (ps *proppatchProps) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
+ lang := xmlLang(start, "")
+ for {
+ t, err := next(d)
+ if err != nil {
+ return err
+ }
+ switch elem := t.(type) {
+ case xml.EndElement:
+ if len(*ps) == 0 {
+ return fmt.Errorf("%s must not be empty", start.Name.Local)
+ }
+ return nil
+ case xml.StartElement:
+ p := Property{
+ XMLName: t.(xml.StartElement).Name,
+ Lang: xmlLang(t.(xml.StartElement), lang),
+ }
+ err = d.DecodeElement(((*xmlValue)(&p.InnerXML)), &elem)
+ if err != nil {
+ return err
+ }
+ *ps = append(*ps, p)
+ }
+ }
+}
+
+// http://www.webdav.org/specs/rfc4918.html#ELEMENT_set
+// http://www.webdav.org/specs/rfc4918.html#ELEMENT_remove
+type setRemove struct {
+ XMLName xml.Name
+ Lang string `xml:"xml:lang,attr,omitempty"`
+ Prop proppatchProps `xml:"DAV: prop"`
+}
+
+// http://www.webdav.org/specs/rfc4918.html#ELEMENT_propertyupdate
+type propertyupdate struct {
+ XMLName xml.Name `xml:"DAV: propertyupdate"`
+ Lang string `xml:"xml:lang,attr,omitempty"`
+ SetRemove []setRemove `xml:",any"`
+}
+
+func readProppatch(r io.Reader) (patches []Proppatch, status int, err error) {
+ var pu propertyupdate
+ if err = xml.NewDecoder(r).Decode(&pu); err != nil {
+ return nil, http.StatusBadRequest, err
+ }
+ for _, op := range pu.SetRemove {
+ remove := false
+ switch op.XMLName {
+ case xml.Name{Space: "DAV:", Local: "set"}:
+ // No-op.
+ case xml.Name{Space: "DAV:", Local: "remove"}:
+ for _, p := range op.Prop {
+ if len(p.InnerXML) > 0 {
+ return nil, http.StatusBadRequest, errInvalidProppatch
+ }
+ }
+ remove = true
+ default:
+ return nil, http.StatusBadRequest, errInvalidProppatch
+ }
+ patches = append(patches, Proppatch{Remove: remove, Props: op.Prop})
+ }
+ return patches, 0, nil
+}
diff --git a/go/src/golang.org/x/net/webdav/xml_test.go b/go/src/golang.org/x/net/webdav/xml_test.go
index 26149a2..51fba87 100644
--- a/go/src/golang.org/x/net/webdav/xml_test.go
+++ b/go/src/golang.org/x/net/webdav/xml_test.go
@@ -5,14 +5,19 @@
package webdav
import (
+ "bytes"
"encoding/xml"
+ "fmt"
+ "io"
"net/http"
+ "net/http/httptest"
"reflect"
+ "sort"
"strings"
"testing"
)
-func TestParseLockInfo(t *testing.T) {
+func TestReadLockInfo(t *testing.T) {
// The "section x.y.z" test cases come from section x.y.z of the spec at
// http://www.webdav.org/specs/rfc4918.html
testCases := []struct {
@@ -127,3 +132,777 @@
}
}
}
+
+func TestReadPropfind(t *testing.T) {
+ testCases := []struct {
+ desc string
+ input string
+ wantPF propfind
+ wantStatus int
+ }{{
+ desc: "propfind: propname",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:propname/>\n" +
+ "</A:propfind>",
+ wantPF: propfind{
+ XMLName: xml.Name{Space: "DAV:", Local: "propfind"},
+ Propname: new(struct{}),
+ },
+ }, {
+ desc: "propfind: empty body means allprop",
+ input: "",
+ wantPF: propfind{
+ Allprop: new(struct{}),
+ },
+ }, {
+ desc: "propfind: allprop",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:allprop/>\n" +
+ "</A:propfind>",
+ wantPF: propfind{
+ XMLName: xml.Name{Space: "DAV:", Local: "propfind"},
+ Allprop: new(struct{}),
+ },
+ }, {
+ desc: "propfind: allprop followed by include",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:allprop/>\n" +
+ " <A:include><A:displayname/></A:include>\n" +
+ "</A:propfind>",
+ wantPF: propfind{
+ XMLName: xml.Name{Space: "DAV:", Local: "propfind"},
+ Allprop: new(struct{}),
+ Include: propfindProps{xml.Name{Space: "DAV:", Local: "displayname"}},
+ },
+ }, {
+ desc: "propfind: include followed by allprop",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:include><A:displayname/></A:include>\n" +
+ " <A:allprop/>\n" +
+ "</A:propfind>",
+ wantPF: propfind{
+ XMLName: xml.Name{Space: "DAV:", Local: "propfind"},
+ Allprop: new(struct{}),
+ Include: propfindProps{xml.Name{Space: "DAV:", Local: "displayname"}},
+ },
+ }, {
+ desc: "propfind: propfind",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:prop><A:displayname/></A:prop>\n" +
+ "</A:propfind>",
+ wantPF: propfind{
+ XMLName: xml.Name{Space: "DAV:", Local: "propfind"},
+ Prop: propfindProps{xml.Name{Space: "DAV:", Local: "displayname"}},
+ },
+ }, {
+ desc: "propfind: prop with ignored comments",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:prop>\n" +
+ " <!-- ignore -->\n" +
+ " <A:displayname><!-- ignore --></A:displayname>\n" +
+ " </A:prop>\n" +
+ "</A:propfind>",
+ wantPF: propfind{
+ XMLName: xml.Name{Space: "DAV:", Local: "propfind"},
+ Prop: propfindProps{xml.Name{Space: "DAV:", Local: "displayname"}},
+ },
+ }, {
+ desc: "propfind: propfind with ignored whitespace",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:prop> <A:displayname/></A:prop>\n" +
+ "</A:propfind>",
+ wantPF: propfind{
+ XMLName: xml.Name{Space: "DAV:", Local: "propfind"},
+ Prop: propfindProps{xml.Name{Space: "DAV:", Local: "displayname"}},
+ },
+ }, {
+ desc: "propfind: propfind with ignored mixed-content",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:prop>foo<A:displayname/>bar</A:prop>\n" +
+ "</A:propfind>",
+ wantPF: propfind{
+ XMLName: xml.Name{Space: "DAV:", Local: "propfind"},
+ Prop: propfindProps{xml.Name{Space: "DAV:", Local: "displayname"}},
+ },
+ }, {
+ desc: "propfind: propname with ignored element (section A.4)",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:propname/>\n" +
+ " <E:leave-out xmlns:E='E:'>*boss*</E:leave-out>\n" +
+ "</A:propfind>",
+ wantPF: propfind{
+ XMLName: xml.Name{Space: "DAV:", Local: "propfind"},
+ Propname: new(struct{}),
+ },
+ }, {
+ desc: "propfind: bad: junk",
+ input: "xxx",
+ wantStatus: http.StatusBadRequest,
+ }, {
+ desc: "propfind: bad: propname and allprop (section A.3)",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:propname/>" +
+ " <A:allprop/>" +
+ "</A:propfind>",
+ wantStatus: http.StatusBadRequest,
+ }, {
+ desc: "propfind: bad: propname and prop",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:prop><A:displayname/></A:prop>\n" +
+ " <A:propname/>\n" +
+ "</A:propfind>",
+ wantStatus: http.StatusBadRequest,
+ }, {
+ desc: "propfind: bad: allprop and prop",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:allprop/>\n" +
+ " <A:prop><A:foo/><A:/prop>\n" +
+ "</A:propfind>",
+ wantStatus: http.StatusBadRequest,
+ }, {
+ desc: "propfind: bad: empty propfind with ignored element (section A.4)",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <E:expired-props/>\n" +
+ "</A:propfind>",
+ wantStatus: http.StatusBadRequest,
+ }, {
+ desc: "propfind: bad: empty prop",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:prop/>\n" +
+ "</A:propfind>",
+ wantStatus: http.StatusBadRequest,
+ }, {
+ desc: "propfind: bad: prop with just chardata",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:prop>foo</A:prop>\n" +
+ "</A:propfind>",
+ wantStatus: http.StatusBadRequest,
+ }, {
+ desc: "bad: interrupted prop",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:prop><A:foo></A:prop>\n",
+ wantStatus: http.StatusBadRequest,
+ }, {
+ desc: "bad: malformed end element prop",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:prop><A:foo/></A:bar></A:prop>\n",
+ wantStatus: http.StatusBadRequest,
+ }, {
+ desc: "propfind: bad: property with chardata value",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:prop><A:foo>bar</A:foo></A:prop>\n" +
+ "</A:propfind>",
+ wantStatus: http.StatusBadRequest,
+ }, {
+ desc: "propfind: bad: property with whitespace value",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:prop><A:foo> </A:foo></A:prop>\n" +
+ "</A:propfind>",
+ wantStatus: http.StatusBadRequest,
+ }, {
+ desc: "propfind: bad: include without allprop",
+ input: "" +
+ "<A:propfind xmlns:A='DAV:'>\n" +
+ " <A:include><A:foo/></A:include>\n" +
+ "</A:propfind>",
+ wantStatus: http.StatusBadRequest,
+ }}
+
+ for _, tc := range testCases {
+ pf, status, err := readPropfind(strings.NewReader(tc.input))
+ if tc.wantStatus != 0 {
+ if err == nil {
+ t.Errorf("%s: got nil error, want non-nil", tc.desc)
+ continue
+ }
+ } else if err != nil {
+ t.Errorf("%s: %v", tc.desc, err)
+ continue
+ }
+ if !reflect.DeepEqual(pf, tc.wantPF) || status != tc.wantStatus {
+ t.Errorf("%s:\ngot propfind=%v, status=%v\nwant propfind=%v, status=%v",
+ tc.desc, pf, status, tc.wantPF, tc.wantStatus)
+ continue
+ }
+ }
+}
+
+func TestMultistatusWriter(t *testing.T) {
+ if go1Dot4 {
+ t.Skip("TestMultistatusWriter requires Go version 1.5 or greater")
+ }
+
+ ///The "section x.y.z" test cases come from section x.y.z of the spec at
+ // http://www.webdav.org/specs/rfc4918.html
+ testCases := []struct {
+ desc string
+ responses []response
+ respdesc string
+ writeHeader bool
+ wantXML string
+ wantCode int
+ wantErr error
+ }{{
+ desc: "section 9.2.2 (failed dependency)",
+ responses: []response{{
+ Href: []string{"http://example.com/foo"},
+ Propstat: []propstat{{
+ Prop: []Property{{
+ XMLName: xml.Name{
+ Space: "http://ns.example.com/",
+ Local: "Authors",
+ },
+ }},
+ Status: "HTTP/1.1 424 Failed Dependency",
+ }, {
+ Prop: []Property{{
+ XMLName: xml.Name{
+ Space: "http://ns.example.com/",
+ Local: "Copyright-Owner",
+ },
+ }},
+ Status: "HTTP/1.1 409 Conflict",
+ }},
+ ResponseDescription: "Copyright Owner cannot be deleted or altered.",
+ }},
+ wantXML: `` +
+ `<?xml version="1.0" encoding="UTF-8"?>` +
+ `<multistatus xmlns="DAV:">` +
+ ` <response>` +
+ ` <href>http://example.com/foo</href>` +
+ ` <propstat>` +
+ ` <prop>` +
+ ` <Authors xmlns="http://ns.example.com/"></Authors>` +
+ ` </prop>` +
+ ` <status>HTTP/1.1 424 Failed Dependency</status>` +
+ ` </propstat>` +
+ ` <propstat xmlns="DAV:">` +
+ ` <prop>` +
+ ` <Copyright-Owner xmlns="http://ns.example.com/"></Copyright-Owner>` +
+ ` </prop>` +
+ ` <status>HTTP/1.1 409 Conflict</status>` +
+ ` </propstat>` +
+ ` <responsedescription>Copyright Owner cannot be deleted or altered.</responsedescription>` +
+ `</response>` +
+ `</multistatus>`,
+ wantCode: StatusMulti,
+ }, {
+ desc: "section 9.6.2 (lock-token-submitted)",
+ responses: []response{{
+ Href: []string{"http://example.com/foo"},
+ Status: "HTTP/1.1 423 Locked",
+ Error: &xmlError{
+ InnerXML: []byte(`<lock-token-submitted xmlns="DAV:"/>`),
+ },
+ }},
+ wantXML: `` +
+ `<?xml version="1.0" encoding="UTF-8"?>` +
+ `<multistatus xmlns="DAV:">` +
+ ` <response>` +
+ ` <href>http://example.com/foo</href>` +
+ ` <status>HTTP/1.1 423 Locked</status>` +
+ ` <error><lock-token-submitted xmlns="DAV:"/></error>` +
+ ` </response>` +
+ `</multistatus>`,
+ wantCode: StatusMulti,
+ }, {
+ desc: "section 9.1.3",
+ responses: []response{{
+ Href: []string{"http://example.com/foo"},
+ Propstat: []propstat{{
+ Prop: []Property{{
+ XMLName: xml.Name{Space: "http://ns.example.com/boxschema/", Local: "bigbox"},
+ InnerXML: []byte(`` +
+ `<BoxType xmlns="http://ns.example.com/boxschema/">` +
+ `Box type A` +
+ `</BoxType>`),
+ }, {
+ XMLName: xml.Name{Space: "http://ns.example.com/boxschema/", Local: "author"},
+ InnerXML: []byte(`` +
+ `<Name xmlns="http://ns.example.com/boxschema/">` +
+ `J.J. Johnson` +
+ `</Name>`),
+ }},
+ Status: "HTTP/1.1 200 OK",
+ }, {
+ Prop: []Property{{
+ XMLName: xml.Name{Space: "http://ns.example.com/boxschema/", Local: "DingALing"},
+ }, {
+ XMLName: xml.Name{Space: "http://ns.example.com/boxschema/", Local: "Random"},
+ }},
+ Status: "HTTP/1.1 403 Forbidden",
+ ResponseDescription: "The user does not have access to the DingALing property.",
+ }},
+ }},
+ respdesc: "There has been an access violation error.",
+ wantXML: `` +
+ `<?xml version="1.0" encoding="UTF-8"?>` +
+ `<multistatus xmlns="DAV:" xmlns:B="http://ns.example.com/boxschema/">` +
+ ` <response>` +
+ ` <href>http://example.com/foo</href>` +
+ ` <propstat>` +
+ ` <prop>` +
+ ` <B:bigbox><B:BoxType>Box type A</B:BoxType></B:bigbox>` +
+ ` <B:author><B:Name>J.J. Johnson</B:Name></B:author>` +
+ ` </prop>` +
+ ` <status>HTTP/1.1 200 OK</status>` +
+ ` </propstat>` +
+ ` <propstat>` +
+ ` <prop>` +
+ ` <B:DingALing/>` +
+ ` <B:Random/>` +
+ ` </prop>` +
+ ` <status>HTTP/1.1 403 Forbidden</status>` +
+ ` <responsedescription>The user does not have access to the DingALing property.</responsedescription>` +
+ ` </propstat>` +
+ ` </response>` +
+ ` <responsedescription>There has been an access violation error.</responsedescription>` +
+ `</multistatus>`,
+ wantCode: StatusMulti,
+ }, {
+ desc: "no response written",
+ // default of http.responseWriter
+ wantCode: http.StatusOK,
+ }, {
+ desc: "no response written (with description)",
+ respdesc: "too bad",
+ // default of http.responseWriter
+ wantCode: http.StatusOK,
+ }, {
+ desc: "empty multistatus with header",
+ writeHeader: true,
+ wantXML: `<multistatus xmlns="DAV:"></multistatus>`,
+ wantCode: StatusMulti,
+ }, {
+ desc: "bad: no href",
+ responses: []response{{
+ Propstat: []propstat{{
+ Prop: []Property{{
+ XMLName: xml.Name{
+ Space: "http://example.com/",
+ Local: "foo",
+ },
+ }},
+ Status: "HTTP/1.1 200 OK",
+ }},
+ }},
+ wantErr: errInvalidResponse,
+ // default of http.responseWriter
+ wantCode: http.StatusOK,
+ }, {
+ desc: "bad: multiple hrefs and no status",
+ responses: []response{{
+ Href: []string{"http://example.com/foo", "http://example.com/bar"},
+ }},
+ wantErr: errInvalidResponse,
+ // default of http.responseWriter
+ wantCode: http.StatusOK,
+ }, {
+ desc: "bad: one href and no propstat",
+ responses: []response{{
+ Href: []string{"http://example.com/foo"},
+ }},
+ wantErr: errInvalidResponse,
+ // default of http.responseWriter
+ wantCode: http.StatusOK,
+ }, {
+ desc: "bad: status with one href and propstat",
+ responses: []response{{
+ Href: []string{"http://example.com/foo"},
+ Propstat: []propstat{{
+ Prop: []Property{{
+ XMLName: xml.Name{
+ Space: "http://example.com/",
+ Local: "foo",
+ },
+ }},
+ Status: "HTTP/1.1 200 OK",
+ }},
+ Status: "HTTP/1.1 200 OK",
+ }},
+ wantErr: errInvalidResponse,
+ // default of http.responseWriter
+ wantCode: http.StatusOK,
+ }, {
+ desc: "bad: multiple hrefs and propstat",
+ responses: []response{{
+ Href: []string{
+ "http://example.com/foo",
+ "http://example.com/bar",
+ },
+ Propstat: []propstat{{
+ Prop: []Property{{
+ XMLName: xml.Name{
+ Space: "http://example.com/",
+ Local: "foo",
+ },
+ }},
+ Status: "HTTP/1.1 200 OK",
+ }},
+ }},
+ wantErr: errInvalidResponse,
+ // default of http.responseWriter
+ wantCode: http.StatusOK,
+ }}
+
+ n := xmlNormalizer{omitWhitespace: true}
+loop:
+ for _, tc := range testCases {
+ rec := httptest.NewRecorder()
+ w := multistatusWriter{w: rec, responseDescription: tc.respdesc}
+ if tc.writeHeader {
+ if err := w.writeHeader(); err != nil {
+ t.Errorf("%s: got writeHeader error %v, want nil", tc.desc, err)
+ continue
+ }
+ }
+ for _, r := range tc.responses {
+ if err := w.write(&r); err != nil {
+ if err != tc.wantErr {
+ t.Errorf("%s: got write error %v, want %v",
+ tc.desc, err, tc.wantErr)
+ }
+ continue loop
+ }
+ }
+ if err := w.close(); err != tc.wantErr {
+ t.Errorf("%s: got close error %v, want %v",
+ tc.desc, err, tc.wantErr)
+ continue
+ }
+ if rec.Code != tc.wantCode {
+ t.Errorf("%s: got HTTP status code %d, want %d\n",
+ tc.desc, rec.Code, tc.wantCode)
+ continue
+ }
+ gotXML := rec.Body.String()
+ eq, err := n.equalXML(strings.NewReader(gotXML), strings.NewReader(tc.wantXML))
+ if err != nil {
+ t.Errorf("%s: equalXML: %v", tc.desc, err)
+ continue
+ }
+ if !eq {
+ t.Errorf("%s: XML body\ngot %s\nwant %s", tc.desc, gotXML, tc.wantXML)
+ }
+ }
+}
+
+func TestReadProppatch(t *testing.T) {
+ ppStr := func(pps []Proppatch) string {
+ var outer []string
+ for _, pp := range pps {
+ var inner []string
+ for _, p := range pp.Props {
+ inner = append(inner, fmt.Sprintf("{XMLName: %q, Lang: %q, InnerXML: %q}",
+ p.XMLName, p.Lang, p.InnerXML))
+ }
+ outer = append(outer, fmt.Sprintf("{Remove: %t, Props: [%s]}",
+ pp.Remove, strings.Join(inner, ", ")))
+ }
+ return "[" + strings.Join(outer, ", ") + "]"
+ }
+
+ testCases := []struct {
+ desc string
+ input string
+ wantPP []Proppatch
+ wantStatus int
+ }{{
+ desc: "proppatch: section 9.2 (with simple property value)",
+ input: `` +
+ `<?xml version="1.0" encoding="utf-8" ?>` +
+ `<D:propertyupdate xmlns:D="DAV:"` +
+ ` xmlns:Z="http://ns.example.com/z/">` +
+ ` <D:set>` +
+ ` <D:prop><Z:Authors>somevalue</Z:Authors></D:prop>` +
+ ` </D:set>` +
+ ` <D:remove>` +
+ ` <D:prop><Z:Copyright-Owner/></D:prop>` +
+ ` </D:remove>` +
+ `</D:propertyupdate>`,
+ wantPP: []Proppatch{{
+ Props: []Property{{
+ xml.Name{Space: "http://ns.example.com/z/", Local: "Authors"},
+ "",
+ []byte(`somevalue`),
+ }},
+ }, {
+ Remove: true,
+ Props: []Property{{
+ xml.Name{Space: "http://ns.example.com/z/", Local: "Copyright-Owner"},
+ "",
+ nil,
+ }},
+ }},
+ }, {
+ desc: "proppatch: lang attribute on prop",
+ input: `` +
+ `<?xml version="1.0" encoding="utf-8" ?>` +
+ `<D:propertyupdate xmlns:D="DAV:">` +
+ ` <D:set>` +
+ ` <D:prop xml:lang="en">` +
+ ` <foo xmlns="http://example.com/ns"/>` +
+ ` </D:prop>` +
+ ` </D:set>` +
+ `</D:propertyupdate>`,
+ wantPP: []Proppatch{{
+ Props: []Property{{
+ xml.Name{Space: "http://example.com/ns", Local: "foo"},
+ "en",
+ nil,
+ }},
+ }},
+ }, {
+ desc: "bad: remove with value",
+ input: `` +
+ `<?xml version="1.0" encoding="utf-8" ?>` +
+ `<D:propertyupdate xmlns:D="DAV:"` +
+ ` xmlns:Z="http://ns.example.com/z/">` +
+ ` <D:remove>` +
+ ` <D:prop>` +
+ ` <Z:Authors>` +
+ ` <Z:Author>Jim Whitehead</Z:Author>` +
+ ` </Z:Authors>` +
+ ` </D:prop>` +
+ ` </D:remove>` +
+ `</D:propertyupdate>`,
+ wantStatus: http.StatusBadRequest,
+ }, {
+ desc: "bad: empty propertyupdate",
+ input: `` +
+ `<?xml version="1.0" encoding="utf-8" ?>` +
+ `<D:propertyupdate xmlns:D="DAV:"` +
+ `</D:propertyupdate>`,
+ wantStatus: http.StatusBadRequest,
+ }, {
+ desc: "bad: empty prop",
+ input: `` +
+ `<?xml version="1.0" encoding="utf-8" ?>` +
+ `<D:propertyupdate xmlns:D="DAV:"` +
+ ` xmlns:Z="http://ns.example.com/z/">` +
+ ` <D:remove>` +
+ ` <D:prop/>` +
+ ` </D:remove>` +
+ `</D:propertyupdate>`,
+ wantStatus: http.StatusBadRequest,
+ }}
+
+ for _, tc := range testCases {
+ pp, status, err := readProppatch(strings.NewReader(tc.input))
+ if tc.wantStatus != 0 {
+ if err == nil {
+ t.Errorf("%s: got nil error, want non-nil", tc.desc)
+ continue
+ }
+ } else if err != nil {
+ t.Errorf("%s: %v", tc.desc, err)
+ continue
+ }
+ if status != tc.wantStatus {
+ t.Errorf("%s: got status %d, want %d", tc.desc, status, tc.wantStatus)
+ continue
+ }
+ if !reflect.DeepEqual(pp, tc.wantPP) || status != tc.wantStatus {
+ t.Errorf("%s: proppatch\ngot %v\nwant %v", tc.desc, ppStr(pp), ppStr(tc.wantPP))
+ }
+ }
+}
+
+func TestUnmarshalXMLValue(t *testing.T) {
+ testCases := []struct {
+ desc string
+ input string
+ wantVal string
+ }{{
+ desc: "simple char data",
+ input: "<root>foo</root>",
+ wantVal: "foo",
+ }, {
+ desc: "empty element",
+ input: "<root><foo/></root>",
+ wantVal: "<foo/>",
+ }, {
+ desc: "preserve namespace",
+ input: `<root><foo xmlns="bar"/></root>`,
+ wantVal: `<foo xmlns="bar"/>`,
+ }, {
+ desc: "preserve root element namespace",
+ input: `<root xmlns:bar="bar"><bar:foo/></root>`,
+ wantVal: `<foo xmlns="bar"/>`,
+ }, {
+ desc: "preserve whitespace",
+ input: "<root> \t </root>",
+ wantVal: " \t ",
+ }, {
+ desc: "preserve mixed content",
+ input: `<root xmlns="bar"> <foo>a<bam xmlns="baz"/> </foo> </root>`,
+ wantVal: ` <foo xmlns="bar">a<bam xmlns="baz"/> </foo> `,
+ }, {
+ desc: "section 9.2",
+ input: `` +
+ `<Z:Authors xmlns:Z="http://ns.example.com/z/">` +
+ ` <Z:Author>Jim Whitehead</Z:Author>` +
+ ` <Z:Author>Roy Fielding</Z:Author>` +
+ `</Z:Authors>`,
+ wantVal: `` +
+ ` <Author xmlns="http://ns.example.com/z/">Jim Whitehead</Author>` +
+ ` <Author xmlns="http://ns.example.com/z/">Roy Fielding</Author>`,
+ }, {
+ desc: "section 4.3.1 (mixed content)",
+ input: `` +
+ `<x:author ` +
+ ` xmlns:x='http://example.com/ns' ` +
+ ` xmlns:D="DAV:">` +
+ ` <x:name>Jane Doe</x:name>` +
+ ` <!-- Jane's contact info -->` +
+ ` <x:uri type='email'` +
+ ` added='2005-11-26'>mailto:jane.doe@example.com</x:uri>` +
+ ` <x:uri type='web'` +
+ ` added='2005-11-27'>http://www.example.com</x:uri>` +
+ ` <x:notes xmlns:h='http://www.w3.org/1999/xhtml'>` +
+ ` Jane has been working way <h:em>too</h:em> long on the` +
+ ` long-awaited revision of <![CDATA[<RFC2518>]]>.` +
+ ` </x:notes>` +
+ `</x:author>`,
+ wantVal: `` +
+ ` <name xmlns="http://example.com/ns">Jane Doe</name>` +
+ ` ` +
+ ` <uri type='email'` +
+ ` xmlns="http://example.com/ns" ` +
+ ` added='2005-11-26'>mailto:jane.doe@example.com</uri>` +
+ ` <uri added='2005-11-27'` +
+ ` type='web'` +
+ ` xmlns="http://example.com/ns">http://www.example.com</uri>` +
+ ` <notes xmlns="http://example.com/ns" ` +
+ ` xmlns:h="http://www.w3.org/1999/xhtml">` +
+ ` Jane has been working way <h:em>too</h:em> long on the` +
+ ` long-awaited revision of <RFC2518>.` +
+ ` </notes>`,
+ }}
+
+ var n xmlNormalizer
+ for _, tc := range testCases {
+ d := xml.NewDecoder(strings.NewReader(tc.input))
+ var v xmlValue
+ if err := d.Decode(&v); err != nil {
+ t.Errorf("%s: got error %v, want nil", tc.desc, err)
+ continue
+ }
+ eq, err := n.equalXML(bytes.NewReader(v), strings.NewReader(tc.wantVal))
+ if err != nil {
+ t.Errorf("%s: equalXML: %v", tc.desc, err)
+ continue
+ }
+ if !eq {
+ t.Errorf("%s:\ngot %s\nwant %s", tc.desc, string(v), tc.wantVal)
+ }
+ }
+}
+
+// xmlNormalizer normalizes XML.
+type xmlNormalizer struct {
+ // omitWhitespace instructs to ignore whitespace between element tags.
+ omitWhitespace bool
+ // omitComments instructs to ignore XML comments.
+ omitComments bool
+}
+
+// normalize writes the normalized XML content of r to w. It applies the
+// following rules
+//
+// * Rename namespace prefixes according to an internal heuristic.
+// * Remove unnecessary namespace declarations.
+// * Sort attributes in XML start elements in lexical order of their
+// fully qualified name.
+// * Remove XML directives and processing instructions.
+// * Remove CDATA between XML tags that only contains whitespace, if
+// instructed to do so.
+// * Remove comments, if instructed to do so.
+//
+func (n *xmlNormalizer) normalize(w io.Writer, r io.Reader) error {
+ d := xml.NewDecoder(r)
+ e := xml.NewEncoder(w)
+ for {
+ t, err := d.Token()
+ if err != nil {
+ if t == nil && err == io.EOF {
+ break
+ }
+ return err
+ }
+ switch val := t.(type) {
+ case xml.Directive, xml.ProcInst:
+ continue
+ case xml.Comment:
+ if n.omitComments {
+ continue
+ }
+ case xml.CharData:
+ if n.omitWhitespace && len(bytes.TrimSpace(val)) == 0 {
+ continue
+ }
+ case xml.StartElement:
+ start, _ := xml.CopyToken(val).(xml.StartElement)
+ attr := start.Attr[:0]
+ for _, a := range start.Attr {
+ if a.Name.Space == "xmlns" || a.Name.Local == "xmlns" {
+ continue
+ }
+ attr = append(attr, a)
+ }
+ sort.Sort(byName(attr))
+ start.Attr = attr
+ t = start
+ }
+ err = e.EncodeToken(t)
+ if err != nil {
+ return err
+ }
+ }
+ return e.Flush()
+}
+
+// equalXML tests for equality of the normalized XML contents of a and b.
+func (n *xmlNormalizer) equalXML(a, b io.Reader) (bool, error) {
+ var buf bytes.Buffer
+ if err := n.normalize(&buf, a); err != nil {
+ return false, err
+ }
+ normA := buf.String()
+ buf.Reset()
+ if err := n.normalize(&buf, b); err != nil {
+ return false, err
+ }
+ normB := buf.String()
+ return normA == normB, nil
+}
+
+type byName []xml.Attr
+
+func (a byName) Len() int { return len(a) }
+func (a byName) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
+func (a byName) Less(i, j int) bool {
+ if a[i].Name.Space != a[j].Name.Space {
+ return a[i].Name.Space < a[j].Name.Space
+ }
+ return a[i].Name.Local < a[j].Name.Local
+}
diff --git a/go/src/golang.org/x/net/websocket/client.go b/go/src/golang.org/x/net/websocket/client.go
index a861bb9..20d1e1e 100644
--- a/go/src/golang.org/x/net/websocket/client.go
+++ b/go/src/golang.org/x/net/websocket/client.go
@@ -64,6 +64,20 @@
return DialConfig(config)
}
+var portMap = map[string]string{
+ "ws": "80",
+ "wss": "443",
+}
+
+func parseAuthority(location *url.URL) string {
+ if _, ok := portMap[location.Scheme]; ok {
+ if _, _, err := net.SplitHostPort(location.Host); err != nil {
+ return net.JoinHostPort(location.Host, portMap[location.Scheme])
+ }
+ }
+ return location.Host
+}
+
// DialConfig opens a new client connection to a WebSocket with a config.
func DialConfig(config *Config) (ws *Conn, err error) {
var client net.Conn
@@ -75,10 +89,10 @@
}
switch config.Location.Scheme {
case "ws":
- client, err = net.Dial("tcp", config.Location.Host)
+ client, err = net.Dial("tcp", parseAuthority(config.Location))
case "wss":
- client, err = tls.Dial("tcp", config.Location.Host, config.TlsConfig)
+ client, err = tls.Dial("tcp", parseAuthority(config.Location), config.TlsConfig)
default:
err = ErrBadScheme
@@ -89,6 +103,7 @@
ws, err = NewClient(config, client)
if err != nil {
+ client.Close()
goto Error
}
return
diff --git a/go/src/golang.org/x/net/websocket/server.go b/go/src/golang.org/x/net/websocket/server.go
index 7032213..33f99b1 100644
--- a/go/src/golang.org/x/net/websocket/server.go
+++ b/go/src/golang.org/x/net/websocket/server.go
@@ -95,8 +95,8 @@
// 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.
+// non-browser clients, which do not send an Origin header, set a
+// Server.Handshake that does not check the origin.
type Handler func(*Conn)
func checkOrigin(config *Config, req *http.Request) (err error) {
diff --git a/go/src/golang.org/x/net/websocket/websocket.go b/go/src/golang.org/x/net/websocket/websocket.go
index b8d2e6d..6068400 100644
--- a/go/src/golang.org/x/net/websocket/websocket.go
+++ b/go/src/golang.org/x/net/websocket/websocket.go
@@ -216,10 +216,11 @@
// Close implements the io.Closer interface.
func (ws *Conn) Close() error {
err := ws.frameHandler.WriteClose(ws.defaultCloseStatus)
+ err1 := ws.rwc.Close()
if err != nil {
return err
}
- return ws.rwc.Close()
+ return err1
}
func (ws *Conn) IsClientConn() bool { return ws.request == nil }
diff --git a/go/src/golang.org/x/net/websocket/websocket_test.go b/go/src/golang.org/x/net/websocket/websocket_test.go
index 48f14b6..725a79f 100644
--- a/go/src/golang.org/x/net/websocket/websocket_test.go
+++ b/go/src/golang.org/x/net/websocket/websocket_test.go
@@ -16,6 +16,7 @@
"strings"
"sync"
"testing"
+ "time"
)
var serverAddr string
@@ -339,3 +340,113 @@
}
conn.Close()
}
+
+var parseAuthorityTests = []struct {
+ in *url.URL
+ out string
+}{
+ {
+ &url.URL{
+ Scheme: "ws",
+ Host: "www.google.com",
+ },
+ "www.google.com:80",
+ },
+ {
+ &url.URL{
+ Scheme: "wss",
+ Host: "www.google.com",
+ },
+ "www.google.com:443",
+ },
+ {
+ &url.URL{
+ Scheme: "ws",
+ Host: "www.google.com:80",
+ },
+ "www.google.com:80",
+ },
+ {
+ &url.URL{
+ Scheme: "wss",
+ Host: "www.google.com:443",
+ },
+ "www.google.com:443",
+ },
+ // some invalid ones for parseAuthority. parseAuthority doesn't
+ // concern itself with the scheme unless it actually knows about it
+ {
+ &url.URL{
+ Scheme: "http",
+ Host: "www.google.com",
+ },
+ "www.google.com",
+ },
+ {
+ &url.URL{
+ Scheme: "http",
+ Host: "www.google.com:80",
+ },
+ "www.google.com:80",
+ },
+ {
+ &url.URL{
+ Scheme: "asdf",
+ Host: "127.0.0.1",
+ },
+ "127.0.0.1",
+ },
+ {
+ &url.URL{
+ Scheme: "asdf",
+ Host: "www.google.com",
+ },
+ "www.google.com",
+ },
+}
+
+func TestParseAuthority(t *testing.T) {
+ for _, tt := range parseAuthorityTests {
+ out := parseAuthority(tt.in)
+ if out != tt.out {
+ t.Errorf("got %v; want %v", out, tt.out)
+ }
+ }
+}
+
+type closerConn struct {
+ net.Conn
+ closed int // count of the number of times Close was called
+}
+
+func (c *closerConn) Close() error {
+ c.closed++
+ return c.Conn.Close()
+}
+
+func TestClose(t *testing.T) {
+ once.Do(startServer)
+
+ conn, err := net.Dial("tcp", serverAddr)
+ if err != nil {
+ t.Fatal("dialing", err)
+ }
+
+ cc := closerConn{Conn: conn}
+
+ client, err := NewClient(newConfig(t, "/echo"), &cc)
+ if err != nil {
+ t.Fatalf("WebSocket handshake: %v", err)
+ }
+
+ // set the deadline to ten minutes ago, which will have expired by the time
+ // client.Close sends the close status frame.
+ conn.SetDeadline(time.Now().Add(-10 * time.Minute))
+
+ if err := client.Close(); err == nil {
+ t.Errorf("ws.Close(): expected error, got %v", err)
+ }
+ if cc.closed < 1 {
+ t.Fatalf("ws.Close(): expected underlying ws.rwc.Close to be called > 0 times, got: %v", cc.closed)
+ }
+}