From 1c5f51fdfc64d0524ddda3380ba178c33e5b0770 Mon Sep 17 00:00:00 2001 From: Nevkontakte Date: Sat, 18 Sep 2021 13:45:05 +0100 Subject: [PATCH 1/3] runtime: Version() returns Go version provided by the compiler. This change improves Go version detection for the provided GOROOT by falling back to `go version` command output if VERSION file doesn't exist (fixes https://github.com/gopherjs/gopherjs/issues/1018). If GOROOT-based version detection failed, it falls back further to the Go version from GopherJS release or a minor version in "go1.x" format. The detected value is then injected by the compiler into the generated JS file and picked up by the `runtime` package. --- build/build.go | 7 +++- compiler/compiler.go | 9 +++-- compiler/natives/src/runtime/runtime.go | 6 ++- compiler/version_check.go | 54 ++++++++++++++++++++++--- compiler/version_check_test.go | 28 +++++++++++++ tests/misc_test.go | 6 +++ tool.go | 2 +- 7 files changed, 100 insertions(+), 12 deletions(-) create mode 100644 compiler/version_check_test.go diff --git a/build/build.go b/build/build.go index 48e7ef7c6..d9c0a2f42 100644 --- a/build/build.go +++ b/build/build.go @@ -509,6 +509,11 @@ func (s *Session) InstallSuffix() string { return "" } +// GoRelease returns Go release version this session is building with. +func (s *Session) GoRelease() string { + return compiler.GoRelease(s.options.GOROOT) +} + func (s *Session) BuildDir(packagePath string, importPath string, pkgObj string) error { if s.Watcher != nil { s.Watcher.Add(packagePath) @@ -778,7 +783,7 @@ func (s *Session) WriteCommandPackage(archive *compiler.Archive, pkgObj string) if err != nil { return err } - return compiler.WriteProgramCode(deps, sourceMapFilter) + return compiler.WriteProgramCode(deps, sourceMapFilter, s.GoRelease()) } func NewMappingCallback(m *sourcemap.Map, goroot, gopath string, localMap bool) func(generatedLine, generatedColumn int, originalPos token.Position) { diff --git a/compiler/compiler.go b/compiler/compiler.go index 668aeb5ef..ec38ed197 100644 --- a/compiler/compiler.go +++ b/compiler/compiler.go @@ -173,7 +173,7 @@ type dceInfo struct { methodFilter string } -func WriteProgramCode(pkgs []*Archive, w *SourceMapFilter) error { +func WriteProgramCode(pkgs []*Archive, w *SourceMapFilter, goVersion string) error { mainPkg := pkgs[len(pkgs)-1] minify := mainPkg.Minified @@ -242,6 +242,10 @@ func WriteProgramCode(pkgs []*Archive, w *SourceMapFilter) error { if _, err := w.Write([]byte("\"use strict\";\n(function() {\n\n")); err != nil { return err } + if _, err := w.Write([]byte(fmt.Sprintf("var $goVersion = %q;\n", goVersion))); err != nil { + return err + } + preludeJS := prelude.Prelude if minify { preludeJS = prelude.Minified @@ -260,10 +264,9 @@ func WriteProgramCode(pkgs []*Archive, w *SourceMapFilter) error { } } - if _, err := w.Write([]byte("$synthesizeMethods();\n$initAllLinknames();var $mainPkg = $packages[\"" + string(mainPkg.ImportPath) + "\"];\n$packages[\"runtime\"].$init();\n$go($mainPkg.$init, []);\n$flushConsole();\n\n}).call(this);\n")); err != nil { + if _, err := w.Write([]byte("$synthesizeMethods();\n$initAllLinknames();\nvar $mainPkg = $packages[\"" + string(mainPkg.ImportPath) + "\"];\n$packages[\"runtime\"].$init();\n$go($mainPkg.$init, []);\n$flushConsole();\n\n}).call(this);\n")); err != nil { return err } - return nil } diff --git a/compiler/natives/src/runtime/runtime.go b/compiler/natives/src/runtime/runtime.go index 60277cad4..5796cb84a 100644 --- a/compiler/natives/src/runtime/runtime.go +++ b/compiler/natives/src/runtime/runtime.go @@ -73,6 +73,7 @@ func init() { js.Global.Set("$jsObjectPtr", jsPkg.Get("Object").Get("ptr")) js.Global.Set("$jsErrorPtr", jsPkg.Get("Error").Get("ptr")) js.Global.Set("$throwRuntimeError", js.InternalObject(throw)) + buildVersion = js.Global.Get("$goVersion").String() // avoid dead code elimination var e error e = &TypeAssertionError{} @@ -353,9 +354,10 @@ func LockOSThread() {} func UnlockOSThread() {} +var buildVersion string // Set by init() + func Version() string { - // TODO: Make this smarter - return "go1.17rc1" + return buildVersion } func StartTrace() error { return nil } diff --git a/compiler/version_check.go b/compiler/version_check.go index 2a1cd5410..7f1039f39 100644 --- a/compiler/version_check.go +++ b/compiler/version_check.go @@ -4,12 +4,12 @@ package compiler import ( - "bytes" "fmt" - "io/ioutil" "os" + "os/exec" "path/filepath" "strconv" + "strings" ) // Version is the GopherJS compiler version string. @@ -25,12 +25,56 @@ func CheckGoVersion(goroot string) error { if nvc, err := strconv.ParseBool(os.Getenv("GOPHERJS_SKIP_VERSION_CHECK")); err == nil && nvc { return nil } - v, err := ioutil.ReadFile(filepath.Join(goroot, "VERSION")) + v, err := goRootVersion(goroot) if err != nil { - return fmt.Errorf("GopherJS %s requires a Go 1.%d.x distribution, but failed to read its VERSION file: %v", Version, GoVersion, err) + return fmt.Errorf("unable to detect Go version for %q: %w", goroot, err) } - if !bytes.HasPrefix(v, []byte("go1."+strconv.Itoa(GoVersion))) { + if !strings.HasPrefix(v, "go1."+strconv.Itoa(GoVersion)) { return fmt.Errorf("GopherJS %s requires a Go 1.%d.x distribution, but found version %s", Version, GoVersion, v) } return nil } + +// goRootVersion defermines Go release for the given GOROOT installation. +func goRootVersion(goroot string) (string, error) { + v, err := os.ReadFile(filepath.Join(goroot, "VERSION")) + if err == nil { + // Standard Go distribution has VERSION file inside its GOROOT, checking it + // is the most efficient option. + return string(v), nil + } + + // Fall back to the "go version" command. + cmd := exec.Command(filepath.Join(goroot, "bin", "go"), "version") + out, err := cmd.Output() + if err != nil { + return "", fmt.Errorf("`go version` command failed: %w", err) + } + // Expected output: go version go1.17.1 linux/amd64 + parts := strings.Split(string(out), " ") + if len(parts) != 4 { + return "", fmt.Errorf("unexpected `go version` output %q, expected 4 words", string(out)) + } + return parts[2], nil +} + +// GoRelease does a best-effort to identify Go release we are building with. +// If unable to determin the precise version for the given GOROOT, falls back +// to the best guess available. +func GoRelease(goroot string) string { + v, err := goRootVersion(goroot) + if err == nil { + // Prefer using the actual version of the GOROOT we are working with. + return v + } + + // Use Go version GopherJS release was tested against as a fallback. By + // convention, it is included in the GopherJS version after the plus sign. + parts := strings.Split(Version, "+") + if len(parts) == 2 { + return parts[1] + } + + // If everything else fails, return just the Go version without patch level. + return fmt.Sprintf("go1.%d", GoVersion) +} diff --git a/compiler/version_check_test.go b/compiler/version_check_test.go new file mode 100644 index 000000000..aa2f4d1f8 --- /dev/null +++ b/compiler/version_check_test.go @@ -0,0 +1,28 @@ +package compiler + +import ( + "runtime" + "strings" + "testing" +) + +func TestGoRelease(t *testing.T) { + t.Run("goroot", func(t *testing.T) { + got := GoRelease(runtime.GOROOT()) + want := runtime.Version() + if got != want { + t.Fatalf("Got: goRelease(%q) returned %q. Want %s.", runtime.GOROOT(), got, want) + } + }) + + t.Run("fallback", func(t *testing.T) { + const goroot = "./invalid goroot" + got := GoRelease(goroot) + if got == "" { + t.Fatalf("Got: goRelease(%q) returned \"\". Want: a Go version.", goroot) + } + if !strings.HasSuffix(Version, "+"+got) { + t.Fatalf("Got: goRelease(%q) returned %q. Want: a fallback to GopherJS version suffix %q.", goroot, got, Version) + } + }) +} diff --git a/tests/misc_test.go b/tests/misc_test.go index eb9d0afe0..b6f41922a 100644 --- a/tests/misc_test.go +++ b/tests/misc_test.go @@ -856,3 +856,9 @@ func TestUntypedNil(t *testing.T) { f(nil) } } + +func TestVersion(t *testing.T) { + if got := runtime.Version(); !strings.HasPrefix(got, "go1.") { + t.Fatalf("Got: runtime.Version() returned %q. Want: a valid Go version.", got) + } +} diff --git a/tool.go b/tool.go index 0f53e713d..b63de17c3 100644 --- a/tool.go +++ b/tool.go @@ -655,7 +655,7 @@ func (fs serveCommandFileSystem) Open(requestName string) (http.File, error) { if err != nil { return err } - if err := compiler.WriteProgramCode(deps, sourceMapFilter); err != nil { + if err := compiler.WriteProgramCode(deps, sourceMapFilter, s.GoRelease()); err != nil { return err } From 866eb025b031718a134e5e2dd4cc8f7ef0dc7b09 Mon Sep 17 00:00:00 2001 From: Nevkontakte Date: Sat, 18 Sep 2021 14:00:40 +0100 Subject: [PATCH 2/3] Update VFS for `runtime`. --- compiler/natives/fs_vfsdata.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/compiler/natives/fs_vfsdata.go b/compiler/natives/fs_vfsdata.go index f98b4732b..d6166929a 100644 --- a/compiler/natives/fs_vfsdata.go +++ b/compiler/natives/fs_vfsdata.go @@ -22,7 +22,7 @@ var FS = func() http.FileSystem { fs := vfsgen۰FS{ "/": &vfsgen۰DirInfo{ name: "/", - modTime: time.Date(2021, 9, 17, 21, 39, 25, 701784500, time.UTC), + modTime: time.Date(2021, 9, 18, 12, 59, 18, 200737100, time.UTC), }, "/src": &vfsgen۰DirInfo{ name: "src", @@ -242,11 +242,11 @@ var FS = func() http.FileSystem { }, "/src/hash/maphash": &vfsgen۰DirInfo{ name: "maphash", - modTime: time.Date(2021, 9, 17, 21, 39, 25, 701784500, time.UTC), + modTime: time.Date(2021, 9, 17, 21, 41, 39, 111784500, time.UTC), }, "/src/hash/maphash/maphash.go": &vfsgen۰CompressedFileInfo{ name: "maphash.go", - modTime: time.Date(2021, 9, 17, 21, 39, 25, 701784500, time.UTC), + modTime: time.Date(2021, 9, 17, 21, 41, 39, 111784500, time.UTC), uncompressedSize: 3395, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xa4\x57\x51\x6f\xe3\xb8\x11\x7e\xb6\x7e\xc5\xf4\x80\xa0\xd2\xae\x23\xd9\x92\x2f\xc9\xba\xb1\x5f\x0a\x74\x8b\x02\x3d\x14\xc8\x15\x7d\x08\xbc\x07\x4a\x1a\x59\x6c\x28\x92\x20\xa9\x68\xbd\xd9\xfc\xf7\x62\x28\xca\xf6\x66\x93\xe2\x16\xf7\x14\x6b\x86\xc3\x99\xf9\x38\xf3\xcd\x24\xcb\xf6\x6a\x5d\xf6\x5c\xd4\xf0\x5f\x1b\x65\x19\xbc\x3f\x7e\x44\x9a\x55\x0f\x6c\x8f\xd0\x31\xdd\x32\xdb\x46\xa4\xee\x2d\xd6\xc0\x25\x90\xe0\xa9\xc8\xe7\x57\xab\xe7\x74\xaf\xc0\x29\xb0\x88\x35\xb8\x16\xbd\x0a\x9a\x5e\x56\x8e\x2b\x19\x3d\x32\xe3\x25\x0f\x78\x80\xfb\xd5\xae\xe7\xd2\x15\x79\x14\x91\x1e\xb8\xe4\x2e\x4e\xe0\x29\x9a\x35\xca\x00\x87\xf5\x06\x0c\x93\x7b\x3c\x1a\x3c\x45\xb3\x59\xf8\x7d\xcf\x77\xb0\x01\xd3\x4b\xc7\x3b\xfc\xad\x61\xd6\x19\x26\xeb\x38\x89\x66\xcf\xd1\xf1\xcc\x62\x07\x5f\x37\xb0\x84\x2c\x83\x8e\x3d\x20\xd8\xde\x20\xc5\x64\x11\x64\xdf\x95\x68\x2c\x30\x83\xa0\xea\xfa\x64\xb3\x1c\x6d\x4e\x82\xfc\xa5\xa0\x08\x82\xe7\x10\xf6\x6f\xc6\x91\x2a\x2e\xe1\x7e\x57\x1e\x1c\xce\xc7\xdc\x29\xb5\xab\x55\x12\xfe\x52\xec\xbc\x01\x81\x32\x2e\x13\xd8\x6c\x60\xe1\xb3\x31\xe8\x7a\x23\xbd\x81\x8f\x3c\xcb\xe0\xd7\x16\xa7\xbc\x7c\xe2\x68\x40\x49\x71\x80\x41\x99\x07\x0b\x4a\xfa\x0b\xb5\x33\x29\xdc\x71\x59\x21\x7c\x54\xba\x45\xf3\x8f\x3b\xe0\x9d\x16\xd8\xa1\x74\x16\x98\xbf\xa9\xc8\x2f\x4b\xee\x00\xe5\x23\x37\x4a\x92\x66\x0e\x03\xd2\x9b\x81\x1b\x14\x68\x66\x98\x10\x28\x82\x17\x7f\x37\x3d\x98\x50\x03\x1a\x60\xb2\x86\x5e\x6b\x34\x50\xe4\xfe\xb6\x92\x3b\x9b\x46\x33\xa1\xe8\x5d\x3a\xec\xc6\x9c\xe7\x30\x3e\x61\x4c\x29\x24\xc7\xaf\x31\xcf\x24\x89\x66\x2d\x7f\xfb\xfc\x76\x5b\xe4\xaf\xd9\x04\x54\x46\xe4\xe2\x96\x27\xb7\xb7\x45\x0e\x5f\x27\x81\x50\x09\x81\x1f\xb0\x3a\xa6\xcd\xa8\xc0\xa0\x44\xa1\x06\xe0\x16\x58\xcd\xb4\xc3\x1a\x1a\xa3\x3a\x9f\x57\xaf\xad\x33\xc8\xba\x09\xdd\x8c\x22\x2a\xf2\x74\xaf\xe8\x2a\xca\x97\x3d\x2a\x5e\x5b\x0f\x90\x6a\xa0\x97\x96\x35\x38\x87\xa1\xe5\x55\x7b\x82\xb9\x56\x68\xe5\x9f\x1d\xd8\x5e\x6b\x65\x1c\x0c\x28\x84\xb7\x16\xc8\x6a\x0b\xce\xdf\x36\x28\x63\x11\x34\x9a\x46\x99\x8e\xc9\x0a\xd3\x28\xcb\x48\xf1\x8b\x72\x54\x82\xcc\x81\x6b\xb9\xf5\xd0\x73\xb9\x3f\xf6\x07\x05\x2e\x95\x03\x56\xb9\x9e\x09\x71\x18\x1b\xac\x3c\x9c\xdc\x77\x4c\xdb\x39\x58\x7a\x7a\xef\x68\x7c\xcf\xa0\x00\x2e\xad\x43\x56\xcf\xa1\xec\x1d\x70\x07\x1d\x3b\x40\x89\x60\x1d\xa7\x20\xb5\x16\xbc\x62\xa5\x40\xa0\x06\x23\xbb\x81\xbb\x16\xaa\xde\x3a\xd5\x45\xbe\x4b\x34\xb8\x83\x46\x3b\x85\xfb\xf7\x10\x1f\x13\x7b\x65\xb8\x6b\x3b\xf2\xa0\xb9\x19\x83\x1a\x0e\x14\xff\x9a\x0e\xb6\xce\x69\xbb\xce\xb2\x3d\x77\x6d\x5f\xa6\x95\xea\xb2\x81\xc9\xfd\x81\x5f\x36\x7d\xcd\x64\x36\x1e\xcd\x4a\xa1\xca\xac\xc2\x72\xb1\xfc\x50\xfe\x5c\x2c\x30\xaf\x96\xd5\x72\x55\x5f\x2f\xca\xeb\x0f\x65\xc3\xf2\xb2\x5a\x7d\xa8\xf1\xba\xfe\xf0\x73\x59\x2d\xb3\x7f\xaa\x1a\x8d\xbc\xc8\x17\xbf\x28\x79\xf9\x57\x73\xd0\x4e\xed\x0d\xd3\x2d\xaf\x2e\xf2\x05\x85\x76\x91\x2f\xfe\x16\x90\xbb\xc8\x17\x4c\xd6\x17\xf9\xe2\x5f\x16\xfb\x5a\x11\x1b\xa8\x8e\x4c\x7d\xa3\x5f\xe4\x8b\x8f\x28\xd1\x30\xa7\x4c\xaa\xeb\x66\xec\xdc\xa9\x2a\xf5\xf7\x9d\x5b\xe4\x73\xb0\xe1\x57\x32\xb5\x1c\xb5\x2c\x9b\x43\xe9\x2b\x9a\x7f\x2e\xf2\xf8\xd5\xe2\xb7\x9f\x4e\x04\x44\xe5\xcc\x1b\xb0\xdf\xb5\x7c\xb8\x32\x66\xf0\x09\xca\x91\xb6\xe8\x51\xfe\x02\x16\xb6\x70\x43\x7f\x2e\x37\x70\xe3\x2d\x18\x7c\xda\x80\x41\x56\xff\x5b\x32\xc1\xf7\x12\xeb\x22\x8f\x75\x12\xcd\x66\xe5\x6b\x1a\x56\xd7\xb1\x9e\xc3\x8a\x5c\x8f\xe1\x4e\xd1\xd2\x07\x09\x35\x6c\x20\x9c\xba\x19\x5d\xfb\x10\xb7\x1b\x58\xfd\x01\x87\xf6\xd2\xbb\x7c\x06\x14\x16\xfd\x3d\x8e\x80\x0a\xa0\x68\x02\xc3\xcb\xbe\x1e\x65\x93\xe1\x76\xbb\x4c\x48\x0d\xb7\xb7\x70\xf3\xc6\x99\xcb\xd3\x91\xe5\xd5\x14\x89\xf3\xc1\xbf\x96\xe3\x6b\xb2\xd7\x91\x9f\x68\xdc\x3b\x3a\x16\xc2\xe7\xe3\xdb\x8f\x12\xca\x27\xd8\xeb\xfb\xcf\xeb\x5d\x20\x20\x6a\xe7\x35\xd1\x90\x45\x30\xaa\x77\x5c\xa2\x9d\xda\xde\x93\x0e\x61\x45\x03\x52\x70\xe7\x04\x02\xca\x9a\x33\x99\x8e\x1e\xbf\x43\x38\xf8\x4a\x82\xef\x33\x9f\xe7\x20\x06\x22\xf4\x9f\xcb\x5d\x72\x7b\x7b\x73\x2e\xc9\x49\xb2\xbc\x3a\x17\x15\x24\xca\x57\xc7\x4c\x4f\xa0\x1c\x93\x8c\xa7\x9a\x9f\x04\x4f\xd1\xac\x9a\x5e\xef\x6a\x15\xb3\x4f\xe1\xb6\xd3\x98\x4c\x12\x78\x37\xa9\xcb\x97\xea\x7c\xf7\x82\xc7\x8b\x3c\xae\x4e\x1d\x52\xc1\x76\x0b\x45\x3e\xd2\xf8\xbb\x68\x46\x3c\xde\x28\x21\xd4\x70\x4e\x86\x16\x06\x34\x08\x9d\xaa\x79\xc3\xc7\x3d\xe3\xa3\x82\x65\xba\xbc\xa6\x05\x83\x77\xda\xa8\xc7\x6f\x48\x76\x1e\xcd\x88\xf7\x3c\xb9\x22\xe0\x67\x8d\x72\xa4\xf2\x12\xe9\xde\x89\xd0\x89\xac\x5d\xdb\x13\x5b\x56\xaa\xd3\xcc\x71\xa2\x44\x4f\x85\x13\xcd\xa6\xd1\xec\x57\x05\xa4\x45\x69\x19\x15\xc4\x40\xd3\xf8\x91\x1e\xf4\x11\x8d\x1b\x77\x1b\x1a\xa4\x6a\x9c\x2d\x52\x69\xc7\x3b\xfe\x05\xeb\x10\xe3\x15\x3c\xa2\xb1\x94\xc5\xd8\xd8\x52\x0d\x69\x14\xcd\xee\xf0\x6c\x10\x71\x6b\x7b\x7c\x8d\x3a\xf7\x4a\x30\xb9\xcf\xf6\x2a\xf3\x47\x6c\xb6\xba\x2e\x56\x79\xc8\x7a\x9c\x76\xd1\x8c\x81\xee\x0d\xee\xd5\xe4\x88\x12\xf5\x43\x25\x2c\x6a\xd3\xe4\xb2\xad\xea\x45\x0d\x06\x65\x8d\x66\x1a\x3b\xd5\x03\xc4\x4c\xd6\xd1\x4c\xf0\x07\x14\x87\x51\x8c\xd2\x71\x83\xd0\x70\x81\x09\xa8\xd2\x2a\x81\x0e\xd3\xe8\x5d\xe6\x6b\xfd\x3f\x86\x3b\xa4\x01\x55\x2a\x63\xd4\x30\x8d\xd6\x90\x6e\xa8\xe9\xb8\x85\x77\xc4\xcc\xc9\x78\xfc\xb8\x14\x25\x10\x73\xda\x3f\xd0\x18\x65\x7c\x79\x59\xfe\x05\xa9\xc2\xc6\xb1\x3f\x82\xd4\xa6\xf2\x7d\x58\x91\xb6\x5e\xd1\xa6\x65\xdf\xf8\xe3\xb3\x07\x3a\x5c\x29\x7d\x18\x85\xf7\x6d\x2a\xd7\xbb\x40\x68\x6d\x2a\x61\x73\x66\xe0\xf9\x61\x03\xe5\xfd\xc3\x7a\xe7\xd5\x8d\xe8\x6d\x3b\x6d\x87\xa9\x84\xf7\x6f\x5d\x35\x2d\x64\xfc\x0b\xce\x41\x72\x11\xfa\xdc\x27\x73\xe7\x0c\x95\xd1\x8f\x21\x30\x1a\xc5\x16\xac\xff\xf1\xff\x71\xb0\x2f\x70\xb0\xbf\x1f\x07\xfb\x06\x0e\x16\x36\x60\x7f\x0c\x07\xfb\x06\x0e\x2f\xd2\x0b\x77\x85\xcd\x96\x6e\xfb\xd3\xe6\x65\xb0\x9a\x49\x5e\xc5\x3f\x85\x7f\x19\xd6\xa3\x0d\x15\xaa\x66\xc6\x71\xbf\xe1\x34\xbd\x10\x50\xf6\x4d\x83\xe6\xa7\x29\x30\xfa\x4f\xe0\x0e\xd1\xef\xf3\x6d\x6a\x1d\x73\x98\x52\x22\xd3\xaa\x3d\x86\x4b\xb1\x1e\xb5\x49\x14\xb2\x5f\x84\x27\xbb\xeb\xbb\xab\xd5\xef\x7f\x2c\x7f\x3c\x3e\x5f\xd7\xbf\x0d\x23\x00\xf2\x22\x82\x36\x95\xdf\x06\xf1\x1c\xfd\x2f\x00\x00\xff\xff\x9c\x30\xd8\x55\x43\x0d\x00\x00"), @@ -631,10 +631,10 @@ var FS = func() http.FileSystem { }, "/src/runtime/runtime.go": &vfsgen۰CompressedFileInfo{ name: "runtime.go", - modTime: time.Date(2021, 8, 25, 20, 34, 40, 618197800, time.UTC), - uncompressedSize: 10645, + modTime: time.Date(2021, 9, 18, 12, 41, 39, 110737100, time.UTC), + uncompressedSize: 10713, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xcc\x3a\xed\x72\x1b\x37\x92\xbf\x67\x9e\xa2\x77\x2a\x97\x0c\x2d\x9a\x94\xb2\x89\xb7\x4e\x89\xb6\xca\x61\x62\xc5\x39\xdb\x52\x59\xce\xed\x56\xe9\x54\x5e\x10\xd3\x43\xc2\xc2\x00\x73\x00\x86\x12\xe3\xd5\x03\xdc\x83\xdc\x8b\xdd\x93\x5c\x35\x3e\x66\x86\x14\x9d\x8f\xfb\x75\xaa\x4a\x4c\x02\xdd\x8d\xfe\xfe\x00\x38\x9f\xaf\xf4\xe9\xb2\x13\xb2\x82\x0f\x36\x9f\xcf\xe1\xa8\xff\x92\xb7\x8c\xdf\xb2\x15\x82\xe9\x94\x13\x0d\xe6\xb9\x68\x5a\x6d\x1c\x94\x79\x56\xc4\xb5\xb9\x50\x0e\x8d\x62\x72\x6e\xb7\xb6\xc8\xf3\xac\x58\x09\xb7\xee\x96\x33\xae\x9b\xf9\x4a\xb7\x6b\x34\x1f\xec\xf0\xe1\x83\x2d\xf2\x49\x9e\x73\xad\xac\x83\xf3\x8b\x8b\x2b\x38\x03\xbb\xb5\x33\xfa\xd8\xaf\x3e\x7f\xbb\xf8\x11\xce\xa0\x20\xe0\xb0\xb6\xd0\x4d\x2b\x24\x1a\x5a\x4d\xb4\x8a\x9c\xb8\x7d\xb7\x46\xf8\xc1\x18\x6d\xc0\x33\x52\x33\x8e\x20\x2a\x54\x4e\xd4\x02\x2d\x30\xe2\x1d\x88\x51\x40\x82\x9a\xe5\x6e\xdb\x3e\xc6\xf8\x98\x67\x7e\x3b\xcf\xb3\xf9\x1c\xde\x06\xd1\x22\x10\x11\x51\xfa\xa9\x6e\xa1\xee\x14\x77\x42\x2b\x58\x76\xce\x03\x5a\x34\x1b\xb4\xe0\x34\x54\xc2\x3a\xa1\x56\x9d\xb0\x6b\xa0\x13\x2c\xb8\x35\x73\xc0\x0c\xf6\x0c\x78\x0c\x7f\x8a\x85\xda\xe8\x06\xb4\xa9\x84\x62\x66\x1b\x17\x4f\x81\x79\x54\x7f\xa2\x07\xde\x65\x1d\x44\x0d\xc2\xc1\x9a\x11\x43\x3b\x2c\x36\xe8\xd6\xba\x9a\xe5\xd9\x78\xb5\x9c\xe4\x0f\x41\x43\x17\xdf\x5f\x94\x0a\x37\xb7\x5a\x39\x76\xeb\x70\x72\x0a\x2f\x15\xb8\x35\x42\xd7\x5a\x67\x90\x35\x53\x70\x6b\x61\xc1\x3a\xd3\x71\x47\xc7\x37\xc8\x94\x23\xb1\x96\x08\x5c\x37\x2d\x73\x62\x29\x91\x88\xdd\x09\xb7\x06\x83\xb5\x44\xee\x66\x86\xd8\x9d\x92\x36\x60\x8d\x06\xe1\x0e\xa1\xb3\x08\x0c\x1a\xa1\x44\xc3\x24\x58\xd7\x2d\x83\x22\x2c\x73\xc2\x7a\x8b\xd0\xc1\xcf\x2f\x5f\x7a\xce\xb6\x2d\x3e\xb7\x16\x0d\x29\x35\x88\x82\xf7\x2d\x72\x67\xa7\x70\xb7\x16\x7c\x4d\x14\xab\xad\x62\x8d\xe0\x4c\xca\x2d\x08\x65\x1d\x53\x4e\x30\x87\x20\x14\x7c\xc6\x3c\x32\x91\x29\x27\xd1\xb2\xef\xfd\xff\x83\x28\x1f\xe9\x5f\xfa\x4f\xa8\x15\x3c\xe4\x39\xd9\x0f\x4a\x07\x4f\x3c\xd0\x24\xee\x94\xe9\x03\xc0\x47\x30\xe8\x3a\xa3\xc0\xcd\x08\xf3\xe1\x11\x46\x7b\xbb\x6a\x99\x5b\x0f\x28\x3d\x46\x51\x40\x50\xf7\xf3\x4f\x88\x25\x99\x50\x64\xb9\x9a\x09\x89\x55\xb0\x34\x4b\x50\x91\xf9\x03\x98\xd1\x28\x1f\xf3\xec\xfd\xe0\xae\x00\x91\xa3\x3c\xe3\x5a\x71\x83\xce\xaf\x0d\xab\x81\x30\x56\xbb\xab\x8d\xb0\x56\xa8\xd5\x6b\xef\x2e\x49\x82\xf9\x1c\xb4\xc2\xe8\x43\xa0\x10\x2b\xac\x60\xb9\x85\x97\xe9\xb4\x29\x44\xbc\xe0\xb5\x8b\x78\x60\xde\x2b\xf4\xc9\x63\xb6\x27\xb0\xeb\x8a\xf0\xb1\x87\x46\x38\x08\x9f\x00\x93\x5e\xf3\xcc\x8b\x0b\xa7\x67\x50\xf4\x82\x17\x79\x26\x6a\xc0\xd9\x48\x15\x7f\x3a\x03\x25\x24\xc1\x47\x84\xb3\x9d\xfd\x59\xb2\x71\x9e\x3d\x90\x5a\x88\x1e\xce\x92\x7a\x46\xbb\x9e\x6e\xaf\xcc\xb3\x81\x6a\xb2\xef\x70\x24\xd7\x6a\x83\xc6\x0a\xad\x4e\xa1\x80\xa3\x90\x46\xe0\x08\x0a\x0a\x1d\x25\xe4\x14\x94\x76\x7e\x87\x59\x7f\x2c\x8f\xc7\x26\xf2\xfb\xc7\xee\xda\xe5\xec\x8c\x9c\x89\x8e\x6e\xec\x6a\x57\xfe\x5f\x3f\x9a\x16\xb8\xa5\x6f\xbb\x1c\xd0\x21\xdc\x12\x5d\x66\x3d\x5d\xca\x2d\xad\xd1\x1b\x51\x21\x58\x29\x56\x6b\x27\xb7\xc0\x25\x32\x83\x26\xe6\x9a\x06\xad\x65\x2b\x24\xe0\x1d\xcd\xcc\x86\x08\xf8\xd3\x8e\x26\x87\x75\x7f\x82\xe7\xfd\xe8\x0c\x0a\x28\x43\x3a\xf4\xbe\x53\x89\xba\x46\x83\xca\x41\xac\x2c\x76\x52\x10\xf4\x03\xa0\xb4\xf8\xfb\x30\x2d\xd7\x6d\x8f\x97\x87\xff\xa2\x8d\x1a\xbb\xf2\xfa\xfe\x6d\x93\x05\x35\x79\x7b\xf5\x8a\x82\xa3\x3c\xcb\x8a\xd3\xde\xdb\x63\x44\xd0\xe6\x9e\x89\x7a\xd7\x17\x4a\xb8\x20\xf1\x07\x7b\x79\xeb\x8d\xf5\xc1\xce\xce\xa5\x5e\x32\x39\x3b\x47\x57\x16\x9f\x25\x41\x8b\x49\x58\xf8\xad\xea\x38\x21\x5a\x89\xc4\x95\x27\xf1\xc1\x5e\x2c\x3f\x20\x77\x97\xce\x14\x53\xf0\x27\x05\x5a\x61\x39\x51\x6e\x9d\x29\x26\x07\xd1\x7d\x6c\x3d\xc2\xf6\xab\xbf\x85\xec\xd6\x46\xdf\x8d\x63\xd9\xd3\x98\xbd\x8c\x45\x3f\x70\x50\x7a\x28\x42\x9f\xcf\x81\x6d\xb4\xa8\xa0\x42\x56\x01\xd7\x15\x02\x4a\xd1\x08\xc5\x28\xd4\xf3\x6c\xc3\x0c\xc4\x72\x96\x67\x08\x67\xf0\xf9\xe3\x5c\xf0\xf1\x21\xcf\xde\x53\x18\xf7\x6a\x3e\xbf\x78\x7b\x71\xf1\x6e\x27\x39\xb4\x46\x73\xb4\xf6\x80\xc6\xe3\x4e\x11\x82\x2b\xc1\x9d\x79\xb8\x9f\x55\x85\xb5\x50\x58\xed\x44\xf6\xbc\xf0\x5e\x23\x6a\xd8\x10\xbd\x88\x12\xa8\xa1\xda\x24\x15\x9d\x5f\x5c\xfe\xf8\xc3\xdb\x9f\xae\xde\x07\x76\x8a\xc9\x37\xb0\xa1\x20\xd8\xa1\xfb\xf9\xe7\xb0\x99\x5d\xa5\xba\xf2\xa7\x3e\x94\xe7\x73\x38\xf7\x56\xfe\xe9\xea\xa9\x6d\x91\x8b\x5a\x24\xb9\x60\xc3\x64\x87\xe0\xd8\x2d\x5a\x68\x0d\x72\xac\x50\x71\x9c\x0d\x1c\x0e\x14\xf3\x14\x2a\xbf\xcd\xec\x1f\xe7\xf1\xd0\x69\xa1\xcd\xd9\xda\xd9\xf7\x58\xb3\x4e\xba\x73\x6d\xb4\x76\x21\x70\xee\x60\xa5\x15\x4e\x81\x33\xf5\x85\xf3\x95\x5f\x38\x8a\xa3\x9a\x49\xb9\x64\xfc\x16\x98\xda\x36\xda\x90\x24\xb1\x0d\x39\x85\x2b\xf4\xbc\x33\x58\xa2\xa3\xd4\x65\xb5\xec\x7c\x4b\x45\x14\x7d\xed\x99\x0d\xf1\x3b\xef\xac\x99\x4b\xcd\x99\x9c\xaf\x74\xd1\xbb\xc3\x77\x06\xd9\x6d\xab\x85\xf2\xb1\x47\xb2\x7d\x8f\xcb\x6e\xb5\x42\xaa\x1f\x0f\x79\x4e\x4e\x56\xfa\x33\x7f\x62\x1b\x76\xc5\x8d\x68\x5d\x6a\x61\xa1\xd2\x68\x89\xdd\x94\xff\x18\xf7\xfe\xe1\x34\x48\x7d\xf7\x54\xe2\x06\x25\xe0\x3d\xf2\xc0\x55\xab\xad\x08\x9e\x3b\x9f\x03\xd7\x1d\xb9\xbd\x9d\x82\xd5\xd4\x99\x60\xd3\x49\xea\x44\xdc\x1a\x1b\xaa\x98\x06\xb9\x6f\xe9\x56\x3d\x9a\x85\x3b\xfc\x62\x83\x80\x2a\xe2\x62\x05\x22\x10\x5b\x30\x29\x3d\xc3\x4c\x55\xf1\x8b\x2d\x27\x7d\x8b\x69\xfd\x3a\xb3\x56\xac\x14\x51\xf4\x67\x30\xb3\x14\xce\x50\xc7\x48\x99\x6d\x85\x26\xb8\x8e\xf5\x0a\xf6\x54\xff\x16\x3a\x30\xea\xb1\x1a\xd6\x7a\x1a\xf4\xd9\x4a\xc1\x11\x96\x28\xf5\x1d\x49\x1a\xb2\xa1\x03\x06\x45\x2d\x24\x9e\x4a\xa1\xb0\xd8\x95\x55\x28\xa7\x81\xa9\xfe\xa0\xb4\x99\x94\x90\x48\x2b\xa2\xc7\xe0\x45\xc8\x86\xd4\x9d\x79\xcf\xbd\x55\xfa\x4e\x5d\xf6\x5a\x00\x38\x23\x7e\xae\x43\xfc\xde\x74\x42\xb9\xd6\xf9\x40\x4f\x74\x17\x51\xb7\x70\x06\xd7\x37\x4f\x88\xdc\xc7\x07\x1a\x14\xbc\xc1\x0d\xae\x84\x75\x68\x12\xc1\x92\x56\xdf\xb0\x06\x63\x42\x98\x02\x89\xd1\x7f\x21\x71\x88\xf1\x09\xc4\x83\xc8\xbb\x6f\x71\x4b\xf1\xe2\x01\x8f\xa0\x38\xf5\xd5\xd3\x69\x56\x12\x74\xcc\x15\x7c\x0a\xb5\xee\x54\x45\x80\xbb\x12\x5c\xdf\xe2\xf6\xe6\x9b\xb8\x3b\x8a\x95\x96\xfb\x18\xa9\x09\xe3\x73\xcf\x75\x9e\x65\x8a\x35\x78\x0a\x89\xc7\x69\x9e\x65\x5e\xcb\xfe\x6c\xfa\x46\x27\x9e\x7a\x2e\xa7\x1e\xbb\xe5\x84\x1e\x79\x2d\x25\xaa\x72\x5f\x2b\x94\x5a\x0f\x68\x8a\xb5\x2d\xaa\xea\x11\xf4\x14\xea\xc9\xbe\x09\xbc\x00\x70\xe6\x19\x1e\x78\x0f\x1d\x2b\xa9\x21\xf9\x84\x1d\x1b\xdd\x9b\x36\x68\x75\x96\xcf\xe7\xb9\x77\xdb\x14\xeb\xd6\x19\xc2\x99\xbd\x24\x25\x4e\xa8\x1d\x27\x4f\xfb\x47\x8c\xb3\x7f\xa4\x0a\x0f\x15\xe5\x36\x22\xc4\xb7\x5c\x0a\x0e\x15\x12\xd3\xa8\xf8\x76\x16\x8b\x28\x11\x10\xc1\x60\x43\x82\x8f\x4c\xee\x25\xf7\x90\x99\x8a\xc9\xec\x0d\xde\x95\x62\x32\x64\xaa\x20\xc9\x92\x59\xc1\x5f\x18\xf2\x0c\x4e\xd3\x0e\x75\xdc\xd6\x51\x2a\x72\xc6\x0f\x86\xaa\xd6\xa6\xf1\xb5\x08\xf0\x9e\xd6\xa8\x47\xf6\x0d\xc6\x4f\x57\x63\xc8\xd8\x8f\x8f\xe8\x0d\x7d\xf8\x8b\x5d\xe7\xcb\xb3\x17\xe4\x53\xf4\x97\x16\x5e\x91\x03\xd2\x9f\x50\xae\xcf\x5a\x34\xc1\xf8\x13\x4a\x7b\x2b\x5a\xf2\xd2\x46\xb8\x20\xf5\xf5\xcd\xe8\xa0\x8f\x79\x46\x00\x34\x17\xd3\x3f\x47\x70\x02\xf3\x27\xfe\xe3\x4e\x67\xf6\x64\x3e\xde\xea\x89\x7f\x61\x41\xdf\x29\xa8\x89\xd4\x93\x79\xee\x7d\xed\x50\x95\x4c\xc5\x9f\xf4\x18\x4b\x86\xc7\x2f\x26\x33\x4a\x46\x65\x61\x5b\x29\x5c\x31\x85\xe2\x3f\xd4\xb0\x46\x69\xa4\x98\x7a\xc6\x26\x79\xe6\x0f\xf1\xc4\xc7\x02\x50\x54\x4b\x5a\xf4\x47\x07\xd2\x12\xd5\xca\xad\x8b\x09\xf5\x0d\x54\x56\x6a\x9a\x66\x09\xe6\xf8\x1b\x10\xf0\x2d\x48\xaa\x49\xfe\x03\x29\xe5\x1b\x10\x47\x47\xb1\xa3\xaf\xf5\x40\xea\xa5\xaa\xf0\xbe\x14\x93\x3c\xa3\x60\xa0\x75\xda\x4f\xbc\x75\xcb\xa0\xfe\x62\x3a\x5e\x16\x84\x73\x51\x93\x20\x65\x3a\xff\xe8\xe4\x53\x20\x93\x04\xe2\xcf\x60\x14\x0e\x54\x63\xb5\xdd\x57\xca\x69\x31\xc9\x29\xae\x83\x06\xfa\x48\x0c\xdf\xa7\x23\xbf\xf1\x2d\xed\x0b\x1f\xfe\xf4\xe7\x69\x46\x41\x8e\x07\xf7\xa5\xac\xe0\xbd\xe6\x31\xd4\x49\xe4\xc8\x83\x24\xd7\x3b\xfd\x63\x92\x33\x07\xbd\xec\x7f\xfe\x14\x10\xf4\xfa\xd9\xe5\xeb\x61\x32\xee\xa9\x83\x84\xbd\x53\xc7\x2a\xe6\x7d\xd0\xbb\x72\xd9\xf2\x94\xc9\x3e\x91\x95\xa7\xa0\x6f\x61\xa9\xb5\x9c\xfc\x8a\xab\x07\xba\xfb\xce\x3c\x38\xdc\x7e\x30\x9d\x84\x0c\x4e\xb9\x33\x00\xf9\xbe\xe6\x64\x9c\xaa\x8f\xa7\x50\x14\x53\xfa\xa7\x66\xd2\x62\xca\xbc\x67\x07\xaa\x8b\xa7\x70\x7d\x7c\x33\x4b\xfa\x9e\xc2\x68\x8d\xb2\xf8\xe8\xfb\xab\x50\x3f\xfa\xa4\xfa\x5b\xb0\x53\x70\xa6\xc3\x3d\x0d\xda\x5e\x85\x53\x68\x39\x5c\xa7\x12\x49\x79\xd5\x27\x9d\x4f\x8b\xee\xeb\x05\x9f\xa4\xa8\x8a\xc7\x11\xa4\x61\x6a\x85\xf1\x74\xaf\x89\x96\x5f\x8b\x9b\x4f\x4a\xbc\x2f\xed\x98\xfb\x24\xe5\xe0\x08\x23\x55\xef\xcb\xe2\x1d\xdf\x96\x3c\x7c\x1b\x0b\xf3\xe4\x45\xcf\x8c\x41\xdb\x49\x47\x6c\x86\x35\x4a\x1b\x24\xc0\x7b\xaf\x80\x9e\xfb\x44\x84\xd8\xaf\x3b\xe5\xe1\x3b\xc5\x5f\x68\x73\xb9\x20\xb1\xbd\x7d\x89\xd2\x6c\x3f\x16\x77\x96\xa7\x30\x44\xe3\xe5\x22\x44\x19\x90\xb1\x52\x54\x85\xa5\xba\x53\xfd\x8a\xf3\xc3\x62\xdd\xa9\x99\x8a\x55\x7c\x14\xc7\xb4\x9c\xca\xf9\x28\x70\x69\x39\xd6\xf5\x2c\xfb\x41\x39\xb3\x3d\x4d\xcb\xfe\xdb\xa1\x88\xfa\x3c\x30\x4a\x4a\xf4\x35\x27\xaa\x68\xa8\x37\x51\x30\xb8\xbe\xf1\x5b\x79\xc6\x3b\xe3\x27\xe1\x71\x75\x29\xb9\x48\xda\x9d\xc0\x1b\xbc\xa7\xd6\x38\xd8\x27\x10\x9c\x02\x75\xe2\x43\xdc\x89\x1a\xb8\x98\x25\x4a\x7f\x3d\xf3\xf6\xe4\x62\x96\xa2\x67\x14\x38\x31\xab\x8f\xe3\xc6\xf7\x3b\x3d\xf4\xf5\x40\xe9\x26\xcf\x86\x2f\x47\x47\x43\xda\x98\x8e\x8f\xfb\x76\xef\xb4\x5d\xd9\x47\xa2\x5f\x2e\xa2\xa5\xa2\x07\x85\xe2\x1b\xee\xb4\xe8\x53\xde\x5b\xea\x77\x16\xe3\x60\x94\x31\xc5\x7e\xc6\x5c\x8c\x6f\xa9\xce\x35\xde\x0f\xa3\xfd\xee\x44\xcf\x3b\x43\x53\x50\xe7\xa8\x6b\x9e\x84\x39\x99\xa0\x8b\x10\xd9\x3b\x43\x74\xc8\xb2\x61\x8a\x2e\xa6\xa0\x84\x9c\x8c\xa6\xda\xd7\xcf\xff\x7e\xf9\xf6\x62\x71\x55\xfa\xd4\xe9\x23\x3d\x5d\x27\x9e\xc0\xc0\x8a\xe5\x6b\xac\x02\x2f\x3e\x32\x1a\x76\x8b\x25\x5f\x33\x95\xae\x39\x1f\x0e\x9d\x69\xd1\xbd\x13\x0d\xea\xce\x1d\x1c\xd9\x89\xb6\x1f\x9f\xb8\xd4\x16\x4b\x3e\x81\x87\xc9\x14\x8e\x27\x79\xf6\xed\x53\xde\xf3\xf8\xa6\x6b\x16\x97\x3f\x97\x9f\x64\xee\x4d\xd7\xf4\xba\x28\xfb\x64\x75\xb8\x77\xfb\xcc\x69\xc7\x64\x0f\x6e\xfb\x76\x20\x59\xff\x35\x36\x57\x8e\xb9\xb1\xef\xd3\xd8\x8c\x0a\x8d\xbf\x4b\x66\x4e\x58\x27\x38\x8d\x3b\xcf\xa5\xd4\x7c\x70\x8d\x67\x5f\x01\x75\x7f\x5b\x87\x16\x18\x6d\x31\xea\xeb\x68\x44\xb1\x4e\x48\x49\xcd\x69\x47\xae\xfb\x8e\x38\x08\xb8\x9f\x46\x2b\x71\x83\x8a\x86\xd4\xda\x20\x56\x93\x3c\xbb\xda\x5a\x80\xc3\x87\xe9\x25\x35\x99\xa9\x87\xb4\x5b\xeb\xb0\x81\xd2\x76\x0d\xe8\x1a\xfe\x7e\x7f\x4f\xa8\x7e\xec\x9a\xe4\xd9\x2b\xad\x6f\xbb\xd6\xee\x92\x51\x5d\xb3\x44\x43\xd0\x7e\xa0\x45\x03\x32\x80\xe5\xd9\x6b\xcf\xd2\x27\xe1\x9b\xb0\x9d\x67\x2f\x0c\xa2\xdd\x67\x6f\x80\x23\x29\x6c\x78\xd7\x78\xcd\x84\x4a\x82\x52\xcc\xac\x91\xb5\xbb\x7a\xfd\x11\x59\xdb\xeb\xf6\x8f\x68\x96\x10\x7b\x3d\xfd\x1e\x2d\x05\x94\x97\x55\x8c\xd6\x7d\x14\xa1\x40\xd0\x9e\x6d\x99\xb2\x11\x56\xd1\xd8\x71\x18\x56\x69\xf5\xb4\x87\x0f\xe0\x6f\x51\x22\xb3\x58\x3d\x02\x37\x69\xc3\x69\x3f\xb2\x5c\x5c\x05\x84\x10\x18\x76\x4c\xdf\x7b\xec\x48\x97\x83\x06\x74\x00\x0e\x7a\x7d\xd5\xdf\x1c\xd4\xe2\x1e\xab\xa7\x56\xfc\x92\xb2\x58\x67\x30\x61\xf9\xcb\xfc\x91\xae\xe7\xf3\x2c\x88\x24\x6c\xe4\xac\x23\xae\x94\xbe\x0b\x9b\xa4\xce\x7e\xeb\x90\x0a\x67\x79\x76\x45\x8d\x40\x54\xcc\xbe\x9c\x9e\xda\x72\x1b\xc7\x9a\x9e\x89\x88\x14\x8d\x15\x90\xf2\xec\xf5\x55\xcb\xd4\x23\x42\x0d\xa9\x73\x90\xc4\x46\xb8\x7d\xdc\x05\xe3\x6b\x0c\xc8\x23\x5c\x4e\xab\xbb\xc8\x1e\x30\x60\x27\xe4\xef\x3a\x7e\xfb\x23\xb3\x6b\x5a\x1d\x90\x5b\xa3\x6b\x21\x69\x14\x5c\x76\xfc\x16\xfd\xab\xd7\x1a\x1c\x5b\x4a\xcc\xb3\xf3\xc5\x10\x91\x03\xca\xf9\x02\x1a\x74\xac\x62\x8e\xe5\xd9\x85\x5b\xa3\xd9\x61\xd3\xbf\x73\xd0\x6a\x8a\xd2\x21\x0e\xa2\x15\xcf\x99\x59\xd2\xc0\xca\xb5\x94\xc8\x1f\x99\x8b\x8a\xea\xf9\xe2\x71\x22\x50\x78\xef\x12\x0e\x05\xd5\x1d\x85\xc5\xda\x37\x21\x70\xb7\x46\x05\x43\x4c\xfd\xcf\x7f\xfd\x77\x78\x69\x63\x0d\x8d\xea\x79\xf6\x8a\xd9\x83\x34\x51\x55\xe1\xe1\x4f\xd7\x20\x99\xdd\xa1\x5f\x2a\xa6\xb4\x45\xae\x55\x65\xc1\x0a\xc5\x11\x4e\xfe\xf5\x2f\x94\xb8\x2f\x59\x67\xd1\xa7\xb8\x37\x76\x50\xb0\x5f\x7d\x93\xf4\x75\xfd\xe5\xd7\xcf\x6e\x86\x83\xb8\x30\xbc\x93\xcc\xc0\xb2\xab\xeb\xe0\xe3\x06\x39\xd5\xe8\xf3\x05\xb4\x84\x09\x55\x67\x82\x96\xa8\x85\xb0\x2e\xed\x33\x07\xd7\x25\xa5\xff\xc5\xd1\x97\x5f\x7f\x3d\xf9\x17\xa2\x1b\x0f\xfb\x41\x55\xff\xd7\xc3\x92\xe0\x36\xcf\x3c\x6d\x18\xeb\xe6\xcf\x5f\x92\xed\x17\x97\x3f\xbf\xa0\xc1\x9d\x74\x51\x4b\xcd\x22\xf1\x3a\xad\xe9\x1a\x16\x97\x3f\x07\xf5\xa5\x10\x38\x5f\x50\xe5\x27\xef\x49\x24\xa9\x11\xca\x33\x7f\x6f\xd8\x9f\xe2\xd7\xbc\x2b\x5c\xa2\x09\x41\x3c\x4a\x96\x7b\xb1\x0b\xcf\x4e\x28\x3a\xdf\x74\xcd\x95\xf8\x05\x17\x92\x59\x1b\x52\x11\xa5\x94\x85\xbf\xfa\x9e\xe5\xd9\x77\x5b\xda\x85\xeb\x67\x27\x37\x43\x51\xcb\xfc\xda\x48\xa8\x3e\xd5\x27\x9b\xf5\x39\x3d\x2d\x3c\xf4\x15\xf9\x2d\xb2\x2a\x15\xca\xb2\x81\x27\xe9\xf3\x24\x96\xcb\x03\xaf\xbd\xef\xc8\xe5\xfa\xb7\x6b\x61\x01\xeb\x9a\x9c\x69\x83\x72\x0b\x9d\x12\x4d\x2b\xb1\x41\x95\x12\x7b\xc3\xb6\x9e\x92\x44\xe6\x73\xa4\x15\x92\x6c\xd4\xa9\xf0\x36\x4b\x1a\xc5\x35\xdb\x08\x6d\xec\x0c\x16\x5a\x59\x51\xa1\x81\x96\x29\xc1\x29\x60\xf1\xbe\x95\x82\x0b\x27\xb7\xb3\x9e\xe9\x2b\x74\x2f\x84\x62\x52\xfc\x82\xa6\xbc\x9f\x42\x3d\x3c\xbd\x7f\x7c\xf8\xff\xca\x79\xe8\x48\x89\xfd\xc1\x74\x6a\x7c\xef\x33\x1a\x6f\xc3\x45\x8b\x6f\x31\xf3\x4c\xb7\xec\x3f\xbb\xfe\x0d\xfa\x81\xbc\xd3\xb3\xa0\xfd\x8b\x6c\x2d\x50\x56\xf1\x27\x03\x64\xf6\xbb\xd1\xe3\xd4\x30\x58\x97\xef\x43\x87\x3b\x81\x38\x38\x0c\x77\x99\xa9\x0b\x3b\x1e\x9e\xb4\xeb\x04\x4c\xdd\x2f\x35\xbc\xa3\x31\x9c\xe6\x80\xc3\xb7\xa3\x61\x0c\xa8\x0f\x3d\x76\xd2\xa0\xbc\x33\xf6\x87\x69\x07\x6a\x3f\xde\xe4\x0f\xfb\xe7\xd2\xd8\xb8\xfb\x78\x3b\x22\xfc\xcf\x7f\x42\xed\x87\xa8\xd1\xd3\x66\x3a\xe8\xdb\x4e\xf9\x8b\xca\xbf\x16\xbb\xc7\x11\x78\xaf\x8c\xf1\xc4\x07\xa3\x61\x92\xf6\xe8\xac\x30\x30\x0a\xe5\xc2\x44\x28\x6a\xa0\xa5\x38\xd4\x3c\xba\x4b\x4d\xef\x31\x57\x3e\x77\xde\xa1\xff\x91\x46\xcd\x6e\xc7\x17\xf7\xa3\xbb\x7e\x8a\x67\xad\xe4\x16\x36\x4c\x8a\x0a\xee\xd8\x96\x8c\x17\xea\x31\x68\x85\x81\x98\xb0\x40\x4d\x7e\xb7\x5a\x03\x1b\xee\xf6\xb5\x39\x70\xb5\x3f\x83\x97\x35\xcd\xb8\xc2\x82\xee\x5c\x68\xfd\x76\x59\x0c\x24\x97\xba\xa3\x14\x2f\x1c\x34\x9d\xa5\x0a\xb8\x41\x58\x22\xaa\xa1\x17\x10\x0a\xac\xa6\x2a\xe1\xeb\xda\x1d\xdb\xa6\x9f\x4d\x08\x3b\x72\xfa\x59\x20\xf7\xb2\x06\x16\x7c\xdd\xbf\x7d\xf8\xb7\x26\xbd\x94\xd8\x30\x27\xf8\x94\xf4\xc0\x99\x4a\xbe\xc5\xbc\xe1\xbc\x86\xfb\x9f\x62\x08\x29\xf3\xf8\x74\x8c\xd6\xcf\x9f\xce\xa2\xac\xc1\xff\x1e\x65\x45\x5d\xba\xe0\x50\x44\x7b\x16\x83\xb8\xfe\x2a\x4d\x09\x5e\x16\xe9\x05\xec\x14\x5a\x7e\xd6\x5f\xc0\x8b\x96\x4f\xd2\x6b\x6c\x54\x48\x98\xfd\x75\x1d\x6e\xe1\x1f\x5b\xa5\xd8\x99\xa0\xf7\xd5\x77\x2d\x5a\x7e\x93\xc7\x87\xa0\xd7\xd8\x5c\xfa\x66\x02\xdf\x86\x5f\x8d\x38\x38\x83\xaf\x4f\xbe\x84\x27\x70\x72\xfc\xe5\x57\x43\x82\xfa\x4e\x6a\x7e\x3b\x02\x2d\x4d\x84\x27\x87\x19\x25\xb2\xd7\x9d\xc3\xfb\x08\x97\x0a\xd1\x08\x36\x8e\x40\xfd\x83\xd7\x4b\xb5\x41\xeb\xc4\x2a\x3c\x14\x09\xeb\xad\x2f\xdc\x17\x96\xd8\xb6\x62\x29\xfd\xed\x78\x9f\xc9\xa6\x94\x0d\x42\x5e\xaa\x34\x79\xa4\xd5\xd3\x60\xdf\x3b\x61\x11\x0c\x36\x7a\x13\x08\x01\xd7\x0d\x61\x0c\xef\x65\xc7\x03\x9b\xfe\x7e\x68\xd9\xd5\x70\x7d\x43\xcd\xe0\x94\x0a\x59\x1c\xfe\x23\x83\x7f\xec\x52\xd8\x07\xd5\xaf\xbe\xa2\xee\xa4\x0b\xae\xdb\x2d\x1d\x3f\x05\xbb\x73\x49\x59\x0c\x0b\xa3\x9b\x47\x7f\xc3\x1c\x6f\x66\x87\xbb\xc7\x61\x50\x7e\xa5\xf9\xed\xc5\xd5\xbb\xb5\x41\x56\x8d\x87\xf4\x9f\x95\xfc\xc4\xce\xbf\x87\x74\xba\x93\x91\x7a\x8b\xbc\x66\xb7\x51\x83\xb6\x61\xc6\xa1\x19\x1e\x1c\x57\xfa\x64\x76\xf2\x17\xc3\x4f\x8a\xb1\x2a\x8d\x7b\x67\x18\xa7\xfc\x16\x6e\xe0\xfb\x0c\x4c\x31\xf2\x90\xc0\x74\x9b\xa0\xe2\xdf\xc7\x87\xa1\x62\xa7\xad\x60\x0e\xff\x56\xf1\x37\x9f\x74\x10\x18\xf0\x95\x06\x54\x1b\x61\xb4\x22\x83\xfa\x17\x3a\xe6\xf8\x3a\xfe\x2e\x6c\x06\xef\xd6\x68\xb0\xd6\x86\x82\xd4\xa7\x81\xb1\xc7\xc4\x8e\x52\x55\xc0\xe4\x1d\xdb\xda\xbe\x3c\x0c\x13\xfc\x4a\x7b\x9d\x7b\xdb\x3f\xfb\x6a\x34\xa1\x0f\x1e\xf3\x6f\x88\xed\x73\x29\x36\x58\xee\x56\xe6\xf8\x9b\x26\x15\x78\x09\xb6\x01\x83\x31\x05\xc4\xdf\xd7\x8d\x7e\xa3\x56\xa1\xe5\x46\x2c\x43\xdb\xc5\xa8\x3f\x5d\xf5\xb5\x27\x3e\xaa\x8c\x29\xc5\xea\xd9\xff\x34\x68\xb4\xf7\xab\x3f\x21\xda\x81\x7b\xfc\xd3\xa1\x64\xcf\x1d\xde\xc2\x2f\x3f\xe2\x4f\x6f\x70\x70\x2f\x7f\x39\x53\xda\xb8\xe3\xcb\x43\xc8\x57\xa3\x43\x4a\x3b\xf2\x47\x6a\xc0\x89\xec\x01\x85\xee\x05\xd4\xf7\xcc\x61\x1f\x4f\xc1\xef\x57\xe1\x5a\x26\x78\xfc\xb3\xaf\xca\x09\x3c\x09\x54\xca\x93\xe3\xe3\xe3\xf7\xc7\xc7\xc7\x74\xd0\xff\x06\x00\x00\xff\xff\x78\x44\xdb\x85\x95\x29\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xcc\x3a\xed\x72\x1b\x37\x92\xbf\x67\x9e\xa2\x77\x2a\x97\x0c\x2d\x9a\x94\xb2\x89\xaf\x4e\x89\xb6\xca\x61\x62\xc5\x39\xdb\x52\x59\xce\xed\x56\xe9\x54\x5e\x10\xd3\x43\xc2\xc2\x00\x73\x00\x86\x12\xe3\xd5\x03\xdc\x83\xdc\x8b\xdd\x93\x5c\x35\x3e\x66\x86\x14\x9d\x8f\xfb\xb5\xaa\x4a\x4c\x02\xdd\x8d\xfe\xfe\x00\x38\x9f\xaf\xf4\xe9\xb2\x13\xb2\x82\x0f\x36\x9f\xcf\xe1\xa8\xff\x92\xb7\x8c\xdf\xb2\x15\x82\xe9\x94\x13\x0d\xe6\xb9\x68\x5a\x6d\x1c\x94\x79\x56\xc4\xb5\xb9\x50\x0e\x8d\x62\x72\x6e\xb7\xb6\xc8\xf3\xac\x58\x09\xb7\xee\x96\x33\xae\x9b\xf9\x4a\xb7\x6b\x34\x1f\xec\xf0\xe1\x83\x2d\xf2\x49\x9e\x73\xad\xac\x83\xf3\x8b\x8b\x2b\x38\x03\xbb\xb5\x33\xfa\xd8\xaf\x3e\x7f\xbb\xf8\x11\xce\xa0\x20\xe0\xb0\xb6\xd0\x4d\x2b\x24\x1a\x5a\x4d\xb4\x8a\x9c\xb8\x7d\xb7\x46\xf8\xc1\x18\x6d\xc0\x33\x52\x33\x8e\x20\x2a\x54\x4e\xd4\x02\x2d\x30\xe2\x1d\x88\x51\x40\x82\x9a\xe5\x6e\xdb\x3e\xc6\xf8\x98\x67\x7e\x3b\xcf\xb3\xf9\x1c\xde\x06\xd1\x22\x10\x11\x51\xfa\xa9\x6e\xa1\xee\x14\x77\x42\x2b\x58\x76\xce\x03\x5a\x34\x1b\xb4\xe0\x34\x54\xc2\x3a\xa1\x56\x9d\xb0\x6b\xa0\x13\x2c\xb8\x35\x73\xc0\x0c\xf6\x0c\x78\x0c\x7f\x8a\x85\xda\xe8\x06\xb4\xa9\x84\x62\x66\x1b\x17\x4f\x81\x79\x54\x7f\xa2\x07\xde\x65\x1d\x44\x0d\xc2\xc1\x9a\x11\x43\x3b\x2c\x36\xe8\xd6\xba\x9a\xe5\xd9\x78\xb5\x9c\xe4\x0f\x41\x43\x17\xdf\x5f\x94\x0a\x37\xb7\x5a\x39\x76\xeb\x70\x72\x0a\x2f\x15\xb8\x35\x42\xd7\x5a\x67\x90\x35\x53\x70\x6b\x61\xc1\x3a\xd3\x71\x47\xc7\x37\xc8\x94\x23\xb1\x96\x08\x5c\x37\x2d\x73\x62\x29\x91\x88\xdd\x09\xb7\x06\x83\xb5\x44\xee\x66\x86\xd8\x9d\x92\x36\x60\x8d\x06\xe1\x0e\xa1\xb3\x08\x0c\x1a\xa1\x44\xc3\x24\x58\xd7\x2d\x83\x22\x2c\x73\xc2\x7a\x8b\xd0\xc1\xcf\x2f\x5f\x7a\xce\xb6\x2d\x3e\xb7\x16\x0d\x29\x35\x88\x82\xf7\x2d\x72\x67\xa7\x70\xb7\x16\x7c\x4d\x14\xab\xad\x62\x8d\xe0\x4c\xca\x2d\x08\x65\x1d\x53\x4e\x30\x87\x20\x14\x7c\xc6\x3c\x32\x91\x29\x27\xd1\xb2\xef\xfd\xff\x83\x28\x1f\xe9\x5f\xfa\x4f\xa8\x15\x3c\xe4\x39\xd9\x0f\x4a\x07\x4f\x3c\xd0\x24\xee\x94\xe9\x03\xc0\x47\x30\xe8\x3a\xa3\xc0\xcd\x08\xf3\xe1\x11\x46\x7b\xbb\x6a\x99\x5b\x0f\x28\x3d\x46\x51\x40\x50\xf7\xf3\x4f\x88\x25\x99\x50\x64\xb9\x9a\x09\x89\x55\xb0\x34\x4b\x50\x91\xf9\x03\x98\xd1\x28\x1f\xf3\xec\xfd\xe0\xae\x00\x91\xa3\x3c\xe3\x5a\x71\x83\xce\xaf\x0d\xab\x81\x30\x56\xbb\xab\x8d\xb0\x56\xa8\xd5\x6b\xef\x2e\x49\x82\xf9\x1c\xb4\xc2\xe8\x43\xa0\x10\x2b\xac\x60\xb9\x85\x97\xe9\xb4\x29\x44\xbc\xe0\xb5\x8b\x78\x60\xde\x2b\xf4\xc9\x63\xb6\x27\xb0\xeb\x8a\xf0\xb1\x87\x46\x38\x08\x9f\x00\x93\x5e\xf3\xcc\x8b\x0b\xa7\x67\x50\xf4\x82\x17\x79\x26\x6a\xc0\xd9\x48\x15\x7f\x3a\x03\x25\x24\xc1\x47\x84\xb3\x9d\xfd\x59\xb2\x71\x9e\x3d\x90\x5a\x88\x1e\xce\x92\x7a\x46\xbb\x9e\x6e\xaf\xcc\xb3\x81\x6a\xb2\xef\x70\x24\xd7\x6a\x83\xc6\x0a\xad\x4e\xa1\x80\xa3\x90\x46\xe0\x08\x0a\x0a\x1d\x25\xe4\x14\x94\x76\x7e\x87\x59\x7f\x2c\x8f\xc7\x26\xf2\xfb\xc7\xee\xda\xe5\xec\x8c\x9c\x89\x8e\x6e\xec\x6a\x57\xfe\x5f\x3f\x9a\x16\xb8\xa5\x6f\xbb\x1c\xd0\x21\xdc\x12\x5d\x66\x3d\x5d\xca\x2d\xad\xd1\x1b\x51\x21\x58\x29\x56\x6b\x27\xb7\xc0\x25\x32\x83\x26\xe6\x9a\x06\xad\x65\x2b\x24\xe0\x1d\xcd\xcc\x86\x08\xf8\xd3\x8e\x26\x87\x75\x7f\x82\xe7\xfd\xe8\x0c\x0a\x28\x43\x3a\xf4\xbe\x53\x89\xba\x46\x83\xca\x41\xac\x2c\x76\x52\x10\xf4\x03\xa0\xb4\xf8\xfb\x30\x2d\xd7\x6d\x8f\x97\x87\xff\xa2\x8d\x1a\xbb\xf2\xfa\xfe\x6d\x93\x05\x35\x79\x7b\xf5\x8a\x82\xa3\x3c\xcb\x8a\xd3\xde\xdb\x63\x44\xd0\xe6\x9e\x89\x7a\xd7\x17\x4a\xb8\x20\xf1\x07\x7b\x79\xeb\x8d\xf5\xc1\xce\xce\xa5\x5e\x32\x39\x3b\x47\x57\x16\x9f\x25\x41\x8b\x49\x58\xf8\xad\xea\x38\x21\x5a\x89\xc4\x95\x27\xf1\xc1\x5e\x2c\x3f\x20\x77\x97\xce\x14\x53\xf0\x27\x05\x5a\x61\x39\x51\x6e\x9d\x29\x26\x07\xd1\x7d\x6c\x3d\xc2\xf6\xab\xbf\x85\xec\xd6\x46\xdf\x8d\x63\xd9\xd3\x98\xbd\x8c\x45\x3f\x70\x50\x7a\x28\x42\xf7\xad\xc3\x7f\x04\x4d\xc3\x63\x65\xac\x74\xdc\x2b\x26\xb3\xab\x3e\x06\xe6\x73\x60\x1b\x2d\x2a\xa8\x90\x55\xc0\x75\x85\x80\x52\x34\x42\x31\xca\x0f\x79\xb6\x61\x06\x62\x0d\xcc\x33\x84\x33\xf8\xfc\x71\x02\xf9\xf8\x90\x67\xef\x29\xf6\x7b\xdb\x9c\x5f\xbc\xbd\xb8\x78\xb7\x93\x51\x5a\xa3\x39\x5a\x7b\xc0\x4c\x71\xa7\x08\x11\x99\xe0\xce\x3c\xdc\xcf\xaa\xc2\x5a\x28\xac\x76\xd2\xc1\xbc\xf0\xae\x26\x6a\xd8\x10\xbd\x88\x12\xa8\xa1\xda\x24\xbd\x9e\x5f\x5c\xfe\xf8\xc3\xdb\x9f\xae\xde\x07\x76\x8a\xc9\x37\xb0\xa1\xc8\xd9\xa1\xfb\xf9\xe7\xb0\xe9\xf5\x41\xbb\x31\xfe\xe7\x73\x38\xf7\xae\xf1\xd3\xd5\x53\xdb\x22\x17\xb5\x48\x72\xc1\x86\xc9\x0e\xc1\xb1\x5b\xb4\xd0\x1a\xe4\x58\xa1\xe2\x38\x1b\x38\xdc\x8c\x34\x1c\xe3\xeb\xb7\x99\xfd\xe3\x3c\x1e\x3a\x2d\xf4\x46\x5b\x3b\xfb\x1e\x6b\xd6\x49\x77\xae\x8d\xd6\x2e\x44\xdb\x1d\xac\xb4\xc2\x29\x70\xa6\xbe\x70\xbe\x5d\x10\x8e\x82\xaf\x66\x52\x2e\x19\xbf\x05\xa6\xb6\x8d\x36\x24\x49\xec\x5d\x4e\xe1\x0a\x3d\xef\x0c\x96\xe8\x28\xdf\x59\x2d\x3b\xdf\x87\x11\x45\x5f\xb0\x66\x43\xd0\xcf\x3b\x6b\xe6\x52\x73\x26\xe7\x2b\x5d\xf4\xee\xf0\x9d\x41\x76\xdb\x6a\xa1\x7c\xc0\x92\x6c\xdf\xe3\xb2\x5b\xad\x90\x8a\xce\x43\x9e\x93\x93\x95\xfe\xcc\x9f\xd8\x86\x5d\x71\x23\x5a\x97\xfa\x5e\xa8\x34\x5a\x62\x37\x25\x4d\xc6\xbd\x7f\x38\x0d\x52\xdf\x3d\x95\xb8\x41\x09\x78\x8f\x3c\x70\xd5\x6a\x2b\x82\xe7\xce\xe7\xc0\x75\x47\xb1\x62\xa7\x60\x35\xb5\x33\xd8\x74\x92\xda\x17\xb7\xc6\x86\xca\xac\x41\xee\xfb\xc0\x55\x8f\x66\xe1\x0e\xbf\xd8\x20\xa0\x8a\xb8\x58\x81\x08\xc4\x16\x4c\x4a\xcf\x30\x53\x55\xfc\x62\xcb\x49\xdf\x97\x5a\xbf\xce\xac\x15\x2b\x45\x14\xfd\x19\xcc\x2c\x85\x33\xd4\x66\x52\x3a\x5c\xa1\x09\xae\x63\xbd\x82\x3d\xd5\xbf\x86\xb6\x8d\x1a\xb3\x86\xb5\x9e\x06\x7d\xb6\x52\x70\x84\x25\x4a\x7d\x47\x92\x86\x14\xea\x80\x41\x51\x0b\x89\xa7\x52\x28\x2c\x76\x65\x15\xca\x69\x60\xaa\x3f\x28\x6d\x26\x25\x24\xd2\x8a\xe8\x31\x78\x11\x52\x28\xb5\x74\xde\x73\x6f\x95\xbe\x53\x97\xbd\x16\x00\xce\x88\x9f\xeb\x10\xbf\x37\x9d\x50\xae\x75\x3e\xd0\x13\xdd\x45\xd4\x2d\x9c\xc1\xf5\xcd\x13\x22\xf7\xf1\x81\xa6\x0b\x6f\x70\x83\x2b\x61\x1d\x9a\x44\xb0\xa4\xd5\x37\xac\xc1\x98\x10\xa6\x40\x62\xf4\x5f\x48\x1c\x62\x7c\x02\xf1\x20\xf2\xee\x5b\xdc\x52\xbc\x78\xc0\x23\x28\x4e\x7d\xc9\x75\x9a\x95\x04\x1d\x73\x05\x9f\x42\xad\x3b\x55\x11\xe0\xae\x04\xd7\xb7\xb8\xbd\xf9\x26\xee\x8e\x62\xa5\xe5\x3e\x46\x6a\xc2\xf8\xdc\x73\x9d\x67\x99\x62\x0d\x9e\x42\xe2\x71\x9a\x67\x99\xd7\xb2\x3f\x9b\xbe\xd1\x89\xa7\x9e\xcb\xa9\xc7\x6e\x39\xa1\x47\x5e\x4b\x89\xaa\xdc\xd7\x0a\xe5\xe3\x03\x9a\x62\x6d\x8b\xaa\x7a\x04\x3d\x85\x7a\xb2\x6f\x02\x2f\x00\x9c\x79\x86\x07\xde\x43\x9b\x4b\x6a\x48\x3e\x61\xc7\x46\xf7\xa6\x0d\x5a\x9d\xe5\xf3\x79\xee\xdd\x36\xc5\xba\x75\x86\x70\x66\x2f\x49\x89\x13\xea\xe1\xc9\xd3\xfe\x1e\xe3\xec\xef\xa9\x2d\x80\x8a\x72\x1b\x11\xe2\x5b\x2e\x05\x87\x0a\x89\x69\x54\x7c\x3b\x8b\x95\x97\x08\x88\x60\xb0\x21\xc1\x47\x26\xf7\x92\x7b\xc8\x4c\xc5\x64\xf6\x06\xef\x4a\x31\xaa\x3c\x41\x92\x25\xb3\x82\xbf\x30\xe4\x19\x9c\x46\x24\x6a\xd3\xad\xa3\x54\xe4\x8c\x9f\x26\x55\xad\x4d\xe3\x6b\x11\xe0\x3d\xad\x51\x63\xed\xbb\x92\x9f\xae\xc6\x90\xb1\x89\x1f\xd1\x1b\x9a\xf7\x17\xbb\xce\x97\x67\x2f\xc8\xa7\xe8\x2f\x2d\xbc\x22\x07\xa4\x3f\xa1\x5c\x9f\xb5\x68\xec\xf1\x27\x94\xf6\x56\xb4\xe4\xa5\x8d\x70\x41\xea\xeb\x9b\xd1\x41\x1f\xf3\x8c\x00\x68\x98\xa6\x7f\x8e\xe0\x04\xe6\x4f\xfc\xc7\x9d\x76\xee\xc9\x7c\xbc\xd5\x13\xff\xc2\x82\xbe\x53\x50\x13\xa9\x27\xf3\xdc\xfb\xda\xa1\x2a\x99\x3a\x06\xd2\x63\x2c\x19\x1e\xbf\x98\xcc\x28\x19\x95\x85\x6d\xa5\x70\xc5\x14\x8a\xff\x54\xc3\x1a\xa5\x91\x62\xea\x19\x9b\xe4\x99\x3f\xc4\x13\x1f\x0b\x40\x51\x2d\x69\xd1\x1f\x1d\x48\x4b\x54\x2b\xb7\x2e\x26\xd4\x6c\x50\x59\xa9\x69\x04\x26\x98\xe3\x6f\x40\xc0\xb7\x20\xa9\x26\xf9\x0f\xa4\x94\x6f\x40\x1c\x1d\xc5\x31\xa0\xd6\x03\xa9\x97\xaa\xc2\xfb\x52\x4c\xf2\x8c\x82\x81\xd6\x69\x3f\xf1\xd6\x2d\x83\xfa\x8b\xe9\x78\x59\x10\xce\x45\x4d\x82\x94\xe9\xfc\xa3\x93\x4f\x81\x4c\x12\x88\x3f\x83\x51\x38\x50\x8d\xd5\x76\x5f\x29\xa7\xc5\x24\xa7\xb8\x0e\x1a\xe8\x23\x31\x7c\x9f\x8e\xfc\xc6\xf7\xc1\x2f\x7c\xf8\xd3\x9f\xa7\x19\x05\x39\x1e\xdc\x97\xb2\x82\xf7\x9a\xc7\x50\x27\x91\x23\x0f\x92\x5c\xef\xf4\x8f\x49\xce\x1c\xf4\xb2\xff\xf9\x53\x40\xd0\xeb\x67\x97\xaf\x87\xc9\xb8\x11\x0f\x12\xf6\x4e\x1d\xab\x98\xf7\x41\xef\xca\x65\xcb\x53\x26\xfb\x44\x56\x9e\x82\xbe\x85\xa5\xd6\x72\xf2\x2b\xae\x1e\xe8\xee\x3b\xf3\xe0\x70\xfb\xc1\x74\x12\x32\x38\xe5\xce\x00\xe4\xfb\x9a\x93\x71\xaa\x3e\x9e\x42\x51\x4c\xe9\x9f\x9a\x49\x8b\x29\xf3\x9e\x1d\xa8\x2e\x9e\xc2\xf5\xf1\xcd\x2c\xe9\x7b\x0a\xa3\x35\xca\xe2\xa3\xef\xaf\x42\xfd\xe8\x93\xea\x6f\xc1\x4e\xc1\x99\x0e\xf7\x34\x68\x7b\x15\x4e\xa1\xe5\x70\x9d\x4a\x24\xe5\x55\x9f\x74\x3e\x2d\xba\xaf\x17\x7c\x92\xa2\x2a\x1e\x47\x90\x86\xa9\x15\xc6\xd3\xbd\x26\x5a\x7e\x2d\x6e\x3e\x29\xf1\xbe\xb4\x63\xee\x93\x94\x83\x23\x8c\x54\xbd\x2f\x8b\x77\x7c\x5b\xf2\xf0\x6d\x2c\xcc\x93\x17\x3d\x33\x06\x6d\x27\x1d\xb1\x19\xd6\x28\x6d\x90\x00\xef\xbd\x02\x7a\xee\x13\x11\x62\xbf\xee\x94\x87\xef\x14\x7f\xa1\xcd\xe5\x82\xc4\xf6\xf6\x25\x4a\xb3\xfd\x58\xdc\x59\x9e\xc2\x10\x8d\x97\x8b\x10\x65\x40\xc6\x4a\x51\x15\x96\xea\x4e\xf5\x2b\xce\x4f\x98\x75\xa7\x66\x2a\x56\xf1\x51\x1c\xd3\x72\x2a\xe7\xa3\xc0\xa5\xe5\x58\xd7\xb3\xec\x07\xe5\xcc\xf6\x34\x2d\xfb\x6f\x87\x22\xea\xf3\xc0\x28\x29\xd1\xd7\x9c\xa8\xa2\xa1\xde\x44\xc1\xe0\xfa\xc6\x6f\xe5\x19\xef\x8c\x1f\x9f\xc7\xd5\xa5\xe4\x22\x69\x77\x02\x6f\xf0\x9e\x5a\xe3\x60\x9f\x40\x70\x0a\xd4\x89\x0f\x71\x27\x6a\xe0\x62\x96\x28\xfd\xe5\xcc\xdb\x93\x8b\x59\x8a\x9e\x51\xe0\xc4\xac\x3e\x8e\x1b\xdf\xef\xf4\xd0\xd7\x03\xa5\x9b\x3c\x1b\xbe\x1c\x1d\x0d\x69\x63\x3a\x3e\xee\xdb\xbd\xd3\x76\x65\x1f\x89\x7e\xb9\x88\x96\x8a\x1e\x14\x8a\x6f\xb8\x08\xa3\x4f\x79\x6f\xa9\xdf\x59\x8c\x83\x51\xc6\x14\xfb\x19\x73\x31\xbe\xda\x3a\xd7\x78\x3f\xdc\x07\xec\x4e\xbe\xbc\x33\x34\x05\x75\x8e\xba\xe6\x49\x18\xae\x09\xba\x08\x91\xbd\x33\x79\x87\x2c\x1b\x46\xef\x62\x0a\x4a\xc8\xc9\x68\xaa\x7d\xfd\xfc\x6f\x97\x6f\x2f\x16\x57\xa5\x4f\x9d\x3e\xd2\xd3\x1d\xe4\x09\x0c\xac\x58\xbe\xc6\x2a\xf0\xe2\x23\xa3\x61\xb7\x58\xf2\x35\x53\xe9\x6e\xf4\xe1\xd0\x99\x16\xdd\x3b\xd1\xa0\xee\xdc\xc1\x39\x9f\x68\xfb\xf1\x89\x4b\x6d\xb1\xe4\x13\x78\x98\x4c\xe1\x78\x92\x67\xdf\x3e\xe5\x3d\x8f\x6f\xba\x66\x71\xf9\x73\xf9\x49\xe6\xde\x74\x4d\xaf\x8b\xb2\x4f\x56\x87\x7b\xb7\xcf\x9c\x76\x4c\xf6\xe0\xb6\x6f\x07\x92\xf5\x5f\x63\x73\xe5\x98\x1b\xfb\x3e\x8d\xcd\xa8\xd0\xf8\x0b\x68\xe6\x84\x75\x82\xd3\xb8\xf3\x5c\x4a\xcd\x07\xd7\x78\xf6\x15\x50\xf7\xb7\x75\x68\x81\xd1\x16\xa3\xbe\x8e\x46\x14\xeb\x84\x94\xd4\x9c\x76\xe4\xba\xef\x88\x83\x80\xfb\x69\xb4\x12\x37\xa8\x68\x48\xad\x0d\x62\x35\xc9\xb3\xab\xad\x05\x38\x7c\x98\x5e\x52\x93\x99\x7a\x48\xbb\xb5\x0e\x1b\x28\x6d\xd7\x80\xae\xe1\x6f\xf7\xf7\x84\xea\xc7\xae\x49\x9e\xbd\xd2\xfa\xb6\x6b\xed\x2e\x19\xd5\x35\x4b\x34\x04\xed\x07\x5a\x34\x20\x03\x58\x9e\xbd\xf6\x2c\x7d\x12\xbe\x09\xdb\x79\xf6\xc2\x20\xda\x7d\xf6\x06\x38\x92\xc2\x86\xc7\x90\xd7\x4c\xa8\x24\x28\xc5\xcc\x1a\x59\xbb\xab\xd7\x1f\x91\xb5\xbd\x6e\xff\x88\x66\x09\xb1\xd7\xd3\xef\xd1\x52\x40\x79\x59\xc5\x68\xdd\x47\x11\x0a\x04\xed\xd9\x96\x29\x1b\x61\x15\x8d\x1d\x87\x61\x95\x56\x4f\x7b\xf8\x00\xfe\x16\x25\x32\x8b\xd5\x23\x70\x93\x36\x9c\xf6\x23\xcb\xc5\x55\x40\x08\x81\x61\xc7\xf4\xbd\xc7\x8e\x74\x39\x68\x40\x07\xe0\xa0\xd7\x57\xfd\xcd\x41\x2d\xee\xb1\x7a\x6a\xc5\x2f\x29\x8b\x75\x06\x13\x96\x7f\x01\x18\xe9\x7a\x3e\xcf\x82\x48\xc2\x46\xce\x3a\xe2\x4a\xe9\xbb\xb0\x49\xea\xec\xb7\x0e\xa9\x70\x96\x67\x57\xd4\x08\x44\xc5\xec\xcb\xe9\xa9\x2d\xb7\x71\xac\xe9\x99\x88\x48\xd1\x58\x01\x29\xcf\x5e\x5f\xb5\x4c\x3d\x22\xd4\x90\x3a\x07\x49\x6c\x84\xdb\xc7\x5d\x30\xbe\xc6\x80\x3c\xc2\xe5\xb4\xba\x8b\xec\x01\x03\x76\x42\xfe\xae\xe3\xb7\x3f\x32\xbb\xa6\xd5\x01\xb9\x35\xba\x16\x92\x46\xc1\x65\xc7\x6f\xd1\x3f\x95\xad\xc1\xb1\xa5\xc4\x3c\x3b\x5f\x0c\x11\x39\xa0\x9c\x2f\xa0\x41\xc7\x2a\xe6\x58\x9e\x5d\xb8\x35\x9a\x1d\x36\xfd\xe3\x08\xad\xa6\x28\x1d\xe2\x20\x5a\xf1\x9c\x99\x25\x0d\xac\x5c\x4b\x89\xfc\x91\xb9\xa8\xa8\x9e\x2f\x1e\x27\x02\x85\xf7\x2e\xe1\x50\x50\xdd\x51\x58\xac\x7d\x13\x02\x77\x6b\x54\x30\xc4\xd4\xff\xfe\xf7\xff\x84\xe7\x39\xd6\xd0\xa8\x9e\x67\xaf\x98\x3d\x48\x13\x55\x15\x5e\x0b\x75\x0d\x92\xd9\x1d\xfa\xa5\x62\x4a\x5b\xe4\x5a\x55\x16\xac\x50\x1c\xe1\xe4\xdf\xfe\x95\x12\xf7\x25\xeb\x2c\xfa\x14\xf7\xc6\x0e\x0a\xf6\xab\x6f\x92\xbe\xae\xbf\xfc\xfa\xd9\xcd\x70\x10\x17\x86\x77\x92\x19\x58\x76\x75\x1d\x7c\xdc\x20\xa7\x1a\x7d\xbe\x80\x96\x30\xa1\xea\x4c\xd0\x12\xb5\x10\xd6\xa5\x7d\xe6\xe0\xba\xa4\xf4\xbf\x38\xfa\xf2\xeb\xaf\x27\xff\x42\x74\xe3\x61\x3f\xa8\xea\xff\x7b\x58\x12\xdc\xe6\x99\xa7\x0d\x63\xdd\xfc\xf9\x4b\xb2\xfd\xe2\xf2\xe7\x17\x34\xb8\x93\x2e\x6a\xa9\x59\x24\x5e\xa7\x35\x5d\xc3\xe2\xf2\xe7\xa0\xbe\x14\x02\xe7\x0b\xaa\xfc\xe4\x3d\x89\x24\x35\x42\x79\xe6\xef\x0d\xfb\x53\xfc\x9a\x77\x85\x4b\x34\x21\x88\x47\xc9\x72\x2f\x76\xe1\xd9\x09\x45\xe7\x9b\xae\xb9\x12\xbf\xe0\x42\x32\x6b\x43\x2a\xa2\x94\xb2\xf0\x57\xdf\xb3\x3c\xfb\x6e\x4b\xbb\x70\xfd\xec\xe4\x66\x28\x6a\x99\x5f\x1b\x09\xd5\xa7\xfa\x64\xb3\x3e\xa7\xa7\x85\x87\xbe\x22\xbf\x45\x56\xa5\x42\x59\x36\xf0\x24\x7d\x9e\xc4\x72\x79\xe0\x89\xf8\x1d\xb9\x5c\xff\xe0\x2d\x2c\x60\x5d\x93\x33\x6d\x50\x6e\xa1\x53\xa2\x69\x25\x36\xa8\x52\x62\x6f\xd8\xd6\x53\x92\xc8\x7c\x8e\xb4\x42\x92\x8d\x3a\x15\x1e\x74\x49\xa3\xb8\x66\x1b\xa1\x8d\x9d\xc1\x42\x2b\x2b\x2a\x34\xd0\x32\x25\x38\x05\x2c\xde\xb7\x52\x70\xe1\xe4\x76\xd6\x33\x7d\x85\xee\x85\x50\x4c\x8a\x5f\xd0\x94\xf7\x53\xa8\x87\xf7\xfa\x8f\x0f\xff\xac\x9c\x87\x8e\x94\xd8\x1f\x4c\xa7\xc6\xf7\x3e\xa3\xf1\x36\x5c\xb4\xf8\x16\x33\xcf\x74\xcb\xfe\xab\xeb\x1f\xae\x1f\xc8\x3b\x3d\x0b\xda\x3f\xe3\xd6\x02\x65\x15\x7f\x67\x40\x66\xbf\x1b\xbd\x68\x0d\x83\x75\xf9\x3e\x74\xb8\x13\x88\x83\xc3\x70\x97\x99\xba\xb0\xe3\xe1\x1d\xbc\x4e\xc0\xd4\xfd\x52\xc3\x3b\x1a\xc3\x69\x0e\x38\x7c\x3b\x1a\xc6\x80\xfa\xd0\x0b\x29\x0d\xca\x3b\x63\x7f\x98\x76\xa0\xf6\xe3\x4d\xfe\xb0\x7f\x2e\x8d\x8d\xbb\x2f\xbe\x23\xc2\xff\xf8\x07\xd4\x7e\x88\x1a\xbd\x87\xa6\x83\xbe\xed\x94\xbf\xa8\xfc\x4b\xb1\x7b\x1c\x81\xf7\xca\x18\x4f\x7c\x30\x1a\x26\x69\x8f\xce\x0a\x03\xa3\x50\x2e\x4c\x84\xa2\x06\x5a\x8a\x43\xcd\xa3\xbb\xd4\xf4\x1e\x73\xe5\x73\xe7\x1d\xfa\x5f\x76\xd4\xec\x76\x7c\x71\x3f\xba\xeb\xa7\x78\xd6\x4a\x6e\x61\xc3\xa4\xa8\xe0\x8e\x6d\xc9\x78\xa1\x1e\x83\x56\x18\x88\x09\x0b\xd4\xe4\x77\xab\x35\xb0\xe1\x6e\x5f\x9b\x03\x57\xfb\x33\x78\x59\xd3\x8c\x2b\x2c\xe8\xce\x85\xd6\x6f\x97\xc5\x40\x72\xa9\x3b\x4a\xf1\xc2\x41\xd3\x59\xaa\x80\x1b\x84\x25\xa2\x1a\x7a\x01\xa1\xc0\x6a\xaa\x12\xbe\xae\xdd\xb1\x6d\xfa\xad\x85\xb0\x23\xa7\x9f\x05\x72\x2f\x6b\x60\xc1\xd7\xfd\xdb\x87\x7f\x6b\xd2\x4b\x89\x0d\x73\x82\x4f\x49\x0f\x9c\xa9\xe4\x5b\xcc\x1b\xce\x6b\xb8\xff\xfd\x86\x90\x32\x8f\xef\xcd\x68\xfd\xfc\xe9\x2c\xca\x1a\xfc\x8f\x58\x56\xd4\xa5\x0b\x0e\x45\xb4\x67\x31\x88\xeb\xaf\xd2\x94\xe0\x65\x91\x5e\xc0\x4e\xa1\xe5\x67\xfd\x05\xbc\x68\xf9\x24\x3d\xe1\x46\x85\x84\xd9\x5f\xd7\xe1\x16\xfe\xb1\x55\x8a\x9d\x09\x7a\x5f\x7d\xd7\xa2\xe5\x37\x79\x7c\x08\x7a\x8d\xcd\xa5\x6f\x26\xf0\x6d\xf8\xa9\x89\x83\x33\xf8\xfa\xe4\x4b\x78\x02\x27\xc7\x5f\x7e\x35\x24\xa8\xef\xa4\xe6\xb7\x23\xd0\xd2\x44\x78\x72\x98\x51\x22\x7b\xdd\x39\xbc\x8f\x70\xa9\x10\x8d\x60\xe3\x08\xd4\x3f\x78\xbd\x54\x1b\xb4\x4e\xac\xc2\x43\x91\xb0\xde\xfa\xc2\x7d\x61\x89\x6d\x2b\x96\xd2\xdf\x8e\xf7\x99\x6c\x4a\xd9\x20\xe4\xa5\x4a\x93\x47\x5a\x3d\x0d\xf6\xbd\x13\x16\xc1\x60\xa3\x37\x81\x10\x70\xdd\x10\xc6\xf0\x5e\x76\x3c\xb0\xe9\xef\x87\x96\x5d\x0d\xd7\x37\xd4\x0c\x4e\xa9\x90\xc5\xe1\x3f\x32\xf8\xc7\x2e\x85\x7d\x50\xfd\xea\x2b\xea\x4e\xba\xe0\xba\xdd\xd2\xf1\x53\xb0\x3b\x97\x94\xc5\xb0\x30\xba\x79\xf4\x37\xcc\xf1\x66\x76\xb8\x7b\x1c\x06\xe5\x57\x9a\xdf\x5e\x5c\xbd\x5b\x1b\x64\xd5\x78\x48\xff\x59\xc9\xc7\x3b\x1b\xdf\x5f\x8c\x9e\xae\x87\xdf\xc6\x5c\xa1\xa3\x66\x20\xbc\xf4\x47\x1a\x11\xaa\x3c\xf0\xf4\x30\xa6\x32\xd6\xac\x71\xef\x0c\xe3\x94\xee\xc2\x85\x7c\x9f\x90\x29\x64\x1e\x12\x98\x6e\x13\x54\xfc\xfb\xf8\x30\x14\xf0\xb4\x15\xac\xe3\x9f\x2e\xfe\xea\x73\x10\x02\x03\xbe\xd2\x80\x6a\x23\x8c\x56\x64\x5f\xff\x60\xc7\x1c\x5f\xc7\xdf\x96\xcd\xe0\xdd\x1a\x0d\xd6\xda\x50\xcc\xfa\xac\x30\x76\xa0\xd8\x60\xaa\x0a\x98\xbc\x63\x5b\xdb\x57\x8b\x61\xa0\x5f\x69\x6f\x02\xef\x0a\xcf\xbe\x1a\x49\x3c\x38\xd0\xbf\x23\xb6\xcf\xa5\xd8\x60\xb9\x5b\xa8\xe3\xef\xa2\x54\xe0\x25\x98\x0a\x0c\xc6\x8c\x10\x7f\xa3\x37\xfa\x9d\x5b\x85\x96\x1b\xb1\x0c\x5d\x18\xa3\x76\x75\xd5\x97\xa2\xf8\xc6\x32\xa6\x14\x8b\x69\xff\xf3\xa2\xd1\xde\xaf\xfe\x0c\x69\x07\xee\xf1\xcf\x8f\x52\xb1\xd9\xe1\x2d\xfc\x7a\x24\xfe\x7c\x07\x07\x6f\xf3\x77\x35\xa5\x8d\x3b\xbe\x5a\x84\xf4\x35\x3a\xa4\xb4\x23\xf7\xa4\x7e\x9c\xc8\x1e\x50\xe8\x5e\x7c\x7d\xcf\x1c\xf6\xe1\x15\xc2\x60\x15\x6e\x69\x42\x00\x3c\xfb\xaa\x9c\xc0\x93\x40\xa5\x3c\x39\x3e\x3e\x7e\x7f\x7c\x7c\x4c\x07\xfd\x5f\x00\x00\x00\xff\xff\x53\xb5\xf9\x82\xd9\x29\x00\x00"), }, "/src/strings": &vfsgen۰DirInfo{ name: "strings", From 5890279ec7d45df59ad1ab9a6a46082d37394647 Mon Sep 17 00:00:00 2001 From: Nevkontakte Date: Sat, 18 Sep 2021 14:07:47 +0100 Subject: [PATCH 3/3] Update Go version to test against to 1.17.1. --- circle.yml | 2 +- compiler/version_check.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/circle.yml b/circle.yml index 43f50898c..e4fe5b353 100644 --- a/circle.yml +++ b/circle.yml @@ -48,7 +48,7 @@ workflows: parameters: go_version: type: string - default: "1.17" + default: "1.17.1" nvm_version: type: string default: "0.38.0" diff --git a/compiler/version_check.go b/compiler/version_check.go index 7f1039f39..f8ea9a0c4 100644 --- a/compiler/version_check.go +++ b/compiler/version_check.go @@ -13,7 +13,7 @@ import ( ) // Version is the GopherJS compiler version string. -const Version = "1.17.0+go1.17" +const Version = "1.17.0+go1.17.1" // GoVersion is the current Go 1.x version that GopherJS is compatible with. const GoVersion = 17