diff --git a/.std_test_pkg_exclusions b/.std_test_pkg_exclusions index 38ac7786d..7c0737bb3 100644 --- a/.std_test_pkg_exclusions +++ b/.std_test_pkg_exclusions @@ -1,26 +1,12 @@ -context -crypto -crypto/internal/cipherhw crypto/tls -crypto/x509/pkix debug/gosym -debug/plan9obj -encoding +embed/internal/embedtest go/build go/importer go/internal/gccgoimporter go/internal/gcimporter go/internal/srcimporter go/types -hash -image/color/palette -image/internal/imageutil -internal/cpu -internal/goroot -internal/nettrace -internal/poll -internal/race -internal/singleflight internal/syscall/unix internal/syscall/windows internal/syscall/windows/registry @@ -29,7 +15,6 @@ internal/testenv internal/testlog internal/trace internal/x/net/nettest -log log/syslog net net/http @@ -46,7 +31,6 @@ os os/exec os/signal os/signal/internal/pty -os/user plugin runtime runtime/cgo @@ -59,7 +43,5 @@ runtime/pprof/internal/profile runtime/race runtime/trace syscall -testing testing/internal/testdeps -testing/iotest unsafe diff --git a/README.md b/README.md index ed923cffe..1c8c3abab 100644 --- a/README.md +++ b/README.md @@ -7,14 +7,22 @@ GopherJS - A compiler from Go to JavaScript GopherJS compiles Go code ([golang.org](https://golang.org/)) to pure JavaScript code. Its main purpose is to give you the opportunity to write front-end code in Go which will still run in all browsers. +### What's new? + + - 2021-04-04: **Go 1.16 is now officially supported!** 🎉 🎉 🎉 + ### Playground + Give GopherJS a try on the [GopherJS Playground](http://gopherjs.github.io/playground/). ### What is supported? -Nearly everything, including Goroutines ([compatibility table](https://github.com/gopherjs/gopherjs/blob/master/doc/packages.md)). Performance is quite good in most cases, see [HTML5 game engine benchmark](https://ajhager.github.io/engi/demos/botmark.html). Cgo is not supported. + +Nearly everything, including Goroutines ([compatibility documentation](https://github.com/gopherjs/gopherjs/blob/master/doc/compatibility.md)). Performance is quite good in most cases, see [HTML5 game engine benchmark](https://ajhager.github.io/engi/demos/botmark.html). Cgo is not supported. ### Installation and Usage -GopherJS requires Go 1.12 or newer. + +GopherJS [requires Go 1.16 or newer](https://github.com/gopherjs/gopherjs/blob/master/doc/compatibility.md#go-version-compatibility). If you need an older Go +version, you can use an [older Gopher release](https://github.com/gopherjs/gopherjs/releases). Get or update GopherJS and dependencies with: @@ -22,12 +30,12 @@ Get or update GopherJS and dependencies with: go get -u github.com/gopherjs/gopherjs ``` -If your local Go distribution as reported by `go version` is newer than Go 1.12, then you need to set the `GOPHERJS_GOROOT` environment variable to a directory that contains a Go 1.12 distribution. For example: +If your local Go distribution as reported by `go version` is newer than Go 1.16, then you need to set the `GOPHERJS_GOROOT` environment variable to a directory that contains a Go 1.16 distribution. For example: ``` -go get golang.org/dl/go1.12.16 -go1.12.16 download -export GOPHERJS_GOROOT="$(go1.12.16 env GOROOT)" # Also add this line to your .profile or equivalent. +go get golang.org/dl/go1.16.3 +go1.16.3 download +export GOPHERJS_GOROOT="$(go1.16.3 env GOROOT)" # Also add this line to your .profile or equivalent. ``` Now you can use `gopherjs build [package]`, `gopherjs build [files]` or `gopherjs install [package]` which behave similar to the `go` tool. For `main` packages, these commands create a `.js` file and `.js.map` source map in the current directory or in `$GOPATH/bin`. The generated JavaScript file can be used as usual in a website. Use `gopherjs help [command]` to get a list of possible command line flags, e.g. for minification and automatically watching for changes. @@ -131,7 +139,7 @@ For more details see [Jason Stone's blog post](http://legacytotheedge.blogspot.d ### Architecture #### General -GopherJS emulates a 32-bit environment. This means that `int`, `uint` and `uintptr` have a precision of 32 bits. However, the explicit 64-bit integer types `int64` and `uint64` are supported. The `GOARCH` value of GopherJS is "js". You may use it as a build constraint: `// +build js`. +GopherJS emulates a 32-bit environment. This means that `int`, `uint` and `uintptr` have a precision of 32 bits. However, the explicit 64-bit integer types `int64` and `uint64` are supported. The `GOARCH` value of GopherJS is "js". You may use it as a build constraint: `// +build js,-wasm`. #### Application Lifecycle diff --git a/build/build.go b/build/build.go index 6761d7d4e..7a8acc1e3 100644 --- a/build/build.go +++ b/build/build.go @@ -175,14 +175,22 @@ func importWithSrcDir(bctx build.Context, path string, srcDir string, mode build switch path { case "os": pkg.GoFiles = excludeExecutable(pkg.GoFiles) // Need to exclude executable implementation files, because some of them contain package scope variables that perform (indirectly) syscalls on init. + // Prefer dirent_js.go version, since it targets a similar environment to + // ours. Arguably this file should be excluded by the build tags (see + // https://github.com/gopherjs/gopherjs/issues/693). + pkg.GoFiles = exclude(pkg.GoFiles, "dirent_linux.go") case "runtime": - pkg.GoFiles = []string{"error.go"} + pkg.GoFiles = []string{} // Package sources are completely replaced in natives. case "runtime/internal/sys": pkg.GoFiles = []string{fmt.Sprintf("zgoos_%s.go", bctx.GOOS), "zversion.go"} case "runtime/pprof": pkg.GoFiles = nil case "internal/poll": pkg.GoFiles = exclude(pkg.GoFiles, "fd_poll_runtime.go") + case "sync": + // GopherJS completely replaces sync.Pool implementation with a simpler one, + // since it always executes in a single-threaded environment. + pkg.GoFiles = exclude(pkg.GoFiles, "pool.go") case "crypto/rand": pkg.GoFiles = []string{"rand.go", "util.go"} pkg.TestGoFiles = exclude(pkg.TestGoFiles, "rand_linux_test.go") // Don't want linux-specific tests (since linux-specific package files are excluded too). @@ -398,7 +406,7 @@ func parseAndAugment(bctx *build.Context, pkg *build.Package, isTest bool, fileS } switch pkg.ImportPath { - case "crypto/rand", "encoding/gob", "encoding/json", "expvar", "go/token", "log", "math/big", "math/rand", "regexp", "testing", "time": + case "crypto/rand", "encoding/gob", "encoding/json", "expvar", "go/token", "log", "math/big", "math/rand", "regexp", "time": for _, spec := range file.Imports { path, _ := strconv.Unquote(spec.Path.Value) if path == "sync" { diff --git a/circle.yml b/circle.yml index 9c90fb65d..f5ea96494 100644 --- a/circle.yml +++ b/circle.yml @@ -4,21 +4,24 @@ jobs: docker: - image: ubuntu:18.04 environment: - SOURCE_MAP_SUPPORT: false + SOURCE_MAP_SUPPORT: true + GO111MODULE: "off" # Until issue #855 is fixed, we operate in GOPATH mode. working_directory: ~/go/src/github.com/gopherjs/gopherjs steps: - run: apt-get update && apt-get install -y sudo curl git python make g++ - checkout - run: git clone https://github.com/creationix/nvm $HOME/.nvm && cd $HOME/.nvm && git checkout v0.33.9 && echo 'export NVM_DIR="$HOME/.nvm"' >> $BASH_ENV && echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> $BASH_ENV - run: nvm install 10.0.0 && nvm alias default 10.0.0 - - run: cd /usr/local && sudo rm -rf go && curl https://storage.googleapis.com/golang/go1.12.17.linux-amd64.tar.gz | sudo tar -xz + - run: echo export "NODE_PATH='$(npm root --global)'" >> $BASH_ENV # Make nodejs able to require globally installed modules from any working path. + - run: env + - run: cd /usr/local && sudo rm -rf go && curl https://storage.googleapis.com/golang/go1.16.3.linux-amd64.tar.gz | sudo tar -xz - run: echo 'export PATH="$PATH:/usr/local/go/bin:$HOME/go/bin"' >> $BASH_ENV - run: go get -t -d -v ./... - run: go install -v - run: npm install # Install our (dev) dependencies from package.json. + - run: npm install --global source-map-support # Required by standard library tests. - run: npm install --global node-gyp@5.1.1 - - run: cd node-syscall && node-gyp rebuild && mkdir -p ~/.node_libraries && cp build/Release/syscall.node ~/.node_libraries/syscall.node - + - run: cd node-syscall && node-gyp rebuild && mkdir -p $NODE_PATH && cp build/Release/syscall.node $NODE_PATH/syscall.node - run: go generate github.com/gopherjs/gopherjs/compiler/prelude - run: diff -u <(echo -n) <(git status --porcelain) - run: diff -u <(echo -n) <(gofmt -d .) diff --git a/compiler/astutil/astutil.go b/compiler/astutil/astutil.go index 7cd93b3dd..f8f73944d 100644 --- a/compiler/astutil/astutil.go +++ b/compiler/astutil/astutil.go @@ -46,3 +46,12 @@ func IsTypeExpr(expr ast.Expr, info *types.Info) bool { return false } } + +func ImportsUnsafe(file *ast.File) bool { + for _, imp := range file.Imports { + if imp.Path.Value == `"unsafe"` { + return true + } + } + return false +} diff --git a/compiler/astutil/astutil_test.go b/compiler/astutil/astutil_test.go new file mode 100644 index 000000000..55f955650 --- /dev/null +++ b/compiler/astutil/astutil_test.go @@ -0,0 +1,55 @@ +package astutil + +import ( + "go/parser" + "go/token" + "testing" +) + +func TestImportsUnsafe(t *testing.T) { + tests := []struct { + desc string + imports string + want bool + }{ + { + desc: "no imports", + imports: "", + want: false, + }, { + desc: "other imports", + imports: `import "some/other/package"`, + want: false, + }, { + desc: "only unsafe", + imports: `import "unsafe"`, + want: true, + }, { + desc: "multi-import decl", + imports: `import ( + "some/other/package" + "unsafe" + )`, + want: true, + }, { + desc: "two import decls", + imports: `import "some/other/package" + import "unsafe"`, + want: true, + }, + } + for _, test := range tests { + t.Run(test.desc, func(t *testing.T) { + src := "package testpackage\n\n" + test.imports + fset := token.NewFileSet() + file, err := parser.ParseFile(fset, "test.go", src, parser.ParseComments) + if err != nil { + t.Fatalf("Failed to parse test source: %s", err) + } + got := ImportsUnsafe(file) + if got != test.want { + t.Fatalf("ImportsUnsafe() returned %t, want %t", got, test.want) + } + }) + } +} diff --git a/compiler/compiler.go b/compiler/compiler.go index 81acc872d..668aeb5ef 100644 --- a/compiler/compiler.go +++ b/compiler/compiler.go @@ -1,3 +1,8 @@ +// Package compiler implements GopherJS compiler logic. +// +// WARNING: This package's API is treated as internal and currently doesn't +// provide any API stability guarantee, use it at your own risk. If you need a +// stable interface, prefer invoking the gopherjs CLI tool as a subprocess. package compiler import ( @@ -27,31 +32,98 @@ func init() { type ErrorList []error func (err ErrorList) Error() string { - return err[0].Error() + if len(err) == 0 { + return "" + } + return fmt.Sprintf("%s (and %d more errors)", err[0].Error(), len(err[1:])) +} + +func (err ErrorList) Normalize() error { + if len(err) == 0 { + return nil + } + return err } +// Archive contains intermediate build outputs of a single package. +// +// This is a logical equivalent of an object file in traditional compilers. type Archive struct { - ImportPath string - Name string - Imports []string - ExportData []byte + // Package's full import path, e.g. "some/package/name". + ImportPath string + // Package's name as per "package" statement at the top of a source file. + // Usually matches the last component of import path, but may differ in + // certain cases (e.g. main or test packages). + Name string + // A list of full package import paths that the current package imports across + // all source files. See go/types.Package.Imports(). + Imports []string + // Serialized contents of go/types.Package in a binary format. This information + // is used by the compiler to type-check packages that import this one. See + // gcexportdata.Write(). + // + // TODO(nevkontakte): It would be more convenient to store go/types.Package + // itself and only serialize it when writing the archive onto disk. + ExportData []byte + // Compiled package-level symbols. Declarations []*Decl - IncJSCode []byte - FileSet []byte - Minified bool + // Concatenated contents of all raw .inc.js of the package. + IncJSCode []byte + // JSON-serialized contents of go/token.FileSet. This is used to obtain source + // code locations for various symbols (e.g. for sourcemap generation). See + // token.FileSet.Write(). + // + // TODO(nevkontakte): This is also more convenient to store as the original + // object and only serialize before writing onto disk. + FileSet []byte + // Whether or not the package was compiled with minification enabled. + Minified bool + // A list of go:linkname directives encountered in the package. + GoLinknames []GoLinkname } +// Decl represents a package-level symbol (e.g. a function, variable or type). +// +// It contains code generated by the compiler for this specific symbol, which is +// grouped by the execution stage it belongs to in the JavaScript runtime. type Decl struct { - FullName string - Vars []string - DeclCode []byte - MethodListCode []byte - TypeInitCode []byte - InitCode []byte + // The package- or receiver-type-qualified name of function or method obj. + // See go/types.Func.FullName(). + FullName string + // A logical equivalent of a symbol name in an object file in the traditional + // Go compiler/linker toolchain. Used by GopherJS to support go:linkname + // directives. Must be set for decls that are supported by go:linkname + // implementation. + LinkingName SymName + // A list of package-level JavaScript variable names this symbol needs to declare. + Vars []string + // JavaScript code that declares basic information about a symbol. For a type + // it configures basic information about the type and its identity. For a function + // or method it contains its compiled body. + DeclCode []byte + // JavaScript code that initializes reflection metadata about type's method list. + MethodListCode []byte + // JavaScript code that initializes the rest of reflection metadata about a type + // (e.g. struct fields, array type sizes, element types, etc.). + TypeInitCode []byte + // JavaScript code that needs to be executed during the package init phase to + // set the symbol up (e.g. initialize package-level variable value). + InitCode []byte + // Symbol's identifier used by the dead-code elimination logic, not including + // package path. If empty, the symbol is assumed to be alive and will not be + // eliminated. For methods it is the same as its receiver type identifier. DceObjectFilter string + // The second part of the identified used by dead-code elimination for methods. + // Empty for other types of symbols. DceMethodFilter string - DceDeps []string - Blocking bool + // List of fully qualified (including package path) DCE symbol identifiers the + // symbol depends on for dead code elimination purposes. + DceDeps []string + // Set to true if a function performs a blocking operation (I/O or + // synchronization). The compiler will have to generate function code such + // that it can be resumed after a blocking operation completes without + // blocking the main thread in the meantime. + Blocking bool } type Dependency struct { @@ -105,14 +177,29 @@ func WriteProgramCode(pkgs []*Archive, w *SourceMapFilter) error { mainPkg := pkgs[len(pkgs)-1] minify := mainPkg.Minified + // Aggregate all go:linkname directives in the program together. + gls := goLinknameSet{} + for _, pkg := range pkgs { + gls.Add(pkg.GoLinknames) + } + byFilter := make(map[string][]*dceInfo) - var pendingDecls []*Decl + var pendingDecls []*Decl // A queue of live decls to find other live decls. for _, pkg := range pkgs { for _, d := range pkg.Declarations { if d.DceObjectFilter == "" && d.DceMethodFilter == "" { + // This is an entry point (like main() or init() functions) or a variable + // initializer which has a side effect, consider it live. pendingDecls = append(pendingDecls, d) continue } + if gls.IsImplementation(d.LinkingName) { + // If a decl is referenced by a go:linkname directive, we just assume + // it's not dead. + // TODO(nevkontakte): This is a safe, but imprecise assumption. We should + // try and trace whether the referencing functions are actually live. + pendingDecls = append(pendingDecls, d) + } info := &dceInfo{decl: d} if d.DceObjectFilter != "" { info.objectFilter = pkg.ImportPath + "." + d.DceObjectFilter @@ -125,13 +212,15 @@ func WriteProgramCode(pkgs []*Archive, w *SourceMapFilter) error { } } - dceSelection := make(map[*Decl]struct{}) + dceSelection := make(map[*Decl]struct{}) // Known live decls. for len(pendingDecls) != 0 { d := pendingDecls[len(pendingDecls)-1] pendingDecls = pendingDecls[:len(pendingDecls)-1] - dceSelection[d] = struct{}{} + dceSelection[d] = struct{}{} // Mark the decl as live. + // Consider all decls the current one is known to depend on and possible add + // them to the live queue. for _, dep := range d.DceDeps { if infos, ok := byFilter[dep]; ok { delete(byFilter, dep) @@ -166,19 +255,19 @@ func WriteProgramCode(pkgs []*Archive, w *SourceMapFilter) error { // write packages for _, pkg := range pkgs { - if err := WritePkgCode(pkg, dceSelection, minify, w); err != nil { + if err := WritePkgCode(pkg, dceSelection, gls, minify, w); err != nil { return err } } - if _, err := w.Write([]byte("$synthesizeMethods();\nvar $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();var $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 } -func WritePkgCode(pkg *Archive, dceSelection map[*Decl]struct{}, minify bool, w *SourceMapFilter) error { +func WritePkgCode(pkg *Archive, dceSelection map[*Decl]struct{}, gls goLinknameSet, minify bool, w *SourceMapFilter) error { if w.MappingCallback != nil && pkg.FileSet != nil { w.fileSet = token.NewFileSet() if err := w.fileSet.Read(json.NewDecoder(bytes.NewReader(pkg.FileSet)).Decode); err != nil { @@ -206,6 +295,15 @@ func WritePkgCode(pkg *Archive, dceSelection map[*Decl]struct{}, minify bool, w if _, err := w.Write(d.DeclCode); err != nil { return err } + if gls.IsImplementation(d.LinkingName) { + // This decl is referenced by a go:linkname directive, expose it to external + // callers via $linkname object (declared in prelude). We are not using + // $pkg to avoid clashes with exported symbols. + code := fmt.Sprintf("\t$linknames[%q] = %s;\n", d.LinkingName.String(), d.Vars[0]) + if _, err := w.Write(removeWhitespace([]byte(code), minify)); err != nil { + return err + } + } } for _, d := range filteredDecls { if _, err := w.Write(d.MethodListCode); err != nil { @@ -218,6 +316,29 @@ func WritePkgCode(pkg *Archive, dceSelection map[*Decl]struct{}, minify bool, w } } + { + // Set up all functions which package declares, but which implementation + // comes from elsewhere via a go:linkname compiler directive. This code + // needs to be executed after all $packages entries were defined, since such + // reference may go in a direction opposite of the import graph. It also + // needs to run before any initializer code runs, since that code may invoke + // linknamed function. + lines := []string{} + for _, d := range filteredDecls { + impl, found := gls.FindImplementation(d.LinkingName) + if !found { + continue // The symbol is not affected by a go:linkname directive. + } + lines = append(lines, fmt.Sprintf("\t\t%s = $linknames[%q];\n", d.Vars[0], impl.String())) + } + if len(lines) > 0 { + code := fmt.Sprintf("\t$pkg.$initLinknames = function() {\n%s};\n", strings.Join(lines, "")) + if _, err := w.Write(removeWhitespace([]byte(code), minify)); err != nil { + return err + } + } + } + if _, err := w.Write(removeWhitespace([]byte("\t$init = function() {\n\t\t$pkg.$init = function() {};\n\t\t/* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:\n"), minify)); err != nil { return err } diff --git a/compiler/expressions.go b/compiler/expressions.go index 42fe624b6..4b8d377e3 100644 --- a/compiler/expressions.go +++ b/compiler/expressions.go @@ -32,13 +32,13 @@ func (e *expression) StringWithParens() string { return e.str } -func (c *funcContext) translateExpr(expr ast.Expr) *expression { - exprType := c.p.TypeOf(expr) - if value := c.p.Types[expr].Value; value != nil { +func (fc *funcContext) translateExpr(expr ast.Expr) *expression { + exprType := fc.pkgCtx.TypeOf(expr) + if value := fc.pkgCtx.Types[expr].Value; value != nil { basic := exprType.Underlying().(*types.Basic) switch { case isBoolean(basic): - return c.formatExpr("%s", strconv.FormatBool(constant.BoolVal(value))) + return fc.formatExpr("%s", strconv.FormatBool(constant.BoolVal(value))) case isInteger(basic): if is64Bit(basic) { if basic.Kind() == types.Int64 { @@ -46,31 +46,31 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { if !ok { panic("could not get exact uint") } - return c.formatExpr("new %s(%s, %s)", c.typeName(exprType), strconv.FormatInt(d>>32, 10), strconv.FormatUint(uint64(d)&(1<<32-1), 10)) + return fc.formatExpr("new %s(%s, %s)", fc.typeName(exprType), strconv.FormatInt(d>>32, 10), strconv.FormatUint(uint64(d)&(1<<32-1), 10)) } d, ok := constant.Uint64Val(constant.ToInt(value)) if !ok { panic("could not get exact uint") } - return c.formatExpr("new %s(%s, %s)", c.typeName(exprType), strconv.FormatUint(d>>32, 10), strconv.FormatUint(d&(1<<32-1), 10)) + return fc.formatExpr("new %s(%s, %s)", fc.typeName(exprType), strconv.FormatUint(d>>32, 10), strconv.FormatUint(d&(1<<32-1), 10)) } d, ok := constant.Int64Val(constant.ToInt(value)) if !ok { panic("could not get exact int") } - return c.formatExpr("%s", strconv.FormatInt(d, 10)) + return fc.formatExpr("%s", strconv.FormatInt(d, 10)) case isFloat(basic): f, _ := constant.Float64Val(value) - return c.formatExpr("%s", strconv.FormatFloat(f, 'g', -1, 64)) + return fc.formatExpr("%s", strconv.FormatFloat(f, 'g', -1, 64)) case isComplex(basic): r, _ := constant.Float64Val(constant.Real(value)) i, _ := constant.Float64Val(constant.Imag(value)) if basic.Kind() == types.UntypedComplex { exprType = types.Typ[types.Complex128] } - return c.formatExpr("new %s(%s, %s)", c.typeName(exprType), strconv.FormatFloat(r, 'g', -1, 64), strconv.FormatFloat(i, 'g', -1, 64)) + return fc.formatExpr("new %s(%s, %s)", fc.typeName(exprType), strconv.FormatFloat(r, 'g', -1, 64), strconv.FormatFloat(i, 'g', -1, 64)) case isString(basic): - return c.formatExpr("%s", encodeString(constant.StringVal(value))) + return fc.formatExpr("%s", encodeString(constant.StringVal(value))) default: panic("Unhandled constant type: " + basic.String()) } @@ -79,22 +79,22 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { var obj types.Object switch e := expr.(type) { case *ast.SelectorExpr: - obj = c.p.Uses[e.Sel] + obj = fc.pkgCtx.Uses[e.Sel] case *ast.Ident: - obj = c.p.Defs[e] + obj = fc.pkgCtx.Defs[e] if obj == nil { - obj = c.p.Uses[e] + obj = fc.pkgCtx.Uses[e] } } if obj != nil && typesutil.IsJsPackage(obj.Pkg()) { switch obj.Name() { case "Global": - return c.formatExpr("$global") + return fc.formatExpr("$global") case "Module": - return c.formatExpr("$module") + return fc.formatExpr("$module") case "Undefined": - return c.formatExpr("undefined") + return fc.formatExpr("undefined") } } @@ -107,10 +107,10 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { collectIndexedElements := func(elementType types.Type) []string { var elements []string i := 0 - zero := c.translateExpr(c.zeroValue(elementType)).String() + zero := fc.translateExpr(fc.zeroValue(elementType)).String() for _, element := range e.Elts { if kve, isKve := element.(*ast.KeyValueExpr); isKve { - key, ok := constant.Int64Val(constant.ToInt(c.p.Types[kve.Key].Value)) + key, ok := constant.Int64Val(constant.ToInt(fc.pkgCtx.Types[kve.Key].Value)) if !ok { panic("could not get exact int") } @@ -120,7 +120,7 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { for len(elements) <= i { elements = append(elements, zero) } - elements[i] = c.translateImplicitConversionWithCloning(element, elementType).String() + elements[i] = fc.translateImplicitConversionWithCloning(element, elementType).String() i++ } return elements @@ -130,22 +130,22 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { case *types.Array: elements := collectIndexedElements(t.Elem()) if len(elements) == 0 { - return c.formatExpr("%s.zero()", c.typeName(t)) + return fc.formatExpr("%s.zero()", fc.typeName(t)) } - zero := c.translateExpr(c.zeroValue(t.Elem())).String() + zero := fc.translateExpr(fc.zeroValue(t.Elem())).String() for len(elements) < int(t.Len()) { elements = append(elements, zero) } - return c.formatExpr(`$toNativeArray(%s, [%s])`, typeKind(t.Elem()), strings.Join(elements, ", ")) + return fc.formatExpr(`$toNativeArray(%s, [%s])`, typeKind(t.Elem()), strings.Join(elements, ", ")) case *types.Slice: - return c.formatExpr("new %s([%s])", c.typeName(exprType), strings.Join(collectIndexedElements(t.Elem()), ", ")) + return fc.formatExpr("new %s([%s])", fc.typeName(exprType), strings.Join(collectIndexedElements(t.Elem()), ", ")) case *types.Map: entries := make([]string, len(e.Elts)) for i, element := range e.Elts { kve := element.(*ast.KeyValueExpr) - entries[i] = fmt.Sprintf("{ k: %s, v: %s }", c.translateImplicitConversionWithCloning(kve.Key, t.Key()), c.translateImplicitConversionWithCloning(kve.Value, t.Elem())) + entries[i] = fmt.Sprintf("{ k: %s, v: %s }", fc.translateImplicitConversionWithCloning(kve.Key, t.Key()), fc.translateImplicitConversionWithCloning(kve.Value, t.Elem())) } - return c.formatExpr("$makeMap(%s.keyFor, [%s])", c.typeName(t.Key()), strings.Join(entries, ", ")) + return fc.formatExpr("$makeMap(%s.keyFor, [%s])", fc.typeName(t.Key()), strings.Join(entries, ", ")) case *types.Struct: elements := make([]string, t.NumFields()) isKeyValue := true @@ -154,134 +154,134 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { } if !isKeyValue { for i, element := range e.Elts { - elements[i] = c.translateImplicitConversionWithCloning(element, t.Field(i).Type()).String() + elements[i] = fc.translateImplicitConversionWithCloning(element, t.Field(i).Type()).String() } } if isKeyValue { for i := range elements { - elements[i] = c.translateExpr(c.zeroValue(t.Field(i).Type())).String() + elements[i] = fc.translateExpr(fc.zeroValue(t.Field(i).Type())).String() } for _, element := range e.Elts { kve := element.(*ast.KeyValueExpr) for j := range elements { if kve.Key.(*ast.Ident).Name == t.Field(j).Name() { - elements[j] = c.translateImplicitConversionWithCloning(kve.Value, t.Field(j).Type()).String() + elements[j] = fc.translateImplicitConversionWithCloning(kve.Value, t.Field(j).Type()).String() break } } } } - return c.formatExpr("new %s.ptr(%s)", c.typeName(exprType), strings.Join(elements, ", ")) + return fc.formatExpr("new %s.ptr(%s)", fc.typeName(exprType), strings.Join(elements, ", ")) default: panic(fmt.Sprintf("Unhandled CompositeLit type: %T\n", t)) } case *ast.FuncLit: - _, fun := translateFunction(e.Type, nil, e.Body, c, exprType.(*types.Signature), c.p.FuncLitInfos[e], "") - if len(c.p.escapingVars) != 0 { - names := make([]string, 0, len(c.p.escapingVars)) - for obj := range c.p.escapingVars { - names = append(names, c.p.objectNames[obj]) + _, fun := translateFunction(e.Type, nil, e.Body, fc, exprType.(*types.Signature), fc.pkgCtx.FuncLitInfos[e], "") + if len(fc.pkgCtx.escapingVars) != 0 { + names := make([]string, 0, len(fc.pkgCtx.escapingVars)) + for obj := range fc.pkgCtx.escapingVars { + names = append(names, fc.pkgCtx.objectNames[obj]) } sort.Strings(names) list := strings.Join(names, ", ") - return c.formatExpr("(function(%s) { return %s; })(%s)", list, fun, list) + return fc.formatExpr("(function(%s) { return %s; })(%s)", list, fun, list) } - return c.formatExpr("(%s)", fun) + return fc.formatExpr("(%s)", fun) case *ast.UnaryExpr: - t := c.p.TypeOf(e.X) + t := fc.pkgCtx.TypeOf(e.X) switch e.Op { case token.AND: if typesutil.IsJsObject(exprType) { - return c.formatExpr("%e.object", e.X) + return fc.formatExpr("%e.object", e.X) } switch t.Underlying().(type) { case *types.Struct, *types.Array: - return c.translateExpr(e.X) + return fc.translateExpr(e.X) } switch x := astutil.RemoveParens(e.X).(type) { case *ast.CompositeLit: - return c.formatExpr("$newDataPointer(%e, %s)", x, c.typeName(c.p.TypeOf(e))) + return fc.formatExpr("$newDataPointer(%e, %s)", x, fc.typeName(fc.pkgCtx.TypeOf(e))) case *ast.Ident: - obj := c.p.Uses[x].(*types.Var) - if c.p.escapingVars[obj] { - return c.formatExpr("(%1s.$ptr || (%1s.$ptr = new %2s(function() { return this.$target[0]; }, function($v) { this.$target[0] = $v; }, %1s)))", c.p.objectNames[obj], c.typeName(exprType)) + obj := fc.pkgCtx.Uses[x].(*types.Var) + if fc.pkgCtx.escapingVars[obj] { + return fc.formatExpr("(%1s.$ptr || (%1s.$ptr = new %2s(function() { return this.$target[0]; }, function($v) { this.$target[0] = $v; }, %1s)))", fc.pkgCtx.objectNames[obj], fc.typeName(exprType)) } - return c.formatExpr(`(%1s || (%1s = new %2s(function() { return %3s; }, function($v) { %4s })))`, c.varPtrName(obj), c.typeName(exprType), c.objectName(obj), c.translateAssign(x, c.newIdent("$v", exprType), false)) + return fc.formatExpr(`(%1s || (%1s = new %2s(function() { return %3s; }, function($v) { %4s })))`, fc.varPtrName(obj), fc.typeName(exprType), fc.objectName(obj), fc.translateAssign(x, fc.newIdent("$v", exprType), false)) case *ast.SelectorExpr: - sel, ok := c.p.SelectionOf(x) + sel, ok := fc.pkgCtx.SelectionOf(x) if !ok { // qualified identifier - obj := c.p.Uses[x.Sel].(*types.Var) - return c.formatExpr(`(%1s || (%1s = new %2s(function() { return %3s; }, function($v) { %4s })))`, c.varPtrName(obj), c.typeName(exprType), c.objectName(obj), c.translateAssign(x, c.newIdent("$v", exprType), false)) + obj := fc.pkgCtx.Uses[x.Sel].(*types.Var) + return fc.formatExpr(`(%1s || (%1s = new %2s(function() { return %3s; }, function($v) { %4s })))`, fc.varPtrName(obj), fc.typeName(exprType), fc.objectName(obj), fc.translateAssign(x, fc.newIdent("$v", exprType), false)) } - newSel := &ast.SelectorExpr{X: c.newIdent("this.$target", c.p.TypeOf(x.X)), Sel: x.Sel} - c.setType(newSel, exprType) - c.p.additionalSelections[newSel] = sel - return c.formatExpr("(%1e.$ptr_%2s || (%1e.$ptr_%2s = new %3s(function() { return %4e; }, function($v) { %5s }, %1e)))", x.X, x.Sel.Name, c.typeName(exprType), newSel, c.translateAssign(newSel, c.newIdent("$v", exprType), false)) + newSel := &ast.SelectorExpr{X: fc.newIdent("this.$target", fc.pkgCtx.TypeOf(x.X)), Sel: x.Sel} + fc.setType(newSel, exprType) + fc.pkgCtx.additionalSelections[newSel] = sel + return fc.formatExpr("(%1e.$ptr_%2s || (%1e.$ptr_%2s = new %3s(function() { return %4e; }, function($v) { %5s }, %1e)))", x.X, x.Sel.Name, fc.typeName(exprType), newSel, fc.translateAssign(newSel, fc.newIdent("$v", exprType), false)) case *ast.IndexExpr: - if _, ok := c.p.TypeOf(x.X).Underlying().(*types.Slice); ok { - return c.formatExpr("$indexPtr(%1e.$array, %1e.$offset + %2e, %3s)", x.X, x.Index, c.typeName(exprType)) + if _, ok := fc.pkgCtx.TypeOf(x.X).Underlying().(*types.Slice); ok { + return fc.formatExpr("$indexPtr(%1e.$array, %1e.$offset + %2e, %3s)", x.X, x.Index, fc.typeName(exprType)) } - return c.formatExpr("$indexPtr(%e, %e, %s)", x.X, x.Index, c.typeName(exprType)) + return fc.formatExpr("$indexPtr(%e, %e, %s)", x.X, x.Index, fc.typeName(exprType)) case *ast.StarExpr: - return c.translateExpr(x.X) + return fc.translateExpr(x.X) default: panic(fmt.Sprintf("Unhandled: %T\n", x)) } case token.ARROW: call := &ast.CallExpr{ - Fun: c.newIdent("$recv", types.NewSignature(nil, types.NewTuple(types.NewVar(0, nil, "", t)), types.NewTuple(types.NewVar(0, nil, "", exprType), types.NewVar(0, nil, "", types.Typ[types.Bool])), false)), + Fun: fc.newIdent("$recv", types.NewSignature(nil, types.NewTuple(types.NewVar(0, nil, "", t)), types.NewTuple(types.NewVar(0, nil, "", exprType), types.NewVar(0, nil, "", types.Typ[types.Bool])), false)), Args: []ast.Expr{e.X}, } - c.Blocking[call] = true + fc.Blocking[call] = true if _, isTuple := exprType.(*types.Tuple); isTuple { - return c.formatExpr("%e", call) + return fc.formatExpr("%e", call) } - return c.formatExpr("%e[0]", call) + return fc.formatExpr("%e[0]", call) } basic := t.Underlying().(*types.Basic) switch e.Op { case token.ADD: - return c.translateExpr(e.X) + return fc.translateExpr(e.X) case token.SUB: switch { case is64Bit(basic): - return c.formatExpr("new %1s(-%2h, -%2l)", c.typeName(t), e.X) + return fc.formatExpr("new %1s(-%2h, -%2l)", fc.typeName(t), e.X) case isComplex(basic): - return c.formatExpr("new %1s(-%2r, -%2i)", c.typeName(t), e.X) + return fc.formatExpr("new %1s(-%2r, -%2i)", fc.typeName(t), e.X) case isUnsigned(basic): - return c.fixNumber(c.formatExpr("-%e", e.X), basic) + return fc.fixNumber(fc.formatExpr("-%e", e.X), basic) default: - return c.formatExpr("-%e", e.X) + return fc.formatExpr("-%e", e.X) } case token.XOR: if is64Bit(basic) { - return c.formatExpr("new %1s(~%2h, ~%2l >>> 0)", c.typeName(t), e.X) + return fc.formatExpr("new %1s(~%2h, ~%2l >>> 0)", fc.typeName(t), e.X) } - return c.fixNumber(c.formatExpr("~%e", e.X), basic) + return fc.fixNumber(fc.formatExpr("~%e", e.X), basic) case token.NOT: - return c.formatExpr("!%e", e.X) + return fc.formatExpr("!%e", e.X) default: panic(e.Op) } case *ast.BinaryExpr: if e.Op == token.NEQ { - return c.formatExpr("!(%s)", c.translateExpr(&ast.BinaryExpr{ + return fc.formatExpr("!(%s)", fc.translateExpr(&ast.BinaryExpr{ X: e.X, Op: token.EQL, Y: e.Y, })) } - t := c.p.TypeOf(e.X) - t2 := c.p.TypeOf(e.Y) + t := fc.pkgCtx.TypeOf(e.X) + t2 := fc.pkgCtx.TypeOf(e.Y) _, isInterface := t2.Underlying().(*types.Interface) if isInterface || types.Identical(t, types.Typ[types.UntypedNil]) { t = t2 @@ -291,31 +291,31 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { if is64Bit(basic) { switch e.Op { case token.MUL: - return c.formatExpr("$mul64(%e, %e)", e.X, e.Y) + return fc.formatExpr("$mul64(%e, %e)", e.X, e.Y) case token.QUO: - return c.formatExpr("$div64(%e, %e, false)", e.X, e.Y) + return fc.formatExpr("$div64(%e, %e, false)", e.X, e.Y) case token.REM: - return c.formatExpr("$div64(%e, %e, true)", e.X, e.Y) + return fc.formatExpr("$div64(%e, %e, true)", e.X, e.Y) case token.SHL: - return c.formatExpr("$shiftLeft64(%e, %f)", e.X, e.Y) + return fc.formatExpr("$shiftLeft64(%e, %f)", e.X, e.Y) case token.SHR: - return c.formatExpr("$shiftRight%s(%e, %f)", toJavaScriptType(basic), e.X, e.Y) + return fc.formatExpr("$shiftRight%s(%e, %f)", toJavaScriptType(basic), e.X, e.Y) case token.EQL: - return c.formatExpr("(%1h === %2h && %1l === %2l)", e.X, e.Y) + return fc.formatExpr("(%1h === %2h && %1l === %2l)", e.X, e.Y) case token.LSS: - return c.formatExpr("(%1h < %2h || (%1h === %2h && %1l < %2l))", e.X, e.Y) + return fc.formatExpr("(%1h < %2h || (%1h === %2h && %1l < %2l))", e.X, e.Y) case token.LEQ: - return c.formatExpr("(%1h < %2h || (%1h === %2h && %1l <= %2l))", e.X, e.Y) + return fc.formatExpr("(%1h < %2h || (%1h === %2h && %1l <= %2l))", e.X, e.Y) case token.GTR: - return c.formatExpr("(%1h > %2h || (%1h === %2h && %1l > %2l))", e.X, e.Y) + return fc.formatExpr("(%1h > %2h || (%1h === %2h && %1l > %2l))", e.X, e.Y) case token.GEQ: - return c.formatExpr("(%1h > %2h || (%1h === %2h && %1l >= %2l))", e.X, e.Y) + return fc.formatExpr("(%1h > %2h || (%1h === %2h && %1l >= %2l))", e.X, e.Y) case token.ADD, token.SUB: - return c.formatExpr("new %3s(%1h %4t %2h, %1l %4t %2l)", e.X, e.Y, c.typeName(t), e.Op) + return fc.formatExpr("new %3s(%1h %4t %2h, %1l %4t %2l)", e.X, e.Y, fc.typeName(t), e.Op) case token.AND, token.OR, token.XOR: - return c.formatExpr("new %3s(%1h %4t %2h, (%1l %4t %2l) >>> 0)", e.X, e.Y, c.typeName(t), e.Op) + return fc.formatExpr("new %3s(%1h %4t %2h, (%1l %4t %2l) >>> 0)", e.X, e.Y, fc.typeName(t), e.Op) case token.AND_NOT: - return c.formatExpr("new %3s(%1h & ~%2h, (%1l & ~%2l) >>> 0)", e.X, e.Y, c.typeName(t)) + return fc.formatExpr("new %3s(%1h & ~%2h, (%1l & ~%2l) >>> 0)", e.X, e.Y, fc.typeName(t)) default: panic(e.Op) } @@ -324,13 +324,13 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { if isComplex(basic) { switch e.Op { case token.EQL: - return c.formatExpr("(%1r === %2r && %1i === %2i)", e.X, e.Y) + return fc.formatExpr("(%1r === %2r && %1i === %2i)", e.X, e.Y) case token.ADD, token.SUB: - return c.formatExpr("new %3s(%1r %4t %2r, %1i %4t %2i)", e.X, e.Y, c.typeName(t), e.Op) + return fc.formatExpr("new %3s(%1r %4t %2r, %1i %4t %2i)", e.X, e.Y, fc.typeName(t), e.Op) case token.MUL: - return c.formatExpr("new %3s(%1r * %2r - %1i * %2i, %1r * %2i + %1i * %2r)", e.X, e.Y, c.typeName(t)) + return fc.formatExpr("new %3s(%1r * %2r - %1i * %2i, %1r * %2i + %1i * %2r)", e.X, e.Y, fc.typeName(t)) case token.QUO: - return c.formatExpr("$divComplex(%e, %e)", e.X, e.Y) + return fc.formatExpr("$divComplex(%e, %e)", e.X, e.Y) default: panic(e.Op) } @@ -338,19 +338,19 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { switch e.Op { case token.EQL: - return c.formatParenExpr("%e === %e", e.X, e.Y) + return fc.formatParenExpr("%e === %e", e.X, e.Y) case token.LSS, token.LEQ, token.GTR, token.GEQ: - return c.formatExpr("%e %t %e", e.X, e.Op, e.Y) + return fc.formatExpr("%e %t %e", e.X, e.Op, e.Y) case token.ADD, token.SUB: - return c.fixNumber(c.formatExpr("%e %t %e", e.X, e.Op, e.Y), basic) + return fc.fixNumber(fc.formatExpr("%e %t %e", e.X, e.Op, e.Y), basic) case token.MUL: switch basic.Kind() { case types.Int32, types.Int: - return c.formatParenExpr("$imul(%e, %e)", e.X, e.Y) + return fc.formatParenExpr("$imul(%e, %e)", e.X, e.Y) case types.Uint32, types.Uintptr: - return c.formatParenExpr("$imul(%e, %e) >>> 0", e.X, e.Y) + return fc.formatParenExpr("$imul(%e, %e) >>> 0", e.X, e.Y) } - return c.fixNumber(c.formatExpr("%e * %e", e.X, e.Y), basic) + return fc.fixNumber(fc.formatExpr("%e * %e", e.X, e.Y), basic) case token.QUO: if isInteger(basic) { // cut off decimals @@ -358,40 +358,40 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { if isUnsigned(basic) { shift = ">>>" } - return c.formatExpr(`(%1s = %2e / %3e, (%1s === %1s && %1s !== 1/0 && %1s !== -1/0) ? %1s %4s 0 : $throwRuntimeError("integer divide by zero"))`, c.newVariable("_q"), e.X, e.Y, shift) + return fc.formatExpr(`(%1s = %2e / %3e, (%1s === %1s && %1s !== 1/0 && %1s !== -1/0) ? %1s %4s 0 : $throwRuntimeError("integer divide by zero"))`, fc.newVariable("_q"), e.X, e.Y, shift) } if basic.Kind() == types.Float32 { - return c.fixNumber(c.formatExpr("%e / %e", e.X, e.Y), basic) + return fc.fixNumber(fc.formatExpr("%e / %e", e.X, e.Y), basic) } - return c.formatExpr("%e / %e", e.X, e.Y) + return fc.formatExpr("%e / %e", e.X, e.Y) case token.REM: - return c.formatExpr(`(%1s = %2e %% %3e, %1s === %1s ? %1s : $throwRuntimeError("integer divide by zero"))`, c.newVariable("_r"), e.X, e.Y) + return fc.formatExpr(`(%1s = %2e %% %3e, %1s === %1s ? %1s : $throwRuntimeError("integer divide by zero"))`, fc.newVariable("_r"), e.X, e.Y) case token.SHL, token.SHR: op := e.Op.String() if e.Op == token.SHR && isUnsigned(basic) { op = ">>>" } - if v := c.p.Types[e.Y].Value; v != nil { + if v := fc.pkgCtx.Types[e.Y].Value; v != nil { i, _ := constant.Uint64Val(constant.ToInt(v)) if i >= 32 { - return c.formatExpr("0") + return fc.formatExpr("0") } - return c.fixNumber(c.formatExpr("%e %s %s", e.X, op, strconv.FormatUint(i, 10)), basic) + return fc.fixNumber(fc.formatExpr("%e %s %s", e.X, op, strconv.FormatUint(i, 10)), basic) } if e.Op == token.SHR && !isUnsigned(basic) { - return c.fixNumber(c.formatParenExpr("%e >> $min(%f, 31)", e.X, e.Y), basic) + return fc.fixNumber(fc.formatParenExpr("%e >> $min(%f, 31)", e.X, e.Y), basic) } - y := c.newVariable("y") - return c.fixNumber(c.formatExpr("(%s = %f, %s < 32 ? (%e %s %s) : 0)", y, e.Y, y, e.X, op, y), basic) + y := fc.newVariable("y") + return fc.fixNumber(fc.formatExpr("(%s = %f, %s < 32 ? (%e %s %s) : 0)", y, e.Y, y, e.X, op, y), basic) case token.AND, token.OR: if isUnsigned(basic) { - return c.formatParenExpr("(%e %t %e) >>> 0", e.X, e.Op, e.Y) + return fc.formatParenExpr("(%e %t %e) >>> 0", e.X, e.Op, e.Y) } - return c.formatParenExpr("%e %t %e", e.X, e.Op, e.Y) + return fc.formatParenExpr("%e %t %e", e.X, e.Op, e.Y) case token.AND_NOT: - return c.fixNumber(c.formatParenExpr("%e & ~%e", e.X, e.Y), basic) + return fc.fixNumber(fc.formatParenExpr("%e & ~%e", e.X, e.Y), basic) case token.XOR: - return c.fixNumber(c.formatParenExpr("%e ^ %e", e.X, e.Y), basic) + return fc.fixNumber(fc.formatParenExpr("%e ^ %e", e.X, e.Y), basic) default: panic(e.Op) } @@ -399,138 +399,138 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { switch e.Op { case token.ADD, token.LSS, token.LEQ, token.GTR, token.GEQ: - return c.formatExpr("%e %t %e", e.X, e.Op, e.Y) + return fc.formatExpr("%e %t %e", e.X, e.Op, e.Y) case token.LAND: - if c.Blocking[e.Y] { - skipCase := c.caseCounter - c.caseCounter++ - resultVar := c.newVariable("_v") - c.Printf("if (!(%s)) { %s = false; $s = %d; continue s; }", c.translateExpr(e.X), resultVar, skipCase) - c.Printf("%s = %s; case %d:", resultVar, c.translateExpr(e.Y), skipCase) - return c.formatExpr("%s", resultVar) - } - return c.formatExpr("%e && %e", e.X, e.Y) + if fc.Blocking[e.Y] { + skipCase := fc.caseCounter + fc.caseCounter++ + resultVar := fc.newVariable("_v") + fc.Printf("if (!(%s)) { %s = false; $s = %d; continue s; }", fc.translateExpr(e.X), resultVar, skipCase) + fc.Printf("%s = %s; case %d:", resultVar, fc.translateExpr(e.Y), skipCase) + return fc.formatExpr("%s", resultVar) + } + return fc.formatExpr("%e && %e", e.X, e.Y) case token.LOR: - if c.Blocking[e.Y] { - skipCase := c.caseCounter - c.caseCounter++ - resultVar := c.newVariable("_v") - c.Printf("if (%s) { %s = true; $s = %d; continue s; }", c.translateExpr(e.X), resultVar, skipCase) - c.Printf("%s = %s; case %d:", resultVar, c.translateExpr(e.Y), skipCase) - return c.formatExpr("%s", resultVar) - } - return c.formatExpr("%e || %e", e.X, e.Y) + if fc.Blocking[e.Y] { + skipCase := fc.caseCounter + fc.caseCounter++ + resultVar := fc.newVariable("_v") + fc.Printf("if (%s) { %s = true; $s = %d; continue s; }", fc.translateExpr(e.X), resultVar, skipCase) + fc.Printf("%s = %s; case %d:", resultVar, fc.translateExpr(e.Y), skipCase) + return fc.formatExpr("%s", resultVar) + } + return fc.formatExpr("%e || %e", e.X, e.Y) case token.EQL: switch u := t.Underlying().(type) { case *types.Array, *types.Struct: - return c.formatExpr("$equal(%e, %e, %s)", e.X, e.Y, c.typeName(t)) + return fc.formatExpr("$equal(%e, %e, %s)", e.X, e.Y, fc.typeName(t)) case *types.Interface: - return c.formatExpr("$interfaceIsEqual(%s, %s)", c.translateImplicitConversion(e.X, t), c.translateImplicitConversion(e.Y, t)) + return fc.formatExpr("$interfaceIsEqual(%s, %s)", fc.translateImplicitConversion(e.X, t), fc.translateImplicitConversion(e.Y, t)) case *types.Pointer: if _, ok := u.Elem().Underlying().(*types.Array); ok { - return c.formatExpr("$equal(%s, %s, %s)", c.translateImplicitConversion(e.X, t), c.translateImplicitConversion(e.Y, t), c.typeName(u.Elem())) + return fc.formatExpr("$equal(%s, %s, %s)", fc.translateImplicitConversion(e.X, t), fc.translateImplicitConversion(e.Y, t), fc.typeName(u.Elem())) } case *types.Basic: if isBoolean(u) { - if b, ok := analysis.BoolValue(e.X, c.p.Info.Info); ok && b { - return c.translateExpr(e.Y) + if b, ok := analysis.BoolValue(e.X, fc.pkgCtx.Info.Info); ok && b { + return fc.translateExpr(e.Y) } - if b, ok := analysis.BoolValue(e.Y, c.p.Info.Info); ok && b { - return c.translateExpr(e.X) + if b, ok := analysis.BoolValue(e.Y, fc.pkgCtx.Info.Info); ok && b { + return fc.translateExpr(e.X) } } } - return c.formatExpr("%s === %s", c.translateImplicitConversion(e.X, t), c.translateImplicitConversion(e.Y, t)) + return fc.formatExpr("%s === %s", fc.translateImplicitConversion(e.X, t), fc.translateImplicitConversion(e.Y, t)) default: panic(e.Op) } case *ast.ParenExpr: - return c.formatParenExpr("%e", e.X) + return fc.formatParenExpr("%e", e.X) case *ast.IndexExpr: - switch t := c.p.TypeOf(e.X).Underlying().(type) { + switch t := fc.pkgCtx.TypeOf(e.X).Underlying().(type) { case *types.Array, *types.Pointer: - pattern := rangeCheck("%1e[%2f]", c.p.Types[e.Index].Value != nil, true) + pattern := rangeCheck("%1e[%2f]", fc.pkgCtx.Types[e.Index].Value != nil, true) if _, ok := t.(*types.Pointer); ok { // check pointer for nix (attribute getter causes a panic) pattern = `(%1e.nilCheck, ` + pattern + `)` } - return c.formatExpr(pattern, e.X, e.Index) + return fc.formatExpr(pattern, e.X, e.Index) case *types.Slice: - return c.formatExpr(rangeCheck("%1e.$array[%1e.$offset + %2f]", c.p.Types[e.Index].Value != nil, false), e.X, e.Index) + return fc.formatExpr(rangeCheck("%1e.$array[%1e.$offset + %2f]", fc.pkgCtx.Types[e.Index].Value != nil, false), e.X, e.Index) case *types.Map: - if typesutil.IsJsObject(c.p.TypeOf(e.Index)) { - c.p.errList = append(c.p.errList, types.Error{Fset: c.p.fileSet, Pos: e.Index.Pos(), Msg: "cannot use js.Object as map key"}) + if typesutil.IsJsObject(fc.pkgCtx.TypeOf(e.Index)) { + fc.pkgCtx.errList = append(fc.pkgCtx.errList, types.Error{Fset: fc.pkgCtx.fileSet, Pos: e.Index.Pos(), Msg: "cannot use js.Object as map key"}) } - key := fmt.Sprintf("%s.keyFor(%s)", c.typeName(t.Key()), c.translateImplicitConversion(e.Index, t.Key())) + key := fmt.Sprintf("%s.keyFor(%s)", fc.typeName(t.Key()), fc.translateImplicitConversion(e.Index, t.Key())) if _, isTuple := exprType.(*types.Tuple); isTuple { - return c.formatExpr(`(%1s = %2e[%3s], %1s !== undefined ? [%1s.v, true] : [%4e, false])`, c.newVariable("_entry"), e.X, key, c.zeroValue(t.Elem())) + return fc.formatExpr(`(%1s = %2e[%3s], %1s !== undefined ? [%1s.v, true] : [%4e, false])`, fc.newVariable("_entry"), e.X, key, fc.zeroValue(t.Elem())) } - return c.formatExpr(`(%1s = %2e[%3s], %1s !== undefined ? %1s.v : %4e)`, c.newVariable("_entry"), e.X, key, c.zeroValue(t.Elem())) + return fc.formatExpr(`(%1s = %2e[%3s], %1s !== undefined ? %1s.v : %4e)`, fc.newVariable("_entry"), e.X, key, fc.zeroValue(t.Elem())) case *types.Basic: - return c.formatExpr("%e.charCodeAt(%f)", e.X, e.Index) + return fc.formatExpr("%e.charCodeAt(%f)", e.X, e.Index) default: panic(fmt.Sprintf("Unhandled IndexExpr: %T\n", t)) } case *ast.SliceExpr: - if b, isBasic := c.p.TypeOf(e.X).Underlying().(*types.Basic); isBasic && isString(b) { + if b, isBasic := fc.pkgCtx.TypeOf(e.X).Underlying().(*types.Basic); isBasic && isString(b) { switch { case e.Low == nil && e.High == nil: - return c.translateExpr(e.X) + return fc.translateExpr(e.X) case e.Low == nil: - return c.formatExpr("$substring(%e, 0, %f)", e.X, e.High) + return fc.formatExpr("$substring(%e, 0, %f)", e.X, e.High) case e.High == nil: - return c.formatExpr("$substring(%e, %f)", e.X, e.Low) + return fc.formatExpr("$substring(%e, %f)", e.X, e.Low) default: - return c.formatExpr("$substring(%e, %f, %f)", e.X, e.Low, e.High) + return fc.formatExpr("$substring(%e, %f, %f)", e.X, e.Low, e.High) } } - slice := c.translateConversionToSlice(e.X, exprType) + slice := fc.translateConversionToSlice(e.X, exprType) switch { case e.Low == nil && e.High == nil: - return c.formatExpr("%s", slice) + return fc.formatExpr("%s", slice) case e.Low == nil: if e.Max != nil { - return c.formatExpr("$subslice(%s, 0, %f, %f)", slice, e.High, e.Max) + return fc.formatExpr("$subslice(%s, 0, %f, %f)", slice, e.High, e.Max) } - return c.formatExpr("$subslice(%s, 0, %f)", slice, e.High) + return fc.formatExpr("$subslice(%s, 0, %f)", slice, e.High) case e.High == nil: - return c.formatExpr("$subslice(%s, %f)", slice, e.Low) + return fc.formatExpr("$subslice(%s, %f)", slice, e.Low) default: if e.Max != nil { - return c.formatExpr("$subslice(%s, %f, %f, %f)", slice, e.Low, e.High, e.Max) + return fc.formatExpr("$subslice(%s, %f, %f, %f)", slice, e.Low, e.High, e.Max) } - return c.formatExpr("$subslice(%s, %f, %f)", slice, e.Low, e.High) + return fc.formatExpr("$subslice(%s, %f, %f)", slice, e.Low, e.High) } case *ast.SelectorExpr: - sel, ok := c.p.SelectionOf(e) + sel, ok := fc.pkgCtx.SelectionOf(e) if !ok { // qualified identifier - return c.formatExpr("%s", c.objectName(obj)) + return fc.formatExpr("%s", fc.objectName(obj)) } switch sel.Kind() { case types.FieldVal: - fields, jsTag := c.translateSelection(sel, e.Pos()) + fields, jsTag := fc.translateSelection(sel, e.Pos()) if jsTag != "" { if _, ok := sel.Type().(*types.Signature); ok { - return c.formatExpr("$internalize(%1e.%2s%3s, %4s, %1e.%2s)", e.X, strings.Join(fields, "."), formatJSStructTagVal(jsTag), c.typeName(sel.Type())) + return fc.formatExpr("$internalize(%1e.%2s%3s, %4s, %1e.%2s)", e.X, strings.Join(fields, "."), formatJSStructTagVal(jsTag), fc.typeName(sel.Type())) } - return c.internalize(c.formatExpr("%e.%s%s", e.X, strings.Join(fields, "."), formatJSStructTagVal(jsTag)), sel.Type()) + return fc.internalize(fc.formatExpr("%e.%s%s", e.X, strings.Join(fields, "."), formatJSStructTagVal(jsTag)), sel.Type()) } - return c.formatExpr("%e.%s", e.X, strings.Join(fields, ".")) + return fc.formatExpr("%e.%s", e.X, strings.Join(fields, ".")) case types.MethodVal: - return c.formatExpr(`$methodVal(%s, "%s")`, c.makeReceiver(e), sel.Obj().(*types.Func).Name()) + return fc.formatExpr(`$methodVal(%s, "%s")`, fc.makeReceiver(e), sel.Obj().(*types.Func).Name()) case types.MethodExpr: if !sel.Obj().Exported() { - c.p.dependencies[sel.Obj()] = true + fc.pkgCtx.dependencies[sel.Obj()] = true } if _, ok := sel.Recv().Underlying().(*types.Interface); ok { - return c.formatExpr(`$ifaceMethodExpr("%s")`, sel.Obj().(*types.Func).Name()) + return fc.formatExpr(`$ifaceMethodExpr("%s")`, sel.Obj().(*types.Func).Name()) } - return c.formatExpr(`$methodExpr(%s, "%s")`, c.typeName(sel.Recv()), sel.Obj().(*types.Func).Name()) + return fc.formatExpr(`$methodExpr(%s, "%s")`, fc.typeName(sel.Recv()), sel.Obj().(*types.Func).Name()) default: panic(fmt.Sprintf("unexpected sel.Kind(): %T", sel.Kind())) } @@ -538,45 +538,45 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { case *ast.CallExpr: plainFun := astutil.RemoveParens(e.Fun) - if astutil.IsTypeExpr(plainFun, c.p.Info.Info) { - return c.formatExpr("(%s)", c.translateConversion(e.Args[0], c.p.TypeOf(plainFun))) + if astutil.IsTypeExpr(plainFun, fc.pkgCtx.Info.Info) { + return fc.formatExpr("(%s)", fc.translateConversion(e.Args[0], fc.pkgCtx.TypeOf(plainFun))) } - sig := c.p.TypeOf(plainFun).Underlying().(*types.Signature) + sig := fc.pkgCtx.TypeOf(plainFun).Underlying().(*types.Signature) switch f := plainFun.(type) { case *ast.Ident: - obj := c.p.Uses[f] + obj := fc.pkgCtx.Uses[f] if o, ok := obj.(*types.Builtin); ok { - return c.translateBuiltin(o.Name(), sig, e.Args, e.Ellipsis.IsValid()) + return fc.translateBuiltin(o.Name(), sig, e.Args, e.Ellipsis.IsValid()) } if typesutil.IsJsPackage(obj.Pkg()) && obj.Name() == "InternalObject" { - return c.translateExpr(e.Args[0]) + return fc.translateExpr(e.Args[0]) } - return c.translateCall(e, sig, c.translateExpr(f)) + return fc.translateCall(e, sig, fc.translateExpr(f)) case *ast.SelectorExpr: - sel, ok := c.p.SelectionOf(f) + sel, ok := fc.pkgCtx.SelectionOf(f) if !ok { // qualified identifier - obj := c.p.Uses[f.Sel] + obj := fc.pkgCtx.Uses[f.Sel] if typesutil.IsJsPackage(obj.Pkg()) { switch obj.Name() { case "Debugger": - return c.formatExpr("debugger") + return fc.formatExpr("debugger") case "InternalObject": - return c.translateExpr(e.Args[0]) + return fc.translateExpr(e.Args[0]) } } - return c.translateCall(e, sig, c.translateExpr(f)) + return fc.translateCall(e, sig, fc.translateExpr(f)) } externalizeExpr := func(e ast.Expr) string { - t := c.p.TypeOf(e) + t := fc.pkgCtx.TypeOf(e) if types.Identical(t, types.Typ[types.UntypedNil]) { return "null" } - return c.externalize(c.translateExpr(e).String(), t) + return fc.externalize(fc.translateExpr(e).String(), t) } externalizeArgs := func(args []ast.Expr) string { s := make([]string, len(args)) @@ -588,7 +588,7 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { switch sel.Kind() { case types.MethodVal: - recv := c.makeReceiver(f) + recv := fc.makeReceiver(f) declaredFuncRecv := sel.Obj().(*types.Func).Type().(*types.Signature).Recv().Type() if typesutil.IsJsObject(declaredFuncRecv) { globalRef := func(id string) string { @@ -599,60 +599,60 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { } switch sel.Obj().Name() { case "Get": - if id, ok := c.identifierConstant(e.Args[0]); ok { - return c.formatExpr("%s", globalRef(id)) + if id, ok := fc.identifierConstant(e.Args[0]); ok { + return fc.formatExpr("%s", globalRef(id)) } - return c.formatExpr("%s[$externalize(%e, $String)]", recv, e.Args[0]) + return fc.formatExpr("%s[$externalize(%e, $String)]", recv, e.Args[0]) case "Set": - if id, ok := c.identifierConstant(e.Args[0]); ok { - return c.formatExpr("%s = %s", globalRef(id), externalizeExpr(e.Args[1])) + if id, ok := fc.identifierConstant(e.Args[0]); ok { + return fc.formatExpr("%s = %s", globalRef(id), externalizeExpr(e.Args[1])) } - return c.formatExpr("%s[$externalize(%e, $String)] = %s", recv, e.Args[0], externalizeExpr(e.Args[1])) + return fc.formatExpr("%s[$externalize(%e, $String)] = %s", recv, e.Args[0], externalizeExpr(e.Args[1])) case "Delete": - return c.formatExpr("delete %s[$externalize(%e, $String)]", recv, e.Args[0]) + return fc.formatExpr("delete %s[$externalize(%e, $String)]", recv, e.Args[0]) case "Length": - return c.formatExpr("$parseInt(%s.length)", recv) + return fc.formatExpr("$parseInt(%s.length)", recv) case "Index": - return c.formatExpr("%s[%e]", recv, e.Args[0]) + return fc.formatExpr("%s[%e]", recv, e.Args[0]) case "SetIndex": - return c.formatExpr("%s[%e] = %s", recv, e.Args[0], externalizeExpr(e.Args[1])) + return fc.formatExpr("%s[%e] = %s", recv, e.Args[0], externalizeExpr(e.Args[1])) case "Call": - if id, ok := c.identifierConstant(e.Args[0]); ok { + if id, ok := fc.identifierConstant(e.Args[0]); ok { if e.Ellipsis.IsValid() { - objVar := c.newVariable("obj") - return c.formatExpr("(%s = %s, %s.%s.apply(%s, %s))", objVar, recv, objVar, id, objVar, externalizeExpr(e.Args[1])) + objVar := fc.newVariable("obj") + return fc.formatExpr("(%s = %s, %s.%s.apply(%s, %s))", objVar, recv, objVar, id, objVar, externalizeExpr(e.Args[1])) } - return c.formatExpr("%s(%s)", globalRef(id), externalizeArgs(e.Args[1:])) + return fc.formatExpr("%s(%s)", globalRef(id), externalizeArgs(e.Args[1:])) } if e.Ellipsis.IsValid() { - objVar := c.newVariable("obj") - return c.formatExpr("(%s = %s, %s[$externalize(%e, $String)].apply(%s, %s))", objVar, recv, objVar, e.Args[0], objVar, externalizeExpr(e.Args[1])) + objVar := fc.newVariable("obj") + return fc.formatExpr("(%s = %s, %s[$externalize(%e, $String)].apply(%s, %s))", objVar, recv, objVar, e.Args[0], objVar, externalizeExpr(e.Args[1])) } - return c.formatExpr("%s[$externalize(%e, $String)](%s)", recv, e.Args[0], externalizeArgs(e.Args[1:])) + return fc.formatExpr("%s[$externalize(%e, $String)](%s)", recv, e.Args[0], externalizeArgs(e.Args[1:])) case "Invoke": if e.Ellipsis.IsValid() { - return c.formatExpr("%s.apply(undefined, %s)", recv, externalizeExpr(e.Args[0])) + return fc.formatExpr("%s.apply(undefined, %s)", recv, externalizeExpr(e.Args[0])) } - return c.formatExpr("%s(%s)", recv, externalizeArgs(e.Args)) + return fc.formatExpr("%s(%s)", recv, externalizeArgs(e.Args)) case "New": if e.Ellipsis.IsValid() { - return c.formatExpr("new ($global.Function.prototype.bind.apply(%s, [undefined].concat(%s)))", recv, externalizeExpr(e.Args[0])) + return fc.formatExpr("new ($global.Function.prototype.bind.apply(%s, [undefined].concat(%s)))", recv, externalizeExpr(e.Args[0])) } - return c.formatExpr("new (%s)(%s)", recv, externalizeArgs(e.Args)) + return fc.formatExpr("new (%s)(%s)", recv, externalizeArgs(e.Args)) case "Bool": - return c.internalize(recv, types.Typ[types.Bool]) + return fc.internalize(recv, types.Typ[types.Bool]) case "String": - return c.internalize(recv, types.Typ[types.String]) + return fc.internalize(recv, types.Typ[types.String]) case "Int": - return c.internalize(recv, types.Typ[types.Int]) + return fc.internalize(recv, types.Typ[types.Int]) case "Int64": - return c.internalize(recv, types.Typ[types.Int64]) + return fc.internalize(recv, types.Typ[types.Int64]) case "Uint64": - return c.internalize(recv, types.Typ[types.Uint64]) + return fc.internalize(recv, types.Typ[types.Uint64]) case "Float": - return c.internalize(recv, types.Typ[types.Float64]) + return fc.internalize(recv, types.Typ[types.Float64]) case "Interface": - return c.internalize(recv, types.NewInterface(nil, nil)) + return fc.internalize(recv, types.NewInterface(nil, nil)) case "Unsafe": return recv default: @@ -664,59 +664,59 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { if reservedKeywords[methodName] { methodName += "$" } - return c.translateCall(e, sig, c.formatExpr("%s.%s", recv, methodName)) + return fc.translateCall(e, sig, fc.formatExpr("%s.%s", recv, methodName)) case types.FieldVal: - fields, jsTag := c.translateSelection(sel, f.Pos()) + fields, jsTag := fc.translateSelection(sel, f.Pos()) if jsTag != "" { - call := c.formatExpr("%e.%s%s(%s)", f.X, strings.Join(fields, "."), formatJSStructTagVal(jsTag), externalizeArgs(e.Args)) + call := fc.formatExpr("%e.%s%s(%s)", f.X, strings.Join(fields, "."), formatJSStructTagVal(jsTag), externalizeArgs(e.Args)) switch sig.Results().Len() { case 0: return call case 1: - return c.internalize(call, sig.Results().At(0).Type()) + return fc.internalize(call, sig.Results().At(0).Type()) default: - c.p.errList = append(c.p.errList, types.Error{Fset: c.p.fileSet, Pos: f.Pos(), Msg: "field with js tag can not have func type with multiple results"}) + fc.pkgCtx.errList = append(fc.pkgCtx.errList, types.Error{Fset: fc.pkgCtx.fileSet, Pos: f.Pos(), Msg: "field with js tag can not have func type with multiple results"}) } } - return c.translateCall(e, sig, c.formatExpr("%e.%s", f.X, strings.Join(fields, "."))) + return fc.translateCall(e, sig, fc.formatExpr("%e.%s", f.X, strings.Join(fields, "."))) case types.MethodExpr: - return c.translateCall(e, sig, c.translateExpr(f)) + return fc.translateCall(e, sig, fc.translateExpr(f)) default: panic(fmt.Sprintf("unexpected sel.Kind(): %T", sel.Kind())) } default: - return c.translateCall(e, sig, c.translateExpr(plainFun)) + return fc.translateCall(e, sig, fc.translateExpr(plainFun)) } case *ast.StarExpr: - if typesutil.IsJsObject(c.p.TypeOf(e.X)) { - return c.formatExpr("new $jsObjectPtr(%e)", e.X) + if typesutil.IsJsObject(fc.pkgCtx.TypeOf(e.X)) { + return fc.formatExpr("new $jsObjectPtr(%e)", e.X) } if c1, isCall := e.X.(*ast.CallExpr); isCall && len(c1.Args) == 1 { - if c2, isCall := c1.Args[0].(*ast.CallExpr); isCall && len(c2.Args) == 1 && types.Identical(c.p.TypeOf(c2.Fun), types.Typ[types.UnsafePointer]) { + if c2, isCall := c1.Args[0].(*ast.CallExpr); isCall && len(c2.Args) == 1 && types.Identical(fc.pkgCtx.TypeOf(c2.Fun), types.Typ[types.UnsafePointer]) { if unary, isUnary := c2.Args[0].(*ast.UnaryExpr); isUnary && unary.Op == token.AND { - return c.translateExpr(unary.X) // unsafe conversion + return fc.translateExpr(unary.X) // unsafe conversion } } } switch exprType.Underlying().(type) { case *types.Struct, *types.Array: - return c.translateExpr(e.X) + return fc.translateExpr(e.X) } - return c.formatExpr("%e.$get()", e.X) + return fc.formatExpr("%e.$get()", e.X) case *ast.TypeAssertExpr: if e.Type == nil { - return c.translateExpr(e.X) + return fc.translateExpr(e.X) } - t := c.p.TypeOf(e.Type) + t := fc.pkgCtx.TypeOf(e.Type) if _, isTuple := exprType.(*types.Tuple); isTuple { - return c.formatExpr("$assertType(%e, %s, true)", e.X, c.typeName(t)) + return fc.formatExpr("$assertType(%e, %s, true)", e.X, fc.typeName(t)) } - return c.formatExpr("$assertType(%e, %s)", e.X, c.typeName(t)) + return fc.formatExpr("$assertType(%e, %s)", e.X, fc.typeName(t)) case *ast.Ident: if e.Name == "_" { @@ -724,31 +724,31 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { } switch o := obj.(type) { case *types.Var, *types.Const: - return c.formatExpr("%s", c.objectName(o)) + return fc.formatExpr("%s", fc.objectName(o)) case *types.Func: - return c.formatExpr("%s", c.objectName(o)) + return fc.formatExpr("%s", fc.objectName(o)) case *types.TypeName: - return c.formatExpr("%s", c.typeName(o.Type())) + return fc.formatExpr("%s", fc.typeName(o.Type())) case *types.Nil: if typesutil.IsJsObject(exprType) { - return c.formatExpr("null") + return fc.formatExpr("null") } switch t := exprType.Underlying().(type) { case *types.Basic: if t.Kind() != types.UnsafePointer { panic("unexpected basic type") } - return c.formatExpr("0") + return fc.formatExpr("0") case *types.Slice, *types.Pointer: - return c.formatExpr("%s.nil", c.typeName(exprType)) + return fc.formatExpr("%s.nil", fc.typeName(exprType)) case *types.Chan: - return c.formatExpr("$chanNil") + return fc.formatExpr("$chanNil") case *types.Map: - return c.formatExpr("false") + return fc.formatExpr("false") case *types.Interface: - return c.formatExpr("$ifaceNil") + return fc.formatExpr("$ifaceNil") case *types.Signature: - return c.formatExpr("$throwNilPointerError") + return fc.formatExpr("$throwNilPointerError") default: panic(fmt.Sprintf("unexpected type: %T", t)) } @@ -757,7 +757,7 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { } case nil: - return c.formatExpr("") + return fc.formatExpr("") default: panic(fmt.Sprintf("Unhandled expression: %T\n", e)) @@ -765,28 +765,28 @@ func (c *funcContext) translateExpr(expr ast.Expr) *expression { } } -func (c *funcContext) translateCall(e *ast.CallExpr, sig *types.Signature, fun *expression) *expression { - args := c.translateArgs(sig, e.Args, e.Ellipsis.IsValid()) - if c.Blocking[e] { - resumeCase := c.caseCounter - c.caseCounter++ +func (fc *funcContext) translateCall(e *ast.CallExpr, sig *types.Signature, fun *expression) *expression { + args := fc.translateArgs(sig, e.Args, e.Ellipsis.IsValid()) + if fc.Blocking[e] { + resumeCase := fc.caseCounter + fc.caseCounter++ returnVar := "$r" if sig.Results().Len() != 0 { - returnVar = c.newVariable("_r") + returnVar = fc.newVariable("_r") } - c.Printf("%[1]s = %[2]s(%[3]s); /* */ $s = %[4]d; case %[4]d: if($c) { $c = false; %[1]s = %[1]s.$blk(); } if (%[1]s && %[1]s.$blk !== undefined) { break s; }", returnVar, fun, strings.Join(args, ", "), resumeCase) + fc.Printf("%[1]s = %[2]s(%[3]s); /* */ $s = %[4]d; case %[4]d: if($c) { $c = false; %[1]s = %[1]s.$blk(); } if (%[1]s && %[1]s.$blk !== undefined) { break s; }", returnVar, fun, strings.Join(args, ", "), resumeCase) if sig.Results().Len() != 0 { - return c.formatExpr("%s", returnVar) + return fc.formatExpr("%s", returnVar) } - return c.formatExpr("") + return fc.formatExpr("") } - return c.formatExpr("%s(%s)", fun, strings.Join(args, ", ")) + return fc.formatExpr("%s(%s)", fun, strings.Join(args, ", ")) } -func (c *funcContext) makeReceiver(e *ast.SelectorExpr) *expression { - sel, _ := c.p.SelectionOf(e) +func (fc *funcContext) makeReceiver(e *ast.SelectorExpr) *expression { + sel, _ := fc.pkgCtx.SelectionOf(e) if !sel.Obj().Exported() { - c.p.dependencies[sel.Obj()] = true + fc.pkgCtx.dependencies[sel.Obj()] = true } x := e.X @@ -801,13 +801,13 @@ func (c *funcContext) makeReceiver(e *ast.SelectorExpr) *expression { } fakeSel := &ast.SelectorExpr{X: x, Sel: ast.NewIdent("o")} - c.p.additionalSelections[fakeSel] = &fakeSelection{ + fc.pkgCtx.additionalSelections[fakeSel] = &fakeSelection{ kind: types.FieldVal, recv: sel.Recv(), index: sel.Index()[:len(sel.Index())-1], typ: recvType, } - x = c.setType(fakeSel, recvType) + x = fc.setType(fakeSel, recvType) } _, isPointer := recvType.Underlying().(*types.Pointer) @@ -815,117 +815,123 @@ func (c *funcContext) makeReceiver(e *ast.SelectorExpr) *expression { _, pointerExpected := methodsRecvType.(*types.Pointer) if !isPointer && pointerExpected { recvType = types.NewPointer(recvType) - x = c.setType(&ast.UnaryExpr{Op: token.AND, X: x}, recvType) + x = fc.setType(&ast.UnaryExpr{Op: token.AND, X: x}, recvType) } if isPointer && !pointerExpected { - x = c.setType(x, methodsRecvType) + x = fc.setType(x, methodsRecvType) } - recv := c.translateImplicitConversionWithCloning(x, methodsRecvType) + recv := fc.translateImplicitConversionWithCloning(x, methodsRecvType) if isWrapped(recvType) { - recv = c.formatExpr("new %s(%s)", c.typeName(methodsRecvType), recv) + recv = fc.formatExpr("new %s(%s)", fc.typeName(methodsRecvType), recv) } return recv } -func (c *funcContext) translateBuiltin(name string, sig *types.Signature, args []ast.Expr, ellipsis bool) *expression { +func (fc *funcContext) translateBuiltin(name string, sig *types.Signature, args []ast.Expr, ellipsis bool) *expression { switch name { case "new": t := sig.Results().At(0).Type().(*types.Pointer) - if c.p.Pkg.Path() == "syscall" && types.Identical(t.Elem().Underlying(), types.Typ[types.Uintptr]) { - return c.formatExpr("new Uint8Array(8)") + if fc.pkgCtx.Pkg.Path() == "syscall" && types.Identical(t.Elem().Underlying(), types.Typ[types.Uintptr]) { + return fc.formatExpr("new Uint8Array(8)") } switch t.Elem().Underlying().(type) { case *types.Struct, *types.Array: - return c.formatExpr("%e", c.zeroValue(t.Elem())) + return fc.formatExpr("%e", fc.zeroValue(t.Elem())) default: - return c.formatExpr("$newDataPointer(%e, %s)", c.zeroValue(t.Elem()), c.typeName(t)) + return fc.formatExpr("$newDataPointer(%e, %s)", fc.zeroValue(t.Elem()), fc.typeName(t)) } case "make": - switch argType := c.p.TypeOf(args[0]).Underlying().(type) { + switch argType := fc.pkgCtx.TypeOf(args[0]).Underlying().(type) { case *types.Slice: - t := c.typeName(c.p.TypeOf(args[0])) + t := fc.typeName(fc.pkgCtx.TypeOf(args[0])) if len(args) == 3 { - return c.formatExpr("$makeSlice(%s, %f, %f)", t, args[1], args[2]) + return fc.formatExpr("$makeSlice(%s, %f, %f)", t, args[1], args[2]) } - return c.formatExpr("$makeSlice(%s, %f)", t, args[1]) + return fc.formatExpr("$makeSlice(%s, %f)", t, args[1]) case *types.Map: - if len(args) == 2 && c.p.Types[args[1]].Value == nil { - return c.formatExpr(`((%1f < 0 || %1f > 2147483647) ? $throwRuntimeError("makemap: size out of range") : {})`, args[1]) + if len(args) == 2 && fc.pkgCtx.Types[args[1]].Value == nil { + return fc.formatExpr(`((%1f < 0 || %1f > 2147483647) ? $throwRuntimeError("makemap: size out of range") : {})`, args[1]) } - return c.formatExpr("{}") + return fc.formatExpr("{}") case *types.Chan: length := "0" if len(args) == 2 { - length = c.formatExpr("%f", args[1]).String() + length = fc.formatExpr("%f", args[1]).String() } - return c.formatExpr("new $Chan(%s, %s)", c.typeName(c.p.TypeOf(args[0]).Underlying().(*types.Chan).Elem()), length) + return fc.formatExpr("new $Chan(%s, %s)", fc.typeName(fc.pkgCtx.TypeOf(args[0]).Underlying().(*types.Chan).Elem()), length) default: panic(fmt.Sprintf("Unhandled make type: %T\n", argType)) } case "len": - switch argType := c.p.TypeOf(args[0]).Underlying().(type) { + switch argType := fc.pkgCtx.TypeOf(args[0]).Underlying().(type) { case *types.Basic: - return c.formatExpr("%e.length", args[0]) + return fc.formatExpr("%e.length", args[0]) case *types.Slice: - return c.formatExpr("%e.$length", args[0]) + return fc.formatExpr("%e.$length", args[0]) case *types.Pointer: - return c.formatExpr("(%e, %d)", args[0], argType.Elem().(*types.Array).Len()) + return fc.formatExpr("(%e, %d)", args[0], argType.Elem().(*types.Array).Len()) case *types.Map: - return c.formatExpr("$keys(%e).length", args[0]) + return fc.formatExpr("$keys(%e).length", args[0]) case *types.Chan: - return c.formatExpr("%e.$buffer.length", args[0]) + return fc.formatExpr("%e.$buffer.length", args[0]) // length of array is constant default: panic(fmt.Sprintf("Unhandled len type: %T\n", argType)) } case "cap": - switch argType := c.p.TypeOf(args[0]).Underlying().(type) { + switch argType := fc.pkgCtx.TypeOf(args[0]).Underlying().(type) { case *types.Slice, *types.Chan: - return c.formatExpr("%e.$capacity", args[0]) + return fc.formatExpr("%e.$capacity", args[0]) case *types.Pointer: - return c.formatExpr("(%e, %d)", args[0], argType.Elem().(*types.Array).Len()) + return fc.formatExpr("(%e, %d)", args[0], argType.Elem().(*types.Array).Len()) // capacity of array is constant default: panic(fmt.Sprintf("Unhandled cap type: %T\n", argType)) } case "panic": - return c.formatExpr("$panic(%s)", c.translateImplicitConversion(args[0], types.NewInterface(nil, nil))) + return fc.formatExpr("$panic(%s)", fc.translateImplicitConversion(args[0], types.NewInterface(nil, nil))) case "append": if ellipsis || len(args) == 1 { - argStr := c.translateArgs(sig, args, ellipsis) - return c.formatExpr("$appendSlice(%s, %s)", argStr[0], argStr[1]) + argStr := fc.translateArgs(sig, args, ellipsis) + return fc.formatExpr("$appendSlice(%s, %s)", argStr[0], argStr[1]) } sliceType := sig.Results().At(0).Type().Underlying().(*types.Slice) - return c.formatExpr("$append(%e, %s)", args[0], strings.Join(c.translateExprSlice(args[1:], sliceType.Elem()), ", ")) + return fc.formatExpr("$append(%e, %s)", args[0], strings.Join(fc.translateExprSlice(args[1:], sliceType.Elem()), ", ")) case "delete": - keyType := c.p.TypeOf(args[0]).Underlying().(*types.Map).Key() - return c.formatExpr(`delete %e[%s.keyFor(%s)]`, args[0], c.typeName(keyType), c.translateImplicitConversion(args[1], keyType)) + args = fc.expandTupleArgs(args) + keyType := fc.pkgCtx.TypeOf(args[0]).Underlying().(*types.Map).Key() + return fc.formatExpr(`delete %e[%s.keyFor(%s)]`, args[0], fc.typeName(keyType), fc.translateImplicitConversion(args[1], keyType)) case "copy": - if basic, isBasic := c.p.TypeOf(args[1]).Underlying().(*types.Basic); isBasic && isString(basic) { - return c.formatExpr("$copyString(%e, %e)", args[0], args[1]) + args = fc.expandTupleArgs(args) + if basic, isBasic := fc.pkgCtx.TypeOf(args[1]).Underlying().(*types.Basic); isBasic && isString(basic) { + return fc.formatExpr("$copyString(%e, %e)", args[0], args[1]) } - return c.formatExpr("$copySlice(%e, %e)", args[0], args[1]) - case "print", "println": - return c.formatExpr("console.log(%s)", strings.Join(c.translateExprSlice(args, nil), ", ")) + return fc.formatExpr("$copySlice(%e, %e)", args[0], args[1]) + case "print": + args = fc.expandTupleArgs(args) + return fc.formatExpr("$print(%s)", strings.Join(fc.translateExprSlice(args, nil), ", ")) + case "println": + args = fc.expandTupleArgs(args) + return fc.formatExpr("console.log(%s)", strings.Join(fc.translateExprSlice(args, nil), ", ")) case "complex": - argStr := c.translateArgs(sig, args, ellipsis) - return c.formatExpr("new %s(%s, %s)", c.typeName(sig.Results().At(0).Type()), argStr[0], argStr[1]) + argStr := fc.translateArgs(sig, args, ellipsis) + return fc.formatExpr("new %s(%s, %s)", fc.typeName(sig.Results().At(0).Type()), argStr[0], argStr[1]) case "real": - return c.formatExpr("%e.$real", args[0]) + return fc.formatExpr("%e.$real", args[0]) case "imag": - return c.formatExpr("%e.$imag", args[0]) + return fc.formatExpr("%e.$imag", args[0]) case "recover": - return c.formatExpr("$recover()") + return fc.formatExpr("$recover()") case "close": - return c.formatExpr(`$close(%e)`, args[0]) + return fc.formatExpr(`$close(%e)`, args[0]) default: panic(fmt.Sprintf("Unhandled builtin: %s\n", name)) } } -func (c *funcContext) identifierConstant(expr ast.Expr) (string, bool) { - val := c.p.Types[expr].Value +func (fc *funcContext) identifierConstant(expr ast.Expr) (string, bool) { + val := fc.pkgCtx.Types[expr].Value if val == nil { return "", false } @@ -941,29 +947,29 @@ func (c *funcContext) identifierConstant(expr ast.Expr) (string, bool) { return s, true } -func (c *funcContext) translateExprSlice(exprs []ast.Expr, desiredType types.Type) []string { +func (fc *funcContext) translateExprSlice(exprs []ast.Expr, desiredType types.Type) []string { parts := make([]string, len(exprs)) for i, expr := range exprs { - parts[i] = c.translateImplicitConversion(expr, desiredType).String() + parts[i] = fc.translateImplicitConversion(expr, desiredType).String() } return parts } -func (c *funcContext) translateConversion(expr ast.Expr, desiredType types.Type) *expression { - exprType := c.p.TypeOf(expr) +func (fc *funcContext) translateConversion(expr ast.Expr, desiredType types.Type) *expression { + exprType := fc.pkgCtx.TypeOf(expr) if types.Identical(exprType, desiredType) { - return c.translateExpr(expr) + return fc.translateExpr(expr) } - if c.p.Pkg.Path() == "reflect" { - if call, isCall := expr.(*ast.CallExpr); isCall && types.Identical(c.p.TypeOf(call.Fun), types.Typ[types.UnsafePointer]) { + if fc.pkgCtx.Pkg.Path() == "reflect" || fc.pkgCtx.Pkg.Path() == "internal/reflectlite" { + if call, isCall := expr.(*ast.CallExpr); isCall && types.Identical(fc.pkgCtx.TypeOf(call.Fun), types.Typ[types.UnsafePointer]) { if ptr, isPtr := desiredType.(*types.Pointer); isPtr { if named, isNamed := ptr.Elem().(*types.Named); isNamed { switch named.Obj().Name() { case "arrayType", "chanType", "funcType", "interfaceType", "mapType", "ptrType", "sliceType", "structType": - return c.formatExpr("%e.kindType", call.Args[0]) // unsafe conversion + return fc.formatExpr("%e.kindType", call.Args[0]) // unsafe conversion default: - return c.translateExpr(expr) + return fc.translateExpr(expr) } } } @@ -979,72 +985,72 @@ func (c *funcContext) translateConversion(expr ast.Expr, desiredType types.Type) case is64Bit(t): if !is64Bit(basicExprType) { if basicExprType.Kind() == types.Uintptr { // this might be an Object returned from reflect.Value.Pointer() - return c.formatExpr("new %1s(0, %2e.constructor === Number ? %2e : 1)", c.typeName(desiredType), expr) + return fc.formatExpr("new %1s(0, %2e.constructor === Number ? %2e : 1)", fc.typeName(desiredType), expr) } - return c.formatExpr("new %s(0, %e)", c.typeName(desiredType), expr) + return fc.formatExpr("new %s(0, %e)", fc.typeName(desiredType), expr) } - return c.formatExpr("new %1s(%2h, %2l)", c.typeName(desiredType), expr) + return fc.formatExpr("new %1s(%2h, %2l)", fc.typeName(desiredType), expr) case is64Bit(basicExprType): if !isUnsigned(t) && !isUnsigned(basicExprType) { - return c.fixNumber(c.formatParenExpr("%1l + ((%1h >> 31) * 4294967296)", expr), t) + return fc.fixNumber(fc.formatParenExpr("%1l + ((%1h >> 31) * 4294967296)", expr), t) } - return c.fixNumber(c.formatExpr("%s.$low", c.translateExpr(expr)), t) + return fc.fixNumber(fc.formatExpr("%s.$low", fc.translateExpr(expr)), t) case isFloat(basicExprType): - return c.formatParenExpr("%e >> 0", expr) + return fc.formatParenExpr("%e >> 0", expr) case types.Identical(exprType, types.Typ[types.UnsafePointer]): - return c.translateExpr(expr) + return fc.translateExpr(expr) default: - return c.fixNumber(c.translateExpr(expr), t) + return fc.fixNumber(fc.translateExpr(expr), t) } case isFloat(t): if t.Kind() == types.Float32 && exprType.Underlying().(*types.Basic).Kind() == types.Float64 { - return c.formatExpr("$fround(%e)", expr) + return fc.formatExpr("$fround(%e)", expr) } - return c.formatExpr("%f", expr) + return fc.formatExpr("%f", expr) case isComplex(t): - return c.formatExpr("new %1s(%2r, %2i)", c.typeName(desiredType), expr) + return fc.formatExpr("new %1s(%2r, %2i)", fc.typeName(desiredType), expr) case isString(t): - value := c.translateExpr(expr) + value := fc.translateExpr(expr) switch et := exprType.Underlying().(type) { case *types.Basic: if is64Bit(et) { - value = c.formatExpr("%s.$low", value) + value = fc.formatExpr("%s.$low", value) } if isNumeric(et) { - return c.formatExpr("$encodeRune(%s)", value) + return fc.formatExpr("$encodeRune(%s)", value) } return value case *types.Slice: if types.Identical(et.Elem().Underlying(), types.Typ[types.Rune]) { - return c.formatExpr("$runesToString(%s)", value) + return fc.formatExpr("$runesToString(%s)", value) } - return c.formatExpr("$bytesToString(%s)", value) + return fc.formatExpr("$bytesToString(%s)", value) default: panic(fmt.Sprintf("Unhandled conversion: %v\n", et)) } case t.Kind() == types.UnsafePointer: if unary, isUnary := expr.(*ast.UnaryExpr); isUnary && unary.Op == token.AND { if indexExpr, isIndexExpr := unary.X.(*ast.IndexExpr); isIndexExpr { - return c.formatExpr("$sliceToArray(%s)", c.translateConversionToSlice(indexExpr.X, types.NewSlice(types.Typ[types.Uint8]))) + return fc.formatExpr("$sliceToArray(%s)", fc.translateConversionToSlice(indexExpr.X, types.NewSlice(types.Typ[types.Uint8]))) } if ident, isIdent := unary.X.(*ast.Ident); isIdent && ident.Name == "_zero" { - return c.formatExpr("new Uint8Array(0)") + return fc.formatExpr("new Uint8Array(0)") } } - if ptr, isPtr := c.p.TypeOf(expr).(*types.Pointer); c.p.Pkg.Path() == "syscall" && isPtr { + if ptr, isPtr := fc.pkgCtx.TypeOf(expr).(*types.Pointer); fc.pkgCtx.Pkg.Path() == "syscall" && isPtr { if s, isStruct := ptr.Elem().Underlying().(*types.Struct); isStruct { - array := c.newVariable("_array") - target := c.newVariable("_struct") - c.Printf("%s = new Uint8Array(%d);", array, sizes32.Sizeof(s)) - c.Delayed(func() { - c.Printf("%s = %s, %s;", target, c.translateExpr(expr), c.loadStruct(array, target, s)) + array := fc.newVariable("_array") + target := fc.newVariable("_struct") + fc.Printf("%s = new Uint8Array(%d);", array, sizes32.Sizeof(s)) + fc.Delayed(func() { + fc.Printf("%s = %s, %s;", target, fc.translateExpr(expr), fc.loadStruct(array, target, s)) }) - return c.formatExpr("%s", array) + return fc.formatExpr("%s", array) } } if call, ok := expr.(*ast.CallExpr); ok { if id, ok := call.Fun.(*ast.Ident); ok && id.Name == "new" { - return c.formatExpr("new Uint8Array(%d)", int(sizes32.Sizeof(c.p.TypeOf(call.Args[0])))) + return fc.formatExpr("new Uint8Array(%d)", int(sizes32.Sizeof(fc.pkgCtx.TypeOf(call.Args[0])))) } } } @@ -1054,103 +1060,103 @@ func (c *funcContext) translateConversion(expr ast.Expr, desiredType types.Type) case *types.Basic: if isString(et) { if types.Identical(t.Elem().Underlying(), types.Typ[types.Rune]) { - return c.formatExpr("new %s($stringToRunes(%e))", c.typeName(desiredType), expr) + return fc.formatExpr("new %s($stringToRunes(%e))", fc.typeName(desiredType), expr) } - return c.formatExpr("new %s($stringToBytes(%e))", c.typeName(desiredType), expr) + return fc.formatExpr("new %s($stringToBytes(%e))", fc.typeName(desiredType), expr) } case *types.Array, *types.Pointer: - return c.formatExpr("new %s(%e)", c.typeName(desiredType), expr) + return fc.formatExpr("new %s(%e)", fc.typeName(desiredType), expr) } case *types.Pointer: switch u := t.Elem().Underlying().(type) { case *types.Array: - return c.translateExpr(expr) + return fc.translateExpr(expr) case *types.Struct: - if c.p.Pkg.Path() == "syscall" && types.Identical(exprType, types.Typ[types.UnsafePointer]) { - array := c.newVariable("_array") - target := c.newVariable("_struct") - return c.formatExpr("(%s = %e, %s = %e, %s, %s)", array, expr, target, c.zeroValue(t.Elem()), c.loadStruct(array, target, u), target) + if fc.pkgCtx.Pkg.Path() == "syscall" && types.Identical(exprType, types.Typ[types.UnsafePointer]) { + array := fc.newVariable("_array") + target := fc.newVariable("_struct") + return fc.formatExpr("(%s = %e, %s = %e, %s, %s)", array, expr, target, fc.zeroValue(t.Elem()), fc.loadStruct(array, target, u), target) } - return c.formatExpr("$pointerOfStructConversion(%e, %s)", expr, c.typeName(t)) + return fc.formatExpr("$pointerOfStructConversion(%e, %s)", expr, fc.typeName(t)) } if !types.Identical(exprType, types.Typ[types.UnsafePointer]) { exprTypeElem := exprType.Underlying().(*types.Pointer).Elem() - ptrVar := c.newVariable("_ptr") - getterConv := c.translateConversion(c.setType(&ast.StarExpr{X: c.newIdent(ptrVar, exprType)}, exprTypeElem), t.Elem()) - setterConv := c.translateConversion(c.newIdent("$v", t.Elem()), exprTypeElem) - return c.formatExpr("(%1s = %2e, new %3s(function() { return %4s; }, function($v) { %1s.$set(%5s); }, %1s.$target))", ptrVar, expr, c.typeName(desiredType), getterConv, setterConv) + ptrVar := fc.newVariable("_ptr") + getterConv := fc.translateConversion(fc.setType(&ast.StarExpr{X: fc.newIdent(ptrVar, exprType)}, exprTypeElem), t.Elem()) + setterConv := fc.translateConversion(fc.newIdent("$v", t.Elem()), exprTypeElem) + return fc.formatExpr("(%1s = %2e, new %3s(function() { return %4s; }, function($v) { %1s.$set(%5s); }, %1s.$target))", ptrVar, expr, fc.typeName(desiredType), getterConv, setterConv) } case *types.Interface: if types.Identical(exprType, types.Typ[types.UnsafePointer]) { - return c.translateExpr(expr) + return fc.translateExpr(expr) } } - return c.translateImplicitConversionWithCloning(expr, desiredType) + return fc.translateImplicitConversionWithCloning(expr, desiredType) } -func (c *funcContext) translateImplicitConversionWithCloning(expr ast.Expr, desiredType types.Type) *expression { +func (fc *funcContext) translateImplicitConversionWithCloning(expr ast.Expr, desiredType types.Type) *expression { switch desiredType.Underlying().(type) { case *types.Struct, *types.Array: switch expr.(type) { case nil, *ast.CompositeLit: // nothing default: - return c.formatExpr("$clone(%e, %s)", expr, c.typeName(desiredType)) + return fc.formatExpr("$clone(%e, %s)", expr, fc.typeName(desiredType)) } } - return c.translateImplicitConversion(expr, desiredType) + return fc.translateImplicitConversion(expr, desiredType) } -func (c *funcContext) translateImplicitConversion(expr ast.Expr, desiredType types.Type) *expression { +func (fc *funcContext) translateImplicitConversion(expr ast.Expr, desiredType types.Type) *expression { if desiredType == nil { - return c.translateExpr(expr) + return fc.translateExpr(expr) } - exprType := c.p.TypeOf(expr) + exprType := fc.pkgCtx.TypeOf(expr) if types.Identical(exprType, desiredType) { - return c.translateExpr(expr) + return fc.translateExpr(expr) } basicExprType, isBasicExpr := exprType.Underlying().(*types.Basic) if isBasicExpr && basicExprType.Kind() == types.UntypedNil { - return c.formatExpr("%e", c.zeroValue(desiredType)) + return fc.formatExpr("%e", fc.zeroValue(desiredType)) } switch desiredType.Underlying().(type) { case *types.Slice: - return c.formatExpr("$subslice(new %1s(%2e.$array), %2e.$offset, %2e.$offset + %2e.$length)", c.typeName(desiredType), expr) + return fc.formatExpr("$subslice(new %1s(%2e.$array), %2e.$offset, %2e.$offset + %2e.$length)", fc.typeName(desiredType), expr) case *types.Interface: if typesutil.IsJsObject(exprType) { // wrap JS object into js.Object struct when converting to interface - return c.formatExpr("new $jsObjectPtr(%e)", expr) + return fc.formatExpr("new $jsObjectPtr(%e)", expr) } if isWrapped(exprType) { - return c.formatExpr("new %s(%e)", c.typeName(exprType), expr) + return fc.formatExpr("new %s(%e)", fc.typeName(exprType), expr) } if _, isStruct := exprType.Underlying().(*types.Struct); isStruct { - return c.formatExpr("new %1e.constructor.elem(%1e)", expr) + return fc.formatExpr("new %1e.constructor.elem(%1e)", expr) } } - return c.translateExpr(expr) + return fc.translateExpr(expr) } -func (c *funcContext) translateConversionToSlice(expr ast.Expr, desiredType types.Type) *expression { - switch c.p.TypeOf(expr).Underlying().(type) { +func (fc *funcContext) translateConversionToSlice(expr ast.Expr, desiredType types.Type) *expression { + switch fc.pkgCtx.TypeOf(expr).Underlying().(type) { case *types.Array, *types.Pointer: - return c.formatExpr("new %s(%e)", c.typeName(desiredType), expr) + return fc.formatExpr("new %s(%e)", fc.typeName(desiredType), expr) } - return c.translateExpr(expr) + return fc.translateExpr(expr) } -func (c *funcContext) loadStruct(array, target string, s *types.Struct) string { - view := c.newVariable("_view") +func (fc *funcContext) loadStruct(array, target string, s *types.Struct) string { + view := fc.newVariable("_view") code := fmt.Sprintf("%s = new DataView(%s.buffer, %s.byteOffset)", view, array, array) var fields []*types.Var var collectFields func(s *types.Struct, path string) @@ -1171,7 +1177,7 @@ func (c *funcContext) loadStruct(array, target string, s *types.Struct) string { case *types.Basic: if isNumeric(t) { if is64Bit(t) { - code += fmt.Sprintf(", %s = new %s(%s.getUint32(%d, true), %s.getUint32(%d, true))", field.Name(), c.typeName(field.Type()), view, offsets[i]+4, view, offsets[i]) + code += fmt.Sprintf(", %s = new %s(%s.getUint32(%d, true), %s.getUint32(%d, true))", field.Name(), fc.typeName(field.Type()), view, offsets[i]+4, view, offsets[i]) break } code += fmt.Sprintf(", %s = %s.get%s(%d, true)", field.Name(), view, toJavaScriptType(t), offsets[i]) @@ -1183,22 +1189,22 @@ func (c *funcContext) loadStruct(array, target string, s *types.Struct) string { return code } -func (c *funcContext) fixNumber(value *expression, basic *types.Basic) *expression { +func (fc *funcContext) fixNumber(value *expression, basic *types.Basic) *expression { switch basic.Kind() { case types.Int8: - return c.formatParenExpr("%s << 24 >> 24", value) + return fc.formatParenExpr("%s << 24 >> 24", value) case types.Uint8: - return c.formatParenExpr("%s << 24 >>> 24", value) + return fc.formatParenExpr("%s << 24 >>> 24", value) case types.Int16: - return c.formatParenExpr("%s << 16 >> 16", value) + return fc.formatParenExpr("%s << 16 >> 16", value) case types.Uint16: - return c.formatParenExpr("%s << 16 >>> 16", value) + return fc.formatParenExpr("%s << 16 >>> 16", value) case types.Int32, types.Int, types.UntypedInt: - return c.formatParenExpr("%s >> 0", value) + return fc.formatParenExpr("%s >> 0", value) case types.Uint32, types.Uint, types.Uintptr: - return c.formatParenExpr("%s >>> 0", value) + return fc.formatParenExpr("%s >>> 0", value) case types.Float32: - return c.formatExpr("$fround(%s)", value) + return fc.formatExpr("$fround(%s)", value) case types.Float64: return value default: @@ -1206,7 +1212,7 @@ func (c *funcContext) fixNumber(value *expression, basic *types.Basic) *expressi } } -func (c *funcContext) internalize(s *expression, t types.Type) *expression { +func (fc *funcContext) internalize(s *expression, t types.Type) *expression { if typesutil.IsJsObject(t) { return s } @@ -1214,25 +1220,25 @@ func (c *funcContext) internalize(s *expression, t types.Type) *expression { case *types.Basic: switch { case isBoolean(u): - return c.formatExpr("!!(%s)", s) + return fc.formatExpr("!!(%s)", s) case isInteger(u) && !is64Bit(u): - return c.fixNumber(c.formatExpr("$parseInt(%s)", s), u) + return fc.fixNumber(fc.formatExpr("$parseInt(%s)", s), u) case isFloat(u): - return c.formatExpr("$parseFloat(%s)", s) + return fc.formatExpr("$parseFloat(%s)", s) } } - return c.formatExpr("$internalize(%s, %s)", s, c.typeName(t)) + return fc.formatExpr("$internalize(%s, %s)", s, fc.typeName(t)) } -func (c *funcContext) formatExpr(format string, a ...interface{}) *expression { - return c.formatExprInternal(format, a, false) +func (fc *funcContext) formatExpr(format string, a ...interface{}) *expression { + return fc.formatExprInternal(format, a, false) } -func (c *funcContext) formatParenExpr(format string, a ...interface{}) *expression { - return c.formatExprInternal(format, a, true) +func (fc *funcContext) formatParenExpr(format string, a ...interface{}) *expression { + return fc.formatExprInternal(format, a, true) } -func (c *funcContext) formatExprInternal(format string, a []interface{}, parens bool) *expression { +func (fc *funcContext) formatExprInternal(format string, a []interface{}, parens bool) *expression { processFormat := func(f func(uint8, uint8, int)) { n := 0 for i := 0; i < len(format); i++ { @@ -1271,7 +1277,7 @@ func (c *funcContext) formatExprInternal(format string, a []interface{}, parens if _, isIdent := e.(*ast.Ident); isIdent { continue } - if val := c.p.Types[e.(ast.Expr)].Value; val != nil { + if val := fc.pkgCtx.Types[e.(ast.Expr)].Value; val != nil { continue } if !hasAssignments { @@ -1279,8 +1285,8 @@ func (c *funcContext) formatExprInternal(format string, a []interface{}, parens out.WriteByte('(') parens = false } - v := c.newVariable("x") - out.WriteString(v + " = " + c.translateExpr(e.(ast.Expr)).String() + ", ") + v := fc.newVariable("x") + out.WriteString(v + " = " + fc.translateExpr(e.(ast.Expr)).String() + ", ") vars[i] = v } @@ -1290,7 +1296,7 @@ func (c *funcContext) formatExprInternal(format string, a []interface{}, parens out.WriteString(vars[n] + suffix) return } - out.WriteString(c.translateExpr(a[n].(ast.Expr)).StringWithParens() + suffix) + out.WriteString(fc.translateExpr(a[n].(ast.Expr)).StringWithParens() + suffix) } switch k { case 0: @@ -1307,19 +1313,19 @@ func (c *funcContext) formatExprInternal(format string, a []interface{}, parens out.WriteString(a[n].(token.Token).String()) case 'e': e := a[n].(ast.Expr) - if val := c.p.Types[e].Value; val != nil { - out.WriteString(c.translateExpr(e).String()) + if val := fc.pkgCtx.Types[e].Value; val != nil { + out.WriteString(fc.translateExpr(e).String()) return } writeExpr("") case 'f': e := a[n].(ast.Expr) - if val := c.p.Types[e].Value; val != nil { + if val := fc.pkgCtx.Types[e].Value; val != nil { d, _ := constant.Int64Val(constant.ToInt(val)) out.WriteString(strconv.FormatInt(d, 10)) return } - if is64Bit(c.p.TypeOf(e).Underlying().(*types.Basic)) { + if is64Bit(fc.pkgCtx.TypeOf(e).Underlying().(*types.Basic)) { out.WriteString("$flatten64(") writeExpr("") out.WriteString(")") @@ -1328,9 +1334,9 @@ func (c *funcContext) formatExprInternal(format string, a []interface{}, parens writeExpr("") case 'h': e := a[n].(ast.Expr) - if val := c.p.Types[e].Value; val != nil { + if val := fc.pkgCtx.Types[e].Value; val != nil { d, _ := constant.Uint64Val(constant.ToInt(val)) - if c.p.TypeOf(e).Underlying().(*types.Basic).Kind() == types.Int64 { + if fc.pkgCtx.TypeOf(e).Underlying().(*types.Basic).Kind() == types.Int64 { out.WriteString(strconv.FormatInt(int64(d)>>32, 10)) return } @@ -1339,21 +1345,21 @@ func (c *funcContext) formatExprInternal(format string, a []interface{}, parens } writeExpr(".$high") case 'l': - if val := c.p.Types[a[n].(ast.Expr)].Value; val != nil { + if val := fc.pkgCtx.Types[a[n].(ast.Expr)].Value; val != nil { d, _ := constant.Uint64Val(constant.ToInt(val)) out.WriteString(strconv.FormatUint(d&(1<<32-1), 10)) return } writeExpr(".$low") case 'r': - if val := c.p.Types[a[n].(ast.Expr)].Value; val != nil { + if val := fc.pkgCtx.Types[a[n].(ast.Expr)].Value; val != nil { r, _ := constant.Float64Val(constant.Real(val)) out.WriteString(strconv.FormatFloat(r, 'g', -1, 64)) return } writeExpr(".$real") case 'i': - if val := c.p.Types[a[n].(ast.Expr)].Value; val != nil { + if val := fc.pkgCtx.Types[a[n].(ast.Expr)].Value; val != nil { i, _ := constant.Float64Val(constant.Imag(val)) out.WriteString(strconv.FormatFloat(i, 'g', -1, 64)) return diff --git a/compiler/gopherjspkg/fs_vfsdata.go b/compiler/gopherjspkg/fs_vfsdata.go index b21d6e838..9346b35fb 100644 --- a/compiler/gopherjspkg/fs_vfsdata.go +++ b/compiler/gopherjspkg/fs_vfsdata.go @@ -21,50 +21,50 @@ var FS = func() http.FileSystem { fs := vfsgen۰FS{ "/": &vfsgen۰DirInfo{ name: "/", - modTime: time.Date(2019, 4, 25, 16, 19, 34, 225618757, time.UTC), + modTime: time.Date(2021, 4, 5, 14, 41, 56, 382250700, time.UTC), }, "/js": &vfsgen۰DirInfo{ name: "js", - modTime: time.Date(2019, 3, 10, 16, 38, 53, 764271817, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 12, 537781400, time.UTC), }, "/js/js.go": &vfsgen۰CompressedFileInfo{ name: "js.go", - modTime: time.Date(2019, 3, 10, 16, 38, 53, 764987009, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 12, 538783300, time.UTC), uncompressedSize: 8002, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x59\x5f\x6f\xdc\x36\x12\x7f\x5e\x7d\x8a\x39\xa1\x40\x56\xcd\x56\xbe\xb6\x86\x51\x38\xe7\x87\xa4\xb9\xfa\xdc\x4b\xdc\x00\x6e\xd0\x07\x23\x30\xb8\xd2\x68\x97\xb1\x44\xea\x48\x6a\x37\x7b\xb6\xbf\xfb\x61\xf8\x47\x2b\xad\xa4\xc4\xbe\x24\x2f\x75\xc5\xe1\x6f\x7e\x9c\x19\xce\x1f\xee\xd1\x11\xbc\x63\xd9\x2d\x5b\x21\x7c\xd4\x50\x2b\xb9\xe1\x39\x6a\x28\x1a\x91\x19\x2e\x85\x86\x42\x2a\xe0\xc2\xa0\x62\x99\xe1\x62\x05\x5b\x6e\xd6\x20\x98\xe1\x1b\x84\xdf\xd9\x86\x5d\x65\x8a\xd7\x06\x5e\xbe\xbb\xd0\x29\xfc\xca\xca\x52\x83\x91\x60\xd6\xa8\xb1\x83\xc2\x14\x82\x51\xc8\x0c\xe6\xa0\x6b\xcc\x38\x2b\xcb\x1d\x2c\x77\x70\x2e\xeb\x35\xaa\xdf\xaf\x80\x89\x1c\x8c\x62\x42\x97\x56\x28\xe7\x0a\x33\x53\xee\x3c\x18\x57\x90\x49\xa5\x50\xd7\x52\xe4\x44\xa3\xa3\x5a\xef\x84\x61\x9f\xd2\xe8\xe8\x28\x3a\x3a\x82\xf7\x1a\xe1\x2d\xbb\xc5\xbf\x14\xab\x6b\x54\xb4\x1f\x3f\xd5\x52\x23\x54\x68\xd6\x32\xb7\xf4\xf6\xbb\x53\xf8\x6b\x8d\x02\x6a\xa6\x35\xc1\x6e\x58\xd9\xa0\x6e\xb5\x2f\x48\x37\x14\xb2\x2c\xe5\x96\x96\xcd\xae\x46\xc8\xa4\xd8\xa0\xd2\xed\xb9\x6a\x54\x85\x54\x15\xe6\xa7\x9e\x02\xdc\xc3\xb9\x74\xb2\xfd\x7f\xf7\x5d\xda\x9d\xf5\x7b\xf8\xb5\x83\xb9\x64\xd9\x2d\x91\xb4\x56\x2f\x58\x86\x77\x0f\x70\xef\x71\x7f\x18\xfb\xf7\xd4\xef\x5d\x09\x8f\xbb\x94\xb2\x84\xc1\xbf\x7b\x78\x25\x65\x89\x4c\x0c\xbe\x8f\xcb\x77\x24\x3c\x2e\x9d\x61\x85\x4a\x5b\xf7\x16\xa5\x64\x46\xdb\xfd\x97\x4d\xb5\x44\x35\xd4\x67\x45\x4e\x8e\xbf\x88\xab\x8d\x22\x7f\x0c\xf6\x5f\x4d\x7c\x1f\x97\x1f\xe2\x5e\x7f\xe0\xc2\xfc\x32\xdc\x7f\x21\xcc\x2f\x2f\x95\x62\xbb\x83\xef\xe3\xf2\x13\xb8\x3f\x9e\x8c\xe1\xfe\x78\x32\x00\x9e\x92\x9f\xc0\xfd\xf9\xa7\x85\xfb\xa3\x87\xfb\xf3\x4f\x53\xb8\xd3\x74\x3b\xb8\xcd\xc8\xc1\xee\xe1\x3d\x1f\x33\xc4\x94\xfc\x14\xee\xe1\xc1\x1c\xee\xd0\x10\x53\xf2\x53\xb8\xce\x10\x4d\x7b\x44\x87\x3b\x34\xc4\x7d\x4f\xea\xf3\xb8\x36\x22\x7f\xfe\xe9\x80\xef\x6f\xee\xeb\x01\xf0\x94\xfc\x24\xee\x41\xa4\x7b\xdc\x93\xe3\x29\xdc\xc9\x9b\x11\x70\x59\x59\x82\x34\x6b\x54\xa0\x4b\x9e\xa1\x0e\xfb\x87\xb1\x0b\xfb\x78\x68\xb3\xcc\x67\x70\x69\xbf\x1e\xee\xd7\x88\x4e\x53\x2f\xdd\x4d\x7d\x1f\xe2\xee\x2b\xc4\x81\x1d\xfc\xf7\x43\x7d\x24\x3f\x4f\xd3\xb4\xc3\x3a\x81\xef\x3f\xea\xf4\x8f\xe5\x47\xcc\x4c\x8b\x6b\x78\x85\xe9\x9f\xbc\xc2\x83\xfd\xaf\x99\x19\x63\x33\x21\x3f\xe4\xfb\xc3\xf8\x2a\x70\xa1\x0d\x13\x19\xca\x02\x2e\x65\xbe\xcf\xeb\x1d\x6a\x9f\xc5\xad\x58\xad\x17\x94\xa5\x9a\xcc\xe8\x71\xdc\x0e\x8c\x95\xbf\x76\x39\x6d\xdc\x81\xf7\xbe\x14\xbd\xcc\x73\x4e\x76\xa4\x72\xbb\xb0\xb5\x9c\x79\x2d\x54\xc6\x0c\xe3\x82\xd2\x22\xeb\xf2\x2c\x38\x96\xf9\x02\xa4\xa0\xe2\xbb\xb6\xe5\xce\xa0\x30\x20\x0b\x57\x0c\x69\x19\xb6\xbc\x2c\x61\x89\xb6\x6e\x62\xde\x2f\xa9\x36\xd7\x6f\xc8\xf7\x54\xd2\x58\x1a\xd5\x6d\x83\x11\x11\x27\xaf\x87\x6b\x60\x81\x04\x2a\xcf\x6d\xd8\x58\x48\x2b\xdd\x69\x2d\xb8\xd1\x6d\x29\xff\x06\x6d\xc5\xb0\x91\x80\x97\x20\x78\x09\xb5\xb4\x96\x25\xc9\x3d\x63\xfc\x4f\xc3\xca\xfe\x71\x9f\x69\x88\x45\x53\x96\x71\x1a\xe4\x32\x26\x40\x48\x43\xf6\x69\xc8\x3a\x8c\x4e\x5a\xb1\x1a\x6e\x71\x97\x46\xf6\x42\x78\x49\xe7\x8a\x3b\x7f\x48\xf8\xde\x7f\x7e\xb0\x76\x3a\x47\x03\x0a\x4d\xa3\x84\xb6\x96\x77\x42\xcf\x6c\x97\x56\xa3\x32\x3b\xd7\x8b\xd1\xd2\x8a\x6f\x50\x38\x78\xba\x21\x30\x97\x01\x2b\x21\x98\xf9\x2d\xee\x7c\x09\x4c\x5a\x25\x77\x1e\x1c\x64\xea\x6d\xec\x25\x13\xaf\xff\x0a\x0d\x50\x5b\xb4\xf2\xfa\x6d\x6f\xe4\x0d\xf7\xff\x92\xb9\xea\x91\x59\x78\xcc\xde\x6d\xbe\xdb\x13\xf2\xd2\x5e\x2c\xf0\x7a\x8d\x25\x1a\x04\x85\x95\xdc\xe0\x57\x99\xc6\x21\xf5\xac\xd3\xd1\xbe\x5f\x0d\x9a\xdf\xa0\x58\x99\xf5\xb8\x53\xe2\xd2\x2e\xc6\x2d\x85\x85\x6f\x14\x8d\xbb\x1f\x5c\x98\x11\x06\x0e\x71\x9e\xd0\xf2\x88\x47\xda\x65\xa7\xff\x42\xe4\xf8\xa9\xa7\x9e\x3f\x33\x6b\xc0\x12\x2b\x7f\x43\x99\x70\xa9\x7a\x44\x95\xdd\x3c\xe7\xa4\xe9\x73\x41\xe0\xc5\x3a\x41\xe0\xb4\x6a\x34\x4f\x56\x19\x36\x3b\xad\x8f\xf0\xb6\x97\x3e\x70\x38\x5d\x7d\xc8\xdc\xfd\xef\x9a\xdc\x65\x81\x43\x57\x0b\x56\xe1\x08\x17\x02\x99\xd3\x5a\x1b\x7b\x4c\xad\x34\x0c\x6a\xc9\xa4\x61\x5a\x00\xb7\x33\x4d\xd3\xbd\x5b\x36\xf2\x16\x07\x0c\x29\x53\x61\x59\xa4\xf0\xe7\x9a\x6b\x97\x31\x0b\xc6\x4b\xe0\x05\x70\x9b\x4c\x28\x47\xb0\xb6\x04\x8e\xba\x8c\x80\xe7\x4f\x24\xda\xd9\xd5\x21\x79\x89\x5b\xc8\x6c\xaa\xa4\x6c\x24\x70\xdb\xd6\x16\x97\xd9\xb9\x76\xa5\x3a\xe4\xdb\x51\xd2\x7d\xc6\x30\xcf\xa4\x70\x29\x4c\xaa\x64\x84\xff\x25\x6e\x9f\x4a\x3e\x6c\xe9\x30\xa7\x19\x64\xe4\xce\xf5\xaf\x97\x1d\x48\x58\x96\x49\x65\xc7\xc3\x7e\x41\x3a\x1c\xdb\x46\xa8\x92\x92\x79\xe2\x60\x86\xac\xfc\xaa\xbf\x12\x6e\x96\xf8\x12\x23\x3f\x72\x7c\x05\x27\xa7\x68\x9e\x04\xa8\x21\xaf\x56\x22\x04\xe2\x58\xc5\x18\xe4\xa1\x47\x73\x82\x79\xcd\x94\xc6\x0b\x61\xc6\xbc\x7b\x21\xcc\x64\xe2\x72\x6b\x2d\xab\x93\xe3\xc7\xf0\x3a\x39\xfe\x76\xcc\x4e\x8e\x1d\xb7\x93\xe3\x71\x76\x76\xdd\xf1\x7b\xcf\x1f\x45\xb0\xf9\x96\x0c\x9d\xce\x79\x12\x50\x87\x1c\x5b\x09\x47\xd2\x0e\x06\x5f\xe4\x18\x86\x84\x27\x92\xb4\xe0\x63\x34\xed\xc2\x3c\x69\x71\x87\x34\x83\x44\xeb\x6a\x77\xc9\x1f\xe3\xee\x90\x0e\x52\xb8\x42\x04\xc3\x96\x25\xd5\x06\x08\xdd\x62\x26\x2b\x5b\x62\xa8\x31\xcc\xd1\x30\x5e\x8e\xdd\x91\x56\xa3\x73\x77\xdb\x09\x8f\x3a\xbd\x95\xf4\x8e\x17\x9a\x15\xa3\x54\xa9\x63\x13\xd6\x37\xb5\x51\x0b\xd8\xae\x79\xb6\xb6\x6d\xdd\x12\x3b\xc7\xd8\x70\x06\x8d\xc5\x48\xdf\xb9\x66\x31\x85\x4b\x69\x2c\x0f\x91\x63\x6e\xa9\xd7\xcd\xb2\xe4\x19\x35\x82\x63\x61\x60\x77\xfb\x30\xa8\x8d\x1a\x8b\x83\x20\xe2\x38\xff\x53\x29\xa9\x00\x45\xc6\x6a\xdd\x94\x36\x9b\x77\xfc\x8b\xb4\xaa\x29\x79\x4b\x8d\xae\x3b\x6e\x94\xc0\x9c\x28\x49\x60\x70\x2e\xa1\x66\x82\x67\xb6\x2d\xae\xd8\x8e\xce\xa3\x30\x93\x1b\x54\x98\x2f\xa8\x80\xda\x94\x25\xe0\x7b\xa7\xc7\xac\x99\x81\xb5\x2c\x73\x67\x9d\x43\x4d\xa1\x58\xb8\x9e\xd6\x6d\xf1\xd3\xc5\x5d\x34\xf3\xa7\x8c\xba\xc4\xbb\xb6\xae\x50\x6b\x72\xb4\x1f\x2c\x3a\x67\xca\xa7\x35\x39\x13\xa2\x52\x9e\x62\xe2\x80\x3b\x49\x32\x9a\x79\x13\xc6\x87\x20\xa7\x10\xc3\x73\xfa\xd3\x76\xba\xb1\xd7\x1f\x27\x6d\x1a\x8d\x42\x82\x67\xd9\x6d\x8f\xaa\xb6\x5f\xda\xe6\xf2\x2b\x19\x5b\xfc\x31\xc6\x2d\x35\xab\x6f\x48\xec\xbc\x94\x4b\x56\xda\x3e\x47\xf7\x27\x90\x95\x5b\xf1\xe1\x3b\x8f\xb7\x5c\xe4\x72\x1b\xdb\x08\x5c\x2a\xb9\xd5\xe1\x0d\x2e\x3e\x7f\xf3\xc7\xab\x97\x6f\xdc\x0a\x8d\xaa\xe9\x47\x9d\xa4\xd1\x86\xa9\x80\x1e\xdc\x46\x0a\xdf\xca\xbc\x29\xd1\x2b\xdc\xcf\x00\xfe\xfc\x71\x65\x97\x63\xd8\x30\xc5\xed\xf5\xd5\x68\x68\xfa\xf2\xb8\x29\xfc\x8b\x0b\x73\xea\x06\x09\x70\xc2\xf6\x31\x56\x19\xd7\xb4\x3d\xfb\xa8\x53\xa7\xc2\x1d\xdb\xad\x69\x3a\xf8\xfe\x7f\x2f\x59\x85\xf1\x82\x5a\x88\xe4\x99\x23\xea\x59\x75\x89\xbe\x17\x39\x16\x9c\x22\x7d\xcf\xb5\xe3\x11\x47\x3b\x6e\x82\x54\xec\x80\xf6\xbb\xba\x58\xaf\x71\xd9\xac\x56\xa8\x60\x45\x2d\x6f\x26\xab\x9a\x97\x87\x33\x2e\x35\xfc\xb9\x97\x7b\x11\x53\x7c\x18\xdb\x10\x7b\x77\x07\x88\x79\x02\x77\x9d\xcc\x28\x58\xe9\x1b\x9f\x5e\x0f\xef\x97\x86\x53\xaf\xbb\x7f\x0a\x6b\x85\x1a\x85\xd1\xc0\x1f\x93\x60\xfa\xaa\x5c\xef\x3d\xd2\x7a\xb5\x51\x27\x78\xe9\xe3\xeb\x2d\xbb\xc5\xdf\x08\x62\xab\x58\xad\xbb\x9d\x1e\x85\x8e\xb3\x2c\xcb\x32\xd4\xe1\x8d\x3f\xbc\x97\xcb\xe2\xc0\x36\xd4\x4f\xc6\x2e\xe0\x98\x5a\x35\x64\x1a\x1d\xd3\x14\xb6\x95\x2a\x0f\x79\x3c\xa8\x9b\x17\xc2\x3d\xec\xd8\x2e\xd4\x13\xb4\x5d\xb6\xdb\x08\xd7\x1f\xda\x8c\xf9\x85\xb3\xb8\x18\x76\xbd\x7a\xfc\x5d\xe5\x15\xc4\x8b\x43\xa3\x14\x22\x09\x97\xea\xdf\xb8\xd3\x3d\x7f\xdc\xd2\x07\x1f\xe2\x6e\xa4\x18\x3e\x47\xb8\x03\xd0\xd6\x6e\x3a\xbf\xfe\xb0\xbf\xd2\xbc\x00\x09\x67\x67\xf6\x29\xe1\xfe\xde\xfd\xbd\x8f\xb7\xbb\x68\xd6\x35\xff\xec\x21\x9a\x31\x38\x3d\x0b\xfc\xed\x6d\x70\xa8\x71\xe2\x4f\x43\xb4\xe2\x05\xc8\x24\x9a\x69\x12\xa5\xc3\xcd\x83\xc6\x05\xb0\x76\x58\x4c\xa2\x99\xfd\xd1\x86\x84\xfe\xfe\x02\x38\xfc\xa3\xb3\xf8\x02\xf8\xf3\xe7\x56\xbd\xbe\xe6\x1f\xe0\x0c\x58\x3b\xf1\xed\xb3\x0d\xd1\xf1\xec\x74\x27\x34\xc2\x4f\x2a\xfb\x31\x62\x18\xb1\xae\x54\xae\x99\xb6\x31\x54\x53\xda\x29\x6c\x21\x09\x37\x1f\xf3\xf6\xf5\x46\x16\x14\xd0\xef\xb5\x5d\x2a\x79\xc6\x0d\x5d\x39\x83\xca\x06\x8e\x76\x7f\x76\x7e\xb5\xf1\xbf\xe3\xf8\x0a\x63\x1f\xa2\x0e\x7f\xcd\xd9\x07\x96\x27\xfb\x99\xf0\xdf\x90\x81\x0e\x2f\x4b\x12\xcd\xe4\xa4\x23\x68\x38\x21\x01\x97\x9e\x6e\x6e\xc2\xcd\xbd\x71\x87\xbf\xb9\x89\x17\xb0\x49\xa2\x59\xe0\x7c\x7a\x06\x1b\x07\xd1\x19\x94\xe2\x24\x94\x1f\x2b\x14\x8f\xb8\xcb\x2f\x8d\x38\xad\xb2\x9e\xf7\xcb\xc1\x71\xd1\x8c\xa2\xad\x72\xb0\xf5\xed\xaa\x53\x38\xe0\x6f\x67\x10\xc7\x70\x07\x47\x47\x76\x78\x0b\x3e\x88\x66\xb3\x59\x26\x85\xe1\xa2\xc1\x68\x46\xfe\xf6\xa7\xf2\x28\x34\xe7\x76\x60\x16\xee\x7e\x86\x59\xae\x0d\xf8\x8e\x35\x67\xe3\x57\x10\x3f\x39\x13\xf1\xff\x62\x78\xd3\x25\x23\x59\x2d\x81\xb1\x92\x75\x47\x57\xb2\x08\x47\x31\xbb\x3a\x4e\x16\x60\x54\x83\xe1\x12\xb0\xba\x2e\x77\x04\xe0\x86\x70\x3a\xfa\x43\x2f\x5e\x65\xd4\x8e\xbb\xf6\xcd\xfb\x55\x53\x14\x53\x21\xdb\x15\x28\x94\xac\x80\xc1\x72\x67\xfc\xc3\xb5\x0f\xa5\x3e\xce\x7c\x09\xd7\x1f\x48\xa6\x77\x74\xf7\xd0\x3d\x0c\xa6\x25\xc5\x4a\x51\x50\x51\x3c\x3d\xf3\xa8\xf6\x60\xdf\xb9\xaf\x71\xe2\xe6\xa4\x68\xe6\xde\x8e\x0e\xa5\xfc\x8b\x52\x2b\x15\xae\x64\x47\xc4\xbe\xbc\x84\x88\x5a\x5a\x8e\x6d\xc2\xb0\x72\x94\x31\xac\xb2\xf0\xdf\xe7\x0e\x35\x64\xbf\xb7\xee\x1d\x56\xf3\xaa\x2e\xd1\x3e\x52\x52\x2f\x97\xc2\x85\x7d\xa1\x68\x0b\x8d\x7d\xc2\xd4\x6b\xa9\xcc\xda\xfe\x92\x27\xd5\xf0\xee\x6b\x98\x2f\xb1\x90\xaa\x3b\x61\x24\xbe\x37\x7c\x3b\xf1\x62\xed\xfa\xad\x1e\x87\xfd\xcf\x06\x4f\x64\xe1\x7f\xa3\x98\x26\x71\xd5\xff\xb9\x23\x72\x1e\xe6\x82\xd3\x00\x73\x17\xcd\x8e\x8e\x80\x6d\x24\xcf\x21\x47\x96\x43\x26\x73\x04\x2c\x79\xc5\x05\xa3\xb0\x8d\x66\xd6\xc7\xb6\x87\xbb\x7b\x88\x66\x37\x70\x06\x18\x3d\x44\xff\x0b\x00\x00\xff\xff\x72\x0d\xcb\x80\x42\x1f\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xac\x59\x5f\x6f\xdc\x36\x12\x7f\x5e\x7d\x8a\x39\xa1\x40\x56\xcd\x56\xbe\x26\x86\x51\x38\xe7\x87\xa4\xb9\xfa\xd2\x4b\xdc\x00\x6e\xd0\x07\x23\x30\xb8\xd2\x68\x97\xb1\x44\xea\x48\x6a\x37\x7b\xb6\xbf\xfb\x61\xf8\x47\x2b\xad\xa4\xc4\xbe\x24\x2f\x75\xc5\xe1\x6f\x7e\x9c\x19\xce\x1f\xee\xd1\x11\xbc\x67\xd9\x0d\x5b\x21\x7c\xd2\x50\x2b\xb9\xe1\x39\x6a\x28\x1a\x91\x19\x2e\x85\x86\x42\x2a\xe0\xc2\xa0\x62\x99\xe1\x62\x05\x5b\x6e\xd6\x20\x98\xe1\x1b\x84\xdf\xd9\x86\x5d\x66\x8a\xd7\x06\x5e\xbe\x7f\xa3\x53\xf8\x95\x95\xa5\x06\x23\xc1\xac\x51\x63\x07\x85\x29\x04\xa3\x90\x19\xcc\x41\xd7\x98\x71\x56\x96\x3b\x58\xee\xe0\x5c\xd6\x6b\x54\xbf\x5f\x02\x13\x39\x18\xc5\x84\x2e\xad\x50\xce\x15\x66\xa6\xdc\x79\x30\xae\x20\x93\x4a\xa1\xae\xa5\xc8\x89\x46\x47\xb5\xde\x09\xc3\x3e\xa7\xd1\xd1\x51\x74\x74\x04\x1f\x34\xc2\x3b\x76\x83\x7f\x29\x56\xd7\xa8\x68\x3f\x7e\xae\xa5\x46\xa8\xd0\xac\x65\x6e\xe9\xed\x77\xa7\xf0\xd7\x1a\x05\xd4\x4c\x6b\x82\xdd\xb0\xb2\x41\xdd\x6a\x5f\x90\x6e\x28\x64\x59\xca\x2d\x2d\x9b\x5d\x8d\x90\x49\xb1\x41\xa5\xdb\x73\xd5\xa8\x0a\xa9\x2a\xcc\x4f\x3d\x05\xb8\x83\x73\xe9\x64\xfb\xff\xee\xba\xb4\x3b\xeb\x77\xf0\x6b\x07\x73\xc9\xb2\x1b\x22\x69\xad\x5e\xb0\x0c\x6f\xef\xe1\xce\xe3\xfe\x34\xf6\xef\xb1\xdf\xbb\x12\x1e\x77\x29\x65\x09\x83\x7f\x77\xf0\x4a\xca\x12\x99\x18\x7c\x1f\x97\xef\x48\x78\x5c\x3a\xc3\x0a\x95\xb6\xee\x2d\x4a\xc9\x8c\xb6\xfb\x2f\x9a\x6a\x89\x6a\xa8\xcf\x8a\x9c\x1c\x7f\x15\x57\x1b\x45\xfe\x18\xec\xbf\x9c\xf8\x3e\x2e\x3f\xc4\xbd\xfa\xc8\x85\xf9\x65\xb8\xff\x8d\x30\xbf\xbc\x54\x8a\xed\x0e\xbe\x8f\xcb\x4f\xe0\xfe\x7c\x32\x86\xfb\xf3\xc9\x00\x78\x4a\x7e\x02\xf7\xf9\xb3\x85\xfb\xa3\x87\xfb\xfc\xd9\x14\x2e\x3c\x84\x6f\x33\x72\xb0\x3b\xf8\xc0\xc7\x0c\x31\x25\x3f\x85\x7b\x78\x30\x87\x3b\x34\xc4\x94\xfc\x14\xae\x33\x44\xd3\x1e\xd1\xe1\x0e\x0d\x71\xd7\x93\xfa\x32\xae\x8d\xc8\xe7\xcf\x0e\xf8\xfe\xe6\xbe\x1e\x00\x4f\xc9\x4f\xe2\x1e\x44\xba\xc7\x3d\x39\x9e\xc2\x9d\xbc\x19\x01\x97\x95\x25\x48\xb3\x46\x05\xba\xe4\x19\xea\xb0\x7f\x18\xbb\x9d\x78\x68\xb3\xcc\x17\x70\x69\xbf\x1e\xb9\x57\x88\x4e\x53\x2f\xdd\x4d\x7d\x1f\xe2\xee\x2b\xc4\x81\x1d\xfc\xf7\x41\x7e\x68\x44\x36\x4f\xd3\xb4\xc3\x3a\x81\x1f\x3f\xe9\xf4\x8f\xe5\x27\xcc\x4c\x8b\x6b\x78\x85\xe9\x9f\xbc\xc2\x83\xfd\xaf\x99\x19\x63\x33\x21\x3f\xe4\xfb\xd3\xf8\x2a\x70\xa1\x0d\x13\x19\xca\x02\x2e\x64\xbe\xcf\xeb\x1d\x6a\x5f\xc4\xad\x58\xad\x17\x94\xa5\x9a\xcc\xe8\x71\xdc\x0e\x8c\x95\xbf\x72\x39\x6d\xdc\x81\x77\xbe\x14\xbd\xcc\x73\x4e\x76\xa4\x72\xbb\xb0\xb5\x9c\x79\x2d\x54\xc6\x0c\xe3\x82\xd2\x22\xeb\xf2\x2c\x38\x96\xf9\x02\xa4\xa0\xe2\xbb\xb6\xe5\xce\xa0\x30\x20\x0b\x57\x0c\x69\x19\xb6\xbc\x2c\x61\x89\xb6\x6e\x62\xde\x2f\xa9\x36\xd7\x6f\xc8\xf7\x54\xd2\x58\x1a\xd5\x6d\x83\x11\x11\x27\xaf\x87\x6b\x60\x81\x04\x2a\xcf\x6d\xd8\x58\x48\x2b\xdd\x69\x2d\xb8\xd1\x6d\x29\xff\x0e\x6d\xc5\xb0\x91\x80\x97\x20\x78\x09\xb5\xb4\x96\x25\xc9\x3d\x63\xfc\x4f\xc3\xca\xfe\x71\x9f\x68\x88\x45\x53\x96\x71\x1a\xe4\x32\x26\x40\x48\x43\xf6\x69\xc8\x3a\x8c\x4e\x5a\xb1\x1a\x6e\x70\x97\x46\xf6\x42\x78\x49\xe7\x8a\x5b\x7f\x48\xf8\xd1\x7f\xbe\xb7\x76\x3a\x47\x03\x0a\x4d\xa3\x84\xb6\x96\x77\x42\x4f\x6c\x97\x56\xa3\x32\x3b\xd7\x8b\xd1\xd2\x8a\x6f\x50\x38\x78\xba\x21\x30\x97\x01\x2b\x21\x98\xf9\x0d\xee\x7c\x09\x4c\x5a\x25\xb7\x1e\x1c\x64\xea\x6d\xec\x25\x13\xaf\xff\x12\x0d\x50\x5b\xb4\xf2\xfa\x6d\x6f\xe4\x0d\xf7\xff\x92\xb9\xec\x91\x59\x78\xcc\xde\x6d\xbe\xdd\x13\xf2\xd2\x5e\x2c\xf0\x7a\x8d\x25\x1a\x04\x85\x95\xdc\xe0\x37\x99\xc6\x21\xf5\xac\xd3\xd1\xbe\x5f\x0d\x9a\xdf\xa2\x58\x99\xf5\xb8\x53\xe2\xd2\x2e\xc6\x2d\x85\x85\x6f\x14\x8d\xbb\x1f\x5c\x98\x11\x06\x0e\x71\x9e\xd0\xf2\x88\x47\xda\x65\xa7\xff\x8d\xc8\xf1\x73\x4f\x3d\x7f\x62\xd6\x80\x25\x56\xfe\x86\x32\xe1\x52\xf5\x88\x2a\xbb\x79\xce\x49\xd3\x97\x82\xc0\x8b\x75\x82\xc0\x69\xd5\x68\x1e\xad\x32\x6c\x76\x5a\x1f\xe0\x6d\x2f\x7d\xe0\x70\xba\xfa\x90\xb9\xfb\xdf\x35\xb9\xcb\x02\x87\xae\x16\xac\xc2\x11\x2e\x04\x32\xa7\xb5\x36\xf6\x98\x5a\x69\x18\xd4\x92\x49\xc3\xb4\x00\x6e\x67\x9a\xa6\x7b\xb7\x6c\xe4\x0d\x0e\x18\x52\xa6\xc2\xb2\x48\xe1\xcf\x35\xd7\x2e\x63\x16\x8c\x97\xc0\x0b\xe0\x36\x99\x50\x8e\x60\x6d\x09\x1c\x75\x19\x01\xcf\x1f\x49\xb4\xb3\xab\x43\xf2\x02\xb7\x90\xd9\x54\x49\xd9\x48\xe0\xb6\xad\x2d\x2e\xb3\x73\xed\x4a\x75\xc8\xb7\xa3\xa4\xfb\x8c\x61\x9e\x49\xe1\x52\x98\x54\xc9\x08\xff\x0b\xdc\x3e\x96\x7c\xd8\xd2\x61\x4e\x33\xc8\xc8\x9d\xeb\x5f\x2f\x3b\x90\xb0\x2c\x93\xca\x8e\x87\xfd\x82\x74\x38\xb6\x8d\x50\x25\x25\xf3\xc4\xc1\x0c\x59\xf9\x55\x7f\x25\xdc\x2c\xf1\x35\x46\x7e\xe4\xf8\x06\x4e\x4e\xd1\x3c\x09\x50\x43\x5e\xad\x44\x08\x44\xf3\x55\x5a\x94\x68\x1e\xca\x09\xe6\x35\x53\x1a\xdf\x08\x93\x8c\x46\xa7\x99\x4c\x5c\x6e\xad\x65\x75\x72\xfc\x10\x5e\x27\xc7\xdf\x8f\xd9\xc9\xb1\xe3\x76\x72\x3c\xce\xce\xae\x3b\x7e\x1f\xf8\x83\x08\x36\xdf\x93\xa1\xd3\x39\x4f\x02\xea\x90\x63\x2b\xe1\x48\xda\xc1\xe0\xab\x1c\xc3\x90\xf0\x48\x92\x16\x7c\x8c\xa6\x5d\x98\x27\x2d\xee\x90\x66\x90\x68\x5d\xed\x2e\xf9\x43\xdc\x1d\xd2\x41\x0a\x97\x88\x60\xd8\xb2\xa4\xda\x00\xa1\x5b\xcc\x64\x65\x4b\x0c\x35\x86\x39\x1a\xc6\x4b\x3d\xee\x6a\x87\xe3\xdc\xdd\x76\xc2\xa3\x4e\x6f\x25\xbd\xe3\x85\x66\xc5\x28\x55\xea\xd8\x84\xf5\x4d\x6d\xd4\x02\xb6\x6b\x9e\xad\x6d\x5b\xb7\xc4\xce\x31\x36\x9c\x41\x63\x31\xd2\xf7\xae\x59\x4c\xe1\x42\x1a\xcb\x43\xe4\x98\x5b\xea\x75\xb3\x2c\x79\x46\x8d\xe0\x58\x18\xd8\xdd\x3e\x0c\x6a\xa3\xc6\xe2\x20\x88\x38\xce\xff\x54\x4a\x2a\x40\x91\xb1\x5a\x37\xa5\xcd\xe6\x1d\xff\x22\xad\x6a\x4a\xde\x52\xa3\xeb\x8e\x1b\x25\x30\x27\x4a\x12\x18\x9c\x4b\xa8\x99\xe0\x99\x6d\x8b\x2b\xb6\xa3\xf3\x28\xcc\xe4\x06\x15\xe6\x0b\x2a\xa0\x36\x65\x09\xf8\xd1\xe9\x31\x6b\x66\x60\x2d\xcb\xdc\x59\xe7\x50\x53\x28\x16\xae\xa7\x75\x5b\xfc\x74\x71\x1b\xcd\xfc\x29\xa3\x2e\xf1\xae\xad\x2b\xd4\x9a\x1c\xed\x07\x8b\xce\x99\xf2\x69\x4d\xce\x84\xa8\x94\xa7\x98\x38\xe0\x4e\x92\x8c\x66\xde\x84\xf1\x21\xc8\x29\xc4\xf0\x94\xfe\xb4\x9d\x6e\xec\xf5\xc7\x49\x9b\x46\xa3\x90\xe0\x59\x76\xd3\xa3\xaa\xed\x97\xb6\xb9\xfc\x46\xc6\x16\x7f\x8c\x71\x4b\xcd\xea\x1b\x12\x3b\x2f\xe5\x92\x95\xb6\xcf\xd1\xfd\x09\x64\xe5\x56\x7c\xf8\xce\xe3\x2d\x17\xb9\xdc\xc6\x36\x02\x97\x4a\x6e\x75\x78\x83\x8b\xcf\xdf\xfe\xf1\xea\xe5\x5b\xb7\x42\xa3\x6a\xfa\x49\x27\x69\xb4\x61\x2a\xa0\x07\xb7\x91\xc2\x77\x32\x6f\x4a\xf4\x0a\xf7\x33\x80\x3f\x7f\x5c\xd9\xe5\x18\x36\x4c\x71\x7b\x7d\x35\x1a\x9a\xbe\x3c\x6e\x0a\xff\xe2\xc2\x9c\xba\x41\x02\x9c\xb0\x7d\x8c\x55\xc6\x35\x6d\x4f\x3e\xe9\xd4\xa9\x70\xc7\x76\x6b\x9a\x0e\xbe\xff\xdf\x0b\x56\x61\xbc\xa0\x16\x22\x79\xe2\x88\x7a\x56\x5d\xa2\x1f\x44\x8e\x05\xa7\x48\xdf\x73\xed\x78\xc4\xd1\x8e\x9b\x20\x15\x3b\xa0\xfd\xae\x2e\xd6\x6b\x5c\x36\xab\x15\x2a\x58\x51\xcb\x9b\xc9\xaa\xe6\xe5\xe1\x8c\x4b\x0d\x7f\xee\xe5\x5e\xc4\x14\x1f\xc6\x36\xc4\xde\xdd\x01\x62\x9e\xc0\x6d\x27\x33\x0a\x56\xfa\xc6\xa7\xd7\xc3\xfb\xa5\xe1\xd4\xeb\xee\x9f\xc2\x5a\xa1\x46\x61\x34\xf0\x87\x24\x98\xbe\x2a\xd7\x7b\x8f\xb4\x5e\x6d\xd4\x09\x5e\xfa\xf8\x7a\xc7\x6e\xf0\x37\x82\xd8\x2a\x56\xeb\x6e\xa7\x47\xa1\xe3\x2c\xcb\xb2\x0c\x75\x78\xe3\x0f\xef\xe5\xb2\x38\xb0\x0d\xf5\x93\xb1\x0b\x38\xa6\x56\x0d\x99\x46\xc7\x34\x85\x6d\xa5\xca\x43\x1e\x0f\xea\xe6\x85\x70\x0f\x3b\xb6\x0b\xf5\x04\x6d\x97\xed\x36\xc2\xd5\xc7\x36\x63\x7e\xe5\x2c\x2e\x86\x5d\xaf\x1e\xff\x50\x79\x05\xf1\xe2\xd0\x28\x85\x48\xc2\xa5\xfa\x37\xee\x74\xcf\x1f\x37\xf4\xc1\x87\xb8\x1b\x29\x86\xcf\x11\xee\x00\xb4\xb5\x9b\xce\xaf\x3e\xee\xaf\x34\x2f\x40\xc2\xd9\x99\x7d\x4a\xb8\xbb\x73\x7f\xef\xe3\xed\x36\x9a\x75\xcd\x3f\xbb\x8f\x66\x0c\x4e\xcf\x02\x7f\x7b\x1b\x1c\x6a\x9c\xf8\xd3\x10\xad\x78\x01\x32\x89\x66\x9a\x44\xe9\x70\xf3\xa0\x71\x01\xac\x1d\x16\x93\x68\x66\x7f\xb4\x21\xa1\xbf\xbf\x00\x0e\xff\xe8\x2c\xbe\x00\xfe\xf4\xa9\x55\xaf\xaf\xf8\x47\x38\x03\xd6\x4e\x7c\xfb\x6c\x43\x74\x3c\x3b\xdd\x09\x8d\xf0\x93\xca\x7e\x8c\x18\x46\xac\x2b\x95\x6b\xa6\x6d\x0c\xd5\x94\x76\x0a\x5b\x48\xc2\xcd\xc7\xbc\x7d\xbd\x91\x05\x05\xf4\x07\x6d\x97\x4a\x9e\x71\x43\x57\xce\xa0\xb2\x81\xa3\xdd\x9f\x9d\x5f\x6d\xfc\xef\x38\xbe\xc2\xd8\x87\xa8\xc3\x5f\x73\xf6\x81\xe5\xc9\x7e\x21\xfc\x37\x64\xa0\xc3\xcb\x92\x44\x33\x39\xe9\x08\x1a\x4e\x48\xc0\xa5\xa7\xeb\xeb\x70\x73\xaf\xdd\xe1\xaf\xaf\xe3\x05\x6c\x92\x68\x16\x38\x9f\x9e\xc1\xc6\x41\x74\x06\xa5\x38\x09\xe5\xc7\x0a\xc5\x23\xee\xf2\x4b\x23\x4e\xab\xac\xe7\xfd\x72\x70\x5c\x34\xa3\x68\xab\x1c\x6c\x7d\xb3\xea\x14\x0e\xf8\xdb\x19\xc4\x31\xdc\xc2\xd1\x91\x1d\xde\x82\x0f\xa2\xd9\x6c\x96\x49\x61\xb8\x68\x30\x9a\x91\xbf\xfd\xa9\x3c\x0a\xcd\xb9\x1d\x98\x85\xbb\x9f\x61\x96\x6b\x03\xbe\x63\xcd\xd9\xf8\x15\xc4\xcf\xce\x44\xfc\xbf\x18\xde\x74\xc9\x48\x56\x4b\x60\xac\x64\xdd\xd1\x95\x2c\xc2\x51\xcc\xae\x8e\x93\x05\x18\xd5\x60\xb8\x04\xac\xae\xcb\x1d\x01\xb8\x21\x9c\x8e\x7e\xdf\x8b\x57\x19\xb5\xe3\xae\x7d\xf3\x7e\xd5\x14\xc5\x54\xc8\x76\x05\x0a\x25\x2b\x60\xb0\xdc\x19\xff\x70\xed\x43\xa9\x8f\x33\x5f\xc2\xd5\x47\x92\xe9\x1d\xdd\x3d\x74\x0f\x83\x69\x49\xb1\x52\x14\x54\x14\x4f\xcf\x3c\xaa\x3d\xd8\x0f\xee\x6b\x9c\xb8\x39\x29\x9a\xb9\xb7\xa3\x43\x29\xff\xa2\xd4\x4a\x85\x2b\xd9\x11\xb1\x2f\x2f\x21\xa2\x96\x96\x63\x9b\x30\xac\x1c\x65\x0c\xab\x2c\xfc\xf7\xa9\x43\x0d\xd9\xef\x9d\x7b\x87\xd5\xbc\xaa\x4b\xb4\x8f\x94\xd4\xcb\xa5\xf0\xc6\xbe\x50\xb4\x85\xc6\x3e\x61\xea\xb5\x54\x66\x6d\x7f\xc9\x93\x6a\x78\xf7\x35\xcc\x97\x58\x48\xd5\x9d\x30\x12\xdf\x1b\xbe\x9b\x78\xb1\x76\xfd\x56\x8f\xc3\xfe\x67\x83\x47\xb2\xf0\xbf\x51\x4c\x93\xb8\xec\xff\xdc\x11\x39\x0f\x73\xc1\x69\x80\xb9\x8d\x66\x47\x47\xc0\x36\x92\xe7\x90\x23\xcb\x21\x93\x39\x02\x96\xbc\xe2\x82\x51\xd8\x46\x33\xeb\x63\xdb\xc3\xdd\xde\x47\xb3\x6b\x38\x03\x8c\xee\xa3\xff\x05\x00\x00\xff\xff\x72\x0d\xcb\x80\x42\x1f\x00\x00"), }, "/nosync": &vfsgen۰DirInfo{ name: "nosync", - modTime: time.Date(2019, 3, 5, 13, 38, 20, 257702305, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 12, 635790600, time.UTC), }, "/nosync/map.go": &vfsgen۰CompressedFileInfo{ name: "map.go", - modTime: time.Date(2019, 1, 3, 14, 55, 7, 233338323, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 12, 588798700, time.UTC), uncompressedSize: 1958, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x55\x4d\x8f\xdb\x46\x0c\x3d\x5b\xbf\x82\x3d\x55\x2e\x14\xe7\x9e\x62\x0f\x05\x7a\x29\xd0\x34\x40\xdb\x5b\x90\x03\x2d\x71\xac\x81\xe7\x43\x1d\x52\xeb\x2a\x8b\xfd\xef\x05\x39\xb2\x57\xde\x24\x45\x0f\xbd\xd9\x23\x0e\xf9\xf8\xde\x23\x67\xc2\xfe\x8c\x27\x82\x94\x79\x49\x7d\xd3\xbc\x7d\x0b\xef\x71\x02\xcf\x80\xd0\xe7\xd4\xcf\xa5\x50\x12\x88\x38\xc1\xc5\xcb\x08\x18\x73\x11\xff\x99\x86\x37\x7d\x4e\x2c\x98\xe4\x8d\xf8\x48\x10\x32\x0e\xdc\x01\x4b\x2e\xc4\x1d\x60\x1a\x60\xa0\x40\x42\x7c\xd0\x9c\xbf\x88\xa6\x64\x74\x04\x2e\x17\x88\x73\x10\x3f\x05\x82\x53\x2e\x79\x16\x9f\x88\x41\x32\xf4\x18\x02\xa0\x02\xf8\x9e\x21\x92\x8c\x79\xe0\x0d\x8a\xb0\x68\x2e\x4d\xf7\xe7\x48\xf0\x99\x4a\xbe\x62\x7d\xc4\xe0\x07\x2b\x4a\x71\x92\x5b\xd8\x4f\xf6\x3d\xce\x2c\x90\xb2\xc0\x91\xa0\xcf\x93\xa7\x01\xd0\x09\x15\x70\xbe\xb0\xc0\xcc\x74\x68\x64\x99\xc8\x82\x59\xca\xdc\x0b\x3c\x35\xbb\xa8\x4d\x7f\xf4\x49\xa8\x38\xec\xe9\xe9\xf9\xd3\xe6\x77\xf3\x6c\x54\xfd\x9a\x71\x80\x42\x32\x97\xc4\x20\x23\x29\x90\x99\x2a\x0b\x03\xf8\x64\x67\xca\x9d\x36\x8d\x70\xa6\xa5\x83\x5c\x20\xf9\x00\xde\x41\xca\x9a\xa3\x5e\xf1\x0c\x53\x21\xa6\x24\x87\x6b\x83\xf9\x0c\x85\x78\x0e\x02\x3e\x0d\xbe\x47\x21\x86\xcb\x48\x32\x52\x59\x2f\x5d\x90\xc1\xe5\x39\x6d\x4b\x1d\x1a\x37\xa7\x1e\xda\x08\x3f\xbc\xc7\x69\x6f\x10\xdb\x33\x2d\xb0\x41\xbf\x87\x76\xad\xfa\x72\xd6\x69\xbd\x63\xce\x61\xaf\xcd\xdb\x67\x3b\x7a\x80\x78\x88\x1f\xcf\xb4\x7c\x6a\x76\xb5\x53\xb8\x7d\x5c\x59\xf8\x43\xdb\x05\x26\xd9\x72\x70\xeb\xf8\x35\x20\x8b\x6e\x8d\x8a\x2f\x40\x58\x6d\xef\xb4\x24\x3c\x3c\x18\x4f\x4f\xcd\x6e\x67\x7f\x21\xe2\x99\xda\x7f\xd1\x64\xdf\xec\x9e\x9b\xdd\x15\x2d\x3c\xd4\xf4\x1b\xa5\x3e\x94\x8a\x74\x2b\x18\xfd\xed\x59\x7c\x3a\x6d\x50\xeb\xb1\x11\xe6\xee\x24\xf9\xa0\xc4\x5f\x3c\x53\x07\x5e\x56\xa3\x9b\xe5\xb6\xe9\x4e\xfe\x91\x56\x82\x6e\x3a\xea\x68\xd0\x70\xd3\x92\x41\x8a\x76\xed\x36\x64\xa9\x90\x35\xac\x03\x87\x81\xed\x73\x75\xd1\xd7\xf4\x5c\x1b\xf9\x26\x89\x2d\xf6\x32\x63\xb8\x97\x77\x85\x71\x93\xd8\xbb\x17\x21\xe1\xdd\x8b\xcc\x3f\xea\x7f\x65\xfd\x5e\x6d\x05\x6d\x04\xff\xcf\xf2\xbc\x2a\x63\xdd\xaf\x9a\xfd\x6c\x0b\xe4\xba\x47\xfe\x8b\xb7\xea\x8d\x2f\xed\xfe\x55\x57\xd5\xc2\x86\xaa\x96\x68\xe3\x21\x76\x9a\x76\xbf\x02\xf8\x1d\xd3\x89\x6c\x2b\x31\x38\x60\xfa\x6b\xa6\x24\x1e\x43\x58\x0c\x02\x61\x3f\x9a\x53\xd4\x05\x15\xd9\x6a\x98\xbb\x79\xd4\xf5\xe7\xc0\xdd\x7c\x62\x2d\x76\x50\x2c\x39\x4b\x9e\x6a\x6b\x5e\xa8\xa0\xf8\x9c\xae\xdb\xab\x56\x1f\x32\xb1\x6d\xaf\x44\x3d\x31\x63\xf1\x61\x81\x3e\x97\x42\x3c\xe5\x34\xe8\xda\xc4\xa4\x27\x89\x3d\x8b\xd6\xe6\x84\x13\x8f\x59\x20\x57\x8b\xd9\x3a\xd5\x84\x7d\x4e\x1a\xc0\xef\x20\x65\xc3\x7d\xf1\x21\xe8\x56\x7c\xf4\xec\x85\x06\x88\x3a\x1d\x32\x62\x82\x9c\x7a\xea\xe0\x38\xcb\xbd\x4f\x8d\xf8\xb4\xe8\x65\x4d\xa8\x2b\xbd\xae\xba\x5c\x56\x99\x86\xbb\x7d\xdd\xad\x4d\x44\x5c\xa0\x90\x0b\xd4\x8b\xdd\x8f\x38\x4d\x3a\x74\x75\xdc\x50\xae\x09\x5d\xc9\xd1\x02\xa6\xec\x93\xc0\x30\x17\x8d\xd2\xfa\x2f\x52\xdc\xd3\xa3\x99\x8f\x04\x1f\xda\xdf\xf6\xf5\x81\xd2\xe0\x34\xc7\x23\x15\xed\x9f\x02\x45\x6d\x79\xbb\x8b\x49\x47\xd4\x6f\x14\xb1\xca\x36\x75\xf5\x5d\xb0\x97\xcf\xde\xb6\x4d\x26\x73\xc1\x6b\xbf\x19\x86\xd6\x81\x9e\x7e\x73\x1a\x6f\x13\xa7\xdd\x9e\x3b\x78\xd4\x69\xab\xea\xab\x23\xd5\x8a\xde\xc1\x77\xae\xd5\x6f\x16\xb8\xdb\x1d\x0b\xe1\xb9\xd9\xa9\x37\xf5\xad\xf9\x27\x00\x00\xff\xff\xe8\x19\x65\x16\xa6\x07\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xac\x55\x4d\x8f\xdb\x46\x0c\x3d\x5b\xbf\x82\x3d\x55\x2e\x14\xe7\x9e\x62\x0f\x05\x7a\x29\xd0\x34\x40\xdb\x5b\x90\x03\x2d\x71\xac\x81\xe7\x43\x1d\x52\xeb\x2a\x8b\xfd\xef\x05\x39\xb2\x57\xde\x24\x45\x0f\xbd\xd9\x23\x0e\xf9\xf8\xde\x23\x67\xc2\xfe\x8c\x27\x82\x94\x79\x49\x7d\xd3\xbc\x7d\x0b\xef\x71\x02\xcf\x80\xd0\xe7\xd4\xcf\xa5\x50\x12\x88\x38\xc1\xc5\xcb\x08\x18\x73\x11\xff\x99\x86\x37\x7d\x4e\x2c\x98\xe4\x8d\xf8\x48\x10\x32\x0e\xdc\x01\x4b\x2e\xc4\x1d\x60\x1a\x60\xa0\x40\x42\x7c\xd0\x9c\xbf\x88\xa6\x64\x74\x04\x2e\x17\x88\x73\x10\x3f\x05\x82\x53\x2e\x79\x16\x9f\x88\x41\x32\xf4\x18\x02\xa0\x02\xf8\x9e\x21\x92\x8c\x79\xe0\x0d\x8a\xb0\x68\x2e\x4d\xf7\xe7\x48\xf0\x99\x4a\xbe\x62\x7d\xc4\xe0\x07\x2b\x4a\x71\x92\x5b\xd8\x4f\xf6\x3d\xce\x2c\x90\xb2\xc0\x91\xa0\xcf\x93\xa7\x01\xd0\x09\x15\x70\xbe\xb0\xc0\xcc\x74\x68\x64\x99\xc8\x82\x59\xca\xdc\x0b\x3c\x35\xbb\xa8\x4d\x7f\xf4\x49\xa8\x38\xec\xe9\xe9\xf9\xd3\xe6\x77\xf3\x6c\x54\xfd\x9a\x71\x80\x42\x32\x97\xc4\x20\x23\x29\x90\x99\x2a\x0b\x03\xf8\x64\x67\xca\x9d\x36\x8d\x70\xa6\xa5\x83\x5c\x20\xf9\x00\xde\x41\xca\x9a\xa3\x5e\xf1\x0c\x53\x21\xa6\x24\x87\x6b\x83\xf9\x0c\x85\x78\x0e\x02\x3e\x0d\xbe\x47\x21\x86\xcb\x48\x32\x52\x59\x2f\x5d\x90\xc1\xe5\x39\x6d\x4b\x1d\x1a\x37\xa7\x1e\xda\x08\x3f\xbc\xc7\x69\x6f\x10\xdb\x33\x2d\xb0\x41\xbf\x87\x76\xad\xfa\x72\xd6\x69\xbd\x63\xce\x61\xaf\xcd\xdb\x67\x3b\x7a\x80\x78\x88\x1f\xcf\xb4\x7c\x6a\x76\xb5\x53\xb8\x7d\x5c\x59\xf8\x43\xdb\x05\x26\xd9\x72\x70\xeb\xf8\x35\x20\x8b\x6e\x8d\x8a\x2f\x40\x58\x6d\xef\xb4\x24\x3c\x3c\x18\x4f\x4f\xcd\x6e\x67\x7f\x21\xe2\x99\xda\x7f\xd1\x64\xdf\xec\x9e\x9b\xdd\x15\x2d\x3c\xd4\xf4\x1b\xa5\x3e\x94\x8a\x74\x2b\x18\xfd\xed\x59\x7c\x3a\x6d\x50\xeb\xb1\x11\xe6\xee\x24\xf9\xa0\xc4\x5f\x3c\x53\x07\x5e\x56\xa3\x9b\xe5\xb6\xe9\x4e\xfe\x91\x56\x82\x6e\x3a\xea\x68\xd0\x70\xd3\x92\x41\x8a\x76\xed\x36\x64\xa9\x90\x35\xac\x03\x87\x81\xed\x73\x75\xd1\xd7\xf4\x5c\x1b\xf9\x26\x89\x2d\xf6\x32\x63\xb8\x97\x77\x85\x71\x93\xd8\xbb\x17\x21\xe1\xdd\x8b\xcc\x3f\xea\x7f\x65\xfd\x5e\x6d\x05\x6d\x04\xff\xcf\xf2\xbc\x2a\x63\xdd\xaf\x9a\xfd\x6c\x0b\xe4\xba\x47\xfe\x8b\xb7\xea\x8d\x2f\xed\xfe\x55\x57\xd5\xc2\x86\xaa\x96\x68\xe3\x21\x76\x9a\x76\xbf\x02\xf8\x1d\xd3\x89\x6c\x2b\x31\x38\x60\xfa\x6b\xa6\x24\x1e\x43\x58\x0c\x02\x61\x3f\x9a\x53\xd4\x05\x15\xd9\x6a\x98\xbb\x79\xd4\xf5\xe7\xc0\xdd\x7c\x62\x2d\x76\x50\x2c\x39\x4b\x9e\x6a\x6b\x5e\xa8\xa0\xf8\x9c\xae\xdb\xab\x56\x1f\x32\xb1\x6d\xaf\x44\x3d\x31\x63\xf1\x61\x81\x3e\x97\x42\x3c\xe5\x34\xe8\xda\xc4\xa4\x27\x89\x3d\x8b\xd6\xe6\x84\x13\x8f\x59\x20\x57\x8b\xd9\x3a\xd5\x84\x7d\x4e\x1a\xc0\xef\x20\x65\xc3\x7d\xf1\x21\xe8\x56\x7c\xf4\xec\x85\x06\x88\x3a\x1d\x32\x62\x82\x9c\x7a\xea\xe0\x38\xcb\xbd\x4f\x8d\xf8\xb4\xe8\x65\x4d\xa8\x2b\xbd\xae\xba\x5c\x56\x99\x86\xbb\x7d\xdd\xad\x4d\x44\x5c\xa0\x90\x0b\xd4\x8b\xdd\x8f\x38\x4d\x3a\x74\x75\xdc\x50\xae\x09\x5d\xc9\xd1\x02\xa6\xec\x93\xc0\x30\x17\x8d\xd2\xfa\x2f\x52\xdc\xd3\xa3\x99\x8f\x04\x1f\xda\xdf\xf6\xf5\x81\xd2\xe0\x34\xc7\x23\x15\xed\x9f\x02\x45\x6d\x79\xbb\x8b\x49\x47\xd4\x6f\x14\xb1\xca\x36\x75\xf5\x5d\xb0\x97\xcf\xde\xb6\x4d\x26\x73\xc1\x6b\xbf\x19\x86\xd6\x81\x9e\x7e\x73\x1a\x6f\x13\xa7\xdd\x9e\x3b\x78\xd4\x69\xab\xea\xab\x23\xd5\x8a\xde\xc1\x77\xae\xd5\x6f\x16\xb8\xdb\x1d\x0b\xe1\xb9\xd9\xa9\x37\xf5\xad\xf9\x27\x00\x00\xff\xff\xe8\x19\x65\x16\xa6\x07\x00\x00"), }, "/nosync/mutex.go": &vfsgen۰CompressedFileInfo{ name: "mutex.go", - modTime: time.Date(2019, 3, 5, 13, 38, 20, 257752198, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 12, 605781500, time.UTC), uncompressedSize: 2073, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x54\xcb\x6e\xdb\x30\x10\x3c\x4b\x5f\xb1\xc9\xc9\x4e\x62\xa5\xbd\xb6\xf5\xa1\x68\x81\x22\x40\x7a\x09\x50\xe4\x4c\x53\x2b\x99\xb0\x44\x1a\x24\x55\xd5\x4d\xf2\xef\xc5\xf2\x21\xcb\x92\xec\xc4\x2d\xaa\x93\xb0\xe4\xce\xce\xec\x0c\xb8\x65\x7c\xc3\x4a\x04\xa9\xcc\x4e\xf2\x34\xbd\xbd\x85\xef\x8d\xc5\x5f\x20\x0c\x30\xc8\x9b\xba\xde\x41\xbb\x16\x7c\x4d\x05\xa9\xe4\x62\x55\x29\xbe\x11\xb2\xcc\x52\xbb\xdb\x62\xb8\x6c\xac\x6e\xb8\x85\xa7\x34\xa1\x53\xcc\x61\xa5\x54\x95\xbe\x38\xb8\x7b\xc5\x37\x40\x65\x03\x75\x06\x77\xd6\x23\xeb\x46\x2e\xac\xa8\x11\x50\x6b\xa5\x41\x14\x50\xbb\x83\x4a\x23\xcb\x77\xe0\x61\xb2\xb4\x68\x24\x87\x59\x0d\x57\x6e\xce\xdc\x81\xcd\xe6\x34\x88\x3a\xb2\x30\xed\x29\x4d\x92\x2d\x93\x82\xcf\x2e\xbd\x8e\x0f\x50\x77\x22\x0e\x10\x2f\xe7\x69\xf2\x92\x26\x5d\xe7\x12\xac\x6e\x30\x30\xfd\x21\xa9\x0a\x8d\x7c\x2b\x5b\xa9\xec\x51\xa6\x1e\xac\xe3\x7a\x71\x8a\xac\x9f\x08\xaa\x08\x7f\x98\x7b\xfe\x63\xb6\x05\xab\x4c\xa4\xfb\xf0\x78\x96\x53\xf1\xfa\xde\xab\x56\x0b\x8b\xf7\x1e\x9a\x3e\x67\x5a\x42\xeb\xa2\xe2\x17\xd5\x48\x8b\x1a\x84\xb4\x13\x4e\x42\xa1\x34\x10\x00\x0d\x38\xb1\x27\xdd\x8e\x4d\x70\xbd\x54\x10\xb2\x84\x1e\x4c\xd8\xa1\x6e\xe1\x2a\x90\x1d\x18\xae\xdb\x6c\xc8\xee\x62\x09\xef\xe0\xf9\x99\x8e\xfa\x72\xce\x4e\xc4\xa0\xff\x54\x2e\x74\x7b\x9e\xf8\x7d\x4a\x0e\xfa\xa6\xd4\x0e\x43\xf3\xba\xaa\x57\xa2\x33\x92\x75\x10\xa0\x91\xa1\xc1\x94\xff\x69\xe8\xc3\xd0\xd1\x7f\xb5\x6d\x90\x88\xeb\xeb\xa8\xae\xb3\x2d\x57\x48\x5a\x8c\x90\x65\x85\x41\x35\x67\x55\xf5\x11\x84\x05\x77\x48\x16\xb1\xa2\x40\x6e\x41\xd9\x35\x6a\x30\xa2\x6e\x2a\xcb\x24\xaa\xc6\x38\x65\xa8\xcd\xd9\x4e\xc7\x6d\x4e\xae\x61\x60\xf5\x44\xb4\x97\x14\xed\xbf\xb2\x7c\x80\xb4\x58\x84\x95\x3c\x32\x61\xbf\x69\xd5\x6c\xdf\xfa\x66\xec\x1b\xf6\xaf\x06\x1f\xbd\x0b\x9f\xf3\x1c\x58\x9e\x1b\xc8\xb1\xb2\xec\x26\x20\xd6\x6c\x07\x2b\x04\x89\x25\xb3\xe2\x27\xde\x80\x55\x60\xd7\x7d\xcc\xbb\xc2\x15\x22\x60\xe9\x9c\xe8\xae\x13\xaa\x53\x6e\xe2\x02\xdb\x12\xae\xba\xee\x39\x5d\x98\xb9\x89\x44\xc5\xed\xb1\x2d\xb3\x08\x76\xbd\xf4\x6c\xdc\x72\x7b\xf5\x4f\x87\x3b\xf5\x1b\x8d\x43\x7b\xdc\xc2\x7d\xbf\x53\x2f\xf3\xab\x92\x08\x39\x72\x8d\x35\x4a\x6b\x06\x62\x42\xc3\x11\xae\xd4\x3b\x8b\x1c\x89\xf8\xe2\xfd\xbc\x67\x4a\x10\x4a\x49\x9a\x44\x8d\xe1\xfa\x8d\x5a\x1d\x99\x40\xbf\x5d\x9a\x7a\x82\x2f\x96\x53\x8a\xc7\x13\x22\x7c\x54\xfc\x27\x00\x00\xff\xff\xec\x95\x29\x83\x19\x08\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xb4\x54\xcb\x6e\xdb\x30\x10\x3c\x4b\x5f\xb1\xc9\xc9\x4e\x62\xa5\xbd\xb6\xf5\xa1\x68\x81\x22\x40\x7a\x09\x50\xe4\x4c\x53\x2b\x99\xb0\x44\x1a\x24\x55\xd5\x4d\xf2\xef\xc5\xf2\x21\xcb\x92\xec\xc4\x2d\xaa\x93\xb0\xe4\xce\xce\xec\x0c\xb8\x65\x7c\xc3\x4a\x04\xa9\xcc\x4e\xf2\x34\xbd\xbd\x85\xef\x8d\xc5\x5f\x20\x0c\x30\xc8\x9b\xba\xde\x41\xbb\x16\x7c\x4d\x05\xa9\xe4\x62\x55\x29\xbe\x11\xb2\xcc\x52\xbb\xdb\x62\xb8\x6c\xac\x6e\xb8\x85\xa7\x34\xa1\x53\xcc\x61\xa5\x54\x95\xbe\x38\xb8\x7b\xc5\x37\x40\x65\x03\x75\x06\x77\xd6\x23\xeb\x46\x2e\xac\xa8\x11\x50\x6b\xa5\x41\x14\x50\xbb\x83\x4a\x23\xcb\x77\xe0\x61\xb2\xb4\x68\x24\x87\x59\x0d\x57\x6e\xce\xdc\x81\xcd\xe6\x34\x88\x3a\xb2\x30\xed\x29\x4d\x92\x2d\x93\x82\xcf\x2e\xbd\x8e\x0f\x50\x77\x22\x0e\x10\x2f\xe7\x69\xf2\x92\x26\x5d\xe7\x12\xac\x6e\x30\x30\xfd\x21\xa9\x0a\x8d\x7c\x2b\x5b\xa9\xec\x51\xa6\x1e\xac\xe3\x7a\x71\x8a\xac\x9f\x08\xaa\x08\x7f\x98\x7b\xfe\x63\xb6\x05\xab\x4c\xa4\xfb\xf0\x78\x96\x53\xf1\xfa\xde\xab\x56\x0b\x8b\xf7\x1e\x9a\x3e\x67\x5a\x42\xeb\xa2\xe2\x17\xd5\x48\x8b\x1a\x84\xb4\x13\x4e\x42\xa1\x34\x10\x00\x0d\x38\xb1\x27\xdd\x8e\x4d\x70\xbd\x54\x10\xb2\x84\x1e\x4c\xd8\xa1\x6e\xe1\x2a\x90\x1d\x18\xae\xdb\x6c\xc8\xee\x62\x09\xef\xe0\xf9\x99\x8e\xfa\x72\xce\x4e\xc4\xa0\xff\x54\x2e\x74\x7b\x9e\xf8\x7d\x4a\x0e\xfa\xa6\xd4\x0e\x43\xf3\xba\xaa\x57\xa2\x33\x92\x75\x10\xa0\x91\xa1\xc1\x94\xff\x69\xe8\xc3\xd0\xd1\x7f\xb5\x6d\x90\x88\xeb\xeb\xa8\xae\xb3\x2d\x57\x48\x5a\x8c\x90\x65\x85\x41\x35\x67\x55\xf5\x11\x84\x05\x77\x48\x16\xb1\xa2\x40\x6e\x41\xd9\x35\x6a\x30\xa2\x6e\x2a\xcb\x24\xaa\xc6\x38\x65\xa8\xcd\xd9\x4e\xc7\x6d\x4e\xae\x61\x60\xf5\x44\xb4\x97\x14\xed\xbf\xb2\x7c\x80\xb4\x58\x84\x95\x3c\x32\x61\xbf\x69\xd5\x6c\xdf\xfa\x66\xec\x1b\xf6\xaf\x06\x1f\xbd\x0b\x9f\xf3\x1c\x58\x9e\x1b\xc8\xb1\xb2\xec\x26\x20\xd6\x6c\x07\x2b\x04\x89\x25\xb3\xe2\x27\xde\x80\x55\x60\xd7\x7d\xcc\xbb\xc2\x15\x22\x60\xe9\x9c\xe8\xae\x13\xaa\x53\x6e\xe2\x02\xdb\x12\xae\xba\xee\x39\x5d\x98\xb9\x89\x44\xc5\xed\xb1\x2d\xb3\x08\x76\xbd\xf4\x6c\xdc\x72\x7b\xf5\x4f\x87\x3b\xf5\x1b\x8d\x43\x7b\xdc\xc2\x7d\xbf\x53\x2f\xf3\xab\x92\x08\x39\x72\x8d\x35\x4a\x6b\x06\x62\x42\xc3\x11\xae\xd4\x3b\x8b\x1c\x89\xf8\xe2\xfd\xbc\x67\x4a\x10\x4a\x49\x9a\x44\x8d\xe1\xfa\x8d\x5a\x1d\x99\x40\xbf\x5d\x9a\x7a\x82\x2f\x96\x53\x8a\xc7\x13\x22\x7c\x54\xfc\x27\x00\x00\xff\xff\xec\x95\x29\x83\x19\x08\x00\x00"), }, "/nosync/once.go": &vfsgen۰CompressedFileInfo{ name: "once.go", - modTime: time.Date(2019, 1, 3, 14, 55, 7, 233609287, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 12, 620783200, time.UTC), uncompressedSize: 1072, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x53\xcb\x92\xda\x40\x0c\x3c\xdb\x5f\xd1\xb5\x27\x9c\xa2\xe0\xbe\xa9\x1c\x52\xc5\x65\x4f\x39\xe4\x0b\xc4\x58\x03\xca\x0e\x1a\x32\x0f\x58\x67\x8b\x7f\x4f\x69\x6c\x08\xb9\xd9\x92\xba\xd5\x6a\x69\xce\xe4\xde\xe9\xc0\xd0\x98\x27\x75\x7d\xbf\xdd\xe2\x87\x3a\x86\x64\x90\x22\xee\x7f\xb1\x2b\x28\x47\x2a\xb8\x4a\x08\x38\x73\xf2\x31\x9d\xc0\x1f\xe4\x4a\x98\x10\x95\x41\xae\x48\xd4\x4d\x5f\xa6\x33\xcf\xe0\x5c\x52\x75\x05\x9f\x7d\x37\x46\xd1\x03\xf6\x31\x06\xfb\x56\xc6\xfc\x7d\x6b\x8d\x76\x11\x8e\x42\xc8\x28\x47\x86\xaf\xda\x78\xe0\x21\x1e\xa4\x23\xa2\x86\xc9\xbe\x77\xd1\xd4\xec\xd9\x98\xac\x9e\x47\xf8\x98\x0c\x64\x24\x5e\x52\x2e\x28\x72\xe2\x25\x2a\x19\xa2\xb9\x90\x09\x89\xbe\x09\xda\xe0\x4d\x11\xcb\x91\x13\xae\x31\x8d\x79\x8d\x83\x5c\x58\x0d\xde\x5d\x28\x21\x5a\xad\x15\x5a\x44\x7c\xfb\xdf\xec\xe2\xca\x0f\xd6\x79\xe9\x79\xaa\xa1\xc8\x39\x70\xeb\x95\xd7\xb3\xbc\xa6\xbc\x29\xb0\xaa\xd9\x23\xd1\x4b\x7c\x67\xf8\xb5\xb1\xf1\x85\xd5\x28\x3d\x8e\x94\x41\x18\xc5\x7b\x4e\xac\x05\x17\x0a\x95\x21\x0a\x26\x77\x6c\x20\x47\xcd\x48\xe0\x3b\x94\xaf\xcf\x53\x3c\xaf\x25\xf1\xef\x2a\x69\x31\xa1\x61\x1f\xd6\x95\x08\xfe\x60\x57\x0b\x6f\xfa\xed\x76\xb1\xb8\xf9\x51\x58\xc7\x05\x22\x2a\x45\x28\xc8\x1f\x9a\x31\xb6\xdb\x53\xcd\x05\x7b\x46\xaa\xfa\xb4\x5a\x33\x0e\x3f\xc5\xfa\x36\x05\x92\xa1\x12\x68\x14\xb7\x86\x14\x9c\x68\x32\x8c\xb2\xe3\x9c\x29\x4d\xd6\xbe\x66\x06\xfd\x13\x14\xa4\x70\xa2\x60\x19\x47\xe7\x52\x13\xdf\xd7\x46\xe9\x50\x4f\xac\x25\x5b\x8e\xfe\x1b\x61\xcf\x8b\x85\x23\xf6\x13\x76\xf1\xb5\xed\xc9\x45\xf5\x72\xd8\x3c\x56\x53\xd5\xad\x06\x7c\x62\x89\xdb\x54\x2b\x2f\x81\x95\x4e\x3c\xe0\x36\x2c\x06\xbc\x99\xf5\x8e\x6a\xe6\x6c\x66\xcc\xf4\xf3\x46\xdb\x10\xf3\x55\x93\x8a\xdb\x3c\x23\x5a\x24\xaf\xdb\x89\x46\xcd\x32\x72\xca\x56\x5e\x22\x8e\x74\x61\x24\x2e\x35\x29\x8f\x5f\xe1\x6b\x1b\x6b\x3e\xe4\xd8\xae\x75\x4e\x1a\xd7\x55\xca\x31\xd6\xf9\x38\xec\x7c\x7d\x6b\x62\xda\xb1\x8a\xf8\x62\x2b\x1d\x60\xd3\x60\x9e\x67\xb0\x37\x63\x07\xb8\x69\x8f\xe5\xb3\xef\xba\x85\xac\xbb\x3d\x12\x46\x64\x99\xa6\x71\xf5\x32\xbf\xdc\xd7\xfb\x6b\xe2\xb1\x75\x15\x85\x7f\x19\x1a\xec\x8e\xf9\x86\x92\x2a\xf7\xdd\xc8\x9e\x13\xee\x06\xf6\xdd\x53\x81\xa7\x90\x79\x89\x28\x3f\x10\xb7\xd5\xd0\x77\x7e\x35\xf4\xb7\xfe\x6f\x00\x00\x00\xff\xff\xf9\x72\xbe\xa9\x30\x04\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x54\x53\xcb\x92\xda\x40\x0c\x3c\xdb\x5f\xd1\xb5\x27\x9c\xa2\xe0\xbe\xa9\x1c\x52\xc5\x65\x4f\x39\xe4\x0b\xc4\x58\x03\xca\x0e\x1a\x32\x0f\x58\x67\x8b\x7f\x4f\x69\x6c\x08\xb9\xd9\x92\xba\xd5\x6a\x69\xce\xe4\xde\xe9\xc0\xd0\x98\x27\x75\x7d\xbf\xdd\xe2\x87\x3a\x86\x64\x90\x22\xee\x7f\xb1\x2b\x28\x47\x2a\xb8\x4a\x08\x38\x73\xf2\x31\x9d\xc0\x1f\xe4\x4a\x98\x10\x95\x41\xae\x48\xd4\x4d\x5f\xa6\x33\xcf\xe0\x5c\x52\x75\x05\x9f\x7d\x37\x46\xd1\x03\xf6\x31\x06\xfb\x56\xc6\xfc\x7d\x6b\x8d\x76\x11\x8e\x42\xc8\x28\x47\x86\xaf\xda\x78\xe0\x21\x1e\xa4\x23\xa2\x86\xc9\xbe\x77\xd1\xd4\xec\xd9\x98\xac\x9e\x47\xf8\x98\x0c\x64\x24\x5e\x52\x2e\x28\x72\xe2\x25\x2a\x19\xa2\xb9\x90\x09\x89\xbe\x09\xda\xe0\x4d\x11\xcb\x91\x13\xae\x31\x8d\x79\x8d\x83\x5c\x58\x0d\xde\x5d\x28\x21\x5a\xad\x15\x5a\x44\x7c\xfb\xdf\xec\xe2\xca\x0f\xd6\x79\xe9\x79\xaa\xa1\xc8\x39\x70\xeb\x95\xd7\xb3\xbc\xa6\xbc\x29\xb0\xaa\xd9\x23\xd1\x4b\x7c\x67\xf8\xb5\xb1\xf1\x85\xd5\x28\x3d\x8e\x94\x41\x18\xc5\x7b\x4e\xac\x05\x17\x0a\x95\x21\x0a\x26\x77\x6c\x20\x47\xcd\x48\xe0\x3b\x94\xaf\xcf\x53\x3c\xaf\x25\xf1\xef\x2a\x69\x31\xa1\x61\x1f\xd6\x95\x08\xfe\x60\x57\x0b\x6f\xfa\xed\x76\xb1\xb8\xf9\x51\x58\xc7\x05\x22\x2a\x45\x28\xc8\x1f\x9a\x31\xb6\xdb\x53\xcd\x05\x7b\x46\xaa\xfa\xb4\x5a\x33\x0e\x3f\xc5\xfa\x36\x05\x92\xa1\x12\x68\x14\xb7\x86\x14\x9c\x68\x32\x8c\xb2\xe3\x9c\x29\x4d\xd6\xbe\x66\x06\xfd\x13\x14\xa4\x70\xa2\x60\x19\x47\xe7\x52\x13\xdf\xd7\x46\xe9\x50\x4f\xac\x25\x5b\x8e\xfe\x1b\x61\xcf\x8b\x85\x23\xf6\x13\x76\xf1\xb5\xed\xc9\x45\xf5\x72\xd8\x3c\x56\x53\xd5\xad\x06\x7c\x62\x89\xdb\x54\x2b\x2f\x81\x95\x4e\x3c\xe0\x36\x2c\x06\xbc\x99\xf5\x8e\x6a\xe6\x6c\x66\xcc\xf4\xf3\x46\xdb\x10\xf3\x55\x93\x8a\xdb\x3c\x23\x5a\x24\xaf\xdb\x89\x46\xcd\x32\x72\xca\x56\x5e\x22\x8e\x74\x61\x24\x2e\x35\x29\x8f\x5f\xe1\x6b\x1b\x6b\x3e\xe4\xd8\xae\x75\x4e\x1a\xd7\x55\xca\x31\xd6\xf9\x38\xec\x7c\x7d\x6b\x62\xda\xb1\x8a\xf8\x62\x2b\x1d\x60\xd3\x60\x9e\x67\xb0\x37\x63\x07\xb8\x69\x8f\xe5\xb3\xef\xba\x85\xac\xbb\x3d\x12\x46\x64\x99\xa6\x71\xf5\x32\xbf\xdc\xd7\xfb\x6b\xe2\xb1\x75\x15\x85\x7f\x19\x1a\xec\x8e\xf9\x86\x92\x2a\xf7\xdd\xc8\x9e\x13\xee\x06\xf6\xdd\x53\x81\xa7\x90\x79\x89\x28\x3f\x10\xb7\xd5\xd0\x77\x7e\x35\xf4\xb7\xfe\x6f\x00\x00\x00\xff\xff\xf9\x72\xbe\xa9\x30\x04\x00\x00"), }, "/nosync/pool.go": &vfsgen۰CompressedFileInfo{ name: "pool.go", - modTime: time.Date(2019, 1, 3, 14, 55, 7, 233714234, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 12, 636794100, time.UTC), uncompressedSize: 2130, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x55\x3f\x93\xdb\xc6\x0f\xad\x4f\x9f\x02\xbf\xea\x77\xca\xe8\x74\x49\xeb\x99\x2b\x32\x29\x1c\x37\x89\x8b\x74\x1e\x17\x10\x09\x8a\x88\x97\x0b\x06\xc0\x4a\xa2\x3d\xf7\xdd\x33\x58\xfe\x39\x39\xee\x44\xee\xf2\xe1\xe1\xbd\x07\x68\xc4\xe6\x0b\x9e\x09\xb2\xd8\x94\x9b\xdd\xee\xf9\x19\x7e\x85\x8f\x22\x09\xd8\x00\xc1\xc8\x41\x3a\x70\x1a\x46\x51\xd4\x09\xe4\xf4\x37\x35\x6e\xe0\x3d\x3a\x0c\x38\xc1\x89\x80\x73\xcb\x17\x6e\x0b\xa6\x34\x81\xe1\x85\x5a\xc0\xdc\x06\x94\x92\x2b\xd3\x85\xda\xe3\xee\xf9\xb9\x62\xe7\x09\xd8\x69\x00\x73\x51\x6a\x81\x33\x78\x4f\x73\xc1\x05\x4d\x69\x90\x0a\x51\x5c\x06\x74\x6e\x2a\x2c\x3a\x60\x9e\xc0\x79\x20\xb8\xb2\xf7\x52\x3c\xf0\xb2\x38\x77\xdc\xa0\xb3\xe4\x23\x7c\xe8\xde\xd0\x7a\x49\xad\xd5\x47\xc9\x69\x02\xa5\x8e\x94\x72\x43\x70\xed\x29\x8a\xb2\x41\x8f\xe3\x48\xd9\x0e\x71\x2b\xc0\x2a\xb1\x81\xcf\xbd\x07\x8f\x96\x30\x25\x69\xd0\xef\xd8\x6f\xca\x18\x76\x04\x9d\x28\x14\x23\x38\x4d\x30\x94\xe4\x3c\x26\x82\xb3\xa8\x14\xe7\x4c\x06\xc6\xf1\x16\x33\x49\xb1\x34\xad\x18\x81\xf0\x7f\x83\xb1\xe8\x28\x46\x81\xe5\x02\x0d\x36\x3d\xc1\x56\x0f\x4e\xc5\xa1\xe4\x62\xa1\x90\xd3\x60\xb5\x54\x42\x27\x05\xa5\x62\x74\x98\xc5\x4d\x4c\x17\xce\x67\x18\x95\xcc\x8a\x46\xab\xb5\xe3\x33\xea\x29\x4c\x6d\x24\x25\x6a\x5c\xf4\x08\x7f\x85\x5f\x6c\x07\xe0\xb0\xed\x0b\x59\xfc\x20\xb4\x09\x5c\x02\xec\x54\x38\xb5\x40\x5d\xc7\x0d\x53\xf6\xd0\x44\x09\xdb\xa7\xb9\x51\x25\x82\xc4\xe6\x76\x84\xdf\xe5\x4a\x17\xd2\x0a\xc4\x16\x06\x80\x15\x76\x3c\xa5\x59\x10\x4c\x29\xf0\xee\x3e\xd9\xac\x07\x1c\x47\x95\x51\x19\x9d\xaa\x70\xd2\x01\x6e\x92\xba\xc0\x80\x39\x68\x23\x9c\x55\xca\xf8\x7d\xf0\xaa\x0e\x81\x63\x9c\x28\x7b\x24\xad\xc7\x88\x10\x0e\x92\xcf\x11\x38\x18\xc5\x29\x3b\xd7\xbc\x54\x99\xda\xb0\xa6\x91\xdc\x14\x55\xca\x1e\x41\xa5\x91\x72\x4b\xb9\x86\xa7\x49\xd1\xaa\xcd\x34\x96\x41\x38\xce\x7c\x46\x95\x0b\xb7\x14\x23\x70\xc5\xd0\x28\xca\xa8\xf3\xd7\xcd\x25\x96\x0c\x72\x21\xed\x09\x6b\xd4\xb1\x51\x31\x8b\x16\xa6\x15\xf8\xae\x73\xba\xe1\x10\xf1\x90\x0e\xce\x22\xed\x8f\xdd\x2f\x83\xd0\x0d\xbe\x32\x39\xc0\xb5\xe7\xa6\x87\x01\x39\x3b\x72\x36\xc0\x00\x6b\xa7\x8c\xc3\x3c\x14\x4f\xc6\x5f\xa9\x9d\x47\xe9\x3f\x53\x5a\x7c\x2c\x0e\xa7\xd2\x75\xa4\x16\xee\xd3\x72\xcd\x1a\x4c\x64\x50\x72\x4b\x1a\x70\x49\xb0\x85\xc7\x3a\x13\x95\xfa\x5d\x7e\x51\x09\xb0\x71\xbe\x50\x9a\x60\x54\xce\xce\xf9\xbc\xaf\x4a\x5b\xaf\x9c\xbf\x58\x9d\xa5\x40\xf9\xa7\x30\x59\x43\xd9\xd7\x96\xff\x9c\xdb\x11\xef\x49\xa1\xc7\xdc\x1e\x00\xdf\x32\xb1\xf5\x14\xf6\x19\x8c\xa8\x3e\xab\x61\xbd\xa8\x3f\x25\x8e\xf9\x9f\x37\x0d\xb0\x2d\x73\x1e\xc7\x6b\xd0\x42\xbe\x1a\xb6\xaa\xdf\x01\x8c\x63\xb2\x6b\xc5\xc5\x12\x68\x85\xe6\x74\x6e\xc6\x5d\x29\x25\xe0\xca\xb7\x6e\xaf\x20\x8c\xca\x72\x84\x0f\x35\xca\x43\xe8\xb3\x4d\x40\x78\xde\xe3\x85\xc0\x4a\xd3\x6f\x6b\x8f\xc3\xc5\xa1\x1e\xf7\xc4\x0a\x72\xcd\xdf\xa5\xbd\xf6\xef\xd3\xb8\x2c\x21\x73\x2d\x8d\xc3\xb7\xdd\xc3\xac\xfe\xa7\xcf\x9c\x9d\xb4\xc3\x86\xbe\xbd\xee\x1e\xfe\xa0\x2b\x00\x74\x25\x37\x8f\x7b\xb8\x3f\x79\xad\x8b\xf8\x3d\x39\x18\xa5\x5a\x18\x33\xa0\x9e\xd8\xb7\x59\x80\x4e\x65\xd8\xd6\xdd\x61\x59\x9b\x75\xac\xd7\x93\x75\xdd\x1c\xaa\x67\x4a\x5e\x34\xd7\x0b\x2e\xf5\xc3\x08\x11\xe9\x71\x2d\x15\xfb\xb7\xe9\x25\xb6\x92\x0b\xf0\x39\x07\xe3\xb8\x37\x46\x2b\x01\xe1\x4a\xb1\x45\x3c\x4c\xa3\x61\xf4\xba\xd4\xe0\xb7\x0a\x63\x61\x5e\x49\xed\xac\xb9\x59\x19\xa8\x6e\x6c\xa5\x34\x0f\xcb\x89\xfc\x4a\x94\xe1\x82\xa9\x50\x98\x6e\x31\xa0\x2e\xf0\xb1\xf8\xfa\x7f\x11\xd5\x96\xf3\x99\xee\x3c\xc2\xef\x69\x0b\xd6\x87\xae\x72\xbd\xd6\x52\x35\x5e\x57\x36\x5a\x6e\x43\xe6\x99\xe8\x78\x0c\x69\xeb\x7a\xca\x4f\x99\xd3\xa1\x7e\xb4\x28\xb0\x16\x52\xb2\x92\x6a\xf0\x42\x88\xba\x47\xe3\xb3\xe3\x2e\x0c\x81\xc7\x11\x7e\x0a\xf1\xf6\xf1\xe9\xf7\xf6\x84\x9f\xdc\x41\xa2\xfc\x38\x1e\xab\xb1\x7b\x78\x79\x81\x9f\xe3\x7d\x1c\xcc\xd5\xff\xf7\x52\xe9\xc4\xbb\x87\x85\x5e\x3d\x78\xdc\xef\x1e\x1e\x5e\x77\xdb\xcb\xcc\x69\x17\xcf\x37\x78\xf7\x02\x0b\xde\xa7\x7b\xec\xa7\x5f\x3e\xef\x1e\x96\x07\x78\xbb\xf2\xee\x87\x3b\x0b\xe0\x6d\x89\x4f\xd5\xb5\x6d\x0d\x6e\xab\xe1\x61\xe4\x0f\xed\x7d\x2c\xfe\x78\xbb\x6f\x6f\xbf\xf4\x77\x8b\xa6\xd6\x16\x66\xec\x4a\xf4\x8d\x4a\xfd\xff\x6c\x57\x12\x07\xb8\xed\x77\xaf\xbb\x7f\x03\x00\x00\xff\xff\x07\xba\x3e\x57\x52\x08\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x64\x55\x3f\x93\xdb\xc6\x0f\xad\x4f\x9f\x02\xbf\xea\x77\xca\xe8\x74\x49\xeb\x99\x2b\x32\x29\x1c\x37\x89\x8b\x74\x1e\x17\x10\x09\x8a\x88\x97\x0b\x06\xc0\x4a\xa2\x3d\xf7\xdd\x33\x58\xfe\x39\x39\xee\x44\xee\xf2\xe1\xe1\xbd\x07\x68\xc4\xe6\x0b\x9e\x09\xb2\xd8\x94\x9b\xdd\xee\xf9\x19\x7e\x85\x8f\x22\x09\xd8\x00\xc1\xc8\x41\x3a\x70\x1a\x46\x51\xd4\x09\xe4\xf4\x37\x35\x6e\xe0\x3d\x3a\x0c\x38\xc1\x89\x80\x73\xcb\x17\x6e\x0b\xa6\x34\x81\xe1\x85\x5a\xc0\xdc\x06\x94\x92\x2b\xd3\x85\xda\xe3\xee\xf9\xb9\x62\xe7\x09\xd8\x69\x00\x73\x51\x6a\x81\x33\x78\x4f\x73\xc1\x05\x4d\x69\x90\x0a\x51\x5c\x06\x74\x6e\x2a\x2c\x3a\x60\x9e\xc0\x79\x20\xb8\xb2\xf7\x52\x3c\xf0\xb2\x38\x77\xdc\xa0\xb3\xe4\x23\x7c\xe8\xde\xd0\x7a\x49\xad\xd5\x47\xc9\x69\x02\xa5\x8e\x94\x72\x43\x70\xed\x29\x8a\xb2\x41\x8f\xe3\x48\xd9\x0e\x71\x2b\xc0\x2a\xb1\x81\xcf\xbd\x07\x8f\x96\x30\x25\x69\xd0\xef\xd8\x6f\xca\x18\x76\x04\x9d\x28\x14\x23\x38\x4d\x30\x94\xe4\x3c\x26\x82\xb3\xa8\x14\xe7\x4c\x06\xc6\xf1\x16\x33\x49\xb1\x34\xad\x18\x81\xf0\x7f\x83\xb1\xe8\x28\x46\x81\xe5\x02\x0d\x36\x3d\xc1\x56\x0f\x4e\xc5\xa1\xe4\x62\xa1\x90\xd3\x60\xb5\x54\x42\x27\x05\xa5\x62\x74\x98\xc5\x4d\x4c\x17\xce\x67\x18\x95\xcc\x8a\x46\xab\xb5\xe3\x33\xea\x29\x4c\x6d\x24\x25\x6a\x5c\xf4\x08\x7f\x85\x5f\x6c\x07\xe0\xb0\xed\x0b\x59\xfc\x20\xb4\x09\x5c\x02\xec\x54\x38\xb5\x40\x5d\xc7\x0d\x53\xf6\xd0\x44\x09\xdb\xa7\xb9\x51\x25\x82\xc4\xe6\x76\x84\xdf\xe5\x4a\x17\xd2\x0a\xc4\x16\x06\x80\x15\x76\x3c\xa5\x59\x10\x4c\x29\xf0\xee\x3e\xd9\xac\x07\x1c\x47\x95\x51\x19\x9d\xaa\x70\xd2\x01\x6e\x92\xba\xc0\x80\x39\x68\x23\x9c\x55\xca\xf8\x7d\xf0\xaa\x0e\x81\x63\x9c\x28\x7b\x24\xad\xc7\x88\x10\x0e\x92\xcf\x11\x38\x18\xc5\x29\x3b\xd7\xbc\x54\x99\xda\xb0\xa6\x91\xdc\x14\x55\xca\x1e\x41\xa5\x91\x72\x4b\xb9\x86\xa7\x49\xd1\xaa\xcd\x34\x96\x41\x38\xce\x7c\x46\x95\x0b\xb7\x14\x23\x70\xc5\xd0\x28\xca\xa8\xf3\xd7\xcd\x25\x96\x0c\x72\x21\xed\x09\x6b\xd4\xb1\x51\x31\x8b\x16\xa6\x15\xf8\xae\x73\xba\xe1\x10\xf1\x90\x0e\xce\x22\xed\x8f\xdd\x2f\x83\xd0\x0d\xbe\x32\x39\xc0\xb5\xe7\xa6\x87\x01\x39\x3b\x72\x36\xc0\x00\x6b\xa7\x8c\xc3\x3c\x14\x4f\xc6\x5f\xa9\x9d\x47\xe9\x3f\x53\x5a\x7c\x2c\x0e\xa7\xd2\x75\xa4\x16\xee\xd3\x72\xcd\x1a\x4c\x64\x50\x72\x4b\x1a\x70\x49\xb0\x85\xc7\x3a\x13\x95\xfa\x5d\x7e\x51\x09\xb0\x71\xbe\x50\x9a\x60\x54\xce\xce\xf9\xbc\xaf\x4a\x5b\xaf\x9c\xbf\x58\x9d\xa5\x40\xf9\xa7\x30\x59\x43\xd9\xd7\x96\xff\x9c\xdb\x11\xef\x49\xa1\xc7\xdc\x1e\x00\xdf\x32\xb1\xf5\x14\xf6\x19\x8c\xa8\x3e\xab\x61\xbd\xa8\x3f\x25\x8e\xf9\x9f\x37\x0d\xb0\x2d\x73\x1e\xc7\x6b\xd0\x42\xbe\x1a\xb6\xaa\xdf\x01\x8c\x63\xb2\x6b\xc5\xc5\x12\x68\x85\xe6\x74\x6e\xc6\x5d\x29\x25\xe0\xca\xb7\x6e\xaf\x20\x8c\xca\x72\x84\x0f\x35\xca\x43\xe8\xb3\x4d\x40\x78\xde\xe3\x85\xc0\x4a\xd3\x6f\x6b\x8f\xc3\xc5\xa1\x1e\xf7\xc4\x0a\x72\xcd\xdf\xa5\xbd\xf6\xef\xd3\xb8\x2c\x21\x73\x2d\x8d\xc3\xb7\xdd\xc3\xac\xfe\xa7\xcf\x9c\x9d\xb4\xc3\x86\xbe\xbd\xee\x1e\xfe\xa0\x2b\x00\x74\x25\x37\x8f\x7b\xb8\x3f\x79\xad\x8b\xf8\x3d\x39\x18\xa5\x5a\x18\x33\xa0\x9e\xd8\xb7\x59\x80\x4e\x65\xd8\xd6\xdd\x61\x59\x9b\x75\xac\xd7\x93\x75\xdd\x1c\xaa\x67\x4a\x5e\x34\xd7\x0b\x2e\xf5\xc3\x08\x11\xe9\x71\x2d\x15\xfb\xb7\xe9\x25\xb6\x92\x0b\xf0\x39\x07\xe3\xb8\x37\x46\x2b\x01\xe1\x4a\xb1\x45\x3c\x4c\xa3\x61\xf4\xba\xd4\xe0\xb7\x0a\x63\x61\x5e\x49\xed\xac\xb9\x59\x19\xa8\x6e\x6c\xa5\x34\x0f\xcb\x89\xfc\x4a\x94\xe1\x82\xa9\x50\x98\x6e\x31\xa0\x2e\xf0\xb1\xf8\xfa\x7f\x11\xd5\x96\xf3\x99\xee\x3c\xc2\xef\x69\x0b\xd6\x87\xae\x72\xbd\xd6\x52\x35\x5e\x57\x36\x5a\x6e\x43\xe6\x99\xe8\x78\x0c\x69\xeb\x7a\xca\x4f\x99\xd3\xa1\x7e\xb4\x28\xb0\x16\x52\xb2\x92\x6a\xf0\x42\x88\xba\x47\xe3\xb3\xe3\x2e\x0c\x81\xc7\x11\x7e\x0a\xf1\xf6\xf1\xe9\xf7\xf6\x84\x9f\xdc\x41\xa2\xfc\x38\x1e\xab\xb1\x7b\x78\x79\x81\x9f\xe3\x7d\x1c\xcc\xd5\xff\xf7\x52\xe9\xc4\xbb\x87\x85\x5e\x3d\x78\xdc\xef\x1e\x1e\x5e\x77\xdb\xcb\xcc\x69\x17\xcf\x37\x78\xf7\x02\x0b\xde\xa7\x7b\xec\xa7\x5f\x3e\xef\x1e\x96\x07\x78\xbb\xf2\xee\x87\x3b\x0b\xe0\x6d\x89\x4f\xd5\xb5\x6d\x0d\x6e\xab\xe1\x61\xe4\x0f\xed\x7d\x2c\xfe\x78\xbb\x6f\x6f\xbf\xf4\x77\x8b\xa6\xd6\x16\x66\xec\x4a\xf4\x8d\x4a\xfd\xff\x6c\x57\x12\x07\xb8\xed\x77\xaf\xbb\x7f\x03\x00\x00\xff\xff\x07\xba\x3e\x57\x52\x08\x00\x00"), }, } fs["/"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ diff --git a/compiler/linkname.go b/compiler/linkname.go new file mode 100644 index 000000000..63023beab --- /dev/null +++ b/compiler/linkname.go @@ -0,0 +1,185 @@ +package compiler + +import ( + "fmt" + "go/ast" + "go/token" + "go/types" + "strings" + + "github.com/gopherjs/gopherjs/compiler/astutil" +) + +// GoLinkname describes a go:linkname compiler directive found in the source code. +// +// GopherJS treats these directives in a way that resembles a symbolic link, +// where for a single given symbol implementation there may be zero or more +// symbols referencing it. This is subtly different from the upstream Go +// implementation, which simply overrides symbol name the linker will use. +type GoLinkname struct { + Implementation SymName + Reference SymName +} + +// SymName uniquely identifies a named submol within a program. +// +// This is a logical equivalent of a symbol name used by traditional linkers. +// The following properties should hold true: +// +// - Each named symbol within a program has a unique SymName. +// - Similarly named methods of different types will have different symbol names. +// - The string representation is opaque and should not be attempted to reversed +// to a struct form. +type SymName struct { + PkgPath string // Full package import path. + Name string // Symbol name. +} + +// newSymName constructs SymName for a given named symbol. +func newSymName(o types.Object) SymName { + if fun, ok := o.(*types.Func); ok { + sig := fun.Type().(*types.Signature) + if recv := sig.Recv(); recv != nil { + // Special case: disambiguate names for different types' methods. + return SymName{ + PkgPath: o.Pkg().Path(), + Name: recv.Type().(*types.Named).Obj().Name() + "." + o.Name(), + } + } + } + return SymName{ + PkgPath: o.Pkg().Path(), + Name: o.Name(), + } +} + +func (n SymName) String() string { return n.PkgPath + "." + n.Name } + +// parseGoLinknames processed comments in a source file and extracts //go:linkname +// compiler directive from the comments. +// +// The following directive format is supported: +// //go:linkname . +// +// GopherJS directive support has the following limitations: +// +// - External linkname must be specified. +// - The directive must be applied to a package-level function (variables and +// methods are not supported). +// - The local function referenced by the directive must have no body (in other +// words, it can only "import" an external function implementation into the +// local scope). +func parseGoLinknames(fset *token.FileSet, pkgPath string, file *ast.File) ([]GoLinkname, error) { + var errs ErrorList = nil + var directives []GoLinkname + + isUnsafe := astutil.ImportsUnsafe(file) + + processComment := func(comment *ast.Comment) error { + if !strings.HasPrefix(comment.Text, "//go:linkname ") { + return nil // Not a linkname compiler directive. + } + + // TODO(nevkontakte): Ideally we should check that the directive comment + // is on a line by itself, line Go compiler does, but ast.Comment doesn't + // provide an easy way to find that out. + + if !isUnsafe { + return fmt.Errorf(`//go:linkname is only allowed in Go files that import "unsafe"`) + } + + fields := strings.Fields(comment.Text) + if len(fields) != 3 { + return fmt.Errorf(`usage (all fields required): //go:linkname localname importpath.extname`) + } + + localPkg, localName := pkgPath, fields[1] + extPkg, extName := "", fields[2] + if idx := strings.LastIndexByte(extName, '.'); idx != -1 { + extPkg, extName = extName[0:idx], extName[idx+1:] + } + + obj := file.Scope.Lookup(localName) + if obj == nil { + return fmt.Errorf("//go:linkname local symbol %q is not found in the current source file", localName) + } + + if obj.Kind != ast.Fun { + if pkgPath == "math/bits" || pkgPath == "reflect" { + // These standard library packages are known to use go:linkname with + // variables, which GopherJS doesn't support. We silently ignore such + // directives, since it doesn't seem to cause any problems. + return nil + } + return fmt.Errorf("gopherjs: //go:linkname is only supported for functions, got %q", obj.Kind) + } + + decl := obj.Decl.(*ast.FuncDecl) + if decl.Body != nil { + if pkgPath == "runtime" || pkgPath == "internal/bytealg" { + // These standard library packages are known to use unsupported + // "insert"-style go:linkname directives, which we ignore here and handle + // case-by-case in native overrides. + return nil + } + return fmt.Errorf("gopherjs: //go:linkname can not insert local implementation into an external package %q", extPkg) + } + // Local function has no body, treat it as a reference to an external implementation. + directives = append(directives, GoLinkname{ + Reference: SymName{PkgPath: localPkg, Name: localName}, + Implementation: SymName{PkgPath: extPkg, Name: extName}, + }) + return nil + } + + for _, cg := range file.Comments { + for _, c := range cg.List { + if err := processComment(c); err != nil { + errs = append(errs, ErrorAt(err, fset, c.Pos())) + } + } + } + + return directives, errs.Normalize() +} + +// goLinknameSet is a utility that enables quick lookup of whether a decl is +// affected by any go:linkname directive in the program. +type goLinknameSet struct { + byImplementation map[SymName][]GoLinkname + byReference map[SymName]GoLinkname +} + +// Add more GoLinkname directives into the set. +func (gls *goLinknameSet) Add(entries []GoLinkname) error { + if gls.byImplementation == nil { + gls.byImplementation = map[SymName][]GoLinkname{} + } + if gls.byReference == nil { + gls.byReference = map[SymName]GoLinkname{} + } + for _, e := range entries { + gls.byImplementation[e.Implementation] = append(gls.byImplementation[e.Implementation], e) + if prev, found := gls.byReference[e.Reference]; found { + return fmt.Errorf("conflicting go:linkname directives: two implementations for %q: %q and %q", + e.Reference, prev.Implementation, e.Implementation) + } + gls.byReference[e.Reference] = e + } + return nil +} + +// IsImplementation returns true if there is a directive referencing this symbol +// as an implementation. +func (gls *goLinknameSet) IsImplementation(sym SymName) bool { + _, found := gls.byImplementation[sym] + return found +} + +// FindImplementation returns a symbol name, which provides the implementation +// for the given symbol. The second value indicates whether the implementation +// was found. +func (gls *goLinknameSet) FindImplementation(sym SymName) (SymName, bool) { + directive, found := gls.byReference[sym] + return directive.Implementation, found +} diff --git a/compiler/linkname_test.go b/compiler/linkname_test.go new file mode 100644 index 000000000..1b7414a97 --- /dev/null +++ b/compiler/linkname_test.go @@ -0,0 +1,216 @@ +package compiler + +import ( + "go/ast" + "go/importer" + "go/parser" + "go/token" + "go/types" + "strings" + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" +) + +func parseSource(t *testing.T, src string) (*ast.File, *token.FileSet) { + t.Helper() + + const filename = "" + fset := token.NewFileSet() + + file, err := parser.ParseFile(fset, filename, src, parser.ParseComments) + if err != nil { + t.Log(src) + t.Fatalf("Failed to parse source code: %s", err) + } + return file, fset +} + +func makePackage(t *testing.T, src string) *types.Package { + t.Helper() + + file, fset := parseSource(t, src) + conf := types.Config{Importer: importer.Default()} + pkg, err := conf.Check(file.Name.Name, fset, []*ast.File{file}, nil) + if err != nil { + t.Log(src) + t.Fatalf("Failed to type check source code: %s", err) + } + + return pkg +} + +func TestSymName(t *testing.T) { + pkg := makePackage(t, + `package testcase + + func AFunction() {} + type AType struct {} + func (AType) AMethod() {} + func (AType) APointerMethod() {} + var AVariable int32 + `) + + tests := []struct { + obj types.Object + want SymName + }{ + { + obj: pkg.Scope().Lookup("AFunction"), + want: SymName{PkgPath: "testcase", Name: "AFunction"}, + }, { + obj: pkg.Scope().Lookup("AType"), + want: SymName{PkgPath: "testcase", Name: "AType"}, + }, { + obj: types.NewMethodSet(pkg.Scope().Lookup("AType").Type()).Lookup(pkg, "AMethod").Obj(), + want: SymName{PkgPath: "testcase", Name: "AType.AMethod"}, + }, { + obj: types.NewMethodSet(pkg.Scope().Lookup("AType").Type()).Lookup(pkg, "APointerMethod").Obj(), + want: SymName{PkgPath: "testcase", Name: "AType.APointerMethod"}, + }, { + obj: pkg.Scope().Lookup("AVariable"), + want: SymName{PkgPath: "testcase", Name: "AVariable"}, + }, + } + + for _, test := range tests { + t.Run(test.obj.Name(), func(t *testing.T) { + got := newSymName(test.obj) + if got != test.want { + t.Errorf("NewSymName(%q) returned %#v, want: %#v", test.obj.Name(), got, test.want) + } + }) + } +} + +func TestParseGoLinknames(t *testing.T) { + tests := []struct { + desc string + src string + wantError string + wantDirectives []GoLinkname + }{ + { + desc: "no directives", + src: `package testcase + + // This comment doesn't start with go:linkname + func a() {} + // go:linkname directive must have no space between the slash and the directive. + func b() {} + // An example in the middle of a comment is also not a directive: //go:linkname foo bar.baz + func c() {} + `, + wantDirectives: []GoLinkname{}, + }, { + desc: "normal use case", + src: `package testcase + + import _ "unsafe" + + //go:linkname a other/package.testcase_a + func a() + `, + wantDirectives: []GoLinkname{ + { + Reference: SymName{PkgPath: "testcase", Name: "a"}, + Implementation: SymName{PkgPath: "other/package", Name: "testcase_a"}, + }, + }, + }, { + desc: "multiple directives in one comment group", + src: `package testcase + import _ "unsafe" + + // The following functions are implemented elsewhere: + //go:linkname a other/package.a + //go:linkname b other/package.b + + func a() + func b() + `, + wantDirectives: []GoLinkname{ + { + Reference: SymName{PkgPath: "testcase", Name: "a"}, + Implementation: SymName{PkgPath: "other/package", Name: "a"}, + }, { + Reference: SymName{PkgPath: "testcase", Name: "b"}, + Implementation: SymName{PkgPath: "other/package", Name: "b"}, + }, + }, + }, { + desc: "unsafe not imported", + src: `package testcase + + //go:linkname a other/package.a + func a() + `, + wantError: `import "unsafe"`, + }, { + desc: "gopherjs: both parameters are required", + src: `package testcase + + import _ "unsafe" + + //go:linkname a + func a() + `, + wantError: "usage", + }, { + desc: "referenced function doesn't exist", + src: `package testcase + + import _ "unsafe" + + //go:linkname b other/package.b + func a() + `, + wantError: `"b" is not found`, + }, { + desc: "gopherjs: referenced a variable, not a function", + src: `package testcase + + import _ "unsafe" + + //go:linkname a other/package.a + var a string = "foo" + `, + wantError: `is only supported for functions`, + }, { + desc: "gopherjs: can not insert local implementation", + src: `package testcase + + import _ "unsafe" + + //go:linkname a other/package.a + func a() { println("do a") } + `, + wantError: `can not insert local implementation`, + }, + } + + for _, test := range tests { + t.Run(test.desc, func(t *testing.T) { + file, fset := parseSource(t, test.src) + directives, err := parseGoLinknames(fset, "testcase", file) + + if test.wantError != "" { + if err == nil { + t.Fatalf("ParseGoLinknames() returned no error, want: %s.", test.wantError) + } else if !strings.Contains(err.Error(), test.wantError) { + t.Fatalf("ParseGoLinknames() returned error: %s. Want an error containing %q.", err, test.wantError) + } + return + } + + if err != nil { + t.Fatalf("ParseGoLinkanmes() returned error: %s. Want: no error.", err) + } + + if diff := cmp.Diff(test.wantDirectives, directives, cmpopts.EquateEmpty()); diff != "" { + t.Fatalf("ParseGoLinknames() returned diff (-want,+got):\n%s", diff) + } + }) + } +} diff --git a/compiler/natives/fs_vfsdata.go b/compiler/natives/fs_vfsdata.go index 0be04e5f4..f31bc21f6 100644 --- a/compiler/natives/fs_vfsdata.go +++ b/compiler/natives/fs_vfsdata.go @@ -21,638 +21,778 @@ var FS = func() http.FileSystem { fs := vfsgen۰FS{ "/": &vfsgen۰DirInfo{ name: "/", - modTime: time.Date(2019, 5, 1, 6, 1, 9, 582016136, time.UTC), + modTime: time.Date(2021, 4, 5, 14, 42, 28, 872250700, time.UTC), }, "/src": &vfsgen۰DirInfo{ name: "src", - modTime: time.Date(2018, 4, 20, 9, 8, 7, 919304753, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 15, 16, 423152800, time.UTC), + }, + "/src/bufio": &vfsgen۰DirInfo{ + name: "bufio", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 361155500, time.UTC), + }, + "/src/bufio/bufio_test.go": &vfsgen۰CompressedFileInfo{ + name: "bufio_test.go", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 362154900, time.UTC), + uncompressedSize: 164, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x2c\xca\xc1\x8a\x83\x30\x10\x00\xd0\xf3\xce\x57\x0c\x39\xe9\x2e\xe8\x37\xec\x69\x61\xa1\x97\xea\xbd\x8c\x71\xb4\x53\x63\x26\x24\x93\x42\x29\xfd\xf7\x22\xf4\xf8\xe0\xf5\xfd\xcf\x54\x25\xcc\x78\x2b\x00\x89\xfc\x46\x2b\xe3\x54\x17\xd1\x8b\x71\x31\x00\xd9\x93\x66\x43\x77\x48\xe2\xea\x00\x96\x1a\x3d\x8e\x5c\xec\xcc\x34\x0f\x96\x25\xae\xbf\x21\xa8\x2f\x8d\xe1\xf7\xa7\x75\x63\x8b\x4f\xf8\xb2\x6e\xd8\x24\x35\xee\xc4\xbb\xe6\x07\xd2\xd1\xc8\x44\x23\x7a\xad\xd1\x38\x17\xa4\xcc\x18\xd5\x90\xee\x24\x81\xa6\xc0\x28\x11\xff\x34\x5d\x39\xff\x0f\x9d\x6b\xe1\x05\xef\x00\x00\x00\xff\xff\x87\xe9\x3a\xd5\xa4\x00\x00\x00"), }, "/src/bytes": &vfsgen۰DirInfo{ name: "bytes", - modTime: time.Date(2018, 4, 20, 9, 33, 19, 948206308, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 334778200, time.UTC), }, "/src/bytes/bytes.go": &vfsgen۰CompressedFileInfo{ name: "bytes.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 313782300, time.UTC), uncompressedSize: 508, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xcd\x4e\xc3\x30\x10\x84\xcf\xde\xa7\x18\x6e\x8d\x68\x55\x72\x45\x4d\x0f\x20\x0e\x3c\x43\xd5\xc3\xda\xdd\x54\x86\xe0\x14\x27\x91\xa8\x50\xde\x1d\xd9\x71\x1a\x19\x55\xca\x21\xde\x9f\x99\x6f\x67\xbb\xc5\xa3\x1e\x6c\x73\xc2\x47\x47\x74\x61\xf3\xc9\x67\x81\xbe\xf6\xd2\x11\xd5\x83\x33\x78\x77\x27\xf9\x79\xb9\xf6\xb2\xea\x70\x38\x86\xce\x1a\x26\x4e\x14\xb0\xae\xc7\x2f\xa9\xba\xf5\xb0\x6b\x68\x3c\x57\xf0\xec\xce\x82\x2e\x94\x95\xad\xa1\x51\x55\x30\xf1\xa5\xbc\xf4\x83\x77\xb0\xa4\xd4\x48\xe1\x4b\x85\x4d\x49\x63\x32\x7b\xfb\x1e\xb8\x59\x71\xd0\x9a\xbc\x0a\xe8\xb6\x6d\xc2\xbe\xad\xd1\x88\x5b\x71\x81\x87\x2a\xfe\xe9\x22\xca\x26\x91\x9a\x9b\x4e\xa2\x6a\xa2\x31\x0b\x0d\xcf\x34\x26\xec\xea\x83\x3d\x66\x40\x69\x35\x87\xea\xfd\x20\x37\xac\xd7\xf6\xeb\xc2\x5e\x72\xb0\xfc\x78\xc3\x77\xfc\x2c\xf6\x19\xeb\x2c\x5e\x4e\x6e\xca\xc4\xc8\x02\x50\xe2\x63\xec\x60\x74\x36\xbb\x99\x87\xa7\xfe\xfe\x7f\xbf\xbc\x91\x2f\x09\xed\xee\x04\x14\x74\x96\xf3\x9e\x68\xa4\xbf\x00\x00\x00\xff\xff\x23\x2d\xfc\x5d\xfc\x01\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x6c\x90\xcd\x4e\xc3\x30\x10\x84\xcf\xde\xa7\x18\x6e\x8d\x68\x55\x72\x45\x4d\x0f\x20\x0e\x3c\x43\xd5\xc3\xda\xdd\x54\x86\xe0\x14\x27\x91\xa8\x50\xde\x1d\xd9\x71\x1a\x19\x55\xca\x21\xde\x9f\x99\x6f\x67\xbb\xc5\xa3\x1e\x6c\x73\xc2\x47\x47\x74\x61\xf3\xc9\x67\x81\xbe\xf6\xd2\x11\xd5\x83\x33\x78\x77\x27\xf9\x79\xb9\xf6\xb2\xea\x70\x38\x86\xce\x1a\x26\x4e\x14\xb0\xae\xc7\x2f\xa9\xba\xf5\xb0\x6b\x68\x3c\x57\xf0\xec\xce\x82\x2e\x94\x95\xad\xa1\x51\x55\x30\xf1\xa5\xbc\xf4\x83\x77\xb0\xa4\xd4\x48\xe1\x4b\x85\x4d\x49\x63\x32\x7b\xfb\x1e\xb8\x59\x71\xd0\x9a\xbc\x0a\xe8\xb6\x6d\xc2\xbe\xad\xd1\x88\x5b\x71\x81\x87\x2a\xfe\xe9\x22\xca\x26\x91\x9a\x9b\x4e\xa2\x6a\xa2\x31\x0b\x0d\xcf\x34\x26\xec\xea\x83\x3d\x66\x40\x69\x35\x87\xea\xfd\x20\x37\xac\xd7\xf6\xeb\xc2\x5e\x72\xb0\xfc\x78\xc3\x77\xfc\x2c\xf6\x19\xeb\x2c\x5e\x4e\x6e\xca\xc4\xc8\x02\x50\xe2\x63\xec\x60\x74\x36\xbb\x99\x87\xa7\xfe\xfe\x7f\xbf\xbc\x91\x2f\x09\xed\xee\x04\x14\x74\x96\xf3\x9e\x68\xa4\xbf\x00\x00\x00\xff\xff\x23\x2d\xfc\x5d\xfc\x01\x00\x00"), }, "/src/bytes/bytes_test.go": &vfsgen۰CompressedFileInfo{ name: "bytes_test.go", - modTime: time.Date(2018, 2, 27, 18, 59, 8, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 335780600, time.UTC), uncompressedSize: 215, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xcc\xc1\x4a\xc4\x30\x10\x87\xf1\x73\xe7\x29\x86\x5c\x6c\x55\xba\x8f\xb1\xe0\xb5\xde\x44\x24\x4d\xff\xb6\xe3\xa6\x93\x90\x99\x22\xab\xf8\xee\xb2\xe0\xc5\xeb\xc7\x8f\xef\x74\xe2\x87\xf9\x90\xbc\xf0\x87\x11\xd5\x98\x2e\x71\x05\xcf\x57\x87\xbd\x39\xcc\x89\x64\xaf\xa5\x39\xf7\xd4\x85\x5b\x10\x5d\x03\x0d\x44\xef\x87\x26\x5e\xa2\xae\x68\xe5\xb0\x29\x4b\x42\xef\x7c\xff\x47\xc6\xe7\x81\x5f\x5e\x6f\x1b\xfe\xa6\xce\xc7\xe9\x22\xb5\x0f\xff\x39\x37\x64\x81\x71\x51\xb6\xab\xa5\x98\xf3\x78\x86\xd7\xb8\xc2\xe4\x0b\x8f\xfc\xb9\x49\xda\xf8\x5c\xea\x86\xf6\x34\xf1\x52\x60\x7a\xe7\x2c\x7b\xcd\xd8\xa1\x1e\x06\xa2\xae\x46\x95\xd4\x87\x43\x1b\x62\xda\xe2\x9c\x11\x06\xfa\xa1\xdf\x00\x00\x00\xff\xff\x25\x40\x6e\x83\xd7\x00\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x54\xcc\xc1\x4a\xc4\x30\x10\x87\xf1\x73\xe7\x29\x86\x5c\x6c\x55\xba\x8f\xb1\xe0\xb5\xde\x44\x24\x4d\xff\xb6\xe3\xa6\x93\x90\x99\x22\xab\xf8\xee\xb2\xe0\xc5\xeb\xc7\x8f\xef\x74\xe2\x87\xf9\x90\xbc\xf0\x87\x11\xd5\x98\x2e\x71\x05\xcf\x57\x87\xbd\x39\xcc\x89\x64\xaf\xa5\x39\xf7\xd4\x85\x5b\x10\x5d\x03\x0d\x44\xef\x87\x26\x5e\xa2\xae\x68\xe5\xb0\x29\x4b\x42\xef\x7c\xff\x47\xc6\xe7\x81\x5f\x5e\x6f\x1b\xfe\xa6\xce\xc7\xe9\x22\xb5\x0f\xff\x39\x37\x64\x81\x71\x51\xb6\xab\xa5\x98\xf3\x78\x86\xd7\xb8\xc2\xe4\x0b\x8f\xfc\xb9\x49\xda\xf8\x5c\xea\x86\xf6\x34\xf1\x52\x60\x7a\xe7\x2c\x7b\xcd\xd8\xa1\x1e\x06\xa2\xae\x46\x95\xd4\x87\x43\x1b\x62\xda\xe2\x9c\x11\x06\xfa\xa1\xdf\x00\x00\x00\xff\xff\x25\x40\x6e\x83\xd7\x00\x00\x00"), }, "/src/crypto": &vfsgen۰DirInfo{ name: "crypto", - modTime: time.Date(2018, 8, 25, 22, 2, 53, 552154706, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 447844200, time.UTC), }, "/src/crypto/internal": &vfsgen۰DirInfo{ name: "internal", - modTime: time.Date(2018, 8, 25, 22, 2, 53, 552270972, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 371779600, time.UTC), }, "/src/crypto/internal/subtle": &vfsgen۰DirInfo{ name: "subtle", - modTime: time.Date(2018, 8, 25, 22, 2, 53, 552422592, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 385778900, time.UTC), }, "/src/crypto/internal/subtle/aliasing.go": &vfsgen۰CompressedFileInfo{ name: "aliasing.go", - modTime: time.Date(2018, 8, 25, 22, 2, 53, 552642511, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 386778200, time.UTC), uncompressedSize: 654, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x90\x4d\x6f\xd4\x3c\x14\x85\xd7\xe3\x5f\x71\x14\xbd\xea\x9b\x68\xda\x84\x6e\x11\x45\x62\x55\xc1\xa6\x0b\x90\x58\x20\x16\x8e\x73\x27\x76\x70\xae\xa3\xeb\x1b\x88\x85\xf8\xef\x68\xa6\xa5\x7c\x0e\xec\x72\xa5\xe7\x39\xe7\xc4\x5d\x87\x7d\xbf\x86\x38\x60\xca\xc6\x2c\xd6\x7d\xb0\x23\x21\xaf\xbd\x46\x32\x26\xcc\x4b\x12\x45\x35\x06\xf5\x6b\xdf\xba\x34\x77\x63\x5a\x3c\xc9\x94\xbf\x7f\x4c\xb9\x32\xa6\xeb\xf0\x82\xcb\xdd\x47\x92\x68\x17\x08\x1d\xbd\x8c\x4f\x9e\xd4\x93\x60\x83\xe5\x01\x05\xd9\x5b\x21\xcc\x34\x27\x29\xb0\x0a\xcb\x05\x35\x27\x05\x93\xa3\x9c\xad\x84\x58\x8e\x51\x2e\x89\x50\x5e\x12\x0f\x81\xc7\x06\x81\x07\xda\x5a\xbc\xf1\x8f\x6e\x4f\x25\xf1\x00\xf5\x84\x1c\x83\x23\x44\xe2\x51\x3d\x42\x46\x18\x39\x09\x0d\xad\x39\xac\xec\x7e\x18\x55\x6f\x97\x28\x78\xf7\xbe\x2f\x4a\x0d\xfa\x94\x22\x3e\x9b\x5d\xd7\xe1\xf6\xf4\x23\xaf\x5e\x3f\xc5\x5b\x82\xb3\xfc\xbf\x42\x28\x16\x24\xc6\x92\x02\x2b\x09\xac\x04\xf5\x33\x69\x70\x97\xc8\x09\x6b\xa6\x47\xeb\xa1\xff\xc4\xb1\x8d\xb9\x35\x3b\x21\x5d\x85\x8f\x93\xea\xad\xc1\x73\x3c\xc1\xc5\xc5\xe9\x2a\xdf\x2e\xb3\xdb\x4d\xb9\x7d\xf9\xe0\xdc\xf5\x13\x39\xad\xb7\xa6\xbd\x25\xad\xab\xff\xac\x88\x2d\x55\x83\x9b\x1b\xfc\x4e\x95\x5f\xa9\x7f\xa5\xa5\xc3\x21\x93\x56\xcd\x11\xa8\x1b\x3c\xfb\x6b\xe8\xcf\xf0\xfe\x7e\xf4\xd5\xf5\xb9\x92\x33\xde\x9f\x4b\xce\x2c\xda\xdf\xbf\xd3\xd5\xb5\xf9\x62\xbe\x06\x00\x00\xff\xff\xb2\x4c\x59\x2e\x8e\x02\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x94\x8f\xcd\x6e\xd5\x30\x10\x85\xd7\xd7\x4f\x71\x14\xa1\x92\xa8\x6d\x42\xb7\x88\x22\xb1\xaa\x60\xd3\x05\x48\x2c\x10\x0b\xc7\x99\x1b\x3b\x38\xe3\x68\x3c\x81\x58\x88\x77\x47\xb9\x94\xf2\x27\x8a\xd8\x79\xa4\xef\x9c\xef\xb8\xeb\x70\xde\xaf\x21\x0e\x98\xb2\x31\x8b\x75\x1f\xec\x48\xc8\x6b\xaf\x91\x8c\x09\xf3\x92\x44\x51\x8d\x41\xfd\xda\xb7\x2e\xcd\xdd\x98\x16\x4f\x32\xe5\x1f\x8f\x29\x57\xc6\x74\x1d\x5e\x70\xb9\xfd\x48\x12\xed\x02\xa1\x3d\x97\xf1\xc9\x93\x7a\x12\x6c\xb0\x3c\xa0\x20\x7b\x2b\x84\x99\xe6\x24\x05\x56\x61\xb9\xa0\xe6\xa4\x60\x72\x94\xb3\x95\x10\xcb\x5e\xe5\x92\x08\xe5\x25\xf1\x10\x78\x6c\x10\x78\xa0\xad\xc5\x1b\x7f\x9f\xed\xa9\x24\x1e\xa0\x9e\x90\x63\x70\x84\x48\x3c\xaa\x47\xc8\x08\x23\x27\xa1\xa1\x35\xc7\x95\xdd\x4f\xa3\xea\xed\x02\x05\xef\xde\xf7\x45\xa9\x41\x9f\x52\xc4\x67\x73\xe8\x3a\xdc\x9c\x3e\xf2\xea\xf5\x53\xbc\x25\x38\xcb\x8f\x15\x42\xb1\x20\x31\x96\x14\x58\x49\x60\x25\xa8\x9f\x49\x83\xbb\x40\x4e\x58\x33\xdd\xa7\xee\xfc\x27\x8e\x6d\xcc\xad\x39\x08\xe9\x2a\xbc\x4f\xaa\xb7\x06\xcf\xf1\x04\x67\x67\xa7\xab\x7c\xbf\xcc\xe1\x30\xe5\xf6\xe5\x5d\xe6\xb6\x9f\xc8\x69\xbd\x35\xed\x0d\x69\x5d\x3d\xb2\x22\xb6\x54\x0d\xae\xaf\xf1\x27\x55\x7e\xa7\xfe\xd5\x96\x8e\xc7\x4c\x5a\x35\x3b\x50\x37\x78\xf6\x60\xe9\xaf\xf0\xf9\xb7\xd1\x97\x57\x7f\x93\x94\xff\x91\x6c\x0f\x48\xb6\xe6\xf2\xca\x7c\x31\x5f\x03\x00\x00\xff\xff\xb2\x4c\x59\x2e\x8e\x02\x00\x00"), }, "/src/crypto/rand": &vfsgen۰DirInfo{ name: "rand", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 431816802, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 417784500, time.UTC), }, "/src/crypto/rand/rand.go": &vfsgen۰CompressedFileInfo{ name: "rand.go", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 431904120, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 418783900, time.UTC), uncompressedSize: 1415, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x54\x41\x4f\xeb\x38\x10\x3e\xc7\xbf\x62\xc8\xae\x56\xf1\x12\x12\x24\x04\x87\xae\x8a\xc4\x22\x84\x38\x2c\xbb\x8b\x76\xdf\x3b\x20\x0e\x76\x32\x69\x5c\x52\xbb\x6f\xec\x34\x54\xa5\xff\xfd\xc9\x71\x52\x0a\xf4\xe9\x5d\xda\x38\xdf\x37\xdf\x37\x33\x9e\x49\x9e\xc3\xb1\x6c\x55\x53\xc2\xdc\x32\xb6\x14\xc5\xb3\x98\x21\x90\xd0\x25\x63\x6a\xb1\x34\xe4\x20\x61\x51\x8c\x44\x86\x6c\xcc\x58\x14\xcf\x94\xab\x5b\x99\x15\x66\x91\xcf\xcc\xb2\x46\x9a\xdb\xb7\x87\xb9\x8d\x19\x67\xac\x6a\x75\x01\x4a\x2b\x97\x70\xd8\xb0\xe8\x01\x45\x89\x04\x53\xf8\x8d\xf4\x2c\x1c\x36\x5b\xb6\x65\xcc\xad\x97\x08\xbb\x77\x60\x1d\xb5\x85\xdb\x6c\x07\x81\x84\xe0\xf7\x1d\xc8\xc1\xff\x27\x12\x1e\x9f\xe4\xda\x21\x87\x44\x83\xd2\x2e\x05\x24\x82\x3e\xbd\xde\x4a\x10\x89\x35\x4c\xa6\x30\xb7\xd9\x9d\x76\x48\x5a\x34\x7f\xcb\x39\x16\x2e\x91\x3c\xbb\x45\x97\xc4\xbf\xf6\x9c\x98\xb3\xc8\x54\x95\x45\xf7\x13\x76\x20\xc5\xdc\x13\x12\xce\x58\x94\xe7\x20\xc9\x74\x16\x89\x45\x05\xad\x97\xce\x0c\x0a\xb7\x8d\x91\xa2\x09\x61\x01\xf0\x26\xaa\x82\x81\x35\xed\x59\xff\xeb\x12\x2b\xa5\xb1\xf4\xe9\x8e\x02\x9f\xe2\x17\xf6\x7a\xa7\xb0\xdd\x17\x39\x3a\x20\xb2\x43\x43\xec\x0c\xdd\x83\xd0\xa5\x59\x7c\x11\x4d\x8b\x36\xe6\x07\x83\x22\x0d\x53\x68\x50\x27\x92\xfb\x93\xaa\x40\xc3\x25\x5c\x9c\x9f\x9f\x5d\x04\xdc\x17\x7a\xb5\x32\xaa\x84\x7f\x5b\xe3\xc4\xcd\x4b\x81\x58\x62\x79\xe3\x7b\x0d\xae\x26\xd3\x69\x90\x6b\xf8\xe0\x36\x46\x76\x35\x6a\x2f\x3f\x73\x35\x28\x0b\x0b\x43\x08\xae\x16\x3a\x38\xa4\x20\x2c\xd8\x25\x16\xaa\x52\x58\x82\xd2\x63\x58\xed\xdc\x72\x92\xe7\x5d\xd7\x65\xdd\x59\x66\x68\x96\xff\xf7\x90\x7f\x45\x19\xba\x71\xf5\xcf\x5d\xfe\x4b\x78\x3c\x59\xa0\xab\x4d\x79\x72\xc8\xde\x57\xd6\xdb\xf8\xd3\xd6\xff\x0c\xed\xb9\x16\x4d\xf3\xb9\x3f\x29\xf4\x13\x31\xa0\xb6\x95\x61\x40\x52\x08\x57\x3f\xfe\x1f\x6b\xde\x77\x8a\xd0\xb5\xa4\x41\xa7\xa0\x55\xc3\x7a\x83\x6d\x18\x8b\x7b\x53\x62\x36\xb7\xfd\x75\x11\x7e\x6b\x15\xe1\x81\xd1\x18\x90\x98\xff\xb1\x23\xfd\xe0\x52\xa9\xcf\xf2\xcf\xb5\x43\xeb\x75\x06\x76\x76\xa7\x57\xe6\x19\xdf\x66\x6c\x90\x7d\x23\xf7\xd2\x7b\xb1\x07\xaf\xff\x5d\xcd\xe8\xe2\x74\x3f\x64\xf4\x08\xf3\xc1\xc7\x16\xec\xd7\x1f\xa0\x0f\x4d\x18\xb0\xd3\x34\xac\xa4\xcd\xee\xb1\x1b\x13\xcd\xbd\x3e\x68\xe3\x40\xac\x84\x6a\x84\x6c\x10\x94\x06\x57\x2b\x0b\xa8\x57\x8a\x8c\x5e\xa0\x76\x31\x67\xe3\x07\x40\x0a\x57\xd4\x58\x26\x15\xf8\x63\x32\x6e\xbe\x34\xa6\x49\x81\x50\x94\x7f\x89\x17\xff\x11\xe0\x9f\x71\x5f\xe3\x90\x4c\x8f\xc9\xb6\x82\x8f\x78\x54\x19\x0a\x65\xb4\x15\x87\xcb\x9d\xe2\x66\xd8\x87\xa3\xca\x23\x8f\x93\xe1\xfd\x13\x1f\xf6\x62\xd4\x15\x8d\xc5\xdd\x84\x79\x83\x29\x78\xfe\x40\x9f\x3c\x85\xb6\xbc\xeb\x97\x37\x9a\x4e\xe1\x14\x5e\x5f\xa1\x57\xef\xd7\x7b\xcb\xbe\x07\x00\x00\xff\xff\x4b\xf2\x65\x42\x87\x05\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x84\x54\x41\x4f\xeb\x38\x10\x3e\xc7\xbf\x62\xc8\xae\x56\xf1\x12\x12\x24\x04\x87\xae\x8a\xc4\x22\x84\x38\x2c\xbb\x8b\x76\xdf\x3b\x20\x0e\x76\x32\x69\x5c\x52\xbb\x6f\xec\x34\x54\xa5\xff\xfd\xc9\x71\x52\x0a\xf4\xe9\x5d\xda\x38\xdf\x37\xdf\x37\x33\x9e\x49\x9e\xc3\xb1\x6c\x55\x53\xc2\xdc\x32\xb6\x14\xc5\xb3\x98\x21\x90\xd0\x25\x63\x6a\xb1\x34\xe4\x20\x61\x51\x8c\x44\x86\x6c\xcc\x58\x14\xcf\x94\xab\x5b\x99\x15\x66\x91\xcf\xcc\xb2\x46\x9a\xdb\xb7\x87\xb9\x8d\x19\x67\xac\x6a\x75\x01\x4a\x2b\x97\x70\xd8\xb0\xe8\x01\x45\x89\x04\x53\xf8\x8d\xf4\x2c\x1c\x36\x5b\xb6\x65\xcc\xad\x97\x08\xbb\x77\x60\x1d\xb5\x85\xdb\x6c\x07\x81\x84\xe0\xf7\x1d\xc8\xc1\xff\x27\x12\x1e\x9f\xe4\xda\x21\x87\x44\x83\xd2\x2e\x05\x24\x82\x3e\xbd\xde\x4a\x10\x89\x35\x4c\xa6\x30\xb7\xd9\x9d\x76\x48\x5a\x34\x7f\xcb\x39\x16\x2e\x91\x3c\xbb\x45\x97\xc4\xbf\xf6\x9c\x98\xb3\xc8\x54\x95\x45\xf7\x13\x76\x20\xc5\xdc\x13\x12\xce\x58\x94\xe7\x20\xc9\x74\x16\x89\x45\x05\xad\x97\xce\x0c\x0a\xb7\x8d\x91\xa2\x09\x61\x01\xf0\x26\xaa\x82\x81\x35\xed\x59\xff\xeb\x12\x2b\xa5\xb1\xf4\xe9\x8e\x02\x9f\xe2\x17\xf6\x7a\xa7\xb0\xdd\x17\x39\x3a\x20\xb2\x43\x43\xec\x0c\xdd\x83\xd0\xa5\x59\x7c\x11\x4d\x8b\x36\xe6\x07\x83\x22\x0d\x53\x68\x50\x27\x92\xfb\x93\xaa\x40\xc3\x25\x5c\x9c\x9f\x9f\x5d\x04\xdc\x17\x7a\xb5\x32\xaa\x84\x7f\x5b\xe3\xc4\xcd\x4b\x81\x58\x62\x79\xe3\x7b\x0d\xae\x26\xd3\x69\x90\x6b\xf8\xe0\x36\x46\x76\x35\x6a\x2f\x3f\x73\x35\x28\x0b\x0b\x43\x08\xae\x16\x3a\x38\xa4\x20\x2c\xd8\x25\x16\xaa\x52\x58\x82\xd2\x63\x58\xed\xdc\x72\x92\xe7\x5d\xd7\x65\xdd\x59\x66\x68\x96\xff\xf7\x90\x7f\x45\x19\xba\x71\xf5\xcf\x5d\xfe\x4b\x78\x3c\x59\xa0\xab\x4d\x79\x72\xc8\xde\x57\xd6\xdb\xf8\xd3\xd6\xff\x0c\xed\xb9\x16\x4d\xf3\xb9\x3f\x29\xf4\x13\x31\xa0\xb6\x95\x61\x40\x52\x08\x57\x3f\xfe\x1f\x6b\xde\x77\x8a\xd0\xb5\xa4\x41\xa7\xa0\x55\xc3\x7a\x83\x6d\x18\x8b\x7b\x53\x62\x36\xb7\xfd\x75\x11\x7e\x6b\x15\xe1\x81\xd1\x18\x90\x98\xff\xb1\x23\xfd\xe0\x52\xa9\xcf\xf2\xcf\xb5\x43\xeb\x75\x06\x76\x76\xa7\x57\xe6\x19\xdf\x66\x6c\x90\x7d\x23\xf7\xd2\x7b\xb1\x07\xaf\xff\x5d\xcd\xe8\xe2\x74\x3f\x64\xf4\x08\xf3\xc1\xc7\x16\xec\xd7\x1f\xa0\x0f\x4d\x18\xb0\xd3\x34\xac\xa4\xcd\xee\xb1\x1b\x13\xcd\xbd\x3e\x68\xe3\x40\xac\x84\x6a\x84\x6c\x10\x94\x06\x57\x2b\x0b\xa8\x57\x8a\x8c\x5e\xa0\x76\x31\x67\xe3\x07\x40\x0a\x57\xd4\x58\x26\x15\xf8\x63\x32\x6e\xbe\x34\xa6\x49\x81\x50\x94\x7f\x89\x17\xff\x11\xe0\x9f\x71\x5f\xe3\x90\x4c\x8f\xc9\xb6\x82\x8f\x78\x54\x19\x0a\x65\xb4\x15\x87\xcb\x9d\xe2\x66\xd8\x87\xa3\xca\x23\x8f\x93\xe1\xfd\x13\x1f\xf6\x62\xd4\x15\x8d\xc5\xdd\x84\x79\x83\x29\x78\xfe\x40\x9f\x3c\x85\xb6\xbc\xeb\x97\x37\x9a\x4e\xe1\x14\x5e\x5f\xa1\x57\xef\xd7\x7b\xcb\xbe\x07\x00\x00\xff\xff\x4b\xf2\x65\x42\x87\x05\x00\x00"), }, "/src/crypto/x509": &vfsgen۰DirInfo{ name: "x509", - modTime: time.Date(2018, 4, 20, 10, 26, 30, 238700007, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 15, 16, 405157100, time.UTC), }, "/src/crypto/x509/x509.go": &vfsgen۰CompressedFileInfo{ name: "x509.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 456782600, time.UTC), uncompressedSize: 177, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\x8d\xb1\x6e\xc2\x40\x10\x05\xeb\xec\x57\x3c\x5d\x65\x27\x51\x9c\x26\x45\xd2\xa6\x88\x94\x02\x21\xfc\x05\x67\x7b\x81\x83\xf3\xed\x69\x6f\x0d\x58\x88\x7f\x47\x58\xa2\x1d\x8d\x66\x9a\x06\x6f\xdd\x14\xe2\x80\x43\x21\xca\xbe\x3f\xfa\x1d\xe3\xf2\xf5\xf9\x4d\x14\xc6\x2c\x6a\x70\xac\x2a\x5a\x1c\xd1\x76\x4a\x3d\xa2\xf8\xa1\x9d\x8b\xf1\xb8\x11\xb1\x52\xd5\xa8\x5e\x7f\x59\x6d\x2d\x12\xdf\xb1\xb8\x35\xae\xf4\xa2\x6c\x93\x26\xa4\xf0\xa4\xe5\x63\xc5\xe7\xca\xf5\x3a\x67\x93\xe6\xb1\xf8\x41\x59\x42\x50\x11\x43\x16\x89\x08\x05\x49\x0c\xfe\xe4\x43\xf4\x5d\x64\x84\x84\x3f\xc9\x7b\xd6\xff\xd6\xd5\x74\xa3\x7b\x00\x00\x00\xff\xff\xa1\x8b\x91\x39\xb1\x00\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x34\x8d\xb1\x6e\xc2\x40\x10\x05\xeb\xec\x57\x3c\x5d\x65\x27\x51\x9c\x26\x45\xd2\xa6\x88\x94\x02\x21\xfc\x05\x67\x7b\x81\x83\xf3\xed\x69\x6f\x0d\x58\x88\x7f\x47\x58\xa2\x1d\x8d\x66\x9a\x06\x6f\xdd\x14\xe2\x80\x43\x21\xca\xbe\x3f\xfa\x1d\xe3\xf2\xf5\xf9\x4d\x14\xc6\x2c\x6a\x70\xac\x2a\x5a\x1c\xd1\x76\x4a\x3d\xa2\xf8\xa1\x9d\x8b\xf1\xb8\x11\xb1\x52\xd5\xa8\x5e\x7f\x59\x6d\x2d\x12\xdf\xb1\xb8\x35\xae\xf4\xa2\x6c\x93\x26\xa4\xf0\xa4\xe5\x63\xc5\xe7\xca\xf5\x3a\x67\x93\xe6\xb1\xf8\x41\x59\x42\x50\x11\x43\x16\x89\x08\x05\x49\x0c\xfe\xe4\x43\xf4\x5d\x64\x84\x84\x3f\xc9\x7b\xd6\xff\xd6\xd5\x74\xa3\x7b\x00\x00\x00\xff\xff\xa1\x8b\x91\x39\xb1\x00\x00\x00"), }, "/src/crypto/x509/x509_test.go": &vfsgen۰CompressedFileInfo{ name: "x509_test.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), - uncompressedSize: 364, + modTime: time.Date(2021, 3, 28, 16, 15, 16, 406171800, time.UTC), + uncompressedSize: 457, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x90\xb1\x0e\x82\x40\x0c\x40\x67\xfb\x15\xcd\x4d\xa0\x09\xb8\x38\x38\x1b\x07\x37\x23\x84\x1d\xb1\x90\x13\xb8\x92\x6b\x31\x12\xe3\xbf\x1b\xd1\x49\x17\xc2\xdc\xf7\x5e\x9b\xc6\x31\xae\xce\xbd\x6d\x2e\x78\x15\x80\x2e\x2f\xea\xbc\x22\xbc\x6f\xd6\x5b\x00\xdb\x76\xec\x15\x8d\x92\xa8\x75\x95\x01\x28\x7b\x57\x60\x4a\xa2\xc9\x20\x4a\xed\x8e\xbc\x1e\x99\x9b\x40\x71\xf9\x85\xa2\x34\xc4\x07\x2c\x34\x4a\x6a\xdb\x05\xc6\x31\xca\x88\xa2\x67\x56\x31\x21\x3c\xff\x2a\xa7\xf7\x64\x6e\x62\xef\x6e\x59\xee\x67\xeb\x9f\x0b\x32\xf2\xb6\x1c\x26\x34\x7e\xec\xc3\xf8\xa0\x29\xcb\x47\xf1\x15\x00\x00\xff\xff\xa4\x46\xbd\x49\x6c\x01\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x9c\x90\x41\x4b\x85\x50\x10\x85\xd7\xcd\xaf\x18\xee\x4a\x0b\xb4\x4d\x8b\xd6\xd6\x22\x68\x11\x29\xee\x6f\x3a\xca\x4d\xbd\x73\xb9\x33\x46\x12\xfd\xf7\xd0\x1e\x3c\x78\x6f\x23\x2e\x87\x39\xdf\xc7\xe1\xe4\x39\xde\x7d\xcc\x6e\x6c\xf1\x53\x00\x82\x6d\x06\xdb\x13\x7e\x3f\xdc\x3f\x02\xb8\x29\x70\x54\x34\x4a\xa2\xce\xf7\x06\xa0\x9b\x7d\x83\x15\x89\x96\x8b\x28\x4d\x05\x45\x7d\x63\x1e\x13\xc5\xdb\x53\x28\xab\x52\xfc\x81\x1b\xcd\xca\xc1\x85\xc4\x78\x46\xd9\xa2\x18\x99\x55\x4c\x0a\xbf\x57\x96\xf7\xf5\x73\x54\xf1\xca\xb6\x3d\x97\x91\xf5\x2c\x78\x64\x5f\x52\xb0\xd1\x2a\xb5\x4f\x2e\x1e\x96\x3f\xfb\xaf\xda\x1e\xc7\xff\x7b\xd5\x14\x5d\xb7\xec\x70\x5c\xd0\x2f\xdb\xfa\xb2\x17\xfc\x0b\x00\x00\xff\xff\xad\x76\xfa\xa9\xc9\x01\x00\x00"), }, "/src/database": &vfsgen۰DirInfo{ name: "database", - modTime: time.Date(2018, 4, 20, 9, 16, 25, 459988033, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 506779300, time.UTC), }, "/src/database/sql": &vfsgen۰DirInfo{ name: "sql", - modTime: time.Date(2018, 4, 20, 9, 32, 51, 261527036, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 514778500, time.UTC), }, "/src/database/sql/driver": &vfsgen۰DirInfo{ name: "driver", - modTime: time.Date(2018, 4, 20, 12, 39, 47, 342057645, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 527780700, time.UTC), }, "/src/database/sql/driver/driver_test.go": &vfsgen۰CompressedFileInfo{ name: "driver_test.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 528783000, time.UTC), uncompressedSize: 1185, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x53\x4d\x8f\xd3\x30\x10\x3d\x93\x5f\x31\x9a\x03\x38\x60\x35\xc9\x0a\xad\x44\x24\x2e\xb0\xe2\xba\x1c\x7a\xdb\xf6\xe0\x24\x0e\x32\x18\x3b\xf8\x23\xa5\xaa\xfa\xdf\x91\xe3\x06\xa4\xd6\x6d\xc3\x25\x9e\xcc\x9b\x79\xf3\xe4\x79\x2e\x0a\x78\xd7\x78\x21\x3b\xf8\x6e\xb3\x6c\x60\xed\x0f\xf6\x8d\x43\x67\xc4\xc8\x4d\x96\x8d\xcc\xc0\xc8\xa4\xe7\x9f\xb5\x1a\xb9\x71\xdc\xac\xb9\x75\x16\x3e\xc2\xcb\xf6\x32\x7f\xc8\x5e\x1d\x3e\x69\x2d\x29\xa0\x33\x9e\x23\x85\x70\x50\x40\x3c\xd2\x7f\xd0\xfa\x2a\xf4\xb2\x6d\xf6\x8e\x13\x74\x98\x27\xf1\x98\x4a\x71\x56\x69\xc2\x2a\x99\x15\xca\x3d\xbe\x27\x55\x7a\x86\x17\xca\x55\x8f\xd7\x50\xec\x99\xb4\x41\xfd\x74\x9e\x81\xa7\x5c\x0a\xc2\xf2\x4a\x4f\x99\x4e\x47\x89\x65\x9e\x46\x4f\x1a\x2f\xe1\xb6\x86\xb9\xbf\x06\xec\xb5\x46\x0a\xdc\x98\x1a\xd0\xfe\x92\x45\x5c\x6a\x0d\xad\xf6\xb2\x53\x6f\x1c\xb4\x71\x79\xb0\x09\xa5\x1b\x0c\x53\x35\xb8\xfd\xc0\xa1\xd1\x5a\x26\x28\x1f\x16\xd1\x3d\x24\x89\x9e\x78\xcf\xbc\x74\x5f\x99\x61\x3f\xb9\xe3\xe6\xaf\x73\x28\x28\xbd\x3b\x7d\xf0\x6e\x2d\x79\x3b\xdd\x4d\x4e\x94\x90\x39\x05\x25\xe4\x92\xae\xd7\x4c\xd9\x5d\x08\xe6\x73\x41\xcb\xb9\xaa\xa2\xb8\x55\x2e\xc8\x87\x7c\xde\x5b\x88\x42\x0f\x14\x05\xac\x9f\x9f\x9e\x6b\xf8\x22\x7e\xaf\x6e\x8f\xeb\x49\xb9\x0a\xa6\xeb\xa5\x66\xd3\xee\xa7\xbf\xfb\x32\x1b\x12\x6c\x7a\xe6\xd6\xdb\x52\x1b\x7b\xa8\x8e\xf3\x6b\x9b\xc2\xff\x15\x6b\x09\xb2\xf0\x46\x91\xe1\x12\x8d\x22\x0e\x8c\xbb\xf2\xca\xfa\x61\xd0\xc6\xf1\x2e\x5a\x24\xfa\x68\x25\x2c\x05\x06\x56\x8a\x96\x83\xee\xc3\x4d\x06\xde\x63\xf6\x27\x00\x00\xff\xff\x8d\xf2\x41\x9a\xa1\x04\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x94\x53\x4d\x8f\xd3\x30\x10\x3d\x93\x5f\x31\x9a\x03\x38\x60\x35\xc9\x0a\xad\x44\x24\x2e\xb0\xe2\xba\x1c\x7a\xdb\xf6\xe0\x24\x0e\x32\x18\x3b\xf8\x23\xa5\xaa\xfa\xdf\x91\xe3\x06\xa4\xd6\x6d\xc3\x25\x9e\xcc\x9b\x79\xf3\xe4\x79\x2e\x0a\x78\xd7\x78\x21\x3b\xf8\x6e\xb3\x6c\x60\xed\x0f\xf6\x8d\x43\x67\xc4\xc8\x4d\x96\x8d\xcc\xc0\xc8\xa4\xe7\x9f\xb5\x1a\xb9\x71\xdc\xac\xb9\x75\x16\x3e\xc2\xcb\xf6\x32\x7f\xc8\x5e\x1d\x3e\x69\x2d\x29\xa0\x33\x9e\x23\x85\x70\x50\x40\x3c\xd2\x7f\xd0\xfa\x2a\xf4\xb2\x6d\xf6\x8e\x13\x74\x98\x27\xf1\x98\x4a\x71\x56\x69\xc2\x2a\x99\x15\xca\x3d\xbe\x27\x55\x7a\x86\x17\xca\x55\x8f\xd7\x50\xec\x99\xb4\x41\xfd\x74\x9e\x81\xa7\x5c\x0a\xc2\xf2\x4a\x4f\x99\x4e\x47\x89\x65\x9e\x46\x4f\x1a\x2f\xe1\xb6\x86\xb9\xbf\x06\xec\xb5\x46\x0a\xdc\x98\x1a\xd0\xfe\x92\x45\x5c\x6a\x0d\xad\xf6\xb2\x53\x6f\x1c\xb4\x71\x79\xb0\x09\xa5\x1b\x0c\x53\x35\xb8\xfd\xc0\xa1\xd1\x5a\x26\x28\x1f\x16\xd1\x3d\x24\x89\x9e\x78\xcf\xbc\x74\x5f\x99\x61\x3f\xb9\xe3\xe6\xaf\x73\x28\x28\xbd\x3b\x7d\xf0\x6e\x2d\x79\x3b\xdd\x4d\x4e\x94\x90\x39\x05\x25\xe4\x92\xae\xd7\x4c\xd9\x5d\x08\xe6\x73\x41\xcb\xb9\xaa\xa2\xb8\x55\x2e\xc8\x87\x7c\xde\x5b\x88\x42\x0f\x14\x05\xac\x9f\x9f\x9e\x6b\xf8\x22\x7e\xaf\x6e\x8f\xeb\x49\xb9\x0a\xa6\xeb\xa5\x66\xd3\xee\xa7\xbf\xfb\x32\x1b\x12\x6c\x7a\xe6\xd6\xdb\x52\x1b\x7b\xa8\x8e\xf3\x6b\x9b\xc2\xff\x15\x6b\x09\xb2\xf0\x46\x91\xe1\x12\x8d\x22\x0e\x8c\xbb\xf2\xca\xfa\x61\xd0\xc6\xf1\x2e\x5a\x24\xfa\x68\x25\x2c\x05\x06\x56\x8a\x96\x83\xee\xc3\x4d\x06\xde\x63\xf6\x27\x00\x00\xff\xff\x8d\xf2\x41\x9a\xa1\x04\x00\x00"), }, "/src/debug": &vfsgen۰DirInfo{ name: "debug", - modTime: time.Date(2018, 4, 20, 9, 10, 26, 815054147, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 556783500, time.UTC), }, "/src/debug/elf": &vfsgen۰DirInfo{ name: "elf", - modTime: time.Date(2018, 4, 20, 9, 40, 48, 430335834, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 570794600, time.UTC), }, "/src/debug/elf/elf_test.go": &vfsgen۰FileInfo{ name: "elf_test.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 572796900, time.UTC), content: []byte("\x2f\x2f\x20\x2b\x62\x75\x69\x6c\x64\x20\x6a\x73\x0a\x0a\x70\x61\x63\x6b\x61\x67\x65\x20\x65\x6c\x66\x0a\x0a\x69\x6d\x70\x6f\x72\x74\x20\x22\x74\x65\x73\x74\x69\x6e\x67\x22\x0a\x0a\x66\x75\x6e\x63\x20\x54\x65\x73\x74\x4e\x6f\x53\x65\x63\x74\x69\x6f\x6e\x4f\x76\x65\x72\x6c\x61\x70\x73\x28\x74\x20\x2a\x74\x65\x73\x74\x69\x6e\x67\x2e\x54\x29\x20\x7b\x0a\x09\x74\x2e\x53\x6b\x69\x70\x28\x22\x6e\x6f\x74\x20\x36\x6c\x22\x29\x0a\x7d\x0a"), }, "/src/encoding": &vfsgen۰DirInfo{ name: "encoding", - modTime: time.Date(2018, 4, 20, 9, 17, 51, 678431000, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 632781800, time.UTC), }, "/src/encoding/gob": &vfsgen۰DirInfo{ name: "gob", - modTime: time.Date(2018, 4, 20, 10, 28, 37, 407632207, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 608780900, time.UTC), }, "/src/encoding/gob/gob_test.go": &vfsgen۰CompressedFileInfo{ name: "gob_test.go", - modTime: time.Date(2018, 2, 27, 18, 42, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 609781100, time.UTC), uncompressedSize: 2598, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x56\x51\x6f\xdb\x3e\x0e\x7f\xb6\x3e\x05\x67\xdc\x0a\xa7\xe7\x39\x95\x93\xae\x9d\x81\x3e\xac\x5b\x77\xd8\x43\x3b\x60\x33\x70\xdb\x8a\x62\x70\x6c\x26\xd1\xea\x48\x3e\x49\x6e\x1a\x04\xf9\xee\x07\x4a\x76\x9c\xae\xff\x0d\x2b\xd0\x56\xa4\x7e\xfc\x91\xa2\x48\xca\xe3\x31\xfc\x7b\xd6\x8a\xba\x82\x9f\x86\xb1\xa6\x28\xef\x8b\x05\xc2\x42\xcd\x18\x13\xab\x46\x69\x0b\x11\x0b\xc2\xd9\xc6\xa2\x09\x59\x10\x6a\x9c\xd7\x58\x5a\x5a\x5a\x34\x56\xc8\x45\xc8\x46\x8c\x8d\xc7\x90\x7f\x7a\xff\x29\x83\x1c\x8d\xbd\x92\x55\xae\xae\x64\x05\xea\x01\xb5\x16\x15\x42\x59\x48\x98\x21\x68\x5c\xa9\x07\xac\x40\xc9\x12\xc1\x2e\x11\x66\xed\x02\xd6\xc2\x2e\xe1\xba\xd0\x1a\xe6\x02\xeb\x0a\x84\x81\xb9\x78\xc4\x2a\x61\xf3\x56\x96\x4f\x08\x23\x0b\xc7\x9d\xd7\x24\x1f\xc1\x96\x05\x76\xd3\x20\xe4\x29\x18\xab\xdb\xd2\x92\x26\xc8\x49\x10\x72\xc1\x82\x5d\xbf\x3f\x39\xdc\xff\x0a\xf3\x5a\x15\xf6\xf5\x94\x05\xc1\x77\x38\x16\xd2\x1e\x20\xf9\x21\xf2\x6d\x0c\x97\x31\xbc\x03\x70\x98\xe0\x1a\xba\x9f\x55\xd1\xdc\x7a\x1f\x77\xc7\x03\xd7\x75\x7a\xb0\x2d\xa4\xbd\xcb\x27\xa4\xf5\xc0\x27\x46\x7d\x7c\xc1\xb5\x90\xb6\xb1\x7a\x30\x39\xee\x3c\x95\x6a\xd5\xf4\x54\xb4\xae\xf1\x91\xa7\xe7\x77\xc3\x92\x40\x94\xb2\x1e\x74\x9b\x76\xac\x77\xb7\xe9\x61\x50\x57\xab\xc6\x6e\xae\x8b\xe6\xd0\xbd\x90\x16\xc6\x63\xb0\x0a\xca\x25\x96\xf7\x60\x97\x85\x85\x35\xdd\x4e\x89\xe2\x01\xa1\x00\xa9\xe4\x2b\x29\x6a\x32\x4a\x58\x10\xdc\xf4\x07\x3f\xbe\x9d\xdc\x0d\xdc\x5f\xac\x36\x9d\x3a\x1d\xce\xf4\x51\xda\xd7\x53\xe3\xb4\xe4\xc9\x21\x3f\x7f\xec\x08\xba\x03\x78\xf3\x9e\x75\x6f\xfa\xad\xd7\xdc\xde\x51\xbd\xb9\xbb\xec\x3d\xe7\xa9\xbb\xa5\x46\x40\x76\x01\x93\x84\x4f\xf9\xe9\x1b\x16\x20\x49\x69\x72\xc6\xcf\x29\x25\x76\xad\xbc\x7c\xc2\x82\x15\x16\x92\xf2\x9e\x5d\xc0\x34\x65\xc1\x5c\xc8\x05\x6a\x43\xe2\x29\x0b\x0c\xa7\x45\xe8\x1d\xf3\x90\x05\x26\x3d\x50\xa4\x21\x0b\x1e\x0a\xed\x82\xe5\x30\xe4\x1c\x2e\x7a\x21\xe2\xc9\x49\x0c\x3c\x39\x19\x0d\xc8\xf4\xaf\x90\x85\xd6\x1c\x0e\xd2\x45\xf2\xed\xc9\x1d\x5c\x80\xe1\x9d\xc4\x9d\x94\xee\xf1\xe9\x2f\xf8\xb4\xc3\xa7\x9d\xc4\x7b\x6b\xc2\xbb\xdb\x79\xdb\x39\x19\xea\x60\xaf\xf6\xb6\x47\x8d\x38\xd4\x39\x86\x23\x7c\xca\x90\xfe\x33\x43\xe7\x9d\xd0\x83\xca\x13\xd8\xb5\x62\x81\x75\xa9\x3d\xca\xb9\x6b\xa0\xac\xbb\x3e\x7e\x16\xb3\x20\xb8\xdc\x8b\xe7\x24\xbe\xeb\xc5\x57\xa7\x24\x5e\x67\xbf\x6f\xaf\x6d\xd8\x88\x30\xa3\xb8\x63\x08\x91\x56\xb8\x73\x36\x69\xf6\x6b\xcf\x6d\xa7\x19\xe4\x93\xed\xd7\x0c\x08\xfc\x3d\x83\xa3\xae\x14\x76\x31\xf0\x93\x7e\x0f\xfd\x56\x57\x16\x3b\x4f\xe6\x9d\x66\xcf\x5b\xb5\x73\x1f\x52\xdd\x85\x5d\x04\x21\x95\x5d\xe8\x0d\x7d\x1b\x67\x4f\xda\x78\xdb\xb9\x1d\xbc\xc4\xd0\x2d\x0e\x63\xea\xbb\x3d\xfb\x53\xb7\x6f\x5d\x29\x66\xbe\xce\x62\xff\xcf\x4b\xdc\x31\xec\xa7\xef\x07\xf1\x08\x76\x29\x0c\x34\x5a\xcd\x6a\x5c\x65\x7e\x33\xc8\x37\x0d\x5e\x69\xad\x74\x06\x95\xb1\xc9\xbf\x0c\x5a\x9a\xb3\x52\x59\x28\x80\xc6\xac\x15\x4a\x76\x58\x4a\x67\x61\x81\xe6\x61\xb5\xc2\x15\x4d\x6c\x88\xc6\x0b\x61\x97\xed\x2c\x29\xd5\x6a\xbc\x50\xcd\x12\xf5\x4f\x33\x2c\xba\x47\x21\x59\xa8\x6c\x7a\x7e\x96\x4d\x46\x8e\x8a\x06\x54\xf6\xe7\x09\xb5\xa5\x8a\xcf\x86\xaa\x8d\x5d\xc1\x0f\x8a\xd4\x1d\xaf\x1f\x62\x94\xe0\x7b\x8c\x9e\x8e\xb2\x11\x21\x6e\xfa\xda\x81\xa3\x61\x44\x6d\x79\x72\x1a\x43\x4a\x7f\x26\xc9\xa9\x63\xa2\x91\x95\x75\xb8\x3e\x9e\xad\xe1\x31\x18\xef\xc9\x0f\xaf\xcc\xed\xfb\xe9\xb5\x3d\x3b\x8b\xe1\xfc\x4d\x0c\x3c\x9d\x4c\xe9\x37\xe5\x93\xa9\xc3\x7e\xfe\x38\x54\x37\xbc\x82\x74\x22\x9c\x87\x7d\x24\xe1\x8d\x5a\x53\x92\xe9\x9d\xb3\x62\x85\x21\x6d\x7f\xcb\x9e\xce\xb8\x28\x5c\x62\x5d\xab\x18\x4c\x21\x6a\xa5\x43\x77\x9a\x7c\x38\x4d\x9e\x6e\x43\x77\xa1\xc2\x40\x9e\xba\x72\xdb\xb1\x60\x46\x3d\x26\x71\x1d\xb9\x67\x39\xb9\x6c\xe7\x73\xd4\x23\x16\xa0\xd6\xb4\x73\x83\xeb\x2b\x59\xaa\x0a\x75\x34\x1b\x25\x7e\x19\x59\x3e\x62\x81\x98\x03\x61\x5e\x5c\x00\x8d\x77\x6a\x51\x9b\xb8\xba\x88\x42\x74\xb0\x2c\x8c\x09\x31\x72\x6e\x68\x1c\xfc\xb0\x1c\x72\xee\xa9\x1d\xf3\x7b\xdc\x33\xfb\x65\x74\xf4\xe3\xb7\xdc\x1f\x0a\x5b\xd4\x51\x58\xe1\x33\x6e\x31\x87\x17\x7d\xd9\xbc\x47\x6c\xae\xfe\xd7\x16\x75\x64\x79\x0c\x8e\xee\x30\xb6\x79\x1f\x1c\xe0\x63\x83\xa5\xc5\x0a\x5e\x3e\xc0\x42\x59\x78\xf9\x10\xc6\x70\x4c\x46\x3e\x84\x1d\xa3\x0a\xbe\x44\x28\x66\x46\xd5\xad\xc5\x7a\x03\xa6\xd5\xfe\x5b\xa3\x7b\xde\x2a\xaa\x46\x5f\xfc\xee\x91\x4b\x5c\x2c\x96\x27\xfb\xa7\xf2\xe2\x59\x76\xe6\x51\xd8\x3d\x87\x60\x50\xda\x70\x7f\x84\x1f\x7f\x6d\xd7\x7b\xf7\xb6\x3b\x36\x7c\xdc\x50\x6f\x7e\x2e\x4a\x7c\xfe\x71\x33\x1e\x83\x3b\xb8\x90\x8b\xf1\x42\xcd\xa0\x6c\xb5\x46\x69\xeb\x0d\xb4\x06\xe9\x00\x66\x23\xcb\x04\x72\xaa\x0f\xb2\xf4\x6a\xa7\xfc\x6f\x21\xec\x7f\xb4\x6a\x1b\x28\x64\xe5\x98\xca\x42\x52\xbb\x9b\xb6\x2c\x11\x2b\x58\x2f\x51\x76\x0c\x94\x8c\xd6\xd0\x07\x57\x60\x93\x2f\xf7\xa2\x89\xc2\xd6\xd0\xdb\xe9\xb7\xc3\x11\xdb\xb1\xff\x07\x00\x00\xff\xff\x9b\x7c\x41\xd0\x26\x0a\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x8c\x56\x51\x6f\xdb\x3e\x0e\x7f\xb6\x3e\x05\x67\xdc\x0a\xa7\xe7\x39\x95\x93\xae\x9d\x81\x3e\xac\x5b\x77\xd8\x43\x3b\x60\x33\x70\xdb\x8a\x62\x70\x6c\x26\xd1\xea\x48\x3e\x49\x6e\x1a\x04\xf9\xee\x07\x4a\x76\x9c\xae\xff\x0d\x2b\xd0\x56\xa4\x7e\xfc\x91\xa2\x48\xca\xe3\x31\xfc\x7b\xd6\x8a\xba\x82\x9f\x86\xb1\xa6\x28\xef\x8b\x05\xc2\x42\xcd\x18\x13\xab\x46\x69\x0b\x11\x0b\xc2\xd9\xc6\xa2\x09\x59\x10\x6a\x9c\xd7\x58\x5a\x5a\x5a\x34\x56\xc8\x45\xc8\x46\x8c\x8d\xc7\x90\x7f\x7a\xff\x29\x83\x1c\x8d\xbd\x92\x55\xae\xae\x64\x05\xea\x01\xb5\x16\x15\x42\x59\x48\x98\x21\x68\x5c\xa9\x07\xac\x40\xc9\x12\xc1\x2e\x11\x66\xed\x02\xd6\xc2\x2e\xe1\xba\xd0\x1a\xe6\x02\xeb\x0a\x84\x81\xb9\x78\xc4\x2a\x61\xf3\x56\x96\x4f\x08\x23\x0b\xc7\x9d\xd7\x24\x1f\xc1\x96\x05\x76\xd3\x20\xe4\x29\x18\xab\xdb\xd2\x92\x26\xc8\x49\x10\x72\xc1\x82\x5d\xbf\x3f\x39\xdc\xff\x0a\xf3\x5a\x15\xf6\xf5\x94\x05\xc1\x77\x38\x16\xd2\x1e\x20\xf9\x21\xf2\x6d\x0c\x97\x31\xbc\x03\x70\x98\xe0\x1a\xba\x9f\x55\xd1\xdc\x7a\x1f\x77\xc7\x03\xd7\x75\x7a\xb0\x2d\xa4\xbd\xcb\x27\xa4\xf5\xc0\x27\x46\x7d\x7c\xc1\xb5\x90\xb6\xb1\x7a\x30\x39\xee\x3c\x95\x6a\xd5\xf4\x54\xb4\xae\xf1\x91\xa7\xe7\x77\xc3\x92\x40\x94\xb2\x1e\x74\x9b\x76\xac\x77\xb7\xe9\x61\x50\x57\xab\xc6\x6e\xae\x8b\xe6\xd0\xbd\x90\x16\xc6\x63\xb0\x0a\xca\x25\x96\xf7\x60\x97\x85\x85\x35\xdd\x4e\x89\xe2\x01\xa1\x00\xa9\xe4\x2b\x29\x6a\x32\x4a\x58\x10\xdc\xf4\x07\x3f\xbe\x9d\xdc\x0d\xdc\x5f\xac\x36\x9d\x3a\x1d\xce\xf4\x51\xda\xd7\x53\xe3\xb4\xe4\xc9\x21\x3f\x7f\xec\x08\xba\x03\x78\xf3\x9e\x75\x6f\xfa\xad\xd7\xdc\xde\x51\xbd\xb9\xbb\xec\x3d\xe7\xa9\xbb\xa5\x46\x40\x76\x01\x93\x84\x4f\xf9\xe9\x1b\x16\x20\x49\x69\x72\xc6\xcf\x29\x25\x76\xad\xbc\x7c\xc2\x82\x15\x16\x92\xf2\x9e\x5d\xc0\x34\x65\xc1\x5c\xc8\x05\x6a\x43\xe2\x29\x0b\x0c\xa7\x45\xe8\x1d\xf3\x90\x05\x26\x3d\x50\xa4\x21\x0b\x1e\x0a\xed\x82\xe5\x30\xe4\x1c\x2e\x7a\x21\xe2\xc9\x49\x0c\x3c\x39\x19\x0d\xc8\xf4\xaf\x90\x85\xd6\x1c\x0e\xd2\x45\xf2\xed\xc9\x1d\x5c\x80\xe1\x9d\xc4\x9d\x94\xee\xf1\xe9\x2f\xf8\xb4\xc3\xa7\x9d\xc4\x7b\x6b\xc2\xbb\xdb\x79\xdb\x39\x19\xea\x60\xaf\xf6\xb6\x47\x8d\x38\xd4\x39\x86\x23\x7c\xca\x90\xfe\x33\x43\xe7\x9d\xd0\x83\xca\x13\xd8\xb5\x62\x81\x75\xa9\x3d\xca\xb9\x6b\xa0\xac\xbb\x3e\x7e\x16\xb3\x20\xb8\xdc\x8b\xe7\x24\xbe\xeb\xc5\x57\xa7\x24\x5e\x67\xbf\x6f\xaf\x6d\xd8\x88\x30\xa3\xb8\x63\x08\x91\x56\xb8\x73\x36\x69\xf6\x6b\xcf\x6d\xa7\x19\xe4\x93\xed\xd7\x0c\x08\xfc\x3d\x83\xa3\xae\x14\x76\x31\xf0\x93\x7e\x0f\xfd\x56\x57\x16\x3b\x4f\xe6\x9d\x66\xcf\x5b\xb5\x73\x1f\x52\xdd\x85\x5d\x04\x21\x95\x5d\xe8\x0d\x7d\x1b\x67\x4f\xda\x78\xdb\xb9\x1d\xbc\xc4\xd0\x2d\x0e\x63\xea\xbb\x3d\xfb\x53\xb7\x6f\x5d\x29\x66\xbe\xce\x62\xff\xcf\x4b\xdc\x31\xec\xa7\xef\x07\xf1\x08\x76\x29\x0c\x34\x5a\xcd\x6a\x5c\x65\x7e\x33\xc8\x37\x0d\x5e\x69\xad\x74\x06\x95\xb1\xc9\xbf\x0c\x5a\x9a\xb3\x52\x59\x28\x80\xc6\xac\x15\x4a\x76\x58\x4a\x67\x61\x81\xe6\x61\xb5\xc2\x15\x4d\x6c\x88\xc6\x0b\x61\x97\xed\x2c\x29\xd5\x6a\xbc\x50\xcd\x12\xf5\x4f\x33\x2c\xba\x47\x21\x59\xa8\x6c\x7a\x7e\x96\x4d\x46\x8e\x8a\x06\x54\xf6\xe7\x09\xb5\xa5\x8a\xcf\x86\xaa\x8d\x5d\xc1\x0f\x8a\xd4\x1d\xaf\x1f\x62\x94\xe0\x7b\x8c\x9e\x8e\xb2\x11\x21\x6e\xfa\xda\x81\xa3\x61\x44\x6d\x79\x72\x1a\x43\x4a\x7f\x26\xc9\xa9\x63\xa2\x91\x95\x75\xb8\x3e\x9e\xad\xe1\x31\x18\xef\xc9\x0f\xaf\xcc\xed\xfb\xe9\xb5\x3d\x3b\x8b\xe1\xfc\x4d\x0c\x3c\x9d\x4c\xe9\x37\xe5\x93\xa9\xc3\x7e\xfe\x38\x54\x37\xbc\x82\x74\x22\x9c\x87\x7d\x24\xe1\x8d\x5a\x53\x92\xe9\x9d\xb3\x62\x85\x21\x6d\x7f\xcb\x9e\xce\xb8\x28\x5c\x62\x5d\xab\x18\x4c\x21\x6a\xa5\x43\x77\x9a\x7c\x38\x4d\x9e\x6e\x43\x77\xa1\xc2\x40\x9e\xba\x72\xdb\xb1\x60\x46\x3d\x26\x71\x1d\xb9\x67\x39\xb9\x6c\xe7\x73\xd4\x23\x16\xa0\xd6\xb4\x73\x83\xeb\x2b\x59\xaa\x0a\x75\x34\x1b\x25\x7e\x19\x59\x3e\x62\x81\x98\x03\x61\x5e\x5c\x00\x8d\x77\x6a\x51\x9b\xb8\xba\x88\x42\x74\xb0\x2c\x8c\x09\x31\x72\x6e\x68\x1c\xfc\xb0\x1c\x72\xee\xa9\x1d\xf3\x7b\xdc\x33\xfb\x65\x74\xf4\xe3\xb7\xdc\x1f\x0a\x5b\xd4\x51\x58\xe1\x33\x6e\x31\x87\x17\x7d\xd9\xbc\x47\x6c\xae\xfe\xd7\x16\x75\x64\x79\x0c\x8e\xee\x30\xb6\x79\x1f\x1c\xe0\x63\x83\xa5\xc5\x0a\x5e\x3e\xc0\x42\x59\x78\xf9\x10\xc6\x70\x4c\x46\x3e\x84\x1d\xa3\x0a\xbe\x44\x28\x66\x46\xd5\xad\xc5\x7a\x03\xa6\xd5\xfe\x5b\xa3\x7b\xde\x2a\xaa\x46\x5f\xfc\xee\x91\x4b\x5c\x2c\x96\x27\xfb\xa7\xf2\xe2\x59\x76\xe6\x51\xd8\x3d\x87\x60\x50\xda\x70\x7f\x84\x1f\x7f\x6d\xd7\x7b\xf7\xb6\x3b\x36\x7c\xdc\x50\x6f\x7e\x2e\x4a\x7c\xfe\x71\x33\x1e\x83\x3b\xb8\x90\x8b\xf1\x42\xcd\xa0\x6c\xb5\x46\x69\xeb\x0d\xb4\x06\xe9\x00\x66\x23\xcb\x04\x72\xaa\x0f\xb2\xf4\x6a\xa7\xfc\x6f\x21\xec\x7f\xb4\x6a\x1b\x28\x64\xe5\x98\xca\x42\x52\xbb\x9b\xb6\x2c\x11\x2b\x58\x2f\x51\x76\x0c\x94\x8c\xd6\xd0\x07\x57\x60\x93\x2f\xf7\xa2\x89\xc2\xd6\xd0\xdb\xe9\xb7\xc3\x11\xdb\xb1\xff\x07\x00\x00\xff\xff\x9b\x7c\x41\xd0\x26\x0a\x00\x00"), }, "/src/encoding/json": &vfsgen۰DirInfo{ name: "json", - modTime: time.Date(2018, 4, 20, 11, 15, 14, 520460736, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 639781000, time.UTC), }, "/src/encoding/json/stream_test.go": &vfsgen۰FileInfo{ name: "stream_test.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 640782700, time.UTC), content: []byte("\x2f\x2f\x20\x2b\x62\x75\x69\x6c\x64\x20\x6a\x73\x0a\x0a\x70\x61\x63\x6b\x61\x67\x65\x20\x6a\x73\x6f\x6e\x0a\x0a\x69\x6d\x70\x6f\x72\x74\x20\x22\x74\x65\x73\x74\x69\x6e\x67\x22\x0a\x0a\x66\x75\x6e\x63\x20\x54\x65\x73\x74\x48\x54\x54\x50\x44\x65\x63\x6f\x64\x69\x6e\x67\x28\x74\x20\x2a\x74\x65\x73\x74\x69\x6e\x67\x2e\x54\x29\x20\x7b\x0a\x09\x74\x2e\x53\x6b\x69\x70\x28\x22\x6e\x65\x74\x77\x6f\x72\x6b\x20\x61\x63\x63\x65\x73\x73\x20\x69\x73\x20\x6e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x20\x62\x79\x20\x47\x6f\x70\x68\x65\x72\x4a\x53\x22\x29\x0a\x7d\x0a"), }, "/src/fmt": &vfsgen۰DirInfo{ name: "fmt", - modTime: time.Date(2018, 4, 20, 9, 26, 36, 223979708, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 672795700, time.UTC), }, "/src/fmt/fmt_test.go": &vfsgen۰FileInfo{ name: "fmt_test.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 673784100, time.UTC), content: []byte("\x2f\x2f\x20\x2b\x62\x75\x69\x6c\x64\x20\x6a\x73\x0a\x0a\x70\x61\x63\x6b\x61\x67\x65\x20\x66\x6d\x74\x5f\x74\x65\x73\x74\x0a\x0a\x63\x6f\x6e\x73\x74\x20\x69\x6e\x74\x43\x6f\x75\x6e\x74\x20\x3d\x20\x31\x30\x30\x0a"), }, "/src/go": &vfsgen۰DirInfo{ name: "go", - modTime: time.Date(2018, 8, 20, 0, 59, 45, 382177476, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 701782900, time.UTC), }, "/src/go/token": &vfsgen۰DirInfo{ name: "token", - modTime: time.Date(2018, 4, 20, 9, 43, 49, 174565883, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 713784100, time.UTC), }, "/src/go/token/token_test.go": &vfsgen۰FileInfo{ name: "token_test.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 714801800, time.UTC), content: []byte("\x2f\x2f\x20\x2b\x62\x75\x69\x6c\x64\x20\x6a\x73\x0a\x0a\x70\x61\x63\x6b\x61\x67\x65\x20\x74\x6f\x6b\x65\x6e\x0a\x0a\x69\x6d\x70\x6f\x72\x74\x20\x28\x0a\x09\x22\x74\x65\x73\x74\x69\x6e\x67\x22\x0a\x29\x0a\x0a\x66\x75\x6e\x63\x20\x54\x65\x73\x74\x46\x69\x6c\x65\x53\x65\x74\x52\x61\x63\x65\x28\x74\x20\x2a\x74\x65\x73\x74\x69\x6e\x67\x2e\x54\x29\x20\x7b\x0a\x09\x74\x2e\x53\x6b\x69\x70\x28\x29\x0a\x7d\x0a"), }, + "/src/hash": &vfsgen۰DirInfo{ + name: "hash", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 430152100, time.UTC), + }, + "/src/hash/maphash": &vfsgen۰DirInfo{ + name: "maphash", + modTime: time.Date(2021, 3, 28, 19, 1, 23, 630000000, time.UTC), + }, + "/src/hash/maphash/maphash.go": &vfsgen۰CompressedFileInfo{ + name: "maphash.go", + modTime: time.Date(2021, 3, 28, 19, 1, 23, 630000000, time.UTC), + uncompressedSize: 2146, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xa4\x55\x51\x6f\xe3\x36\x0c\x7e\x8e\x7f\x05\x5f\x8a\xd9\x5b\x1a\x27\x72\xae\xd7\x76\x4d\x5e\x06\xec\x86\x01\x3b\x0c\xb8\xed\xa9\x48\x07\xc9\xa2\x63\xad\xb2\x24\x48\xf2\xe5\x82\x5e\xff\xfb\x40\xd9\x4e\x8a\x5e\xef\x69\x4f\xb6\x3f\x8a\xe4\xc7\x8f\x22\x5d\x96\x3f\x89\x5e\x69\x09\xff\x86\x2c\x73\xbc\x7e\xe4\x7b\x84\x8e\xbb\x96\x87\x36\xcb\xca\x12\xfa\x80\x12\x94\x01\x02\x9e\x2a\x36\xbf\x5a\x3f\x2f\xf6\x16\xa2\x85\x80\x28\x21\xb6\x98\x4c\xd0\xf4\xa6\x8e\xca\x9a\xec\x33\xf7\x09\x79\xc4\x23\xdc\xaf\x77\xbd\x32\xb1\x62\x59\x46\x76\x50\x46\xc5\xbc\x80\xa7\x6c\xd6\x58\x0f\x0a\x6e\x37\xe0\xb9\xd9\xe3\xc9\xe1\x29\x9b\xcd\xc6\xf7\x7b\xb5\x83\x0d\xf8\xde\x44\xd5\xe1\x3f\x0d\x0f\xd1\x73\x23\xf3\x22\x9b\x3d\x67\xa7\x33\xcb\x1d\x7c\xdd\xc0\x0a\xca\x12\x3a\xfe\x88\x10\x7a\x8f\xc4\x29\x20\x98\xbe\x13\xe8\x03\x70\x8f\x60\xa5\x3c\xfb\xac\x06\x9f\x33\xc0\x5e\x03\xd5\x08\x3c\x8f\xb4\x7d\x24\x4b\x2e\xe0\x7e\x27\x8e\x11\xe7\x43\xe9\x54\xd9\xd5\xba\x18\x9f\x44\x5d\x35\xa0\xd1\xe4\xa2\x80\xcd\x06\x96\xa9\x18\x8f\xb1\xf7\x26\x39\x24\xe2\x65\x09\x7f\xb5\x38\x95\x95\xea\x46\x0f\xd6\xe8\x23\x1c\xac\x7f\x0c\x60\x4d\x0a\xe8\xa2\x5f\xc0\x27\x65\x6a\x84\x0f\xd6\xb5\xe8\x7f\xff\x04\xaa\x73\x1a\x3b\x34\x31\x00\x4f\x91\x2a\x76\x29\x54\x04\x34\x9f\x95\xb7\x86\x2c\x73\x38\x20\xb5\x0c\xe2\xc1\x82\xe3\x9e\x6b\x8d\x7a\xcc\x92\x62\x53\xbf\xb4\x3d\xa0\x07\x6e\x24\xf4\xce\xa1\x87\x8a\xa5\x68\x42\xc5\xb0\xc8\x66\xda\x52\x5b\x3a\xec\x86\x9a\xe7\x30\x74\x30\xa7\x12\x8a\xd3\xd7\x50\x67\x51\x64\xb3\x56\x7d\xff\xfc\x76\x5b\xb1\xb7\x7c\x46\x55\x06\xe5\xf2\x56\x15\x77\x77\x15\x83\xaf\x13\xa0\x6d\x41\xda\x8f\x5a\x9d\xca\xe6\x74\xbf\x40\xa0\xb6\x07\x50\x01\xb8\xe4\x2e\xa2\x84\xc6\xdb\x2e\xd5\xd5\xbb\x10\x3d\xf2\x6e\x52\xb7\x24\x46\x15\x5b\xec\x2d\x85\xa2\x7a\xf9\x67\xab\x64\x48\x02\xd9\x06\x7a\x13\x78\x83\x73\x38\xb4\xaa\x6e\xcf\x32\x4b\x8b\xc1\xfc\x10\x21\xf4\xce\x59\x1f\xe1\x80\x5a\x27\x6f\x8d\x5c\x06\x88\x29\xda\xc1\xfa\x80\xe0\xd0\x37\xd6\x77\xdc\xd4\xb8\xc8\xca\x92\x0c\x1f\x6d\xa4\x1b\xc8\x23\xc4\x56\x85\x24\xbd\x32\xfb\xd3\x78\x10\x71\x63\x23\xf0\x3a\xf6\x5c\xeb\xe3\x30\x5f\xe2\x78\x4e\xdf\x71\x17\xe6\x10\xa8\xf5\x29\xd1\xd0\xcf\xd1\x00\xca\x84\x88\x5c\xce\x41\xf4\x11\x54\x84\x8e\x1f\x41\x20\x84\xa8\x88\xa4\x73\x5a\xd5\x5c\x68\x04\x9a\x2f\xf2\x3b\xa8\xd8\x42\xdd\x87\x68\xbb\x2c\x0d\x89\x83\x78\x74\x18\x26\xba\xbf\x8d\xfc\xb8\xde\x5b\xaf\x62\xdb\x51\x06\xa7\xfc\x40\xea\x70\x24\xfe\xb7\x74\xb0\x8d\xd1\x85\xdb\xb2\xdc\xab\xd8\xf6\x62\x51\xdb\xae\x3c\x70\xb3\x3f\xaa\xcb\xa6\x97\xdc\x94\xc3\xd1\x52\x68\x2b\xca\x1a\xc5\x72\x75\x23\xde\x55\x4b\x64\xf5\xaa\x5e\xad\xe5\xfb\xa5\x78\x7f\x23\x1a\xce\x44\xbd\xbe\x91\xf8\x5e\xde\xbc\x13\xf5\xaa\xfc\xc3\x4a\xf4\xe6\x82\x2d\x3f\x5a\x73\xf9\x8b\x3f\xba\x68\xf7\x9e\xbb\x56\xd5\x17\x6c\x49\xd4\x2e\xd8\xf2\xd7\x51\xb9\x0b\xb6\xe4\x46\x5e\xb0\xe5\x9f\x01\x7b\x69\x69\x19\xd8\x8e\x5c\xd3\x9c\x5f\xb0\xe5\x07\x34\xe8\x79\xb4\x7e\xe1\x64\x33\x0c\xee\x74\x2b\xdd\xb7\x93\x5b\xb1\x39\x84\xf1\xad\x98\x46\x8e\x46\x96\xcf\x41\xa4\x1b\xad\xbe\x54\x2c\x7f\xf3\xf2\x87\x87\xf3\xfe\xa1\xeb\xac\x1a\x08\xdf\x8c\xfc\x18\x32\xe7\xf0\x00\x62\xd8\x5a\xd4\x94\x9f\x21\xc0\x16\xae\xe9\x71\xb9\x81\xeb\xe4\xc1\xe1\x61\x03\x1e\xb9\xfc\xdb\x70\xad\xf6\x06\x65\xc5\x72\x57\x64\xb3\x99\x78\xcb\xc2\xa5\xcc\xdd\x1c\xd6\x94\x7a\xa0\x3b\xb1\xa5\x0f\x02\x1d\x6c\x60\x3c\x75\x3d\xa4\x4e\x14\xb7\x1b\x58\xff\x8f\x84\xe1\x32\xa5\x7c\x06\xd4\x01\x53\x9c\x48\x42\x8d\xa2\x38\x12\x23\x61\x5f\x4f\xd8\xe4\xb8\xdd\xae\x0a\x32\xc3\xdd\x1d\x5c\x7f\xe7\xcc\xe5\xf9\xc8\xea\x6a\x62\x12\x13\xf9\xb7\x6a\x7c\x0b\x7b\x5b\xf9\x69\x8b\xa7\x44\xa7\x8b\xf0\xe5\xd4\xfb\x01\xa1\x7a\x46\x7f\x77\xff\xe5\x76\x37\x2e\x20\x1a\xe7\x5b\x5a\x43\x01\xc1\xdb\x3e\x2a\x83\x61\x1a\xfb\xb4\x74\x48\x2b\xfa\x3f\x6a\x15\xa3\x46\x40\x23\x15\x37\x8b\xf1\xbf\xf1\x5a\xe1\x31\x57\x31\xe6\x7e\x91\xf3\xa5\x88\xe3\x22\x4c\x9f\xab\x5d\x71\x77\x77\xfd\x12\x61\x84\xac\xae\x5e\x42\x15\x41\x6c\x7d\xaa\xf4\x2c\xca\xa9\xc8\x7c\xba\xf3\x13\xf0\x94\xcd\xea\xa9\x7b\x57\xeb\x9c\x3f\x8c\xd1\xce\x7f\xc9\xa2\x80\x1f\x27\xb3\x78\x6d\x66\xbb\x57\x7b\xbc\x62\x79\x7d\x9e\x90\x1a\xb6\x5b\xa8\x18\x89\xff\x5f\x00\x00\x00\xff\xff\x01\x23\xc3\x49\x62\x08\x00\x00"), + }, "/src/internal": &vfsgen۰DirInfo{ name: "internal", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 433051526, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 15, 16, 772153000, time.UTC), }, "/src/internal/bytealg": &vfsgen۰DirInfo{ name: "bytealg", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 432112113, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 749782400, time.UTC), }, "/src/internal/bytealg/bytealg.go": &vfsgen۰CompressedFileInfo{ name: "bytealg.go", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 432157623, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 750784800, time.UTC), uncompressedSize: 181, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\xcb\xb1\x0a\xc2\x30\x10\xc6\xf1\x39\xf7\x14\x9f\x5b\x8b\x85\xee\x42\x47\x9f\xa2\x74\xb8\x8b\x97\x12\x3d\x52\x4d\x9b\x41\xa4\xef\x2e\x29\xb8\xb8\x1d\xff\xfb\x7e\x7d\x8f\xb3\x94\x68\x37\xdc\x57\xa2\x27\xfb\x07\xcf\x0a\x79\x6f\xca\x36\x13\x85\x92\x3c\xae\xaf\xc2\xd6\x70\x07\xc1\x38\xd5\x57\x0b\x59\x16\xc3\x87\x5c\x0c\x30\x4d\x0d\xb7\x38\x0d\xc7\x25\x6d\xcd\x2e\xeb\x56\x72\x42\x60\x5b\x95\xdc\x4e\x2e\x2c\x19\xb1\x83\xc7\x65\x40\xe6\x34\x2b\xf8\x18\xc6\x00\x5f\xad\x8c\x71\x3a\xc2\x1f\xad\x76\xa7\x5f\xdc\x72\x51\xda\xe9\x1b\x00\x00\xff\xff\x11\x57\xe4\x4d\xb5\x00\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x5c\xcb\xb1\x0a\xc2\x30\x10\xc6\xf1\x39\xf7\x14\x9f\x5b\x8b\x85\xee\x42\x47\x9f\xa2\x74\xb8\x8b\x97\x12\x3d\x52\x4d\x9b\x41\xa4\xef\x2e\x29\xb8\xb8\x1d\xff\xfb\x7e\x7d\x8f\xb3\x94\x68\x37\xdc\x57\xa2\x27\xfb\x07\xcf\x0a\x79\x6f\xca\x36\x13\x85\x92\x3c\xae\xaf\xc2\xd6\x70\x07\xc1\x38\xd5\x57\x0b\x59\x16\xc3\x87\x5c\x0c\x30\x4d\x0d\xb7\x38\x0d\xc7\x25\x6d\xcd\x2e\xeb\x56\x72\x42\x60\x5b\x95\xdc\x4e\x2e\x2c\x19\xb1\x83\xc7\x65\x40\xe6\x34\x2b\xf8\x18\xc6\x00\x5f\xad\x8c\x71\x3a\xc2\x1f\xad\x76\xa7\x5f\xdc\x72\x51\xda\xe9\x1b\x00\x00\xff\xff\x11\x57\xe4\x4d\xb5\x00\x00\x00"), }, "/src/internal/cpu": &vfsgen۰DirInfo{ name: "cpu", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 432311944, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 15, 16, 472155800, time.UTC), }, "/src/internal/cpu/cpu.go": &vfsgen۰FileInfo{ name: "cpu.go", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 432356960, time.UTC), - content: []byte("\x2f\x2f\x20\x2b\x62\x75\x69\x6c\x64\x20\x6a\x73\x0a\x0a\x70\x61\x63\x6b\x61\x67\x65\x20\x63\x70\x75\x0a\x0a\x63\x6f\x6e\x73\x74\x20\x28\x0a\x09\x43\x61\x63\x68\x65\x4c\x69\x6e\x65\x53\x69\x7a\x65\x20\x20\x20\x20\x3d\x20\x30\x0a\x09\x43\x61\x63\x68\x65\x4c\x69\x6e\x65\x50\x61\x64\x53\x69\x7a\x65\x20\x3d\x20\x30\x0a\x29\x0a"), + modTime: time.Date(2021, 3, 28, 16, 15, 16, 472155800, time.UTC), + content: []byte("\x2f\x2f\x20\x2b\x62\x75\x69\x6c\x64\x20\x6a\x73\x0a\x0a\x70\x61\x63\x6b\x61\x67\x65\x20\x63\x70\x75\x0a\x0a\x63\x6f\x6e\x73\x74\x20\x28\x0a\x09\x43\x61\x63\x68\x65\x4c\x69\x6e\x65\x53\x69\x7a\x65\x20\x20\x20\x20\x3d\x20\x30\x0a\x09\x43\x61\x63\x68\x65\x4c\x69\x6e\x65\x50\x61\x64\x53\x69\x7a\x65\x20\x3d\x20\x30\x0a\x29\x0a\x0a\x66\x75\x6e\x63\x20\x64\x6f\x69\x6e\x69\x74\x28\x29\x20\x7b\x7d\x0a"), }, "/src/internal/fmtsort": &vfsgen۰DirInfo{ name: "fmtsort", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 432624173, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 15, 16, 501153700, time.UTC), }, "/src/internal/fmtsort/fmtsort_test.go": &vfsgen۰CompressedFileInfo{ name: "fmtsort_test.go", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 432693305, time.UTC), - uncompressedSize: 1103, + modTime: time.Date(2021, 3, 28, 16, 15, 16, 502156300, time.UTC), + uncompressedSize: 1126, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x53\x41\x8f\xd3\x3c\x10\x3d\xc7\xbf\x62\xbe\x48\xdd\x2f\x81\x90\xb6\x80\x38\x74\x29\x97\x15\x20\x40\x2a\x48\xbb\xf7\x95\xd7\x99\x34\x6e\x52\x3b\xb2\xa7\x29\x15\xdb\xff\x8e\xc6\x75\xb7\x5d\x15\xc1\xa5\xb5\x3d\x6f\x66\xde\x7b\x33\x19\x8f\xe1\xe5\xc3\x46\x77\x15\xac\xbc\x10\xbd\x54\xad\x5c\x22\xd4\x6b\xf2\xd6\xd1\x3d\xa1\x27\x21\xf4\xba\xb7\x8e\x20\x13\x49\xba\x96\xd4\xa4\x22\x49\x1d\xd6\x1d\x2a\xe2\x23\x63\xb4\x59\xa6\x42\x24\xa9\x36\x84\xce\xc8\x6e\x1c\x0b\xa4\x22\x17\x62\x3c\x06\x83\x58\xf9\xdb\x56\xf7\xe0\x90\x6b\x79\xd8\x36\x48\x0d\x3a\xa0\x06\xa1\xd5\xa6\x82\xca\xa2\x37\xff\x13\x6c\xad\x6b\xa1\xb6\x0e\x38\x5f\x9b\x25\x58\x03\x9f\x6d\xdf\xa0\xfb\x7a\x5b\x8a\x7a\x63\xd4\xa9\x5a\xd6\x42\x24\x52\x7e\xd3\xa6\xca\xe1\xc1\xda\x0e\x7e\x89\xc4\x6f\x35\xa9\x06\x5a\x3e\x2b\xe9\xf1\x09\xf6\x83\x5c\xf1\x74\xb9\x69\xa4\x99\x89\x24\x71\x48\x1b\x67\x80\xdc\x06\x45\xb2\x17\xc7\x7b\x2d\x3b\x8f\x62\x1f\x04\x2c\x2c\xe1\x0c\xfc\xce\x28\xd8\x6a\x6a\x02\x6d\xeb\xf4\x52\x1b\xd9\xc1\x1d\x7a\xba\xb1\xeb\x5e\x3a\x8c\x0c\xcf\x5e\x32\x82\x17\xd1\xa2\xf2\x2e\x67\x42\x2c\xee\xbe\x00\x7e\x84\xd9\x1c\x9c\x34\x4b\x04\x75\x40\x73\xa2\x67\x50\x40\xe9\x02\x86\xc9\x09\x13\x32\x38\x16\x82\xab\x02\x86\xe9\x9f\x82\x89\xae\xcf\x2c\x1a\x26\xc1\x9b\x2c\xcf\x63\x34\x51\xd6\x90\x36\xac\x35\x49\x58\xee\x45\xc6\xf4\x1f\x19\xe1\x4f\x71\xeb\x38\xe6\xf2\xa8\x75\x98\x30\xa9\x3c\x00\x06\xe9\x00\x7f\xf6\xa8\x08\xb4\xa1\xf0\x14\xc7\x72\xa8\x1a\xe6\xa2\x61\x3e\x87\xd5\xec\xd0\x26\xa2\xe7\x30\x39\xdc\xd9\x77\xb9\xf0\x20\x1d\x02\x39\xad\xda\x5d\x79\x08\xe8\x1a\x68\xd7\x33\x81\x61\x52\xde\xed\x7a\xcc\xf2\x6b\xc8\x68\xd7\x47\xe2\x5c\xf4\x38\xe4\x4f\x9d\x95\xf4\xe6\x35\x3c\x3e\xc2\x5f\x00\xef\xde\xe6\x70\x75\x05\xbc\xde\xe5\x17\xbf\x90\x0b\xf6\x2d\x44\xce\x6c\x38\x11\x7c\x35\x3d\xbc\xec\xcf\x95\xbc\xbf\x14\x12\x71\x11\xf0\xe1\x12\x30\x7d\x3e\x04\x05\xff\xcd\x8f\xa6\xc5\xa6\x54\x7e\x74\xce\xba\x3a\x4b\x47\x7e\x76\x5c\x93\x6c\x34\x14\xa3\x21\x9f\x8f\xaa\xeb\x23\x7c\x54\xa5\xc5\xc9\x0e\x3e\xf2\x28\x0a\x50\x45\x44\xe4\xa7\x56\xfc\xb3\xe7\x55\xdf\x8b\xd3\xbe\x7e\x77\x15\xba\xcb\x6d\xa5\x32\x2c\x45\xda\x1a\xbb\x35\xa0\xbd\xdf\xe0\x0c\x8c\xee\xa0\xc5\xdd\xb3\x8f\x36\xcd\xc5\x5e\xfc\x0e\x00\x00\xff\xff\xd0\xa4\x01\x39\x4f\x04\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x84\x53\x4f\x6f\xd3\x4e\x10\x3d\x7b\x3f\xc5\xfc\x2c\xa5\x3f\x1b\x8c\x93\x00\xe2\x90\x12\x2e\x15\x20\x40\x0a\x95\x5a\xce\xd5\x76\x3d\x8e\xb7\x76\x76\xad\xdd\x89\x43\x44\xfd\xdd\xd1\xae\xd7\x75\xaa\x20\xb8\x24\x3b\x33\x6f\xfe\xbc\x37\xe3\xf9\x1c\x5e\xde\xef\x65\x53\xc0\x83\x65\xac\xe5\xa2\xe6\x5b\x84\x72\x47\x56\x1b\xba\x23\xb4\xc4\x98\xdc\xb5\xda\x10\x24\x2c\x8a\x77\x9c\xaa\x98\x45\xb1\xc1\xb2\x41\x41\xee\xe9\x30\x52\x6d\x63\xc6\xa2\x58\x2a\x42\xa3\x78\x33\x0f\x05\x62\x96\x32\x36\x9f\x83\x42\x2c\xec\x4d\x2d\x5b\x30\xe8\x6a\x59\x38\x54\x48\x15\x1a\xa0\x0a\xa1\x96\xaa\x80\x42\xa3\x55\xff\x13\x1c\xb4\xa9\xa1\xd4\x06\x5c\xbe\x54\x5b\xd0\x0a\x3e\xeb\xb6\x42\xf3\xf5\x26\x67\xe5\x5e\x89\xa9\x5a\x52\x43\x18\x24\xff\x26\x55\x91\xc2\xbd\xd6\x0d\xfc\x62\x91\x3d\x48\x12\x15\xd4\xee\x2d\xb8\xc5\x27\xd8\x35\x99\xec\xc9\xb8\xaa\xb8\x9a\xac\x1f\xca\xf2\x12\xaf\xb5\xe7\xb0\x62\x51\x64\x90\xf6\x46\x01\x99\x3d\xb2\xa8\x67\xa3\x5d\xf2\xc6\x22\xeb\x3d\xaf\x8d\x26\x5c\x81\x3d\x2a\x01\x07\x49\x95\x67\xa3\x8d\xdc\x4a\xc5\x1b\xb8\x45\x4b\x57\x7a\xd7\x72\x83\x61\xf0\x13\x4f\x42\xf0\x22\x28\x97\xdf\xa6\x6e\x4e\xc7\xf9\x2e\x03\xe7\x84\xd5\x1a\x0c\x57\x5b\x04\x31\xa0\x5d\xa2\x75\x20\x8f\x92\x19\x74\x8b\x09\xe3\x33\x5c\xcc\x07\x1f\x32\xe8\x96\x7f\x0a\x46\xb2\x3c\x51\xae\x5b\x78\xc9\x92\x34\x0d\xd1\x48\x68\x45\x52\x39\xae\x51\xe4\xe8\x9e\x65\x2c\xff\x91\xe1\xff\x84\x6b\x1d\xb6\x9f\x8f\x5c\xbb\x85\x1b\x2a\xf5\x80\x8e\x1b\xc0\x9f\x2d\x0a\x02\xa9\xc8\xbb\xc2\xb6\x86\xaa\x7e\x5d\x12\xd6\x6b\x78\x58\x0d\x6d\x02\x7a\x0d\x8b\xc1\x76\xba\xf3\x8d\x05\x6e\x10\xc8\x48\x51\x1f\xf3\x21\x20\x4b\xa0\x63\xeb\x06\xe8\x16\xf9\xed\xb1\xc5\x24\xbd\x84\x84\x8e\x6d\x18\xdc\x15\x1d\xb7\xfd\xa9\xd1\x9c\xde\xbc\x86\xc7\x47\xf8\x0b\xe0\xdd\xdb\x14\x2e\x2e\xc0\x5d\x7d\xfe\xc5\x6e\xf8\xc6\xe9\xe6\x23\x27\x32\x4c\x03\xbe\x5a\x0e\x9e\xfe\x94\xc9\xfb\x73\x22\x01\x17\x00\x1f\xce\x01\xcb\xe7\x4b\x10\xf0\xdf\x7a\x14\x2d\x34\xa5\xfc\xa3\x31\xda\x94\x49\x3c\xb3\xab\xf1\x4c\x92\x59\x97\xcd\xba\x74\x3d\x2b\x2e\x47\xf8\xac\x88\xb3\x49\x0e\xf7\x74\xab\xc8\x40\x64\x01\x91\x4e\xad\xdc\x4f\xef\x4e\xbd\x67\xd3\xbd\x7e\x37\x05\x9a\xf3\x6b\xa5\xdc\x1f\x45\x5c\x2b\x7d\x50\x20\xad\xdd\xe3\x0a\x94\x6c\xa0\xc6\xe3\xb3\x6f\x39\x4e\x59\xcf\x7e\x07\x00\x00\xff\xff\x0d\x79\xcb\x5c\x66\x04\x00\x00"), }, "/src/internal/poll": &vfsgen۰DirInfo{ name: "poll", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 432861736, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 15, 16, 534152300, time.UTC), }, "/src/internal/poll/fd_poll.go": &vfsgen۰CompressedFileInfo{ name: "fd_poll.go", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 432947943, time.UTC), - uncompressedSize: 1931, + modTime: time.Date(2021, 3, 28, 16, 15, 16, 535153700, time.UTC), + uncompressedSize: 1940, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xb4\x54\x4f\x4f\x3b\x37\x10\x3d\xaf\x3f\xc5\x88\x0b\xbb\x21\xd9\xa5\xed\x0d\x91\x43\x15\xfe\x14\xa9\x6a\x2a\x40\xe2\x10\xa5\xc8\xb1\x27\xc9\x80\xd7\x76\x6d\x2f\x69\x14\xf1\xdd\x2b\xef\x6e\x48\x02\x01\xd2\x4a\xbf\x53\x22\xcf\xcc\x9b\xf7\xde\xce\x4c\x51\xc0\xc9\xa4\x22\x25\xe1\xc9\x33\x66\xb9\x78\xe6\x33\x04\x6b\x94\x62\x8c\x4a\x6b\x5c\x80\xa3\x40\x25\x1e\x31\x56\x14\xf5\xfb\x05\x7a\x01\xe4\x81\x83\x36\x3d\x63\x81\x4a\xab\xb0\x44\x1d\x78\x20\xa3\xc1\x4c\x81\x6b\xb8\x29\x86\x75\x32\x3a\x98\x1a\x07\xd7\xc3\x5f\x6f\x07\xbf\xf5\x9f\x7c\xce\x8a\x22\x02\xdd\x04\xff\xbe\x90\x3c\x4c\xb8\x47\x09\x46\xc3\x1f\x7c\xf0\x3b\x90\x86\x99\x00\x61\x4a\x4b\x11\x27\xf5\x88\x70\x3d\xbc\x1d\x0e\xef\x0b\xef\x44\x41\x3a\xa0\xd3\x5c\x15\xb1\x4f\x31\x95\x8f\xf1\xf7\x51\x73\xa1\xf2\x99\xc9\xba\xb1\xcb\xa4\x0a\x40\x01\xa4\x41\x0f\xf8\x82\x1a\x14\x7a\x9f\xb3\xb0\xb4\xb8\x91\xe2\x83\xab\x44\x80\x15\x4b\x84\x32\x9e\xf4\x0c\x26\xc6\x28\xf6\xca\xd8\xb4\xd2\x02\x52\x2b\xa1\xb3\x4e\xce\x80\x34\x85\x74\x2a\xa1\x73\x75\x91\x01\x3a\x67\x1c\xac\xc0\x61\xa8\x9c\x06\x4d\x0a\x3e\x29\x8b\xd0\x98\x66\xb0\xfa\x24\x8e\x2f\x24\x42\x8c\x83\x95\xf9\x9a\x47\x1f\x82\xab\xf0\x33\x48\xeb\xd0\x72\x87\x69\x69\x24\x02\xe9\xd0\x05\xf2\x57\xa4\xb0\xa6\xff\xc6\x8d\x25\x34\xdd\xc6\x5c\xb1\x24\x69\xe9\xa2\x73\x83\xe6\x35\x6d\x2a\x33\x96\xbc\xb2\x64\x23\x86\x7d\xdd\xf9\x16\xb9\x4c\xf7\xf5\x5c\xfb\x61\x65\xbe\x26\x79\xec\x8e\xd7\xfc\xb2\x6f\x04\x3d\x38\x0a\x78\x30\xee\xe2\x7b\xdc\x05\xa7\xf0\xa3\x5c\xba\x74\xee\x02\xb9\x54\xa4\xf1\xf2\x1f\x81\x28\x51\xb2\x2f\x68\x1c\x62\x59\x4d\xf7\x10\xbf\x62\xe2\x41\x66\x35\x88\x7b\x9d\x7a\x07\x37\xe0\x5a\xa0\x42\xf9\x66\xd7\xf6\xc4\x6e\x7f\x2a\xa3\x14\x9f\xa8\x38\xd1\xb1\xe9\xa6\xdb\xee\xc0\xd6\x4b\x72\x87\x61\x6d\x51\x1a\x20\xde\x92\xfc\x9e\x4a\xfc\x7a\x7b\xd6\x95\xd1\xb0\xff\x5f\x5d\xbb\xf3\x5f\xca\x8b\x02\xfe\x6c\x45\x3a\xb2\xc1\xb8\x36\xee\x21\xcc\x11\xe4\xe6\x79\x82\x71\x4c\xaa\x78\xae\x26\xcb\x3a\xd8\x5c\xbb\xfa\xec\x18\x07\x7f\x55\xa4\x83\x0d\x2e\x3d\xcd\x80\xa6\x31\xc1\x21\x90\xd7\xc7\x01\x8c\xc6\x1c\xee\xe7\xe4\xe3\xc5\x33\x5a\x2d\x1b\x98\x78\x26\x03\xfa\x40\x7a\x96\x37\x32\x76\x99\xa4\x19\xb4\x98\x71\x3a\x5b\xda\x5b\x6d\x58\x43\x7f\x60\xec\x32\xde\x60\xbf\xd4\x22\x77\x95\x8e\x92\x1f\xef\xb0\xe4\xe2\xef\x8a\x1c\xb6\xd0\x1f\x03\xa9\x87\x4e\x04\xfb\xe5\xe7\xac\x5d\x87\x8e\x87\x7e\x1f\x4e\xeb\x5d\x10\x73\x38\xeb\x43\xc9\x9f\x31\x15\x73\xae\x9b\x49\x63\x49\xe2\xb1\x7c\xe0\x14\xd0\xf9\x91\x1f\x43\x1f\xb8\xb5\xa8\x65\xba\xf3\xdc\x05\x31\x8f\xb9\xe7\x3d\x31\xaf\x57\xa7\xe3\x7b\xbd\x6f\xd8\x3a\x54\xc8\xfd\x1e\xb6\x6d\xe0\x1d\xdb\x8e\x3f\x39\x61\x2c\x59\x44\x92\x3b\xbd\x6b\x21\x0a\x75\xba\xc8\x36\x62\x1a\xef\x22\x15\xd6\x0a\x5b\x8c\x4e\xc7\xb1\x3c\xfe\xfb\xe9\x6c\xcc\x3e\xe8\x5a\xec\x05\x92\xa8\x30\xe0\x96\xda\x2e\xf8\xec\x0d\xf7\xbc\x57\x6f\x43\x54\xfa\xc2\xdd\x16\x2f\x68\x9d\x2c\xb9\x1d\xb5\x2a\xc6\xa3\xf1\x96\xaf\xff\x06\x00\x00\xff\xff\x6d\x01\x08\x27\x94\x07\x00\x00"), + }, + "/src/internal/reflectlite": &vfsgen۰DirInfo{ + name: "reflectlite", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 711153200, time.UTC), + }, + "/src/internal/reflectlite/all_test.go": &vfsgen۰CompressedFileInfo{ + name: "all_test.go", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 562154100, time.UTC), + uncompressedSize: 333, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x74\x8e\x41\x4b\xc4\x30\x10\x85\xcf\x99\x5f\x31\xe4\x94\x68\x49\x17\xbc\x09\x3d\xac\x07\x8f\x0a\x5a\xbc\x4a\x6c\xa7\x65\xdc\x6c\x1a\x92\xe9\xa1\x48\xff\xbb\x64\xf5\xb0\x20\x1e\x87\xf9\xde\xfb\x5e\xdb\xe2\xed\xc7\xca\x61\xc4\xcf\x02\x90\xfc\x70\xf2\x33\x61\xa6\x29\xd0\x20\x81\x85\xde\x85\x8a\x00\xf0\x39\x2d\x59\xd0\x80\x72\xa8\x39\x0a\xe5\xe8\x43\x7b\xc5\x69\x50\xba\xa2\x1c\x67\x0d\x16\x60\x5a\xe3\x80\x3d\x15\xe9\xb7\x44\xc5\x08\xde\xfc\x7e\x5d\x6f\xf1\x0b\xd4\xb4\x64\xe4\x06\x45\xf0\xbe\xc3\xec\xe3\x4c\x28\x5b\xa2\x9a\x28\xf5\xaf\x78\x42\xc6\xae\xc3\xbb\xc3\xe5\x54\xc3\x12\x85\xe3\x4a\xa0\xd4\x0e\x4a\xd5\xb6\x97\x1f\x7d\x35\x18\x69\x6a\xdd\x23\x53\x18\xcd\x9b\x0f\x2b\x3d\x4f\x46\xc4\xb1\x6d\xf0\x60\xdd\x05\xb1\x55\xe7\x8a\x05\xb5\xc3\x7e\xb5\xf0\xc9\x9f\xe9\x61\x13\x2a\xc7\x4c\xc7\xc0\x73\xa4\xf1\xef\x5e\x71\xaf\x27\x4e\x46\xff\x13\xd0\x16\x76\xf8\x0e\x00\x00\xff\xff\xb5\xc9\x35\x87\x4d\x01\x00\x00"), + }, + "/src/internal/reflectlite/export_test.go": &vfsgen۰CompressedFileInfo{ + name: "export_test.go", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 586155300, time.UTC), + uncompressedSize: 724, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x7c\x91\x31\x6f\x14\x31\x14\x84\xeb\xf5\xaf\x18\xb6\x48\xec\x70\xf8\xa8\x23\x8e\x0e\x24\x94\x06\x89\x88\x06\x51\x6c\x76\xed\xe4\x91\xc5\xb6\xec\xe7\x13\xab\xcb\xfd\x77\x64\x7b\xef\x40\x8a\x92\xd2\xe3\xe7\x6f\x66\xfc\xb6\x5b\xbc\xbd\xcb\x34\x4f\xf8\x95\x84\x08\xc3\xf8\x38\xdc\x1b\x44\x63\x67\x33\xf2\x4c\x6c\x84\xa0\xdf\xc1\x47\x86\x14\x5d\x9f\x5d\x1a\xac\xe9\x85\x12\x62\xbb\xc5\x67\x32\xf3\x84\x68\x38\x47\x97\xc0\x0f\x06\x74\xc9\x0f\xb0\x55\xf6\xb6\x2a\x89\x63\x1e\x19\x7b\x5d\x1e\x7c\x61\x84\xc1\xd1\x98\x40\x16\xfb\xcb\x84\x1b\x72\x13\x28\xc1\x79\xc6\xb7\x36\xe9\x23\xa8\x48\x3e\x73\x61\xc4\xc1\xdd\x1b\x2d\x6c\x76\x63\xf3\x93\x7b\x7c\x1f\xe6\x6c\x36\x65\xcc\xb1\x6a\x27\x1c\x44\x57\x98\xfa\x91\xdc\x24\x15\xde\xec\x4e\xbc\x83\xe8\xba\x6a\x2a\x2f\xea\xe4\xa7\x18\x7d\x3c\xf4\x6b\x43\x5d\x35\x5d\xc9\xfd\xe6\xfc\xfe\xa8\x44\x77\x14\x5d\xab\x86\x7d\xbb\x97\xa4\xc4\x51\xb4\x28\xb7\x4d\xe1\x25\xe0\x76\x09\xff\xc2\x94\x43\xb1\x64\x5c\xef\xc0\x4b\xd0\xf2\x2a\xf2\x12\x8c\xaa\xf1\x58\xdf\xbc\x1c\xef\x14\xe9\x7a\xfd\x57\x6f\xe1\xbc\x7b\xb7\x7e\x60\x81\xf4\x2d\x15\x57\xb8\xbc\x6a\x37\xc5\x51\xc9\xb6\x18\xfd\xd5\x93\x63\x13\x25\x2b\x75\x4e\xdf\x8c\x2a\xb3\xcc\x4a\xe6\x0d\x5a\x93\x97\x57\xb8\x9a\xd6\x4d\xae\x9f\xff\x0c\x83\xff\x02\x3c\xeb\x4f\x16\x84\x0f\x78\x8f\xa7\x27\x10\x3e\xee\x30\x1b\x27\x59\x57\x60\x52\xaf\xb4\x26\x37\x99\x3f\xa7\xe5\xdf\xf9\xec\xa6\xb4\xd6\x0e\xa5\xf5\xc5\x89\xf1\x83\x7e\x9e\x1b\xb2\xaf\x89\x82\xe6\x25\x94\x62\x7f\x03\x00\x00\xff\xff\x08\x16\x24\x55\xd4\x02\x00\x00"), + }, + "/src/internal/reflectlite/reflect_mirror_test.go": &vfsgen۰CompressedFileInfo{ + name: "reflect_mirror_test.go", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 605151100, time.UTC), + uncompressedSize: 141, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x6c\xcb\x31\x0e\xc2\x30\x0c\x46\xe1\xb9\xff\x29\xac\x4c\x09\x48\xed\x49\x58\xa0\x12\x23\x2a\xc1\x2d\xa6\xa1\x8d\x1c\x67\x42\xdc\x1d\x21\x18\xbb\x3e\x7d\xaf\xeb\x68\x7f\xad\x92\x6e\xf4\x28\x40\x1e\xe2\x3c\x4c\x4c\xca\x63\xe2\x68\x49\x8c\x2f\xc6\xc5\x00\x79\xe6\x55\x8d\x3c\x1a\xf7\x0d\xb2\x4c\x0e\x01\x18\xeb\x12\xa9\xe7\x62\x07\x51\x5d\xf5\x2c\x76\x3f\xfe\x5e\x6f\xb4\xfb\xcb\xb6\x0f\xf4\x42\x63\xed\x69\x96\xec\xdd\x26\x77\x01\x6f\x7c\x02\x00\x00\xff\xff\x94\xa2\x51\x5e\x8d\x00\x00\x00"), + }, + "/src/internal/reflectlite/reflectlite.go": &vfsgen۰CompressedFileInfo{ + name: "reflectlite.go", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 626156100, time.UTC), + uncompressedSize: 23987, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xdc\x7c\x6d\x73\xdb\x46\x92\xf0\x67\xf2\x57\x8c\x51\x29\x05\xb0\xb0\x90\xa9\xe4\x71\xa5\xb4\x51\xb6\x36\x89\xbd\x8f\x92\xb5\xe5\x8a\x63\xdf\xd5\x69\x55\xde\x11\x30\x20\x47\x04\x07\x58\x60\x40\x9b\x91\xf5\xdf\xaf\xba\xe7\x1d\x00\x25\xd9\xc9\xd6\x5d\x9d\x3f\x58\xe4\x60\xa6\xa7\xdf\xa6\xbb\xa7\xbb\xc1\xa3\x23\x72\x78\xd5\xf3\xaa\x20\xd7\xdd\x7c\xde\xd0\x7c\x4d\x97\x8c\xb4\xac\xac\x58\x2e\x2b\x2e\xd9\x7c\xce\x37\x4d\xdd\x4a\x12\xcf\x67\x51\x2f\x3a\x5a\xb2\x68\x3e\x9f\x45\x4b\x2e\x57\xfd\x55\x96\xd7\x9b\xa3\x65\xdd\xac\x58\x7b\xdd\xb9\x0f\xd7\x5d\x34\x4f\xe6\xf3\x2d\x6d\x09\x17\x5c\x72\x5a\xf1\xdf\x58\x41\x4e\x49\x49\xab\x8e\xcd\xe7\x65\x2f\x72\x7c\x12\x27\xe4\x66\x3e\x3b\x3a\x22\x74\x5b\xf3\x82\x14\x8c\x16\x24\xaf\x0b\x46\x58\xc5\x37\x5c\x50\xc9\x6b\x31\x9f\xf5\x1d\x2b\xc8\xc9\x29\x81\x65\x31\x27\x5c\x48\xd6\x96\x34\x67\x37\xb7\x09\xb9\xb9\x55\xcf\xe3\x56\xee\x1a\x18\xd1\x5f\x7b\x91\xd7\x9b\x4d\x2d\x7e\x0d\x46\x37\x4c\xae\xea\xc2\x7d\xa7\x6d\x4b\x77\xe1\x94\x7c\x45\x07\x8b\x60\xdb\x70\xc4\x62\x30\x80\x4e\x9b\x70\xa0\x91\x6d\x38\xd0\x55\x7c\xb8\xa8\x93\x6d\x9f\xcb\x01\xfc\x21\x9e\x6a\xd2\x73\xce\x2a\x1c\x9c\xcf\x42\xb6\xca\xb6\x67\xf3\x59\xcf\x85\xfc\x06\x00\x91\x53\x02\x7f\xce\xcb\x18\x87\xe2\x27\x49\x92\xc5\x8f\x91\x41\x09\x39\x3a\x22\x1d\x93\xa4\xac\x5b\xd2\x32\x5a\xcd\x6f\x95\x9c\x62\x7f\xbd\x9a\x6b\x44\x18\xcf\x67\xbc\xf8\xa9\xc3\x27\xf8\xef\x94\x44\xef\xae\xf1\x7b\x04\x8f\x7e\x51\xda\xa2\x77\x8e\xde\xb5\xee\x3b\x3e\xff\x99\x8b\xc2\x2c\x3e\x25\xd1\x5a\x7f\x55\x6b\xa5\x85\xaa\xd6\x4a\x7c\x92\x68\x1d\x51\xbb\xc4\x72\xd7\x20\x45\x09\x79\x7c\xdd\x65\xe7\x57\xd7\x2c\x97\xa0\x38\x2d\x93\x7d\x2b\xc8\x75\x97\x9d\x81\x44\x04\xad\xd4\x33\x58\x90\x64\x7f\x63\x32\x36\x88\x27\x40\x27\x82\xf4\xb0\x43\xb8\x0e\x62\xa2\xe9\x06\xc8\xbc\x24\x72\xd7\x68\x10\x1e\x81\x09\x39\x3d\x85\xfd\xde\x88\x82\x95\x5c\xb0\x02\x26\xcf\x5a\x09\xea\x79\xa0\x54\x70\x3e\x9b\xcd\x3a\xfe\x1b\x3b\x21\xc0\xd0\x46\xb6\xb1\x81\x14\xc1\x70\x94\x00\xb2\x71\x92\xa4\x30\x11\x98\xa1\x26\x7e\xe3\xa6\xc1\x60\x38\xad\x93\xed\x09\x21\x82\xbd\x7f\x49\x37\xec\xbc\x2c\x63\xfd\x51\x69\xa2\xa0\xd5\xeb\x60\x1b\xd9\x72\xb1\x8c\x92\x24\x25\x51\x94\x5a\x42\x22\xf6\x01\x4e\x32\x03\xd8\xdf\xd7\x75\x15\x27\x0a\xfa\xed\x7c\x36\x1b\xb3\xb0\x95\x49\xf6\xda\xe3\x20\xc2\x49\xe6\xb3\x19\x80\x7b\x3d\xe4\x4b\x4a\x26\x21\x80\xaa\xce\x94\x32\xbf\x66\xc8\xa4\xeb\x2e\xfb\x5b\x55\x5f\xd1\x2a\xfb\x81\x56\x55\x1c\x7d\x61\x9f\x46\x76\x07\x5e\x12\x3b\x9a\xfd\x9d\x89\xa5\x5c\xc5\x09\x79\x74\x4a\x9e\x90\x8f\x1f\x1d\x39\x82\x6e\x3c\x5a\x50\x10\xb3\x56\x66\xb2\xac\xe8\x92\x7c\x3c\x25\xf8\xe1\x8d\xb6\x03\xf0\xd0\x13\xea\xe4\xe2\xf1\x6a\xe0\x71\x01\x8f\x80\x47\x33\x38\x0c\x5a\x7d\x5e\x20\x7e\x1d\xb9\xb8\x54\x98\xc2\x63\x38\x52\x1c\x68\x7c\xf2\x67\xc2\xc9\xb7\x13\x34\xfc\x99\xf0\xc3\x43\x72\x03\x67\xf0\x99\x96\x85\x9e\xd5\x91\x92\xb7\x9d\xcc\x10\x8d\x0d\x00\x71\xab\xcf\x44\xc1\x3e\xc4\x3c\xc1\x67\x46\x86\x30\xc5\x17\xfe\x46\x91\xd5\xac\x41\xee\xa0\xa4\x51\x84\xf3\x79\x49\x1e\xd9\x35\x8a\xca\x59\x5e\x0b\xc9\x05\x98\x0c\x43\xd9\x6c\x40\xd6\x29\xa1\x4d\xc3\x44\x11\x87\xe3\xa9\xc6\x4a\xc3\x01\x1e\x9e\xdc\xa7\x95\x1b\xc7\x6f\xab\x91\x06\x21\xad\xdd\xb3\xd9\x46\xee\x1a\x84\xa4\xec\x56\x19\xfb\xa7\x54\x43\x90\xbb\x26\x4a\xcc\x8a\xdb\xc4\x4a\xe5\x43\x5e\xf7\x02\x75\x0b\x8e\xd1\xe2\x69\x5c\x31\x31\xc0\x3b\x49\x3e\x59\x3e\x6f\x04\x1b\x4a\xa8\x63\x79\x2d\x8a\x7f\x8b\x88\xfe\x6f\x4b\xa8\x57\xe6\x31\x70\xc9\x38\xa7\x59\x2f\x5f\x51\xb9\xfa\x04\xd3\xa6\x98\xa7\x70\xc4\x60\xc2\x6c\xb7\x41\x2d\x38\x21\xc4\x68\xc1\x58\xba\x7a\xe6\x07\x3b\x53\x7d\x52\xa3\xef\xb4\x94\x4f\x06\x27\x3c\x75\x54\x78\xe8\xbf\xa0\xcd\x45\x2b\x2f\xc9\x29\xe9\x25\x3c\x1b\x1b\xbf\x7e\x9f\xf9\xbc\x05\x93\xd8\xbd\xe7\x32\x5f\x91\x56\x66\xe0\x1c\xb5\xfd\xc9\x69\xc7\xc8\x5f\x21\x22\x39\x41\x9b\xcf\xa4\xf1\x9c\x71\x2b\x53\x72\xe0\x82\x15\xa5\x66\x15\xdb\x9c\x0c\xdd\x99\x36\xf4\x15\xdb\x44\x86\xde\x8a\x89\x13\x32\xf6\x45\x15\x13\xa1\x8f\x41\x81\x21\x0e\x3f\xac\xa8\x40\x14\x0a\xde\x82\xe4\xbe\xaf\xe5\xea\x47\xde\x0e\x4d\x68\xc7\x44\x71\x2e\xaa\xdd\xd0\x8a\xc2\xaa\x53\xf2\x9a\x89\x42\x2f\xba\x1d\xae\x6c\x59\xbe\xdd\xbf\xf2\x17\x96\x6f\xfd\x95\x23\x46\xd8\x10\xed\x93\xf8\x50\xf0\xd6\xe3\x43\xc1\xdb\x21\xd9\xcf\x7b\x91\x23\xd9\x0d\x6d\xe9\xa6\x03\xca\x9d\xde\xe1\x50\x84\x3a\xcd\x05\x1e\x7e\xba\x66\xf1\xc5\xa5\x0a\x19\x52\xa2\x26\x38\x5d\x0b\x0c\x4e\x4b\xc5\x92\x11\x2e\x34\x99\x5c\x5c\x70\xd0\x1d\x1f\x67\xbd\xde\x18\x12\x77\x78\x5a\xd6\xf5\x95\x0c\xb1\xd1\x63\x0a\x9d\x5a\x1d\xaf\x01\x3e\x7a\xca\x9d\x08\xc1\x4a\x85\x51\xdd\xcb\x31\x4a\x06\xc4\x18\xa7\xba\x97\x3f\x0c\x8c\xee\xe4\x7e\xbe\xcc\xb7\xb4\xe5\xb4\xe0\xf9\x50\xe6\x16\xd6\xc7\x53\xb2\x20\xdf\x7e\x4b\x16\xff\x6f\xbf\xe4\x6d\x28\xae\xdd\xf5\xae\x61\x70\x90\x21\x70\x4b\x35\x6b\x7f\xd0\xa7\x5b\xe3\x35\x94\x4b\x1a\x6c\x7a\x42\xcc\x27\x6d\x05\xb8\x38\x51\xc1\x28\x17\x7a\xa4\xee\xa5\x1a\xaa\x7b\x39\x50\x98\x33\x73\x0d\x40\xad\x31\x6e\xc2\x17\x94\x1e\xd3\x7a\xe3\xcd\xd0\xd2\xd2\x43\xc6\x6a\xdf\xa3\x3f\x66\xfd\xcd\xd0\x05\x75\xa1\x03\x32\x13\x95\x48\xf9\x1f\xe3\x11\xee\xf1\x64\xd6\x51\xa0\x9f\xf8\x24\x47\xb1\x5f\xdc\xe1\x3d\x2b\x94\xb9\x15\xb9\x75\x22\x9f\xe8\x38\xb4\xdf\x30\x66\xdf\x30\x6d\x20\xe3\x17\xb4\x99\xb6\xc6\xe6\xb2\x87\x50\xd6\x6c\x77\x42\xa6\x6d\xd0\x9a\xed\x2c\x73\x1e\x68\xaa\xdc\xee\xaf\x64\x3b\xbd\xbb\xb9\x59\x7e\x1e\xd8\xd7\x70\x0d\x9d\x06\xec\x6e\xa8\x9f\x09\x1a\x6f\xaa\x08\xbb\x84\xeb\x6a\x78\x1e\xd4\x90\x3a\x0e\x1a\xe8\x73\x3b\x4b\x9f\x09\xef\xae\x9b\x12\xb5\xe0\xce\x63\x11\xc2\x51\x68\x97\x98\x2e\x50\x6b\x83\xa3\x51\x97\x65\xc7\xe4\xb3\xcd\x95\x0a\xcf\x8c\x37\xe0\x09\x5a\x1e\x13\x8e\x95\x9a\x42\x98\x56\x8c\xaf\x09\x01\x14\x30\x5b\xe3\x30\x4d\x61\xa3\x0e\xa0\x7f\x79\xf7\x0f\xa1\xfe\x37\xa5\xb6\xe5\xe0\x00\x4e\x3c\x93\x54\x29\x74\xb9\xef\x6e\x17\x9c\x47\xfd\xcf\x17\x64\xe9\x9f\xc5\x74\x44\xd8\x09\xf1\xbe\xdc\x7b\x52\xbd\x2c\xc6\xef\x3d\xa6\x30\x6b\xf2\xa8\x2a\x79\xba\x73\xa6\x78\xec\xf4\xef\x76\x8e\xc1\x95\x4e\x0a\x98\x84\x47\xac\x92\x56\xd9\xab\x1a\x37\x8c\xa7\xaf\xf5\xd9\x1b\x9c\x05\x57\x62\x9b\x29\x08\x89\x24\xc6\xb3\x9a\xfc\xc5\x20\x0f\x35\xbf\xf3\x0e\x6d\x00\x4d\xdd\x93\x0d\x40\xd0\xee\x3b\x9e\x9a\x4b\xb7\xbc\xeb\xba\x7d\x3b\x9f\x63\x0a\xc3\x0f\x56\xb5\x02\x02\x8a\x9a\xbd\x44\x28\xe3\x3f\xd7\x61\xb3\xf1\x96\x73\x73\x99\xb2\xdf\x37\x75\x59\x12\x1d\x54\x7f\x75\x3c\x9f\xdb\x38\xd9\xdd\x7c\x0d\xbb\x62\x49\x1e\xfb\xdb\x26\xc6\x39\xc5\x89\x9d\xec\x25\x6d\x64\x66\x40\xdd\x01\xc1\x68\xf5\x8b\x87\x41\xba\x38\x91\x99\x0e\xef\xcd\x87\x4b\x93\xe0\x1a\x84\xef\x44\xdb\x9b\x0d\x6d\x2e\x94\x64\x2f\xc3\xbd\x3d\x9c\x74\xe6\xcc\x3c\x8e\x93\x10\x4d\x0f\x95\xe1\x1d\x41\x6d\x8f\x12\x31\xa1\x8b\x27\x8d\xd6\x24\xbf\xfe\xa9\x35\xfa\x24\x82\x59\xd1\x3f\xe7\x26\x8e\x71\x82\xb0\x61\x92\x1e\x98\x43\xac\x42\x88\x09\xf8\xe6\x18\xa8\xb8\xaf\x3e\x4b\xcd\xce\x09\xe1\x02\x39\xe8\xd2\x5c\x8e\x83\x5c\xec\x59\x53\xf7\x72\xef\xa2\xba\x97\x96\x3e\x50\x29\x8f\xb6\xab\x9d\x64\x1d\x79\x0c\x7f\x82\x29\x3f\x52\x49\xbd\x69\xb8\x0a\xfe\xa9\x9c\xd5\x7c\x26\xe9\x92\x04\x03\xf6\x6a\x7c\x55\xd7\x36\x5b\x09\xcb\x86\x42\x84\xad\x2e\x1f\x9b\x3d\xac\xfc\x04\x4e\x4e\xf0\xff\x38\x21\x71\xa7\x21\x27\xe4\x86\x68\x4a\x34\xb4\x0b\x91\x21\xd6\x97\x19\x62\x75\x3b\x00\x20\xe9\x32\x5c\x7f\x07\x00\xa0\x62\xb8\x5e\x9f\xbd\x38\xd1\x00\xbc\xf5\x51\x34\x9a\xcd\x3b\x93\x21\x8a\x13\x24\xfd\x8e\xdd\x2c\x8b\x8c\x04\x8d\x89\x15\x29\x60\xad\xf7\x73\x97\x7a\x84\xa7\x38\x82\xa2\x02\x4f\x28\xd8\xfb\x18\xc0\x25\x4a\x26\x00\xff\x0a\x9c\xd7\x81\x61\x28\xd8\x75\xe7\xb7\x30\x3a\x96\x74\xa9\x5d\x8b\xa4\x4b\x18\x30\x1b\x9c\xd8\xad\x52\xb0\xc9\x33\x0f\x71\x00\x83\x68\x9f\x90\x2b\x7c\xe8\x49\xf4\xbc\x2c\xff\xce\x3b\xd0\x62\xf8\x36\x3e\x80\x7a\x4e\x0c\x36\x49\x7f\x76\x54\x78\x7b\x68\x38\x17\x5c\x48\x98\x9b\x5c\xce\x07\x8c\xc1\xb8\xd7\xd3\x8b\xf3\xb2\xc4\xa4\x2f\x30\xa2\x62\x22\xf6\x80\x68\x7e\x18\xd4\x6c\xda\xc5\x1b\x4c\x89\x48\x86\xfb\x43\xbc\xa1\x29\x93\x2a\x0e\xd6\x94\xe9\xf3\x39\xa2\x4d\xcf\x42\xda\xf4\x67\x3f\x1f\x6d\xce\x9c\x83\x35\x4d\x9d\x09\xba\x47\x80\x03\xfa\x3c\x30\xc9\x7c\xe6\x23\x68\xe9\xf3\x06\x53\x22\x93\x21\x06\x9a\x3e\x5d\xc8\x71\x8e\xbc\x93\xed\xf9\xd5\x75\x90\x54\xd7\xda\x7e\x33\xc7\xfc\x69\xae\x0f\xff\x0d\xfc\x35\xcf\x6e\xa7\x1c\x5f\xae\x3c\x5e\xd4\xc9\x36\x4a\x89\x02\x8c\xe5\x8b\x25\x93\x66\xe1\x7b\x2e\x57\x60\xf7\x0c\x0a\xfc\x37\xb4\x19\x1a\xd7\x3c\xeb\x64\xeb\xd0\xec\xfe\xa3\x05\xe2\x0a\xaf\x9c\xa0\x0e\x96\x57\x48\x30\x21\xae\xaa\x1e\x44\xef\xd5\x0a\x1b\x54\x59\x60\x79\xdd\xec\x54\xa8\x1b\x17\xc0\xa1\xae\xcd\x3d\xa2\x31\xd9\xa3\xb7\xb8\x99\x7b\x81\xf0\x68\x03\x17\x10\x0f\xb3\x93\x83\xc8\x57\xa7\x26\xe7\xb3\x59\xd3\xd6\xcd\x44\x78\xab\xe3\xa7\xb6\x6e\xa2\x24\x7b\x8d\xec\x89\x21\x2a\x2a\x3a\x89\x7c\x84\x27\x88\x27\x4e\x84\x6f\x10\x6f\xdc\x5a\x8a\xc0\x90\xbe\xa5\x55\xcf\x62\x49\x54\xa4\xb2\x0d\x28\x2a\x2b\x52\x56\x74\x99\x10\x9c\xa4\xdc\x17\xc6\xf6\x99\xf1\x8a\xaa\x6a\x62\x32\x5a\xa7\xa7\x2a\x97\x85\x29\x7b\x6f\x50\x71\x6d\x38\xfa\x4a\xb6\xaa\x92\xa2\x04\x81\x7b\xdc\x40\x64\x39\x88\xde\xb6\x2e\x50\x43\x94\x3e\x22\x52\xb1\x01\x95\xdc\xfa\xf6\x66\x2f\x94\x51\x11\x42\xb0\xf7\x60\xe3\xf4\xf3\x28\x25\xdb\xd4\xc8\xaa\x95\x19\x5c\xb6\x6a\x08\x0d\xef\xd9\x5c\x0f\x9c\x89\x82\xb7\x8e\xb1\x2f\xe8\x9a\xe1\x85\xcb\xea\x5d\x0a\x87\x30\x25\x39\x6d\x40\x71\x3d\x8e\xea\x7c\x89\x66\xcb\xa3\x53\x75\x51\x53\x52\xa7\x82\xe7\x71\xa4\x03\x85\xcc\x02\x25\x75\x49\x44\x2d\xfe\x84\xf7\x36\x3c\x9d\x11\x8a\x15\x60\x55\x4c\x90\x6f\xc9\x93\x3b\xd7\x43\x3c\xbe\xa4\x92\x6f\x19\xc1\x8c\xa0\x59\x0b\xc8\x7d\xc2\xda\x9c\x36\xe1\xbe\xdf\x21\x84\xbb\x57\xdb\x79\x6a\xa9\x95\x9b\xa7\x8a\xbb\x26\x9d\x28\x19\x19\x10\x51\xea\x9f\x28\xc7\xd6\xa9\xf0\x18\x8b\xc7\x61\x01\x91\x8c\x8e\x7d\xf6\xac\x62\x9b\x38\x49\xf4\x4e\xbf\xb1\xb6\x8e\x12\x72\x0b\xf2\x7e\xe2\x0e\xbf\x2e\xae\x0e\x2a\xd1\xbf\xba\xd2\xe1\x23\xbf\x3c\x8b\xe5\x04\x55\xdf\x66\x6d\x5b\xb7\x20\x31\x5b\x6a\x75\x2a\xaf\xab\x87\xb7\x86\x89\x1c\x8e\x85\xe0\x95\x7f\x2c\x04\xaf\x7c\xfd\xf6\x6f\x73\x63\x82\x8d\x49\xc8\x6b\xa1\x4c\x6e\xdd\x46\xde\xed\x06\x19\x3c\xa6\xc2\xd7\xc5\x29\x14\xd4\x99\x0a\x8e\x99\x13\xd7\xe7\x20\x34\x25\x2b\x33\xf3\x8b\x2d\xad\xa2\x90\xf7\x68\x53\xce\xcb\x58\xdd\x53\xb8\x90\x29\x61\x15\xdb\x68\x63\x3b\x08\xc7\x07\xf8\x84\x5a\x64\xd3\xe9\x4e\x8b\x00\x52\x92\x12\x84\xed\xb1\xea\x87\x15\x15\xe7\x65\x5c\xf0\x16\x3f\xfe\xc8\xdb\x94\xc8\xcf\xd8\xd1\xe4\xad\x3d\xb5\x4d\x52\x82\x49\x6f\x9b\x2f\xb7\xdf\x75\x16\xdc\x43\xe3\x79\x2f\x72\x10\x98\x48\x89\x8a\xf5\xb5\x99\xd6\x89\x55\x1d\xd5\x79\x6a\x68\x9f\x1c\x1c\x10\xac\x8a\x71\x81\xc6\x16\xcb\xa8\x5c\x5c\xe8\xa1\x3f\x2d\x2e\x87\x26\x27\x99\x3a\xb9\x6a\xff\x13\x52\xd1\x4e\x12\xda\x2e\x41\x91\xed\x16\xca\x87\xf4\x9d\x24\x57\x8c\xa0\x31\x32\x87\xfa\xba\x3b\x0b\x12\xe6\x9e\x4f\xd1\x08\x18\xef\x07\x2e\x67\x98\x2d\x87\xd5\x2a\x8d\xa2\x59\xb6\x55\x66\xe6\xba\x3b\x0f\xf3\xde\x03\xb0\x75\x2f\xa7\xe1\x9a\xa4\x37\x02\x98\x82\xfc\x10\x49\x9a\xeb\x11\x4a\xf2\x4c\xc0\xff\xe7\xbd\x74\xb2\xf0\xa4\xf6\x82\x36\xe7\x65\xbc\x66\xbb\x49\x45\xd5\x85\xa0\x35\xdb\x79\x95\x20\x5b\x8d\x48\x61\x75\xea\xd2\x75\x23\x53\xda\x80\x3c\xb8\xd8\xd2\x8a\x17\x00\x04\x1d\x00\x89\xc8\x21\x42\x34\x51\x40\x68\x5d\xef\x24\x4c\x67\x35\x9d\x86\xae\xd9\x2e\x09\xcf\x87\x47\x9b\x17\x66\x6a\x1f\x39\x0e\x59\xef\xdc\x4e\xa7\x31\xfd\x03\xe1\x81\x47\xba\xcf\xcb\xf8\x73\xce\x9a\xcd\x63\xee\x81\xfd\x5f\xac\xad\xbd\x40\xd0\x05\x35\x7b\x5c\x90\x8b\xdb\x7c\xd7\x10\x98\x26\x15\x64\xbc\x7b\xc9\xde\xab\xc6\x12\x9b\x36\xf0\x63\x0f\x4f\xe8\x9e\xab\x37\x42\x77\xd9\x53\x9b\x50\x18\x04\x2e\x83\xf8\xb1\x91\x6d\x94\x64\xb0\xa5\x17\x9c\xcc\x07\xa5\xc4\xfb\x61\xf9\x34\xf9\x70\x0a\x56\xd2\xbe\xba\x13\xa1\xfb\x22\xa9\xfd\xac\xf3\xdc\xee\x44\x84\x35\x8c\x4d\xcf\x84\x8c\x4b\x8c\xaf\x52\x72\xc5\x65\x87\x3e\xf4\xe9\xd7\xce\x12\x5b\x11\x02\xf3\x07\x81\x69\x23\xb1\x90\x19\x4a\x28\xb9\x4b\x12\x67\x42\x7e\x03\x64\x3f\x8e\x1f\x83\xaf\x4e\xe2\x46\xb6\x09\xc1\x82\xfe\x37\x31\xec\x9f\xb8\x89\x8b\xa7\x6e\xe6\xe2\xa9\x3f\x75\xf1\x74\x38\x37\x85\xff\xbe\x3a\x76\x0b\xbe\x3a\xf6\x17\x7c\x75\x3c\x5c\xf0\xf4\x6b\x37\xf7\xe9\xd7\xfe\xdc\xa7\x5f\x07\x73\xdf\x70\x87\x72\x1f\xe0\xdc\x8f\x90\x7e\xc3\x3d\xac\xfb\x10\xed\x7e\x8c\xf7\x1b\xf4\xb3\x6f\x10\x3f\xf5\xb7\x51\x85\x09\xbd\xda\xa3\xa1\x1f\x13\xf1\x86\x7b\x54\xf4\x21\x19\x7d\x40\xc7\x30\x74\xc7\xb3\xd7\xc8\x36\x25\xa5\x1f\x5b\xdb\xc0\xdb\x8a\x2d\x09\xc3\x6d\xb0\x9d\x5e\xb4\x5d\x0a\xd5\x3a\x48\xdb\x65\x47\x2e\x2e\x11\x76\x42\x4c\xc9\xd2\x8e\xdc\x15\x88\x03\xc4\x09\x9f\x78\x42\x72\x5a\x55\xe0\x08\xcd\xb6\x78\x25\xc5\x88\x1c\xbf\xb9\x80\x7c\x3e\x93\xa6\x14\xe2\xf4\xb2\xd4\xba\x1a\xbb\x84\xdb\x28\x5f\x8d\x4d\x54\xe5\x56\x37\x4f\x59\xf2\x90\x22\xb9\xe2\x5d\x70\x4b\xa3\xed\xb2\xdf\x30\x81\x54\xf9\x97\x70\x2f\xc6\x43\x32\x90\x15\xce\x7b\x22\xe1\x29\x01\x74\xb2\x97\xfd\xe6\x4c\xa8\x52\xcb\xa0\xd2\x82\x8b\x30\xbf\x4f\xdb\x25\x1a\x63\xb8\x86\xc2\x9a\x33\x01\x31\x9b\xa3\x4b\x6d\xa0\xbc\xab\x33\xa5\x7a\x95\x87\xe5\x05\xbf\x44\x13\xaa\xca\x0a\x5a\x20\xea\x5e\x03\xa0\x05\x8a\x2c\x71\x0d\x13\x06\xc1\xf3\x5e\xfa\x4d\x13\x4f\x4e\x54\x41\xc9\x05\xc9\x6a\x7c\xe1\x8f\xfb\xd0\x2f\x9e\x5c\x66\xb5\x8a\x35\xf1\x8e\xec\xcc\x9c\x5f\x6f\x77\xc6\x0d\x6d\x2d\xda\x53\x6d\x6d\x03\x44\x5c\x55\x2a\x25\xad\x5f\x98\xf2\xc8\xd1\x65\x11\x5d\x25\x7f\xcd\xa4\xbe\xb7\xa7\xa4\xb5\x98\xf8\x45\x7f\x1f\x65\x5d\xdb\x48\xe6\xc3\xe3\x31\xba\xd8\x96\x83\xfb\x31\x5d\xc6\xa0\x2c\xde\xf1\x00\x85\x2c\x36\x6c\xb3\xa9\xb7\x2c\x76\x45\x0d\x9b\xc4\x08\x01\xee\xa9\x6b\x14\x9d\x4c\xac\xa3\xc5\xce\xbd\xf1\x9c\xae\xcd\xed\x9c\x25\x93\xfe\xd5\xa3\xaa\x69\xf1\x3a\xa7\x15\x6d\xe3\x66\xb0\x61\x4a\x84\x29\xca\x25\xe6\xc3\x9d\x9d\x9e\x4d\xb8\x89\x25\x3f\xf0\x1d\x10\x78\x7b\x3e\x39\x25\x1d\xff\x8d\xa9\xbb\x77\x9c\xaf\xa6\x68\xce\xed\xc1\x34\x41\xfb\x54\x21\x29\x49\xe6\xf7\xfa\x45\x75\x91\x81\x7b\x83\x56\x1d\xed\xf6\x60\x87\x4c\x5f\x38\x00\x1d\xdf\xf5\xf9\xb8\x6f\x68\xe3\xc9\xc9\xe6\x0c\xe2\xcd\x14\xda\x0f\x42\x46\x71\x6e\x22\x6c\x30\xdb\xae\xd9\xee\x79\xdd\x7a\xbb\x42\x64\x39\xdc\x2d\xf6\xcd\x8e\x4d\xa9\xcf\x67\x6b\x63\xa9\x86\x75\x2c\xb6\x53\x19\xa2\xf5\x56\xf3\x04\x05\x06\xc6\x75\xd4\x4f\xbb\xde\x92\x53\x98\xe7\x4b\x16\xbd\xc3\xda\x4f\xa2\x65\x3f\xb3\x9d\xbb\xab\x2b\xa4\xa3\x94\xac\xb7\x7e\xfe\x4b\x73\x64\xbd\x4d\xc9\xda\xe3\x6b\x43\xf3\x9c\x75\x9d\x47\xe3\x66\x9a\xcc\x71\xf4\xf6\x2e\x25\x88\x86\xe1\x12\xae\x4b\xe6\x33\x26\x64\xbb\x9b\xa6\x7d\xa3\xa2\xb5\xb5\x62\x80\x9a\x38\xd9\x47\x3c\x79\xcd\xff\xe4\x90\x0b\x37\xd0\x5d\x37\x5e\xa0\xf5\x0a\x83\x2c\x69\x72\x1c\xc9\xb4\xc6\x35\xb4\xeb\xf8\x52\x8c\x38\x03\x97\x9b\x6a\x4a\xe7\x90\xb5\x53\x0c\xb9\xee\xde\xd2\x6a\x9a\x21\x5b\x5a\x25\x03\xe9\x32\x9d\x4d\x54\xd8\x29\x46\x4d\xe4\x0d\xb1\x0c\xc1\xde\x5b\xc8\xea\x5e\x22\xc3\xd8\x12\xec\xbf\x4b\xd0\xaa\xe9\xc0\x06\xfc\xc3\x64\x82\xd7\x3f\x00\x81\x75\x8f\xb7\x54\xb1\xdb\x17\xe0\xfe\xf3\xa2\xe7\xa9\xdc\xf4\x5a\xe9\x5b\x30\xb6\x8d\xf4\x56\x93\xe5\xdc\x8d\xca\x6a\xaf\xb5\x94\x02\xce\x17\xac\x62\xd2\xb7\xca\x9b\x91\x75\x9c\x52\xd1\x3b\x74\x72\x72\xff\x1f\xd5\x36\x6b\x57\x2d\xde\xd0\xe6\x0c\xb4\xdb\xd5\xe5\x24\x21\x84\xa8\x04\xd5\x06\x1b\xac\xec\x61\x9f\xcf\xd6\x6c\xd7\x05\x03\x5c\x35\x4c\xc9\x39\xbe\xca\x81\xe9\x01\xde\x11\xb9\x62\xea\xb3\x72\x6f\xf8\x9d\x4b\xd6\x52\x09\x9e\x52\x14\x3c\xa7\x92\x75\x19\x39\x2b\x09\x86\x31\x7a\x1a\xfb\xc0\x3b\xd9\xa5\x38\x1d\x18\x23\x79\x2d\x00\x18\x95\x26\x5d\x27\x57\x0c\x37\xca\xfb\xb6\x65\x42\x22\x4f\xea\x16\xd4\xb3\x67\x7a\x4e\xe7\x83\x4c\x49\xcb\x96\xb4\x2d\x2a\xd6\x75\x10\xaa\x01\x64\xb3\xd6\x20\x94\x91\x33\x44\xfa\x8a\xe5\xb4\xef\x98\x3f\x07\xf7\xb2\x88\x6f\xf8\x72\xa5\x72\x1c\x92\x56\x8c\x14\x3d\x23\xb2\x46\x14\x50\x7a\xbc\x16\x84\x0b\x42\x49\x55\xd7\x4d\x36\x9f\x21\x03\x3c\x5e\xd9\x9b\x33\x00\x24\x8f\x35\xe3\x13\xd2\xad\x79\xf3\x46\x48\x5e\xbd\x85\xab\x3c\x1a\x36\xac\x1c\x00\xab\x24\x6b\x33\x4e\xbe\x55\x1f\x80\xf9\xae\x27\x1e\x8d\x25\xf6\x19\xdb\x67\x3a\xae\xc0\x45\xba\x99\x1e\xbf\xa8\xd6\xab\xb5\x4b\x0a\x4c\x5a\xde\xd9\x55\xcb\xe8\x5a\xc7\x63\x47\x47\xe4\xd7\x15\x43\xe2\x78\x47\x68\xd5\x32\x5a\x68\x3a\x59\x91\x91\x17\xf5\x96\x91\x1a\xe5\x41\x04\xfb\x80\xcc\xdc\x64\xb0\x25\x6e\x7e\x78\x18\x5e\xe1\x1a\x18\xc6\x97\x7e\xf6\x2b\xf8\x94\xbd\x9d\xb6\x82\x07\x9a\x75\x10\x04\x4d\x69\xf9\x44\xda\x18\xd8\x13\x4d\xcf\x86\x8b\x7c\x0a\x76\xf7\xd6\x1d\x0a\xd0\xfe\x67\x1f\x5c\xe4\x0c\xb8\xa8\x13\xa1\xc4\xf3\xab\x5f\x67\xd7\xe4\xad\xd9\x2e\xe6\xf2\x01\x44\xa1\xf8\x31\xbe\x30\x2a\x10\x73\xb0\x4b\x5b\xda\x92\xf5\x36\x3c\x5d\x5a\x80\xa8\x4a\x8f\x5c\x42\x16\x9d\xa4\x7d\x32\x9f\xdd\x12\x56\x75\x2a\xd0\xc4\xd1\x09\x95\xf2\xd4\x01\x73\xbb\x7b\x34\x2a\x8c\xa4\x6f\xef\xd7\x31\x87\xca\x48\xcb\xe6\x4a\x8f\x7e\x61\x79\xdd\x16\xa8\x2a\x6b\xb6\xfb\x93\x3a\xab\x0d\xe5\x2d\xbe\x88\x54\x51\x60\x87\x72\xc9\xac\xb3\x2a\x84\x14\x43\x20\xf0\xbb\xbc\xa1\x89\x37\xd6\x23\x57\x88\x9b\xc8\x2c\x56\x92\x4e\x74\x3c\xb1\xcf\x2f\xc2\x6c\x50\xf3\x29\x01\xdf\x21\x51\x9f\x12\x64\xa8\x3d\x1d\x1e\xec\x8a\x89\x89\x80\x8e\x8b\xc1\x5b\x4e\x0f\xd7\x67\x2b\x50\x57\xb1\xdc\xca\x1f\x79\x8b\xce\x97\xe8\xeb\xde\x44\xfa\x0b\xf4\xaf\x6b\x73\xe5\x1b\xb7\xde\x1d\x89\x97\x76\xdc\x25\x4c\x33\x97\x88\x12\xbc\x8a\x12\x3f\x88\xb9\x23\x83\xe6\x16\xa4\x64\x9b\x61\x55\x51\xdd\x90\x61\x77\x88\x32\x7c\xf5\x37\x19\x52\x73\x79\x56\x11\xc1\x9f\xc9\xda\x25\xcd\x4c\x7a\xb4\x33\x17\x47\x7f\x33\x70\xda\x0a\x73\x1d\x76\x52\x75\x8d\x4b\xcc\x02\xe5\xb5\xbf\x50\xdd\x6e\x51\x4a\x82\xc9\x7a\x74\x34\xbb\x42\xf6\x0e\x67\xeb\xd1\xd1\xec\x1c\xe2\x4d\x2e\x77\xc3\xf9\x76\x1c\x57\x6c\x91\xe9\xf7\x2b\x34\x42\x1e\x46\x75\x70\x19\x31\x09\x17\xdd\x35\xaa\x93\x18\x2a\xa0\x9a\x8e\xa4\xc2\x39\xf0\x10\x65\x6a\xbe\xab\x4b\xab\xc2\x4b\x21\x8e\x03\xc6\x47\x98\xb7\xa2\x2a\x32\x66\x39\xde\x65\xbd\x20\x6c\x0b\xa1\x97\x82\x91\x7a\x5b\x26\x43\x9f\x33\x0d\x2d\xe0\x1a\x06\x8c\x03\x4e\x1a\x21\x0d\xb2\xa8\x63\x68\xc3\xac\xe9\xfc\x4e\x2c\x83\x54\x6a\x4a\xbe\xaf\xeb\x2a\xc5\x1a\x50\xaa\xf3\xf3\xb6\x05\xdc\xa4\xea\xd1\xee\xf9\x5b\x8f\x42\xdf\x0c\xee\xb6\x41\x6a\x55\xe5\x94\x0e\xf0\xb4\x3c\x6b\xdb\xba\xbd\xb1\x29\xfe\x1f\x6a\xb1\x65\x2d\xa8\xe5\xfa\x76\x3a\x41\x66\xb3\x2e\xe3\x5a\x39\xad\xfc\x6c\x80\x3a\x69\x59\x5b\xc7\x09\xf9\xa8\xbf\x1d\x3c\x2c\xa7\xf6\x43\xdd\xec\x5c\x9f\x83\xce\x9f\x69\xeb\x54\xe0\xc9\x2c\x3a\x99\xad\x71\x19\x9a\x8a\x62\x0d\x9e\x4a\xd5\xff\x0f\x0e\xf4\xd7\x61\x31\x7b\x0f\xc1\x0d\x1c\x93\xc2\x90\xab\x80\xd9\x66\x82\x1b\xdd\xd1\xb0\xe9\x3b\xf9\x3d\xfb\x2b\x5e\x55\xe8\x55\x05\x17\x7e\x98\xed\x1e\xb9\xee\xa9\xf9\x7c\xd6\x21\x8e\x5d\x9b\x5b\x1c\xd1\xce\xa1\xac\x60\x43\xd5\x5b\x86\x36\x2e\x44\xbc\x1b\x20\xee\x2d\x39\x85\x87\xea\x34\x71\xb1\x44\x2a\x3b\x99\x4d\x1e\x38\xcc\xcc\xaa\x03\xf9\xc8\x83\x70\xa3\xde\x35\xb9\x8f\x15\xdd\xda\x75\xb7\xce\x80\x86\x09\x02\x27\x20\x43\x0c\xd3\xbd\xe8\x3b\xf9\x82\xca\x7c\x15\x8f\x18\x1c\x20\xab\x1a\x43\x82\x63\x09\xf6\xb8\xe8\xa4\xbe\x68\xc1\xf4\xc0\x19\x4c\x08\xe5\xad\x7f\xd8\x4c\xed\x26\xdc\x27\x51\xa7\x4e\x4d\xd6\x9b\x68\xb7\xa2\x05\x14\x7a\x9c\xc1\x26\xd6\x33\x0d\x36\x19\x20\xef\xdb\x0c\xbd\x09\x00\x0b\xf9\xb3\xcf\xab\x6a\x6b\xc0\xc5\x52\x71\xe9\xad\x33\x09\xfa\x75\x29\xff\x18\x4e\x2f\xd7\xbd\x09\xd3\xab\xad\xdb\xc7\x9e\xd5\x5f\x58\xce\xf8\x96\xb5\x71\xdd\xd8\x3e\x3d\xeb\xa0\xb9\xce\xf5\xbc\xb3\x01\xb3\xd7\x9a\x89\x79\xed\x89\x40\x04\x54\x1b\x7b\x84\x4c\x07\x25\x2f\xb5\x55\x77\x1a\x79\xe6\x07\xb5\x33\x29\x55\xe0\x12\xbc\x6e\x31\xca\x77\x29\x6f\x6f\x62\x48\x6c\x0e\xf9\xf8\x91\x70\xf2\x9d\xee\x29\x93\x99\xee\xc2\x4d\x7c\xcd\x76\x99\x72\xd3\xa3\xa5\xba\x20\x5c\xd9\x52\xf7\xf3\x72\x88\x29\x23\x93\x0a\xc6\x97\x5b\x0e\x1c\xcc\x0b\x7e\xa9\x0f\x90\x94\x99\xe9\xb1\xdb\xe0\xa7\x24\x0b\x7a\x25\x27\xf7\x8e\xc8\x21\xa9\x1b\x72\x48\x22\xec\xbe\x18\xbe\xdb\x69\xb7\x85\x20\xed\xae\x5c\x3c\xea\xb2\xde\xdb\xb8\x5c\xd5\x90\x75\x4a\x26\x10\x53\x3d\xa7\x41\x68\xae\xde\x2b\x53\xf2\x18\x75\x37\x2b\x12\x7b\x2e\x64\xcc\x13\x60\x2c\x7e\xc4\xe0\xb0\x4b\xfe\x30\xb6\x6e\x3c\x6e\x2a\x44\xfe\xc7\x18\xaa\xb6\x77\x3c\xdd\x0c\x99\x7a\xe7\xeb\xe2\x41\x18\x9a\xdc\xd7\x09\x07\x87\x36\xdf\xb6\x8a\xfd\x81\x99\x71\x9d\x81\x0a\x94\xb2\x0f\x30\x77\x18\xea\x82\x5d\x81\x07\x0a\x5c\x29\xc8\xe9\xd0\xe9\xc2\x53\xd7\x61\xe7\x97\x33\x95\xc5\xb0\xc7\x1f\xaf\x40\xf6\x1c\x9a\xa0\x7c\x54\xa9\xc1\xc3\x8b\xef\xa4\x63\xe3\xc6\x3d\xde\x13\xc7\x32\x0b\x35\x4a\xc9\x93\x5b\x67\x01\x3d\x9f\xaf\x54\x4e\xbd\x53\x0f\x30\xb7\xba\x50\xa3\xc6\x55\xdc\x1e\xf9\x70\xb6\x0e\xcc\x34\xbb\x94\x3d\xf4\xb0\x8f\xa7\xeb\xcd\x1e\x27\x9d\x18\x82\xf7\x2f\x3c\xf3\x7a\x07\x38\xb7\x78\xea\xdd\x0d\x0e\x8b\x9e\x1d\x9f\x79\xb9\x06\x08\x5d\x3c\x78\x68\x9e\xff\xd8\x72\xc7\xd0\xb6\xbf\x54\x2d\xe7\xae\x01\xd6\xb4\x7b\xff\xe5\xf9\xd9\x7f\xbe\x78\xf6\x97\x28\x48\xf4\xfb\xac\x1f\x3b\x83\xb0\x38\x39\x96\xe4\x40\x3b\xee\xb7\x0f\x7d\x87\xbd\x83\xb0\xf3\x2b\xda\x4a\x4e\x2b\x88\x68\x4d\xad\xf2\x5d\x4a\xde\xa1\x83\xb1\xef\x18\x7a\x8e\x0a\xdb\x23\xc1\x32\xe9\xcb\xdb\x77\xdf\x39\x44\x5e\xaf\x78\x89\xed\xc2\x7f\xf0\x51\xfb\x83\xeb\x9f\x7b\xeb\x49\xa5\x30\xa2\xa6\x4d\x53\x41\xa4\x04\x48\x78\x80\x13\xac\xc4\x85\x61\xf8\x36\x43\xcc\x93\xfd\xb1\x78\x58\x98\x0b\x43\xf1\x41\x99\x0e\xfc\xf7\x75\xa7\xd0\x79\x25\xdb\xc1\x4b\xb9\xc3\xc2\x92\x37\x13\x2e\x40\x4a\x9d\xde\xb7\xb4\xf9\xa9\x73\xbf\x85\x62\x1a\x7a\x83\xab\xf5\xf0\xc7\x54\xd4\x55\x50\x5d\xef\xdd\xee\x01\xb3\x34\x06\xf6\xa9\x3e\xc6\x3a\xca\x32\xf3\xb6\xea\x57\x65\x74\x4f\xcc\xbf\x07\x97\xad\x61\x40\xad\x93\xf3\xfb\x10\x58\x32\xf9\x53\xf7\x2b\x5c\x6c\xec\x8b\x10\xfe\x89\x2c\xeb\x16\x5f\x91\x78\x74\x4a\xa2\x08\x37\x38\x3a\xc2\x64\x2c\xa9\x18\x2d\x60\x52\xd7\xd0\x9c\x81\xb7\xc4\xde\x6c\x5b\x14\xff\x56\x05\x3d\x74\x99\x40\xe8\x2f\xe9\x12\x8b\xdd\xa7\xe4\x4b\xf2\xa5\xbe\x59\x1f\x1e\x1a\x1f\x08\xc6\x5b\x4d\x39\xd1\x7e\x57\x2a\x7b\xae\xb7\xf4\x2e\xc0\x1a\x81\x9c\x0a\x22\x6b\x92\xd7\x55\x2d\x32\x35\x46\x15\x26\xa4\x6e\x09\x25\xff\xea\x6b\xc9\x30\x29\x4b\xba\x9d\x90\xf4\x83\x3a\xdd\x88\xe6\xbd\x58\x3e\x52\x58\x86\x03\x27\xc3\x81\x68\x44\x07\x1c\xdf\xc3\x85\x8d\xf7\x00\xe8\xc7\x8f\x03\x18\x66\xe0\x70\x11\x42\xf1\xaf\xf8\xf8\xc6\xc6\xc9\xa9\x96\x02\x00\xba\x38\xe1\x97\x49\xc8\xa9\xc3\xc5\xc9\xa5\xcf\x0d\xa4\xb8\x30\x92\x93\x35\x29\xb9\x28\x94\x13\xd5\x54\x2f\xee\xa7\xda\xd2\x54\xfa\x12\xfb\xc7\x3f\xbe\x34\x2f\xe6\x23\xad\xfa\xf7\x0a\x02\xba\x03\xaa\x47\x14\xfd\x4b\xe5\x33\x87\x34\x1d\x2e\xf6\x51\xc5\xd5\x0b\x2c\xa8\x03\xd7\x9d\xd6\x82\xad\x0a\xfa\xdf\xa9\x4e\x25\x24\x38\x56\x90\x13\x2f\x29\x6b\x48\x0e\x5a\x70\x23\x74\x25\x47\x47\x04\xb3\x41\x5e\x11\x84\x91\x46\x27\x9d\x31\xa7\x8d\xcd\x29\xac\x62\x60\xc9\x88\xcc\x60\xc5\xf3\xba\x25\xec\x03\xdd\x34\x15\x5c\x38\x4a\x22\x49\xcb\x9a\x96\x75\x68\x44\x71\xd1\xf3\xba\x4e\x89\x4e\x33\x25\xfe\xd3\xc7\xcf\xeb\x3a\x53\xc7\x4c\x3f\x9e\x6e\xd4\x93\xf6\xd7\xa7\x4c\xa3\x97\xc6\x16\x2e\x4b\x70\xa1\x33\xf8\x52\xed\xe4\xf2\x5a\x48\xca\x05\x4a\x7a\x85\xe5\xa9\xb0\xc8\x43\x25\x76\x05\x01\x08\x5a\x55\x75\x4e\x25\x4c\xa5\x44\xb0\xf7\xaa\x05\xf3\xaa\x62\x84\x76\x44\x30\x56\xb0\x22\x73\xaf\x6c\xbc\xa5\x55\xd0\x07\xa0\x5f\x6a\xc0\x26\xa3\x51\x2c\x10\xb4\x42\x83\xef\xc0\x44\x49\x6c\xdd\xd6\xd1\x11\x26\x46\x74\x97\x06\xe9\x6a\x52\xf6\xb2\x6f\x19\xc9\x57\x54\x2c\x59\x07\x5a\xaa\xd1\x57\xb3\xdf\xd7\xe2\x4b\xa9\x9f\xe2\x93\x5e\x14\xac\xad\x76\x80\x3c\x12\x06\x47\x3d\x9f\x6c\x54\x9b\x85\x7d\x1b\xbb\x26\x25\x39\x62\x9d\x0c\x5b\xb3\xcd\x33\xfb\x7e\x82\x7e\x1d\x61\xba\xb9\xea\x71\xfc\x78\x40\x36\x76\x66\xc1\x72\xeb\x8c\x3a\x06\xde\xe7\xff\xb3\xaa\x61\x2d\x19\x55\x47\xbf\x50\x8f\xd5\x6f\x89\xe8\x60\x36\xc9\x94\x7b\xce\xb2\x2c\x68\x2e\xf7\x0c\xbe\xc9\x4a\xaf\xa8\x68\x59\xbe\x1d\xb7\x61\xa4\x44\x5c\x61\x5e\x66\xba\xf0\x1c\xab\x6d\x59\x91\x92\x56\x45\x26\xe6\xb5\xb6\x9b\xf9\x0c\xdc\x30\xde\xb3\x2e\x2e\xfd\x30\xe0\xe6\x66\xe2\x2d\xa3\x55\x72\xab\xd2\x4c\xe2\x4a\x35\x14\xe1\x5a\xfb\x1e\x14\x7e\x4d\x83\x68\xe2\x46\xa7\xa6\x14\x06\xbf\x30\xdc\xc9\x67\x92\x5a\x94\x18\xa8\x07\x07\xc4\x4e\xd5\x97\x94\x27\x3a\x19\x00\x06\x60\xe1\xfb\x35\x7c\xdf\x59\xbf\xf6\xac\x45\x96\x6f\x83\x2d\x1c\x90\xc5\x64\x81\xd7\x2f\xad\xab\x60\x55\x83\xb0\x5b\x7b\x2f\x73\xb5\x3d\x1b\x3e\x5f\x8c\xdf\x75\x5a\x51\xd1\x21\x2f\xc6\x32\x1a\x8b\xc6\xca\xcd\xbd\x5d\xf5\x69\xe2\x48\x1f\xd2\x2f\xf0\xbf\x4e\x66\xfe\xf9\xc2\x9f\xe3\xb3\xbf\x37\xa7\xe0\xc4\xfa\x2f\x04\xa6\x6d\x2f\x24\xdf\xb0\xd7\x38\x80\x2d\x48\x75\xc7\x84\x7a\x99\x01\x7f\x1a\xe7\xe7\x09\x55\xd6\x9d\x7a\xe3\x4e\x77\x03\xd8\x6b\x77\xef\xbc\x26\x34\xb3\xed\x8d\xeb\xa2\x53\x1b\xff\xc8\xdb\xb8\xcb\x0a\xde\x7a\x8d\x74\xfa\x89\xd7\x0e\x87\xfb\xab\x46\xbe\x90\x9f\xe1\x92\x5f\x58\xbe\x55\xf3\x57\x13\x1d\x14\xf8\xe6\xc3\x4b\x5e\x45\xe6\x57\x61\x26\xee\x4f\x59\xbe\x32\x25\xe9\xc1\xa3\x27\xa6\x10\x91\xaf\x26\x33\xea\xb8\xd4\xfa\xed\x7d\x08\xe7\xab\x01\xca\xaf\x99\x28\x1e\x8a\xf2\x54\x61\xea\xdf\x48\xc8\xde\xe2\x41\x97\x4d\x74\xce\xdc\x4b\x38\x1e\xd3\x5b\x97\x43\xbe\xf7\x0c\xe4\x53\xe6\xe6\x89\x4d\x7f\xf2\xd2\x53\x21\xa3\x60\x17\xf9\xa5\x52\x26\x7c\x97\xc5\xe8\x84\x3e\x27\x77\xda\xb0\xa9\x1f\x4e\xf0\x80\x3e\xc8\xa0\xd9\x57\x3e\xf7\x9b\x33\xef\x80\xe6\xc6\xc2\x9a\x43\xfa\x23\x63\xcd\xb3\x7f\xf5\xb4\x8a\xe9\x22\x25\xf4\x38\x7c\x27\xca\xd8\x31\xbe\x98\xee\x66\xa2\x40\x05\x3f\xde\xf3\xf0\x58\xdf\x7c\x17\x58\x71\x3f\xf6\x2d\x87\xfa\xdd\xce\x5b\xef\xb9\xe0\x15\x66\x55\x8f\xfd\x2f\x8b\x89\xf7\xa6\x40\xc3\xf8\xf1\xd4\x83\xbb\x2c\x53\xc1\x58\xa3\xf2\x46\x40\xec\x4f\x5d\x6c\xde\x02\xa3\x8b\x24\xb5\xaf\x84\xd1\xe3\x04\x9b\x21\x9c\x0b\x18\xad\xdb\x2e\x52\xb2\x3d\x36\x79\xea\x2d\xef\x38\x44\xe7\x17\x97\x17\xc7\x97\x43\x4f\x6d\xb9\x57\x92\x47\xdb\x45\x76\xd6\x61\x3f\x42\x8c\x97\x87\x47\xdb\x63\x6f\xc0\xc3\x3c\x9c\x79\x70\x10\xce\x34\x3c\xdb\x2e\xf4\xc5\x1b\xb8\xb1\x3d\x36\x5f\x26\x39\x10\x4c\xdf\x7f\xb1\x1c\x5c\x58\xbd\x59\x29\xac\xb7\x09\x2b\x00\x71\xe7\xdc\x63\xbf\xad\x17\xeb\x1c\xca\xf8\x6e\x17\xc3\x57\x0d\x74\x71\xd1\xbd\xea\x93\x7a\x15\x4c\xb0\xe8\xef\x74\xb3\x98\xb3\xea\x86\xe1\xe6\x36\xb3\x5d\x40\x64\x0d\x38\xe1\xc4\x8b\x27\x97\xc0\xb3\xed\x71\x38\xba\xb8\xb4\x6d\xc8\x9e\xfa\x29\xf3\x81\xb5\x57\x0d\xd5\x3a\x52\x3d\x90\x92\x91\x58\x6f\xd4\x8e\xa9\xde\xe3\xf6\x81\x34\xda\x52\xbd\xc2\xd9\xab\x49\xbb\x26\x69\xf5\xe8\xac\x7b\xc9\x2b\x2b\x58\xf3\x2d\x40\x5f\xcb\xd6\xfd\xbe\x9c\x27\x1f\x2c\x65\x3b\x11\xdc\x43\x37\x6d\x89\x20\xa7\xb0\xfe\xef\x4c\x98\x34\xbc\xd0\x7b\xe3\x50\xd0\x17\x63\x36\xbe\x9d\x8f\x7f\x54\x52\xb8\x17\xb5\x51\xe3\x27\x4e\x8e\x4d\x54\x23\xf7\xbc\x2f\x8a\xdb\x77\x51\x79\x3b\xb4\x1d\xe3\xdf\x21\x0b\xd9\xf7\xf1\xe3\x88\x7d\xe6\x1e\xe9\x26\x29\x55\xd1\xdf\xc2\x5d\xa6\xd0\x37\x25\xc3\xed\xb1\xfb\xa8\x51\x0f\x1b\x10\x7e\x17\x0c\xbf\x88\x6f\xc5\xf3\xb2\xdf\xe0\xaf\xfe\xc4\xc9\x67\xb2\x5e\xad\xd6\xac\xf7\xbe\x7c\x2e\xeb\xf5\xcf\x83\xdd\xab\xb3\x13\x9a\xf3\x00\x85\x0d\xf5\xd5\xa8\x2a\xf6\x5f\x22\x3b\x5e\xd0\xe6\x67\xb6\xb3\x85\x23\x88\x06\xe1\x61\xf2\x60\xcd\x35\x7d\xa3\xca\xaa\x20\x60\x93\x8a\x40\x5f\xa7\xf6\x50\x2a\xba\xd6\x91\x50\x85\x8e\x6e\x7b\x3c\x7c\x82\xf6\x9d\x56\x23\x0b\x4f\xab\xe3\xc1\xd0\x58\x30\xb4\x5a\x60\x90\x72\xfc\x3b\x44\x61\x7e\xbe\xf1\x5e\xfd\x56\x2f\x25\xa1\x39\xd3\xd6\x2c\x5c\xb6\x47\x24\xc1\x4b\x94\xa3\xba\x94\x0d\x18\xce\x3a\xa4\x2a\xda\x73\x8d\x09\x6a\x3e\x8b\x24\x79\xc8\xb4\xe3\x24\xf1\x2e\x65\xff\x1d\x00\x00\xff\xff\x19\x70\x39\x8f\xb3\x5d\x00\x00"), + }, + "/src/internal/reflectlite/swapper.go": &vfsgen۰CompressedFileInfo{ + name: "swapper.go", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 651157500, time.UTC), + uncompressedSize: 838, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x94\x52\x4d\x8f\xd3\x30\x10\x3d\x7b\x7e\xc5\x23\x42\x28\xd6\x56\x69\xf7\x5a\xa9\xdc\x00\xad\x58\xd8\x43\x25\xee\x6e\x3a\x6e\x6c\x52\x3b\xb2\x9d\x16\x68\xf3\xdf\x91\x93\xb0\x95\x40\x5a\x2d\x87\x48\x93\x79\x6f\x3e\xde\x1b\x2f\x97\xb8\xdb\xf5\xa6\xdd\xc3\x46\xa2\x4e\xd5\xdf\xd5\x81\x11\x58\xb7\x5c\xa7\xd6\x24\x26\x32\xc7\xce\x87\x84\xe2\x60\x52\xd3\xef\xaa\xda\x1f\x97\x07\xdf\x35\x1c\x6c\xbc\x05\x36\x16\x44\xba\x77\x35\xb6\x67\xd5\x75\x1c\xca\xd8\x9a\x9a\x61\x5c\xe2\xa0\x55\xcd\x97\x41\x22\xe3\xa5\x59\xc0\xe6\xb4\xc4\x85\xc4\x09\xeb\x0d\xbe\xa9\xb6\xe7\x27\x3d\x55\x48\x12\x46\xe3\x54\x7d\x36\x6e\x5f\x4a\xbc\xd9\x60\x3b\x36\xba\x90\x10\x9d\x72\xa6\x2e\xdf\x8d\xfc\x0f\x21\xf8\x70\xf9\xc2\xa9\xf1\xfb\x35\x8a\x79\x6a\xb1\x40\x2e\x5c\x3f\x37\x18\x24\x89\x81\xc4\x72\x89\x8f\x2a\x26\x74\x2a\x35\xd0\x3e\x60\x9c\x15\xe1\x35\xa2\xf9\xc5\x58\x41\xb9\x3d\xee\x2b\x7c\xf5\xa9\x31\xee\x80\xe4\x11\xcf\xaa\xab\x48\x9c\x1e\xd9\xe5\x2d\x7b\xe3\x52\x79\xaa\x1e\xd9\x95\x52\x92\x88\x67\x93\xea\x06\x23\x7a\x21\x51\xab\xc8\x58\xad\x49\x88\xc0\xa9\x0f\xee\x1f\xad\x98\x96\x2f\x66\x6b\xd7\xf8\xe3\xcf\x9e\x7f\xc0\xf7\x29\xaf\x12\x94\x3b\x70\x21\x31\xcc\xfd\xee\x5f\xe8\x47\x42\x64\xa3\x4c\x76\x68\x85\xeb\x15\x76\x8a\x46\x40\xbc\x7e\x58\xa6\x0f\x34\x7e\x03\x09\x95\x95\xda\x58\x3d\xe4\xb3\x39\xd5\x3e\xed\x2c\xd7\x69\xbe\x4c\xf5\x89\x53\x59\xbc\x55\x21\xa8\x9f\xb9\xd0\x6b\xfd\x0a\xba\xd7\x3a\x72\x2a\x64\x26\x95\x92\x5e\xd0\x63\xf4\x64\xb2\x91\x78\xbf\x99\x9c\xbd\x5e\xa7\x94\xbd\xa5\x46\x81\xff\xa5\x2f\xcb\x33\xb8\xdb\xc0\x6b\x4d\x42\xd8\x5b\x98\x8e\x5d\x56\xa0\xaa\x87\x5c\x59\x9a\xcc\x56\xd5\x96\xd3\xfc\xbf\x78\x86\xac\xfc\x0b\xb3\x0b\xa4\x63\x37\xbe\xae\x81\x7e\x07\x00\x00\xff\xff\x9b\xd0\xc3\xec\x46\x03\x00\x00"), + }, + "/src/internal/reflectlite/type.go": &vfsgen۰CompressedFileInfo{ + name: "type.go", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 670154100, time.UTC), + uncompressedSize: 2300, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xa4\x55\x4d\x6f\x1b\x37\x10\x3d\xef\xfe\x8a\xc9\xa2\x28\x48\x5b\xa5\xed\x43\x2f\x8e\x55\xa0\x30\x9a\xc0\x35\x1c\x17\x70\x9a\x8b\x61\x14\xd4\x8a\x94\x29\xef\x92\x0b\xee\x6c\x1b\xc1\xd1\x7f\x2f\x66\x48\x7d\x58\x5d\x27\x28\x72\x30\x40\x0f\x67\xde\x7b\xf3\x66\x96\x3a\x39\x81\xe3\xd9\xe0\x9a\x39\x2c\xfb\xb2\xec\x74\xfd\xa4\x17\x06\xa2\xb1\x8d\xa9\xb1\x71\x68\xca\xd2\xb5\x5d\x88\x08\xa2\x2c\xaa\xc1\xf7\xda\x9a\xaa\x2c\x8b\x6a\xe1\xf0\x71\x98\xa9\x3a\xb4\x27\x8b\xd0\x3d\x9a\xb8\xec\x77\x87\x65\x5f\x95\xb2\x2c\xed\xe0\x6b\x10\x08\x47\x11\x57\x9d\x91\x70\x19\xda\x4e\x47\x3d\x6b\x8c\x90\x30\x0b\xa1\x81\xe7\xb2\xe8\xff\x71\x58\x3f\x02\xaa\x6b\xe7\xe7\x42\x52\xa8\xd6\xbd\x81\x77\x83\xaf\x27\x70\xd7\xb8\xda\x4c\xe0\x46\x77\xe7\x65\x51\x44\x83\x43\xf4\x60\x75\xd3\x9b\x9c\xf6\x6b\x8c\x7a\xb5\x77\x87\xea\xb7\xc6\xb4\x42\xaa\x7d\xb2\x9c\x7b\x87\x71\xa8\x91\x92\x6d\x88\xe0\xe0\x7c\x0a\xa7\x6f\xc1\xc1\x05\xa0\xfa\x30\xb4\xef\x9c\x69\xe6\x42\xbe\x05\x77\x7c\x4c\x32\x8a\xc2\x22\xe5\xa0\x4a\x37\x4e\x52\xcc\x59\x78\x63\x51\xe1\xaa\x7b\x41\x91\x0a\x0e\x14\x16\xc5\xba\xe4\xbf\x75\xb9\xd5\x17\x07\x53\xae\xff\xeb\xcd\x55\xff\x49\x47\xa7\xe7\xae\xde\xf3\xc6\xd9\x9d\x2f\x6f\xa6\x6c\x09\xf3\x74\xda\xbb\x5a\x54\x79\x4c\xe7\x7b\xc5\x10\x2c\xf8\xe0\x7f\x62\x78\x42\xae\x24\xb3\x23\x77\x22\x8e\x28\xfe\x91\x08\x45\x9a\xa5\xfa\x23\x38\x8f\x26\x0a\x94\x72\xa7\x11\x55\x18\xf0\x32\x0c\x1e\x7f\x14\x67\x17\x17\x67\x3f\x33\xfd\xe9\x98\xee\x27\xe7\xe7\x04\x28\x64\x0e\x91\xc0\x8c\x23\x72\xd2\x21\xd7\xb2\x57\x57\x74\xf0\xba\xb9\x9d\x2d\x4d\x8d\x02\xa5\x7a\x6f\x50\xb8\xf9\x75\x86\x93\x52\x8e\xb1\xe5\x41\x80\xf3\x28\xa1\xe7\x71\x72\x68\xc4\xac\x34\xec\x51\xbb\x52\x49\x76\x2a\xa1\x8c\x79\x95\x6e\x5e\x77\xcb\x59\xde\x9d\x53\xf8\xf2\x05\x1c\xfc\x32\x85\xc6\x78\x81\xa8\x2c\xc1\xf7\xf2\x2b\xd4\xce\xcf\xcd\x67\x08\x03\x92\x88\x59\x18\xfc\xbc\xcf\xdc\xbb\x09\x24\x94\x7b\xf7\x30\xe6\xc3\xb5\x59\x09\x09\x1f\xb3\xdd\x07\x9d\xdf\xe8\x6e\x94\xfb\xda\xac\x36\x4d\xb7\xba\x1b\xeb\xb8\xd5\xdd\xb7\x97\x23\xf0\xb8\x11\xd5\x93\x59\x8d\x0e\x69\xf7\x29\xd1\x9c\xfe\xdf\x68\x36\xb5\xdf\x3f\x9d\x2c\xf7\xe5\x4c\xc6\xe4\xde\x18\x7c\x0c\xdb\xa5\x12\x6d\x0e\xc8\x43\xe1\xd3\x29\xf0\xd6\x5a\x5d\xb3\xeb\x5b\x25\x6e\x13\x7d\x5d\xcc\xde\x5c\x37\x74\xa9\x9b\x96\xff\xeb\xd3\x33\x63\x3e\xd3\x4b\x6b\xe6\x29\xa5\x17\xaf\xed\x58\x2e\x1a\xdf\xb0\x54\xfc\x72\xc5\xa2\xf6\x8b\x8d\x7f\x1d\x71\x65\x04\xda\xae\xa2\xf3\xba\x35\x49\x00\x9d\x6e\xad\x15\x1d\x9f\x64\x59\xb4\xea\x03\x5d\x4e\x81\x93\x38\x4a\xaa\x6c\x43\xf9\xb6\xd1\x0b\x41\x6f\x12\x25\xe2\xaa\x4b\x18\x64\x6a\xc2\xa0\x18\x25\x7f\xeb\xe9\xe1\x3c\xea\xd5\xb3\x34\xfd\x64\xc4\xfd\x03\x65\x4e\xe0\x74\x02\x67\xc7\xd4\xb2\x45\xe5\xbc\x90\x39\x6d\x0a\xba\xeb\x8c\x9f\x0b\xe7\x27\x80\xc4\x11\x22\xfc\x35\x01\x1d\x17\x04\xc1\xed\x42\x2e\x61\x93\x0e\x6b\x74\x5c\x24\x37\xc8\xa0\x11\xd2\x4c\x19\x06\x4c\x9c\x19\x3f\x1a\x7c\x81\xcf\xf7\x4c\x40\x38\x5b\x86\x30\x20\xe7\xe6\x11\x73\x0d\xf9\x74\x6b\x99\x9c\xaf\x2d\xaa\xfd\x27\x9f\xbd\xe6\xef\x79\x0a\x2d\x96\x45\x17\x03\xfb\xb9\xec\xd5\xfb\x26\xcc\x74\xa3\x2e\x75\xd3\x88\xea\x87\x34\xb9\x3b\x83\xd5\x04\xbe\xf2\x8e\xfe\xde\xa7\x57\x54\x5d\xd1\x1e\x08\x97\xe2\x15\xc1\x56\x52\xdd\x61\x74\x7e\xc1\x93\xf4\x99\xe5\x46\x3f\x19\xd2\x28\x68\x4c\x02\x1f\x5d\x0f\x47\xcb\x5e\x25\x5c\x36\x6c\x68\x8d\xc7\x1e\xee\x1f\x76\x71\xfe\xc0\xd3\xee\x3f\xaf\xd9\x87\x58\xff\x1d\x09\x71\x9b\x7f\x7f\xfa\xb0\x5b\x7f\xba\x65\x21\xa4\x43\xe6\x96\x74\xd7\x35\xab\x6a\xc2\x97\x7b\x44\xf7\x67\xe7\x0f\x64\x20\x3b\xc3\xbf\x7c\x53\xf8\xa4\x9b\xc1\x3c\xb7\xa8\x36\xbf\x2c\x13\x38\xd8\x25\xeb\xd5\x9f\x1c\x11\x52\x4e\xc0\x36\xeb\x92\xca\xd9\x04\x98\x82\xdb\x3e\x0b\x6d\xb9\x2e\xff\x0d\x00\x00\xff\xff\x8a\x4f\x28\x15\xfc\x08\x00\x00"), + }, + "/src/internal/reflectlite/utils.go": &vfsgen۰CompressedFileInfo{ + name: "utils.go", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 692153200, time.UTC), + uncompressedSize: 2553, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x8c\x56\x4d\x6f\xdb\x46\x10\x3d\x8b\xbf\xe2\x55\x05\x22\x32\x96\x44\xdb\xbd\x09\xf6\x21\xa9\xdd\x22\x28\xdc\x04\xb5\xd3\x4b\x5a\x04\xeb\xe5\x90\xda\x9a\xdc\x65\x76\x87\x4a\x84\xc4\xff\xbd\x98\xe5\x87\xe4\xd4\x87\xfa\x60\x70\x77\x66\xde\xcc\xce\xc7\x1b\xe5\x39\x4e\xee\x3b\x53\x17\xf8\x27\x24\x49\xab\xf4\x83\xaa\x08\x9e\xca\x9a\x34\xd7\x86\x29\x49\x4c\xd3\x3a\xcf\x48\x93\xd9\xbc\xb3\x41\x95\x34\x4f\xb2\x24\xe1\x7d\x4b\xf8\x79\xab\xec\x95\xf1\x30\x96\x93\x44\x3b\x1b\xa2\xda\x1f\xa4\x77\x72\x3b\x4a\x8f\xff\x2e\x71\x86\x8b\x0b\x18\xc7\x0a\x79\x8e\x8b\x95\xde\x2a\x9b\xcc\x6e\xc9\x16\xdf\xab\x3e\xf7\x97\xe7\x10\x83\x8b\x55\x32\x7b\xed\x78\x2b\x26\x97\x18\xfd\x7d\xc3\x73\x30\x83\xc9\x14\x33\x79\xef\xfc\x2d\x7b\x63\x2b\x04\xf6\x9d\x66\x7c\x4d\x66\x41\xbe\x8d\xad\x92\xc7\x24\x29\x3b\xab\x91\x12\x5e\x1e\xa9\x66\xb8\x96\x43\x9a\x0d\x7a\x62\xe3\x89\x3b\x6f\x41\xeb\x20\x56\x3b\xe5\xe5\xf1\xd7\xde\xdf\xee\x2d\xab\x2f\xb8\xc4\x8b\x23\x80\xaf\x73\x63\x77\xaa\x36\x05\x42\x14\xcf\x1f\x25\xa2\xe8\xaa\xb3\x9f\x3a\xc7\x94\x8e\x31\x64\x48\xfb\x8f\x65\x1f\x6c\x26\xce\x4c\x89\x9a\x6c\x1a\x32\x5c\xe0\x5c\x2e\x46\xf7\x61\x09\x6b\xea\x64\xf6\x18\x75\xc2\x87\xd3\xbf\x71\x79\x89\xc5\x5f\x8b\x05\xbe\x7d\x3b\x9c\xe7\x8b\x68\x14\x55\x7a\xa0\xd5\x59\x94\x44\x0d\x11\x4d\x80\x1f\xce\xb0\xc1\xa4\x33\xc0\x0b\xfe\xa8\x31\x9f\x2f\x31\xbd\x33\x7a\x7e\x1a\xcb\x63\x92\xe4\x39\x6e\x88\xb7\xae\x80\xa7\xd6\x53\x20\xcb\x01\x0a\xc1\xd8\xaa\x26\x34\x51\xb4\xee\x0b\x32\xe8\x1d\x6a\x91\xe7\xf8\x5d\x35\x04\x13\xc0\xdb\x51\x19\x56\x35\xb4\x8e\xc2\x77\x0f\xd5\x3b\xc5\xdb\x51\x3e\x36\x6d\x2b\x77\xbc\x55\x8c\x4f\x9d\xaa\x4d\x69\x48\x3c\xd6\xee\x33\x79\x68\x15\x08\x69\x67\xe9\x8b\xf4\x32\x15\x59\x04\x3a\x46\xc6\x1b\x16\x40\x6a\x5a\xde\xa3\x74\x1e\x5d\xdb\x4e\x86\x93\xd9\xb1\x49\xe8\xa3\xb9\xdb\x12\xb4\x6b\xee\x8d\x55\x6c\x9c\x85\x2b\xa7\x00\x95\x2d\xfa\x97\x74\xd6\x7c\xea\xa8\xde\xc3\x14\x64\x79\x0c\xad\xc7\x8a\x20\xc6\x4e\x67\x04\xe2\x1e\xf9\x96\x08\x5b\xe6\x36\x6c\xf2\xbc\x72\xb5\xb2\xd5\xda\xf9\x2a\xf7\x54\xe6\xa1\x25\xfd\xe3\xfb\x88\x6a\x29\x84\x8f\xae\xfc\x38\x41\xfb\x90\xcc\xa2\x57\x60\x6c\xea\xd9\x18\xd1\x70\x4e\x66\x77\x92\x79\xf4\xff\x0f\x99\x90\x7a\x24\xb3\x5f\xa4\x29\xf1\xa7\xaa\x3b\x12\x59\xec\xd1\xcf\x86\xb7\xf0\xa4\xc9\xec\xc8\x43\x05\x94\xc6\x07\x86\xf2\x55\xd7\x90\xe5\x64\xf6\xc6\x16\xf4\x45\x88\xa0\x1f\x39\x13\x8f\x92\x47\xf1\xb1\xee\x6b\x3c\x34\xc6\x2b\xdc\x92\xd0\x8b\x4c\x6a\x41\x41\x7b\x73\x4f\x7d\x29\xb5\x6b\x9a\xce\x1a\xdd\x67\xb2\x30\x9e\xf4\x98\x53\x85\x10\x8d\x62\x45\x86\xce\x39\xc0\x44\x02\x92\xbe\x79\x7b\x77\xbd\x91\x92\x04\xc2\x4e\x1e\x10\xd0\x74\x81\xd1\x28\xd6\x5b\xac\xd7\xb9\xef\x2c\x9b\x86\xf2\x1e\x6c\x5d\xb9\xcd\xf0\x79\x65\xfc\xfa\x88\xc3\x3e\x3e\xe1\x90\x83\xa3\xcb\x48\x5d\x42\x58\x72\x23\x7c\xf3\x5f\x82\x92\x96\x11\xee\xc3\xc5\x2a\x32\xd2\xa8\x2d\x3c\xf5\xbc\xf6\xc5\x4a\xf4\x37\xa3\xe2\x15\x95\xaa\xab\xf9\xa9\x62\xd1\x5f\x0a\x6b\xc4\x1c\x0e\x2f\xe9\x2d\xa4\x75\xa7\xe9\x8a\x90\xad\x0a\x81\x0a\xb0\x83\x1f\xde\x9a\xc4\x66\x35\xff\x23\x23\x4f\xa0\xfb\x54\x3f\xf5\x76\x98\xd5\xc2\xf8\xa3\xec\x8c\xb1\x1e\xb2\xb3\xc4\xd1\xdb\xdd\xa4\x3b\xbc\x65\xc6\xfb\x16\x2f\x7d\xf4\xf0\x1d\x5f\x5b\xaa\x87\x76\xd4\x5b\xa0\x5f\x3c\xeb\x77\xce\x58\x26\x7f\xa4\x93\xcc\x76\xaa\x7e\x46\xdc\xb2\x97\xb7\x17\x8a\x15\xd2\x61\x2d\x64\x12\xc0\x20\x18\x5a\x19\xf7\x5d\x59\x92\x47\x3a\xec\x90\xec\xc0\xff\x25\xca\x5a\x55\x59\xcc\xd6\x6b\x12\x0a\x20\xcd\x54\xe0\x37\x63\x8b\x6c\xa0\xa9\xbb\xb7\x57\x6f\xd3\x66\x57\x28\x9b\x6d\xd0\x05\x42\xb9\x7e\x30\xb6\x48\x33\xa8\x4a\x19\x0b\x67\x35\xa1\x31\xc5\x2a\xb0\xd2\x0f\x30\xb6\x36\x56\x96\x47\x45\x1c\x70\x4f\xcc\xe4\x23\x6b\x0b\x66\x5a\xbe\x10\x87\xf2\x79\xa3\xc2\x43\x86\x1f\x2e\x31\x39\x15\x7e\x6e\x95\x35\x3a\x7d\x11\xe7\x32\x2e\xa3\xaf\xfd\xd4\xca\xac\xa7\xd9\x72\xf2\xfd\x98\x09\x25\x4f\xa3\x16\x4b\x75\xa7\xaa\x91\x2e\x59\x55\xe3\x0e\x8b\xac\x33\xd4\xb2\x34\x54\x17\xd2\x23\x62\xf6\x7a\x0f\xed\xec\x4e\x08\xc5\xd9\xe5\x91\x49\x80\xf2\x04\x25\x52\xad\x98\x26\xca\x13\x23\xd7\xca\x41\xd5\xf5\x1e\xa1\x55\x9a\x56\x81\x5a\xe5\x95\x84\xff\x40\xfb\xcd\x3c\xce\xe3\x1c\xad\x32\x3e\xc4\x66\xbc\x56\x7a\x2b\xa2\xbe\x79\xad\xb3\xab\x9e\x7d\x87\xe8\x64\x16\x4d\x60\xf9\x74\x65\x14\x6b\x67\xd9\xbb\x3a\xe9\xcb\xef\x95\x66\xf2\x01\x8e\xb7\xe4\x85\xf8\x6d\xef\x17\xe9\xfb\x93\xd3\xd3\xf3\x53\x2c\xb0\xc8\x96\x88\xbb\x75\xb8\x3b\x97\x3d\x98\x2d\x05\x40\xb8\x59\xbb\xda\xd9\x5e\xf4\xd3\x2b\x2c\x36\x8b\x6c\x8d\x3e\xaa\x18\xab\xc4\x15\xad\x0b\x74\x32\x5a\x38\x60\x7c\x17\x82\x80\xfd\xea\xc6\xc0\xe5\x67\x93\x57\xf5\xb0\xe8\x47\xae\x9a\xea\x30\x72\x70\x6c\x33\x91\x85\x9b\x2e\xf0\x8d\xcc\x63\xfa\x59\xd6\xd7\xb8\xfc\xf9\x6c\x09\x3e\x8f\x04\x3a\xfe\x04\xe0\x33\x69\x0b\x3e\x3f\x6a\x88\x68\x72\x82\xf9\x06\x73\x9c\x80\xcf\xd6\xfd\xef\x8d\x34\x93\x4b\xd1\x8e\xd7\xe7\xd3\xf5\xd0\x1d\xff\x06\x00\x00\xff\xff\xbf\x8f\xe3\xe4\xf9\x09\x00\x00"), + }, + "/src/internal/reflectlite/value.go": &vfsgen۰CompressedFileInfo{ + name: "value.go", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 712153300, time.UTC), + uncompressedSize: 15476, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x54\x41\x6f\x2a\x37\x10\x3e\xaf\x7f\xc5\x28\x97\xec\x12\xd8\x4d\xdb\x5b\x14\x0e\x15\x69\xd2\x48\x55\xa9\x92\x48\x39\x20\x1a\x19\x7b\x80\x49\xbc\xb6\x6b\x7b\x83\x10\xca\x7f\xaf\xbc\xbb\x04\x48\xe0\x85\xf7\xa4\x77\x02\x79\x66\xbe\xf9\xbe\x6f\x67\xa6\x28\xe0\x6c\x52\x91\x92\xf0\xec\x19\xb3\x5c\xbc\xf0\x19\x82\x35\x4a\x31\x46\xa5\x35\x2e\xc0\x49\xa0\x12\x4f\x18\x2b\x8a\xfa\xfd\x0a\xbd\x00\xf2\xc0\x41\x9b\x9e\xb1\x40\xa5\x55\x58\xa2\x0e\x3c\x90\xd1\x60\xa6\xc0\x35\xdc\x16\xc3\x3a\x19\x1d\x4c\x8d\x83\x9b\xe1\xef\x77\x83\x3f\xfb\xcf\x3e\x67\x45\x11\x81\x6e\x83\xff\x58\x48\x1e\x26\xdc\xa3\x04\xa3\xe1\x6f\x3e\xf8\x0b\x48\xc3\x4c\x80\x30\xa5\xa5\x88\x93\x7a\x44\xb8\x19\xde\x0d\x87\x0f\x85\x77\xa2\x20\x1d\xd0\x69\xae\x8a\xd8\xa7\x98\xca\xa7\xf8\xfb\xa4\xb9\x50\xf9\xcc\x64\xdd\xd8\x65\x52\x05\xa0\x00\xd2\xa0\x07\x7c\x45\x0d\x0a\xbd\xcf\x59\x58\x5a\xdc\x48\xf1\xc1\x55\x22\xc0\x8a\x25\x42\x19\x4f\x7a\x06\x13\x63\x14\x7b\x63\x6c\x5a\x69\x01\xa9\x95\xd0\x59\x27\x67\x40\x9a\x42\x3a\x95\xd0\xb9\xbe\xca\x00\x9d\x33\x0e\x56\xe0\x30\x54\x4e\x83\x26\x05\x07\xca\x22\x34\xa6\x19\xac\x0e\xc4\xf1\x95\x44\x88\x71\xb0\x32\x5f\xf3\xe8\x43\x70\x15\x1e\x82\xb4\x0e\x2d\x77\x98\x96\x46\x22\x90\x0e\x5d\x20\x7f\x4d\x0a\x6b\xfa\xef\xdc\x58\x42\xd3\x6d\xcc\x15\x4b\x92\x96\x2e\x3a\x37\x68\x5e\xd3\xa6\x32\x63\xc9\x1b\x4b\x36\x62\x0e\x79\xd0\x76\xbe\x43\x2e\xd3\x7d\x3d\xd7\x7e\x58\x99\xaf\x49\x9e\xba\xd3\x35\xbf\xec\x0b\x41\x8f\x8e\x02\x1e\x8d\xbb\xf8\x1a\x77\xc1\x29\xfc\x2c\x97\xfe\x70\xee\x81\x4a\x34\x55\x38\x64\x56\xec\x7e\x8c\x53\x35\xcb\x63\x6c\x8a\x89\x47\x79\xd4\x20\xee\x35\xe8\x03\xdc\x80\x6b\x81\x0a\xe5\xbb\x4b\xdb\x83\xba\xfd\x85\x8c\x52\x7c\xa2\xe2\x20\xc7\xa6\x9b\x6e\xbb\x73\x5a\xef\xc6\x3d\x86\x2b\xe4\x52\x91\xc6\x34\x40\x3c\x21\x79\x74\xea\xdb\x4b\xb3\xae\x8c\x86\xfd\x78\x75\xed\xce\xf7\x94\x17\x05\xfc\xd3\x8a\x74\x64\x83\x71\x6d\xdc\x43\x98\x23\xc8\xcd\xf3\x04\xe3\x74\x54\xf1\x4a\x4d\x96\x75\xb0\x39\x72\xf5\xb5\x31\x0e\xfe\xad\x48\x07\x1b\x5c\x7a\x9e\x01\x4d\x63\x82\x43\x20\xaf\x4f\x03\x18\x8d\x39\x3c\xcc\xc9\xc7\x43\x67\xb4\x5a\x36\x30\xf1\x3a\x06\xf4\x81\xf4\x2c\x6f\x64\xec\x32\x49\x33\x68\x31\xe3\x50\xb6\xb4\xb7\xda\xb0\x86\xfe\xc0\xd8\x65\x3c\xbd\x7e\xa9\x45\xee\x2a\x1d\x25\x3f\xdd\x63\xc9\xc5\x7f\x15\x39\x6c\xa1\x3f\x07\x52\x0f\x9d\x08\xf6\xdb\xaf\x59\xbb\x05\x1d\x0f\xfd\x3e\x9c\xd7\x2b\x20\xe6\x70\xd1\x87\x92\xbf\x60\x2a\xe6\x5c\x37\x93\xc6\x92\xc4\x63\xf9\xc8\x29\xa0\xf3\x23\x3f\x86\x3e\x70\x6b\x51\xcb\x74\xe7\xb9\x0b\x62\x1e\x73\x2f\x7b\x62\x5e\x6f\x4c\xc7\xf7\x7a\x5f\xb0\x75\xa8\x90\xfb\x3d\x6c\xdb\xc0\x07\xb6\x1d\x7f\x76\xc6\x58\xb2\x88\x24\x77\x7a\xd7\x42\x14\xea\x74\x91\x6d\xc4\x34\xde\x45\x2a\xac\x15\xb6\x18\x9d\x8f\x63\x79\xfc\xf7\xcb\xc5\x98\x7d\xd2\xb5\xd8\x0b\x24\x51\x61\xc0\x2d\xb5\x5d\xf0\xd9\x3b\xee\x65\xaf\xde\x86\xa8\xf4\x95\xbb\x2d\x5e\xd0\x3a\x59\x72\x3b\x6a\x55\x8c\x47\xe3\x2d\x5f\xff\x0f\x00\x00\xff\xff\x9e\x79\xbb\x91\x8b\x07\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xec\x3b\xdb\x72\xdc\x36\x96\xcf\xcd\xaf\x38\xee\x4a\x29\xa4\xcd\x50\xca\x64\x6b\x6b\x4a\x49\xbb\xca\xe3\x38\x59\x65\x62\x3b\x15\x39\xd9\x07\x95\x2a\x85\x26\xc1\x6e\xa8\x49\x80\x03\x80\xad\xee\x91\xf4\xef\x5b\x07\x17\xde\x9a\x7d\xd1\x78\x76\x77\x1e\x26\x0f\x8e\x04\x02\x07\xe7\x7e\xc3\xd1\xf9\x39\xbc\x9a\xd7\xac\xc8\xe0\x4e\x05\x41\x45\xd2\x15\x59\x50\x90\x34\x2f\x68\xaa\x0b\xa6\x69\x10\xb0\xb2\x12\x52\x43\x18\x4c\xa6\x35\x57\x24\xa7\xd3\x20\x98\x4c\x17\x4c\x2f\xeb\x79\x92\x8a\xf2\x7c\x21\xaa\x25\x95\x77\xaa\xfd\xe1\x4e\x4d\x83\x28\x08\xf2\x9a\xa7\x10\xae\xe1\x77\x52\xd4\x34\x02\x31\xbf\xa3\xa9\x0e\x23\x78\x79\xa7\x92\x8f\xe6\x17\x78\x08\x26\x2c\x87\x75\xa2\xb7\x55\xf2\x57\xc6\xb3\x30\x82\xd9\x0c\xde\x48\x49\xb6\xf0\xf8\xb8\xf3\xe1\x5a\xcb\xda\x9e\x9a\x48\xaa\x6b\xc9\xe1\x4e\x25\x57\x5c\x53\xc9\x49\x61\x41\x86\xeb\xa4\xd2\x32\x0a\x26\x4f\x0e\x74\x5e\x90\xc5\x19\xfe\x73\xc5\x33\x26\xe1\xc5\x0c\x2e\x0c\x80\x35\x29\xe0\x72\xb6\x17\x40\xf2\x96\x14\x45\x38\xfd\x62\x41\xf5\x34\x0a\x26\x06\x16\x29\xf0\xf8\x9d\x4a\x7e\x2c\xc4\x9c\x14\xc9\x8f\x54\x87\xd3\x2f\x58\x4e\x52\xfa\x81\x15\xd3\x08\xce\xce\x70\x93\x5d\x4f\x05\x57\x06\x5d\x21\xa7\x91\x3d\xf7\x69\x5b\xd1\xd0\xd0\x14\x19\x14\x26\xea\x9e\xe9\x74\xd9\x27\xd3\x7c\x48\x89\xa2\xf0\x1b\xe3\xfa\x3f\xff\x23\x86\x2b\xfc\xdf\x25\x2e\x1b\xa4\x07\x90\x92\x0f\xf4\x3e\x6c\x6e\xfd\x62\xc9\x16\xcb\x69\x14\xb7\x78\x7c\x51\x88\xfb\x69\x14\x35\x50\xdf\x8a\xb2\x2a\xe8\x06\x01\xbb\x1f\xbf\xfe\xd3\x9f\x4f\x85\x2e\x29\x29\xfa\xd0\x59\x49\x16\x5d\xf0\xd7\x05\x4b\xa9\x05\xe7\x58\x36\x9b\xed\x61\x8a\x5d\xe2\x86\x73\x86\xea\x71\x0c\xda\x5d\x76\xcf\x5c\x52\xb2\x32\x3f\x3e\x99\x7f\x39\xbd\xff\xdd\xcb\x72\x3f\xe6\x04\x75\xca\x21\xea\x8e\x24\xd7\xe6\x8b\xc8\x73\x45\xf5\xb4\x4b\x94\x5b\x1a\xdb\x5d\x50\xbe\xd0\xcb\xde\x6e\xb7\x34\xb6\x3b\x25\x15\x49\x99\xde\xf6\xf6\x37\x8b\xee\x84\x25\xda\x9e\x0b\x1c\x59\x4f\x07\x55\x9c\x14\xc9\x6f\xc6\x16\xc3\xc8\x6a\xfa\x31\x6b\x78\xda\xb1\x46\xa2\x14\x5b\xf0\x4f\x22\x4c\x05\xd7\x74\xa3\x41\x69\xc9\xf8\x22\x86\x4c\x69\x78\x29\xf5\xb6\xa2\x31\x68\x22\x17\x54\x83\xb5\xfb\xe4\x17\xc1\x10\x78\x64\x41\x34\xb6\xdb\x18\xd8\x7b\xaa\x97\x22\xeb\x58\x18\xcc\xa0\x24\x2b\x6a\xd7\xcd\x21\x7f\x5b\x0c\x6b\x8b\xb8\xb3\x80\x87\xc0\x6a\x4f\xc6\x24\x3a\x9e\xed\x1b\x83\x1d\x99\x17\x34\xcc\x14\xee\x36\x22\x45\xb5\x3a\x3f\x87\x8f\x6b\x2a\xef\x25\xd3\x14\x10\x4b\x50\x02\xf4\x92\x68\xd0\x4b\xba\x85\x92\xe8\x74\x99\xd8\x7d\xd7\xa4\xa4\x50\xd2\x52\xc8\x2d\x14\x64\x2b\x6a\x1d\xe3\x66\x2e\x60\x49\x64\x09\x99\xe0\x14\x77\xe6\x46\x77\x1c\x1d\x21\xfe\xfb\x26\xcb\xe4\x63\xe3\x32\x22\x78\x74\x5f\x13\x29\xc2\xc8\x9e\x78\x9c\x01\xae\x20\x76\xce\x70\xa3\x56\x62\x86\xd4\x07\x87\x78\xa5\x65\x0c\x79\xf1\x14\x38\x12\x19\xda\x5c\x49\xb9\x56\x43\xd2\x58\xee\x19\x3e\x9b\x01\x67\x85\x35\x0a\xbf\xe4\xa4\xf0\x07\xaa\x75\xa6\x74\xe4\x94\xe4\xfc\x1c\x7e\x34\x7e\xf7\xa7\xeb\x4b\xb8\x5e\xb1\x0a\xf9\x00\xeb\x8e\xd3\x34\x1a\x81\x3e\xca\xb8\xa7\xe4\x4a\x7d\x60\x45\x18\x01\xcb\x41\x69\xa2\x0d\x2a\x16\x4e\xfb\x5f\x2e\x45\x09\x75\xa5\xb4\xa4\xa4\x4c\xc0\x78\xb8\x77\x7f\xba\x82\x39\x2d\xc4\x3d\x64\x82\x2a\xe0\x42\x43\x45\x38\x4b\x63\x20\x3c\x03\xa6\x81\x53\x9a\xa9\x21\x24\x2d\x40\xd6\x3c\x86\x05\x5b\x53\x0e\x4c\x2b\x48\x6b\xa5\x45\xd9\xb2\x81\x68\x26\x38\xca\x61\x63\xc4\x80\xac\x6b\x30\x0e\xd7\xce\xf5\x22\x9b\x3f\xd4\xa5\xd5\x24\x4b\x96\xd5\xb1\xc9\xcb\xf0\x25\xf3\xdb\x1f\x9e\xa2\xd0\xb2\x2b\x82\x19\x6c\x90\x43\x40\x0b\x45\xed\x4e\x4f\x85\x65\xfb\xc6\x6b\x77\xd4\xb7\xb6\x8e\xec\xec\xf7\x18\xda\xe0\xf1\x68\x85\xde\xe0\x17\x3d\xa1\x12\x07\x48\xf2\x0f\x84\x15\x34\x4b\x82\x89\x61\x4a\x63\x55\xaf\x60\x7a\x69\x89\x02\x91\x5b\x7d\x9d\xc2\x2b\xe7\xf1\xaf\x8d\xc9\x85\x11\xee\x02\x66\x79\x4a\x1a\xcd\x47\xde\x35\x07\x90\x01\x7e\xbb\x31\xe7\x35\x91\x90\x92\xa2\xf8\x2f\x5a\x54\x54\xc2\x6e\x58\xc2\x8f\xd3\x28\x69\x79\x19\x25\x21\xfa\x80\x30\x49\x92\x2e\xc7\x3a\xe1\x78\x37\x66\x23\x90\x50\x54\x8d\x73\x60\x1c\x6e\x6e\xdd\x37\xf7\x03\x32\x17\x91\x09\x83\xc9\x44\xa3\xc8\x5f\x22\x0c\x74\xc4\x68\x29\x1c\x60\xe0\x3e\x90\xd5\xe9\x5a\x76\xae\x0d\x26\xd1\x31\x57\xf2\x47\x0c\x28\x08\x8e\x1e\xc5\x7c\xfa\x95\xa6\x94\xad\xa9\x0c\x45\x15\xc3\x1a\x11\x43\x5f\x87\x47\xa3\xd7\xaf\x5b\x08\xd7\x4b\x96\x1b\x09\x9b\x2b\xd1\xca\x7d\x16\x62\xf5\x8a\xa9\xff\x96\xa4\xaa\x68\xd6\x0b\xcb\x6e\xf3\x6e\x38\xc1\x0f\x4e\x5f\x3a\x9a\x85\xc6\x19\x36\x54\x47\x61\x9f\x5e\x77\x3e\xb2\xdc\x98\xc1\xce\x57\x8f\x51\xd7\xa5\xb7\x28\x24\xbf\xf1\x8c\xe6\x8c\xd3\xcc\xaa\x1a\xcb\x0d\x1b\x5a\x07\x61\xf5\x6d\xea\x72\xb6\xc4\xc8\xc4\x24\x2f\x97\x46\x7a\xa8\x76\xb8\x15\xd1\x43\x4b\x9b\x46\x0e\x8e\x32\x91\x1a\x6d\x4e\x54\x08\x6f\x8a\x67\xcc\xda\x34\x98\x70\x5c\x37\x26\x77\xc5\x43\x2b\x1d\x7f\xe0\xc1\x72\xee\x85\x4e\xae\xd4\xef\x44\x32\x92\xb1\xd4\xa7\x2d\x7d\x5c\x2e\xa1\x01\x69\xb0\x10\xfc\xab\xb5\x3b\xd0\x43\xc7\x98\x1f\xcb\xa1\xa0\x3c\x64\x3c\x82\xef\x80\x1f\x03\x77\xcf\xf4\x12\xb4\x10\x90\xd3\x7b\x60\xbc\xaa\x35\x10\xb9\xa8\x8d\x5b\x1d\x03\xf9\xfa\x19\x20\x4b\xc2\xb7\xfb\x60\x76\xa4\x8e\xde\x7a\x84\x05\xfc\xab\xaf\x9e\x49\xd1\xc9\xc4\x0c\x59\x7e\x76\x76\x1a\x7d\x27\x92\x16\x4c\x72\x21\xe1\x8f\x18\x8c\x23\x96\x84\x2f\x28\xda\xbb\xa3\x75\xd3\x8b\x28\x6b\x52\xb0\x6c\xfc\x46\xf4\x56\xa2\x32\x2e\xad\x56\x8c\x2f\xe0\xef\x54\x0a\x97\x32\xf8\x4b\x07\x77\x32\xbc\xf0\xe2\x5b\x60\xc8\xa8\x6f\x81\xbd\x7a\xd5\xdc\xea\xdc\x30\x6e\x60\xfc\x86\xdd\x26\xc6\x24\xa3\x18\x79\xcf\x43\x16\x7d\x0b\x2f\x36\x3a\x69\xd3\x85\x4f\xc2\x44\x80\xe8\x44\xdc\x70\x61\xa3\xfb\x8e\x98\xa8\xd6\xed\x22\xac\x8e\xdf\xf5\x48\xa3\x30\xbc\x3d\x9c\x9d\x8d\xe9\xc1\xf9\x39\x54\x92\x56\x44\x52\x50\x66\x1b\xd2\x29\x69\x49\x18\xc7\x7b\x4d\x44\xc0\x60\x59\x22\x65\x5e\x8a\x5f\x01\x0f\x26\x13\xe5\xed\xf2\x3d\x59\x51\x73\x47\x68\x88\xe5\x51\x0c\x65\x0c\x25\xa2\x41\x0b\x5a\x5a\x13\x35\x1f\x92\x77\x05\x2d\x6d\x6a\x32\x60\x67\xd9\xb2\xd3\x06\x58\xc6\x6f\xf8\x2b\x76\x6b\x03\x22\x6c\x34\xae\x6d\x1c\x57\x47\x98\x89\x17\xf9\xec\x7c\xc8\xcd\x94\x70\x8c\x58\xb5\xa2\x47\xf9\x88\x60\x06\xe1\x8e\x3b\x69\x44\x3e\xe5\xb5\x84\x27\x57\x3c\xa3\x9b\x90\x45\x26\x83\xde\x78\xf5\x17\x92\x2d\xae\xb8\x25\x00\x55\x83\xbb\xdc\x32\x74\x51\x28\x06\xfe\xea\x6b\xdc\x9c\x8a\x6a\x1b\x32\x7e\x73\xc9\x6f\x63\xb0\xa7\x8c\xaf\xe7\x37\xfc\x16\x66\x56\x18\xd6\x03\x72\xc6\x3b\xcc\x37\x42\xc5\xa5\x17\x1d\xc7\x77\xcc\xc1\xde\x4b\xc1\x17\x8d\x56\x43\x2a\x6a\xab\xdb\x4f\xc1\x84\x8b\x5a\x37\x4e\xf4\x63\x8d\x11\x27\x98\x10\xb9\x50\xb6\xb8\xbd\xdc\x09\xd8\x6f\x6c\x81\x62\xe2\x4c\x83\x40\xe4\x0c\x24\x06\x67\x04\x3d\xb3\x6c\xc0\x21\xaf\x1c\xdf\x62\xa8\xf9\xbd\x24\xd5\x4f\xca\x55\x00\xce\x50\x0c\x84\xa4\xc9\xfa\x47\xc8\x99\x36\x46\x85\x65\x7d\x29\x38\x9a\x19\x67\x45\xd4\x44\xa8\xa6\xd8\x50\x75\xa1\x15\xa2\xd3\x66\x20\xe1\x6e\xed\x91\xa3\xc6\x62\x20\x33\x77\x5b\x4c\x91\x0b\x2e\xe7\x37\x1c\xf2\x89\xff\xc5\x65\x9b\x82\x71\x56\xb8\xd5\xaf\x3b\xab\x4e\xd0\x0f\x28\x75\x5b\x4b\xe8\x04\xf9\x7a\x11\xc5\x30\x20\xd8\x2f\x3b\x44\xa3\x18\x2e\x30\x53\xcb\x68\x4e\xea\x42\x3b\x98\x88\xfe\x40\x83\x44\xad\x7b\x36\x64\x99\x8d\x7b\x6d\x5a\x40\xf5\x0d\xbb\x75\x8a\xd7\x45\x81\x8d\xa3\xc0\x5a\x14\x1a\xad\x36\xb8\xf4\x33\x4e\x49\x35\xb2\x75\xb7\x44\x7b\x4b\x2a\xcc\xd3\xb9\xb9\x7e\x65\x8b\x94\x95\x71\xc2\x0d\x0f\x57\x0d\x03\x0d\x77\x3b\xec\xb2\x19\xe6\xcf\xd4\x84\x6f\x5b\xf8\x2f\x09\x8f\xdb\xfa\xbc\xd9\xd7\xe4\x1f\xc3\xea\x14\xe5\x19\x5a\x91\x5b\x1b\x38\x33\x88\xbd\x93\x52\xc8\x87\x1d\x05\xaa\xa6\x31\xac\x9e\xc6\x4a\x4d\x47\x3b\x52\xd2\xa9\x1d\x1b\x0a\x3a\x74\x7d\x3b\x46\x90\x36\xa2\x0a\x5f\x9a\x0a\xfe\x48\x86\x85\x79\x0a\x7c\x07\x17\xf0\xf8\x08\x0c\x5e\x9b\xb4\x50\xeb\xa4\xa0\x7c\x4f\x44\x30\x40\x81\x21\x86\x80\xfa\x28\x72\x2b\xf5\x26\xee\xea\x6d\x65\xcc\x58\x27\xe8\xc3\x46\xcb\x45\x53\x1b\x3c\xfa\xc2\x71\x50\x2e\xfa\x9a\xa1\xed\xf0\xa0\x09\x4c\xc8\xa1\xde\x93\x25\x24\x2f\x86\x6d\x2b\x0c\x35\x6d\xa3\xe8\x85\x6f\x94\xed\x2c\x77\xda\x64\xfd\xb2\x46\x6f\xab\x78\x98\x80\xba\x2c\xf7\x17\x2d\x31\x76\x22\x1f\x8d\x0b\x32\x1e\x7f\xc4\xa6\xb1\x82\xe8\xb7\xf0\xc0\x5d\xd1\xb7\x00\xbc\x89\xb4\x6a\x0f\x4f\x51\x7c\x08\xe4\xa6\x5b\x86\xc0\x03\x90\x83\x2e\x0d\x81\x6f\x5a\xa0\x9d\xd4\xd9\x96\xda\x3d\xfb\xea\x58\x2b\x9e\x3b\x88\x26\x1e\x8f\x7c\xa5\xde\x98\x8a\xb2\x12\x1f\x94\x0e\x1d\x3d\x9b\x81\x1a\xf4\x82\xac\xed\x8c\xeb\x9c\x0d\xf0\x87\x74\xce\x69\xbc\xd9\x78\x44\xe3\xf7\xe8\xa7\xd7\x46\xa7\x7e\xbe\x7c\x3d\xae\x98\x0c\x5e\xb5\xd4\xf8\x3e\x98\xf7\x04\x56\x6d\x55\xbf\xa5\xf6\x6f\x6d\xfd\xd7\xd0\x56\x93\x5d\x19\x75\xd5\x12\xc5\xf4\x32\x7c\x69\xcb\xf6\xa8\xe7\x56\xfa\x7a\x8b\xd9\x8f\xd2\x72\x9f\xa6\x9a\xf3\x87\x54\xb5\xeb\x0d\x7b\x6a\xf5\x1b\xe3\xfa\xcf\x51\x57\xfd\x30\x39\x33\xea\xa3\xe5\x8d\x49\x40\x7b\xc2\xae\x71\xff\x27\xd3\x75\x1c\x88\xfc\x2c\x8d\x7c\x03\xad\x13\xc1\x8f\x46\x24\xc3\x25\x17\x93\x46\xc3\x6b\xd3\x19\xf9\x9e\x68\x12\x46\x70\xf3\xa7\x5b\x44\xa2\xd2\x12\x99\xe1\x58\xd1\xdb\xe4\x7b\x34\xaa\xae\x2a\x21\x35\xcd\x60\xbe\x6d\xba\x6f\xd3\xd1\xd0\xe7\x9a\x6d\x73\x21\x8a\x53\x82\xde\x2f\x5a\x1e\x0a\xd1\x58\x7c\xed\x6f\x8e\x37\x51\xfe\xc0\xd9\x41\x8f\x68\x49\xf8\x87\xce\xe1\x1f\x6a\x9e\x9e\x7c\x58\x2f\xa5\xb8\xff\xc0\x0a\x27\x27\x23\x84\x06\xd2\x7b\x52\x1d\x02\x34\x34\x2a\x52\x28\xea\x8f\x36\x2c\x3f\x19\x93\xf6\x05\xc6\x81\xb0\x06\xe6\x10\x1b\x4f\x76\xbc\x0d\x9a\x56\xe2\x33\x35\x0b\x85\x7a\x48\xb3\x4c\xd6\xe5\x13\xb7\x93\xf2\x9c\xb8\x63\xbe\xbb\xb8\xfe\x6c\x82\x4a\x93\xc8\x1d\x4d\xe1\xfa\x41\xe8\x98\x62\xb8\x43\xf3\x3a\xcf\x69\xf3\x2a\x33\x0a\xa2\x2f\xd4\x56\x0a\xee\xa9\x6c\x45\xb7\x6a\x1a\x77\x20\x77\x31\x7f\x0e\x83\x7f\xa6\xfc\x10\x7b\xbd\x63\x88\xa0\x63\xaf\xc7\xd8\x6c\xb3\xdf\xf7\xa4\x8a\xad\x91\xed\xa8\x88\x69\x40\x7a\x7b\xed\x06\xa3\x8b\xbe\x83\x1e\xd1\xa1\x81\xf5\x9c\x0a\xe9\xeb\xa1\x3c\xff\x01\x14\x7a\x91\xb8\x83\xd0\x73\xd8\xed\x98\x70\x88\xe5\xa6\x16\xf7\xbf\x3c\x04\x93\x75\x52\xd6\x4a\xff\x85\x76\xde\x69\xa2\x60\xb2\x71\xab\xef\x36\xd6\x3d\x9a\x35\x98\xc1\x66\xa4\xee\xbc\xb6\x4f\x6e\x89\x89\x69\x58\x65\x1e\x79\xae\xdd\xf7\x54\xda\xaf\x15\x26\x7d\xef\x68\x15\x33\x15\xd5\x76\x1a\xef\xcd\xb6\xc7\xbe\x6c\xcc\x97\xc8\xc3\xef\xb9\xa4\xc9\xb1\x27\x63\xfb\x9a\x38\xfa\x6c\xd7\x7d\xdb\xd8\x44\xed\x05\x36\x07\x32\xd0\x11\x5b\xfb\x6b\xf8\x7c\x8c\xfd\x73\x52\x30\xe9\x6a\xc0\x89\x18\x6f\x5a\xc3\xed\xe9\x9b\xa9\x00\xcd\x01\x23\xcb\x4a\xcb\x71\x0d\xf9\xcb\x56\x53\x15\x6e\xe0\xe6\x76\xbe\xd5\x87\xf4\xc4\xaf\x86\x46\xf3\xa3\xce\x0c\x80\xed\x63\x75\x92\x43\x93\x46\xec\x6f\xc3\xf8\x5b\x7d\x7f\x19\x2f\xb6\xf9\xb5\x6b\xc3\x34\xcd\xb4\x11\x8e\x75\x2f\xfe\x40\x4a\x6a\x6f\x9c\x4e\xdb\xc9\x03\x87\x4e\xef\xe3\x83\x4d\xba\x69\x76\xdd\x82\x1e\xbe\x13\xd8\x4e\xd6\xce\xc3\x73\x7b\x6c\xf8\xf4\xdc\x3d\xd0\x7d\x7c\xde\x39\xd1\x3c\x3f\x77\x4f\x74\x1f\xa0\x77\x4e\x74\x9e\xa0\xbb\x67\xfa\x8f\xd0\x96\x4d\x33\x68\x4f\x1b\xee\x9d\xa6\x37\xca\x4a\x71\x54\x27\xde\x92\x2a\xe4\xb6\xf2\x3f\x5d\x1d\xd4\x33\x06\x33\x58\x0e\x1c\xbe\xdb\x57\x7f\x3d\x3e\x02\x87\xd7\xcd\xd7\x61\x6f\x63\x44\xb1\x7c\x79\xe6\xb7\xf6\xd2\x5e\x60\xdc\x11\xe5\xbb\x7c\xf4\xfe\x90\x1a\xec\xa8\x80\xdf\xbf\x23\xff\x5d\xd9\x0f\xb6\xb6\x82\xdf\x15\xfa\x60\x6b\x47\xe2\x3c\x3a\x55\x88\x1e\xc6\x1e\x39\x62\x4a\xf3\x7f\x21\xc7\x8b\xcf\x10\x99\xe5\xc8\x98\xc0\x30\xa1\xf8\x7f\x13\x18\x3f\x28\x21\x35\x66\x8f\xff\x04\x91\x99\x77\x03\x16\xc3\xdd\xa0\xed\xe6\x9f\x6a\x53\x52\xe1\x17\xd7\x41\x70\xcf\xb5\x0a\x60\xf8\x2e\xeb\xf3\x2a\xc6\xb3\x41\x6a\x85\x2b\x3b\xcd\xba\x7e\x0c\x37\x1d\x88\xf6\xad\x7e\xdc\x85\x9b\xec\xc7\x89\x50\xe4\x50\x73\x92\x65\x92\x2a\x65\xde\xc0\xdb\x1e\xc3\xd3\x33\x5b\x81\x48\xe0\xac\xdb\x00\x74\xa4\xce\x2c\x6f\x3e\xe6\xa1\xeb\x99\x18\xff\xd7\x3e\xf7\xb6\xb3\x43\x9d\x70\x38\xcc\xd4\x2c\x20\x73\x99\x3b\xdd\x6b\x0f\xd9\xbb\xf7\xa9\xf0\x3f\x5c\xb1\xdf\xc1\x77\xc0\xec\x0f\xaf\x0f\x56\xee\x03\xd6\xda\x2a\x7e\xa4\xed\x34\x17\x35\xcf\xda\x37\xc6\x6e\x41\xfe\x31\x0f\x4d\xa1\x7e\x79\x77\x1b\x3d\xb3\xf2\xb6\x8f\xc8\xb1\xd1\x90\xa7\xa8\x79\xb6\x1e\x27\x03\x59\xb5\x3f\xbc\x77\x75\x63\x0f\xe6\x08\x7d\xbc\x77\xb2\x53\xa0\xa8\x7a\xae\x1c\x6e\x2a\x06\x34\x0e\x93\x30\x35\xbd\x8b\xbd\x86\xf4\x8d\xb1\xa4\x18\x56\xff\x36\xa6\x7f\x41\x63\x7a\xb6\x6e\x7e\x73\x8a\x72\xae\xe0\x3b\xb8\xb3\x3f\x9c\xa2\xa5\xdf\xfc\x6f\xaa\x69\x0c\xab\xe3\x9a\xfa\xb6\x10\x8a\x86\xbd\xf8\x1c\x62\xd5\xdb\x89\xcc\xdd\xc2\x6c\xe7\xda\x14\xcf\xf7\xeb\xf7\x91\x5b\x6c\x4a\x7c\xfa\x33\x4e\xaf\x74\x72\x33\xb7\xc3\x56\xba\x9b\x12\x3d\x30\x58\xbb\xdb\x1c\x7e\xea\xbf\xcf\x38\x89\xd8\x80\x3e\x3a\x6d\x1a\xed\xed\xb1\xb6\x93\x99\x6b\x37\xdd\xda\x65\x74\xdb\x99\x3b\x58\xa2\xf7\xb1\x1a\x23\xd4\xdb\x5b\xa5\xe5\xb1\x39\xa1\xee\x13\x13\xfe\xf3\xeb\xc7\x41\x1f\xdf\xfb\x83\xfe\x30\xa2\xb3\xc1\x7d\x03\x89\xee\xf3\x4e\x83\xb5\xdf\x63\xf6\x9b\xd6\xa4\xd8\xe9\x54\x3f\xcf\xd6\x50\x55\x7a\x4d\x85\xf3\x73\xf8\x50\x97\x3f\x30\x5a\x64\xae\x0d\xaf\xcc\xb4\x22\xaf\xcb\x39\x95\x68\x2f\x39\x7e\x53\x98\xb5\xe1\xba\x15\x1e\xac\x13\x3c\x79\xe5\xe6\x0d\x15\xa0\x0c\xbe\x54\x80\x54\xfa\x8e\xac\x2d\x98\x93\xa1\xb2\xfa\xdb\xda\x6e\x5c\x9b\xa3\x9a\x13\x51\xd0\x3e\xb6\x98\x85\xc3\x92\x71\xec\xc4\xd0\xab\x75\x62\x91\x8d\x1c\x65\xef\x49\xf5\x57\xba\x55\x0d\x61\xc4\x17\x12\x82\x6b\x37\xf5\x41\x8a\xc2\xd0\xb5\xc2\x7d\x95\xa4\x8a\x72\xed\x69\x2d\x49\x15\x23\x18\xc6\x51\x3c\x15\x4d\x59\xce\x68\x06\x42\x66\x54\x1e\xa7\xff\x3d\xa9\xfc\xa6\xe6\x7e\x0e\xb4\xac\xf4\xd6\xbb\xa5\x1c\xd6\x20\xa9\xbb\x15\xd1\xe3\xac\xc0\x5b\x77\x98\xe6\x08\x09\xfb\x13\x7e\x9e\x6f\xef\x49\xd5\x61\x5a\x49\xaa\xc3\x1c\x5b\x51\x13\x5a\xdc\x13\xd5\x8a\x6e\x83\x60\xff\x9b\x81\xdb\xdc\x79\x8e\x2a\xed\xce\xca\x77\xfc\x82\x49\x59\x50\x37\x06\xa2\xc3\x0b\x5b\x37\x94\x58\x99\xfb\x71\x38\xf3\x7d\x86\x84\xa1\x94\x4a\xf7\x87\x00\xee\xb5\xbf\x62\x9a\x4a\xc6\x99\x0e\x5d\xe3\x09\xbf\x93\xdd\x49\x80\xd2\x86\x38\x0c\xef\xcc\x06\x76\x3b\x13\xd0\x8c\xd5\x20\x6c\x12\xb5\xb3\x35\x2b\xba\xed\xdc\xb0\xa2\xdb\x90\x69\xe7\xdc\xf0\x53\x77\x9e\xf7\xfc\x1c\xae\x45\x49\x05\xa7\x90\xd1\x82\x6a\x9a\x19\x51\x71\x2d\xb7\x76\xee\xd6\x69\x03\x28\xc6\x53\x0a\xf7\xd4\x1d\x4a\x49\x51\xd0\xcc\x11\x06\x64\x2e\xd6\x34\x81\x2b\xfd\x25\x8a\x32\x23\x9a\x80\x24\x29\x8d\x61\x5e\x6b\xd4\x88\x25\xe3\x0b\x77\xf0\x1e\x8b\x59\x0e\x99\xc0\x43\xb5\x06\xa6\x93\xa0\x33\x46\x8f\xee\x8a\xd8\xb9\x86\x54\x54\xdb\xdf\x49\xe1\xe5\x80\x36\x1f\x23\xfe\x48\x89\x23\x8d\xd3\x8d\xb6\xb4\xb5\x53\xe7\xe4\xe6\x92\xdd\xb6\x56\x60\x1e\x5e\x7a\xf6\x6d\xe7\x5f\x89\x52\x22\x65\x04\x09\x36\x03\x69\xc8\x98\x56\xf9\x4f\xb1\xf2\x11\x2d\xc7\xd3\x9d\x01\x33\xc7\x6f\xb7\x3f\xc7\xe8\xdb\xbd\x03\x85\xb8\xdf\x0e\xce\xcf\xe1\x8d\xf1\x3d\x3f\x8a\xd8\xdb\xe9\x97\xca\x61\x8f\xea\x0f\x73\x3a\x9c\xcf\xb5\x80\xbf\x54\xe6\x5a\x8d\xca\x3b\x62\x4e\xf6\xc1\x0e\x77\xb8\xb5\xcf\x35\x2b\x33\x71\xfc\xbd\x30\x44\x4a\xfa\xb7\x9a\x49\x6a\x11\x10\x88\x22\x75\x51\x3e\x6e\x46\xe3\xbf\xa7\xb4\x7a\xf7\xb7\x9a\x14\xe6\x20\xe1\x19\x08\xbd\xa4\x12\x2a\x29\x16\x92\x94\xca\x28\x48\xad\x68\xdf\x43\x59\x1e\x9b\x57\x2e\x73\xce\x7b\x38\xa2\xda\xe9\x41\xbc\xd2\x53\x98\xc0\x55\x0e\x94\x19\xc8\x8e\x31\xe6\x9c\x90\x1e\x26\x0a\xa6\xe6\x2d\x7e\x7a\x29\xea\xc5\xd2\x32\xdb\x4e\xca\xc0\x3d\x2b\x0a\x98\x53\x73\x10\xe3\x37\xcb\xa8\xa4\x59\xe7\x54\x02\x9f\x96\x4c\x21\x24\xf3\x59\x69\x74\xa2\x76\xc2\x71\x69\x8f\xcd\xe9\x92\xac\x99\x90\x66\xe6\xce\xba\x75\x15\xc3\xfd\x92\xa5\x4b\x24\x50\xdc\x83\xa4\x24\xf3\x96\x02\xe6\x4f\x09\x2c\xa2\x79\xe7\x1e\x17\x8b\x12\xe3\xc3\x60\x86\xe8\xef\x1d\x9f\xf2\x1c\x98\xc6\xce\xcb\xb9\x96\xb6\x75\x21\xab\x9d\x09\x68\xab\xa6\x7b\x7b\xdd\x2b\x77\x5d\xa5\x65\x6f\xe4\x74\xb5\x3b\x3e\x7c\xe6\xf6\x59\x83\xa4\xce\x09\x91\x34\xa5\x4a\x79\x27\xd7\xf1\x9f\x98\x48\x9a\xeb\x69\xd7\x27\x0d\x53\x98\xa7\x60\x67\xac\xc0\xfa\x6c\x37\x62\x0d\x8f\x0d\xfa\x91\xfb\x9b\x88\x6e\x16\xd2\x19\x28\xf0\xa0\xbd\x67\x31\xf8\xa0\x57\x19\x6d\x5a\xd8\x58\x3d\x1c\x14\x32\x29\xd7\x6a\x6c\x5c\xe0\x68\x06\x62\x00\x9a\x94\xd6\x9e\xb7\x99\xc8\xb3\x42\x3e\xcb\xcd\x2b\x53\xc8\x22\x78\x3d\xb3\x3f\xf6\xc3\xff\x78\x47\xca\x26\x39\xe3\x0f\xe7\x98\x47\x55\x52\x54\xbb\x3d\x28\x93\x85\x5a\xb8\xa6\xbe\x71\x93\x90\x66\x19\x4f\x4c\xa3\x66\x88\x32\x98\x98\x7d\x08\xe3\xac\x41\xc6\xbc\xab\x3b\xd1\x99\x15\x53\x53\x05\x23\x33\x4b\xd7\x9a\xa5\xab\xed\xaf\x1f\x1f\xc7\x07\x98\x76\x05\xc9\x72\x78\x61\x41\x72\x52\xd2\x84\xa9\xb6\x96\xf0\xc3\xba\xf6\x33\x2d\xe7\x34\xcb\x9a\xf5\x8e\x66\xbc\xc3\x2f\xbf\x7e\x1c\xfc\x59\x46\xfb\xdd\xe3\xe4\xc7\x6c\x03\xfb\x17\x31\x0b\xa7\x88\x0d\x89\x16\x03\x4d\x16\x58\x69\xe0\x77\xdb\x98\x3f\x3b\x03\xd6\xda\x10\xcb\x91\xb7\xf6\xf0\x82\xea\x9f\xf0\xe7\x50\x93\x45\xf4\xad\x5b\x6f\xbb\xf9\x26\xb8\xdb\x11\xd7\xb5\x29\x3e\xad\x1e\x5e\x44\xcd\x5f\xb1\x25\xa6\x44\x45\x69\xd9\x2c\xf9\x17\xed\x0f\x4c\x44\x3f\xcf\xb7\xb2\xb2\xbf\xf9\x3f\x58\xfb\xac\xa1\x96\x67\x8e\xb5\xec\x54\x75\xcc\x1d\x65\x7f\xc7\xda\x4e\x18\xfc\x0c\x03\xcc\x2b\x52\x53\xa4\xb7\x23\x2f\x27\x0f\xbd\x08\xd3\xcc\x34\xb0\x46\x8a\x58\xba\xe9\xde\xbb\xe9\x5f\xd6\xb9\x6d\x64\x1a\xc6\xff\x61\xdf\xc8\x5f\x86\x76\x18\x6f\x45\xd5\x0c\x3e\xbb\x43\x4f\xad\xf2\xa8\xc3\x23\x76\xff\xac\x99\xa5\xcf\x91\xee\x67\x4e\x2c\xd9\x9e\x08\x3a\x86\x96\xa3\x27\x0a\x4f\x19\xe1\xe1\xd1\x63\xf3\x4a\xbb\x02\x7a\x0a\x4e\x1e\x56\xea\x62\x68\xa7\x95\x9e\x82\xff\x09\x00\x00\xff\xff\x08\xc8\x91\xa5\x74\x3c\x00\x00"), }, "/src/internal/syscall": &vfsgen۰DirInfo{ name: "syscall", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 433101921, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 863783400, time.UTC), }, "/src/internal/syscall/unix": &vfsgen۰DirInfo{ name: "unix", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 433166644, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 15, 16, 750165400, time.UTC), }, "/src/internal/syscall/unix/unix.go": &vfsgen۰CompressedFileInfo{ name: "unix.go", - modTime: time.Date(2019, 9, 15, 4, 1, 25, 189095321, time.UTC), - uncompressedSize: 368, + modTime: time.Date(2021, 3, 28, 16, 15, 16, 752161500, time.UTC), + uncompressedSize: 459, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x3c\x90\x31\x6b\xfb\x40\x0c\xc5\xe7\xff\x7d\x8a\x47\x96\xbf\x43\x4d\xdc\x74\xef\x50\x28\x94\xd0\x92\x25\xc9\xd0\xa9\x5c\xec\x3b\xe7\x92\xb3\x64\xa4\x3b\xd2\x52\xf2\xdd\x8b\x1d\xe3\x41\x83\x9e\x78\x3f\x3d\xa9\xaa\xf0\x70\xcc\x21\x36\x38\xab\x31\xbd\xad\x2f\xb6\x75\xc8\x14\xbe\x8d\x09\x5d\xcf\x92\xb0\xd0\x1f\xad\x6d\x8c\x0b\x63\x6a\x26\x4d\x10\x4b\x0d\x77\x7b\xb1\x3d\x9e\xf1\x38\x89\x5e\x93\x4d\x36\xcd\xaa\xf1\x99\x6a\x6c\x74\xcb\x74\x8c\x5c\x5f\x0a\xdf\x20\x50\x5a\xa2\xa0\x49\x09\xd4\xe2\xc8\x1c\x4b\x38\x91\xa1\x58\x96\xf8\x35\xff\xc4\xa5\x2c\x04\x6f\xa3\xba\x12\x14\xa2\xb9\x4d\xb4\x4c\x31\xd0\xc5\xa6\xa2\x09\x72\xc7\x95\xe8\x6d\x3a\x41\x93\x04\x6a\x4b\xf8\x68\x5b\xbd\xaf\x19\x79\x03\xae\xaa\xb0\x3f\x39\x71\xff\x15\xc4\xd8\x7d\xee\xbe\x0e\xdb\x8f\xcd\xf6\xfd\x65\x8f\xc6\xf9\x40\x6e\x00\xe1\x8d\xb1\x5e\xad\x9f\xe0\x59\xf0\x6a\xe5\x1a\xa8\x1c\xad\xca\x38\x67\x4d\x08\x5d\x1f\x5d\xe7\x28\xcd\x21\x90\x75\xb8\xe0\xde\x8e\x3e\xe2\xeb\x6a\x8e\x3f\x3d\x6d\x75\x18\xe7\xc5\x10\x73\x69\x6e\xe6\x2f\x00\x00\xff\xff\x96\xe8\xbf\x29\x70\x01\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x5c\x91\x41\x6b\x2a\x31\x14\x85\xd7\xe6\x57\x1c\xdc\xbc\x19\xde\xe0\x3c\xdf\xbe\x8b\x42\x69\x91\x16\x17\x55\x17\x5d\x95\x38\x93\x19\xa3\x99\x9b\x70\x73\x83\x95\xe2\x7f\x2f\x33\x0e\xa2\x0d\x64\x91\x7c\x39\x5f\x4e\x48\x59\xe2\xef\x36\x59\x57\x63\x1f\x95\x0a\xba\x3a\xe8\xd6\x20\x91\xfd\x52\xca\x76\xc1\xb3\x60\x1a\x4f\xb1\xd2\xce\x4d\x95\xaa\x3c\x45\x41\xa6\x26\xac\xa9\xf6\xdd\x9a\x75\xc0\x38\x92\x25\x09\xc2\x78\xc0\x3f\x35\x69\xa2\x68\xd1\x72\xc3\xef\x70\x6b\xe4\x97\xe0\x0e\x57\x3e\x9c\x9e\xad\x33\xef\x9a\x5a\x33\x1c\xb9\xc5\xb9\x52\x4d\xa2\x0a\x8b\xb8\xf4\xb4\x75\xbe\x3a\x64\x4d\x0d\x4b\x92\x23\xa3\x71\xc7\x52\x8b\xad\xf7\xae\x80\x61\xee\xa7\xe7\x1c\xdf\x6a\xc2\x46\x12\x13\x1a\xed\xa2\x29\x40\xd6\xa9\xf3\x68\x4b\xe4\x2c\x1d\xb4\x64\xb5\xe5\x8b\xae\x40\xd0\xb2\x43\x14\xb6\xd4\x16\x68\x9c\x6e\xe3\xe5\x9a\xc1\xd7\xeb\xca\x12\xeb\x9d\x61\xf3\x27\x82\x3c\x56\x1f\xab\xcf\xcd\xf2\x6d\xb1\x7c\x7d\x5c\xa3\x36\x8d\x25\xd3\x8b\xf0\xe2\x31\x9f\xcd\xff\xa3\xf1\x8c\x27\xcd\x47\x4b\xc5\x10\x8d\x1e\xfb\x14\x05\xb6\x0b\xce\x74\x86\xe4\x5a\x02\x29\xf6\x2f\xb8\x2c\x87\x1c\xf9\xe3\xec\x5a\x7f\xfc\x8f\xd9\x66\xe0\x59\x5f\x33\x57\x67\xf5\x13\x00\x00\xff\xff\x18\xd0\xfc\x18\xcb\x01\x00\x00"), }, "/src/internal/testenv": &vfsgen۰DirInfo{ name: "testenv", - modTime: time.Date(2018, 4, 20, 11, 3, 8, 366769229, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 905779400, time.UTC), }, "/src/internal/testenv/testenv.go": &vfsgen۰CompressedFileInfo{ name: "testenv.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 906786500, time.UTC), uncompressedSize: 424, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\xc1\x6a\xc3\x30\x0c\x86\xcf\xd1\x53\x08\x9f\x12\x36\x92\xfb\x6e\xa3\x8c\xf5\xd6\xb2\x3e\x81\xeb\x2a\x8d\xbb\x58\x2e\x92\xb2\xb4\x8c\xbe\xfb\xf0\xd6\x52\xd8\x06\x3e\xfd\x9f\xfd\xf1\xb9\xeb\xf0\x61\x3b\xc5\x71\x87\x07\x05\x38\xfa\xf0\xee\xf7\x84\x46\x6a\xc4\x1f\x00\x31\x1d\xb3\x18\xd6\x50\x39\x99\xd8\x62\x22\x07\x95\x53\x93\xc8\x7b\x75\xd0\x00\x74\x1d\x2e\xbd\xbe\x9c\x28\xa0\x50\xb9\xac\x38\x0f\x64\x03\x09\xda\x40\x18\x26\x11\x62\x43\x3d\xab\x51\xc2\xe0\x19\xd5\xbc\x18\x32\xcd\x78\x94\x1c\x48\x95\xb4\x58\x26\x8d\xbc\xc7\xac\xed\xa6\xf0\xf5\x0f\xc2\x2c\x58\xa7\x2c\x84\x21\xa7\x94\x79\x3c\x37\x48\x27\x0a\xed\x22\xa7\xe4\x79\xd7\x42\x3f\x71\xb8\x15\xd4\x0d\x6e\x73\x1e\xf1\x13\x2a\x9d\xa3\x85\x01\xaf\xd1\xed\xeb\x6a\xb5\x29\x73\xf0\x4a\xe8\xd8\x87\xd1\x3d\x41\x55\x09\xd9\x24\x8c\xbd\x1f\x95\x6e\x70\xe7\x65\x8e\xfc\x8d\x63\x8f\xd7\xaf\xb6\x4b\xaf\x6b\xa1\x3e\x9e\xea\xbb\xf2\xf9\x6d\xb1\x7c\x44\xe7\x25\xb9\xa6\xc8\x7f\xfb\xaa\x0b\x94\xf3\x27\xa5\xbc\xbb\xc7\x1c\xf4\x9f\x94\x0b\xdc\x06\x93\x89\xe0\x02\x5f\x01\x00\x00\xff\xff\xdc\xf8\xeb\x9e\xa8\x01\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x6c\x8f\xc1\x6a\xc3\x30\x0c\x86\xcf\xd1\x53\x08\x9f\x12\x36\x92\xfb\x6e\xa3\x8c\xf5\xd6\xb2\x3e\x81\xeb\x2a\x8d\xbb\x58\x2e\x92\xb2\xb4\x8c\xbe\xfb\xf0\xd6\x52\xd8\x06\x3e\xfd\x9f\xfd\xf1\xb9\xeb\xf0\x61\x3b\xc5\x71\x87\x07\x05\x38\xfa\xf0\xee\xf7\x84\x46\x6a\xc4\x1f\x00\x31\x1d\xb3\x18\xd6\x50\x39\x99\xd8\x62\x22\x07\x95\x53\x93\xc8\x7b\x75\xd0\x00\x74\x1d\x2e\xbd\xbe\x9c\x28\xa0\x50\xb9\xac\x38\x0f\x64\x03\x09\xda\x40\x18\x26\x11\x62\x43\x3d\xab\x51\xc2\xe0\x19\xd5\xbc\x18\x32\xcd\x78\x94\x1c\x48\x95\xb4\x58\x26\x8d\xbc\xc7\xac\xed\xa6\xf0\xf5\x0f\xc2\x2c\x58\xa7\x2c\x84\x21\xa7\x94\x79\x3c\x37\x48\x27\x0a\xed\x22\xa7\xe4\x79\xd7\x42\x3f\x71\xb8\x15\xd4\x0d\x6e\x73\x1e\xf1\x13\x2a\x9d\xa3\x85\x01\xaf\xd1\xed\xeb\x6a\xb5\x29\x73\xf0\x4a\xe8\xd8\x87\xd1\x3d\x41\x55\x09\xd9\x24\x8c\xbd\x1f\x95\x6e\x70\xe7\x65\x8e\xfc\x8d\x63\x8f\xd7\xaf\xb6\x4b\xaf\x6b\xa1\x3e\x9e\xea\xbb\xf2\xf9\x6d\xb1\x7c\x44\xe7\x25\xb9\xa6\xc8\x7f\xfb\xaa\x0b\x94\xf3\x27\xa5\xbc\xbb\xc7\x1c\xf4\x9f\x94\x0b\xdc\x06\x93\x89\xe0\x02\x5f\x01\x00\x00\xff\xff\xdc\xf8\xeb\x9e\xa8\x01\x00\x00"), + }, + "/src/internal/unsafeheader": &vfsgen۰DirInfo{ + name: "unsafeheader", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 778156400, time.UTC), + }, + "/src/internal/unsafeheader/unsafeheader_test.go": &vfsgen۰CompressedFileInfo{ + name: "unsafeheader_test.go", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 779155800, time.UTC), + uncompressedSize: 199, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x4c\x8e\xc1\x4a\xc4\x40\x0c\x40\xcf\xe6\x2b\x42\x4f\xbb\x0a\xed\x67\x28\x5e\xb7\xe0\x51\x62\x9b\x99\x89\x9d\x66\x86\x24\x73\x12\xff\x5d\x14\x0f\x7b\x7c\xf0\x1e\xbc\x65\x79\xfa\x18\x52\x77\xfc\x74\x80\x4e\xdb\x41\x99\x71\xa8\x53\xe2\xc2\xb4\xb3\xbd\x07\x7b\x00\xc8\xd9\x9b\x05\x4e\xbf\x24\x9a\x27\x80\x34\x74\xc3\x95\x3d\xde\x4c\x82\xd7\x62\x6d\xe4\xf2\xf2\xd7\x5c\x02\x1f\xff\xc5\x79\xbd\xe2\x17\x3c\xc4\x7c\x3b\xa4\x5f\xa6\xe7\xd6\x0b\xdb\xeb\x0d\x87\xb3\xe3\x2e\x29\xb1\xb1\x06\x7a\x95\x8d\x91\x74\x47\x0f\x13\xcd\x28\x67\xaf\x7c\xb2\x06\x85\x34\xc5\x28\xa4\x28\x1a\x6c\x4a\x75\xb9\xff\x9b\xa7\x2b\x7c\xc3\x4f\x00\x00\x00\xff\xff\x3a\x91\xfb\x4a\xc7\x00\x00\x00"), }, "/src/io": &vfsgen۰DirInfo{ name: "io", - modTime: time.Date(2018, 4, 20, 9, 18, 9, 731474926, time.UTC), + modTime: time.Date(2021, 4, 4, 19, 27, 41, 492250700, time.UTC), }, "/src/io/io_test.go": &vfsgen۰CompressedFileInfo{ name: "io_test.go", - modTime: time.Date(2018, 2, 27, 18, 42, 13, 0, time.UTC), - uncompressedSize: 574, + modTime: time.Date(2021, 4, 4, 19, 27, 41, 492250700, time.UTC), + uncompressedSize: 547, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\xd0\x41\x4b\xfb\x40\x10\x05\xf0\x73\xf7\x53\x0c\xbd\xfc\x9b\xbf\x92\x7e\x06\x29\x46\x10\xbc\x98\x82\xc7\xb2\x26\xcf\x64\xec\x66\x76\x99\x9d\x45\x51\xfc\xee\xd2\xa6\xa7\x52\x0f\xde\x3c\x2d\x3c\x78\xcb\xef\xcd\x7a\x4d\x57\xcf\x85\x43\x4f\xaf\xd9\xb9\xe4\xbb\xbd\x1f\x40\x1c\x77\x86\x6c\xce\xf1\x94\xa2\x1a\xad\xdc\x62\x79\x08\x58\x86\xa5\xab\x9c\x7b\x29\xd2\xd1\x16\xd9\x1e\x4a\x30\x7e\x52\x36\xe8\xee\xf8\xb4\xa6\x2c\x43\xcb\x32\x04\xdc\x84\x10\xbb\x95\xd1\xff\x53\xb5\xde\x56\xf4\xe9\x16\x56\xb7\x7b\x4e\xab\xca\x7d\x9d\x7f\xf4\x08\xdf\x43\x9b\xe0\xcd\x20\x3f\x16\x8f\x12\x52\x04\x46\xa6\x28\xa4\x45\x8c\x27\xd4\x1b\x1f\x02\x34\x93\x97\xfe\x3c\x6b\xd4\x4f\xc8\xd7\xf4\x36\x72\x37\xd2\x5d\x4c\x23\xf4\xbe\xa5\x3e\x22\xcb\x3f\xa3\x5c\xd2\x61\xe6\xf2\x02\x69\xde\x36\xef\xd9\x8c\x9e\xe5\x4f\xe9\x4e\x07\x53\x20\xdf\xbe\x8f\xbe\x64\x43\x3f\x67\xf9\xd7\xc0\x16\xd6\xb0\xf8\xc0\x1f\xd0\x8b\x16\x92\x68\xc4\x53\x0a\x98\x20\x33\xe7\x3b\x00\x00\xff\xff\x75\x6f\xe1\xab\x3e\x02\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x74\x90\x41\x8b\x14\x31\x10\x85\xcf\x9b\x5f\xf1\x98\xd3\x8c\x2e\xdd\x2b\xde\xbc\x89\xb8\x82\xe8\xc5\x1e\xf0\xb8\xa4\xd3\x35\x49\xed\xa6\x93\x50\x55\x71\x1d\xc5\xff\x2e\xf6\x0a\x83\x8a\xa7\x2a\x1e\xd4\xf7\x5e\xbd\x71\xc4\xf3\xb9\x73\x5e\x70\xaf\xce\x35\x1f\x1e\x7c\x24\x70\xbd\x33\x52\x73\x8e\xd7\x56\xc5\xb0\x77\x57\xbb\x5f\x02\x97\xb8\x73\x07\xe7\x4e\xbd\x04\x1c\x49\xed\x63\xcf\xc6\x9f\x85\x8d\xe4\x6e\x1b\x93\x09\x97\x38\x71\x89\x99\x5e\xe7\x5c\xc3\xde\xf0\xec\xf7\xe9\x70\x3c\xe0\xbb\xbb\xb2\x61\x7a\xe0\xb6\x3f\xb8\x1f\x7f\x83\x3e\x91\x5f\x48\x6e\x85\x48\xdf\x7e\x4d\xbe\xab\xd1\xf2\xa4\xe9\x7f\x31\x5b\x2e\x08\x65\x26\x45\x2d\x90\x5e\x8c\x57\x1a\x26\xb2\x5b\x2e\x3e\xf3\x37\x92\x6b\x3c\x26\x0e\x09\xef\x6a\x4b\x24\xef\x27\x2c\x95\x14\xa5\x1a\x78\x6d\x99\x56\x2a\xb6\xfb\x33\xce\x9b\xda\xce\x1f\xbc\x44\x7a\xfa\xed\x5f\xf7\x71\xc4\x31\xb1\x62\x73\xf7\xc1\xba\xcf\xf9\x8c\x99\x92\xff\x42\x8a\xb5\x0a\xa1\x0a\x32\xa9\x22\x54\x11\x0a\x96\xcf\xd7\x98\xbb\x81\x0d\x26\x1c\x23\x89\xc2\x6f\xa0\x85\x4f\x27\x12\x2a\x86\x50\x17\x42\xf3\x96\x60\xc9\x1b\x9a\x2f\x1c\x14\x5c\xd4\xc8\x2f\xa8\x27\x08\x59\x97\xc2\x25\xc2\x17\x90\x48\x15\x2c\x9d\x60\x15\x1e\x73\x8f\x1b\x4e\x68\xa3\x05\x5a\x30\x53\xae\x8f\xc3\xa5\xab\x64\xd6\xf4\xd5\x38\x46\xb6\xd4\xe7\x21\xd4\x75\x8c\x5b\x27\xf7\x7a\x59\x58\xb5\x93\x8e\x2f\x6e\x6e\x5e\x6e\xad\xfc\x0c\x00\x00\xff\xff\x03\x6d\x1a\xaf\x23\x02\x00\x00"), }, "/src/math": &vfsgen۰DirInfo{ name: "math", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 433889333, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 15, 16, 838165400, time.UTC), }, "/src/math/big": &vfsgen۰DirInfo{ name: "big", - modTime: time.Date(2018, 4, 20, 9, 34, 7, 314436336, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 995780300, time.UTC), }, "/src/math/big/big.go": &vfsgen۰CompressedFileInfo{ name: "big.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 970779100, time.UTC), uncompressedSize: 174, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x44\x8d\xbd\xaa\xc3\x30\x0c\x46\x77\x3f\x85\xf6\x0b\x11\x5c\x68\x87\xcc\xdd\x03\x25\xd0\xd9\x89\x15\xdb\xf9\x93\x91\xe4\x94\xbe\x7d\x49\x3b\xf4\x9b\xbe\xe1\x70\x0e\x22\xfc\x0d\x35\xaf\x01\x66\x75\xae\xf8\x71\xf1\x91\x60\xc8\xd1\x39\x44\xe8\xbb\x5b\xd7\x42\x9f\xb2\x42\x56\xf0\xf0\x64\x59\xbc\x70\xdd\x03\x4c\x2c\x90\xcc\x8a\xb6\x88\x31\x5b\xaa\x43\x33\xf2\x86\x91\x4b\x22\x99\xf5\x77\xb2\x6a\x25\xc5\xeb\xe5\xbf\x39\x95\xdf\xdd\x69\xe3\x83\xc0\x4f\x46\x02\x96\xbc\xc1\x07\x3b\x2b\x42\xca\xeb\x41\xa1\x71\xf6\x2a\x04\x0f\x96\x00\x35\xef\x56\x4c\xdc\x3b\x00\x00\xff\xff\x55\xc0\x14\x01\xae\x00\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x44\x8d\xbd\xaa\xc3\x30\x0c\x46\x77\x3f\x85\xf6\x0b\x11\x5c\x68\x87\xcc\xdd\x03\x25\xd0\xd9\x89\x15\xdb\xf9\x93\x91\xe4\x94\xbe\x7d\x49\x3b\xf4\x9b\xbe\xe1\x70\x0e\x22\xfc\x0d\x35\xaf\x01\x66\x75\xae\xf8\x71\xf1\x91\x60\xc8\xd1\x39\x44\xe8\xbb\x5b\xd7\x42\x9f\xb2\x42\x56\xf0\xf0\x64\x59\xbc\x70\xdd\x03\x4c\x2c\x90\xcc\x8a\xb6\x88\x31\x5b\xaa\x43\x33\xf2\x86\x91\x4b\x22\x99\xf5\x77\xb2\x6a\x25\xc5\xeb\xe5\xbf\x39\x95\xdf\xdd\x69\xe3\x83\xc0\x4f\x46\x02\x96\xbc\xc1\x07\x3b\x2b\x42\xca\xeb\x41\xa1\x71\xf6\x2a\x04\x0f\x96\x00\x35\xef\x56\x4c\xdc\x3b\x00\x00\xff\xff\x55\xc0\x14\x01\xae\x00\x00\x00"), }, "/src/math/big/big_test.go": &vfsgen۰CompressedFileInfo{ name: "big_test.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 10, 996779600, time.UTC), uncompressedSize: 148, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd2\xd7\x57\xd0\x4e\x2a\xcd\xcc\x49\x51\xc8\x2a\xe6\xe2\x2a\x48\x4c\xce\x4e\x4c\x4f\x55\x48\xca\x4c\xe7\xe2\xca\xcc\x2d\xc8\x2f\x2a\x51\x50\x2a\x49\x2d\x2e\xc9\xcc\x4b\x57\xe2\xe2\x4a\x2b\xcd\x4b\x56\x08\x49\x2d\x2e\x71\xaa\x2c\x49\x2d\xd6\x28\x51\xd0\x82\xca\xe9\x85\x68\x2a\x54\x73\x71\x96\xe8\x05\x67\x67\x16\x68\x28\x25\x15\xe5\x67\xa7\xe6\x29\x69\x72\xd5\x22\xe9\xf1\xcd\x4f\x09\x2e\x2c\x2a\xc1\xad\xab\x38\x27\xbf\x1c\xac\x07\x10\x00\x00\xff\xff\x9b\x59\x2d\xf0\x94\x00\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xd2\xd7\x57\xd0\x4e\x2a\xcd\xcc\x49\x51\xc8\x2a\xe6\xe2\x2a\x48\x4c\xce\x4e\x4c\x4f\x55\x48\xca\x4c\xe7\xe2\xca\xcc\x2d\xc8\x2f\x2a\x51\x50\x2a\x49\x2d\x2e\xc9\xcc\x4b\x57\xe2\xe2\x4a\x2b\xcd\x4b\x56\x08\x49\x2d\x2e\x71\xaa\x2c\x49\x2d\xd6\x28\x51\xd0\x82\xca\xe9\x85\x68\x2a\x54\x73\x71\x96\xe8\x05\x67\x67\x16\x68\x28\x25\x15\xe5\x67\xa7\xe6\x29\x69\x72\xd5\x22\xe9\xf1\xcd\x4f\x09\x2e\x2c\x2a\xc1\xad\xab\x38\x27\xbf\x1c\xac\x07\x10\x00\x00\xff\xff\x9b\x59\x2d\xf0\x94\x00\x00\x00"), }, "/src/math/bits": &vfsgen۰DirInfo{ name: "bits", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 433404122, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 27788400, time.UTC), }, "/src/math/bits/bits.go": &vfsgen۰CompressedFileInfo{ name: "bits.go", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 433455586, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 28779300, time.UTC), uncompressedSize: 314, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x8e\xc1\x4a\xc5\x30\x10\x45\xd7\x9d\xaf\xb8\x74\x95\x20\xbc\xec\x05\x97\xfe\x80\x3f\x20\xed\xeb\xbc\x32\xda\x26\x65\x92\x54\x6a\xf1\xdf\xc5\x24\x82\xb8\x7a\x9b\x2c\xce\xcd\x39\x8c\x73\x78\x18\xb3\x2c\x13\xde\x22\xd1\x36\x5c\xdf\x87\x99\x31\x4a\x8a\x44\xe9\xd8\x18\xaf\xac\x8a\x98\x54\xfc\x4c\x74\xcb\xfe\x0a\x53\xa1\xc5\xb3\x6a\x50\x63\xdb\x8a\x93\x3a\xe5\x94\xd5\x37\x60\xd8\xd2\x17\x91\x73\x78\xc9\x3e\xc9\xca\xe5\x3f\x64\xdd\x16\x5e\xd9\xa7\x08\xad\xfc\x52\x86\xcb\xbf\xfa\x5f\xc9\x58\x9c\x3f\xad\x7d\x50\x18\xea\xc2\xce\x7a\x5b\xc2\x47\x0d\x72\x79\x9f\x8a\x66\xfa\xd6\xac\xf4\x11\xe2\x13\xcf\xac\xf8\x55\x7a\x4b\xdd\x24\xbb\x4c\xed\x1a\xdc\xa7\x57\x05\xe3\x81\x4f\xd6\xd0\x5b\xb2\xf4\x1d\x00\x00\xff\xff\x76\x78\x13\x86\x3a\x01\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x8c\x8e\xc1\x4a\xc5\x30\x10\x45\xd7\x9d\xaf\xb8\x74\x95\x20\xbc\xec\x05\x97\xfe\x80\x3f\x20\xed\xeb\xbc\x32\xda\x26\x65\x92\x54\x6a\xf1\xdf\xc5\x24\x82\xb8\x7a\x9b\x2c\xce\xcd\x39\x8c\x73\x78\x18\xb3\x2c\x13\xde\x22\xd1\x36\x5c\xdf\x87\x99\x31\x4a\x8a\x44\xe9\xd8\x18\xaf\xac\x8a\x98\x54\xfc\x4c\x74\xcb\xfe\x0a\x53\xa1\xc5\xb3\x6a\x50\x63\xdb\x8a\x93\x3a\xe5\x94\xd5\x37\x60\xd8\xd2\x17\x91\x73\x78\xc9\x3e\xc9\xca\xe5\x3f\x64\xdd\x16\x5e\xd9\xa7\x08\xad\xfc\x52\x86\xcb\xbf\xfa\x5f\xc9\x58\x9c\x3f\xad\x7d\x50\x18\xea\xc2\xce\x7a\x5b\xc2\x47\x0d\x72\x79\x9f\x8a\x66\xfa\xd6\xac\xf4\x11\xe2\x13\xcf\xac\xf8\x55\x7a\x4b\xdd\x24\xbb\x4c\xed\x1a\xdc\xa7\x57\x05\xe3\x81\x4f\xd6\xd0\x5b\xb2\xf4\x1d\x00\x00\xff\xff\x76\x78\x13\x86\x3a\x01\x00\x00"), }, "/src/math/math.go": &vfsgen۰CompressedFileInfo{ name: "math.go", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 433707031, time.UTC), - uncompressedSize: 4581, + modTime: time.Date(2021, 3, 28, 16, 15, 16, 839156600, time.UTC), + uncompressedSize: 4585, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x57\xdd\x6e\xdb\x38\x13\xbd\xb6\x9e\x62\x3e\xe3\x43\x57\xda\x2a\xb2\xe5\x04\x41\x51\xc4\x05\xba\xc1\xa6\x5b\xa0\xed\x2e\x36\xed\xde\x04\xbe\xa0\x64\xd2\xa6\x2b\x91\x2a\x49\xc5\x72\x9b\xbe\xfb\x82\xd4\x1f\x25\x5b\xb1\xbd\x57\xb6\xc8\x33\x67\xce\x8c\x66\xc8\xd1\x64\x02\x2f\xa3\x9c\x26\x4b\xd8\x48\xc7\xc9\x50\xfc\x15\xad\x30\xa4\x48\xad\x1d\x87\xa6\x19\x17\x0a\x5c\x67\x34\x5e\x51\xb5\xce\xa3\x20\xe6\xe9\x64\xc5\xb3\x35\x16\x1b\xd9\xfe\xd9\xc8\xb1\xe3\x39\xce\x23\x12\xc6\x10\xe6\xb0\x91\xc1\xbb\x84\x47\x28\x09\xde\x61\xe5\x8e\x3f\x22\xb5\x1e\x7b\x06\xf0\x1d\x0b\x0e\x24\xe1\x48\x5d\x5f\xc1\x1c\xa6\x66\x31\xe3\xf2\x3d\x23\x30\x87\x10\x26\x06\x61\x56\x19\x5e\x95\xab\x17\xdd\x65\xc4\xb4\x61\xbd\xe4\x90\x9c\xc5\xf0\x36\xe6\xd2\x2d\x6a\x62\xaf\xf1\xf0\xc3\x19\x09\xac\x72\xc1\x8c\xb2\xe0\x16\x25\x89\x3b\x46\x31\x97\x63\x1f\x0a\x2f\xb8\xd3\x30\xd7\x73\x7e\x5a\x34\xeb\xb3\x78\xd6\x03\x44\x92\xb2\xd3\x79\x24\x65\xc3\x34\x67\xe8\xd1\xe8\x01\x22\x85\xce\xd0\xa3\xd0\x90\x1e\x85\xce\xd1\xa3\xd1\xc3\x44\x33\x77\xe7\xc3\x39\x5c\xb3\xb1\x0f\xbb\x83\x74\xb7\x91\x50\x27\xcb\x8a\x23\xa1\x0e\xab\xba\xc5\x34\x39\x9d\x06\xd3\x64\x80\x86\x67\x3b\x49\x57\xcc\x2d\x7c\xd8\x1d\x64\xa3\x04\xdc\x02\x6e\x60\x0a\x4f\x4f\x10\x4e\x0a\x98\xcf\xab\x72\xf7\xe0\x7f\x73\x70\x77\xed\xde\xce\xde\xfb\xe1\x8c\x6a\x25\x17\x85\x33\xfa\xd9\xe8\x2a\x2c\xe7\xa7\x37\xc2\x60\x1f\xdc\x9e\xd3\x06\xc3\x5d\xf0\xbb\x20\xcf\xb3\x60\x0d\xe8\xe0\xe3\xa3\x06\x71\xc7\xa2\xc8\x4e\xd6\x89\x8b\x6c\x40\x66\x91\xcd\x4e\x66\xc9\xf8\x76\xec\xc3\x6c\x88\x28\x0d\x8f\x04\x50\x42\x5a\x9b\xbb\x84\x73\x71\xb2\x77\xa2\xd1\x87\xa3\xb8\x13\xb8\xc8\x5c\xd2\x12\xb9\x44\xa0\xb8\x7e\xf4\xb5\x67\xa0\x4c\x79\x16\x31\x29\x4d\x5a\x8e\x3f\x76\x19\x57\x6e\xe6\xc3\xb7\xe7\xf4\xac\x1b\x54\x6b\xf9\x9e\x11\x57\xd7\x7c\xe9\xc2\xb2\x91\x5b\xaa\xe2\xb5\xfe\x17\x23\x89\xc1\x60\xde\xcc\x61\xfa\xba\x2d\xe5\xf2\xf8\x77\x46\x4b\x4c\x50\x9e\x28\x6b\xa7\xac\x7b\x5d\xe8\x8d\x1f\x0d\x6d\xa3\xf4\xa1\x75\x1a\x71\x9e\x54\xcd\x45\x74\xd3\x54\xb7\x8a\xd5\x33\x8d\x73\xd3\x3a\x35\xae\xba\x67\xfa\xb8\x9b\x1a\x57\x27\x0b\x25\x12\x5b\x3a\x3e\xa1\x4f\x9d\x6c\x53\x69\x14\x74\xf2\xab\x9b\x99\x34\x36\x1f\x96\x26\xdd\x87\xdf\x4a\xf7\x74\xb8\x08\xa7\xb3\x2b\xb8\x31\xdb\x2f\x5e\x98\x9f\x1b\x30\x6b\x3f\x60\x32\x81\x2f\x12\x83\xbe\x54\x83\x8c\x6f\x81\x70\x01\x32\x45\x49\x62\x60\x8f\x28\xc9\xb1\x84\xed\x1a\x0b\x0c\x54\xfd\x22\xe1\x91\xa2\x28\xc1\x01\xdc\x71\x01\x19\x16\x84\x8b\x14\xb1\x18\x07\xce\xc8\xa4\x40\xcb\x99\xeb\x0b\x55\x27\xa0\xad\x0c\x14\x3b\x23\x1d\xbd\xbd\x02\xbf\x1e\xec\x04\x5c\x64\x6d\x39\x5a\x19\x4b\x9a\x78\x4b\x4c\x9b\x08\xbe\x1a\xa8\x78\x4a\xa0\xd0\x49\x2b\xca\x38\xb7\x5c\x7c\x45\x82\xe7\x6c\x69\xa2\xe4\x99\xa2\x29\xfd\x8e\x05\x44\xf9\x0a\x28\x83\x7f\x5e\xf9\x20\x70\xca\x1f\x31\x20\x05\x92\xa7\x18\x32\x4e\x99\xb2\x2a\x08\x31\x5b\x92\x25\x3f\xe1\xab\xc3\x8d\xf4\x81\xaf\xc2\xe9\xf3\x1d\x99\x94\x90\xae\xcd\x91\x93\x28\x29\x21\x1d\x9b\x23\xc7\x4e\x62\x10\xad\xc5\x47\x54\x0c\xdf\x29\x4d\x84\x25\xc6\xb2\xa2\xcf\xdc\x44\xb5\x55\x85\xb1\xac\xf8\xf2\xa8\x55\x3b\xe6\x95\x29\xfd\x7f\xca\x97\x3a\xa7\x9a\x68\x2f\xad\x1f\xf9\x92\x74\x8f\xa7\xba\x07\x9a\xa5\xfd\xe6\x7d\x7a\x1a\xea\x51\xe2\x37\xef\x96\x12\x08\x27\xc3\x30\x73\x7e\x8c\x4c\xfd\xbe\x9e\x9b\xb8\x88\x0f\xa1\x67\x75\xe9\x05\x94\x45\x6a\xaa\xbe\xd6\xab\xfb\xfb\x50\xd0\xda\x6b\x8d\xf9\x8b\x6f\x9f\xbd\xe4\xcd\xc5\x1e\xea\x28\x5c\xf3\xf7\x22\xd4\xdd\xec\xee\xba\x11\xda\x57\x7c\xe7\x8e\x0f\x07\x4a\xb7\xec\xbc\xc3\x69\xfe\x1b\xa7\x88\xb2\x25\x16\x47\xdf\x9e\xe8\x20\x5b\x86\x7b\xba\x62\x11\xed\xcc\x53\xf5\xd1\x5a\x4f\x1b\x07\x47\x17\x8b\xe0\xf4\x59\x73\x70\xf4\xbd\x3f\x67\xf2\x1d\x1e\x7c\xef\x29\xeb\x7d\x1a\xb8\x92\x32\x1f\x62\x2e\x3b\x75\x57\x71\x1a\xe9\x9e\x5f\x4e\x51\x16\xcb\xb7\x33\xe6\x4b\xf9\x6d\x68\xbe\xfc\x7c\xc6\x10\x3e\x38\x83\x7f\x3e\x67\x04\x1f\x9e\xc0\x3f\x8b\x9c\x0d\x0d\x5b\x75\xe5\xb6\x25\x6a\xbd\xe6\xf2\xd1\x9c\xd1\xfd\x0a\xb0\x6b\xb7\x33\x9e\x36\x13\x71\xe5\xc4\xa5\x4c\xb9\x85\xe7\x69\x65\x5a\x91\xfe\xae\x8b\x72\x02\x52\x89\x3c\x56\x9a\x26\xa7\x4c\x5d\xce\x90\x10\x68\x07\xf0\x30\x5b\x94\xcf\xce\xc8\x10\xd4\x1b\x0f\xb3\x45\xf5\x5c\x6d\x5c\x5f\x55\x1b\xe1\xa2\x7a\x6e\xe2\xa5\x8c\x2a\xd7\xbc\x6a\x14\xe9\x73\xa0\xf7\x89\xfa\x56\xdb\xfd\x96\x13\x82\xc5\xd8\x0b\x3e\xe1\xad\xfb\xca\x73\x46\x1b\x19\xbc\x67\x0a\x0b\x86\x92\x3f\xa3\x0d\x8e\x95\x1b\xe5\xc4\x0b\xee\xb5\x85\xa5\x70\xec\xf7\xe9\xbe\x98\x4d\x43\x5a\xd1\xa1\xc8\x3b\x42\x68\x87\xb6\xcf\x78\x57\xee\xfe\x07\xca\x2a\x29\x03\x94\xd7\x57\x7b\x94\xd6\x68\xaa\x5d\x46\x54\xc9\xfa\xe0\xbe\x9c\x79\x50\x06\xae\x33\x19\xe5\x24\xb0\x55\x3f\x4c\x17\xa0\x07\x9e\xfa\xb5\xeb\x7d\x2b\x4d\x0f\xd3\x45\x9f\x9b\x08\x9e\x1a\xfe\xa8\xa2\xf5\x6a\x3f\x35\x7f\xd7\x1e\xe6\x10\x75\xe8\x7b\xee\xbb\xfc\xd7\x57\xb6\x76\x5d\xe4\x9a\xad\xac\xf1\xc6\xb8\x4a\x4f\x5f\x7b\x89\x74\xfb\x12\xc2\x85\x77\x73\x73\x39\x83\x97\x43\x80\xe9\xc2\xeb\x8b\xe8\x05\xd9\x6b\xb6\x83\x41\x96\x0b\x6e\xe4\xed\xef\x87\xf6\x3e\xbc\x79\x03\x97\x33\x6f\x3f\x25\x6d\x54\xce\x4f\xe7\xdf\x00\x00\x00\xff\xff\x85\x20\xa4\x35\xe5\x11\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x9c\x57\x6d\x6f\xdb\x36\x10\xfe\x6c\xfd\x8a\x9b\x31\x74\xd2\xaa\xd8\x96\x12\x04\x45\x11\x17\xe8\x82\xa5\x2b\xd0\x76\xc3\xd2\xee\x4b\x60\x0c\x94\x4c\xda\x4c\x25\x52\x25\xa9\x58\x6e\x93\xff\x3e\x90\x7a\xa3\x14\xcb\x2f\xfb\x64\x8b\x7c\xee\xb9\xe7\x4e\x77\xe4\x69\x3a\x85\x97\x51\x4e\x93\x25\xdc\x4b\xc7\xc9\x50\xfc\x15\xad\x30\xa4\x48\xad\x1d\x87\xa6\x19\x17\x0a\x5c\x67\x34\x5e\x51\xb5\xce\xa3\x49\xcc\xd3\xe9\x8a\x67\x6b\x2c\xee\x65\xfb\xe7\x5e\x8e\x1d\xcf\x71\x1e\x90\x30\x86\x30\x87\x7b\x39\x79\x97\xf0\x08\x25\x93\x77\x58\xb9\xe3\x8f\x48\xad\xc7\x9e\x01\xfc\xfb\x1d\x0b\x0e\x24\xe1\x48\x5d\x5e\xc0\x1c\x66\x66\x35\xe3\xf2\x3d\x23\x30\x87\x00\xa6\x25\xc4\x2c\x33\xbc\x2a\x97\xcf\x7a\xeb\x88\x69\xd3\x66\xcd\x21\x39\x8b\xe1\x6d\xcc\xa5\x5b\xd4\xdc\x5e\xe3\xe4\x87\x33\x12\x58\xe5\x82\x19\x75\x93\x6b\x94\x24\xee\x18\xc5\x5c\x8e\x7d\x28\xbc\xc9\x8d\x86\xb9\x9e\xf3\x64\xd1\xac\x4f\xe2\x59\x0f\x10\x49\xca\x8e\xe7\x91\x94\x0d\xd3\xac\x4f\xe2\x19\xd2\xa3\xd0\x09\x7a\x14\x62\xc3\x34\xeb\x93\x78\xf6\xe8\x09\xdd\xad\x0f\xa7\x70\x85\x63\x1f\xb6\x3b\xe9\xae\x23\xa1\x8e\x96\x15\x47\x42\xed\x56\x75\x8d\x69\x72\x3c\x0d\xa6\xc9\x00\x0d\xcf\xb6\x92\xae\x98\x5b\xf8\xb0\xdd\xc9\x46\x09\xb8\x05\x5c\xc1\x0c\x1e\x1f\x21\x98\x16\x30\x9f\x57\x05\xef\xc1\x4f\x73\x70\xb7\xed\xde\xd6\xde\xfb\xe1\x8c\x6a\x25\x67\x85\x33\x7a\x6a\x74\x15\x96\xf3\xe3\x1b\x61\xb0\x0f\xae\x4f\x69\x83\xe1\x2e\xf8\x5d\x90\xfd\x2c\x58\x03\x3a\xf8\xf8\xa0\x41\xdc\xb1\x28\xb2\xa3\x75\xe2\x22\x1b\x90\x59\x64\xe1\xd1\x2c\x19\xdf\x8c\x7d\x08\x87\x88\xd2\xe0\x40\x00\x25\xa4\xb5\xb9\x49\x38\x17\x47\x7b\x27\x1a\xbd\x3b\x8a\x1b\x81\x8b\xcc\x25\x2d\x91\x4b\x04\x8a\xeb\x47\x5f\x7b\x06\xca\x94\x67\x11\x93\xd2\xa4\xe5\xf8\x63\x9b\x71\xe5\x66\x3e\x7c\xdb\xa7\x67\xdd\xa0\x5a\xcb\xf7\x8c\xb8\xba\xe6\x4b\x17\x96\x8d\xdc\x50\x15\xaf\xf5\xbf\x18\x49\x0c\x06\xf3\x66\x0e\xb3\xd7\x6d\x29\x97\x37\x80\x33\x5a\x62\x82\xf2\x44\x59\x3b\x65\xdd\xeb\x42\x6f\xfc\x68\x68\x1b\xa5\x0f\xad\xd3\x88\xf3\xa4\x6a\x2e\xa2\x9b\xa6\xba\x58\xac\x9e\x69\x9c\x9b\xd6\xa9\x71\xd5\x4d\xd3\xc7\x5d\xd5\xb8\x3a\x59\x28\x91\xd8\xd2\xf1\x09\x7d\xea\x64\x9b\x4a\xa3\xa0\x93\x5f\xdd\xcc\xa4\xb1\xf9\xb0\x34\xe9\xde\xfd\x56\xba\xa7\xc3\x59\x30\x0b\x2f\xe0\xca\x6c\xbf\x78\x61\x7e\xae\xc0\xac\xfd\x80\xe9\x14\xbe\x48\x0c\xfa\x62\x9d\x64\x7c\x03\x84\x0b\x90\x29\x4a\x12\x03\x7b\x40\x49\x8e\x25\x6c\xd6\x58\x60\xa0\xea\x17\x09\x0f\x14\x45\x09\x9e\xc0\x0d\x17\x90\x61\x41\xb8\x48\x11\x8b\xf1\xc4\x19\x99\x14\x68\x39\x73\x7d\xa3\xea\x04\xb4\x95\x81\x62\x67\xa4\xa3\xb7\x57\xe0\xd7\x9d\x9d\x80\x8b\xac\x2d\x47\x2b\x63\x49\x13\x6f\x89\x69\x13\xc1\x57\x03\x15\x4f\x09\x14\x3a\x69\x45\x19\xe7\x86\x8b\xaf\x48\xf0\x9c\x2d\x4d\x94\x3c\x53\x34\xa5\xdf\xb1\x80\x28\x5f\x01\x65\xf0\xcf\x2b\x1f\x04\x4e\xf9\x03\x06\xa4\x40\xf2\x14\x43\xc6\x29\x53\x56\x05\x21\x66\x4b\xb2\xe4\x27\x7c\xb5\xbb\x91\x3e\xf0\x55\x30\xdb\xdf\x91\x49\x09\xe9\xda\x64\x87\x6d\xb2\x9e\x4d\x78\xd0\x24\xb4\x2d\x3e\xa2\x62\xf8\x4e\x69\x22\x2c\x31\x96\x15\x65\x87\xad\x2a\x8c\x65\xc5\x97\x07\xad\xda\x51\xaf\x4c\xe9\xcf\x29\x5f\xea\x9c\x6a\xa2\x67\x69\xfd\xc8\x97\xa4\x7b\x3c\xd5\x3d\xd0\x2c\x3d\x6f\xde\xc7\xc7\xa1\x1e\x25\x7e\xf3\x6e\x29\x81\x60\x3a\x0c\x33\xe7\xc7\xc8\xd4\xef\xeb\xb9\x89\x8b\xf8\x10\x78\x56\x97\x9e\x41\x59\xa4\xa6\xea\x6b\xbd\xba\xbf\x77\x05\xad\xbd\xd6\x98\xbf\xf8\x66\xef\x25\x6f\x2e\xf6\x40\x47\xe1\x9a\xbf\x67\x81\xee\x66\x77\xdb\x8d\xd0\xbe\xe2\x3b\x77\x7c\x30\x50\xba\x65\xe7\xed\x4e\xf3\xdf\x38\x45\x94\x2d\xb1\x38\xf8\xf6\x44\x07\xd9\x32\xdc\xd2\x15\x8b\x68\x67\x9e\xaa\x8f\xd6\x7a\xda\xd8\x39\xba\x58\x04\xc7\xcf\x9a\x83\xa3\xef\xed\x29\x93\xef\xf0\xe0\x7b\x4b\x59\xef\xd3\xc0\x95\x94\xf9\x10\x73\xd9\xa9\xbb\x8a\xd3\x48\xf7\xfc\x72\x8a\xb2\x58\xbe\x9d\x30\x5f\xca\x6f\x43\xf3\xe5\xe7\x13\x86\xf0\xc1\x19\xfc\xf3\x29\x23\xf8\xf0\x04\xfe\x59\xe4\x2c\xde\x77\x0a\x77\x4a\xd4\x7a\xcd\xe5\xa3\x39\xa3\xfb\x15\x60\xd7\x6e\x67\x3c\x6d\x26\xe2\xca\x89\x4b\x99\x72\x0b\xcf\xd3\xca\xb4\x22\xfd\x61\x17\xe5\x04\xa4\x12\x79\xac\x34\x4d\x4e\x99\x3a\x0f\x91\x10\x68\x0b\x70\x17\x2e\xca\x67\x67\x64\x08\xea\x8d\xbb\x70\x51\x3d\x57\x1b\x97\x17\xd5\x46\xb0\xa8\x9e\x9b\x78\x29\xa3\xca\x35\xaf\x1a\x45\xfa\x1c\xe8\x7d\xa6\xbe\xd5\x76\xbf\xe5\x84\x60\x31\xf6\x26\x9f\xf0\xc6\x7d\xe5\x39\xa3\x7b\x39\x79\xcf\x14\x16\x0c\x25\x7f\x46\xf7\x38\x56\x6e\x94\x13\x6f\x72\xab\x2d\x2c\x85\x63\xbf\x4f\xf7\xc5\x6c\x1a\xd2\x8a\x0e\x45\xde\x01\x42\x3b\xb4\xe7\x8c\x37\xe5\xee\xff\xa0\xac\x92\x32\x40\x79\x79\xf1\x8c\xd2\x1a\x4d\xb5\xcb\x88\x2a\x59\x1f\xdc\xe7\xa1\x07\x65\xe0\x3a\x93\x51\x4e\x26\xb6\xea\xbb\xd9\x02\xf4\xc0\x53\xbf\x76\xbd\x6f\xa5\xe9\x6e\xb6\xe8\x73\x13\xc1\x53\xc3\x1f\x55\xb4\x5e\xed\xa7\xe6\xef\xda\xc3\x1c\xa2\x0e\x7d\xcf\x7d\x97\xff\xf2\xc2\xd6\xae\x8b\x5c\xb3\x95\x35\xde\x18\x57\xe9\xe9\x6b\x2f\x91\x6e\x5f\x42\xb0\xf0\xae\xae\xce\x43\x78\x39\x04\x98\x2d\xbc\xbe\x88\x5e\x90\xbd\x66\xdb\x19\x64\xb9\xe0\x46\xde\xf3\xfd\xc0\xde\x87\x37\x6f\xe0\x3c\xf4\x9e\xa7\xa4\x8d\xca\x79\x72\xfe\x0b\x00\x00\xff\xff\x28\xd4\xb1\xa8\xe9\x11\x00\x00"), }, "/src/math/math_test.go": &vfsgen۰CompressedFileInfo{ name: "math_test.go", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 433956447, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 69783100, time.UTC), uncompressedSize: 704, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x92\x3f\x6f\xdb\x30\x10\xc5\xe7\xf0\x53\x3c\x78\x89\xdd\xca\x16\x02\xb8\x19\xba\x78\x69\x50\x64\x28\x5c\x20\xde\x8b\x93\x7c\x92\xae\xa1\x48\x95\x77\x8a\x2c\x04\xf9\xee\x85\x6c\xb7\xca\x12\x4e\xfc\x73\xf7\x7b\xef\x1e\x98\xe7\xf8\x5c\xf4\xe2\x8f\xf8\xad\xce\x75\x54\x3e\x53\xcd\x68\xc9\x9a\x5f\xc6\x6a\xce\x49\xdb\xc5\x64\x58\xba\x9b\xc5\x74\x21\xa1\x5e\xb8\x95\x73\x79\x8e\x27\x2f\x75\xe3\x47\x34\x52\x37\x9c\x60\xd1\x73\xa2\x50\xb2\xc2\x1a\x0a\xe8\x3b\xb5\xc4\xd4\x66\x88\xd6\x70\x1a\x44\x19\x07\x56\xfb\x4e\x6d\x4b\xa8\x48\xbc\x6e\x26\xcc\x61\xff\x6d\xff\x15\x8f\x53\x17\x27\x06\xa1\x60\x33\x4e\x18\x68\x84\x45\x54\x72\x9a\xdb\x76\x78\xb4\x5b\xc5\xc0\x92\x8e\x93\x8a\x21\x06\x3f\x22\x06\xc6\xd9\x6d\x9e\xe3\xb2\x12\xff\xe9\x25\xb1\x42\x42\x99\x98\x54\x42\xfd\xce\xe0\x06\x3f\x39\x35\xd4\x5d\x35\x6f\x75\x56\xad\xe4\xb4\xc3\x0f\x1a\x0b\xc6\xc0\x33\x4f\x9b\xd8\xfb\x23\xe2\x0b\xa7\x24\xc7\xf7\x83\x68\xc7\xa5\x54\x52\x92\xf7\x23\x28\x1c\x11\xa2\x4d\x58\x5c\xb3\x5c\x0f\x53\xfd\xac\x9d\xcd\xd0\x82\x4b\xea\x95\x61\x8d\x28\x06\xf1\x1e\x97\x73\x4b\x61\xbc\x84\x76\x9e\x4a\xa7\x18\x0a\x86\x67\x55\x50\x59\xf6\x89\x8c\x37\xd8\x27\xb4\x67\x9f\x53\xfb\x0c\x15\x45\x25\x81\x77\xae\xea\x43\x89\xd2\x47\xe5\x25\x65\x28\x50\xf9\x48\x76\xbf\x5d\xa1\x88\xd1\x9f\x4b\x5f\x91\xd8\xfa\x14\x66\x77\xe7\xca\x0c\x5b\x5e\xdf\x6d\x57\x78\xbb\x30\x5e\x38\x8d\x1f\x72\x3e\x64\xdc\xf3\xfa\xee\xcb\xc4\xb8\x40\xa6\x41\x1e\x4e\xdd\xd2\xf0\xe9\xfa\x8d\x36\x87\x0c\x0f\xa7\x0e\xd3\xf3\xf2\x3f\xf4\xba\xc9\x10\xa8\x65\xa8\x25\x09\xf5\x0a\xaf\xee\xc6\x36\x4f\xcf\xd2\x2d\x17\x12\xfe\x45\xb0\x58\xb9\x37\xf7\x37\x00\x00\xff\xff\x4e\x32\x53\x1a\xc0\x02\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x74\x92\x3f\x6f\xdb\x30\x10\xc5\xe7\xf0\x53\x3c\x78\x89\xdd\xca\x16\x02\xb8\x19\xba\x78\x69\x50\x64\x28\x5c\x20\xde\x8b\x93\x7c\x92\xae\xa1\x48\x95\x77\x8a\x2c\x04\xf9\xee\x85\x6c\xb7\xca\x12\x4e\xfc\x73\xf7\x7b\xef\x1e\x98\xe7\xf8\x5c\xf4\xe2\x8f\xf8\xad\xce\x75\x54\x3e\x53\xcd\x68\xc9\x9a\x5f\xc6\x6a\xce\x49\xdb\xc5\x64\x58\xba\x9b\xc5\x74\x21\xa1\x5e\xb8\x95\x73\x79\x8e\x27\x2f\x75\xe3\x47\x34\x52\x37\x9c\x60\xd1\x73\xa2\x50\xb2\xc2\x1a\x0a\xe8\x3b\xb5\xc4\xd4\x66\x88\xd6\x70\x1a\x44\x19\x07\x56\xfb\x4e\x6d\x4b\xa8\x48\xbc\x6e\x26\xcc\x61\xff\x6d\xff\x15\x8f\x53\x17\x27\x06\xa1\x60\x33\x4e\x18\x68\x84\x45\x54\x72\x9a\xdb\x76\x78\xb4\x5b\xc5\xc0\x92\x8e\x93\x8a\x21\x06\x3f\x22\x06\xc6\xd9\x6d\x9e\xe3\xb2\x12\xff\xe9\x25\xb1\x42\x42\x99\x98\x54\x42\xfd\xce\xe0\x06\x3f\x39\x35\xd4\x5d\x35\x6f\x75\x56\xad\xe4\xb4\xc3\x0f\x1a\x0b\xc6\xc0\x33\x4f\x9b\xd8\xfb\x23\xe2\x0b\xa7\x24\xc7\xf7\x83\x68\xc7\xa5\x54\x52\x92\xf7\x23\x28\x1c\x11\xa2\x4d\x58\x5c\xb3\x5c\x0f\x53\xfd\xac\x9d\xcd\xd0\x82\x4b\xea\x95\x61\x8d\x28\x06\xf1\x1e\x97\x73\x4b\x61\xbc\x84\x76\x9e\x4a\xa7\x18\x0a\x86\x67\x55\x50\x59\xf6\x89\x8c\x37\xd8\x27\xb4\x67\x9f\x53\xfb\x0c\x15\x45\x25\x81\x77\xae\xea\x43\x89\xd2\x47\xe5\x25\x65\x28\x50\xf9\x48\x76\xbf\x5d\xa1\x88\xd1\x9f\x4b\x5f\x91\xd8\xfa\x14\x66\x77\xe7\xca\x0c\x5b\x5e\xdf\x6d\x57\x78\xbb\x30\x5e\x38\x8d\x1f\x72\x3e\x64\xdc\xf3\xfa\xee\xcb\xc4\xb8\x40\xa6\x41\x1e\x4e\xdd\xd2\xf0\xe9\xfa\x8d\x36\x87\x0c\x0f\xa7\x0e\xd3\xf3\xf2\x3f\xf4\xba\xc9\x10\xa8\x65\xa8\x25\x09\xf5\x0a\xaf\xee\xc6\x36\x4f\xcf\xd2\x2d\x17\x12\xfe\x45\xb0\x58\xb9\x37\xf7\x37\x00\x00\xff\xff\x4e\x32\x53\x1a\xc0\x02\x00\x00"), }, "/src/math/rand": &vfsgen۰DirInfo{ name: "rand", - modTime: time.Date(2018, 4, 20, 9, 43, 49, 187307567, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 100785100, time.UTC), }, "/src/math/rand/rand_test.go": &vfsgen۰CompressedFileInfo{ name: "rand_test.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 101810400, time.UTC), uncompressedSize: 160, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xcb\x51\x0a\xc2\x30\x0c\x00\xd0\x6f\x73\x8a\xd0\xaf\x4d\x61\x03\x3d\x82\xe0\x05\xdc\x05\x6a\x57\x4b\x5c\x4d\x4a\x93\x22\x22\xde\x5d\x10\x3f\xfc\xd9\xf7\xe3\x8d\x23\xee\x2e\x8d\xf2\x8c\x37\x05\x28\x3e\x2c\x3e\x45\xac\x9e\x67\x00\xba\x17\xa9\x86\xce\xa2\x1a\x71\x72\x00\xd7\xc6\x01\xa7\xa8\x76\xca\xe2\xed\xb0\xef\x0c\xb7\x3f\x1d\xa6\x1e\x5f\xb0\xb1\xe1\xbc\x50\xe9\x9c\x66\x79\xb8\x1e\xde\x7f\xe7\x28\x1c\x5a\xad\x91\x6d\xbd\x35\x25\x4e\xc8\xa2\x4f\x0e\xdf\xfe\x09\x00\x00\xff\xff\x3d\xb4\x3b\xb8\xa0\x00\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x74\xcb\x51\x0a\xc2\x30\x0c\x00\xd0\x6f\x73\x8a\xd0\xaf\x4d\x61\x03\x3d\x82\xe0\x05\xdc\x05\x6a\x57\x4b\x5c\x4d\x4a\x93\x22\x22\xde\x5d\x10\x3f\xfc\xd9\xf7\xe3\x8d\x23\xee\x2e\x8d\xf2\x8c\x37\x05\x28\x3e\x2c\x3e\x45\xac\x9e\x67\x00\xba\x17\xa9\x86\xce\xa2\x1a\x71\x72\x00\xd7\xc6\x01\xa7\xa8\x76\xca\xe2\xed\xb0\xef\x0c\xb7\x3f\x1d\xa6\x1e\x5f\xb0\xb1\xe1\xbc\x50\xe9\x9c\x66\x79\xb8\x1e\xde\x7f\xe7\x28\x1c\x5a\xad\x91\x6d\xbd\x35\x25\x4e\xc8\xa2\x4f\x0e\xdf\xfe\x09\x00\x00\xff\xff\x3d\xb4\x3b\xb8\xa0\x00\x00\x00"), }, "/src/net": &vfsgen۰DirInfo{ name: "net", - modTime: time.Date(2018, 4, 20, 9, 12, 45, 414149374, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 232796500, time.UTC), }, "/src/net/http": &vfsgen۰DirInfo{ name: "http", - modTime: time.Date(2018, 4, 20, 9, 31, 37, 938492727, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 209782700, time.UTC), }, "/src/net/http/cookiejar": &vfsgen۰DirInfo{ name: "cookiejar", - modTime: time.Date(2018, 4, 20, 12, 39, 47, 414045680, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 166784200, time.UTC), }, "/src/net/http/cookiejar/example_test.go": &vfsgen۰CompressedFileInfo{ name: "example_test.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 167797300, time.UTC), uncompressedSize: 269, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xcc\x41\x4e\xc3\x30\x10\x85\xe1\x75\xe7\x14\x4f\x5d\xb5\x02\x35\x82\x65\x77\xa8\x02\x24\x16\x05\xd1\x03\xd0\xa9\x3d\x21\x6e\x1c\xdb\x78\x26\x0d\x08\x71\x77\x14\xb1\x65\xfb\xf4\xbd\xbf\x69\x70\x75\x1a\x43\xf4\x38\x2b\x51\x61\xd7\xf3\xbb\xc0\xe5\xdc\x07\x39\x73\x7d\x33\x51\x23\x0a\x43\xc9\xd5\xb0\x6c\x07\x5b\x12\xb5\x63\x72\xb8\xff\xe4\xa1\x44\xd9\xcb\xb4\x5a\xe3\x9b\x16\x4d\x83\x24\x36\xe5\xda\x83\x9d\x13\x55\xa4\x6c\xd0\xb1\xcc\x4f\xf1\x38\x7d\xe1\x31\x97\x4e\xea\xd3\xe1\x1a\x9c\x3c\xac\x0b\x8a\x39\x0f\x2f\x45\x92\x57\xe4\x84\xce\xac\xcc\xdb\x66\x2f\xd3\x41\xea\x45\x2a\xd1\xa2\x1d\x6c\xf3\x52\x43\xb2\x98\x56\xc7\xbb\xd6\xa4\xe2\x46\x0d\x55\x3e\x46\x51\xdb\x12\xf0\x10\xf9\x92\xeb\x16\xbb\x2e\xbb\x1c\xd9\x04\xbb\x2e\x14\xfa\xb3\xb7\xc9\xff\x67\x9f\xd9\x06\xe1\x88\x57\x0e\x1a\xd2\x71\x4d\x3f\xf4\x1b\x00\x00\xff\xff\x4a\xaa\xb1\x5a\x0d\x01\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x6c\xcc\x41\x4e\xc3\x30\x10\x85\xe1\x75\xe7\x14\x4f\x5d\xb5\x02\x35\x82\x65\x77\xa8\x02\x24\x16\x05\xd1\x03\xd0\xa9\x3d\x21\x6e\x1c\xdb\x78\x26\x0d\x08\x71\x77\x14\xb1\x65\xfb\xf4\xbd\xbf\x69\x70\x75\x1a\x43\xf4\x38\x2b\x51\x61\xd7\xf3\xbb\xc0\xe5\xdc\x07\x39\x73\x7d\x33\x51\x23\x0a\x43\xc9\xd5\xb0\x6c\x07\x5b\x12\xb5\x63\x72\xb8\xff\xe4\xa1\x44\xd9\xcb\xb4\x5a\xe3\x9b\x16\x4d\x83\x24\x36\xe5\xda\x83\x9d\x13\x55\xa4\x6c\xd0\xb1\xcc\x4f\xf1\x38\x7d\xe1\x31\x97\x4e\xea\xd3\xe1\x1a\x9c\x3c\xac\x0b\x8a\x39\x0f\x2f\x45\x92\x57\xe4\x84\xce\xac\xcc\xdb\x66\x2f\xd3\x41\xea\x45\x2a\xd1\xa2\x1d\x6c\xf3\x52\x43\xb2\x98\x56\xc7\xbb\xd6\xa4\xe2\x46\x0d\x55\x3e\x46\x51\xdb\x12\xf0\x10\xf9\x92\xeb\x16\xbb\x2e\xbb\x1c\xd9\x04\xbb\x2e\x14\xfa\xb3\xb7\xc9\xff\x67\x9f\xd9\x06\xe1\x88\x57\x0e\x1a\xd2\x71\x4d\x3f\xf4\x1b\x00\x00\xff\xff\x4a\xaa\xb1\x5a\x0d\x01\x00\x00"), }, "/src/net/http/fetch.go": &vfsgen۰CompressedFileInfo{ name: "fetch.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 186782000, time.UTC), uncompressedSize: 3551, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x56\x5f\x6f\xdb\x36\x10\x7f\x16\x3f\xc5\x4d\xc3\x3a\x29\xb5\xa5\x16\x28\xfa\xe0\xc5\x0f\xa9\x9b\x76\xc1\xda\xa5\x48\xb2\xa7\x20\x18\x68\xe9\x24\x31\x91\x48\x85\xa4\x92\x18\x81\xbf\xfb\x70\xa4\x24\xcb\x49\xda\x62\x01\xea\x4a\xe2\xf1\xee\x77\x77\xbf\xfb\x93\xa6\xf0\x7a\xdd\x89\x3a\x87\x6b\xc3\x58\xcb\xb3\x1b\x5e\x22\x54\xd6\xb6\x8c\x89\xa6\x55\xda\x42\xc4\x82\x10\xb5\x56\xda\x84\x2c\x08\x8b\xc6\xd2\x7f\x42\xf9\xdf\x54\xa8\xce\x8a\x9a\x5e\x8c\xd5\x99\x92\x77\x21\x63\x41\x58\x0a\x5b\x75\xeb\x24\x53\x4d\x5a\xaa\xb6\x42\x7d\x6d\x76\x0f\xd7\x26\x64\x31\x63\x69\x0a\xc6\x6a\xe4\xcd\x19\xf2\x1c\x35\x88\xa6\xad\xb1\x41\x69\x0d\x70\x09\x42\x25\xf4\x7d\x55\x2b\x83\x1a\xee\x35\x6f\x5b\xd4\x50\x28\x0d\xf4\x99\xaf\x6b\x3c\x77\x97\x41\x15\x0e\xae\x59\xa4\x69\x81\x36\xab\x12\xd3\x62\x96\xdc\x57\xdc\xde\x97\x89\xd2\x65\x9a\x30\xbb\x69\x71\xdf\x96\xb1\xba\xcb\x2c\x3c\xb2\xa0\x45\x99\x0b\x59\xc2\xe5\xd5\x7a\x63\x91\x05\x5e\x0c\xe0\xe0\xda\x24\xa7\xeb\x6b\xcc\x2c\xdb\x32\x56\x74\x32\x83\x48\xc3\xc1\x54\x4b\xec\xa0\x44\x6d\x7f\x37\x86\x48\x82\x90\x76\x06\xa8\x35\xb8\x88\xc5\x64\x41\x14\x50\xa3\x8c\x74\xd2\x9b\x8a\x61\xb9\x84\x37\x74\x12\xdc\x71\x4d\xe1\x0d\x82\xf5\xaa\x02\x80\x25\x34\xfc\x06\xa3\xac\xe2\x72\xd0\x49\x87\xa8\xf5\xaa\xda\x3b\xf4\xca\x59\x10\xd0\x3f\x9d\x78\x50\xc9\x8a\xd7\x75\x14\x6a\xe4\x79\x18\xf7\x2f\xb6\x42\x19\xce\x48\x09\x79\x10\x69\x34\x5d\x6d\x27\xbe\x39\x80\x41\x40\x18\xfd\x59\xf2\x19\x6d\x14\xe6\x4a\x62\x18\x27\x1f\x94\xaa\xa3\x41\xa4\x87\x71\x38\xa7\xd4\x1c\x9f\x7e\xf2\x1f\x35\xda\x4e\x4b\xf7\xbc\x75\xbf\x6b\x2f\x33\xd5\x76\xc7\xeb\x8e\xd4\x9d\x48\x8b\xba\xe0\x19\x46\x71\x12\x4d\xfc\xdb\x4e\x01\x72\xa3\xe4\x0b\x00\xd3\x14\x8e\x8c\xe9\x1a\x34\x20\xec\xef\x06\x38\x7c\x3c\xfd\x7a\xfc\x90\x61\x6b\x85\x92\x09\xdb\x03\xe8\xd9\x9a\xfc\x8d\xf7\xbd\x42\x8f\xa3\x41\x63\x78\x49\x48\xce\xad\x16\xb2\x8c\xe2\x9d\x79\x7a\x32\x58\xa3\x27\x45\x90\x71\x83\xb0\x86\xc5\x12\x0e\xe7\xeb\x55\xb5\x20\xb9\x31\x81\xb0\x84\xf5\x20\x43\xa9\x76\x52\xce\xb8\x97\x73\x21\x81\x37\x8e\x07\xcc\xc5\x65\xcb\x02\x09\x4b\xc8\x54\xbb\x89\xda\x19\xec\xa8\xc0\xf6\xb4\x8e\xcf\x97\x72\x71\xc5\x06\x45\x72\x06\x52\xd4\x3f\x60\xa1\xab\x91\x28\xf6\x6e\x13\xfc\x34\x85\x8b\x4a\x18\x10\xa5\x54\x1a\xa9\x9c\x36\xfd\xa1\x57\x89\x39\x14\x5a\x35\x90\x71\x99\x61\x0d\x0d\xda\x4a\xe5\x09\x9c\x2b\x28\xb8\x9e\xc1\x09\xe4\x22\x07\xa9\x2c\xa0\xcc\x54\x47\x59\x73\x2a\x32\x25\x33\x8d\x54\x24\x54\xba\xc2\x76\x9c\x62\x0f\xf7\x15\x6a\x04\x8d\xd4\x2c\xc8\x0f\x5b\x61\x6f\x4d\x18\x68\x90\x4b\x21\xcb\xa2\xab\x13\xf8\xaa\x8c\x85\xce\xa0\x1e\x90\xf5\x62\x0e\x8b\x46\xd3\x26\x1f\x54\xbe\x49\x7a\x77\x12\x67\xe6\xa4\x20\x7d\x1a\x5d\xca\x25\x62\x0e\x56\xf5\xb6\xfa\xdb\x74\x3a\x03\x61\xc9\x1b\x58\xe3\xae\x8d\x60\x0e\x5c\xe6\x60\xd1\xd0\xe3\x7d\x85\x12\x6c\xc5\xad\xd7\x92\x29\xa2\x52\xd7\x26\xec\x69\xfd\xf8\xa0\x84\xf1\x2e\xfe\x3e\xf8\x69\x0a\xae\xbf\x5c\x68\x2e\x8d\xb3\x2f\x08\xd3\x99\xea\x64\x7e\xa1\x85\x6b\x4f\x4e\x3f\x05\x7e\x82\xa1\x33\x14\x94\x4f\x74\x15\x8e\xbe\x9d\x24\x70\x62\xc1\x74\x2d\x69\x30\x7d\x53\x12\xb2\x24\xf5\x14\x02\x25\x89\x78\x2a\x17\x68\xfa\xbe\xf5\xc4\xa8\xef\x5c\x8f\x23\x1b\x2c\x1c\xec\x4b\xc4\x3b\x48\x91\xc6\x5b\x38\x38\xc3\xdb\x0e\x8d\x8d\x21\x3a\x38\xeb\x2d\xcc\x26\xed\xa9\x72\x2c\x32\xc4\xe2\x6b\x93\x7c\xae\xd5\x9a\xd7\xbe\x5e\xfe\xf4\x27\x61\xec\x2a\x29\x66\x01\x75\xdf\x1b\xdc\xcc\xc0\x55\xb4\xbb\xa2\xb9\x2c\x29\xf9\xb7\x89\x97\x76\xd5\x43\x72\xff\xf6\x52\x3b\xa1\xfe\x92\xab\xe7\xde\x68\x1f\x72\xea\xed\x32\x0f\x67\x13\xe5\xf1\x58\x38\xaa\xb5\xa4\xa3\xe1\xed\xa5\x71\x65\x7b\x25\x86\x3e\xf2\xb8\x25\x65\xa1\xe7\x6f\xb8\x00\xf7\x47\x58\xbe\xba\x2f\x54\xd7\x61\x6f\xa9\x3f\xed\xdf\xdc\x49\xa6\x31\x47\x69\x05\xaf\xe9\x34\x34\xbc\xc1\xb9\xd2\xa2\x14\xae\x63\x6e\x99\x6f\x8a\xb7\x8e\x94\xf0\xcb\x92\x78\xe0\xc0\x53\x75\x9d\x7e\x3c\x5d\xc0\x27\x21\x73\x50\x9d\x05\x2f\x48\x41\xa6\xd4\x6d\x06\x26\xfa\xe4\x62\x4e\x43\x41\xb9\xb2\x70\x99\x1a\x65\x35\x27\x6a\x13\x69\x68\x6e\x00\xcf\xef\x88\x7a\x8e\xd0\x89\xb7\xe3\xff\xce\x11\xe1\x43\x57\x14\xa8\xcf\x55\xa7\x33\x04\x6e\x7f\x32\xf2\x7e\x25\x18\xf3\x46\x3c\x08\xd7\x1a\xe9\x6d\x36\xb4\x2a\x3f\xb0\xdd\x70\x3d\xaa\xeb\x68\xf0\x90\x02\x2e\x0a\x27\x34\xf1\x35\x18\x8e\x87\xaa\x84\x34\xdd\xf1\x0b\x9a\xce\x58\xe0\xf5\x3d\xdf\x18\xc8\x48\xc0\x79\xe9\xcd\x09\x99\xd5\x9d\x6b\x6c\x4a\x0e\x1d\x79\xd2\x1e\xa5\xa8\x27\x0d\xf2\x99\x1d\x16\x50\xe2\x2f\x43\xd2\x15\x5e\x51\xc7\x55\xf9\xc6\x65\x85\xaa\xe4\x9b\x56\x8d\x30\xb8\xcf\x59\xcf\x25\x17\x90\x70\xe6\x32\xf7\xcf\xd9\x97\xb1\xd5\xcf\x40\xb5\x36\x66\x6c\x9c\xb9\xa4\xe7\xc9\x58\x1d\xeb\x83\xcc\xfb\x69\xf2\xe2\xd8\x8d\xf7\x50\x3c\x1d\xb5\x3f\x9c\xb4\x9e\x80\x04\xdc\xd7\xcb\xe3\xd6\xc7\x64\x37\x2d\xab\xb1\xea\x7a\x87\x94\x3e\xe6\xce\x25\xa7\xd8\x55\x87\xab\x94\x17\xa6\x64\x76\x43\x9a\x57\x5c\x2a\x29\x32\x5e\x7b\x13\x7f\xe1\x26\xba\xc1\xcd\xfe\xd0\xeb\x81\x5c\x66\x37\x14\x5c\x5f\x80\xd1\xee\x5b\x5f\x85\x4f\x06\x25\x85\x2f\x08\x32\x25\x2d\x4a\xfb\x05\x65\x69\x2b\xc7\x28\x69\xdf\xbf\x8b\xe6\x6f\x9d\x90\x28\x20\xab\x47\xb2\xf5\x3b\x61\xf2\x8d\x6b\x83\x27\xd2\xf6\x26\xbc\xa7\x2b\xaf\x68\xee\x35\x85\xf1\x0c\xde\xbe\x99\xc1\xfb\x77\xf1\x1f\xee\xfa\x72\x42\xc3\x27\x46\x97\x90\xd5\x0e\x91\x03\x34\x99\xdb\x7e\x28\xf7\xa9\x3d\x9c\xc3\xab\x21\xa3\x5e\xcb\xb9\xe5\xb6\x33\x7d\xa3\x80\xbd\x25\xc5\xb8\xa3\xc9\x6e\x00\xaf\x21\x84\x10\x5e\x83\xbf\x74\x81\x0f\x36\x7a\xf1\x02\xb9\x15\xc7\xb3\x89\x81\x95\xca\x71\xf1\x5d\x03\x4e\xde\x8b\xfb\x04\x8d\x78\x7c\x70\xfc\xd1\x6a\xea\xf0\x02\xf6\xfc\xf7\x12\x54\x2e\xe3\x55\x80\x57\xd3\xa5\xe0\xd1\xbf\x2c\xf6\x10\xb8\x5a\x1a\x68\x55\xa2\xf5\xa2\x61\xec\xf7\xaf\xa0\x9f\x13\x8b\x31\x38\xb7\xee\xfb\x76\x31\xc6\xf5\x70\x4e\x55\xe5\x90\x3d\xd8\x28\x4e\x3e\x2a\x89\x51\xbc\x60\xfd\xf2\xb7\x9d\xb0\xff\xe5\x35\xee\x59\xa6\xc6\x95\xad\x68\x6c\x72\x4c\xe5\x55\x44\xa1\x44\x9b\x52\x7f\x5b\xf8\x7e\x19\xc5\x50\x70\x51\x63\xbe\x80\xdf\x8c\xab\x6c\xb7\xd2\x8d\xd4\xfc\x5f\xf8\x62\x36\x01\xf1\x93\x4b\x63\xa3\x3f\x5a\xd3\xe4\x1d\xda\xb6\x28\xa0\x55\xc6\x88\x75\x8d\xcf\x86\x3b\x7b\xd6\xdf\x86\x45\x74\xe2\xd5\xa0\xc8\x6f\x1a\x98\xd3\xae\x31\xf2\xd6\x6f\x93\x9e\xc1\x8b\x9d\x3a\xfa\xe0\xf7\xc0\xef\xed\x9d\xcf\xfa\xea\x96\x6d\xd9\x7f\x01\x00\x00\xff\xff\xcd\xea\xf8\xb6\xdf\x0d\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x94\x56\x5f\x6f\xdb\x36\x10\x7f\x16\x3f\xc5\x4d\xc3\x3a\x29\xb5\xa5\x16\x28\xfa\xe0\xc5\x0f\xa9\x9b\x76\xc1\xda\xa5\x48\xb2\xa7\x20\x18\x68\xe9\x24\x31\x91\x48\x85\xa4\x92\x18\x81\xbf\xfb\x70\xa4\x24\xcb\x49\xda\x62\x01\xea\x4a\xe2\xf1\xee\x77\x77\xbf\xfb\x93\xa6\xf0\x7a\xdd\x89\x3a\x87\x6b\xc3\x58\xcb\xb3\x1b\x5e\x22\x54\xd6\xb6\x8c\x89\xa6\x55\xda\x42\xc4\x82\x10\xb5\x56\xda\x84\x2c\x08\x8b\xc6\xd2\x7f\x42\xf9\xdf\x54\xa8\xce\x8a\x9a\x5e\x8c\xd5\x99\x92\x77\x21\x63\x41\x58\x0a\x5b\x75\xeb\x24\x53\x4d\x5a\xaa\xb6\x42\x7d\x6d\x76\x0f\xd7\x26\x64\x31\x63\x69\x0a\xc6\x6a\xe4\xcd\x19\xf2\x1c\x35\x88\xa6\xad\xb1\x41\x69\x0d\x70\x09\x42\x25\xf4\x7d\x55\x2b\x83\x1a\xee\x35\x6f\x5b\xd4\x50\x28\x0d\xf4\x99\xaf\x6b\x3c\x77\x97\x41\x15\x0e\xae\x59\xa4\x69\x81\x36\xab\x12\xd3\x62\x96\xdc\x57\xdc\xde\x97\x89\xd2\x65\x9a\x30\xbb\x69\x71\xdf\x96\xb1\xba\xcb\x2c\x3c\xb2\xa0\x45\x99\x0b\x59\xc2\xe5\xd5\x7a\x63\x91\x05\x5e\x0c\xe0\xe0\xda\x24\xa7\xeb\x6b\xcc\x2c\xdb\x32\x56\x74\x32\x83\x48\xc3\xc1\x54\x4b\xec\xa0\x44\x6d\x7f\x37\x86\x48\x82\x90\x76\x06\xa8\x35\xb8\x88\xc5\x64\x41\x14\x50\xa3\x8c\x74\xd2\x9b\x8a\x61\xb9\x84\x37\x74\x12\xdc\x71\x4d\xe1\x0d\x82\xf5\xaa\x02\x80\x25\x34\xfc\x06\xa3\xac\xe2\x72\xd0\x49\x87\xa8\xf5\xaa\xda\x3b\xf4\xca\x59\x10\xd0\x3f\x9d\x78\x50\xc9\x8a\xd7\x75\x14\x6a\xe4\x79\x18\xf7\x2f\xb6\x42\x19\xce\x48\x09\x79\x10\x69\x34\x5d\x6d\x27\xbe\x39\x80\x41\x40\x18\xfd\x59\xf2\x19\x6d\x14\xe6\x4a\x62\x18\x27\x1f\x94\xaa\xa3\x41\xa4\x87\x71\x38\xa7\xd4\x1c\x9f\x7e\xf2\x1f\x35\xda\x4e\x4b\xf7\xbc\x75\xbf\x6b\x2f\x33\xd5\x76\xc7\xeb\x8e\xd4\x9d\x48\x8b\xba\xe0\x19\x46\x71\x12\x4d\xfc\xdb\x4e\x01\x72\xa3\xe4\x0b\x00\xd3\x14\x8e\x8c\xe9\x1a\x34\x20\xec\xef\x06\x38\x7c\x3c\xfd\x7a\xfc\x90\x61\x6b\x85\x92\x09\xdb\x03\xe8\xd9\x9a\xfc\x8d\xf7\xbd\x42\x8f\xa3\x41\x63\x78\x49\x48\xce\xad\x16\xb2\x8c\xe2\x9d\x79\x7a\x32\x58\xa3\x27\x45\x90\x71\x83\xb0\x86\xc5\x12\x0e\xe7\xeb\x55\xb5\x20\xb9\x31\x81\xb0\x84\xf5\x20\x43\xa9\x76\x52\xce\xb8\x97\x73\x21\x81\x37\x8e\x07\xcc\xc5\x65\xcb\x02\x09\x4b\xc8\x54\xbb\x89\xda\x19\xec\xa8\xc0\xf6\xb4\x8e\xcf\x97\x72\x71\xc5\x06\x45\x72\x06\x52\xd4\x3f\x60\xa1\xab\x91\x28\xf6\x6e\x13\xfc\x34\x85\x8b\x4a\x18\x10\xa5\x54\x1a\xa9\x9c\x36\xfd\xa1\x57\x89\x39\x14\x5a\x35\x90\x71\x99\x61\x0d\x0d\xda\x4a\xe5\x09\x9c\x2b\x28\xb8\x9e\xc1\x09\xe4\x22\x07\xa9\x2c\xa0\xcc\x54\x47\x59\x73\x2a\x32\x25\x33\x8d\x54\x24\x54\xba\xc2\x76\x9c\x62\x0f\xf7\x15\x6a\x04\x8d\xd4\x2c\xc8\x0f\x5b\x61\x6f\x4d\x18\x68\x90\x4b\x21\xcb\xa2\xab\x13\xf8\xaa\x8c\x85\xce\xa0\x1e\x90\xf5\x62\x0e\x8b\x46\xd3\x26\x1f\x54\xbe\x49\x7a\x77\x12\x67\xe6\xa4\x20\x7d\x1a\x5d\xca\x25\x62\x0e\x56\xf5\xb6\xfa\xdb\x74\x3a\x03\x61\xc9\x1b\x58\xe3\xae\x8d\x60\x0e\x5c\xe6\x60\xd1\xd0\xe3\x7d\x85\x12\x6c\xc5\xad\xd7\x92\x29\xa2\x52\xd7\x26\xec\x69\xfd\xf8\xa0\x84\xf1\x2e\xfe\x3e\xf8\x69\x0a\xae\xbf\x5c\x68\x2e\x8d\xb3\x2f\x08\xd3\x99\xea\x64\x7e\xa1\x85\x6b\x4f\x4e\x3f\x05\x7e\x82\xa1\x33\x14\x94\x4f\x74\x15\x8e\xbe\x9d\x24\x70\x62\xc1\x74\x2d\x69\x30\x7d\x53\x12\xb2\x24\xf5\x14\x02\x25\x89\x78\x2a\x17\x68\xfa\xbe\xf5\xc4\xa8\xef\x5c\x8f\x23\x1b\x2c\x1c\xec\x4b\xc4\x3b\x48\x91\xc6\x5b\x38\x38\xc3\xdb\x0e\x8d\x8d\x21\x3a\x38\xeb\x2d\xcc\x26\xed\xa9\x72\x2c\x32\xc4\xe2\x6b\x93\x7c\xae\xd5\x9a\xd7\xbe\x5e\xfe\xf4\x27\x61\xec\x2a\x29\x66\x01\x75\xdf\x1b\xdc\xcc\xc0\x55\xb4\xbb\xa2\xb9\x2c\x29\xf9\xb7\x89\x97\x76\xd5\x43\x72\xff\xf6\x52\x3b\xa1\xfe\x92\xab\xe7\xde\x68\x1f\x72\xea\xed\x32\x0f\x67\x13\xe5\xf1\x58\x38\xaa\xb5\xa4\xa3\xe1\xed\xa5\x71\x65\x7b\x25\x86\x3e\xf2\xb8\x25\x65\xa1\xe7\x6f\xb8\x00\xf7\x47\x58\xbe\xba\x2f\x54\xd7\x61\x6f\xa9\x3f\xed\xdf\xdc\x49\xa6\x31\x47\x69\x05\xaf\xe9\x34\x34\xbc\xc1\xb9\xd2\xa2\x14\xae\x63\x6e\x99\x6f\x8a\xb7\x8e\x94\xf0\xcb\x92\x78\xe0\xc0\x53\x75\x9d\x7e\x3c\x5d\xc0\x27\x21\x73\x50\x9d\x05\x2f\x48\x41\xa6\xd4\x6d\x06\x26\xfa\xe4\x62\x4e\x43\x41\xb9\xb2\x70\x99\x1a\x65\x35\x27\x6a\x13\x69\x68\x6e\x00\xcf\xef\x88\x7a\x8e\xd0\x89\xb7\xe3\xff\xce\x11\xe1\x43\x57\x14\xa8\xcf\x55\xa7\x33\x04\x6e\x7f\x32\xf2\x7e\x25\x18\xf3\x46\x3c\x08\xd7\x1a\xe9\x6d\x36\xb4\x2a\x3f\xb0\xdd\x70\x3d\xaa\xeb\x68\xf0\x90\x02\x2e\x0a\x27\x34\xf1\x35\x18\x8e\x87\xaa\x84\x34\xdd\xf1\x0b\x9a\xce\x58\xe0\xf5\x3d\xdf\x18\xc8\x48\xc0\x79\xe9\xcd\x09\x99\xd5\x9d\x6b\x6c\x4a\x0e\x1d\x79\xd2\x1e\xa5\xa8\x27\x0d\xf2\x99\x1d\x16\x50\xe2\x2f\x43\xd2\x15\x5e\x51\xc7\x55\xf9\xc6\x65\x85\xaa\xe4\x9b\x56\x8d\x30\xb8\xcf\x59\xcf\x25\x17\x90\x70\xe6\x32\xf7\xcf\xd9\x97\xb1\xd5\xcf\x40\xb5\x36\x66\x6c\x9c\xb9\xa4\xe7\xc9\x58\x1d\xeb\x83\xcc\xfb\x69\xf2\xe2\xd8\x8d\xf7\x50\x3c\x1d\xb5\x3f\x9c\xb4\x9e\x80\x04\xdc\xd7\xcb\xe3\xd6\xc7\x64\x37\x2d\xab\xb1\xea\x7a\x87\x94\x3e\xe6\xce\x25\xa7\xd8\x55\x87\xab\x94\x17\xa6\x64\x76\x43\x9a\x57\x5c\x2a\x29\x32\x5e\x7b\x13\x7f\xe1\x26\xba\xc1\xcd\xfe\xd0\xeb\x81\x5c\x66\x37\x14\x5c\x5f\x80\xd1\xee\x5b\x5f\x85\x4f\x06\x25\x85\x2f\x08\x32\x25\x2d\x4a\xfb\x05\x65\x69\x2b\xc7\x28\x69\xdf\xbf\x8b\xe6\x6f\x9d\x90\x28\x20\xab\x47\xb2\xf5\x3b\x61\xf2\x8d\x6b\x83\x27\xd2\xf6\x26\xbc\xa7\x2b\xaf\x68\xee\x35\x85\xf1\x0c\xde\xbe\x99\xc1\xfb\x77\xf1\x1f\xee\xfa\x72\x42\xc3\x27\x46\x97\x90\xd5\x0e\x91\x03\x34\x99\xdb\x7e\x28\xf7\xa9\x3d\x9c\xc3\xab\x21\xa3\x5e\xcb\xb9\xe5\xb6\x33\x7d\xa3\x80\xbd\x25\xc5\xb8\xa3\xc9\x6e\x00\xaf\x21\x84\x10\x5e\x83\xbf\x74\x81\x0f\x36\x7a\xf1\x02\xb9\x15\xc7\xb3\x89\x81\x95\xca\x71\xf1\x5d\x03\x4e\xde\x8b\xfb\x04\x8d\x78\x7c\x70\xfc\xd1\x6a\xea\xf0\x02\xf6\xfc\xf7\x12\x54\x2e\xe3\x55\x80\x57\xd3\xa5\xe0\xd1\xbf\x2c\xf6\x10\xb8\x5a\x1a\x68\x55\xa2\xf5\xa2\x61\xec\xf7\xaf\xa0\x9f\x13\x8b\x31\x38\xb7\xee\xfb\x76\x31\xc6\xf5\x70\x4e\x55\xe5\x90\x3d\xd8\x28\x4e\x3e\x2a\x89\x51\xbc\x60\xfd\xf2\xb7\x9d\xb0\xff\xe5\x35\xee\x59\xa6\xc6\x95\xad\x68\x6c\x72\x4c\xe5\x55\x44\xa1\x44\x9b\x52\x7f\x5b\xf8\x7e\x19\xc5\x50\x70\x51\x63\xbe\x80\xdf\x8c\xab\x6c\xb7\xd2\x8d\xd4\xfc\x5f\xf8\x62\x36\x01\xf1\x93\x4b\x63\xa3\x3f\x5a\xd3\xe4\x1d\xda\xb6\x28\xa0\x55\xc6\x88\x75\x8d\xcf\x86\x3b\x7b\xd6\xdf\x86\x45\x74\xe2\xd5\xa0\xc8\x6f\x1a\x98\xd3\xae\x31\xf2\xd6\x6f\x93\x9e\xc1\x8b\x9d\x3a\xfa\xe0\xf7\xc0\xef\xed\x9d\xcf\xfa\xea\x96\x6d\xd9\x7f\x01\x00\x00\xff\xff\xcd\xea\xf8\xb6\xdf\x0d\x00\x00"), }, "/src/net/http/http.go": &vfsgen۰CompressedFileInfo{ name: "http.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 210801500, time.UTC), uncompressedSize: 2998, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x56\x61\x6f\xdb\x36\x10\xfd\x2c\xfe\x8a\xab\x06\x04\x52\xaa\xc8\x0d\x50\x74\x43\x1a\x63\xc8\xd2\xae\x09\xd0\x74\x85\x93\x02\x05\xba\xa2\xa0\xa5\x93\xc4\x84\x26\x15\x92\x8a\xe3\x15\xfe\xef\xc3\x91\xb2\x22\x3b\xe9\x86\x2d\x5f\x42\x93\xc7\xbb\x7b\x8f\xef\xee\x34\x99\xc0\xf3\x79\x27\x64\x09\xd7\x96\xb1\x96\x17\x37\xbc\x46\x68\x9c\x6b\x19\x13\x8b\x56\x1b\x07\x09\x8b\xe2\x79\x57\x09\x1d\xd3\x62\xe5\xd0\xd2\x02\x8d\xd1\xc6\xaf\x84\x9e\x08\xdd\x39\x21\xe9\x87\x42\x37\x71\x78\xef\x5a\xa3\x9d\xbf\x60\x9d\x29\xb4\xba\x8b\x19\x8b\xe2\x5a\xb8\xa6\x9b\xe7\x85\x5e\x4c\x6a\xdd\x36\x68\xae\xed\xc3\xe2\xda\xc6\x2c\x65\xec\x8e\x1b\x78\x83\x15\xef\xa4\xbb\x32\x5c\x59\x9f\xc2\x14\xaa\x4e\x15\x49\x0a\x33\xdd\xa9\xf2\xca\x88\xb6\x45\x03\xdf\x59\x64\x97\xc2\x15\x0d\xad\x0a\x6e\x11\xae\x6d\xfe\x4e\xea\x39\x97\xf9\x3b\x74\x49\x5c\xa1\x2b\x9a\x38\x85\x67\x53\x3a\xf9\xa4\x4a\xac\x84\xc2\x12\xf6\xf6\x76\x2d\x67\xc8\x4b\x3e\x97\x78\xe9\x0c\xf2\xc5\xe3\x2b\x47\x30\x99\xc0\xb6\x11\x08\x0b\x9d\xc5\x12\xb8\x05\x0e\x45\x83\xc5\x0d\x54\xda\x80\xed\x5a\x9f\xb3\xae\xc0\x7a\x43\xa1\x6a\x30\x68\x5b\xad\x2c\xc2\x5c\x97\x02\x6d\x06\x16\x03\xcb\xf6\x68\x32\xf1\x69\xe6\xb6\xc5\x22\x5f\x36\xdc\x2d\xeb\x5c\x9b\x7a\xf2\x53\xb8\x6d\x73\x16\x45\x06\x5d\x67\x14\xec\x79\xcb\x81\x96\xef\xeb\xa7\x61\x7f\xbe\x78\x7f\xe6\x5c\x3b\xc3\xdb\x0e\xad\x7b\x02\xcc\xc8\xe3\xe7\xb3\xd9\x96\xbf\x32\x50\x3f\x32\x51\x7a\xcb\x60\xcd\xd6\x49\xca\xd8\x64\x32\x3e\x18\xb8\x58\x36\xa8\x40\xa1\x70\x0d\x1a\xf8\x9d\xb2\x85\x93\x8f\xe7\xa0\xb4\x81\xed\xac\xfc\x36\x37\x08\xfc\x8e\x0b\x49\xac\xe6\x70\xee\x80\xcb\x25\x5f\x59\xa8\xb8\x90\x36\x67\x6e\xd5\xe2\x56\x18\xeb\x4c\x57\x50\x1a\x8c\xf4\x00\xc9\xe8\x6c\xa4\x8d\xc4\xe0\x2d\xec\xf7\x81\x52\x48\xf6\x67\x3d\xfb\x19\x78\xd5\xa6\xa4\x97\x0d\x3a\x21\xfb\x5d\x9b\x7f\xc0\x65\xe2\x05\x4c\x0f\x73\x34\xc0\xd0\x55\x8f\xe4\x69\x14\x96\xc0\x0f\x28\xe2\x94\xad\x59\x48\x7c\x4c\x6d\x9f\x39\x05\x16\xaa\x92\xa2\x6e\x1c\x2c\x78\xfb\x65\x93\xe5\xd7\xfd\x6b\x9b\xff\x31\xbf\xc6\xc2\xb1\x01\x9d\x83\xfd\xb1\x8f\xff\x8a\xf0\xbe\x31\x70\x34\xfd\x37\x71\x78\xd4\x29\x63\x91\xa8\xc0\xe5\x43\x72\xd3\x29\x51\x43\x6e\xa2\xf1\xee\x8f\x92\x0e\xca\x18\x99\x7e\x31\x78\xfb\x15\xa6\x70\xdf\x18\x2f\x2a\x34\x50\xa2\x44\x87\xc9\x83\x4d\x06\x06\x6f\x29\x34\x55\xc7\x69\x43\xc9\x2e\xf8\x0d\x26\x45\xc3\x15\x0c\x90\x52\x16\xa1\x31\xbb\xc7\x01\x26\xf3\x28\xf3\x4b\x02\xa6\x95\xd4\xbc\x8c\xb3\x4d\xab\xa0\xd4\x1b\xe4\x25\x9a\x0c\xbe\xd1\xe5\xa1\x2d\x11\xe4\x99\x3f\x49\x7c\x5f\x1b\xff\xa6\xf6\x36\xfa\xfd\xe5\x2b\xed\x24\x14\xe4\x94\x4b\x99\xc4\x35\xba\x13\x29\x37\xb9\x9d\x79\x2b\x1b\xa7\xf9\xa5\x33\x42\xd5\x49\x0a\xcf\x21\xfe\x53\xc5\x69\x9a\xa6\x39\xf9\xb8\x38\xbf\x78\x1b\xac\x92\x94\x45\xd1\x5c\x97\xab\x27\x1e\xe5\x93\x50\xee\x97\x13\x63\xf8\xaa\x7f\x10\x0a\xe8\x4f\x36\x8d\x23\x4e\xd3\xfc\x5c\x39\x34\x15\x2f\x30\x49\xf3\x3e\x33\x62\x20\x2a\xb4\x72\xa8\xdc\x7b\x54\xb5\xf3\x34\x09\xe5\x5e\xbd\x4c\x0e\x0e\x29\x62\xdf\x21\x0d\xde\xe6\x17\xe8\x1a\x5d\x7a\x62\x7c\xdb\x88\xcf\xde\x9e\xbc\x89\xa9\xd4\xe9\xf1\x43\x1d\xd0\xf5\xbe\x65\xe7\x1f\xb9\xb1\x78\xae\x5c\x12\x68\x0c\x09\x9d\x86\x60\x07\x21\x5a\x9c\x66\x70\xf8\x22\x83\x57\x2f\xd3\xd7\xfe\xfa\x48\x37\xbb\x89\x4d\x41\xd2\xee\x9a\x45\xe3\x2e\xf3\xc8\x28\x24\x2f\x51\x25\x44\x56\x4a\x18\xd6\xcc\xb7\x23\x2f\x92\xe3\x03\xd8\xdb\xd0\xef\xa3\x5c\x3a\xee\x3a\x7b\x04\xfd\xdf\xc0\x9c\xf5\xfb\x3b\x4f\x03\x31\x3c\xdf\x35\xb9\xc2\x7b\x37\x32\xcb\x1e\x9c\x9e\xea\x12\x8f\x9e\x76\x4a\xb4\x04\xd3\xf0\xba\x43\xfc\xfe\xb1\x03\x65\xc1\xe2\x74\x8c\xf0\x08\xb6\x00\x7b\x83\xdf\x74\xb9\x1a\x1c\x00\x84\x69\x9a\x7f\xd0\xed\xa9\xd4\xf6\x09\x55\x06\x62\xfc\xd5\xbe\x14\x37\xb7\x0d\xde\x66\x9e\xb0\x68\xbd\x53\x1c\xbe\x60\x36\xd5\x81\xf0\x50\xba\xa1\x52\x42\x89\x1d\x1f\xfc\xa0\x17\xee\xb4\x3d\xea\xcf\x58\xc6\xe9\xe3\x30\x7c\xae\x8d\xfb\xdf\x61\x4c\xef\xbf\xe0\xaa\xc0\xdd\x08\xa1\x00\x75\x8b\x2a\xce\x46\x7a\x0e\xeb\x4f\xb3\xf7\xc3\x0b\xa6\xa3\x8c\x36\xf5\x73\xb5\x6a\x31\xce\x20\xe6\x54\x64\xf3\xae\xaa\xd0\xc4\x29\x0d\xf5\x86\x5b\x70\x1a\xe6\x08\xbc\x72\x68\x20\x04\x80\x4e\x39\x21\x87\x09\x3d\xef\xea\xbf\x84\x94\x3c\x5f\xe8\xf0\x9f\x06\xb4\x6d\xf4\xf2\xdb\xbc\xab\xf3\xa2\x16\xbf\x8a\x72\x7a\x78\x78\xf8\xe2\xe7\x57\x87\x34\x0e\x0c\x5a\x2d\xef\xb0\x64\x11\x7d\x11\xdc\xe0\x2a\x83\x3b\x2e\x3b\xb4\x54\x5e\x86\xab\x1a\x7d\xd2\x41\x2b\x9e\x18\xb2\xfb\xd6\x5b\x3d\x18\xf5\x97\xbc\xce\x1f\x28\xb0\xe8\xfa\x87\x08\x0e\xe2\x6c\x14\x22\xed\x9f\xdf\x37\x74\x0a\x42\xe2\x1a\x97\xe5\xd8\x8f\x0a\x0c\x03\x4a\x8b\xfe\x90\x94\x35\xf4\x81\x5e\x87\x24\xba\x13\x29\x93\x8d\x33\x8a\x20\x2a\x6f\xf4\x6c\x54\xed\x9b\xe3\xdc\x8b\x36\xf1\xe4\x0e\x03\x0b\x16\x9d\x1d\xa6\x7b\x41\x06\xe0\x1a\xff\x35\xb4\xca\x40\xa8\x42\x76\x25\x7d\x26\x69\xb5\x11\x46\xf0\xb8\x35\xa2\x03\xb0\x47\x71\x1e\x43\xca\xbc\x5f\x02\xc6\x58\x64\x51\x62\x18\xbc\xbe\xe7\x91\x1e\x08\xdb\xf1\x41\xe8\x27\xa3\x0f\x1d\xda\xc8\x28\x5a\x6f\xda\xb3\x70\x7c\xe0\x45\x3b\xfe\x22\x1a\x12\x5a\xff\xc3\xb0\x3e\xf5\x1a\xee\x1f\x6a\x67\x60\x7f\xf7\xaf\x73\xdf\x98\x0c\xf4\x8d\x9f\x4d\xdb\x83\xf3\x35\x6d\x6f\x3f\x56\x28\xac\x34\xc4\xfc\x3b\x00\x00\xff\xff\x05\x0b\xbb\x60\xb6\x0b\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x9c\x56\x61\x6f\xdb\x36\x10\xfd\x2c\xfe\x8a\xab\x06\x04\x52\xaa\xc8\x0d\x50\x74\x43\x1a\x63\xc8\xd2\xae\x09\xd0\x74\x85\x93\x02\x05\xba\xa2\xa0\xa5\x93\xc4\x84\x26\x15\x92\x8a\xe3\x15\xfe\xef\xc3\x91\xb2\x22\x3b\xe9\x86\x2d\x5f\x42\x93\xc7\xbb\x7b\x8f\xef\xee\x34\x99\xc0\xf3\x79\x27\x64\x09\xd7\x96\xb1\x96\x17\x37\xbc\x46\x68\x9c\x6b\x19\x13\x8b\x56\x1b\x07\x09\x8b\xe2\x79\x57\x09\x1d\xd3\x62\xe5\xd0\xd2\x02\x8d\xd1\xc6\xaf\x84\x9e\x08\xdd\x39\x21\xe9\x87\x42\x37\x71\x78\xef\x5a\xa3\x9d\xbf\x60\x9d\x29\xb4\xba\x8b\x19\x8b\xe2\x5a\xb8\xa6\x9b\xe7\x85\x5e\x4c\x6a\xdd\x36\x68\xae\xed\xc3\xe2\xda\xc6\x2c\x65\xec\x8e\x1b\x78\x83\x15\xef\xa4\xbb\x32\x5c\x59\x9f\xc2\x14\xaa\x4e\x15\x49\x0a\x33\xdd\xa9\xf2\xca\x88\xb6\x45\x03\xdf\x59\x64\x97\xc2\x15\x0d\xad\x0a\x6e\x11\xae\x6d\xfe\x4e\xea\x39\x97\xf9\x3b\x74\x49\x5c\xa1\x2b\x9a\x38\x85\x67\x53\x3a\xf9\xa4\x4a\xac\x84\xc2\x12\xf6\xf6\x76\x2d\x67\xc8\x4b\x3e\x97\x78\xe9\x0c\xf2\xc5\xe3\x2b\x47\x30\x99\xc0\xb6\x11\x08\x0b\x9d\xc5\x12\xb8\x05\x0e\x45\x83\xc5\x0d\x54\xda\x80\xed\x5a\x9f\xb3\xae\xc0\x7a\x43\xa1\x6a\x30\x68\x5b\xad\x2c\xc2\x5c\x97\x02\x6d\x06\x16\x03\xcb\xf6\x68\x32\xf1\x69\xe6\xb6\xc5\x22\x5f\x36\xdc\x2d\xeb\x5c\x9b\x7a\xf2\x53\xb8\x6d\x73\x16\x45\x06\x5d\x67\x14\xec\x79\xcb\x81\x96\xef\xeb\xa7\x61\x7f\xbe\x78\x7f\xe6\x5c\x3b\xc3\xdb\x0e\xad\x7b\x02\xcc\xc8\xe3\xe7\xb3\xd9\x96\xbf\x32\x50\x3f\x32\x51\x7a\xcb\x60\xcd\xd6\x49\xca\xd8\x64\x32\x3e\x18\xb8\x58\x36\xa8\x40\xa1\x70\x0d\x1a\xf8\x9d\xb2\x85\x93\x8f\xe7\xa0\xb4\x81\xed\xac\xfc\x36\x37\x08\xfc\x8e\x0b\x49\xac\xe6\x70\xee\x80\xcb\x25\x5f\x59\xa8\xb8\x90\x36\x67\x6e\xd5\xe2\x56\x18\xeb\x4c\x57\x50\x1a\x8c\xf4\x00\xc9\xe8\x6c\xa4\x8d\xc4\xe0\x2d\xec\xf7\x81\x52\x48\xf6\x67\x3d\xfb\x19\x78\xd5\xa6\xa4\x97\x0d\x3a\x21\xfb\x5d\x9b\x7f\xc0\x65\xe2\x05\x4c\x0f\x73\x34\xc0\xd0\x55\x8f\xe4\x69\x14\x96\xc0\x0f\x28\xe2\x94\xad\x59\x48\x7c\x4c\x6d\x9f\x39\x05\x16\xaa\x92\xa2\x6e\x1c\x2c\x78\xfb\x65\x93\xe5\xd7\xfd\x6b\x9b\xff\x31\xbf\xc6\xc2\xb1\x01\x9d\x83\xfd\xb1\x8f\xff\x8a\xf0\xbe\x31\x70\x34\xfd\x37\x71\x78\xd4\x29\x63\x91\xa8\xc0\xe5\x43\x72\xd3\x29\x51\x43\x6e\xa2\xf1\xee\x8f\x92\x0e\xca\x18\x99\x7e\x31\x78\xfb\x15\xa6\x70\xdf\x18\x2f\x2a\x34\x50\xa2\x44\x87\xc9\x83\x4d\x06\x06\x6f\x29\x34\x55\xc7\x69\x43\xc9\x2e\xf8\x0d\x26\x45\xc3\x15\x0c\x90\x52\x16\xa1\x31\xbb\xc7\x01\x26\xf3\x28\xf3\x4b\x02\xa6\x95\xd4\xbc\x8c\xb3\x4d\xab\xa0\xd4\x1b\xe4\x25\x9a\x0c\xbe\xd1\xe5\xa1\x2d\x11\xe4\x99\x3f\x49\x7c\x5f\x1b\xff\xa6\xf6\x36\xfa\xfd\xe5\x2b\xed\x24\x14\xe4\x94\x4b\x99\xc4\x35\xba\x13\x29\x37\xb9\x9d\x79\x2b\x1b\xa7\xf9\xa5\x33\x42\xd5\x49\x0a\xcf\x21\xfe\x53\xc5\x69\x9a\xa6\x39\xf9\xb8\x38\xbf\x78\x1b\xac\x92\x94\x45\xd1\x5c\x97\xab\x27\x1e\xe5\x93\x50\xee\x97\x13\x63\xf8\xaa\x7f\x10\x0a\xe8\x4f\x36\x8d\x23\x4e\xd3\xfc\x5c\x39\x34\x15\x2f\x30\x49\xf3\x3e\x33\x62\x20\x2a\xb4\x72\xa8\xdc\x7b\x54\xb5\xf3\x34\x09\xe5\x5e\xbd\x4c\x0e\x0e\x29\x62\xdf\x21\x0d\xde\xe6\x17\xe8\x1a\x5d\x7a\x62\x7c\xdb\x88\xcf\xde\x9e\xbc\x89\xa9\xd4\xe9\xf1\x43\x1d\xd0\xf5\xbe\x65\xe7\x1f\xb9\xb1\x78\xae\x5c\x12\x68\x0c\x09\x9d\x86\x60\x07\x21\x5a\x9c\x66\x70\xf8\x22\x83\x57\x2f\xd3\xd7\xfe\xfa\x48\x37\xbb\x89\x4d\x41\xd2\xee\x9a\x45\xe3\x2e\xf3\xc8\x28\x24\x2f\x51\x25\x44\x56\x4a\x18\xd6\xcc\xb7\x23\x2f\x92\xe3\x03\xd8\xdb\xd0\xef\xa3\x5c\x3a\xee\x3a\x7b\x04\xfd\xdf\xc0\x9c\xf5\xfb\x3b\x4f\x03\x31\x3c\xdf\x35\xb9\xc2\x7b\x37\x32\xcb\x1e\x9c\x9e\xea\x12\x8f\x9e\x76\x4a\xb4\x04\xd3\xf0\xba\x43\xfc\xfe\xb1\x03\x65\xc1\xe2\x74\x8c\xf0\x08\xb6\x00\x7b\x83\xdf\x74\xb9\x1a\x1c\x00\x84\x69\x9a\x7f\xd0\xed\xa9\xd4\xf6\x09\x55\x06\x62\xfc\xd5\xbe\x14\x37\xb7\x0d\xde\x66\x9e\xb0\x68\xbd\x53\x1c\xbe\x60\x36\xd5\x81\xf0\x50\xba\xa1\x52\x42\x89\x1d\x1f\xfc\xa0\x17\xee\xb4\x3d\xea\xcf\x58\xc6\xe9\xe3\x30\x7c\xae\x8d\xfb\xdf\x61\x4c\xef\xbf\xe0\xaa\xc0\xdd\x08\xa1\x00\x75\x8b\x2a\xce\x46\x7a\x0e\xeb\x4f\xb3\xf7\xc3\x0b\xa6\xa3\x8c\x36\xf5\x73\xb5\x6a\x31\xce\x20\xe6\x54\x64\xf3\xae\xaa\xd0\xc4\x29\x0d\xf5\x86\x5b\x70\x1a\xe6\x08\xbc\x72\x68\x20\x04\x80\x4e\x39\x21\x87\x09\x3d\xef\xea\xbf\x84\x94\x3c\x5f\xe8\xf0\x9f\x06\xb4\x6d\xf4\xf2\xdb\xbc\xab\xf3\xa2\x16\xbf\x8a\x72\x7a\x78\x78\xf8\xe2\xe7\x57\x87\x34\x0e\x0c\x5a\x2d\xef\xb0\x64\x11\x7d\x11\xdc\xe0\x2a\x83\x3b\x2e\x3b\xb4\x54\x5e\x86\xab\x1a\x7d\xd2\x41\x2b\x9e\x18\xb2\xfb\xd6\x5b\x3d\x18\xf5\x97\xbc\xce\x1f\x28\xb0\xe8\xfa\x87\x08\x0e\xe2\x6c\x14\x22\xed\x9f\xdf\x37\x74\x0a\x42\xe2\x1a\x97\xe5\xd8\x8f\x0a\x0c\x03\x4a\x8b\xfe\x90\x94\x35\xf4\x81\x5e\x87\x24\xba\x13\x29\x93\x8d\x33\x8a\x20\x2a\x6f\xf4\x6c\x54\xed\x9b\xe3\xdc\x8b\x36\xf1\xe4\x0e\x03\x0b\x16\x9d\x1d\xa6\x7b\x41\x06\xe0\x1a\xff\x35\xb4\xca\x40\xa8\x42\x76\x25\x7d\x26\x69\xb5\x11\x46\xf0\xb8\x35\xa2\x03\xb0\x47\x71\x1e\x43\xca\xbc\x5f\x02\xc6\x58\x64\x51\x62\x18\xbc\xbe\xe7\x91\x1e\x08\xdb\xf1\x41\xe8\x27\xa3\x0f\x1d\xda\xc8\x28\x5a\x6f\xda\xb3\x70\x7c\xe0\x45\x3b\xfe\x22\x1a\x12\x5a\xff\xc3\xb0\x3e\xf5\x1a\xee\x1f\x6a\x67\x60\x7f\xf7\xaf\x73\xdf\x98\x0c\xf4\x8d\x9f\x4d\xdb\x83\xf3\x35\x6d\x6f\x3f\x56\x28\xac\x34\xc4\xfc\x3b\x00\x00\xff\xff\x05\x0b\xbb\x60\xb6\x0b\x00\x00"), }, "/src/net/net.go": &vfsgen۰CompressedFileInfo{ name: "net.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 233782600, time.UTC), uncompressedSize: 1122, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x92\x41\x6f\x1a\x3d\x10\x86\xcf\xf8\x57\xcc\xe7\x93\xfd\x75\xbb\xa8\x52\xd4\x43\x25\x0e\x0d\xad\x22\xaa\x36\x44\x42\x6a\x2b\x45\x39\x78\xbd\xb3\x1b\x83\xb1\xb7\x1e\x6f\xc3\xaa\xe2\xbf\x57\x5e\x76\x49\x02\x5c\x7b\xc2\x0c\x33\xcf\xfb\x68\x86\xe9\x14\xde\x14\xad\xb1\x25\xac\x89\xb1\x46\xe9\x8d\xaa\x11\x1c\x46\xc6\xcc\xb6\xf1\x21\x82\x60\x13\x8e\x21\xf8\x40\x9c\x4d\x38\x75\xa4\x95\xb5\x9c\xb1\x09\xaf\x4d\x7c\x6c\x8b\x5c\xfb\xed\xb4\xf6\xcd\x23\x86\x35\x3d\x3f\xd6\xc4\x99\x64\xac\x6a\x9d\x86\xaf\x86\x22\x3a\xe1\x30\x66\x60\x55\x59\x06\xa0\x18\x8c\xab\x25\x88\xc3\x4f\x18\x32\xe8\x33\x24\xfc\x61\x93\x46\x39\xa3\xc5\x21\x33\xbf\xc5\x27\xc1\x1d\xc6\x27\x1f\x36\xa0\xb4\x46\x22\x30\x04\xce\x47\xa0\xb6\x49\x86\x58\x42\xd1\xc1\x4d\x1f\xfc\x65\xc5\xa5\x64\xfb\x21\x57\x94\xf0\xff\x27\xa3\x2c\x06\x09\xe9\x53\x0c\x9c\x0c\x92\x44\x22\x1d\x3d\xe6\xde\xb9\x7f\xe2\x40\x1d\x2d\x9c\x89\x22\x51\xc7\x5a\x13\x7c\x81\x8b\xbb\xdf\x57\xab\xa8\xf4\x46\x48\x28\xbc\xb7\x29\x35\x60\x6c\x83\x83\x4a\x59\xc2\xb3\xee\xf7\x63\xb7\x18\x42\x29\x15\x33\x78\xf1\xed\x6a\xab\x9a\x1e\x26\x4f\x69\xd9\x25\xe8\x0f\xe3\x4a\xff\x44\x8b\xbb\x33\xf2\x77\x43\x51\x2d\xee\x2e\xb3\x8e\x90\xad\xda\x8d\xf7\xbb\x56\x7a\x63\x7d\x2d\x24\x18\x17\x5f\x0c\x0c\xff\x97\x7c\xb5\xfc\xf6\xf1\xe7\x7c\x79\x7b\x9b\x86\xa7\x53\x98\xfb\xa6\x03\x5f\x0d\x07\xa0\x7c\xe1\x4a\xdc\x5d\x77\x11\xf3\x03\xba\xe8\x22\xf6\x35\x31\x1e\x29\x83\x43\xf5\x34\x61\x9d\x86\x23\x06\xa7\xec\xb2\x58\xa3\x8e\x82\x64\x3e\x57\xd6\x0a\x6e\x12\x60\x59\xf1\x2c\x35\xdd\x58\x5f\x28\x9b\xdf\x60\x14\x7c\xd5\x13\xf9\xd8\x57\x05\xbf\x9d\x3f\xaa\x30\xf7\x25\xf2\x0c\xb4\x94\x09\x29\xe4\x89\x6b\x4a\xa7\xfc\xf3\xaf\x56\xd9\x17\x96\xd4\x17\xc4\x2e\x83\x0e\xee\x1f\x0e\x86\xe3\x3d\x4d\x05\x16\x9d\xd8\x49\xf8\x6f\xd6\xbf\xba\x7e\x99\xaf\xb7\x39\xd9\xb3\x49\xe5\x03\x98\x0c\x0a\xf8\x30\x83\xa0\x5c\x8d\xb0\xeb\x1b\x4d\x05\x45\x9a\xed\xee\xcd\x43\x5f\x38\x19\x4d\xb3\xfb\xe3\x2a\x62\x68\xf1\xa2\xf3\xa5\xed\xd2\xb1\x28\x68\x10\x3f\x5b\xf1\xb9\x16\x3d\x6b\xcd\x66\xa0\x5f\x39\x99\x53\x9f\xb7\xef\xd8\x9e\xfd\x0d\x00\x00\xff\xff\x93\x28\xa9\x7f\x62\x04\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xb4\x92\x41\x6f\x1a\x3d\x10\x86\xcf\xf8\x57\xcc\xe7\x93\xfd\x75\xbb\xa8\x52\xd4\x43\x25\x0e\x0d\xad\x22\xaa\x36\x44\x42\x6a\x2b\x45\x39\x78\xbd\xb3\x1b\x83\xb1\xb7\x1e\x6f\xc3\xaa\xe2\xbf\x57\x5e\x76\x49\x02\x5c\x7b\xc2\x0c\x33\xcf\xfb\x68\x86\xe9\x14\xde\x14\xad\xb1\x25\xac\x89\xb1\x46\xe9\x8d\xaa\x11\x1c\x46\xc6\xcc\xb6\xf1\x21\x82\x60\x13\x8e\x21\xf8\x40\x9c\x4d\x38\x75\xa4\x95\xb5\x9c\xb1\x09\xaf\x4d\x7c\x6c\x8b\x5c\xfb\xed\xb4\xf6\xcd\x23\x86\x35\x3d\x3f\xd6\xc4\x99\x64\xac\x6a\x9d\x86\xaf\x86\x22\x3a\xe1\x30\x66\x60\x55\x59\x06\xa0\x18\x8c\xab\x25\x88\xc3\x4f\x18\x32\xe8\x33\x24\xfc\x61\x93\x46\x39\xa3\xc5\x21\x33\xbf\xc5\x27\xc1\x1d\xc6\x27\x1f\x36\xa0\xb4\x46\x22\x30\x04\xce\x47\xa0\xb6\x49\x86\x58\x42\xd1\xc1\x4d\x1f\xfc\x65\xc5\xa5\x64\xfb\x21\x57\x94\xf0\xff\x27\xa3\x2c\x06\x09\xe9\x53\x0c\x9c\x0c\x92\x44\x22\x1d\x3d\xe6\xde\xb9\x7f\xe2\x40\x1d\x2d\x9c\x89\x22\x51\xc7\x5a\x13\x7c\x81\x8b\xbb\xdf\x57\xab\xa8\xf4\x46\x48\x28\xbc\xb7\x29\x35\x60\x6c\x83\x83\x4a\x59\xc2\xb3\xee\xf7\x63\xb7\x18\x42\x29\x15\x33\x78\xf1\xed\x6a\xab\x9a\x1e\x26\x4f\x69\xd9\x25\xe8\x0f\xe3\x4a\xff\x44\x8b\xbb\x33\xf2\x77\x43\x51\x2d\xee\x2e\xb3\x8e\x90\xad\xda\x8d\xf7\xbb\x56\x7a\x63\x7d\x2d\x24\x18\x17\x5f\x0c\x0c\xff\x97\x7c\xb5\xfc\xf6\xf1\xe7\x7c\x79\x7b\x9b\x86\xa7\x53\x98\xfb\xa6\x03\x5f\x0d\x07\xa0\x7c\xe1\x4a\xdc\x5d\x77\x11\xf3\x03\xba\xe8\x22\xf6\x35\x31\x1e\x29\x83\x43\xf5\x34\x61\x9d\x86\x23\x06\xa7\xec\xb2\x58\xa3\x8e\x82\x64\x3e\x57\xd6\x0a\x6e\x12\x60\x59\xf1\x2c\x35\xdd\x58\x5f\x28\x9b\xdf\x60\x14\x7c\xd5\x13\xf9\xd8\x57\x05\xbf\x9d\x3f\xaa\x30\xf7\x25\xf2\x0c\xb4\x94\x09\x29\xe4\x89\x6b\x4a\xa7\xfc\xf3\xaf\x56\xd9\x17\x96\xd4\x17\xc4\x2e\x83\x0e\xee\x1f\x0e\x86\xe3\x3d\x4d\x05\x16\x9d\xd8\x49\xf8\x6f\xd6\xbf\xba\x7e\x99\xaf\xb7\x39\xd9\xb3\x49\xe5\x03\x98\x0c\x0a\xf8\x30\x83\xa0\x5c\x8d\xb0\xeb\x1b\x4d\x05\x45\x9a\xed\xee\xcd\x43\x5f\x38\x19\x4d\xb3\xfb\xe3\x2a\x62\x68\xf1\xa2\xf3\xa5\xed\xd2\xb1\x28\x68\x10\x3f\x5b\xf1\xb9\x16\x3d\x6b\xcd\x66\xa0\x5f\x39\x99\x53\x9f\xb7\xef\xd8\x9e\xfd\x0d\x00\x00\xff\xff\x93\x28\xa9\x7f\x62\x04\x00\x00"), }, "/src/os": &vfsgen۰DirInfo{ name: "os", - modTime: time.Date(2018, 6, 29, 21, 3, 27, 551348355, time.UTC), + modTime: time.Date(2021, 3, 28, 19, 1, 23, 630000000, time.UTC), }, "/src/os/os.go": &vfsgen۰CompressedFileInfo{ name: "os.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), - uncompressedSize: 581, + modTime: time.Date(2021, 3, 28, 19, 1, 23, 630000000, time.UTC), + uncompressedSize: 703, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x91\x4f\x6b\xdc\x30\x10\xc5\xcf\x9e\x4f\x31\xd5\x49\x62\x5b\x3b\xb9\x76\x6b\x4a\x28\x61\x5b\x28\x2d\xb4\x94\x1e\x42\x28\xfe\x33\xd6\x8e\x23\x4b\x46\x92\x9b\x85\x65\xbf\x7b\x91\xd6\x4e\x21\xe0\x83\xd1\xfc\xde\x9b\x99\x37\x55\x85\xbb\x76\x61\xd3\xe3\x18\x00\xe6\xa6\x7b\x6a\x34\xa1\x0b\x00\x3c\xcd\xce\x47\x94\x50\x08\xf2\xde\xf9\x20\x00\x0a\xa1\x39\x1e\x97\xb6\xec\xdc\x54\x69\x37\x1f\xc9\x8f\xe1\xff\xcf\x18\x04\x28\x80\x61\xb1\x1d\xfa\xc5\x46\x9e\xe8\x4f\xe3\x75\x90\x0a\x1f\x1e\x43\xf4\x6c\x35\x9e\xb1\xaa\xd0\xba\x88\x5d\x63\x0c\xf5\xe8\x2c\xfe\x66\xdb\xbb\xe7\x00\x85\xa7\xb8\x78\x8b\x77\x5e\x07\xb8\xac\x3e\x6c\x39\x4a\x85\x67\x28\x78\xc0\xd9\xbb\x8e\x42\xc0\xf7\x35\x8e\xa1\x3c\x18\xd7\x36\xa6\x3c\x50\x94\x62\xad\x08\xb5\x7f\x81\xde\x64\xe8\x97\xed\x69\x60\x4b\x7d\xb2\x28\x1a\xaf\xff\x26\xf5\xca\x5c\xb5\xe9\x51\x28\x28\x8a\xd4\x18\x6b\x9c\x9a\x27\x92\xdb\xc0\x6f\x31\x95\xcb\xaf\x64\x75\x3c\x4a\xf5\xee\x36\x81\x83\xf3\xc8\xc9\xe7\x66\x8f\x8c\x1f\x5e\x23\x7b\xe4\xdd\x2e\xf7\xcb\x96\x0f\xfc\x88\xf5\x95\xf9\x62\x7b\x3a\x49\xc6\x1d\xde\xaa\xf2\x67\x6e\x20\x93\xe1\x05\xd2\xc7\x03\x1a\xb2\x32\x69\x14\xd6\x35\xde\x64\x8f\x75\xaa\x6d\xa0\xb3\xf8\x28\x32\x7e\x79\x95\x74\x4b\x83\xf3\x74\x7f\xba\xe6\xb5\x55\xe9\x44\xdd\x12\x9b\xd6\x90\x54\x28\xb7\x9d\xf2\x45\x73\xaa\x6b\xe6\x42\xac\x8f\xa1\xfc\x46\xcf\x52\xdc\xbf\xc8\xf2\xb1\x78\x9a\x0d\x4d\x64\x23\xf5\x98\x96\x3f\x7c\xbf\xfb\xf1\xe9\x73\x3d\x06\xa1\xe0\x02\xff\x02\x00\x00\xff\xff\x55\xfc\x3a\xb3\x45\x02\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x5c\x52\xc1\x6a\xdc\x30\x10\x3d\x5b\x5f\x31\xd5\x49\x62\x5b\x3b\x69\x6f\x49\x4d\x49\xcb\xb2\x2d\x94\x16\x5a\x4a\x0f\x21\x04\xad\x3d\xf6\xce\xae\x3c\x32\x92\xdc\x2c\x2c\xfb\xef\x45\x5a\x3b\x2d\x01\x1f\xac\x99\x37\xef\x3d\x3d\x4d\x55\xc1\x6a\x3b\x91\x6d\x61\x1f\x84\x18\x4d\x73\x30\x3d\x82\x0b\x42\xd0\x30\x3a\x1f\x41\x89\x42\xa2\xf7\xce\x07\x29\x8a\x47\x90\x13\x07\xd3\xa1\x84\xaa\x82\xce\x79\xe8\xdd\x8d\x25\x3e\xb0\x19\x50\x88\x42\xf6\x14\x77\xd3\xb6\x6c\xdc\x50\xf5\x6e\xdc\xa1\xdf\x87\x7f\x3f\xfb\x20\x85\x16\xa2\x71\x1c\x22\x50\xf8\x48\xfd\x9a\x5b\x32\x0c\x35\x74\xc6\x06\x14\xa2\x9b\xb8\x01\x3f\x71\xa4\x01\x1f\x8d\xef\x83\xd2\x70\xff\x10\xa2\x27\xee\xe1\x94\x34\xd9\x45\x68\x8c\xb5\xd8\x82\x63\xf8\x4d\xdc\xba\xa7\x20\x0a\x8f\x71\xf2\x0c\x77\xbe\x0f\xe2\x3c\xf3\x10\x53\x54\x1a\x4e\xa2\xa0\x0e\x46\xef\x1a\x0c\x01\x6e\x6a\xd8\x87\x72\x63\xdd\xd6\xd8\x72\x83\x51\xc9\xb9\x23\xf5\xed\x33\xe8\x55\x06\xfd\xe2\x16\x3b\x62\x6c\x13\x45\x61\x7c\xff\x27\x4d\xcf\x98\xcb\x6c\x2a\x4a\x2d\x8a\x22\x09\x43\x0d\x83\x39\xa0\x5a\x0c\xbf\x86\xd4\x2e\xbf\x22\xf7\x71\xa7\xf4\x9b\xeb\x04\x4c\x99\x51\xe2\xb9\xba\x05\x82\xf7\x2f\x21\xb7\x40\xab\x55\xd6\xcb\x94\xf7\xf4\x00\xf5\x05\xf3\x85\x5b\x3c\x2a\x82\x15\x5c\xeb\xf2\x67\x16\x50\x89\xf0\x2c\xd2\x47\x1d\x58\x64\x95\x66\x34\xd4\x35\x5c\x65\x8e\xd9\xd5\x62\xe8\x24\x3f\xc8\x0c\x3f\xbf\x48\x7a\x8b\x9d\xf3\xb8\x3e\x5e\xf2\x5a\xba\x78\xc4\x66\x8a\x66\x6b\x51\x69\x50\xcb\x9d\xf2\x2e\xe4\x54\xe7\xcc\xa5\x9c\x8b\xa1\xfc\x86\x4f\x4a\xae\x9f\xc7\xf2\x63\xd1\x30\x5a\x1c\x90\x23\xb6\x79\x61\x36\xdf\xef\x7e\x7c\xfa\x5c\xef\x83\xd4\xc9\x47\x55\xfd\xb7\x41\xd0\x99\x10\xbd\xe1\x76\x71\x56\x2e\x85\x8b\xa3\xe5\xa4\x34\x4c\xc4\xf1\xdd\x5b\xf1\x37\x00\x00\xff\xff\x31\x02\xed\x7a\xbf\x02\x00\x00"), + }, + "/src/os/removeall_noat.go": &vfsgen۰CompressedFileInfo{ + name: "removeall_noat.go", + modTime: time.Date(2021, 3, 28, 16, 15, 16, 884152800, time.UTC), + uncompressedSize: 3388, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x8c\x56\xdf\x73\xdb\xb8\x11\x7e\x16\xff\x8a\x8d\x1e\x12\xa9\x56\x28\x39\x77\x0f\x89\x53\x4f\xc7\xb5\x75\x19\x77\x52\x3b\x13\x5d\x9b\x87\x4e\xa7\x03\x91\x4b\x11\x31\x08\xb0\xbb\xa0\x74\xec\xd9\xff\x7b\x67\x01\x50\x3f\x7c\xbe\x99\x7b\x93\xc0\xdd\xc5\xf7\x7d\xfb\x0b\xf3\x39\x5c\xbb\xb6\x27\xbd\xa9\x3d\xbc\x5b\x9c\xbf\x87\x9f\x6b\x84\x4f\x0e\xae\x3a\x5f\x3b\xe2\x1c\xae\x8c\x81\xf0\x99\x81\x90\x91\xb6\x58\xe6\xd9\x7c\x0e\xff\x60\x04\x57\x81\xaf\x35\x03\xbb\x8e\x0a\x84\xc2\x95\x08\x9a\x61\xe3\xb6\x48\x16\x4b\x58\xf7\xa0\xe0\xaf\xab\x9b\xb7\xec\x7b\x83\xe2\x65\x74\x81\x96\x11\x7c\xad\x3c\x14\xca\xc2\x1a\xa1\x72\x9d\x2d\x41\x5b\xf0\x35\xc2\xe7\xdb\xeb\xe5\xdd\x6a\x09\x95\x36\x98\x67\xe2\xf2\xc9\xb5\x35\xd2\xdf\x56\xd0\x31\x32\x8c\xad\x53\x7e\x0c\xba\x69\x0d\x36\x68\xbd\xf2\xda\x59\x01\xe2\x38\xff\x8a\x8d\xdb\xe2\x95\x31\x93\x29\xac\xb1\x50\x9d\x40\xec\x08\xac\x2b\xf1\x2d\xf7\x5c\x28\x63\x24\x62\xe3\xca\xce\xa0\x5c\xff\xc6\x43\xad\x6c\x69\x10\x5a\xc5\xac\xed\x06\x14\xb0\xa7\xae\xf0\x82\xa7\x70\x44\x58\x78\xd3\x07\xc2\xb5\xf7\x2d\x5f\xcc\xe7\x1b\xed\xeb\x6e\x9d\x17\xae\x99\x6f\x02\xb4\xef\x7c\xf8\xa1\x99\x3b\xe4\xf9\x87\x0f\x3f\x04\xec\x67\xeb\x4e\x9b\x12\xbe\x73\x96\xb5\xaa\x78\x50\x1b\x04\xc7\x59\xa6\x9b\xd6\x91\x87\x49\x36\x1a\x6b\x37\xce\x46\x63\xea\xac\xd7\x0d\xca\xcf\x84\x73\x9c\x4d\xb3\xac\xea\x6c\x01\xb4\x67\xd5\x2a\x5f\x0b\x3c\x6d\x37\x53\x40\x22\x47\xf0\x6b\x36\xd2\x15\x84\x0f\x97\x97\x30\x1e\xcb\xc1\x68\x3e\x87\x4a\x69\x03\xac\x0d\x5a\x6f\x7a\xf0\x0e\x08\xbd\x0a\x94\x9a\x56\x79\xbd\xd6\x46\xfb\x1e\x76\xda\xd7\xd0\x12\x6e\xb5\xeb\x18\xd6\x58\xab\xad\x76\x14\x23\xb8\x0a\xf6\x7a\xe6\xb0\x42\xc9\x2c\x77\x08\xef\xde\xbf\xff\x61\x91\x67\xa3\x11\xa1\xef\xc8\x82\xd5\x26\x1b\x3d\x65\x99\xf8\x48\xed\x50\x53\x6a\x02\xee\xd9\x63\x03\xc2\x04\x5a\xa4\x46\x87\xf2\x69\xdc\x56\x34\x1e\xe7\x63\x70\x16\xbe\x18\x65\xe1\xc3\x2c\x78\xb2\x83\x1d\x42\xe9\x24\x23\xd1\x1e\xb4\x8f\xb8\x9b\x88\xdb\xb2\x66\x8f\xd6\x47\xd0\xbe\xc6\xe0\x37\x7e\xb9\x18\x0e\xc8\x83\x3e\x68\x4b\xfe\xa6\x7d\x7d\xe3\x7c\x10\x71\x1a\x64\x4a\x04\x5e\x7f\x51\xbe\x5e\x8a\x9a\xbf\xde\xb7\x17\x30\xde\xfb\x8e\x67\x20\x9f\x2e\x82\xbc\x33\x58\x12\x5d\x40\xca\x4e\xbe\xbc\xbd\xfb\xe7\xd5\xe7\xa7\x3d\xf3\x55\xc0\x00\x85\x62\xbc\x00\x3d\x00\x80\x9d\xa3\x07\x9e\xc1\x0e\xdf\x50\x60\x87\x79\x36\x42\x22\xb8\xb8\x4c\x16\x11\x4e\x04\x49\x24\x39\xb4\xda\xc0\xe3\x23\xdc\xf2\x9d\xf3\xcb\x5f\x34\xfb\x09\x12\x9d\x00\x3e\x56\xfc\xde\xd7\x48\x3b\xcd\x38\x93\xc6\x0b\xcd\xa8\xa0\xd4\x52\xb6\x8e\x7a\xd1\xd4\x22\x96\x51\xc8\xa2\x23\x46\xd0\xd6\xbb\xbf\x64\xa3\x52\xd3\x0c\x38\x61\xf9\xcc\x5e\xf9\x23\x28\xe1\xfc\x55\xc4\x22\x17\xa7\xa3\x19\xb8\x07\x31\x97\xdf\xf9\xe4\x4f\x7b\xdd\xa6\x1f\xe5\xc3\xeb\xd7\x30\x39\x42\x1d\x8c\x96\x02\xfd\xf1\x11\x86\x3f\x42\x70\x2f\xe1\xdd\xfd\xcf\x37\xb7\x5f\x23\xb5\x13\x6e\xa3\xa7\x03\x59\xf1\x14\xb6\x82\xe1\x55\xa9\x29\xbf\xe5\x1b\x4d\x93\xe9\x50\xe8\x77\xce\x1f\x33\xfe\x08\xc9\x4f\x66\x49\x6c\x91\x8a\x5c\x93\xd4\x3e\x2a\xdb\x14\x36\x88\x98\x92\x55\x38\x2b\x05\xc6\xf0\x7a\x08\x52\x69\x62\x1f\xc3\xa4\xc4\x5d\x46\x84\x55\x6c\xbd\x51\x55\xce\x20\x69\x78\xdf\xa2\x1d\x24\x1c\xd2\x79\x24\xa1\x1c\xbd\x94\xd3\x40\xe2\xca\x10\xaa\xb2\x87\x12\x0d\xfa\x38\x37\xd9\x35\xe8\x2c\x02\x1a\x0e\xb0\x9f\x29\x14\x24\x3a\xe1\x12\xc8\x8c\xa4\x4f\x3c\x10\xfe\x77\xa5\xff\x87\x70\x09\xe7\x8b\x77\x3f\x66\xa3\xd1\x56\x11\x58\xd5\x20\xc3\xbf\xfe\x1d\x07\x48\x3a\x94\x7b\x25\x2f\x81\xa3\x04\x18\x98\x8d\x6c\xd7\x2c\x23\xb3\x45\xf8\x2b\xde\xb3\xbd\xfd\x25\x54\x65\xfe\x15\x55\x59\x6a\x0a\x9f\x26\xe9\xce\xa9\x04\x09\x51\xfe\x33\x0b\x57\x4a\x04\x52\x76\x83\x09\x40\x24\x8d\x44\xe7\x87\x2e\xd8\x0f\xb7\xb3\x34\xde\x26\x52\x5b\x2b\x6c\x15\x29\xef\x68\x0a\x67\xc1\x79\x1a\x5c\x4f\x5b\x25\x86\x4b\xb9\x91\xa8\xe1\xff\xd3\x91\xe5\xf9\x49\x1a\x06\x62\x67\x67\x07\xc3\xa0\x9c\xe4\xe1\xb6\x92\x8e\x91\xb5\x14\x33\x01\xca\xf6\x80\xd6\x53\x3f\x83\x35\xa1\x7a\x90\x46\x62\xaf\xc8\x83\xc5\x1d\x68\x8f\x14\x46\x4e\x9e\xfc\x8f\xba\x51\xa6\x99\xe6\x42\x51\x09\x45\x47\x24\x83\x2b\x49\xb8\x41\xf1\xfe\xc5\x87\xc0\x1a\x19\x94\x2d\xc1\x53\xca\xbe\xcc\x47\x5f\x63\x93\xa7\x9a\x49\x69\x78\x75\xb9\x4f\x6a\xa4\x11\xe0\x0c\x85\x10\x08\x0c\x85\x2c\x11\x64\x7b\x72\xac\x7c\x69\x84\xc3\x40\x68\x54\x0f\xb5\x92\x62\x97\xed\x58\x46\x37\x31\xb9\x5f\xc5\x21\xc1\x75\x57\x55\x06\x41\xfb\x3c\x0e\xb5\x3e\x0c\x71\x09\x7a\x9c\xee\xe8\xa8\x36\x32\x9b\x25\x26\x3f\xe8\x36\xd4\xec\xc0\x2a\x0f\xcb\xc0\x59\xd3\x03\xa1\xd1\x6a\x6d\x10\x76\xaa\x4f\x17\x3a\x50\x5b\xa7\xcb\x38\xb0\x64\x70\x39\x28\x8c\x63\x0c\x5a\x10\xbe\x75\x2d\xda\x38\xe3\xc5\x7c\x0f\xff\x64\x0f\x2d\xde\xff\x78\x9e\x87\x1e\xcc\xaf\xc5\x77\x12\x4a\x4f\x57\x87\x1a\xbd\x04\xed\xf2\xe5\xfd\x4f\x51\xb2\x41\xb1\xa7\x6c\xc8\xf5\x31\xa1\xd4\xf2\x58\x82\xb2\xb1\x1b\x66\xf2\xe0\x10\x1d\xb2\x17\x6b\x2e\x56\x5c\xba\x2b\x85\xd5\x15\x18\xb4\x93\x10\x70\x2a\xd6\x8b\xe7\x57\xc7\xbb\xbf\x0d\xab\x6e\xa7\x6c\xda\x72\x91\x72\x67\x2d\x16\xc8\xac\x48\x9b\x7e\x26\x5b\x51\x4b\x49\x46\xaf\x8d\xf3\x50\xe1\x0e\x49\x5e\x4f\x56\xea\xa1\x43\x4e\x65\x35\x4c\xb9\x03\xa1\x99\xd4\x54\x74\xe4\x98\xc7\xfd\xfe\x3d\x2d\x09\xeb\x76\xb9\xa8\x21\x4f\xb2\x64\xdf\x15\x05\x62\x19\x16\x17\xa8\xc3\xe6\x7a\xc6\xef\xcf\xa7\x25\x79\xda\xd2\xfb\x51\xb8\xef\xc2\xdf\xdb\x6d\xe7\xc3\x20\x7c\x3e\xe0\x0e\xce\xa7\x1d\x1c\x05\x14\x35\x62\xc1\x85\x29\x7f\x4c\x6e\xb0\x3a\x70\x1c\x46\xfb\x2c\x14\x18\x6b\x5b\x60\x94\x35\xd8\x49\x12\x93\xb2\x51\xcc\xa0\xef\x0e\x07\x89\x43\x9f\x0c\x9d\x42\x08\x2d\xb9\xb5\x5a\x9b\x5e\xb4\x91\x2c\x36\x8e\x30\xb5\x9c\x77\x87\xa0\x61\xe3\xc0\x4d\x48\xb4\x71\xae\x05\x45\xe1\xa5\x1b\xf2\xad\x8e\x63\x1e\x21\x0d\x2d\x95\xc3\x37\x7c\x23\x2f\xa7\x74\xd1\x60\xfa\xbd\x63\x1f\xe6\x87\xf8\xb0\x1a\xc8\x9f\xec\x87\xb8\x0c\xd2\x58\x78\xb6\xe1\x0e\x8d\x94\xfd\x4e\xba\xfe\x60\xb2\x4e\x5f\x22\xa1\xe9\xe2\x0b\x36\xff\x74\x7f\xbf\x0a\x4f\xd1\x9d\xb6\xa5\xdb\xf1\x58\xde\x05\xb7\xfc\x45\xde\x74\xcc\xda\xd9\xa3\x28\xba\x82\x8a\xf7\x0b\x74\xb5\x7f\x83\x7c\xfc\x4d\xb3\x0d\xfd\x07\xd7\x75\xe3\xca\x49\x7c\x90\xfd\xa4\x0d\xfe\xdd\x95\x38\x59\xbc\x5b\x2c\x1e\xb5\xf5\x93\x8a\xf3\x70\x30\x9d\x4e\x5f\x08\x12\x29\xff\xb6\x40\xf7\x52\xbd\xd0\xe6\xc7\x7b\xe5\x29\x3b\xd6\xf8\x29\xfb\x7f\x00\x00\x00\xff\xff\x03\x2a\xba\x77\x3c\x0d\x00\x00"), }, "/src/os/signal": &vfsgen۰DirInfo{ name: "signal", - modTime: time.Date(2018, 4, 20, 9, 32, 51, 274055626, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 285779900, time.UTC), }, "/src/os/signal/signal.go": &vfsgen۰CompressedFileInfo{ name: "signal.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 286780200, time.UTC), uncompressedSize: 233, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xce\xbf\xca\xc2\x40\x10\x04\xf0\x7e\x9f\x62\xca\x84\x0f\xbe\x13\xad\x2d\xc4\x42\x3b\xc5\x17\x90\x4b\xb2\x09\x1b\x2f\x7b\xe1\xfe\xd8\x84\xbc\xbb\xa0\x69\x22\xd8\xce\x6f\x60\xc6\x18\xfc\x55\x59\x5c\x83\x3e\x12\x8d\xb6\x7e\xd8\x8e\x11\xa5\x53\xeb\x88\x8c\xc1\x75\x15\x41\x22\xd4\x27\xc8\x30\x3a\x1e\x58\x13\x37\x68\x7d\xc0\xe9\x72\xb8\x1d\xcf\xfb\x3e\xfe\x13\xb5\x59\xeb\xa5\x7e\x6f\x24\xda\xca\x71\x91\x45\xd3\x6e\x5b\x62\x9a\x57\xcc\xba\xd2\x6f\x96\x4e\x7d\xf8\xcd\x81\xeb\x67\x51\xe2\xc3\x00\x26\x04\x4e\x39\x28\x36\x98\x97\x1b\xce\xfb\xb1\x78\xcf\xbe\x02\x00\x00\xff\xff\x29\x0b\xd3\x08\xe9\x00\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x74\xce\xbf\xca\xc2\x40\x10\x04\xf0\x7e\x9f\x62\xca\x84\x0f\xbe\x13\xad\x2d\xc4\x42\x3b\xc5\x17\x90\x4b\xb2\x09\x1b\x2f\x7b\xe1\xfe\xd8\x84\xbc\xbb\xa0\x69\x22\xd8\xce\x6f\x60\xc6\x18\xfc\x55\x59\x5c\x83\x3e\x12\x8d\xb6\x7e\xd8\x8e\x11\xa5\x53\xeb\x88\x8c\xc1\x75\x15\x41\x22\xd4\x27\xc8\x30\x3a\x1e\x58\x13\x37\x68\x7d\xc0\xe9\x72\xb8\x1d\xcf\xfb\x3e\xfe\x13\xb5\x59\xeb\xa5\x7e\x6f\x24\xda\xca\x71\x91\x45\xd3\x6e\x5b\x62\x9a\x57\xcc\xba\xd2\x6f\x96\x4e\x7d\xf8\xcd\x81\xeb\x67\x51\xe2\xc3\x00\x26\x04\x4e\x39\x28\x36\x98\x97\x1b\xce\xfb\xb1\x78\xcf\xbe\x02\x00\x00\xff\xff\x29\x0b\xd3\x08\xe9\x00\x00\x00"), }, "/src/reflect": &vfsgen۰DirInfo{ name: "reflect", - modTime: time.Date(2019, 8, 11, 22, 48, 34, 27211540, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 15, 16, 947160500, time.UTC), }, "/src/reflect/example_test.go": &vfsgen۰CompressedFileInfo{ name: "example_test.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 324781000, time.UTC), uncompressedSize: 311, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8d\xcf\x4a\x33\x31\x14\xc5\xd7\xbd\x4f\x71\xc9\xe2\xa3\xe5\x93\xa4\x95\xba\xe8\xec\x5c\x88\xe2\xa6\x62\x1f\xc0\xa6\x93\x9b\x3f\x75\x92\x0c\xc9\x8d\x08\xa5\xef\x2e\x33\x22\x82\xbb\x03\xbf\x73\xce\x4f\x29\xfc\x7f\x6a\x61\x30\x78\xae\x00\xa3\xee\xdf\xb5\x23\x2c\x64\x07\xea\xf9\x8d\xa9\x32\x40\x88\x63\x2e\x8c\xc2\x46\x16\x00\xb6\xa5\x1e\x1f\x3e\x75\x1c\x07\x3a\x70\x69\x3d\xef\xed\x72\x85\x17\x58\x28\x85\x8f\x79\xf4\x54\x9e\x0f\x68\x32\x55\x4c\x99\x31\x4c\xbd\x48\x89\x7f\x4e\xa5\x36\xe6\xf5\x3b\xee\xad\xc5\x44\x64\xc8\xa0\xcd\x05\xd9\x87\x8a\x93\x52\xce\x5f\x07\x22\xf4\xcc\x63\xed\x94\x72\x81\x7d\x3b\xc9\x3e\x47\xe5\x66\xc5\xb9\xfe\x86\x50\x6b\xa3\xaa\xb6\xbb\x1d\xc0\xc2\x46\x96\x2f\x25\x24\x1e\xd2\xf2\xf8\xa1\x87\x46\x1d\xfe\xbb\x3c\x51\x70\x9e\xbb\xb5\xdc\xe2\xbd\xa3\xee\xf6\x0a\xe7\x9a\x53\x87\x78\x11\x7e\x46\x62\x62\x37\x42\x3b\x12\x13\xfd\x3b\xdc\xc8\xbb\x79\xb8\x59\x5f\x8f\x2b\xb8\xc2\x57\x00\x00\x00\xff\xff\x0d\x48\xa9\x1a\x37\x01\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x5c\x8d\xcf\x4a\x33\x31\x14\xc5\xd7\xbd\x4f\x71\xc9\xe2\xa3\xe5\x93\xa4\x95\xba\xe8\xec\x5c\x88\xe2\xa6\x62\x1f\xc0\xa6\x93\x9b\x3f\x75\x92\x0c\xc9\x8d\x08\xa5\xef\x2e\x33\x22\x82\xbb\x03\xbf\x73\xce\x4f\x29\xfc\x7f\x6a\x61\x30\x78\xae\x00\xa3\xee\xdf\xb5\x23\x2c\x64\x07\xea\xf9\x8d\xa9\x32\x40\x88\x63\x2e\x8c\xc2\x46\x16\x00\xb6\xa5\x1e\x1f\x3e\x75\x1c\x07\x3a\x70\x69\x3d\xef\xed\x72\x85\x17\x58\x28\x85\x8f\x79\xf4\x54\x9e\x0f\x68\x32\x55\x4c\x99\x31\x4c\xbd\x48\x89\x7f\x4e\xa5\x36\xe6\xf5\x3b\xee\xad\xc5\x44\x64\xc8\xa0\xcd\x05\xd9\x87\x8a\x93\x52\xce\x5f\x07\x22\xf4\xcc\x63\xed\x94\x72\x81\x7d\x3b\xc9\x3e\x47\xe5\x66\xc5\xb9\xfe\x86\x50\x6b\xa3\xaa\xb6\xbb\x1d\xc0\xc2\x46\x96\x2f\x25\x24\x1e\xd2\xf2\xf8\xa1\x87\x46\x1d\xfe\xbb\x3c\x51\x70\x9e\xbb\xb5\xdc\xe2\xbd\xa3\xee\xf6\x0a\xe7\x9a\x53\x87\x78\x11\x7e\x46\x62\x62\x37\x42\x3b\x12\x13\xfd\x3b\xdc\xc8\xbb\x79\xb8\x59\x5f\x8f\x2b\xb8\xc2\x57\x00\x00\x00\xff\xff\x0d\x48\xa9\x1a\x37\x01\x00\x00"), }, "/src/reflect/reflect.go": &vfsgen۰CompressedFileInfo{ name: "reflect.go", - modTime: time.Date(2019, 8, 11, 22, 48, 29, 448797204, time.UTC), - uncompressedSize: 39691, + modTime: time.Date(2021, 3, 28, 16, 15, 16, 915155400, time.UTC), + uncompressedSize: 42358, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xfd\x73\x1b\x37\xb2\xe0\xcf\xe4\x5f\x01\xb3\x5e\xe9\xcd\x58\x13\xea\x23\x7b\xa9\x94\x62\xe5\xd5\xc6\x49\xf6\xb4\x1b\x5b\xa9\x38\xce\x5d\x9d\x9e\xca\x0f\x22\x31\x14\xc4\x21\x66\x76\x06\xa4\xa5\x48\xfa\xdf\xaf\xd0\x8d\xef\xc1\x90\x92\xe3\xbd\xb7\x75\xb5\xfe\xc1\x22\x67\x80\x46\xa3\xbb\xd1\xe8\x2f\x80\x07\x07\x64\xff\x6a\xcd\xab\x39\xb9\xe9\xc6\xe3\x86\xce\x96\x74\xc1\x48\xcb\xca\x8a\xcd\xe4\x78\xcc\x57\x4d\xdd\x4a\x92\x8d\x47\x13\xd6\xb6\x75\xdb\x4d\xc6\xa3\x49\x27\xdb\x59\x2d\x36\xea\xe3\x5a\x74\xb4\x64\x93\xf1\x78\x34\x59\x70\x79\xbd\xbe\x9a\xce\xea\xd5\xc1\xa2\x6e\xae\x59\x7b\xd3\xb9\x0f\x37\xdd\x64\x9c\x8f\xc7\x1b\xda\x12\x2e\xb8\xe4\xb4\xe2\xbf\xb3\x39\x39\x25\x25\xad\x3a\x36\x1e\x97\x6b\x31\x83\x37\x59\x4e\xee\xc7\xa3\x83\x03\x42\x37\x35\x9f\x93\x39\xa3\x73\x32\xab\xe7\x8c\xb0\x8a\xaf\xb8\xa0\x92\xd7\x62\x3c\x5a\x77\x6c\x4e\x4e\x4e\x89\xea\x96\x71\xc2\x85\x64\x6d\x49\x67\xec\xfe\x31\x27\xf7\x8f\xf8\x3e\x6b\xe5\x5d\xa3\x9e\xe8\xaf\x6b\x31\xab\x57\xab\x5a\xfc\x1a\x3c\x5d\x31\x79\x5d\xcf\xdd\x77\xda\xb6\xf4\x2e\x6c\x32\xbb\xa6\x51\x27\x35\x6c\xf8\xc4\x62\x10\x41\xa7\x4d\xf8\xa0\x91\x6d\xf8\xa0\xab\x78\xdc\xa9\x93\xed\x7a\x26\x23\xf8\x31\x9e\xd8\xe8\x47\xce\x2a\x78\x38\x1e\x85\x64\x95\xed\x9a\x8d\x47\x6b\x2e\xe4\xd7\x0a\x10\x39\x25\xea\xcf\x79\x99\xc1\xa3\xec\x30\xcf\xa7\xd9\x4b\x20\x50\x4e\x0e\x0e\x48\xc7\x24\x29\xeb\x96\xb4\x8c\x56\xe3\x47\xcd\x8e\x9b\x4e\xf5\xc9\xe4\x5d\x03\x9d\x73\xf2\xf2\xa6\x9b\x9e\x5f\xdd\xb0\x99\x54\x3c\x6a\x99\x5c\xb7\x82\xdc\x74\xd3\x33\x35\x79\x41\x2b\x7c\xa7\x3a\xe4\xd3\xbf\x30\x99\x4d\x10\xc2\x24\xb7\x20\xb5\x5c\x59\xb8\x0e\x62\x4e\x10\x1d\x05\x99\x97\x44\xde\x35\x08\xc2\xeb\x31\xc9\xc9\xe9\xa9\x1a\xef\xbd\x98\xb3\x92\x0b\x36\x57\x8d\x47\xad\x54\x92\xb0\x87\xdc\x1e\x8f\x46\xa3\x8e\xff\xce\x4e\x88\x9a\x68\x23\xdb\xcc\x42\x52\x8f\x27\xb9\x42\x36\xcb\xf3\x42\x35\x5c\x72\x31\xc7\x86\x5f\xbb\x66\xea\x61\xd8\xac\x93\xed\x09\x21\x82\x7d\x7c\x4b\x57\xec\xbc\x2c\x33\xfd\x11\x99\x2e\x68\xf5\x2e\x18\x46\xb6\x5c\x2c\x26\x79\x5e\x90\xc9\xa4\x70\x13\x61\xb7\x6a\x25\x31\x05\xfb\xbb\xba\xae\xb2\x1c\xa1\x3f\x8e\x47\xa3\x3e\x09\x5b\x99\x4f\xdf\x79\x14\x04\x38\xf9\x78\x34\x52\xe0\xde\xc5\x74\x29\x12\x4c\x68\x65\xae\xa4\x62\x84\x72\xf3\x8e\x01\x91\x6e\xba\xe9\x5f\xaa\xfa\x8a\x56\xd3\xd7\xb4\xaa\xb2\xc9\xbf\xd9\xb7\x6e\x04\x5e\x12\xfb\x74\xfa\x13\x13\x0b\x79\x9d\xe5\xe4\xc5\x29\x39\x24\x0f\x0f\x6e\x3a\x82\xae\xbc\xb9\x00\x23\x46\xad\x9c\xca\xb2\xa2\x0b\xf2\x70\x4a\xe0\xc3\x7b\xbd\xe4\xd4\x4b\x9f\xa9\xa9\xce\xfd\xde\x8a\xc6\x73\xf5\x4a\xd1\x68\xa4\x54\x87\x9e\xf4\x1b\xc0\xaf\x23\x17\x97\x88\xa9\x7a\xad\xa4\x97\xab\x39\x1e\x7e\x43\x38\x79\x95\x98\xc3\x37\x84\xef\xef\x93\x7b\x25\xee\x3f\x68\x5e\xe8\x56\x1d\x29\x79\xdb\xc9\x29\xa0\xb1\x52\x40\x5c\xef\x33\x31\x67\xb7\x19\xcf\xe1\x9d\xe1\xa1\x6a\xe2\x33\x7f\x85\xd3\x6a\x96\x8a\xef\x4a\x48\x27\x13\x68\xcf\x4b\xf2\xc2\xf6\xc1\x59\x8e\x66\xb5\x90\x5c\xa8\xd5\x69\x66\x36\x8a\xa6\x75\x4a\x68\xd3\x30\x31\xcf\xc2\xe7\x85\xc6\x4a\xc3\x51\x34\x3c\xd9\x25\x95\x2b\x47\x6f\x2b\x91\x06\x21\x2d\xdd\xa3\xd1\x4a\xde\x35\x00\x09\x55\x44\x99\xf9\xab\x54\x43\x90\x77\xcd\x24\x37\x3d\x1e\x73\xcb\x95\xdb\x59\xbd\x16\x20\x5b\x6a\x19\x1d\x7d\x95\x55\x4c\x44\x78\xe7\xf9\xb3\xf9\xf3\x5e\xb0\x98\x43\x1d\x9b\xd5\x62\xfe\x0f\x61\xd1\xff\xdf\x1c\x5a\xa3\x7a\x0c\x76\x3f\x68\xd3\x2c\x17\x3f\x53\x79\xfd\x0c\xd5\x86\xc4\x43\x1c\x61\xdf\x36\xc3\xad\x40\x0a\x4e\x08\x31\x52\xd0\xe7\xae\x6e\x79\x6b\x5b\xe2\x27\x7c\xfa\x41\x73\xf9\x24\x5a\xe1\x85\x9b\x85\x87\xfe\x1b\xda\x5c\xb4\xf2\x92\x9c\x92\xb5\x54\xef\xfa\xca\x6f\x3d\xa4\x3e\x1f\x95\x4a\xec\x3e\x72\x39\xbb\x26\xad\x9c\xfe\x8d\x8b\xb9\xd6\x3f\x33\xda\x31\xf2\x67\xb5\xf9\x9f\x80\xce\x67\x52\xbd\x04\x02\xb7\xb2\x20\x7b\xce\x2e\x40\x31\xab\xd8\xea\x24\xde\xce\xb4\xa2\xaf\xd8\x6a\x62\xe6\x5b\x31\x71\x42\xfa\x7b\x51\xc5\x44\xb8\xc7\x00\xc3\x00\x87\xd7\xd7\x54\x00\x0a\x73\xde\x2a\xce\x7d\x57\xcb\xeb\xef\x79\x1b\xab\xd0\x8e\x89\xf9\xb9\xa8\xee\x62\x2d\xaa\x7a\x9d\x92\x77\x4c\xcc\x75\xa7\xc7\xb8\x67\xcb\x66\x9b\xe1\x9e\xbf\xb0\xd9\xc6\xef\xd9\x23\x84\xb5\x86\x9e\x45\x87\x39\x6f\x3d\x3a\xcc\x79\x1b\x4f\xfb\xc7\xb5\x98\xc1\xb4\x1b\xda\xd2\x55\xa7\x66\xee\xe4\x0e\x1e\x4d\x40\xa6\xb9\x80\xc5\x4f\x97\x2c\xbb\xb8\x44\x93\xa1\x20\xd8\xc0\xc9\x5a\xa0\x70\x5a\x2a\x16\x8c\x70\xa1\xa7\xc9\xc5\x05\x57\xb2\xe3\xe3\xac\xfb\x1b\x45\xe2\x16\x4f\xcb\xba\x75\x25\x43\x6c\xf4\x33\x44\xa7\xc6\xe5\x15\xe1\xa3\x9b\x6c\x45\x48\xf5\x44\x8c\xea\xb5\xec\xa3\x64\x40\xf4\x71\xaa\xd7\xf2\x75\xa4\x74\x93\xe3\xf9\x3c\xdf\xd0\x96\xd3\x39\x9f\xc5\x3c\xb7\xb0\x1e\x4e\xc9\x11\x79\xf5\x8a\x1c\xfd\x8f\x61\xce\x5b\xab\x57\x6f\xd7\x77\x0d\x53\x0b\x59\x19\x6e\x85\x26\xed\x6b\xbd\xba\x35\x5e\x31\x5f\x8a\x60\xd0\x13\x62\x3e\x69\x2d\xc0\x05\xc0\x23\x84\x0b\xfd\xa4\x5e\x4b\x7c\x54\xaf\x65\x24\x30\x67\xc6\xe2\x06\xa9\x31\xdb\x84\xcf\x28\xfd\x4c\xcb\x8d\xd7\x42\x73\x4b\x3f\x32\x5a\x7b\x87\xfc\x98\xfe\xf7\xf1\x16\xd4\x85\x1b\x90\x69\x88\x2c\xe5\x9f\x67\x47\xd8\xb1\x93\xd9\x8d\x02\xf6\x89\x67\x6d\x14\xc3\xec\x0e\x5d\x9a\x90\xe7\x96\xe5\x76\x13\x79\xe6\xc6\xa1\xf7\x0d\xa3\xf6\x0d\xd1\x22\x1e\xbf\xa1\x4d\x5a\x1b\x1b\xbf\x0a\xa0\x2c\xd9\xdd\x09\x49\xeb\xa0\x25\xbb\xb3\xc4\x79\xa2\xaa\x72\xa3\xff\x2c\xdb\xf4\xe8\xc6\x89\xfb\x34\xb0\xef\x94\xc7\x97\x06\xec\x9c\xc1\x4f\x04\x0d\x4e\x21\xc0\x2e\x95\x67\x18\xae\x07\x7c\x84\xcb\x41\x03\xfd\xd1\xb6\xd2\x6b\xc2\x73\x2b\x0b\x82\x1d\xb6\x2e\x8b\x10\x0e\xa2\x5d\x82\x67\x8e\x7d\x83\xa5\x51\x97\x65\xc7\xe4\x0f\xab\x2b\x34\xcf\xcc\x6e\xc0\x73\xd0\x3c\xc6\x1c\x2b\xf5\x0c\x55\xb3\x79\xdf\x4d\x08\xa0\x28\xb5\xd5\x37\xd3\x10\x1b\x5c\x80\xbe\x9f\xec\x2f\x42\xfd\x2f\x25\xb6\x65\xb4\x00\x13\xef\x24\x45\x81\x2e\x87\x7c\xbb\x60\x3d\xea\x7f\x3e\x23\x4b\x7f\x2d\x16\xbd\x89\x9d\x10\xef\xcb\xce\x95\xea\x05\x0c\xfe\xe8\x32\x55\xad\x92\x4b\x15\xf9\xe9\xd6\x19\xd2\xd8\xc9\xdf\xe3\x18\x8c\x2b\x1d\x14\x30\xb1\x85\x0c\xe3\x43\xd3\x9f\x6b\x18\x30\x4b\xbb\xf5\xd3\xf7\xd0\x4a\xb9\xc4\x36\x52\x10\x4e\x92\x98\x9d\x75\xa9\x9f\x45\x21\x9f\xf1\x36\x1f\xda\xf4\x49\xfa\xc9\xe6\xa5\x92\xee\x2d\x6f\xb5\xd3\x2d\xb7\xba\xdb\x8f\xe3\x31\x84\x30\x7c\x63\x55\x0b\xa0\x42\x51\x93\x97\x08\x54\xfe\x63\x6d\x36\x9b\xdd\x72\x6c\x9c\x29\xfb\x7d\x55\x97\x25\xd1\x46\xf5\x97\xc7\xe3\xb1\xb5\x93\x9d\xe7\x6b\xc8\x95\x49\xf2\xd2\x1f\x36\x37\x9b\x53\x96\xdb\xc6\x5e\xd0\x46\x4e\x0d\xa8\x2d\x10\x8c\x54\xbf\x79\x1a\xa4\x8b\x13\x39\xd5\xe6\xbd\xf9\x70\xa9\xa0\x2b\xc7\x3d\x32\xdf\x89\xd6\x37\x2b\xda\x5c\x20\x67\x2f\xc3\xb1\x3d\x9c\x74\x90\xca\xbc\xce\xf2\x10\x4d\x0f\x95\xd8\x47\xc0\xe1\x81\x23\xc6\x74\xf1\xb8\x81\xd1\x26\x42\xc8\x7f\x69\x59\x3c\x99\xa8\x56\x93\xff\x1a\x1b\x3b\xc6\x31\xc2\x9a\x49\xfa\xc1\x58\xd9\x2a\x84\x18\x83\x6f\x0c\x86\x8a\xfb\xea\x93\xd4\x8c\x9c\x13\x2e\x80\x82\x2e\xcc\xe5\x28\xc8\xc5\x40\x9f\x7a\x2d\x07\x3b\xd5\x6b\x69\xe7\xa7\x44\xca\x9b\xdb\xd5\x9d\x64\x1d\x79\xa9\xfe\x04\x4d\xbe\xa7\x92\x7a\xcd\xa0\x97\xfa\x87\x31\xab\xf1\x48\xd2\x05\x09\x1e\x58\xd7\xf8\xaa\xae\x2b\xc3\x4c\xd5\x2d\x66\xa2\x1a\xea\xf2\xa5\x19\xc3\xf2\x4f\x40\xe3\x1c\xfe\xcf\x72\x92\x75\x1a\x72\x4e\xee\x89\x9e\x89\x86\x76\x21\xa6\x80\xf5\xe5\x14\xb0\x7a\x8c\x00\x48\xba\x08\xfb\x6f\x01\xa0\x66\x11\xf7\xd7\x6b\x2f\xcb\x35\x00\xaf\xff\x64\xd2\x6b\xcd\x3b\x13\x21\xca\x72\x98\xfa\x96\xd1\x2c\x89\x0c\x07\x8d\x8a\x15\x85\xc2\x5a\x8f\xe7\x9c\x7a\x80\x87\x14\x01\x56\xa9\x9d\x50\xb0\x8f\x99\x02\x97\x23\x4f\x14\xfc\x2b\xb5\x79\xed\x19\x82\x2a\xbd\xee\xf6\x2d\xb0\x8e\x25\x5d\xe8\xad\x45\xd2\x85\x7a\x60\x06\x38\xb1\x43\x15\x4a\x27\x8f\x3c\xc4\x15\x18\x40\xfb\x84\x5c\xc1\x4b\x8f\xa3\xe7\x65\xf9\x13\xef\x94\x14\xab\x6f\xfd\x05\xa8\xdb\x64\x4a\x27\xe9\xcf\x6e\x16\xde\x18\x1a\xce\x05\x17\x52\xb5\xcd\x2f\xc7\x11\x61\xc0\xee\xf5\xe4\xe2\xbc\x2c\x21\xe8\xab\x08\x51\x31\x91\x79\x40\x34\x3d\x0c\x6a\x36\xec\xe2\x3d\x2c\x88\xc8\xe3\xf1\x95\xbd\xa1\x67\x26\xd1\x0e\xd6\x33\xd3\xeb\xb3\x37\x37\xdd\x0a\xe6\xa6\x3f\xfb\xf1\x68\xb3\xe6\x1c\xac\xf4\xec\x8c\xd1\xdd\x03\x1c\xcc\xcf\x03\x93\x8f\x47\x3e\x82\x76\x7e\xde\xc3\x82\xc8\x3c\xc6\x40\xcf\x4f\xe7\x4c\xdc\x46\xde\xc9\xf6\xfc\xea\x26\x08\xaa\x6b\x69\xbf\x1f\x43\xfc\x74\xa6\x17\xff\xbd\xfa\x6b\xde\x3d\xa6\x36\xbe\x99\xde\xf1\x3a\xd9\x4e\x0a\x82\x80\x21\x53\xb0\x60\xd2\x74\xfc\xc8\xe5\xb5\xd2\x7b\x06\x05\xfe\x3b\xe8\x0c\x8d\xeb\x6c\xda\xc9\xd6\xa1\xd9\xfd\xaf\x56\x4d\x6e\xee\xa5\x13\x70\x61\x79\x89\x04\x63\xe2\xea\xec\xc1\x47\xec\x61\x8d\x2a\x0b\x6c\x56\x37\x77\x68\xea\x66\x73\x45\xa1\xae\x9d\x79\x93\x86\x60\x8f\x1e\xe2\x7e\xec\x19\xc2\xbd\x01\x9c\x41\x1c\x47\x27\x23\xcb\x57\x87\x26\xc7\xa3\x51\xd3\xd6\x4d\xc2\xbc\xd5\xf6\x53\x5b\x37\x93\x7c\xfa\x0e\xc8\x93\x29\xab\x68\xde\x49\xa0\xa3\x7a\x03\x78\x42\x43\xf5\x4d\xd9\x1b\x8f\x76\x46\x4a\x91\xfe\x46\xab\x35\xcb\x24\x60\x5e\x90\x4d\x30\xa3\xb2\x22\x65\x45\x17\x39\x81\x46\xb8\x7d\x81\x6d\x3f\x35\xbb\x22\x66\x4d\x4c\x44\xeb\xf4\x14\x63\x59\x10\xb2\xf7\x1e\x22\xd5\xe2\xa7\x3f\xcb\x16\x33\x29\xc8\x08\x18\xe3\x5e\x59\x96\x91\xf5\xb6\x71\x86\x1a\xa0\xf4\x00\x48\x65\x06\x54\xfe\xe8\xeb\x9b\x41\x28\xbd\x24\x84\x60\x1f\x95\x8e\xd3\xef\x27\x05\xd9\x14\x86\x57\xad\x9c\x2a\x67\xab\x56\xa6\xe1\x8e\xc1\xf5\x83\x33\x31\xe7\xad\x23\xec\x1b\xba\x64\xe0\x70\x59\xb9\x2b\xd4\x22\x2c\xc8\x8c\x36\x4a\x70\x3d\x8a\xea\x78\x89\x26\xcb\x8b\x53\x74\xd4\x90\xeb\x54\xf0\x99\x35\x5a\xa7\x16\x28\xa9\x4b\x22\x6a\xf1\x05\xf8\x6d\xb0\x3a\x27\xc0\x56\x05\xab\x62\x82\xbc\x22\x87\x5b\xfb\x2b\x7b\x7c\x41\x25\xdf\x30\x02\x11\x41\xd3\x57\x21\xf7\x8c\xbe\x33\xda\x84\xe3\x7e\x0b\x10\xb6\xf7\xb6\xed\xb0\xab\xe5\x9b\x27\x8a\x77\x4d\x91\x48\x19\x19\x10\x93\xc2\x5f\x51\x8e\xac\x29\xf3\x18\xf2\xb4\x61\x02\x91\xf4\x96\xfd\xf4\x87\x8a\xad\xb2\x3c\xd7\x23\xfd\xce\xda\x7a\x92\x93\x47\xc5\xef\x43\xb7\xf8\x75\x1e\x33\x4a\xfa\xfe\xea\x52\x87\x2f\xfc\x4c\x28\xa4\x13\x30\x95\x0c\xf9\x6b\xc5\x31\x9b\x15\x75\x22\xaf\xb3\x87\x8f\x86\x88\x5c\x2d\x0b\xc1\x2b\x7f\x59\x08\x5e\xf9\xf2\xed\x7b\x73\xfd\x09\x1b\x95\x30\xab\x05\xaa\xdc\xba\x9d\x78\xde\x0d\x10\xb8\x3f\x0b\x5f\x16\x53\x28\xe0\x9a\x0a\x96\x99\x63\xd7\xa7\x20\x94\xe2\x95\x69\xf9\x6f\x1b\x5a\x4d\x42\xda\x83\x4e\x39\x2f\x33\xf4\x53\xb8\x90\x05\x61\x15\x5b\x69\x65\x1b\x99\xe3\x11\x3e\xa1\x14\xd9\x70\xba\x93\x22\x05\x29\x2f\x08\xc0\xf6\x48\xf5\xfa\x9a\x8a\xf3\x32\x9b\xf3\x16\x3e\x7e\xcf\xdb\x82\xc8\x4f\x18\xd1\xc4\xad\x3d\xb1\xcd\x0b\x02\x41\x6f\x1b\x2f\xb7\xdf\x75\x14\xdc\x43\xe3\xc7\xb5\x98\x29\x86\x89\x82\xa0\xad\xaf\xd5\xb4\x0e\xac\x6a\xab\xce\x13\x43\xfb\x66\x6f\x8f\x40\x56\x8c\x0b\x50\xb6\x90\x46\xe5\xe2\x42\x3f\xfa\xe2\xe8\x32\x56\x39\x79\x6a\xe5\xe2\xf8\x27\xa4\xa2\x9d\x24\xb4\x5d\x28\x41\xb6\x43\xe0\x1e\xb2\xee\x24\xb9\x62\x04\x94\x91\x59\xd4\x37\xdd\x59\x10\x30\xf7\xf6\x14\x8d\x80\xd9\xfd\xd4\x96\x13\x47\xcb\x55\x6f\x0c\xa3\x68\x92\x6d\x50\xcd\xdc\x74\xe7\x61\xdc\x3b\x02\x5b\xaf\x65\x1a\xae\x09\x7a\x03\x80\x14\xe4\xa7\x70\xd2\xb8\x47\xc0\xc9\x33\xa1\xfe\x3f\x5f\x4b\xc7\x0b\x8f\x6b\x6f\x68\x73\x5e\x66\x4b\x76\x97\x14\x54\x9d\x08\x5a\xb2\x3b\x2f\x13\x64\xb3\x11\x85\xea\x5d\xb8\x70\x5d\x4f\x95\x36\x8a\x1f\x5c\x6c\x68\xc5\xe7\x0a\x08\x6c\x00\x64\x42\xf6\x01\xa2\xb1\x02\x42\xed\xba\x75\x62\x3a\xaa\xe9\x24\x74\xc9\xee\xf2\x70\x7d\x78\x73\xf3\xcc\x4c\xbd\x47\xf6\x4d\xd6\xad\xc3\xe9\x30\xa6\xbf\x20\x3c\xf0\x30\xef\xf3\x32\xfb\x94\xb5\x66\xe3\x98\x7d\xd8\x07\x07\x28\xad\x68\x89\x9c\x97\x99\xb6\xcf\x2e\x2e\xdf\xb9\x48\x9d\x1d\xed\xe0\x80\x8c\x6e\xba\x5e\x94\x32\x96\x37\x84\x91\xe7\xd0\xbe\xec\x98\x96\xcd\xe6\x02\x2d\x55\x1d\xd5\xbc\x7f\xbc\x7f\xc4\x16\x28\x97\xa5\x93\xcb\xd2\xc4\x2f\xd5\x6b\x0c\x42\x62\xd9\x8c\x51\xc1\xf0\x3c\x16\x01\x33\x87\x13\xec\x0f\xac\xd7\xb5\x51\xd3\x33\x59\xd3\x8c\xe7\x64\x9f\x4c\xc8\x35\xed\x88\xa8\x8d\x7d\x00\xa0\x90\x12\xe8\xd4\x81\x3d\x39\x55\xae\x91\x1d\x1e\x1e\x43\x68\xdf\x8e\x7d\x70\x40\x7e\xd0\x21\x51\x1c\x4e\x3f\xb7\xc8\xf6\x0c\x3a\x7c\x1f\x74\x7c\xf9\x92\x50\x31\x27\x2f\xbd\x5d\x87\xd0\x96\x11\x5e\x55\x6c\x41\x2b\xd3\x05\xd6\x0a\x60\x05\x80\x71\x5f\x36\x2f\x79\x49\x96\xea\xa5\x6a\xa4\xc7\xfc\x86\x2c\xcd\xb0\x0f\x0f\xf8\xd9\xa6\x67\x1c\x22\xc3\xe4\xd3\xc3\x13\x2a\x6a\x71\xb7\xaa\xd7\x9d\x26\xa8\x5d\x50\x1a\x11\xb7\xa6\x34\xc8\x47\xf3\x01\x09\x86\x38\x59\xfb\x1b\xdf\x3d\x12\x56\x75\x1e\x1a\xba\x69\x04\xd2\x34\x0e\xd9\xc3\x4b\xf2\xa1\x20\xf3\x35\xda\xfc\x1d\x93\x17\xaa\xf7\xe5\x37\xf0\x68\xa7\x54\xcc\xd7\x4d\xc5\x67\x54\x32\x4f\x3e\xc0\xef\x35\x83\xc0\x1f\x07\xd6\x86\xab\x41\x52\xf1\xed\x4d\x57\x86\x95\x3b\xb0\x37\xa3\xf0\x4f\xf2\xe9\x5b\xf6\xd1\xe0\x7e\xd3\x95\xe8\xb3\x81\x1b\x52\xf8\x23\xd9\x57\x10\xd3\x4e\xbf\xb2\x31\xec\x02\x8a\xc7\xe2\xd7\xf2\xae\x71\x8b\x19\x69\x97\xf7\xda\xd0\xc5\xa4\x50\x84\xa5\x0b\xfb\xca\x8f\xc5\xdf\x74\x25\x3c\xc6\x89\x3f\x49\x91\xd8\xc8\xf6\x04\x43\xd2\x06\x20\x8e\x6d\x74\xd5\xff\x61\x6d\xed\x39\x96\xce\x49\x1a\x30\x69\x9d\x1f\xe8\x9b\x9a\x81\xa9\x83\x4e\xcb\x07\x45\x5f\x28\x54\xb3\x61\x48\xdf\x97\xf1\x36\x11\xcf\x75\x30\x9b\x88\xcb\xc6\xd8\x00\x65\xe4\x08\x45\xfe\x68\x23\x5b\xc3\x52\xe7\xec\x8c\xa3\xd2\x84\xdd\xb0\xfc\x39\xf9\x70\xe6\xac\xa4\xeb\x6a\x2b\x42\xbb\x3c\xb3\x61\xd2\x79\x66\x7c\xc2\x63\x8b\x7d\xdd\x33\x21\xb3\x12\xfc\xb5\x82\x5c\x71\xd9\x81\x4d\xfe\xd5\x9f\x9c\x65\x67\x59\xa8\x88\x1f\x39\xba\x8d\x84\xc2\x88\x90\x43\xf9\x36\x4e\x9c\x09\xf9\xb5\x9a\xf6\xcb\x4c\x69\xbe\xaf\xf3\xac\x91\x6d\x4e\xa0\x40\xe8\xeb\x4c\x8d\x9f\xbb\x86\x47\x5f\xb9\x96\x47\x5f\xf9\x4d\x8f\xbe\x8a\xdb\x16\xea\xbf\x2f\x8f\x5d\x87\x2f\x8f\xfd\x0e\x5f\x1e\xc7\x1d\xbe\xfa\x93\x6b\xfb\xd5\x9f\xfc\xb6\x5f\xfd\x29\x68\xfb\x9e\x3b\x94\xd7\x01\xce\xeb\x1e\xd2\xef\xb9\x87\xf5\x3a\x44\x7b\xdd\xc7\xfb\x3d\xd8\xed\xef\x01\x3f\xfc\xdb\x60\xa2\x53\xf7\xf6\xe6\xb0\xee\x4f\xe2\x3d\xf7\x66\xb1\x0e\xa7\xb1\x0e\xe6\x11\x87\x02\x60\xed\x35\xb2\x55\x1b\xaf\xe7\xab\x5b\x47\xde\xb2\x2d\x0f\xdd\x77\x65\x8b\x79\xde\x7b\x29\xb0\xea\x97\xb6\x0b\x65\x35\x00\xec\x9c\x98\x12\x08\xfb\x64\x9b\x63\xaf\x20\x26\x6c\xec\x13\x32\xa3\x55\xa5\x0c\x6b\x33\x2c\x84\xb8\xc0\xc3\x87\x6f\xce\xc1\x1f\x8f\xa4\x49\xad\x3a\xb9\x2c\xb5\xac\x66\x2e\x80\xdf\xcb\x7f\x41\x51\x66\xb9\xd1\x2a\xdd\x4e\x0f\x66\x24\xaf\x79\x17\x44\x7d\x68\xbb\x58\xaf\x98\x80\x59\xf9\x41\x3d\x7f\xf7\x56\xd3\x00\x52\x38\xeb\x08\x26\x5e\x10\x85\xce\xf4\xed\x7a\x75\x26\x30\x75\x1b\x65\x6e\xa1\x13\xe4\x0b\x69\xbb\x00\x63\x47\x6d\x71\xaa\xcf\x99\x50\x3e\xa0\x9b\x17\x0e\x80\x2a\xdc\xa9\x52\xdd\xcb\xc3\xf2\x82\x5f\x82\x0a\xc5\x34\xa5\x66\x08\xc6\x49\x14\x68\x01\x2c\xcb\x5d\x01\x96\x41\xf0\x7c\x2d\xfd\x22\xac\xc3\x13\x4c\x50\x3b\xa7\x1b\x9f\x1f\xf9\xcf\x7d\xe8\x17\x87\x97\xd3\x1a\x7d\x57\x88\xb9\x39\x35\xe7\xd7\xef\x44\x3b\x28\xe8\x53\xad\x6d\x03\x44\x5c\x96\xbb\x20\xad\x9f\xe8\xf6\xa6\xa3\xd3\xac\xba\xea\xe6\x1d\x93\x3a\x0e\x58\x90\xd6\x62\xe2\x17\x11\xf9\x28\xeb\x5c\x69\x3e\x8e\x97\x47\x2f\x50\x56\x46\xf1\x36\xba\xc8\x94\xb0\x78\xcb\x43\x09\xe4\x7c\xc5\x56\xab\x7a\xc3\x32\x97\x24\xb5\x41\xd1\x10\xe0\x40\x9e\x74\xde\xc9\xdc\xee\xb7\x50\x09\xdc\x6f\xd3\xb5\x33\xdb\x66\xc1\xa4\x1f\xca\xa8\x6a\x3a\x7f\x37\xa3\x15\x6d\xb3\x26\x1a\xb0\x20\xc2\x24\xf9\x73\xf3\x61\x6b\xe5\x78\x13\x0e\x62\xa7\x1f\xec\x1d\xca\x91\xf7\xf6\xe4\x82\x74\xfc\x77\x86\xb1\xbc\x6c\x76\x9d\x9a\xf3\xcc\x2e\x4c\x13\x04\x48\x25\xa6\xf3\x7c\xbc\x73\x5f\xc4\xc0\xc8\xeb\x6b\x2a\xb4\xe8\xe8\x6d\x4f\x8d\x30\xd5\x01\x0c\x85\x8e\xbf\xf5\xf9\xb8\xaf\x68\xe3\xf1\xc9\xc6\x20\xb3\x55\x0a\xed\x27\x21\x13\x5a\x82\x89\x61\x97\xec\xee\xc7\xba\xf5\x46\x55\x9e\x6a\x3c\x5a\xe6\xab\x1d\x9b\xa2\x1b\x8f\x96\x46\x53\xc5\x79\x71\x76\x87\x11\xe7\xe5\x46\xd3\x04\x18\xa6\x94\x6b\xaf\x3e\x7f\xb9\x21\xa7\xaa\x9d\xcf\x59\xd8\x1d\x96\x7e\x50\x7e\xfa\x37\x76\xe7\x62\x7f\x88\xf4\xa4\x20\xcb\x8d\x1f\x4f\xd7\x14\x59\x6e\x0a\xb2\xf4\xe8\xda\xd0\xd9\x8c\x75\x9d\x37\xc7\x55\x7a\x9a\x7d\xeb\xed\x43\x81\xce\x8c\xa1\x12\xf4\xcb\xc7\x23\x26\x64\x7b\x97\x9e\xfb\x0a\xad\xb5\x25\x12\x00\x1b\x26\xcf\x25\x24\xc3\x86\xcf\x36\xb9\x60\x00\x5d\xc5\xe7\x19\x5a\x3f\x83\x91\x25\x4d\xcc\x34\x4f\x4b\x5c\x43\xbb\x8e\x2f\x44\x8f\x32\x05\xd9\xd0\x2a\x25\x73\x40\xda\x14\x41\x6e\xba\xdf\x68\x95\x26\xc8\x86\x56\x79\xc4\x5d\xa6\xb3\x13\xda\x73\x04\x42\x25\xf2\x10\x90\xd6\x64\x1f\x2d\x64\x8c\x73\xc8\xd0\xb6\x54\xfa\xdf\x25\x7c\xb0\xb9\x22\x03\xfc\x61\x32\x87\x70\x92\x02\x01\x79\xd4\xdf\x28\x92\xdb\x67\xe0\x16\xcf\x09\xdb\xe9\x3a\x11\x94\xb7\xe0\xd9\x66\xa2\x87\x4a\x96\x87\xac\x30\x4b\xb6\xd4\x5c\x0a\x28\x3f\x67\x15\x93\xbe\x56\x8e\xd7\x78\x5a\x44\xb7\xc8\x64\x72\xfc\xef\x71\x98\xa5\xab\x3e\x59\xd1\xe6\x4c\x49\xb7\xcb\xf3\x4b\x42\x08\xc1\x80\xf7\x0a\x0a\x36\xed\x62\x1f\x8f\x96\xec\xae\x0b\x1e\x70\x2c\xc0\x94\x63\x38\x85\x05\xe1\x46\xde\x11\x79\xcd\xf0\x33\x6e\x6f\xf0\x9d\x4b\xd6\x52\xa9\x76\x4a\x31\x07\x37\xb7\x9b\x92\xb3\x92\x80\x19\xa3\x9b\xb1\x5b\xde\xc9\xae\x80\xe6\x8a\x30\x92\xd7\x42\x01\xa3\xd2\x84\xff\xe5\x35\x83\x81\x66\xeb\xb6\x65\x42\x02\x4d\xea\x56\x89\xe7\x9a\xe9\x36\x9d\x0f\xb2\x20\x2d\x5b\xd0\x76\x5e\xb1\xae\x53\xa6\x9a\x82\x6c\xfa\x1a\x84\xa6\xe4\x0c\x90\xbe\x62\x33\xba\xee\x98\xdf\x06\xc6\xb2\x88\xaf\xf8\xe2\x1a\x63\xa6\x92\x56\x8c\xcc\xd7\x8c\xc8\x1a\x50\x00\xee\xf1\x5a\x10\x2e\x08\x25\x55\x5d\x37\xd3\xf1\x08\x08\xe0\xd1\xca\x46\xe2\x14\x40\xf2\x52\x13\x3e\x27\xdd\x92\x37\xef\x85\xe4\xd5\x6f\xb4\xe2\x73\x50\x6c\x90\x89\x54\xa4\x92\xac\x9d\x72\xf2\x0a\x3f\x28\xe2\xbb\x33\x36\xa0\x2c\xe1\xdc\x82\x7d\xa7\xed\x0a\xe8\xa4\x0f\xe7\xc0\x17\x2c\xe5\x5c\xba\x80\x48\x52\xf3\x8e\xae\x5a\x46\x97\xda\x1e\x3b\x38\x20\xbf\x5e\x33\x98\x1c\xef\x08\xad\x5a\x46\xe7\x7a\x9e\x6c\x3e\x25\x6f\xea\x0d\x23\x35\xf0\x83\x08\x76\x0b\xc4\x5c\x4d\xd5\x90\x30\xf8\xfe\x7e\xe8\xc2\x35\xea\x31\x9c\xd7\x1b\x16\xf0\x94\xbe\x4d\x6b\xc1\x3d\x4d\x3a\x65\x04\xa5\xa4\x3c\x91\x86\x52\xe4\x49\x9a\x2a\x2b\xc8\x17\x15\x4a\xef\x3e\xe6\x31\xc6\x4b\x76\x97\x71\xf9\x04\x3c\x81\xa3\x60\x32\x18\xae\x66\x5c\xa9\x9a\x0d\x6d\xc9\x72\x13\x2e\x18\xcd\x13\x90\x8e\x17\x2e\x67\x03\xfb\x9e\x7d\x33\x76\x71\x28\x4d\xd3\x84\x94\x78\x1c\x86\xf4\xcf\x80\x90\x84\xc6\xf1\xe3\x6e\xb1\x71\xa8\xf4\x04\x67\x8c\xa2\xf1\x0b\x9b\xd5\xed\x1c\xb8\xbf\x64\x77\x5f\xe0\xf2\x6b\x28\x6f\xe1\x58\x60\x45\x15\x39\x70\x97\x65\x9d\x95\x0a\x98\xb1\xda\xdb\xff\xd0\x06\x67\x4c\x88\x65\x6f\x77\x83\x41\x8c\x65\x30\xb4\xc3\xa9\x46\x80\xee\xbf\x18\x1b\x32\xf6\x1f\xc2\xa4\xbe\x09\xa2\x99\xb4\xc3\x0e\x51\xad\x94\x5a\x49\x31\x69\x0b\x57\xfc\x19\x00\x51\xac\x36\xf2\x60\x57\x4c\x24\x0c\x68\x2e\xa2\x53\xaa\x4f\xd7\x1f\x96\x29\xae\xe2\x64\x23\xbf\xe7\x2d\x18\x3b\x44\xbb\xd7\x89\x70\xa3\x92\xa1\xae\x9d\xa1\x2d\xb2\xf1\x7c\x52\x5e\xda\xe7\x2e\xe1\x35\x75\x81\x3f\xc1\xab\x49\xee\x1b\x8d\x5b\x22\x96\xae\x43\x41\x36\x53\xa8\x0a\xc1\x88\x84\x1a\x5d\x59\x75\xbe\x08\x9b\x0c\x97\x09\x56\xb8\x70\xbd\x0d\x52\x9a\xf4\x56\x67\x1c\x75\x7f\x30\x65\x24\x21\xe6\xda\xcc\xa7\xe8\x36\xe7\xa6\x03\x5a\x49\xff\x86\xd5\xca\x93\x82\x04\x8d\xf5\xd3\x5e\xeb\x0a\xc8\x1b\xb7\xd6\x4f\x7b\xad\x67\xca\xbe\xe7\xf2\x2e\x6e\x6f\x9f\x43\x8f\x0d\x10\x7d\xb7\x20\x03\xe4\xd8\x8a\x56\xce\x9f\x09\x70\xe9\xaa\x7f\x1d\x34\x42\xb1\x4e\x5b\xae\x61\x1b\xf5\x12\x78\x6a\xbe\x63\x90\x00\xf1\x42\xc4\xe1\x81\xd9\x93\xcd\xa9\xd6\x8a\xf4\x49\x0e\xb1\x03\xcf\xe8\xdd\x28\x53\x17\x61\x14\xde\x90\x79\xbc\xc7\xa7\xa1\x05\x54\x03\x03\x3d\xa2\xa4\x61\x52\x14\xb5\xee\x43\x8b\xa3\xd4\xe3\xad\x58\x06\xa1\xeb\x82\x7c\x57\xd7\x55\x01\x39\xfc\x42\xe7\x57\x6d\x8e\xc8\xa4\x5a\x41\x77\xf9\x43\xf7\x5c\x8d\x69\x23\xdb\x30\x94\x8d\x31\xbc\x3d\x58\x2d\x3f\xb4\x6d\xdd\xde\xdb\x4c\xcc\xeb\x5a\x6c\x58\xab\xc4\x72\xf9\x98\x0e\x48\xda\x28\x57\xbf\xd6\x89\x56\x7e\xf4\x05\x57\xda\xb4\xad\xb3\x9c\x3c\xe8\x6f\x7b\x4f\x8b\x61\xbe\xae\x9b\x3b\x57\xa7\xa6\xe3\x95\x5a\x3b\xcd\x61\x65\xce\x3b\x39\x5d\x42\x37\x50\x15\xf3\xa5\xda\x6d\xb0\x7e\x6b\x6f\x4f\x7f\x8d\x8b\x91\x06\x26\xdc\xa8\x65\x32\x37\xd3\x45\x60\xb6\x18\xec\x5e\x57\xa4\xad\xd6\x9d\xfc\x8e\xfd\x19\x5c\x43\x7a\x55\xb1\x0c\x5b\xbb\x57\xae\xfa\x75\x3c\x1e\x75\x80\x63\xd7\xce\x2c\x8e\xa0\xe7\x80\x57\x6a\x40\xac\x0d\x06\x1d\x17\x22\xde\x45\x88\x7b\x5d\x4e\xd5\x4b\x5c\x4d\x5c\x2c\x60\x96\x9d\x9c\x26\x17\x1c\x44\xc2\x71\x41\xbe\xf0\x20\xdc\x8f\x47\x4f\x21\x45\xb7\x74\xa7\x13\x46\x6a\x0e\x89\x09\x26\x20\x2b\x83\xb6\x7b\xb3\xee\xe4\x1b\x2a\x67\xd7\x59\x8f\xc0\x01\xb2\x58\xd8\x17\x2c\x4b\xa5\x8f\xe7\x9d\xd4\x8e\xad\x6a\x1e\x6c\x06\x09\xa6\xfc\xe6\x2f\x36\x93\x7b\x0f\xc7\xc9\x71\xd5\x61\x63\x3d\x88\xde\x56\x34\x83\xc2\x1d\x27\x1a\xc4\xee\x4c\xd1\x20\x11\xf2\xbe\xce\xd0\x83\x28\x60\x21\x7d\x86\x76\x55\xad\x0d\xb8\x58\x20\x95\x7e\x73\x2a\x41\x1f\x77\xf5\x97\x61\xba\xbb\xae\x2d\x4b\xf7\xb6\xdb\x3e\x9c\x39\xf8\x85\xcd\x18\xdf\xb0\x36\xab\x1b\x5b\x67\x6d\x37\x68\xae\x63\x6b\x1f\xac\x83\xe2\x95\xd6\x43\x1e\x21\x61\x88\x28\xd1\x86\x1a\x4f\x53\x01\xcf\x4b\xad\xd5\x9d\x44\xfa\xa9\xed\xd1\x48\x4a\x34\x5c\x82\xe3\x72\xbd\xf8\x22\xee\xf6\xc6\x0e\x84\xe2\xbe\x87\x07\xc2\xc9\xb7\xba\x26\x58\x4e\xf5\x29\x8a\xdc\x97\x6c\x97\x99\x30\x35\xb6\x58\xc5\xe6\xca\x4e\xf4\x79\x0c\xae\xec\xc2\x89\x09\xbd\x43\xee\x7e\xcf\xc1\xbc\xe0\x97\x7a\x01\x49\x39\x35\x35\xd2\x2b\xf8\x94\x4f\x83\x5a\xf7\xe4\xd8\x13\xb2\x4f\xea\x06\x2a\x19\xea\x92\xac\xe3\xb3\xf9\x76\x58\x65\xa4\x6d\xcb\x7d\x80\x2c\xeb\xb1\xcd\x96\x8b\x05\xb5\xa7\x24\x81\x18\x9e\x19\x08\xcc\x6b\x3c\x17\x8c\xfc\xe8\x9d\x4e\xc1\x29\xae\xb9\x90\x19\xcf\x15\x61\xe1\x23\x18\x87\x5d\xfe\xd9\xc8\xba\xf2\xa8\x89\x88\xfc\xb7\x11\x14\x87\x77\x34\x5d\xc5\x44\xdd\x7a\xdd\x47\x60\x86\xe6\xbb\x2a\x99\xd5\xa2\x9d\x6d\x5a\x24\x7f\xa0\x66\x5c\x65\x37\x82\x42\xfd\xa0\xda\xc6\xa6\xae\xd2\x2b\xea\x05\x82\x2b\x05\x39\x8d\x37\x5d\xf5\xd6\x55\x48\xfb\xe9\x63\xd4\x18\x76\xf9\x83\xc3\x67\xd7\xa1\x33\xca\x55\x7b\x5d\x8a\x17\x25\xc9\x60\x1d\xc3\xf5\x22\x50\x83\xb7\x63\x23\x85\x67\x53\x3b\xc0\xa4\x20\x87\x6e\x4b\x85\x41\xf6\xf6\x7c\x2b\xe0\x97\x73\xbc\x21\x25\x51\xb8\x17\x81\x3a\x21\x33\x2a\x44\x6d\xe3\x5f\xe8\x69\xd7\x57\x92\x42\xd8\xa6\x6c\xeb\x95\x2f\x11\x58\x38\x52\xb7\x9e\x68\x3c\x7a\x93\x81\xc1\x71\x05\x38\x04\x36\x3a\x4f\x87\xcf\xd1\x8d\x98\xf8\x73\xd9\x38\xbd\x9e\xe6\x1e\xa2\xe6\x51\x30\x16\xbd\x3e\x63\x9d\x54\x04\xc7\xf9\x3c\x6d\xbf\x05\x9c\xeb\x9c\x3a\x0a\xc8\x55\xa7\x1f\x8e\xcf\xbc\x50\x93\xb2\xa4\x3c\x78\xb0\x5b\x7c\xde\x6c\x57\xbc\xd5\xbc\xc5\x13\x4c\xee\x3c\x85\x39\x3d\xf4\x1f\x3f\x9e\xfd\xef\x37\x3f\xfc\xc7\x24\xc8\xf3\xf8\xa4\xef\xef\x4d\x61\x6e\xba\xcf\xc9\xd3\xb4\x28\x0d\xab\xab\x75\x07\xa5\xe8\x6a\xe4\x9f\x69\x2b\x39\xad\x94\x81\x6d\x52\xd5\x1f\x0a\xf2\x01\xf6\x3b\x7b\x64\xdd\xdb\x37\xa1\xda\x5e\x29\x4a\xed\x4b\x7e\xfb\xad\x43\xe4\xdd\x35\x2f\xe1\xf4\xc9\x67\x5e\xf9\x9f\x39\xfd\x3d\x98\x4e\x2c\x85\x61\x35\x6d\x9a\x4a\x19\x6e\x0a\x09\x0f\x70\x0e\x89\xd8\xd0\x2b\xd8\x40\x6d\x53\x96\x0f\xbb\x06\x61\x5e\x36\xf4\x0c\x52\x59\x5a\xbf\x50\x13\x41\x74\x99\x3b\xfd\x62\xaa\x56\xe2\x9a\x95\x9f\x65\xab\xdd\x22\xdf\x65\x42\x57\xab\xe8\x95\x03\xe1\x7d\x5f\xfd\x0a\x1f\xbc\x5e\x6d\x94\x44\xe6\x75\xbd\x6a\x68\x8b\x0e\xc0\x4e\x74\xf4\xf0\xe8\x3d\xeb\x73\xf9\xe1\x18\xc9\x32\x25\x13\x18\x9a\xfa\x83\xf5\x3c\xcd\xf8\xf8\x8d\x9c\xbe\x5d\xaf\xa0\xd0\xcb\x3f\x7b\x83\x16\xcc\x14\x9f\xf3\x1c\xeb\xf7\x82\x49\x98\xbc\xbc\x8f\x16\x6e\xa5\x41\xcd\x3c\x10\x2b\x41\x10\x94\xfa\x8c\xdb\xa4\x2c\x3e\xc8\x4d\x11\xc9\x1f\xb4\x01\xa1\x26\xda\xe2\x20\xa7\x66\x38\x5c\x15\xfe\x0d\x16\x29\xe3\x26\x69\x37\x06\x46\x63\xac\x2d\xde\x78\x46\x0c\x54\x5e\xd7\x25\x16\x33\xe8\x5d\xa4\xf1\xee\xb0\x00\xa3\xa6\x31\xd5\xa8\xce\x18\x43\xf3\x26\x1f\x8f\x56\x50\xa0\x4a\x4e\x09\x34\xb2\xc6\x59\x09\xbe\x87\x93\xfa\x31\xdc\x55\x84\x30\x8c\x65\xd2\xa0\x65\x32\x1e\x95\x72\x47\x79\xcc\x4a\x1b\xc9\xc1\x25\x2f\x68\xae\x1f\x16\xe4\x68\x1f\x6a\x7d\xe5\x94\x0b\xdc\x5b\xb8\x70\x47\xe6\xb8\xc0\x93\x72\x4a\x94\x3e\xc0\x12\xf7\xaa\x7b\xb1\x0b\x46\x68\xa3\x3e\xb4\xc5\xf8\x59\x74\x93\x8b\x1d\x54\x0f\x09\x07\x71\x73\x07\xbf\xc5\x0c\xa7\x85\x5f\xdb\x1a\x16\x05\xc7\x8e\x50\xaf\x21\x61\x25\x35\x8b\xa1\x4f\x78\x92\xa0\x50\xbd\xcf\xba\xdf\x74\xed\x3a\x18\x3b\x2b\x5d\x7c\x4c\x56\x72\x6c\x4f\x9c\xed\x30\xe6\x7a\x97\xf0\x45\x57\xf0\xed\xb4\xf0\x70\x7f\xf8\x8c\x5a\x59\x6f\x1a\xae\x3c\xe8\xf0\xd2\x89\x7f\x64\xe9\x6d\xd5\xd2\x17\x47\x27\x97\x5a\x53\xaf\xe0\x1c\x04\x39\xd5\xba\x7a\x25\xed\x2d\x86\x7d\x2d\x2d\xc2\xea\x19\xb5\x13\xae\x90\x08\xe4\x94\x70\x57\x1c\xea\x34\x81\xdd\x9e\xcd\x36\x17\xdd\x78\x98\xf0\x05\xed\x29\xbb\xf8\x85\x17\x27\x1c\xdc\x9f\x4c\x34\xab\x67\xd1\x61\x50\xc9\x19\x74\x83\x99\x77\x00\x10\xe5\xde\xf1\xf0\x49\xa5\x33\x82\x41\xe1\x0a\x58\x52\x6f\x21\xd8\xac\xec\x57\xf3\x3c\x38\x13\x84\xfd\xbc\xdd\x1b\xb5\xaa\xde\x17\x82\x69\xc2\x0b\xaf\x2a\xb0\x70\x25\x8e\x51\xf4\xd0\x37\x14\x2d\x36\xd7\x7c\x71\x0d\x51\x6c\x17\x02\xae\x3f\x62\x34\x57\x5f\x85\x55\xaf\x9a\x8a\xdd\x2a\xc0\xfa\xe3\xd1\xf1\xd7\x4f\x85\xde\x32\x3c\xbe\xe4\x9e\xf0\x15\xdc\xda\x61\xc1\xbb\x8b\x58\x0c\xc9\x4e\x4f\x07\x88\x12\x87\xe9\x07\x30\x70\xad\xb0\x8d\x8d\xf5\xea\xfb\x49\x7a\xb5\x0e\x49\xcc\xbd\x18\xbb\xe9\x12\x87\xd9\x37\xc9\x18\x7b\xd4\xda\x86\xd9\x37\xc9\x18\x7b\xd4\xda\x0b\xb3\x6f\x06\x62\xec\x66\xd2\xa6\xcc\xc2\x6e\xad\x5b\x44\xdc\x0f\xa3\x46\xb1\x9f\xf4\x6a\xe8\xaf\x46\xac\x61\xf9\xb5\xce\x66\xb5\x90\xec\x56\x5a\x73\x5a\x19\xfd\x36\xb6\x43\xdb\x05\xeb\xfb\x00\xdb\x0d\xed\xad\x2e\x93\x1e\xcd\xb9\x4b\x7a\x09\x18\x8b\x68\x0e\x09\xa1\xea\xce\x8b\xa3\x42\x94\x17\x79\x7a\x82\x79\xd5\xf3\x0d\x6b\x3f\xb6\x5c\xe2\xe9\x50\xd2\xd5\x58\xfc\x20\xaf\xd9\x1d\x59\x51\x39\xbb\x9e\x62\xbb\x77\x6a\x73\x5d\xb1\x55\xdd\xde\x91\x8a\xde\xc1\xc6\xd0\xd5\x44\xd4\xe4\x9a\xb6\x2b\x32\xaf\x05\x53\x2d\x71\xbb\xd5\x13\xc9\xd4\xff\x7f\x9e\xcf\xdb\x07\xab\x33\x5c\x70\x1a\x0c\x52\xec\xf1\xa0\x37\xe8\x79\x67\x0f\xcb\xc6\x47\x0a\x35\xe2\x58\x9d\x0b\xaa\x12\xa6\xc8\xd5\xa2\x03\x1d\x1c\x4f\x4d\x99\x43\x48\x71\xef\x94\xe2\xc8\x3c\xf2\x6b\xb3\xe7\x70\xcc\xdd\x94\x20\xfc\x05\x2e\x04\xfe\xeb\xbb\x13\xf2\x6e\xc9\x1b\xc8\x37\x6f\x92\x66\x15\xf8\xd7\x67\xdd\x5b\x5e\x65\x39\x81\x00\x24\x95\x80\x0a\xc2\x71\xff\xd0\x63\x6e\x3a\xd9\x32\xba\x9a\x5a\x67\x91\x5c\xb1\xaa\xfe\x48\xe6\x35\xeb\x88\x72\xb7\xc1\x38\x2a\xe0\xf4\x0b\x97\x44\x30\x36\xef\x62\x48\xb2\x26\xed\x5a\x14\x64\xc1\x37\x4c\x10\x2e\x3b\x32\x5b\x77\xb2\x5e\x39\x32\xc0\xed\xc3\x8a\x0f\xb7\xc0\x86\x28\x08\x61\x2e\xcc\x41\xf2\x28\x6a\xbf\x5d\xaf\xb4\x91\x97\x3b\xa7\x4e\x97\x7f\xdb\x53\x9f\x19\x52\x2d\x27\xa7\xe4\x76\x3c\xf2\xc3\x5d\x23\xeb\xf9\x02\xf5\x6f\x8d\x94\xe7\xe1\xaa\xf3\x58\x88\xef\x8b\x7e\x75\xb5\x45\x33\xd7\x17\xf5\x1c\x1c\x90\x1f\x29\xaf\xd8\x7c\x3a\xd6\x86\xa3\x59\x5d\xfb\x64\x72\x62\xc2\x12\xa5\x3b\x82\x83\x9a\xdf\xd8\x0b\x10\xbc\xe2\x48\x5a\x6a\x17\x80\x22\xa1\xed\x00\x67\xdf\x6d\x36\x5a\xdf\xc7\x30\xa3\x55\xf5\x3f\x59\xd5\xb0\x96\xf4\xb7\x27\xf5\x12\xaf\x45\xd4\x24\xcd\xa7\x68\x84\x4c\xa7\xd3\xe0\x9c\xac\x67\x77\xf4\xb4\x85\x02\xe2\xfb\xdc\x5c\xb8\x2a\x71\xfd\xc1\x04\x7a\x33\x88\xb1\x11\xe2\xc2\xc2\x6a\xc1\x08\x42\x22\x35\x62\xac\x19\x3f\xb3\x9a\xef\x52\x29\x1f\x0a\x22\xc1\xeb\xfe\x44\xa7\xdb\x78\xd2\xbe\xd3\x3d\xe8\x75\xef\x74\xbb\xc1\x01\x72\x92\xf5\x94\xc8\x22\x16\x8d\x27\xa2\x74\xa9\x68\x8d\xef\xf9\xbb\x2a\x24\x1b\x66\x52\x60\x9c\x9e\x48\x46\xc8\x94\x11\xe3\x2a\xf0\x55\x53\x53\x30\x66\xe2\x18\xdc\x15\x93\xd7\x0d\x9c\x8e\x53\x7d\x30\x5f\x30\x1e\x09\x74\x3a\x74\xc1\xbb\x0e\x50\xb8\xe4\x13\xfa\x8e\xbe\xa1\x9d\x8e\xcd\x5a\x90\xe6\x6c\x7f\x70\xc8\xd6\xa0\x03\xcb\x0f\x0f\xdb\xc3\xb9\xde\x57\x44\xec\x02\x07\x47\x09\x64\x5d\x93\x92\x7d\x24\x5c\x34\x6b\xe9\x2c\xdc\x14\xc8\x6f\x9f\x01\x72\x45\xc5\xdd\x10\x4c\xbf\x3a\x45\xf9\xb0\x7d\x12\x88\x2f\xbe\x78\xe6\x8c\x9e\x3c\x99\x98\xe4\x7b\x7b\x4f\x9b\xdf\x13\xa7\x66\xdd\xb1\xdb\xde\xd1\x65\x5e\x92\xdb\x60\x63\xc1\x48\xd9\xae\x78\xfc\xba\xe3\x62\x41\x7e\x67\x6d\xad\x4d\x07\x33\x68\x34\xa6\x1f\xad\x10\x2e\x44\xa1\x46\xd5\x6a\x18\x2f\x20\xbe\xe0\x97\x3a\x9e\x54\x28\xda\x8b\x8c\xe7\xdf\x90\x17\xb7\x72\xea\xac\x86\x5f\x6b\xd8\x01\x76\xe7\x0a\x10\x37\xf5\xe0\x56\x86\x8a\x98\x76\x4e\xed\x2a\x58\x41\x15\x90\xbd\xd4\xe0\x85\x59\x0f\x7b\x7b\x29\x39\x38\x38\x20\x4d\xcb\x1a\xda\xea\x23\xe4\xfa\x42\xf8\x15\xe5\x42\x8d\x0b\x3b\x42\x67\xd2\x20\x86\x8b\x5f\x10\xe1\xd7\x8e\x78\xd7\x6d\xa8\xc9\x8a\x1c\x0a\x8e\x57\x0a\x0d\x73\xa6\x54\xbf\xb0\xa5\xc1\xfd\x9b\xa1\xbd\x88\xcf\xad\xa6\xa2\xd8\x87\xa4\x0b\xd2\x57\x3d\xbb\xd5\x54\x4d\x10\x13\xca\xf0\xb5\x95\xde\x3f\xe0\x03\xb1\xf7\x75\xc7\x76\xd2\x31\x38\x4a\x8a\xdb\x9d\xd0\xdc\x70\x47\x3b\xb0\x4e\xc5\x7a\xd6\xca\x92\xbe\x35\xe2\x5f\xb7\x7c\x81\x87\xef\xb9\x30\x81\x87\xf0\x84\x8e\xd8\x3f\x32\x25\x14\x19\x17\x17\x27\xe2\xb2\x20\xd8\x0b\x74\xbd\xb8\x10\x70\x24\x54\x8d\x81\x1a\x50\x60\x60\x44\x13\x1f\x98\xaa\x1e\xbd\xf0\x14\xdf\x2e\x05\xfb\xb1\xad\xc5\xc2\x4a\x35\xde\xb6\xa0\xe3\x41\x42\x87\x40\xa4\x3d\x0b\x33\x1e\xc3\xd1\x1f\x74\x72\xb7\x9f\xa1\x91\xde\x51\x23\x7d\x7a\x26\x88\xc1\xe8\x65\x69\xc1\x05\xa7\x66\xd6\xe2\x63\x4b\x9b\xbf\x76\x26\x76\x81\x0b\x05\x20\x4c\xad\xf5\x9f\x98\xce\xc4\x2e\x2a\x2f\x5a\x2b\x78\x95\xbb\x64\x84\x71\x3a\xec\x39\x20\x67\x81\x24\x6e\xc9\x28\x95\xc4\xda\xf0\x03\x62\x9a\x3b\xd3\x5f\xe8\xfb\x0b\xdc\x39\x25\xbf\x60\xcf\x9d\x52\xd2\x4f\x35\xa3\xef\xbd\x6a\xae\xa9\xa2\xeb\x61\x5e\x90\x68\xc2\xe6\xb1\x46\x14\xce\xa2\x3e\xc6\x01\xdd\xfe\x19\x2f\x85\x50\xe2\x6c\x97\x6a\x6b\xea\x09\xe3\x73\x5b\x38\x16\x4f\xa3\xc0\x1d\x0a\xee\xe6\xe1\xe0\x50\x97\x3e\xca\x24\x83\x98\xb2\x35\xbe\x5e\xd3\x26\xb3\xc5\x2d\x4b\xf4\x55\x4c\xd5\x88\xad\x45\xbb\x1f\x88\x15\xa3\x85\xf9\x13\x13\x36\x42\x8c\x91\x6f\xeb\xa7\xdb\x76\xd6\xfe\x88\xbd\x54\xaf\xc6\x60\x67\x76\xef\x35\x6d\x74\x65\x90\xb6\x4d\x6f\x34\x2d\x7e\x96\x6d\x74\x19\x73\x6c\xa8\x7a\x2d\x95\x67\x8c\x54\x08\xc9\x69\xcf\x2b\x86\x25\x79\x89\x90\x92\x6a\x0a\x65\x81\x6e\xf4\x20\x6a\xa4\x31\xb0\x6f\x6d\xb8\x20\xf0\xa7\x37\xde\x0f\x77\xc4\xcb\xe9\x73\xe1\x62\xe3\x02\xb5\x3e\x44\x31\x84\x80\x13\x08\x5d\x0b\x67\xcd\x6e\xbf\x20\xd1\x88\x86\x5f\x8e\x18\xdc\xea\xac\xe3\x5e\xb1\x05\xbc\x31\x75\x94\x83\xc1\x2d\xbf\x96\xd6\xde\x99\x83\x29\x75\x0c\x4e\xfb\xcc\x4d\x47\x7c\xf2\xc1\x62\x4c\x17\x1d\xd1\x17\xe4\x78\x0e\x77\x3e\xee\x55\x11\x3a\x2f\x76\x18\xab\xd4\x44\x4d\x4e\x41\xdf\xd2\xb1\xcd\x46\xf7\x83\x02\x3a\x1b\xdd\x3f\x60\xfb\xe7\xf9\xbc\x0d\xe3\x01\x52\x4e\xbd\x3b\x1c\x7a\x31\x01\xfd\xba\x17\x58\x0d\x65\xcb\x34\x82\x43\x40\xbd\x80\xeb\xd3\xea\xf4\x70\x3d\x2a\x51\x71\xa5\x7a\x7d\x51\xd2\x79\x9f\xfe\xad\x5d\x46\x8e\xa0\xda\xcc\x85\x5d\x77\x0e\x08\x00\x27\x85\xed\xaf\x33\xfc\x86\xf0\xee\xee\x81\x61\xda\x0f\x14\x9c\x48\x39\x35\x57\x92\x24\x33\x33\x30\xf2\x60\x62\xc6\x8f\xf9\xf7\xa2\x8b\xe6\xce\xba\x9d\xe1\x7c\x18\x42\xd7\x01\x95\xe6\x12\x06\x7b\x9e\x1e\x9e\x28\xb0\xe3\x71\x22\xa8\xf4\x4e\xf2\xd9\xf2\xee\x97\x73\x17\x58\x7a\x30\x22\x94\x27\x6a\x1d\xd1\xba\x44\x90\x90\x1d\xea\x95\xc0\x28\x17\x10\x5e\x9b\x5b\x9d\xcd\x72\x70\xe2\x08\x77\x94\xfc\x72\x1e\x45\x40\xdc\x7b\x83\x93\xbb\x6b\x18\x62\x50\x60\x62\xf8\x53\x44\x0c\xe0\xbe\xd0\x6f\xe0\xfd\x0b\xb8\x46\x65\x6f\x8f\x70\xe7\x9c\xf3\x52\xd1\x16\x3b\x2f\x98\xfc\xab\xfa\x9c\x49\xba\xc8\xbf\xd1\xcf\x5f\xe8\xbb\x57\xf4\x59\x60\x5d\xcb\x0b\xee\x38\xca\xe1\x61\x6e\x03\xc7\xd3\x01\xad\x39\x1a\x8d\xea\x70\x59\xc7\xda\x73\x14\x2b\x04\x50\x30\xe9\x5a\x0b\xaf\x54\x19\x36\x00\xec\x9d\xa8\x70\xd8\x7a\xd7\x5a\x94\x43\x72\x57\x37\xb2\x49\x41\x6a\xc0\x0f\x08\x10\xdc\xe8\x90\xe7\xe4\xd1\x5c\x52\x3d\x34\xe0\x6d\xb0\xb1\xdc\x93\x1a\x8c\x61\x80\x95\x38\xbd\xc3\x6e\xfd\x71\x6f\xc3\xc1\xbc\xd1\x7a\x2a\xc5\xc5\xd2\x13\xc9\x18\x8f\xf0\xc8\x2a\xeb\x63\x78\xd7\x67\x6b\xe1\xe9\xb6\x65\x54\x30\x66\x51\xc5\xb9\x18\xe5\x37\x05\x17\x09\xd8\x52\xd7\xe8\xe2\xc0\x5e\xee\xe7\x93\xb8\xfb\x2c\xd6\xc6\x3b\x7e\x41\x3a\xef\xae\x49\x43\xd1\x27\x32\xaf\xf3\x2e\xad\xec\x1b\x13\x05\xb9\xb5\x10\xfb\x0c\x4a\x5d\x4d\x07\x9d\xb6\x63\xa8\x7a\xbb\xe0\xbf\xbf\x26\xed\x79\x64\x57\x7b\xa3\x96\xa4\x0c\x56\xe9\xc1\x01\x9c\xba\x23\x15\xa3\x73\xd5\xa8\x6b\xa8\x72\x9a\xf0\xd6\xd5\x43\x6b\x21\xbf\xc2\x6a\x4b\xba\x80\x50\x84\xa4\x0b\xb0\x8e\x4f\xc9\xbf\x93\x7f\xd7\x11\xd7\xfd\x7d\x63\x29\xd0\x05\x39\xc5\x26\x27\x97\x26\xe2\xbd\xb0\x97\x32\x05\x95\xf7\x1a\x81\x19\x15\x44\xd6\x64\x56\x57\x18\x25\x3e\x38\x20\x14\x31\x21\x75\x4b\x28\xf9\xfb\xba\x96\x0c\x4e\xdf\x91\xee\x4e\x48\x7a\x8b\x75\x3c\x80\xe6\x4e\x2c\x5f\x20\x96\xe1\x83\x93\xf8\xc1\xa4\x37\x0f\x5e\x12\xbe\x7f\x64\x0b\x4d\x15\xd0\x87\x87\x08\x86\x79\xb0\x7f\x14\x42\xf1\xcf\x16\x98\xda\x00\xe4\x82\x02\x74\x71\xc2\x2f\xf3\x90\x52\xfb\x47\x27\x97\x3e\x35\x60\xc6\x73\xc3\x39\x59\x93\x92\x8b\x39\x86\x12\xf4\xac\x8f\x76\xcf\xda\xce\xa9\xf4\x39\xf6\x9f\xff\xa9\x1f\xeb\xb9\xea\x1f\xba\x09\xe6\x1d\xcc\xba\x37\xa3\xbf\x63\x90\x3b\x9e\xd3\xfe\xd1\xd0\xac\xfc\x8b\xb9\x6e\x3a\x2d\x05\x1b\xf4\xc4\x3e\x68\x38\x70\xf9\xd7\x7b\x01\x13\xcf\x70\x84\xdc\xb3\xfb\xcc\xd4\x83\x85\x32\x99\x24\xcc\x1d\xbd\xbf\x47\xe6\xce\x2e\xfb\xd9\xfa\x54\xc6\x8a\xb1\x17\x2d\x3e\xbd\x24\x19\x22\xd3\x52\x4e\x2b\x26\x06\x82\x52\x00\x74\xc0\x7e\xf1\xcd\x6c\x6d\x1d\x26\x13\x57\x7d\xb3\x22\x51\x49\xe5\x1b\x19\xe3\xd1\x88\x6e\x57\xda\x9f\x4d\x6b\xff\xb1\x4d\xf9\x0f\xea\x6d\xea\x3c\x6f\xbb\x11\x3e\x51\x6f\xd3\xad\x51\x95\x50\x73\xa7\xf6\xd6\xc7\x41\xa7\x67\x2b\x9a\xa8\xbb\x7b\x07\xca\x52\xbe\x5b\x58\xc2\xd4\x45\x69\x69\x74\xdf\xd3\x32\x87\x31\xc6\x6d\x32\x67\xec\x76\x73\xf9\xe0\x16\x89\x1f\x90\x4f\x23\x8d\x91\xfb\xb4\x5b\x30\x39\xd9\x77\xb3\x31\x29\x79\x13\x8c\x40\xb1\xed\xc2\xec\xfe\xbf\xa4\xf5\x9f\x43\x5a\xed\x91\xb3\x0e\x6f\x15\x7b\x09\x8e\x9f\xb2\x37\x02\xb5\xd2\x2f\xbd\xeb\x64\x3b\x24\xa9\xb8\xdb\x6d\x11\x55\x5f\x1b\x06\x62\x05\x87\x9d\x82\xab\xac\xc7\xa3\xd1\x4c\x6f\x2d\x78\xf0\x20\x60\xb6\xbd\xca\xb8\xc7\xf2\xbd\xd9\x27\x39\xe1\x40\xa5\x6d\x5e\xb8\x0d\xd0\x7c\x4f\x25\xcd\x72\x72\x71\x7c\xe9\xdd\xec\x83\xf0\xf1\x97\x82\x41\xc4\x26\x41\x7b\x93\x31\xee\xd6\x8d\xf9\x31\x84\x3b\x5b\x12\xe0\x5f\x2a\xe4\x8d\xa7\x83\x27\x51\x7d\xea\xe0\x06\x08\x65\xb3\xc3\x11\xc3\x6d\x07\x70\xc7\xe1\x0f\xf0\x0d\xf4\x8d\x52\xd6\xd7\x54\xbc\xf5\x3a\x9b\x9f\xb1\x7b\x52\x67\x79\xdd\xd6\x1f\xdf\xf2\x4a\xf3\x0c\x18\x62\x21\x85\x35\xb6\x3d\x40\xf1\x02\xd3\x95\x07\xfd\x20\xda\x93\x30\x71\xb1\x33\x73\xcd\x1b\x48\x93\x46\x2c\x1d\x7b\x35\xeb\x11\x2a\x1b\x9e\x29\x65\x8a\xa9\xdb\xa4\x0c\x82\xc0\x26\x8e\xfc\x24\x9b\xc7\x3f\x3d\xda\xc7\xd5\x1e\xe8\x8e\xf6\xa8\xa1\x88\x72\xb8\x21\xed\x12\x0c\xdd\xe9\x6a\x5d\x96\xcc\x16\x8b\x25\x41\x84\x4c\x1d\x3a\x94\xee\x9f\xa5\x70\x98\x3f\x87\xc0\x3f\x31\xb1\x8d\xbc\x46\x49\x04\xb7\x72\xed\x22\x33\x06\xe3\xa1\x22\x1d\x16\x59\x4f\x44\x06\x83\x9d\x87\xa1\xb2\x4e\xc8\x50\xb4\x7a\x9e\x0a\xe9\x28\xe6\xe7\x27\xa0\x10\xec\xca\x1e\x42\xcf\x21\xb7\x77\x4f\xc2\x10\xc9\x21\x35\x68\xbe\xdc\x8f\x47\x9b\xe4\x29\xdc\xdb\xfe\xf9\xd4\xd1\x2d\x39\x25\xb7\x89\x34\x18\x56\xfe\x82\x16\xc3\xa4\xd7\x8e\x2a\xd2\xa1\x0a\xce\xe8\x97\x4f\x43\xed\x88\x82\x39\xc3\x63\xaf\x43\x96\x77\xea\xcd\x2d\xbc\x19\xf8\xb5\xc6\x5d\x95\xac\x43\x07\x73\xa2\x8a\xab\x5b\xfb\x33\xb4\xa9\x5f\xc0\xf3\x4e\xa6\x3f\x1f\x71\x53\xeb\x16\xdd\x27\xf8\x34\xc4\x6f\x83\x4b\x00\x9d\xd8\x81\xcf\x07\x1d\x80\xa5\x8d\xf7\xfb\x28\x81\xa0\x7c\x77\x27\x59\x97\xdd\x92\x8b\x4b\xf8\x51\xa0\x61\x71\x31\x4f\xf1\x2c\x6f\xee\x55\x28\x87\xc7\xa8\x5f\xe8\x63\xd4\xc3\xc9\x61\x33\xaa\xa9\x7a\x51\x03\xfb\x37\xc9\xfb\xd7\x43\xf4\x28\xe6\x0f\xac\xcf\x49\x61\x64\xc6\xd6\x45\x6b\x74\x82\x97\xe6\x9c\xf5\xfc\x5d\x74\xf3\x84\x57\xbd\x84\xf9\xf5\x5e\x59\xac\xeb\xd6\xbb\x7f\xc2\xeb\xe0\x97\xc6\xf6\x7a\xb8\x3b\x28\xbc\x1e\x7e\x79\x6c\xaf\x87\x7f\x0f\x85\xd7\x27\x2c\x91\x45\x32\x9d\x12\xd7\x5b\x5f\x98\xff\x14\xb9\xe9\x90\x8b\x49\x99\x78\x4d\x9b\x4c\x60\x30\xe0\xe9\xe2\xb0\x35\xc8\x19\x95\x8d\xf3\x92\x08\xf2\x6a\xc8\x25\x7b\x78\x20\x82\x7c\x6b\xdf\xc6\x19\xd7\x64\x96\x03\x69\x61\x9a\x06\x96\x30\xe1\x42\x4f\xca\xd4\x1e\xb0\x8f\xdb\xc4\xa0\x27\x02\xa6\x7d\x8f\xff\x7d\xde\x47\x4d\x1d\xe3\xfb\x4c\x8f\x9a\x7a\x1c\x17\xc9\xfb\xd7\x52\x4c\x34\x30\x06\xf8\xa8\x2c\x9b\xff\x17\x7c\x3c\xfc\x03\x2c\x43\x8a\xa4\x18\xf6\x93\xfd\x95\x9a\xff\x06\x86\x89\xad\x1c\xea\xcf\xf3\xf3\xb0\x0c\xaa\x99\x78\x41\x6e\xa2\x48\x9c\x29\x20\xd5\x97\x78\xea\xa0\x82\x2e\x22\xed\xa2\x5b\xf6\xbc\xf2\x07\x2e\xe6\x91\x85\xa5\x9e\xf4\xe2\x77\xe1\x56\x0e\x41\x09\x57\x41\x9c\x56\xe1\xf8\xbb\x3e\x9d\x29\x5e\x5c\x0b\x3a\x9f\xb7\xac\xeb\xa0\x32\xd7\x85\x1d\x1e\x9f\x19\x1d\x9c\xc1\x4f\xfd\x79\x31\x41\x3d\xd5\x53\xf7\x13\x11\x18\x46\x01\xfd\x97\xb8\x7f\xc6\x33\x67\x7b\x41\x22\x04\x04\x83\xe9\xde\x41\xc4\x08\xc7\x1e\x12\xe1\x4f\x76\xe2\x6f\xc8\x2b\xc2\xf1\xc3\xb7\x5b\x9d\xf9\x88\xb4\xe8\xd8\x27\x22\x51\x57\xf5\x5a\xcc\x5d\xe5\xa3\xef\xa3\x9f\x97\x19\xf8\xee\x27\x37\x97\xf9\x33\x9d\x71\x73\x15\x86\x92\x90\x47\xef\xcc\x76\x72\x1a\x03\xbf\xf8\x94\x90\x8d\x01\xcc\x9f\xf1\x1b\x50\xdd\xfa\xaa\xd3\xb8\x75\x05\x51\x8b\x23\x2e\x83\x18\x58\x48\x5f\xc2\x4a\x2a\xc8\xf2\x5f\x8b\xe9\x9f\x70\x31\x3d\x5b\x36\xbf\x7c\x8a\x70\x2e\xc9\x2b\x72\x83\x1f\x9e\x22\xa5\x5f\xfe\x23\xc5\xb4\x20\xcb\xdd\x92\xfa\xba\xaa\x3b\x7d\x9a\xd8\xee\xc4\xca\xf9\xf5\x76\x66\xdf\x3f\xeb\xdf\x62\xa3\xfa\x87\x6e\xbc\x29\x31\xeb\x98\x9a\xee\xe0\x01\x08\x7c\xfd\x89\x47\x20\x66\xd7\x54\xb4\x6c\xb6\xe9\x5f\x82\x5d\x10\x71\x05\x01\xb4\xf4\xb5\xbf\x19\x0e\xcb\xe6\x05\x69\xf1\x8c\x82\xf9\x91\x52\xb5\x90\xea\x15\xde\xba\x72\x71\xe9\x9f\xf7\xbc\xbf\x4f\xfc\x66\xe4\x75\xfe\x88\x95\xc6\xe2\x0a\x3d\x4b\xe8\x6b\x0f\xc3\xc2\xd7\x22\x38\x36\x7a\xaf\x6b\x6e\x10\x83\x5f\x18\x8c\xe4\x13\x09\x3b\xe5\x06\xea\xde\x1e\xb1\x4d\x75\x44\xf7\xd0\xd8\x33\xa7\xa7\xe4\xc8\xcf\xb9\x83\x6b\x58\xb8\x13\xf0\x23\x45\x9c\x60\x08\x07\xe4\x28\x6d\x2b\x78\x17\x1b\xa3\xa5\xa0\x41\xd8\xa1\xf3\xe0\x4c\x79\xfc\xfe\xa8\xff\xcb\x95\xd7\x54\x74\x40\x8b\x3e\x8f\xfa\xac\xb1\x7c\x73\xe1\xcf\xe7\xb1\x63\xc0\x87\x0e\x4d\xc6\x7f\x3a\x9e\x0d\x1e\xd5\x6f\x11\x4e\xa6\xff\x76\xe4\xe2\xb2\x5d\x0b\xc9\x57\xec\x1d\x3c\x80\x0b\xe0\xeb\x8e\x09\xfc\x69\x3a\xc5\x8c\xf3\xbf\x25\x44\x59\xd7\xd0\xf6\x7f\x47\xca\x00\xf6\x8a\x98\x3b\xaf\xaa\xd6\x0c\xeb\x45\x53\x70\xe0\xef\x79\x9b\x75\x53\x38\x7f\x67\x23\x2a\xfa\x8d\x17\x3c\x80\xf1\xb1\x1c\x37\xa4\x67\xd8\xe5\x17\x36\xdb\x60\xfb\xeb\x44\xcd\xb5\x1f\x71\xd6\x75\x4c\xbd\xeb\x4b\xa6\xb3\x6b\x73\x21\x70\xf4\xea\xd0\x14\xc6\xcf\xae\x93\xf7\xeb\x41\x57\x9b\x4c\x1f\x42\x78\x76\x1d\xa1\xfc\x8e\x89\xf9\x53\x51\x4e\x5d\x53\xf9\x0f\x9c\xc8\xe0\x55\x82\xdd\x34\x71\x6f\xf9\xce\x89\xc3\x32\x75\x17\x4a\xec\x5e\x03\xb3\x94\xba\x39\xb4\x51\x61\x5e\x7a\x22\x64\x04\xec\x62\x76\x89\xc2\x04\xbf\x4c\x68\x64\x42\xaf\x93\xad\x3a\x2c\xf5\x33\xf8\x1e\xd0\x27\x29\x34\xfb\x03\xbe\xc3\xea\xcc\x5b\xa0\x33\xa3\x61\xcd\x22\xfd\x9e\xb1\xe6\x87\xbf\xaf\x69\x95\xd1\xa3\x82\xd0\xe3\xf0\x17\x2e\x8d\x1e\xe3\x47\x69\x97\x96\xaa\x59\xf0\xe3\x81\x97\xc7\xfa\x5c\xd7\x11\xdc\xa1\x7b\xec\x6b\x0e\xbc\x00\xe5\xd1\x7b\x2f\x78\x05\x09\xbb\x63\xff\xcb\xd1\xc0\x89\x77\x7e\x9c\x7a\xb1\x4d\x33\xcd\x19\x6b\xd0\x3c\x52\x93\xfd\x6b\x97\x19\x6b\x9f\x1e\xe5\x85\x35\xfd\xe9\xb1\x3e\x91\x60\xe9\xd3\xeb\xb7\x39\x2a\xc8\xe6\xd8\xdc\x60\xb5\xe1\x1d\x97\x6c\xae\xf4\xfb\xf1\x65\xbc\x53\x5b\xea\x95\xe4\xc5\xe6\x08\x8e\xf0\x54\x7c\x8e\xe1\x99\x17\x9b\x63\xef\x81\x87\x79\xd8\x72\x6f\x2f\x6c\x69\x6f\x1f\x38\xd2\x27\x6a\x14\x35\x36\xc7\xe6\x4b\x92\x02\x41\xf3\xe1\x72\xf1\x28\xa3\xeb\xb5\x2a\x54\x7f\x6b\x1c\x29\x10\x5b\xdb\x1e\xfb\xf1\x54\xef\x24\xf6\xe6\x28\xbe\xa5\x46\xa7\x82\xdc\x0f\x37\x16\xd1\x2d\x33\x1f\xf4\x55\xfd\x4e\xab\x1b\x82\x9b\x12\xa3\xcd\x11\x06\x68\x4f\xb1\xe1\xc5\xe1\x25\x9c\x45\x3e\x0e\x9f\x1e\x5d\x92\xe0\xb2\x19\x14\x3f\x77\x20\xde\x40\xb5\x1b\xa9\x7e\x50\x90\x1e\x5b\xef\x71\xc4\x42\x8f\xf1\xf8\xc4\x39\x06\x39\x8f\x23\xff\xe6\x09\xf7\x13\x35\xf8\xca\xe4\x43\x90\xb1\x41\x76\x24\x79\x57\x8e\xee\xe6\xe7\x0b\x3d\x16\xec\x98\x37\x6d\x89\x50\x8e\xc7\x91\x39\xc8\x81\x01\x29\x1c\x1b\xd3\x7a\x7e\x5e\xc6\x0c\xfc\x98\x38\x08\x26\xa2\xab\x7f\x12\x2b\xc7\x66\xf5\x81\x7a\xde\x17\xa4\xf6\x8e\x1b\x81\xc2\x49\xf4\xf3\x14\x21\xf9\x1e\x1e\x7a\xe4\x33\xd9\x24\xd7\x08\x45\x45\x7f\x0b\x47\x49\xa1\x6f\x2e\x10\xdd\x1c\xbb\x8f\x1a\xf5\xf0\x20\xc1\x1f\x82\xe1\x5f\xe9\x6b\xd9\xe3\x6e\x58\xfa\x44\xd2\x9b\x7b\x98\x60\x64\xef\xcb\xa7\x92\x5e\xe7\x46\x77\xca\x6c\x42\x72\x9e\x20\xb0\xa1\xbc\x1a\x51\x85\x5f\xbf\x00\x72\xbc\xa1\xcd\xdf\xd8\x9d\xbd\x46\x52\x59\x83\xea\x65\xfe\x64\xc9\x35\xbf\xda\x81\x5a\x05\x00\x9b\xfa\x40\xd8\xeb\x70\x0c\x14\xd1\xa5\xb6\x84\x2a\xd8\xe8\x36\xc7\xf1\x1b\xd0\xef\xb4\xea\x69\x78\x5a\x1d\x47\x8f\xfa\x8c\xa1\xd5\x11\x18\x29\xc7\x7f\x80\x15\x71\x15\xc3\xa0\x7c\x6f\xaf\x15\x18\x64\x49\xe0\xc5\xa7\x8b\xd2\xd5\x1a\x3c\xeb\x60\x56\x4f\x49\x05\xaa\x4d\x54\xe7\x02\x9f\xd2\xfa\xd8\x65\x0e\x9d\x8b\xf6\x7f\x03\x00\x00\xff\xff\x2b\xd6\x5e\x18\x0b\x9b\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xec\x7d\x7f\x73\xdc\x36\xb2\xe0\xdf\x33\x9f\x02\x9e\xda\xd2\x92\x36\x43\x59\xca\xbe\x54\x4e\x89\x52\xb5\xeb\x24\x7b\xda\x5d\xdb\xa9\x38\xce\x55\x9d\x9e\xca\x0f\xe2\x80\x33\xf0\x70\x40\x2e\x89\x19\x69\x56\xd6\x77\xbf\x42\x77\xe3\x17\xc9\x19\xc9\x76\xf6\xde\xd6\xab\xcd\x1f\xb1\x86\x04\x1a\x8d\xee\x46\xa3\x7f\x01\x3c\x3e\x66\xcf\xae\x37\xb2\x9a\xb3\xf7\xdd\x74\xda\xf0\x62\xc5\x17\x82\xb5\xa2\xac\x44\xa1\xa7\x53\xb9\x6e\xea\x56\xb3\x64\x3a\x99\x89\xb6\xad\xdb\x6e\x36\x9d\xcc\x3a\xdd\x16\xb5\xda\x9a\x3f\x37\xaa\xe3\xa5\x98\x4d\xa7\x93\xd9\x42\xea\xe5\xe6\x3a\x2f\xea\xf5\xf1\xa2\x6e\x96\xa2\x7d\xdf\xf9\x3f\xde\x77\xb3\x69\x3a\x9d\x6e\x79\xcb\xa4\x92\x5a\xf2\x4a\xfe\x43\xcc\xd9\x39\x2b\x79\xd5\x89\xe9\xb4\xdc\xa8\x02\xde\x24\x29\xbb\x9b\x4e\x8e\x8f\x19\xdf\xd6\x72\xce\xe6\x82\xcf\x59\x51\xcf\x05\x13\x95\x5c\x4b\xc5\xb5\xac\xd5\x74\xb2\xe9\xc4\x9c\x9d\x9d\x33\xd3\x2d\x91\x4c\x2a\x2d\xda\x92\x17\xe2\xee\x3e\x65\x77\xf7\xf8\x3e\x69\xf5\xae\x31\x4f\xe8\xe7\x46\x15\xf5\x7a\x5d\xab\x5f\xa2\xa7\x6b\xa1\x97\xf5\xdc\xff\xe6\x6d\xcb\x77\x71\x93\x62\xc9\x7b\x9d\xcc\xb0\xf1\x13\x87\x41\x0f\x3a\x6f\xe2\x07\x8d\x6e\xe3\x07\x5d\x25\xfb\x9d\x3a\xdd\x6e\x0a\xdd\x83\xdf\xc7\x13\x1b\xfd\x28\x45\x05\x0f\xa7\x93\x98\xac\xba\xdd\x88\xe9\x64\x23\x95\xfe\xda\x00\x62\xe7\xcc\xfc\xf3\xba\x4c\xe0\x51\xf2\x3c\x4d\xf3\xe4\x29\x10\x28\x65\xc7\xc7\xac\x13\x9a\x95\x75\xcb\x5a\xc1\xab\xe9\x3d\xb1\xe3\x7d\x67\xfa\x24\x7a\xd7\x40\xe7\x94\x3d\x7d\xdf\xe5\xaf\xaf\xdf\x8b\x42\x1b\x1e\xb5\x42\x6f\x5a\xc5\xde\x77\xf9\x85\x99\xbc\xe2\x15\xbe\x33\x1d\xd2\xfc\xcf\x42\x27\x33\x84\x30\x4b\x1d\x48\x92\x2b\x07\xd7\x43\x4c\x19\xa2\x63\x20\xcb\x92\xe9\x5d\x83\x20\x82\x1e\xb3\x94\x9d\x9f\x9b\xf1\xde\xaa\xb9\x28\xa5\x12\x73\xd3\x78\xd2\x6a\x23\x09\x47\xc8\xed\xe9\x64\x32\xe9\xe4\x3f\xc4\x19\x33\x13\x6d\x74\x9b\x38\x48\xe6\xf1\x2c\x35\xc8\x26\x69\x9a\x99\x86\x2b\xa9\xe6\xd8\xf0\x6b\xdf\xcc\x3c\x8c\x9b\x75\xba\x3d\x63\x4c\x89\x9b\x57\x7c\x2d\x5e\x97\x65\x42\x7f\x22\xd3\x15\xaf\xde\x44\xc3\xe8\x56\xaa\xc5\x2c\x4d\x33\x36\x9b\x65\x7e\x22\xe2\xd6\xac\x24\x61\x60\xff\xa9\xae\xab\x24\x45\xe8\xf7\xd3\xc9\x64\x48\xc2\x56\xa7\xf9\x9b\x80\x82\x00\x27\x9d\x4e\x26\x06\xdc\x9b\x3e\x5d\x32\x36\x0a\xc1\x48\xc5\x04\xe5\xe6\x8d\x00\x22\xbd\xef\xf2\x3f\x57\xf5\x35\xaf\xf2\x17\xbc\xaa\x92\xd9\xef\xdc\x5b\x3f\x82\x2c\x99\x7b\x9a\xff\x4d\xa8\x85\x5e\x26\x29\x7b\x72\xce\x9e\xb3\x0f\x1f\xfc\x74\x14\x5f\x07\x73\x01\x46\x4c\x5a\x9d\xeb\xb2\xe2\x0b\xf6\xe1\x9c\xc1\x1f\x6f\x69\xc9\x99\x97\x21\x53\xc7\x3a\x0f\x7b\x1b\x1a\xcf\xcd\x2b\x43\xa3\x89\x51\x1d\x34\xe9\x97\x80\x5f\xc7\x2e\xaf\x10\x53\xf3\xda\x48\xaf\x34\x73\x7c\xfe\x0d\x93\xec\xdb\x91\x39\x7c\xc3\xe4\xb3\x67\xec\xce\x88\xfb\x0f\xc4\x0b\x6a\xd5\xb1\x52\xb6\x9d\xce\x01\x8d\xb5\x01\xe2\x7b\x5f\xa8\xb9\xb8\x4d\x64\x0a\xef\x2c\x0f\x4d\x93\x90\xf9\x6b\x9c\x56\xb3\x32\x7c\x37\x42\x3a\x9b\x41\x7b\x59\xb2\x27\xae\x0f\xce\x72\x52\xd4\x4a\x4b\x65\x56\xa7\x9d\xd9\xa4\x37\xad\x73\xc6\x9b\x46\xa8\x79\x12\x3f\xcf\x08\x2b\x82\x63\x68\x78\xf6\x90\x54\xae\x3d\xbd\x9d\x44\x5a\x84\x48\xba\x27\x93\xb5\xde\x35\x00\x09\x55\x44\x99\x84\xab\x94\x20\xe8\x5d\x33\x4b\x6d\x8f\xfb\xd4\x71\xe5\xb6\xa8\x37\x0a\x64\xcb\x2c\xa3\x93\xaf\x92\x4a\xa8\x1e\xde\x69\xfa\xd1\xfc\x79\xab\x44\x9f\x43\x9d\x28\x6a\x35\xff\xa7\xb0\xe8\x7f\x36\x87\x36\xa8\x1e\xa3\xdd\x0f\xda\x34\xab\xc5\x4f\x5c\x2f\x3f\x42\xb5\x21\xf1\x10\x47\xd8\xb7\xed\x70\x6b\x90\x82\x33\xc6\xac\x14\x0c\xb9\x4b\x2d\x6f\x5d\x4b\xfc\x0b\x9f\xbe\x23\x2e\x9f\xf5\x56\x78\xe6\x67\x11\xa0\xff\x92\x37\x97\xad\xbe\x62\xe7\x6c\xa3\xcd\xbb\xa1\xf2\xdb\xec\x53\x9f\xf7\x46\x25\x76\x37\x52\x17\x4b\xd6\xea\xfc\xaf\x52\xcd\x49\xff\x14\xbc\x13\xec\x8f\x66\xf3\x3f\x03\x9d\x2f\xb4\x79\x09\x04\x6e\x75\xc6\x8e\xbc\x5d\x80\x62\x56\x89\xf5\x59\x7f\x3b\x23\x45\x5f\x89\xf5\xcc\xce\xb7\x12\xea\x8c\x0d\xf7\xa2\x4a\xa8\x78\x8f\x01\x86\x01\x0e\x2f\x96\x5c\x01\x0a\x73\xd9\x1a\xce\xfd\xa9\xd6\xcb\xef\x65\xdb\x57\xa1\x9d\x50\xf3\xd7\xaa\xda\xf5\xb5\xa8\xe9\x75\xce\xde\x08\x35\xa7\x4e\xf7\xfd\x9e\xad\x28\xb6\xfb\x7b\xfe\x2c\x8a\x6d\xd8\x73\x40\x08\x67\x0d\x7d\x14\x1d\xe6\xb2\x0d\xe8\x30\x97\x6d\x7f\xda\x3f\x6e\x54\x01\xd3\x6e\x78\xcb\xd7\x9d\x99\xb9\x97\x3b\x78\x34\x03\x99\x96\x0a\x16\x3f\x5f\x89\xe4\xf2\x0a\x4d\x86\x8c\x61\x03\x2f\x6b\x91\xc2\x69\xb9\x5a\x08\x26\x15\x4d\x53\xaa\x4b\x69\x64\x27\xc4\x99\xfa\x5b\x45\xe2\x17\x4f\x2b\xba\x4d\xa5\x63\x6c\xe8\x19\xa2\x53\xe3\xf2\xea\xe1\x43\x4d\x0e\x22\x64\x7a\x22\x46\xf5\x46\x0f\x51\xb2\x20\x86\x38\xd5\x1b\xfd\xa2\xa7\x74\x47\xc7\x0b\x79\xbe\xe5\xad\xe4\x73\x59\xf4\x79\xee\x60\x7d\x38\x67\x27\xec\xdb\x6f\xd9\xc9\x7f\xec\xe7\xbc\xb3\x7a\x69\xbb\xde\x35\xc2\x2c\x64\x63\xb8\x65\x44\xda\x17\xb4\xba\x09\xaf\x3e\x5f\xb2\x68\xd0\x33\x66\xff\x22\x2d\x20\x15\xc0\x63\x4c\x2a\x7a\x52\x6f\x34\x3e\xaa\x37\xba\x27\x30\x17\xd6\xe2\x06\xa9\xb1\xdb\x44\xc8\x28\x7a\x46\x72\x13\xb4\x20\x6e\xd1\x23\xab\xb5\x1f\x90\x1f\xdb\xff\xae\xbf\x05\x75\xf1\x06\x64\x1b\x22\x4b\xe5\x6f\xb3\x23\x3c\xb0\x93\xb9\x8d\x02\xf6\x89\x8f\xda\x28\xf6\xb3\x3b\x76\x69\x62\x9e\x3b\x96\xbb\x4d\xe4\x23\x37\x0e\xda\x37\xac\xda\xb7\x44\xeb\xf1\xf8\x25\x6f\xc6\xb5\xb1\xf5\xab\x00\xca\x4a\xec\xce\xd8\xb8\x0e\x5a\x89\x9d\x23\xce\x23\x55\x95\x1f\xfd\x27\xdd\x8e\x8f\x6e\x9d\xb8\x4f\x03\xfb\xc6\x78\x7c\xe3\x80\xbd\x33\xf8\x89\xa0\xc1\x29\x04\xd8\xa5\xf1\x0c\xe3\xf5\x80\x8f\x70\x39\x10\xd0\x1f\x5d\x2b\x5a\x13\x81\x5b\x99\x31\xec\x70\x70\x59\xc4\x70\x10\xed\x12\x3c\x73\xec\x1b\x2d\x8d\xba\x2c\x3b\xa1\x7f\x58\x5f\xa3\x79\x66\x77\x03\x99\x82\xe6\xb1\xe6\x58\x49\x33\x34\xcd\xe6\x43\x37\x21\x82\x62\xd4\xd6\xd0\x4c\x43\x6c\x70\x01\x86\x7e\x72\xb8\x08\xe9\xbf\x31\xb1\x2d\x7b\x0b\x70\xe4\x9d\xe6\x28\xd0\xe5\x3e\xdf\x2e\x5a\x8f\xf4\x5f\xc8\xc8\x32\x5c\x8b\xd9\x60\x62\x67\x2c\xf8\xf1\xe0\x4a\x0d\x02\x06\x9f\xbb\x4c\x4d\xab\xd1\xa5\x8a\xfc\xf4\xeb\x0c\x69\xec\xe5\xef\x7e\x0a\xc6\x15\x05\x05\x6c\x6c\x21\xc1\xf8\x50\xfe\x53\x0d\x03\x26\xe3\x6e\x7d\xfe\x16\x5a\x19\x97\xd8\x45\x0a\xe2\x49\x32\xbb\xb3\xae\xe8\x59\x2f\xe4\x33\x3d\xe4\x43\xdb\x3e\xa3\x7e\xb2\x7d\x69\xa4\xfb\xc0\x5b\x72\xba\xf5\x41\x77\xfb\x7e\x3a\x85\x10\x46\x68\xac\x92\x00\x1a\x14\x89\xbc\x4c\xa1\xf2\x9f\x92\xd9\x6c\x77\xcb\xa9\x75\xa6\xdc\xef\x75\x5d\x96\x8c\x8c\xea\x2f\x4f\xa7\x53\x67\x27\x7b\xcf\xd7\x92\x2b\xd1\xec\x69\x38\x6c\x6a\x37\xa7\x24\x75\x8d\x83\xa0\x8d\xce\x2d\xa8\x03\x10\xac\x54\xbf\x7c\x1c\xa4\xcb\x33\x9d\x93\x79\x6f\xff\xb8\x32\xd0\x8d\xe3\xde\x33\xdf\x19\xe9\x9b\x35\x6f\x2e\x91\xb3\x57\xf1\xd8\x01\x4e\x14\xa4\xb2\xaf\x93\x34\x46\x33\x40\xa5\xef\x23\xe0\xf0\xc0\x11\x6b\xba\x04\xdc\xc0\x68\x13\x63\xec\xbf\x48\x16\xcf\x66\xa6\xd5\xec\xbf\xa6\xd6\x8e\xf1\x8c\x70\x66\x12\x3d\x98\x1a\x5b\x85\x31\x6b\xf0\x4d\xc1\x50\xf1\x3f\x43\x92\xda\x91\x53\x26\x15\x50\xd0\x87\xb9\x3c\x05\xa5\xda\xd3\xa7\xde\xe8\xbd\x9d\xea\x8d\x76\xf3\x33\x22\x15\xcc\xed\x7a\xa7\x45\xc7\x9e\x9a\x7f\xa2\x26\xdf\x73\xcd\x83\x66\xd0\xcb\xfc\x87\x31\xab\xe9\x44\xf3\x05\x8b\x1e\x38\xd7\xf8\xba\xae\x2b\xcb\x4c\xd3\xad\xcf\x44\x33\xd4\xd5\x53\x3b\x86\xe3\x9f\x82\xc6\x29\xfc\x3f\x49\x59\xd2\x11\xe4\x94\xdd\x31\x9a\x09\x41\xbb\x54\x39\x60\x7d\x95\x03\x56\xf7\x3d\x00\x9a\x2f\xe2\xfe\x07\x00\x98\x59\xf4\xfb\xd3\xda\x4b\x52\x02\x10\xf4\x9f\xcd\x06\xad\x65\x67\x23\x44\x49\x0a\x53\x3f\x30\x9a\x23\x91\xe5\xa0\x55\xb1\x2a\x33\x58\xd3\x78\xde\xa9\x07\x78\x48\x11\x60\x95\xd9\x09\x95\xb8\x49\x0c\xb8\x14\x79\x62\xe0\x5f\x9b\xcd\xeb\xc8\x12\xd4\xe8\x75\xbf\x6f\x81\x75\xac\xf9\x82\xb6\x16\xcd\x17\xe6\x81\x1d\xe0\xcc\x0d\x95\x19\x9d\x3c\x09\x10\x37\x60\x00\xed\x33\x76\x0d\x2f\x03\x8e\xbe\x2e\xcb\xbf\xc9\xce\x48\xb1\xf9\x35\x5c\x80\xd4\x26\x31\x3a\x89\xfe\xf6\xb3\x08\xc6\x20\x38\x97\x52\x69\xd3\x36\xbd\x9a\xf6\x08\x03\x76\x6f\x20\x17\xaf\xcb\x12\x82\xbe\x86\x10\x95\x50\x49\x00\x84\xe8\x61\x51\x73\x61\x97\xe0\x61\xc6\x54\xda\x1f\xdf\xd8\x1b\x34\x33\x8d\x76\x30\xcd\x8c\xd6\xe7\x60\x6e\xd4\x0a\xe6\x46\x7f\x87\xf1\x68\xbb\xe6\x3c\xac\xf1\xd9\x59\xa3\x7b\x00\x38\x9a\x5f\x00\x26\x9d\x4e\x42\x04\xdd\xfc\x82\x87\x19\xd3\x69\x1f\x03\x9a\xdf\xf1\x31\xe3\xf3\xf9\xcf\xa8\xbd\xcc\x28\x7c\x3e\xef\x18\x67\x0d\x6e\xb6\x4c\xd7\x4c\x2f\x9d\x89\x26\x6b\xc5\xaa\xba\x5e\x6d\x1a\xb6\xe6\x8d\xf1\x87\xe1\xe5\x46\x69\xb9\x16\xb9\x01\x76\xa1\x49\xc8\x0d\x10\x25\x6e\xd8\xc5\xf7\x4c\x2f\xb9\x66\x05\x57\xec\x5a\x30\x48\xba\x70\xf3\xd2\x4e\xab\x6e\x99\x16\xb7\x66\xec\x8c\x71\x35\x67\x37\xb2\xaa\x0c\xa4\x6b\x33\x6a\x57\x57\x5b\x31\x67\x45\xdd\xb6\xa2\xd0\xd5\x2e\x67\x17\xeb\xa6\x12\x6b\xa1\xcc\x2a\x88\xc7\x67\x94\x78\xca\x91\x96\xd1\xb4\x92\x46\x9b\x0d\x24\xb4\x23\x8c\x32\xd5\x5f\x9e\x7e\x16\x59\x9d\x89\xd2\xe8\x36\xf5\x24\x06\xc0\x44\x60\x4a\x4a\x79\x4b\xa9\xd3\xed\xeb\xeb\xf7\x51\xd6\x82\xd4\xc9\xdd\x14\x02\xd4\x05\x69\xd7\x3b\xf3\xaf\x7d\x77\x3f\x66\x59\x14\x64\x52\x74\xba\x9d\x65\x0c\x01\x43\x2a\x66\x21\xb4\xed\x78\x23\xf5\xd2\x6c\x2c\x16\x05\xf9\x0f\x50\xca\x84\x69\x91\x77\xba\xf5\x68\x76\xff\xa7\x35\xd3\x9c\x07\xf9\x1a\xd4\x5c\x41\xa6\xc6\xfa\x10\x94\x9e\xb9\xc1\x1e\xce\x6a\x75\xc0\x8a\xba\xd9\xa1\x2f\x91\xcc\x0d\xad\xba\xb6\x08\x26\x0d\xd1\x34\x1a\xe2\x6e\x1a\x78\x1a\x83\x01\xbc\xc7\xd1\x0f\xff\xf6\x5c\x0b\x8a\xfd\x4e\x27\x93\xa6\xad\x9b\x11\xff\x81\x0c\xd4\xb6\x6e\x66\x69\xfe\x06\xc8\x93\x18\xb3\x73\xde\x69\xa0\xa3\x79\x03\x78\x42\x43\xf3\xcb\xf0\xf4\xde\xcd\xc8\xec\x54\xbf\xf2\x6a\x23\x12\x0d\x98\x67\x6c\x1b\xcd\xa8\xac\x58\x59\xf1\x45\xca\xa0\x11\xda\x07\xe0\x3c\xe5\xd6\xec\xc0\xb4\x94\x0d\x19\x9e\x9f\x63\xb0\x10\x72\x22\xc1\x43\xa4\x5a\xff\xe9\x4f\xba\xc5\x54\x15\x32\x02\xc6\xb8\x33\xa6\x7b\xcf\x3c\xde\x7a\x4b\x18\x50\xfa\x00\x48\x25\x16\x54\x7a\x1f\x2a\xf4\xbd\x50\x06\x59\x1e\x25\x6e\xcc\x26\x42\xef\x67\x19\xdb\x66\x96\x57\xad\xce\x8d\x37\x5b\x1b\xdb\xfb\x81\xc1\xe9\xc1\x85\x9a\xcb\xd6\x13\xf6\x25\x5f\x09\xf0\x68\x9d\xdc\x65\x66\x39\x66\xac\x00\x25\xa3\x03\x8a\x52\x40\x8a\xc8\xf2\xe4\x1c\x3d\x61\xe4\x3a\x57\xb2\x70\x5e\x41\xee\x80\xb2\xba\x64\xaa\x56\x5f\x80\x63\x0c\x6a\x67\x06\x6c\x35\xb0\x2a\xa1\xd8\xb7\xec\xf9\xc1\xfe\xc6\xe1\x59\x70\x2d\xb7\x82\x41\xc8\xd5\xf6\x35\xc8\x7d\x44\xdf\x82\x37\xf1\xb8\xdf\x01\x84\xc3\xbd\x5d\x3b\xec\xea\xf8\x16\x88\xe2\xae\xc9\x46\x72\x72\x16\xc4\x2c\x0b\x57\x94\x27\xeb\x98\xff\x01\x89\xf0\x38\x43\xcb\x06\xcb\x3e\xff\xa1\x12\xeb\x24\x4d\x69\xa4\x7f\x88\xb6\x9e\xa5\xec\xde\xf0\xfb\xb9\x5f\xfc\x94\x28\xee\x65\xd5\x7f\xf1\xb9\xd9\x27\x61\xaa\x19\xf2\x35\x98\xab\x87\x02\x01\xc3\x31\x97\x76\xf6\x22\x4f\xe9\xd9\x7b\x4b\x44\x69\x96\x85\x92\x55\xb8\x2c\x94\xac\x42\xf9\x0e\xdd\xe5\xe1\x84\xad\x4a\x28\x6a\x85\x2a\xb7\x6e\x67\x81\xfb\x08\x04\x1e\xce\x22\x94\xc5\x31\x14\x70\x4d\x45\xcb\xcc\xb3\xeb\x53\x10\x1a\xe3\x95\x6d\xf9\xbb\x2d\xaf\x66\x31\xed\x41\xa7\xbc\x2e\x13\x74\x04\xa5\xd2\x19\x13\x95\x58\x93\xb2\xed\xf9\x3b\x3d\x7c\x62\x29\x72\xf9\x0a\x2f\x45\x06\x52\x9a\x31\x80\x1d\x90\xea\xc5\x92\xab\xd7\x65\x32\x97\x2d\xfc\xf9\xbd\x6c\x33\xa6\x3f\x61\x44\x9b\x18\x08\xc4\x36\xcd\x18\x64\x15\x5c\x42\xc2\xfd\xa6\x34\x43\x80\xc6\x8f\x1b\x55\x18\x86\xa9\x8c\xa1\x33\x45\x6a\x9a\x22\xd7\x64\x36\x07\x62\xe8\xde\x1c\x1d\x31\x48\x3b\x4a\x05\xca\x16\xf2\xd4\x52\x5d\xd2\xa3\x2f\x4e\xae\xfa\x2a\x27\x1d\x5b\xb9\x38\xfe\x19\xab\x78\xa7\x19\x6f\x17\x46\x90\xdd\x10\xb8\x87\x6c\x3a\x6d\x4c\x1b\x50\x46\x76\x51\xbf\xef\x2e\xa2\x8c\x44\xb0\xa7\x10\x02\x76\xf7\x33\x5b\x4e\x3f\x1d\x61\x7a\x63\x9c\x8a\x48\xb6\x45\x35\xf3\xbe\x7b\x1d\x27\x16\x7a\x60\xeb\x8d\x1e\x87\x6b\xb3\x0a\x00\x60\x0c\xf2\x63\x38\x69\xfd\x4f\xe0\xe4\x85\x32\xff\x7f\xbd\xd1\x9e\x17\x01\xd7\x5e\xf2\xe6\x75\x99\xac\xc4\x6e\x54\x50\x29\xd3\xb6\x12\xbb\x20\xd5\xe6\xd2\x3d\x99\xe9\x9d\xf9\x78\xe8\x40\x95\x36\x86\x1f\x52\x6d\x79\x25\xe7\x06\x08\x6c\x00\x6c\xc6\x9e\x01\x44\x6b\x05\xc4\xda\xf5\xe0\xc4\x28\x6c\xec\x25\x74\x25\x76\x69\xbc\x3e\x82\xb9\x05\x76\x3c\xed\x91\x43\x9f\xe0\xe0\x70\x14\x27\x0e\x17\x44\x00\x1e\xe6\xfd\xba\x4c\x3e\x65\xad\xb9\x40\xf1\x3e\xd8\xa0\x81\x5e\x97\x09\x19\x67\x97\x57\x6f\x7c\x1c\xd4\x0f\x65\x4c\xd6\x04\xa4\x85\x02\xb8\x6c\xaf\xc4\x21\x20\x88\x01\x97\x9d\xd0\xe8\x79\x9a\xd6\xcd\x25\x5a\xab\x14\x3a\xbe\xbb\x37\xea\x73\xd2\xac\x16\x0d\xd7\xcb\x20\x94\x30\x59\xf2\xee\xcf\x2f\x7e\x6a\xeb\x05\x06\x13\x26\x5e\x7e\x01\xb6\x97\xe1\xd2\x07\x93\x65\x89\xbf\x72\xe3\x38\x62\xae\x03\xc3\xc0\x3d\x59\xb1\xf3\x3d\x23\x58\x46\x46\xa8\x4a\x2d\xbf\xd0\x35\x4f\x64\xca\x9e\xb1\x19\x5b\xf2\x8e\xa9\x9a\x61\x68\x97\xaa\x6f\x60\x47\xeb\x7e\x35\x42\x06\x54\x00\xe7\xdd\x8f\x9a\x7e\xf6\x80\x56\x82\xfb\xa3\xe2\x18\x58\x9e\xe5\x77\xa2\xcf\x9c\x9a\xb5\x91\x60\x90\x32\x63\xa5\xe5\x84\x21\x2f\x3a\x5b\x81\x28\xe0\x3c\x81\xa9\xa0\x6e\xca\x5c\xef\x1a\xc2\x4e\xe7\x2b\xa9\xe6\x47\xe6\x7f\xc4\x37\x28\x02\x02\x1c\x3d\x2f\x6d\xa9\x99\x9b\x94\x1d\xef\x89\x67\x96\x2c\x99\x7d\x1a\xb0\xd0\xc9\xc8\xb9\xeb\x04\xd1\x64\x26\xaa\x4e\xb0\xa0\xcf\x13\xdf\xc0\xf6\x1c\x23\xd1\x99\x15\x1c\xe3\x36\xb1\xb9\x2c\x4b\xd1\x0a\xa5\xd9\x4f\x14\x76\x35\x84\xb3\x60\x0c\xc1\x8c\xc3\x6a\x9e\x59\xd8\x2e\xc3\x7a\x4f\xc1\x16\xe7\x86\x80\x1c\xd0\xf4\x72\x9b\x97\xb0\x09\x89\xe3\x63\xf6\x03\x3d\xc2\xd6\x34\x63\xcf\xdd\x11\x47\x20\xee\xf6\xf4\x29\x20\xf3\x34\x30\x55\x18\x6f\x05\x93\x55\x25\x16\xbc\x72\xb9\x20\x8f\x10\x80\x45\x6b\xce\xa6\x4d\x56\xe6\xad\x69\x45\xc3\x7d\xc3\x56\x76\xc4\x0f\x1f\xf0\x6f\x97\x32\xb5\xa9\x94\xbd\xa2\x46\x23\x33\xae\x6a\xb5\x5b\xd7\x9b\x8e\x84\xcf\x29\xe0\x00\x8d\x40\x0f\xc7\x69\x0a\x54\xfe\x43\x3a\xc0\xe0\x23\x39\xdc\x28\xe9\x36\x31\x5e\xff\xd9\x39\x4b\x9e\x92\x16\x1d\xe4\x12\x4a\x9d\xba\xc9\x53\x3a\xbc\xd1\x6d\xee\x03\xc5\xdf\xc0\xe3\x27\xc1\xd2\x9a\xa0\xdd\xf7\x1d\x7b\x6e\x8c\x86\x8d\xd2\x39\x85\xe0\xbf\xb3\x82\x8d\x9c\xb9\xe8\xba\x8d\x60\x27\xff\xf1\xbf\x4e\xff\x90\xd3\xd3\x98\x54\x67\xcc\x8a\x01\x92\x04\x44\xce\x06\xe7\x55\xad\x99\x0c\x43\x1d\x18\x54\x62\x12\x5f\x41\xad\x19\x92\x05\x73\x71\x36\x7b\x45\xce\x85\x55\xb5\xec\x3b\x76\xe2\x90\xfa\xcc\xe1\x97\xa2\x85\xf1\xd7\x75\x2b\x98\x5e\x72\xc5\x6a\x25\xc6\x70\x80\xff\xcf\x45\xc9\x37\x15\xe6\x11\x03\xea\x96\xfa\x7f\x18\x71\x8f\x8e\x22\x2d\xf7\xbd\x6c\x45\xa1\x2f\x60\x81\x78\x55\xf7\x79\xe8\x99\x1d\xce\x38\xb0\x2e\x26\x67\xd5\x73\x4c\xf1\x7b\x5b\x9b\x24\x4b\xf6\x2e\x63\xf3\x0d\xc6\x40\x3a\xa1\x2f\x8d\x26\xba\xfa\x06\x1e\x1d\xde\x1e\xe6\x9b\xa6\x92\x05\xd7\x22\xd8\x28\x20\xca\x6a\x37\x03\x07\xcd\xa5\x45\x69\xb3\x3e\x3e\x66\xbf\xd4\xc6\xb2\x35\xbe\x8b\xec\xb4\xd1\x9a\x30\xab\x17\xf5\xba\x91\x95\x68\x7f\xdf\xb1\x6b\xb1\xe4\x5b\x59\xb7\xec\x46\x30\x25\xcc\xdc\x6b\xeb\xf6\xdd\x46\xd1\x29\x03\x4d\x2f\x05\xc3\xfc\x29\x6b\xda\xba\x11\xad\xde\xe5\xec\x97\xa5\x60\x95\x54\x82\x5d\x8b\xaa\xbe\x31\x0c\x13\x65\x29\x0a\xe3\x60\x57\x3b\xc6\x95\xd9\x27\x45\xdb\x81\xcf\xaf\x97\x02\x21\x85\xd1\xb7\x14\xcc\x70\x2d\x6b\x95\x83\xcd\x52\x52\x49\x6b\xcf\xbd\xb2\x11\x38\x9b\x13\x81\x10\xdc\x9d\xf9\x05\x89\x4a\x33\x59\x88\x8a\x76\xda\xe0\x60\x6c\x19\xbd\x6c\xeb\xcd\x62\x09\x68\x3b\xb3\x27\x49\xbd\xeb\x98\xb1\x9b\xa5\x2c\xb0\x41\x41\x34\xc1\x60\x27\xc0\xf3\x14\x10\xc0\xf0\x4d\x47\x08\x62\x88\x0f\xa2\x56\x99\xe3\x85\x7b\xee\xb2\xc6\x19\x2b\x21\xeb\x91\x87\x79\x87\xa8\xa9\xde\x35\xde\xd2\xf3\x1a\xb5\xd7\x88\x2f\x66\x99\xd5\xb7\x7c\x11\x8f\x65\xb3\xe9\xb6\xc1\x1f\xad\x66\x4f\x03\xfb\xcf\x3a\x0c\x25\xb8\x0a\xef\xd8\x39\x73\x1b\x3d\x84\x54\x47\x6b\x88\x7d\xf6\x79\x86\x69\x63\x0b\x0d\x43\x66\x43\x7b\xc0\xd5\x30\xdb\x7c\x73\xc6\xfc\x16\x3c\xee\xa2\x40\xf9\x9e\x35\x6e\xff\xaf\x68\xeb\x20\xca\xe9\x23\x76\x7b\xe2\x2b\x3e\x28\x19\xc6\x3d\x22\xbf\x1b\xb7\x96\x77\xaf\xc4\x0d\x96\xa5\xbb\xa4\x63\xb8\xe3\x04\x1e\x4d\x10\xc7\xb2\x1e\x8d\xaf\xbd\x70\xe9\xc8\x5e\x54\xae\x17\x1c\x6d\x74\x3b\x4b\x73\x33\x64\x10\x79\x9b\xf6\x0a\x11\x1f\x86\x15\xce\x29\x84\x13\x28\xf1\x7d\x40\x1e\x0a\x13\xee\x27\x5d\x10\x53\x1a\x09\x1f\xf6\x03\xaf\x17\x4a\x27\x25\x04\x0f\x33\x76\x2d\x75\x07\x01\xa2\xaf\xfe\xe0\xc3\x0c\x8e\x85\x24\x63\x61\xd4\x95\xec\x80\x98\x43\xe9\x21\x4e\x5c\x28\xfd\xb5\x99\xf6\xd3\xc4\x58\x54\x5f\x63\x84\x9f\x41\x39\xf0\xd7\x89\x19\x3f\xf5\x0d\x4f\xbe\xf2\x2d\x4f\xbe\x0a\x9b\x9e\x7c\xd5\x6f\x9b\x99\xff\x7d\x79\xea\x3b\x7c\x79\x1a\x76\xf8\xf2\xb4\xdf\xe1\xab\x3f\xf8\xb6\x5f\xfd\x21\x6c\xfb\xd5\x1f\xa2\xb6\x6f\xa5\x47\x79\x13\xe1\xbc\x19\x20\xfd\x56\x06\x58\x6f\x62\xb4\x37\x43\xbc\xdf\x42\x10\xe9\x2d\xe0\x87\xff\x36\x68\x61\x51\xef\x60\x0e\x9b\xe1\x24\xde\xca\x60\x16\x9b\x78\x1a\x9b\x68\x1e\xfd\xb8\x34\xac\xbd\x46\xb7\x19\x2b\xc3\xc0\xb1\x8b\x2a\x3b\xb6\xa5\x71\x2c\xf9\xc7\x8d\x2a\x82\x50\x72\xa9\xf0\x8c\x0f\x6f\x17\xc6\x8b\x05\xd8\x29\xb3\x05\x8f\xee\xc9\xa1\x28\xb3\x81\x38\x12\xf0\x39\x63\x05\xaf\x2a\xb3\xd9\xd8\x61\x71\xcf\x33\xbb\x35\xfc\xf2\xd1\xe6\xe9\x44\xdb\x42\x2a\x2f\x97\x25\xc9\x6a\xe2\xd3\xf5\x83\x6a\x17\x38\x82\x51\x6e\x49\x6d\xba\xe9\xc1\x8c\xf4\x52\x76\x51\x0a\x82\xb7\x8b\x8d\xb1\x1a\xcc\xac\xc2\x0c\x53\xe8\x15\xdc\xe1\x86\xf3\xa2\x36\x5b\xa5\x66\x2d\xbf\x61\x7f\x79\x13\xf4\x94\x4a\xd7\x96\x28\xb0\x5b\x6d\x3a\xd1\x7e\xd1\x6d\x9a\xa6\x92\xc6\x1a\xa1\xfd\x93\x89\xdb\x46\x14\x1a\xb6\x29\xa0\xac\x8f\x34\x41\xd7\x8c\x99\xd9\xe5\xaf\x36\xeb\x0b\x85\x3b\x51\xaf\xec\x0b\x3a\x81\x39\xc2\xdb\x05\x78\xb0\x60\x1f\xee\x9a\xfc\x42\x25\x32\x0d\xc8\x84\x03\xe0\xc6\xe2\x35\x33\xf5\x0a\x26\x7d\x29\xaf\x40\x23\x93\x1d\x64\x26\x69\xd8\xb3\x7f\x0e\xf9\xd4\x95\xe7\x62\xaa\xc0\x60\xa0\x40\x50\x52\x82\xf0\xab\x68\x65\xb9\xc3\x1c\x26\x0a\xa7\x98\xb3\x2d\xd2\x66\xd7\x88\x0e\x9c\x2c\xb3\x9f\x73\x2d\xaf\x2b\xb2\xe4\xcc\x88\x8e\x4e\x60\xe0\x75\x8d\x28\x64\x69\xc6\xbe\xde\xa1\x09\xc0\xab\x4a\xb4\x39\x9a\x6b\x37\xdc\x2c\xb0\x45\xad\x1d\x09\x5e\x6d\xd6\xaf\x37\x3a\xc1\x88\x7d\x12\xe2\x98\x7e\x03\xcd\x8d\x54\x9a\x0e\x23\xf6\xdc\x19\xb1\x46\x8c\x38\xfa\xa6\x2b\xfa\xfa\xb4\xd2\x60\x2a\x1d\x0e\x3e\x68\xbd\xa8\xd1\x3f\xba\xb7\xdc\xcb\x58\x4b\x22\x4b\x61\x16\x83\x2b\x16\x98\x58\x2f\xfd\x49\x88\xec\xa5\xbc\x02\x23\x23\x49\xf3\x3f\x76\x9d\x5c\x28\x7e\x5d\x89\x5f\x6a\x38\x56\x97\x8e\x3a\xe2\x67\x7b\x83\x13\x21\xc2\x91\xbd\x7e\x90\xfa\x73\x51\x54\xbc\x85\x23\x7f\xb3\x34\x32\x93\x8f\x8f\xd9\xcf\x82\xb7\xb6\x06\x31\xa0\x06\xe3\x45\x51\xb7\x73\x63\xf4\x51\xfe\xdb\x11\xd4\xc1\x85\xc9\xe8\x4d\x2b\x72\x7f\x1a\x20\xe2\x9c\x3f\x11\xf0\xfc\x0c\xab\x25\x7d\x82\x02\x9f\x9f\x84\xcf\x23\xaa\x3d\xbf\xca\x6b\x32\x20\xa7\xb1\x2b\x15\x14\x93\xfb\xbd\x17\x4c\x01\xd8\xee\xc9\x18\x88\x10\xf1\x25\x97\x19\x6b\xc3\xaa\xcb\x40\xee\xa9\xe6\x8f\x4a\xc0\xdf\x08\x4d\x39\xd3\x8c\xb5\x0e\x93\xb0\xa2\x3d\x44\x99\x0a\xf7\xd2\x69\x5f\x7b\x0f\x92\x8a\x65\x2f\x37\xc9\x17\x89\xd1\x65\x81\xf6\x36\x6c\x9d\xaf\xc5\x7a\x5d\x6f\x45\xe2\x2b\xf6\x5c\x02\xb9\x9f\xc2\x1f\x2d\xda\x9b\x77\x3a\x75\x86\x25\x1c\x4b\x1b\x31\xf0\xdb\xc2\xb5\x59\x08\x1d\xa6\x7d\xaa\x9a\xcf\xdf\x14\xbc\xe2\x6d\xd2\xf4\x06\xcc\x98\xb2\x15\xa7\xa9\xfd\xe3\xe0\x31\xc6\x26\x1e\xc4\x4d\x3f\x32\x6d\x8a\x25\x57\x81\xc9\x98\xb1\xce\x38\x01\x90\xf7\x4c\x8a\xe5\xd8\x9c\x0b\xb7\x6f\xd8\x84\xc9\x58\x95\x64\x50\x91\xb0\xd7\x6c\xc3\x24\xd2\x8b\x25\x57\x24\x3a\x64\x95\x99\x11\x72\x4a\xf6\x18\x74\x42\xcb\x2c\xc4\x7d\xcd\x9b\x80\x4f\x2e\x5f\x9b\xac\xc7\xd0\x7e\x14\x32\x48\xb9\x11\xab\xd6\x0e\xbb\x12\xbb\x1f\xeb\x36\x18\x75\x25\x76\x83\xd1\x92\x70\x57\x74\xf5\x62\xd3\xc9\x6a\x3b\xee\xf0\xad\xc4\x0e\x5d\x8d\xd5\x96\x68\x02\x0c\x33\x5a\x76\x70\x58\x74\xb5\x65\xe7\xa6\x5d\xc8\x59\x30\x5e\x56\x61\x01\x43\xfe\x57\xb1\xf3\x79\x52\x44\x7a\x96\xb1\xd5\x36\xac\x3d\x20\x8a\xac\xb6\x19\x5b\x05\x74\x6d\x78\x51\x88\xae\x0b\xe6\xb8\x1e\x9f\xe6\xd0\xb9\x78\x97\x61\x14\xcf\x52\x09\xfa\xa5\xd3\x89\x50\xba\xdd\x8d\xcf\x7d\x8d\xce\xc4\x0a\x09\x80\x0d\x47\x0f\xc9\x8e\xa6\x58\x3f\xda\x23\x80\x01\xe8\x48\x49\xe0\x07\xfc\x04\x3e\x80\xb6\xf9\xe5\x74\x5c\xe2\x1a\x0e\xdb\xc8\x80\x32\x99\x51\xdd\x63\x32\x07\xa4\x1d\x23\xc8\xfb\xee\x57\x5e\x8d\x13\x64\xcb\xab\xb4\xc7\x5d\x41\x95\x1c\x36\x5e\x6a\x08\x35\x52\xb3\x01\x35\x76\xe2\xc6\x41\xc6\x9c\x90\x8e\x5d\x1f\xa3\xff\x7d\x71\x0c\x36\x37\x64\x80\x7f\x84\x46\x67\xda\x80\x80\xa2\xbe\x5f\x39\x92\x3b\x64\xe0\xfe\xf5\x42\xed\xa8\x68\x19\xe5\x2d\x7a\xb6\x9d\xd1\x50\xa3\xb5\xca\x6b\xac\x28\x5a\x11\x97\x22\xca\xcf\x45\x25\x74\xa8\x95\xd7\x03\xed\x38\x26\xa2\x07\x64\x72\x74\xfc\xef\x71\x98\x95\x2f\x85\x5e\xf3\xe6\xc2\x48\xb7\x2f\x3a\x85\xd4\x11\x16\x07\xac\xe1\xf4\x90\x5b\xec\xd3\xc9\x4a\xec\xba\xe8\x81\xc4\xd3\x40\x7a\x0a\x57\x02\x40\x6a\x56\x76\xb0\xab\xc3\xdf\xb8\xbd\xc1\x6f\xa9\x45\xcb\xb5\xd9\x29\xd5\x1c\xa2\x60\x5d\xce\x2e\x4a\x06\x56\x36\x35\x13\xb7\xb2\xd3\x5d\x16\xd9\x18\x5d\x68\x1d\x62\xd8\xe9\xf8\x98\x15\x9b\x16\x52\x07\x86\x26\x75\x4b\x66\x8b\xad\x8d\x0b\x40\x66\xac\x15\x0b\xde\xce\x2b\xd1\x75\x14\xb6\x72\x7d\x2d\x42\x39\xbb\x00\xa4\xaf\x45\xc1\x37\x9d\x08\xdb\xc0\x58\x0e\xf1\xb5\x5c\x2c\x31\xbf\xac\x79\x25\xd8\xdc\x58\x4a\x35\xa0\x00\xdc\x33\x86\x8b\x54\x8c\xb3\xaa\xae\x9b\x7c\x3a\x01\x02\x04\xb4\x72\x59\x4b\x03\x90\x3d\x25\xc2\xa7\xac\x5b\xc9\xe6\xad\xd2\xb2\x82\x0c\x17\x28\x36\xa8\xda\x32\xa4\xd2\xa2\xcd\x25\xfb\x16\xff\x30\xc4\xf7\x07\xbe\x41\x59\xc2\x21\x5a\xf7\x8e\xec\x0a\xe8\x44\x27\xc5\xe1\x07\x9e\x2b\x5a\xf9\x44\xc0\xa8\xe6\x9d\x5c\xb7\x82\xaf\xc8\x20\xa5\x20\x9c\x99\x9c\xec\x18\xaf\x5a\xc1\xe7\x34\x4f\x31\xcf\xd9\xcb\x7a\x2b\x58\x8d\x15\x82\x4a\xdc\x02\x31\xd7\x60\x6f\xc3\xe0\xcf\x9e\xc5\x11\x86\xc6\x3c\x86\xcb\x23\xf6\x0b\xf8\x98\xbe\x1d\xd7\x82\x47\x44\x3a\x63\x04\x8d\x49\xf9\x48\xc9\x8e\x21\xcf\x6c\xbc\x75\x9a\xb1\xe7\x99\xd1\xbb\xf7\x69\x1f\xe3\x95\xd8\x25\x52\x3f\x02\x4f\xe0\x28\x98\x0c\x96\xab\x89\x34\xaa\x66\xcb\x5b\xb6\xda\xc6\x0b\x86\x78\x02\xd2\x11\x44\xe7\x61\xdf\x73\x6f\xa6\x36\xcb\x76\x67\x69\x3a\x22\x25\x01\x87\xa1\x54\x66\x8f\x90\xc4\xc6\xf1\xfd\xc3\x62\xe3\x51\x19\x08\x8e\x33\xed\x8d\x09\x0f\xdc\x5f\x89\xdd\x17\xb8\xfc\x1a\x2e\x5b\x88\xae\x56\xdc\x90\x03\x77\x59\xd1\x39\xa9\x80\x19\x9b\xbd\xfd\xb3\x36\x38\x6b\x42\xac\x06\xbb\x1b\x0c\x62\x2d\x83\x7d\x3b\x9c\x69\x64\x2c\xaf\x7f\xf3\x35\xe6\xeb\x3f\x85\x47\xdb\x7d\x3c\x7a\xc0\x0c\x31\xad\x8c\x56\x19\x63\xd2\x01\xae\x84\x33\x00\xa2\x38\x65\x14\xc0\x36\x1e\xff\x7a\xac\x5a\x39\x76\x35\x1e\xaf\x3e\x1c\x53\x7c\x71\xee\x56\x63\xa6\x2a\xd9\x32\x8a\xd6\x8c\x04\xc3\x8d\x0c\x75\x6d\x81\xa6\xc8\x36\x70\x49\x65\xe9\x9e\xfb\xda\xa0\xdc\x87\xa5\x95\xac\x66\x69\x68\x33\x1e\x88\xa7\xfb\x0e\x19\xdb\xe6\x50\x40\x8b\xf1\x32\x33\xba\x31\xea\x42\x11\xb6\xc5\x40\x36\x94\xe6\xd3\xd4\x2e\x84\x6e\x2b\x81\x3a\x1b\xd0\x09\x07\x33\x36\x12\x62\x4e\x56\x3e\x47\xaf\x39\xb5\x1d\xd0\x48\xfa\x1d\x9e\x9c\x9b\x65\x2c\x6a\x4c\x4f\x07\xad\x2b\x20\x6f\xbf\x35\x3d\x1d\xb4\x2e\x8c\x79\x2f\xf5\xae\xdf\xde\x3d\x87\x1e\x5b\x20\xfa\xc3\x82\x0c\x90\xfb\x46\xb4\xf1\xfd\x6c\xf8\x95\x92\xe1\x14\xd2\x44\xb1\x1e\x37\x5c\xe3\x36\xe6\x25\xf0\xd4\xfe\xc6\x18\x01\xe2\x85\x88\xc3\x03\xbb\x25\xdb\x1b\x56\x2a\x36\x24\x39\x84\x0e\x02\x9b\x77\x6b\x2c\x5d\x84\x91\x05\x43\xa6\xfd\x2d\x7e\x1c\x5a\x44\x35\xb0\xcf\x7b\x94\xb4\x4c\xea\xe5\x54\x86\xd0\xfa\x39\x94\xe9\x41\x2c\xa3\xc4\x4a\xc6\xfe\x54\xd7\x55\x06\xe5\x8e\x19\x95\xa2\x5d\xf8\x5c\x1f\x56\xa5\xd1\xb1\x1d\xd4\x20\xc4\xb3\x10\x93\x81\xe3\x91\x37\xba\x8d\xf3\x2e\x18\x1d\x3b\x82\xc5\xf3\x43\xdb\xd6\xed\x9d\x4b\xdb\x52\x04\xd7\x68\xb3\xfb\xf1\xe8\xb9\x8b\xa1\x0e\xab\xc4\x79\x15\xc6\x62\x70\xe1\xe5\x6d\x9d\xa4\xec\x03\xfd\x3a\x7a\x5c\xc0\xfd\x45\xdd\xec\x7c\x85\x3f\x05\xd7\x49\x59\xcd\x61\xa1\xce\x3b\x4c\x90\x93\xe6\x98\xaf\xcc\xe6\x83\x95\xef\x47\x47\xf4\xb3\x5f\xc6\xbd\x67\xc2\x8d\x59\x35\x73\x3b\x5d\x04\xe6\xca\xe8\xef\xa8\x96\x7f\xbd\xe9\xf4\x9f\x84\x8f\x37\x26\xd8\xda\xbf\xf2\x09\xd2\xe9\x74\xd2\x01\x8e\x5d\x5b\x38\x1c\x41\xed\x01\xeb\xcc\x80\x54\x69\x66\x54\x5e\x8c\x78\xd7\x43\x3c\xe8\x72\x6e\x5e\xe2\xe2\x92\x6a\x01\xb3\xec\x74\x3e\xba\xfe\x20\x6d\x43\x15\x64\x01\x84\x20\xac\x7b\x88\x14\xdd\xca\x1f\x9c\x9d\x98\x39\x8c\x4c\x70\x04\x32\x44\xae\x5f\x6e\x3a\xfd\x92\xeb\x62\x99\x0c\x08\x1c\x21\x8b\x47\x22\xa2\x55\x6a\xd4\xf3\xbc\xd3\xe4\xe6\x9a\xe6\xd1\xde\x30\xc2\x94\x5f\xc3\xb5\x67\xab\x16\xe3\x71\x52\x5c\x84\xd8\x98\x06\xa1\x5d\x86\x18\x14\x6f\x40\xbd\x41\xdc\x46\xd5\x1b\xa4\x87\x7c\xa8\x42\x68\x10\x03\x2c\xa6\xcf\xbe\x4d\x96\x94\x83\x54\x0b\xa4\xd2\xaf\x5e\x43\xd0\x4d\x2c\xe1\x32\x1c\xef\x4e\x55\xf9\xe3\xbd\x9d\x15\x00\xa5\x20\x3f\x8b\x42\xc8\xad\x68\x93\xba\x71\x47\x00\xdd\x7e\x2d\x29\xd2\xf6\xce\xb9\x2b\xc1\xa9\x4f\x48\x7a\x8d\xd8\x25\x46\xb4\xe1\x74\x8c\xad\xa8\x94\x25\x29\x79\x2f\x91\x71\x85\x97\xd6\x68\xc7\x44\x37\x39\x0c\xa2\x8d\xb8\xf9\x5b\xb3\x10\x8e\x45\x7c\xf8\xc0\x24\xfb\x8e\xce\x55\xe9\x9c\x8a\x5b\xd2\xf1\x84\x85\x2d\xd1\xc0\xfa\x7f\x5f\xb0\x4b\x47\x85\xa5\x31\x13\x5d\x45\x22\xd4\xb0\x1d\x79\x98\x97\xf2\x8a\x16\x90\xd6\xb9\x3d\xbe\xb7\x86\xbf\xd2\xa8\x1c\x62\x7c\xec\x19\x7b\xc6\xea\x06\x52\x0c\x75\xc9\x36\xfd\x6b\xa3\xdc\xb0\xc6\x66\x3b\x94\xa8\x03\x59\xa6\xb1\xed\x0e\x8c\x47\x91\xce\xd9\x08\x62\x78\x9c\x35\xb2\xb6\xf1\xca\x1a\xe4\xc7\xe0\xe0\x34\x4e\x71\x23\x95\x4e\x64\x6a\x08\x0b\x7f\x82\xad\xd8\xa5\xbf\x19\x59\xd7\x01\x35\x11\x91\xff\x36\x82\xe2\xf0\x9e\xa6\xeb\x3e\x51\x0f\xde\x44\x17\x59\xa5\xe9\x43\x67\xc0\xcc\xa2\x2d\xb6\x2d\x92\x3f\x52\x33\xfe\x4c\x1c\x82\x42\xfd\x60\xda\xf6\x2d\x5f\xa3\x57\xcc\x0b\x04\x57\x2a\x76\xde\xdf\x74\xcd\x5b\x7f\xb6\x2c\xac\x75\x40\x8d\xe1\x96\x3f\x78\xab\x6e\x1d\x7a\x1b\xdd\xb4\xa7\x43\x0c\xbd\x8c\x2e\xac\x63\xb8\xf9\xee\xfc\x3c\x3a\x93\x34\xba\x7b\xc0\xb3\xdc\x0d\x30\xcb\xd8\x73\xbf\xa5\xc2\x20\x47\x47\xa1\x15\xf0\xf3\x6b\x5f\xcc\xd6\xab\x1d\xeb\x81\x3a\x63\x05\x57\xaa\xd6\x71\xb6\xae\xbe\xd6\x1c\x82\x38\x65\x5b\xaf\x43\x89\xc0\x2a\xb3\xba\x0d\x44\xe3\x3e\x98\x0c\x0c\x8e\x2b\xc0\x23\xb0\xa5\x2c\x30\x3e\x47\xaf\x62\x16\xce\x65\xeb\xf5\xfa\x38\xf7\xdc\x29\x4d\x4b\xc1\x64\xbc\x36\x26\x60\xac\x97\x8a\xe8\xa6\x89\x40\xdb\x1f\x00\xe7\x3b\x8f\xdd\x52\x21\x4d\xa7\x1f\x4e\x2f\x82\xc0\x93\xb1\xa4\x02\x78\xb0\x5b\xfc\xb6\xb9\xaf\x38\x8b\x13\x92\x72\xb8\xd7\xc4\x85\x11\x43\xce\x9c\x8f\x8b\xc6\x7e\xf5\xb3\xc1\x02\x3d\x33\xf2\x4f\xbc\xd5\x92\x57\xc6\x7e\xb6\x75\x12\xef\x32\xf6\x0e\xf6\x2f\x77\x3b\x52\xb0\x0f\xc2\xb9\x43\xa3\xf8\xc8\x55\xfc\xee\x3b\x8f\xc8\x9b\xa5\x2c\xe1\xa0\xf3\x6f\xbc\x92\x7f\xe3\xda\x8b\xbd\xc9\xc2\x52\x59\xd6\xf1\xa6\xa9\x8c\x21\x66\x90\x08\x00\xa7\x90\x66\x8d\xad\xfc\xad\xcd\xaf\xef\x35\xf5\xe3\xac\x6b\x6c\xe9\x8f\xe5\x60\xc3\x23\x2b\x08\xa2\x4b\xfc\x39\x60\x5b\x32\xd5\x2f\x98\xfa\x49\xb7\xe4\xf5\x84\x1e\x11\x7a\x52\xd9\xa0\x16\x0d\xeb\xfd\x87\xe5\x65\x78\x93\xef\x64\x14\x99\x17\xf5\xba\xe1\x2d\x1a\xf4\x0f\xa2\x43\xc3\xa3\x73\x4c\x57\x40\xc5\x63\x8c\xd6\xc8\xd9\xb8\x4f\x1e\x0e\x36\x70\x24\xfb\x07\x91\x75\xfe\x6a\xb3\xc6\xb3\x10\xc1\x29\x64\xb4\x48\x72\x7c\x2e\x53\x2c\x5f\x8f\x26\x61\xb3\xee\x21\x5a\xee\xf8\x80\xd7\x2c\x40\xac\x11\x82\xa0\xd4\x27\xd2\xa5\x5c\xf1\x41\x6a\x2b\x98\x3e\xd3\xa6\xc3\xd2\x0f\x8b\x83\xce\xed\x70\xb8\x2a\xc2\xcb\xd2\xc6\x8c\x95\x51\x3b\x30\x32\x02\xfb\xda\xe2\x65\x60\x94\xc0\x19\xb4\xba\xc4\x52\x05\xda\x15\x9a\xe0\xba\x34\x30\x52\x1a\x7b\xc0\xc2\x1b\x57\x68\xae\xa4\xd3\xc9\x9a\x4e\xfb\x30\x68\xe4\x8c\xad\x12\x7c\x09\x2f\xf5\x53\xb8\x16\x13\x61\x58\x4b\xa3\x41\x4b\x63\x4a\xc7\x59\x0e\x58\x28\x6b\x32\x7a\xa3\xfb\x04\xd1\xfc\x7e\x9e\xb1\x93\x67\x50\x2b\xae\x73\xa9\x70\xaf\x90\xca\x5f\x23\x20\x15\x5e\xca\x60\x44\xe9\x1d\x2c\xf1\xb0\xa8\x06\xba\x60\x00\xb6\xd7\x87\xb7\x18\x1e\xeb\x5d\x1a\xe8\x06\xa5\x21\xa1\x24\x27\xf5\xf0\x5b\xcc\x5f\x3a\xf8\xbe\x64\xc7\xc0\x71\x23\xd4\x1b\x48\x47\x69\x62\x31\xf4\x89\xcf\x54\x66\xa6\xf7\x45\xf7\x2b\x9d\xe2\x03\xe3\x65\x4d\xe7\x8f\xd8\x5a\x4f\xdd\xd9\xfb\x07\x8c\xb3\xc1\x7d\xcf\xbd\xdb\x9e\x1f\xb4\xd8\x70\x7f\xf8\x0d\xb5\x32\x6d\x1a\xbe\x98\xec\xf9\x95\x17\xff\x9e\xe5\x76\x50\x4b\x5f\x9e\x9c\x5d\x91\xa6\x5e\xc3\x89\x50\x76\x4e\xba\x7a\xad\xdd\x85\xd9\x43\x2d\xad\xe2\xda\x18\xb3\x13\xae\x91\x08\xec\x9c\x49\x5f\x99\xec\x35\x81\xdb\x9e\xed\x36\xd7\xbb\x5c\x7b\xc4\xb7\x73\xf7\x0d\xf4\x5f\x04\x61\xc0\xbd\xfb\x93\x8d\x4e\x0d\x2c\x34\x0c\x12\x79\x03\x6d\x6f\x5e\x1d\x00\xf4\x32\xeb\x78\x0c\xb7\xa2\x7c\x5f\x54\x96\x02\x96\xd1\x2b\x88\x25\x1b\x7b\xd4\x3e\x8f\x4e\x47\x63\xbf\x60\xf7\x46\xad\x4a\xfb\x42\x34\x4d\x7f\x66\xe8\x2d\xd5\x0e\xbb\xfa\xda\x5e\x70\x30\x34\xfc\x1c\x36\x4b\xb9\x58\x42\x90\xda\x47\x78\xeb\x1b\x0c\xd6\xd2\xad\xab\xf5\xba\xa9\xc4\xad\x01\x4c\x7f\x9e\x9c\x7e\xfd\x58\xe8\xad\xc0\x83\xdc\xfe\x89\x5c\xc3\x05\x71\x0e\xbc\xbf\xf3\xcf\x92\xec\xfc\x7c\x0f\x51\xfa\x51\xf8\x3d\x18\xf8\x56\xd8\xc6\x85\x72\xe9\x58\xc9\xa0\x92\x61\x14\xf3\x20\x84\x6e\xbb\xf4\xa3\xe8\xdb\xd1\x10\x7a\xaf\xb5\x8b\xa2\x6f\x47\x43\xe8\xbd\xd6\x41\x14\x7d\xbb\x27\x84\x6e\x27\x6d\x8b\x28\xfc\xc9\xbc\xfd\x22\x1e\x86\x45\x7b\xb1\x9c\xf1\xd5\x30\x5c\x8d\x58\xa1\xf2\x4b\x9d\x14\xb5\xd2\xe2\x56\x3b\x73\xda\x18\xf1\x2e\x56\xc3\xdb\x85\x18\xda\xf4\x87\x0d\xed\x83\x2e\x10\x8d\xe6\xdd\x1f\x5a\x02\xd6\x22\x9a\x4b\xbc\x42\x27\x88\x8b\x42\xd4\x16\x79\x7a\x86\x59\xd3\xd7\x5b\xd1\xde\xb4\x52\x53\x81\x65\x57\x63\x69\x83\x5e\x8a\x1d\x5b\x73\x5d\x2c\x73\x6c\xf7\xc6\x6c\xae\x6b\xb1\xae\xdb\x1d\xab\xf8\x0e\x36\x86\xae\x66\xaa\x66\x4b\xde\xae\xd9\xbc\x56\x50\x17\x89\xdb\x2d\x4d\x24\x31\xff\xff\xe3\x7c\xde\x7e\x70\x3a\xc3\x07\x9b\xc1\x20\xc5\x1e\x1f\x68\x83\x9e\x77\xee\xda\x90\xfe\xe5\x0a\x84\x38\x96\x86\x83\xaa\x84\x29\xba\x43\x53\x5d\x7f\x6a\xc6\x1c\x42\x8a\x87\xa7\x64\xed\xa3\xf0\x60\xc0\x1c\xae\xfe\xb1\x05\x06\x7f\x86\x6f\x4f\xfc\xe5\xcd\x19\x7b\xb3\x92\x0d\x64\x93\xb7\xa3\x66\x15\xf8\xcb\x17\xdd\x2b\x59\x25\x29\x83\x80\x22\xd7\x80\x0a\xc2\xf1\xff\xa1\x07\xdc\x74\xba\x15\x7c\x9d\x3b\xe7\x8f\x0e\x34\xcd\x6b\x81\x35\xad\x60\x1c\xe1\x85\x48\x52\xc3\x61\xa9\xae\x0f\x49\xd7\xac\xdd\xa8\x8c\x2d\xe4\x56\x28\x26\x75\xc7\x8a\x4d\xa7\xeb\xb5\x27\x03\xb7\x35\xce\xb7\xc0\x86\x5e\x50\xc1\xde\xcd\x88\xe4\x31\xd4\x7e\xb5\x59\x93\x91\x97\x7a\xa7\x8e\xce\x1e\xb8\xfb\x2f\x12\xa4\x5a\xca\xce\xd9\xed\x74\x12\x86\xaf\x26\xce\x93\x05\xea\xdf\x5a\x29\x4f\xe3\x55\x17\xb0\x10\xdf\x67\xc3\xd2\x7e\x87\x66\x4a\x77\x42\x1e\x1f\xb3\x1f\xb9\xac\xc4\x3c\x9f\x92\xe1\x68\x57\xd7\x33\x36\x3b\xb3\x61\x86\xd2\x1f\x2e\x45\xcd\x6f\xed\x05\x08\x46\x51\xb9\x30\x77\x0b\x00\xaa\x7b\x6d\x07\xb8\x05\xc8\x25\x9b\xe9\xea\xaf\x82\x57\xd5\xff\x16\x55\x23\x5a\x36\xdc\x9e\xcc\x4b\xbc\x81\x9b\x48\x9a\xe6\x68\x84\xe4\x79\x1e\xdd\x18\x12\xd8\x1d\x03\x6d\x61\x80\x84\x3e\xb7\x54\xfe\x88\x82\x2d\xc2\x0f\x4e\xd9\x43\xe5\x93\xb3\x48\xcd\x82\x51\x8c\xf5\xd4\x88\xb5\x66\xc2\xc4\x69\xfa\x90\x4a\x79\x97\x31\x0d\x5e\xf7\x27\x3a\xdd\xd6\x93\x0e\x9d\xee\xbd\x5e\xf7\x83\x6e\x37\x38\x40\x5e\xb2\x1e\x13\x29\xc4\x23\x06\x23\x51\xb7\xb1\xe8\x4b\xe8\xf9\xfb\x1a\x23\x17\x36\x32\x60\xbc\x9e\x18\x8d\x78\x19\x23\xc6\x1f\xff\x30\x4d\x6d\x39\x98\x8d\x63\x48\x7f\xa6\xa0\x6e\xe0\xd0\xba\xe9\x83\xf1\xff\xe9\x44\xa1\xd3\x41\xc7\x23\x28\x40\xe1\x93\x49\xe8\x3b\x86\x86\xf6\x78\xac\xd5\x81\xb4\xb7\x1c\x45\xd7\x8d\xb8\xaa\x77\x3a\x58\x6f\x6f\x38\xf9\x96\xa9\x87\xc0\x61\x25\x7d\x5d\xb3\x52\xdc\x30\xa9\x9a\x8d\xf6\x16\xee\x18\xc8\xef\x3e\x02\xe4\x9a\xab\xdd\x3e\x98\x61\xf1\x89\xf1\x61\x87\x24\x50\x5f\x7c\xf1\x91\x33\x7a\xf4\x64\xfa\x24\x3f\x3a\x7a\xdc\xfc\x1e\x39\x35\xe7\x8e\xdd\x0e\x2e\x71\x91\x25\xbb\x8d\x36\x16\x8c\x94\x3d\x14\x5f\xdf\x74\x52\x2d\xd8\x3f\x44\x5b\x93\xe9\x60\x07\xed\x8d\x19\x46\x2b\x94\x0f\x51\x98\x51\x49\x0d\xe3\xb7\x2e\xfc\x79\x8d\xcc\xd0\x5e\x25\x32\xfd\x86\x3d\xb9\xd5\xf1\xe9\x0d\xd3\x3e\x7d\x24\x6e\xe6\xc1\xad\x8e\x15\x31\xef\xbc\xda\x35\xb0\xa2\x22\x1f\x77\xbd\xd3\x13\xbb\x1e\x8e\x8e\xc6\xe4\xe0\xf8\x98\x35\xad\x68\x78\x4b\x97\xe9\xd0\xb7\x87\xd6\x5c\x2a\x33\x2e\x9e\xe4\xb0\x69\x0d\xcb\xc5\x2f\x98\x0a\x4b\x43\x82\x8b\xc7\xcc\x64\x55\x0a\xe5\xc4\x6b\x83\x86\xbd\x2b\x81\x5e\xf8\x8b\x12\x06\x1f\x21\x09\x22\x3e\xb7\x44\x45\xf5\x0c\x92\x28\x48\x5f\xf3\xec\x96\xa8\x3a\x42\x4c\x28\xb2\xdf\x73\x14\x86\x62\xe9\x9b\x4e\x3c\x48\x47\xb8\xb5\x21\xde\xee\x14\x71\xc3\x1f\xdc\xc0\x32\x14\xe7\x59\x1b\x4b\xfa\xd6\x8a\x7f\xdd\xca\x05\x5e\x43\x24\x95\x0d\x3c\xc4\xe7\xb9\xd4\xb3\x13\x5b\x21\x91\x48\x75\x79\xa6\xae\x32\x86\xbd\x40\xd7\xab\x4b\x05\xa7\xc2\xcd\x18\xa8\x01\x15\x06\x46\x88\xf8\xc0\x54\xf3\xe8\x49\xa0\xf8\x1e\x52\xb0\x37\x6d\xad\x16\x4e\xaa\xf1\xde\x29\x8a\x07\x29\x0a\x81\x68\x77\xd2\x65\x3a\x85\x83\x62\xe8\xe4\x1e\x3e\x21\xa3\x83\x83\x69\x74\x36\x26\x8a\xc1\xd0\xb2\x74\xe0\xa2\x33\x31\x1b\x75\xd3\xf2\xe6\x2f\x9d\x8d\x5d\xe0\x42\x01\x08\xb9\xb3\xfe\x47\xa6\x33\x73\x8b\x2a\x88\xd6\x2a\x59\xa5\x3e\xb9\x60\x9d\x0e\x77\xca\xc7\x5b\x20\xc9\x68\xc4\x38\x08\x3f\x20\xa6\xa9\x37\xfd\x15\xdd\xe4\xe4\x4f\x21\x85\xf5\x78\xfe\x0c\x12\x3d\x25\x46\xdf\x05\xc5\x5a\xb9\xa1\xeb\xf3\x34\x63\xbd\x09\xdb\xc7\x84\x28\x1c\x84\xbe\xef\x07\x74\x87\x27\x02\x0d\x42\x23\x27\x01\x4d\x5b\x5b\x2e\xd8\x3f\xe5\x87\x63\xc9\x71\x14\xa4\x47\xc1\x7f\xe4\xc2\x1d\x01\x0c\x0e\x2a\xe9\x28\xa6\xec\x8c\xaf\x17\xbc\x49\x5c\xb1\xca\x0a\x7d\x15\x5b\x05\xe2\x4a\xcd\xee\xf6\xc4\x8a\xd1\xc2\xfc\x9b\x50\x2e\x42\x8c\x91\x6f\xe7\xa7\xbb\x76\xce\xfe\xe8\x7b\xa9\x41\xcd\xc0\x83\xd9\xba\x17\xbc\xa1\x4a\x1f\xb2\x4d\xdf\x13\x2d\x7e\xd2\x6d\xef\xbb\x1f\x7d\x43\x35\x68\x69\x3c\x63\xa4\x42\x4c\x4e\x77\x58\x36\xae\xb8\x1b\x09\x29\x99\xa6\x50\xf5\xe7\x47\x8f\xa2\x46\x84\x81\x7b\xeb\xc2\x05\x91\x3f\xbd\x0d\xbe\x11\xd7\x5f\x4e\xbf\x15\x2e\x2e\x2e\x50\xd3\x11\x89\x7d\x08\x78\x81\xa0\x52\x37\x67\x76\x87\xf5\x86\x56\x34\xc2\x6a\xc3\xe8\xf2\x19\x8a\x7b\xf5\x2d\xe0\xad\x2d\x93\xdc\x1b\xdc\x0a\x4b\x65\xdd\xed\x81\x98\x22\xa7\xc3\x96\x01\x73\xc7\x23\x3e\xe9\xde\x5a\x4b\x1f\x1d\xa1\xab\x02\x03\x87\x3b\x9d\x0e\x8a\x04\xbd\x17\xbb\x1f\xab\xb1\x89\xda\x9c\xc2\xbe\x9b\x76\x02\x1b\x3d\x0c\x0a\x50\x76\x79\x78\xba\xfb\x8f\xf3\x79\x1b\xc7\x03\xb4\xce\x83\xab\x89\x06\x31\x01\x7a\x3d\x08\xac\xc6\xb2\x65\x1b\xc1\x11\x9f\x41\xc0\xf5\x71\x75\x77\xb8\x1e\x8d\xa8\xf8\xd2\xbb\xa1\x28\x51\xde\x67\x78\x7f\xa9\x95\x23\xa8\x1e\xf3\x61\xd7\x07\x07\x04\x80\xb3\xcc\xf5\xa7\x8c\xbd\x25\xbc\xbf\x42\x63\x3f\xed\xf7\x14\x90\x68\x9d\xdb\xab\xd9\x46\x33\x33\x30\xf2\xde\xc4\x4c\x18\xf3\x1f\x44\x17\xed\xed\xbd\x0f\x86\xf3\xed\xf5\x6d\x47\x0e\x19\xc8\xf1\xd0\x02\xc0\xfb\x46\xf4\xae\x99\x4e\x47\x82\x4a\x6f\xb4\x2c\x56\xbb\x9f\x5f\xfb\xc0\xd2\x07\x2b\x42\xe9\x48\xed\x22\x5a\x97\x08\x72\x70\x65\x4a\x7c\x65\x5c\xff\xa2\x2e\x2f\x8e\x70\xf1\xd6\xcf\xaf\x7b\x11\x10\xff\xde\xe2\xe4\x3f\x6b\x01\x31\x28\x30\x31\xc2\x29\x22\x06\x70\x35\xfd\x37\xf0\x1e\xef\x38\x39\x3a\x62\xd2\x3b\xe7\xb2\x34\xb4\xc5\xce\x0b\xa1\xff\x62\xfe\x4e\x34\x5f\xa4\xdf\xd0\xf3\xe0\xa2\x34\xb3\xb7\x52\xa9\x2e\xb8\xe3\x28\x87\xcf\xdd\x35\x57\xc0\x9d\x31\xad\x39\x99\x4c\xea\x78\x59\xf7\xb5\xe7\xa4\xaf\x10\x40\xc1\x8c\xd7\x4e\x04\x95\xc8\xb0\x01\xd0\x35\x48\x1f\x79\xeb\x6c\x2f\x87\xe4\x2f\xb1\x16\xb3\x8c\xd5\x80\x1f\x10\x20\xba\x4e\x24\x4d\xd9\xbd\xfd\x1e\xca\xbe\x01\x6f\xa3\x8d\xe5\x8e\xd5\x60\x0c\x03\xac\x91\xb3\x39\xc1\xe5\x3c\x33\x08\x6c\x85\x83\x05\xa3\x0d\x54\x8a\x8f\xa5\x8f\x24\x63\x02\xc2\x23\xab\x82\xcb\xd8\xee\xa3\x4c\xf0\x74\xd2\x1d\xca\xa8\x60\xcc\xa2\xea\xe7\x62\x8c\xdf\x14\xdd\x62\xe1\x4a\x57\x7b\x57\x28\x0f\x72\x3f\x9f\xc4\xdd\x8f\x62\x6d\x7f\xc7\xcf\x58\x17\xdc\xba\x6d\x29\xfa\x48\xe6\x75\xc1\xf5\xdd\x43\x63\x22\x63\xb7\x0e\xe2\x90\x41\xf7\xfb\xee\xfc\x39\x8c\xa1\xe9\xed\x83\xff\xe1\x9a\x74\xa7\x8d\xfd\xad\xee\x66\x49\xea\x68\x95\x1e\x1f\xc3\x99\x3a\x56\x09\x0e\xd7\x0c\x74\x0d\x2f\xe0\x76\x40\x70\x2c\x9d\x85\xfc\x2d\x56\x4f\xf2\x05\x84\x22\x34\x5f\x80\x75\x7c\xce\x7e\xcf\x7e\x4f\x11\xd7\x67\xcf\xac\xa5\xc0\xe1\x1e\x45\xd3\xe4\xec\xca\x46\xbc\x17\xe1\x5d\x89\xbe\xb0\x9e\x10\x28\xb8\x62\xba\x66\x45\x5d\x61\x94\xf8\xf8\x98\x71\xc4\x84\xd5\x2d\xe3\xec\xef\x9b\x5a\xc3\x25\x0b\x9c\x75\x3b\xa5\xf9\x2d\xd6\xf1\x00\x9a\x0f\x62\xf9\x04\xb1\x8c\x1f\x9c\xf5\x1f\xcc\x06\xf3\x90\x25\x93\xcf\x4e\x5c\xe1\xa8\x01\xfa\xe1\x43\x0f\x86\x7d\xf0\xec\x24\x86\x12\x1e\x1d\xb0\xb5\x01\xc8\x05\x03\xe8\xf2\x4c\x5e\xa5\x31\xa5\x9e\x9d\x9c\x5d\x85\xd4\x80\x19\xcf\x2d\xe7\x74\xcd\x4a\xa9\xe8\xb6\x0f\x9a\xf5\xc9\xc3\xb3\x76\x73\x2a\x43\x8e\xfd\xe7\x7f\xfe\xde\x7e\x3c\x10\xe6\x4a\xdf\x54\x8c\xe6\x1d\xcd\x7a\x30\xa3\xbf\x63\x90\xbb\x3f\xa7\x67\x27\xfb\x66\x25\xf1\x23\x1b\x20\x03\xef\x3b\x92\x82\x2d\x7a\x62\xef\x08\x0e\xdc\xb2\xf1\x56\xc1\xc4\x13\x1c\x21\x0d\xec\x3e\x3b\xf5\x68\xa1\xcc\x66\x23\xe6\x0e\xed\xef\x3d\x73\xe7\x21\xfb\xd9\xf9\x54\xd6\x8a\x71\x57\x4e\x3f\xbe\xc4\x18\x22\xd3\x5a\xe7\x95\x50\x7b\x82\x52\x00\x74\x8f\xfd\x12\x9a\xd9\x64\x1d\x8e\x26\xae\x86\x66\xc5\x48\x25\x55\x68\x64\x4c\x27\x13\x7e\x58\x69\xff\x66\x5a\xfb\xf3\x36\xe5\xcf\xd4\xdb\xdc\x7b\xde\x6e\x23\x7c\xa4\xde\xe6\x07\xa3\x2a\xb1\xe6\x1e\xdb\x5b\xef\xf7\x3a\x3d\x07\xd1\x44\xdd\x3d\x38\x2f\x36\xe6\xbb\xc5\x25\x4c\x5d\x2f\x2d\x8d\xee\xfb\xb8\xcc\x61\x8c\xf1\x90\xcc\x59\xbb\xdd\x5e\xc3\x7c\x40\xe2\xf7\xc8\xa7\x95\xc6\x9e\xfb\xf4\xb0\x60\x4a\xf6\xcc\xcf\xc6\xa6\xe4\x6d\x30\x02\xc5\xb6\x8b\xb3\xfb\xff\x96\xd6\x7f\x0d\x69\x05\xcd\x7f\x86\xa7\x8d\x0c\x9b\x9e\x82\xe3\x67\xec\x8d\x48\xad\x0c\x4b\xef\x3a\xdd\xee\x93\x54\xdc\xed\x0e\x88\x6a\xa8\x0d\x23\xb1\x82\xc3\x4b\xd1\x47\x3d\xa6\x93\x49\x41\x5b\x0b\x1e\x24\x88\x98\xed\x3e\xea\x30\x60\xf9\x51\xf1\x49\x4e\x38\x50\xe9\x90\x17\xee\x02\x34\xdf\x73\xcd\x93\x94\x5d\x9e\x5e\x05\xf7\xf6\x20\x7c\xb0\x6a\x3a\x10\xb1\x59\xd4\xde\x66\x8c\xbb\x4d\x63\xbf\xbb\xb5\x73\x25\x01\xe1\x95\x41\xc1\x78\x14\x3c\xe9\xd5\xa7\xee\xdd\x00\xa1\x6c\x76\x7f\xc4\xf0\xd0\xf9\xda\x69\xfc\xad\xe7\x3d\x7d\x7b\x29\xeb\x25\x57\xaf\x82\xce\xf6\x8b\xc9\x8f\xea\xac\x97\x6d\x7d\xf3\x4a\x56\xc4\x33\x60\x88\x83\x14\xd7\xd8\x0e\x00\xf5\x17\x18\x55\x1e\x0c\x83\x68\x8f\xc2\xc4\xc7\xce\xec\x1d\x83\xfd\x13\x96\xc3\xd8\xab\x5d\x8f\x50\xd9\xf0\x91\x52\x66\x98\x7a\x48\xca\x20\x08\x6c\xe3\xc8\x8f\xb2\x79\xb2\x60\x29\x0f\x71\x75\xe7\xb5\x7b\x7b\xd4\xbe\x88\x72\xbc\x21\x3d\x24\x18\xd4\xe9\x7a\x53\x96\xc2\x15\x8b\x8d\x82\x88\x99\xba\xef\xcc\x79\x78\x36\xc2\x63\xfe\x31\x04\xfe\x9b\x50\x87\xc8\x6b\x95\x44\x74\xe7\xd6\x43\x64\xc6\x60\x3c\x54\xa4\xc3\x22\x1b\x88\xc8\xde\x60\xe7\xf3\x58\x59\x8f\xc8\x50\x6f\xf5\x3c\x16\xd2\x49\x9f\x9f\x9f\x80\x42\xb4\x2b\x07\x08\x7d\x0c\xb9\x83\x6b\x10\xf6\x91\x1c\x52\x83\xf6\xc7\xdd\x74\xb2\x1d\x3d\x55\x7b\x3b\x3c\x6f\x3a\xb9\x65\xe7\xec\x76\x24\x0d\x86\x95\xbf\xa0\xc5\x30\xe9\xf5\x40\x15\xe9\xbe\x0a\xce\xde\x47\xf6\x63\xed\x88\x82\x59\xe0\x31\xd6\x7d\x96\xf7\xd8\x9b\xdb\x9c\x3e\xe1\x36\x76\xa9\xfc\x43\x95\xac\xfb\x0e\xda\xf4\x2a\xae\x6e\x6d\xc5\x55\x3a\xf6\xb1\xe5\xe0\xe0\xf9\xc7\x23\x6e\x6b\xdd\x7a\xb7\x05\x3e\x0e\xf1\xdb\xe8\x8a\x3f\x2f\x76\xe0\xf3\x41\x07\x60\x69\x13\x7c\x29\x2e\x12\x94\x3f\xed\xb4\xe8\x92\x5b\x76\x79\x05\xdf\x9f\xdc\x2f\x2e\xf6\x29\x9e\xcd\x4d\x83\x0a\xe5\xf8\x58\xf4\x13\x3a\x16\xbd\x3f\x39\x6c\x47\xb5\x55\x2f\x66\xe0\xf0\x9b\x3a\xe1\xed\x0f\x03\x8a\x85\x03\xbf\xc2\x8f\x8a\x62\x64\xc6\xd5\x45\x13\x3a\xd1\x4b\x7b\x6e\x7a\xfe\xa6\x77\xb1\x44\x50\xbd\x84\xf9\xf5\x41\x59\xac\xef\x36\xb8\x5e\x22\xe8\x10\x96\xc6\x0e\x7a\xf8\x2b\x26\x82\x1e\x61\x79\xec\xa0\x47\x78\xcd\x44\xd0\x27\x2e\x91\x45\x32\x9d\x33\xdf\x9b\x3e\x1d\xf4\x18\xb9\xe9\x90\x8b\xa3\x32\xf1\x82\x37\x89\xc2\x60\xc0\xe3\xc5\xa1\xfb\x88\xb2\x71\x59\x32\xc5\xbe\xdd\xe7\x92\x7d\xf8\xc0\x14\xfb\xce\xbd\xed\x67\x5c\x47\xb3\x1c\x48\x0b\xdb\x34\xb2\x84\x99\x54\x34\x29\x5b\x7b\x20\x6e\x0e\x89\xc1\x40\x04\x6c\xfb\x01\xff\x87\xbc\xef\x35\xf5\x8c\x1f\x32\xbd\xd7\x34\xe0\xb8\x4a\x1f\xcb\x44\x0b\x63\x0f\x1f\x8d\x65\xf3\xff\x83\x8f\xcf\x3f\x83\x65\x48\x91\x31\x86\xfd\xcd\x7d\xaf\xef\xbf\x81\x61\xea\x20\x87\xba\xb1\xf5\xf8\x1b\xb0\x0c\xaa\x99\x64\xc6\xde\xf7\x22\x71\xb6\x80\x94\xae\xe8\xa4\xa0\x02\x15\x91\x76\xbd\x3b\xf4\x82\xf2\x07\xa9\xe6\x3d\x0b\xcb\x3c\x19\xc4\xef\xe2\xad\x1c\x82\x12\xbe\x82\x78\x5c\x85\xe3\x17\x0e\x3b\x5b\xbc\xb8\x51\x7c\x3e\x6f\x45\xd7\x41\x65\xae\x0f\x3b\xdc\x7f\x64\x74\xb0\x80\xaf\x4a\x07\x31\x41\x9a\xea\xb9\xff\x58\x16\x86\x51\x40\xff\x8d\x5c\x2f\x13\x98\xb3\x83\x20\x11\x02\xda\xd2\x17\x8e\xba\x7e\xbd\x2b\x8e\xbd\x4f\x84\x3f\xd9\x89\x7f\xcf\xbe\x65\x12\xff\xf8\xee\xa0\x33\xdf\x23\x2d\x3a\xf6\x23\x91\xa8\xeb\x7a\xa3\xe6\xbe\xf2\x31\xf4\xd1\x5f\x97\x09\xf8\xee\x67\xef\xaf\xd2\x8f\x74\xc6\xed\xd5\x16\x46\x42\xee\x83\x33\xd8\xa3\xd3\xd8\xf3\xed\xcb\x11\xd9\xd8\x83\xf9\x47\x7c\x0d\xb3\xdb\x5c\x77\x84\x5b\x97\x31\xb3\x38\xfa\x65\x10\x7b\x16\xd2\x97\xb0\x92\x32\xb6\xfa\xf7\x62\xfa\x17\x5c\x4c\x1f\x2d\x9b\x5f\x3e\x46\x38\x57\xec\x5b\xf6\x1e\xff\x78\x8c\x94\x7e\xf9\xcf\x14\xd3\x8c\xad\x1e\x96\xd4\x17\x55\xdd\xd1\x69\x62\xb7\x13\x1b\xe7\x37\xd8\x99\x43\xff\x6c\x78\x2b\x8d\xe9\x1f\xbb\xf1\xb6\xc4\xac\x13\x66\xba\x7b\x0f\x40\xe0\xeb\x4f\x3c\x02\x51\x2c\xb9\x6a\x45\xb1\x1d\x5e\x71\x9d\x31\x75\x0d\x01\xb4\xf1\x4b\x7d\x13\x1c\x56\xcc\x33\xd6\xe2\x19\x05\xfb\x3d\x7c\xb3\x90\xea\x35\xde\xa2\x72\x79\x15\x9e\xf7\xbc\xbb\x1b\xf9\x7a\xf6\x32\xbd\xc7\x4a\x63\x75\x8d\x9e\x25\xf4\x75\x87\x61\xe1\x67\x16\x1d\x1b\xbd\xa3\x9a\x1b\xc4\xe0\x67\x01\x23\x85\x44\xc2\x4e\xa9\x85\x7a\x74\xc4\x5c\x53\x8a\xe8\x3e\xb7\xf6\xcc\xf9\x39\x7d\x9a\x2b\x3c\xff\x9d\xf9\x13\xf0\x13\x43\x9c\x68\x08\x0f\xe4\x64\xdc\x56\x08\xae\x2d\x46\x4b\x81\x40\xb8\xa1\xd3\xe8\x4c\x79\xff\xfd\xc9\xf0\x1b\xde\x4b\xae\x3a\xa0\xc5\x90\x47\x43\xd6\x38\xbe\xf9\xf0\xe7\xc7\xb1\x23\x7b\xcc\x5d\xcc\xff\x72\x3c\xdb\x7b\x54\xbf\x45\x38\x09\xfd\xdb\xb1\xcb\x2b\xfb\xf5\x44\x78\x00\xd7\xbb\xd7\x9d\x50\xf8\x91\x5e\xc3\x8c\xd7\x7f\x1d\x11\x65\xaa\xa1\x1d\x7e\x4f\xd3\x02\x0e\x8a\x98\xbb\xa0\xaa\xd6\x0e\x1b\x44\x53\x70\xe0\xef\x65\x9b\x74\x39\x9c\xbf\x73\x11\x15\x7a\x13\x04\x0f\x60\x7c\x2c\xc7\x8d\xe9\x19\x77\xf9\x59\x14\x5b\x6c\xbf\x1c\xa9\xb9\x0e\x23\xce\x54\xc7\x34\xb8\x8e\x24\x2f\x96\xf6\xba\xdf\xde\xab\xe7\xb6\x30\xbe\x58\x8e\xde\x97\x07\x5d\x5d\x32\x7d\x1f\xc2\xc5\xb2\x87\xf2\x1b\xa1\xe6\x8f\x45\x79\xec\x16\xca\x7f\xe2\x44\xf6\x5e\x0d\xd8\xe5\x23\xb7\x92\x3f\x38\x71\x58\xa6\xfe\x42\x89\x87\xd7\x40\x31\xa6\x6e\x9e\xbb\xa8\xb0\x2c\x03\x11\xb2\x02\x76\x59\x5c\xa1\x30\xc1\x37\x9a\xad\x4c\xd0\x3a\x39\xa8\xc3\x46\x94\x58\x08\xf4\x51\x0a\xcd\x2e\xbd\x62\xbf\x3a\x0b\x16\x68\x61\x35\xac\x5d\xa4\xdf\x0b\xd1\xfc\xf0\xf7\x0d\xaf\x12\x7e\x92\x31\x7e\x1a\x7f\xeb\xdb\xea\x31\x79\x32\xee\xd2\x72\x33\x0b\x79\xba\xe7\xe5\x29\x9d\xeb\x3a\x81\x2b\x72\x4f\x43\xcd\x81\x17\xa0\xdc\x07\xef\x95\xac\x20\x61\x77\x1a\xfe\x38\xd9\x73\xe2\x5d\x9e\x8e\xbd\x38\xa4\x99\xe6\x42\x34\x68\x1e\x99\xc9\xfe\xa5\x4b\xac\xb5\xcf\x4f\xd2\xcc\x99\xfe\xfc\x94\x4e\x24\x38\xfa\x0c\xfa\x6d\x4f\x32\xb6\x3d\xb5\x37\x52\x6d\x65\x27\xb5\x98\x1b\xfd\x7e\x7a\xd5\xdf\xa9\x1d\xf5\x4a\xf6\x64\x7b\x02\x47\x78\x2a\x39\xc7\xf0\xcc\x93\xed\x69\xf0\x20\xc0\x3c\x6e\x79\x74\x14\xb7\x74\xb7\x0f\x9c\xd0\x89\x1a\x43\x8d\xed\xa9\xfd\x31\x4a\x81\xa8\xf9\xfe\x72\xf1\x5e\x46\x37\x68\x95\x99\xfe\xce\x38\x32\x20\x0e\xb6\x3d\x0d\xe3\xa9\xc1\x49\xec\xed\x49\xff\x96\x1a\x4a\x05\xf9\x4f\x58\x67\xbd\x5b\x66\xde\xd1\x45\xfc\x5e\xab\x5b\x82\xdb\x12\xa3\xed\x09\x06\x68\xcf\xb1\xe1\xe5\xf3\x2b\x38\x8b\x7c\x1a\x3f\x3d\xb9\x8a\x2f\x9b\xa1\xef\xed\xba\x03\xf1\x16\xaa\xdb\x48\xe9\x41\xc6\x06\x6c\xbd\xc3\x11\x33\x1a\xe3\xfe\x91\x73\x8c\x72\x1e\x27\xe1\xcd\x13\xfe\x03\x34\xf8\xca\xe6\x43\x90\xb1\x51\x76\x64\xf4\xae\x1c\xea\x16\xe6\x0b\x03\x16\x3c\x30\x6f\xde\x32\x65\x1c\x8f\x13\x7b\x90\x03\x03\x52\x38\x36\xa6\xf5\xc2\xbc\x8c\x1d\xf8\x7e\xe4\x20\x98\xea\x5d\xfd\x33\xb2\x72\x5c\x56\x1f\xa8\x17\xfc\x40\x6a\x3f\x70\x23\x50\x3c\x89\x61\x9e\x22\x26\xdf\x87\x0f\x03\xf2\xd9\x6c\x92\x6f\x84\xa2\x42\xbf\xe2\x51\xc6\xd0\xb7\x17\x82\x6e\x4f\xfd\x9f\x84\x7a\x7c\x90\xe0\xb3\x60\x84\x37\xf6\x3a\xf6\xf8\x1b\x96\x3e\x91\xf4\xf6\x1e\x26\x18\x39\xf8\xf1\xa9\xa4\xa7\xdc\xe8\x83\x32\x3b\x22\x39\x8f\x10\xd8\x58\x5e\xad\xa8\xc2\xb7\x2d\x80\x1c\x2f\x79\xf3\x57\xb1\x73\xd7\x42\x1a\x6b\xd0\xbc\x4c\x1f\x2d\xb9\xf6\x9b\x1c\xa8\x55\x00\xb0\xad\x0f\x84\xbd\x0e\xc7\x40\x11\x5d\x91\x25\x54\xc1\x46\xb7\x3d\xed\xbf\x01\xfd\xce\xab\x81\x86\xe7\xd5\x69\xef\xd1\x90\x31\xbc\x3a\x01\x23\xe5\xf4\x33\x58\xd1\xaf\x62\xd8\x2b\xdf\x87\x6b\x05\xf6\xb2\x24\xf2\xe2\xc7\x8b\xd2\xcd\x1a\xbc\xe8\x60\x56\x8f\x49\x05\x9a\x4d\x94\x72\x81\x8f\x69\x7d\xea\x33\x87\xde\x45\xfb\x7f\x01\x00\x00\xff\xff\xcc\xe7\x74\x5c\x76\xa5\x00\x00"), }, "/src/reflect/reflect_test.go": &vfsgen۰CompressedFileInfo{ name: "reflect_test.go", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 434851224, time.UTC), - uncompressedSize: 4512, + modTime: time.Date(2021, 3, 28, 16, 15, 16, 948156600, time.UTC), + uncompressedSize: 5369, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\x6d\x6f\xdb\x38\x12\xfe\x6c\xfd\x8a\x39\xdd\x5d\x2b\xdd\x09\xb2\x65\xb7\x29\xa0\x22\x1f\xd2\xbc\x14\x59\xb4\xf1\xa2\x0e\x76\x3f\x18\xde\x05\x23\x8d\x2c\x36\x14\xa9\x25\x29\xa7\x5e\x43\xff\x7d\x41\xda\x96\xe5\xb7\xc6\x7d\x03\xea\x90\x33\xcf\x3c\xe4\xf0\x19\x8e\xe9\x6e\x17\xfe\xff\x50\x51\x96\xc2\x67\xe5\x38\x25\x49\x1e\xc9\x14\x41\x62\xc6\x30\xd1\x7f\x6a\x54\xda\x71\x68\x51\x0a\xa9\xc1\x73\x3a\x6e\x41\x74\xee\x3a\x1d\x77\x05\x30\x43\x83\xa1\x7c\xea\x3a\xbe\xe3\x64\x15\x4f\xe0\x1e\x95\xbe\x60\x74\xca\x0b\xe4\xda\xd3\xf0\xbf\x15\x22\xbc\xf7\x61\xe1\x74\x74\x38\x7a\xa4\xa5\xe7\x3b\x75\x0b\x3f\x62\x34\xc1\xe1\x0c\x65\xc6\xc4\xd3\x89\x31\x37\x15\x4f\x3e\x90\xb9\xa8\x4e\x5d\xe4\x42\x4a\x32\x1f\x66\x57\x54\x62\xa2\x6f\x33\x92\xe0\x89\x81\xf7\xf3\x12\x19\xe5\x8f\x6a\x24\xa4\xc6\xf4\xc4\xa8\xf7\x97\xef\xa8\x56\x27\x82\x2f\x73\xc2\x2f\x18\x13\xc9\x89\xf8\x3b\x52\xe0\xbb\xb9\x46\x75\x21\xd1\x1e\xf6\xc9\xdb\x1a\x66\x99\x42\xfd\x41\x24\x8f\xa7\x6a\x83\x46\xea\x21\xbf\xe5\x33\xc2\xe8\x81\x65\x56\xc5\x10\x2e\x81\xde\x78\xb2\x6d\xb8\x24\x0a\x17\x4e\xa7\x63\xfe\x77\xae\xa8\x8c\x01\xb6\x01\x9f\x30\x99\x05\xc6\x69\x0e\x21\x6e\x9c\xbf\x11\x56\xe1\xa2\x36\x9e\x3a\x80\xa3\xd1\x23\xe4\xe9\xd7\xa3\x3b\x06\xb2\xe3\x19\x66\x5e\xe4\xef\x51\x6f\x33\x5f\x61\x46\x2a\xa6\x97\x28\xa7\x53\xef\x1c\x8b\x96\x55\xa2\x87\xd9\x0d\x45\x96\x1a\x39\x8e\x1e\xa7\xbb\x86\xba\x87\x19\xbe\x3b\xf0\xfa\x8b\xb9\x98\x9f\x2a\x86\xc7\xcb\xec\x39\x8e\xf7\x97\xdf\x1d\x7a\xc1\xa6\xdf\xbf\x2c\x72\x94\x34\xf9\x11\x8a\x53\xee\xf1\x73\x1c\xbf\x53\x9d\xdf\x72\x8d\xf2\x87\x58\xee\x85\xf8\x48\xf8\xdc\x56\xc2\xc9\x4a\xcc\x88\x84\x14\xb1\xbc\xfe\xab\x22\xcc\xb0\x29\x38\x87\xf1\xe4\xaa\x6d\x5a\x38\x9d\x6e\x17\xec\x94\x6a\x8a\xca\xe9\x2c\x38\x65\x01\xd8\x0f\x2d\x2b\x34\x75\xb9\x88\x02\x88\x5a\x53\xca\xf5\xa0\x6f\xaa\x1b\x36\xa3\xc6\xd9\x0b\x5f\x07\x60\x3f\x1a\x53\xc6\x04\x31\xb8\x5e\xf8\xda\x0f\x60\x7b\xd6\x80\xdc\x1c\x19\x13\x6e\x00\xcd\xa0\x71\x15\xe4\x11\xbd\xf1\x84\x72\x1d\x40\xd4\xf3\x03\xd8\x33\x34\xd0\x17\xe3\x81\x31\x9b\x1d\xf7\x03\x18\xd4\x01\xec\x5b\x1a\xf0\x3b\xa2\x68\x62\x1c\xbd\xf0\x75\x1d\xc0\xce\xb4\x81\xa1\x94\x42\x7a\x9c\x32\x3f\x80\xf6\xb8\xb5\xbf\x72\x4c\xb9\x9e\x28\x2d\x29\x9f\x2e\xa2\x18\x5c\xc1\xd1\x0d\xa0\x1f\x83\xab\x9f\x84\x5b\x9b\x2d\x6f\x61\xd6\x9e\x00\xd6\xe8\xf6\x8a\x19\x8f\x02\xc8\x78\xbf\x31\x59\x95\x6e\x39\xb6\x75\x5a\x26\x94\x11\xa6\x0e\xab\xd2\xf7\xdb\xde\x95\x2c\x67\x6d\xdb\x31\x5d\xce\xb6\x22\xdb\xc2\xcc\xdd\xb6\xe7\xeb\xba\x44\x5b\x2c\xcf\x09\xf3\xaa\x6e\xa3\x8f\x2b\x73\x76\x04\xd7\xa0\xfa\xcb\x49\x7b\x97\x47\xd4\x19\x7c\x9b\x3a\x27\x30\xda\xb8\x2f\x3f\x8f\xf1\x47\x79\x0e\xa2\x8f\xaf\xb5\xe1\xb1\xd7\x3f\x6a\x5b\xa2\x55\x4f\x68\x55\xcf\xb2\x48\x07\xdb\xb6\xc1\x9e\x6d\x3c\xb1\x15\xb1\x58\x44\x75\x1d\x40\x33\xeb\xd7\x3b\x3b\xd7\x79\x78\x47\xee\x3c\x5b\x46\x9b\x71\xbb\x82\xa2\x89\xad\xd1\xb3\x57\x2d\xb4\x2d\xa4\x23\x8e\x13\x62\x15\xb2\x6c\xd1\xbe\x7a\xe3\xc3\xb8\x23\xe6\x76\x96\xa7\xf1\x9b\xd3\x5f\x21\x0f\x44\xc4\x10\xad\x14\xda\xc5\x44\x31\xf4\xf7\xa4\x7e\x8e\x68\x67\x75\xdb\x45\xee\x28\x83\x99\x02\x2c\x4a\x3d\x8f\x81\x0b\x0d\x3a\x47\x50\xa4\xc0\xd0\xa6\x61\xc4\xb1\x09\x53\xae\x57\x8d\xae\x9d\x65\xdb\xbd\x73\x70\x9b\x80\xf6\x78\xaf\x4b\xae\x02\x5b\xd3\xbd\x65\x8e\x43\xf7\xce\x72\x9b\x62\xdf\xd2\x4e\xfd\x23\x55\x05\xd1\x49\x8e\x29\xe8\x79\xb9\x6e\xa2\x51\xd8\x3b\xda\x46\xcf\x5e\x79\xd1\x7e\x1b\x6d\x3a\xe2\xee\xc1\x6c\x9a\xdb\x5e\xb7\xdb\xeb\x84\xcb\x17\xc1\xa2\x6e\xf5\xbf\xc3\x1e\x57\xb9\x5f\xeb\x8d\x77\x42\xef\x58\xb6\xcf\xb1\xfa\x19\xdf\x4c\x6b\x4a\x7b\x8c\xbf\x0a\xa5\xe8\x03\x43\x60\x42\x94\xca\x54\xcd\x0b\x33\x8a\x02\x58\xff\x5d\x2b\xd4\xed\x6e\xbb\x9a\x2f\x34\xe8\x76\xe1\x7e\x78\x35\x8c\xe1\x86\x7e\x69\x18\xe6\x6b\xdc\xfc\x00\xc7\xc6\x79\x8c\xa5\x76\x9c\xb6\x01\x74\x4e\x55\x08\x23\x44\xc8\xb5\x2e\x55\xdc\xed\x4e\xa9\xce\xab\x87\x30\x11\x45\x77\x2a\xca\x1c\xe5\x67\xb5\x19\x50\xa5\x2a\x54\xdd\x37\x67\x83\x70\xf3\x00\xbb\x35\xc6\x7e\xbf\xf7\x66\xb0\xff\xea\x2a\x20\x3e\xdf\x7b\xf3\xdf\x09\xbe\x7c\x34\x63\x7a\x43\xa5\xd2\x5e\xcf\xf7\xc3\x8f\xa8\x73\x91\x7a\x3d\xdf\x71\x3a\x34\x83\xa9\xd0\x26\xb4\x08\xcd\xcf\x3e\xcf\x0f\xef\xaa\x62\x58\x69\xcf\x7f\x6b\x3d\xff\x3a\x87\x9e\xfd\xc5\xa0\xc3\x6b\xf3\xda\xc8\x3c\x77\x09\x88\xad\xfb\xbf\xb3\x00\x9e\x08\xd7\xd0\x73\x03\x63\xf0\x9d\x4e\xbd\xd4\x65\x37\xf3\xfb\x1c\x21\x21\x8c\xc1\x03\x32\xf1\x04\x19\xa1\x4c\xc1\x13\xd5\x79\x6c\xe0\x36\xa4\x63\xde\x88\xff\xb1\xa0\x73\x30\x49\x6b\x2a\xb8\x97\xf1\x00\x64\x32\x93\x01\x10\x39\x55\x3e\x2c\x40\xa2\xae\x24\x87\x8c\x87\xa4\x2c\xd9\xdc\x6b\x79\xdf\x42\xfd\x76\xc9\x05\xdf\xfa\xef\x8f\x65\x9c\x39\x05\x9b\x69\x0c\x97\x84\x9b\x8e\x24\x91\xa4\x50\x4a\x51\xa2\xd4\x73\x78\x69\xd7\x7c\x09\x22\x83\x8a\xa7\x98\x51\x8e\xe9\x32\xe3\x51\x2e\x2a\x96\xf2\x97\x1a\x4a\xc2\x69\x12\x1a\x63\x11\x5e\x12\xc6\xec\xed\xdf\xfe\xfd\x4b\x18\xfb\x64\xd3\x50\xd7\xa6\xf7\x1d\x7f\x45\x1b\x2b\x54\x0a\x15\xc8\x8a\x6b\x5a\x60\x38\x42\x7d\x43\x39\x61\xf4\x6f\x94\x01\x3c\xe5\x34\xc9\x81\x2a\xdb\x3c\x55\x55\x2e\xd5\x86\x87\x39\xbc\xb7\xb5\xf4\xcb\xa8\xf5\x8a\xa7\x9c\x6a\xcf\xd2\x37\x0a\xdd\xe7\x54\x99\x70\x62\x25\xa9\x24\x02\xe5\x10\x85\x91\x2d\xfa\x39\x68\x01\x29\x6a\x94\x05\xe5\x68\x7b\x73\x42\x2a\x85\x40\x78\x0a\x99\xbd\x2c\xa6\x77\xad\x9f\xf3\xa4\x2c\x91\xa7\x5e\x63\x1a\xc7\x83\x68\x12\xc0\x66\x3e\xe8\xc7\x93\x30\x0c\x7d\x73\x57\xd4\x23\x2d\xc1\x66\x97\x10\x85\xf0\xef\x41\xe4\xd4\xce\x3f\x01\x00\x00\xff\xff\xab\x6e\xee\x69\xa0\x11\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xac\x58\x5f\x6f\xdb\x38\x12\x7f\xb6\x3e\xc5\x9c\xef\x76\x2b\xdd\x09\x8a\x1d\xb7\xe9\xc1\x45\x1f\xda\xa6\x5d\x64\xb1\x75\x0e\x9b\x60\xef\x21\xc8\x1d\x18\x69\x64\x71\x43\x91\x2a\x39\xf2\x9f\x1a\xfe\xee\x87\xa1\x6c\x59\x8e\xe3\xd6\x8b\xdb\x02\x4d\xc4\x99\x1f\xe7\x3f\x87\x9c\x9c\x9d\xc1\x3f\x1e\x6a\xa9\x32\xf8\xdd\x05\x41\x25\xd2\x47\x31\x45\xb0\x98\x2b\x4c\xe9\xbf\x84\x8e\x82\x40\x96\x95\xb1\x04\x61\xd0\xeb\x97\x82\x8a\x7e\xd0\xeb\x6f\x00\xfc\xc9\x18\xa9\xa7\xfd\x20\x0a\x82\xbc\xd6\x29\xdc\xa2\xa3\x77\x4a\x4e\x75\x89\x9a\x42\x82\xbf\x6f\x10\xc9\x6d\x04\xab\xa0\x47\xc9\xcd\xa3\xac\xc2\x28\x58\x77\xf0\x37\x4a\xa6\x78\x3d\x43\x9b\x2b\x33\x3f\x71\xcf\xa7\x5a\xa7\xbf\x88\xa5\xa9\x4f\x55\xf2\xce\x5a\xb1\xbc\xce\x2f\xa5\xc5\x94\xae\x72\x91\xe2\x89\x1b\x6f\x97\x15\x2a\xa9\x1f\xdd\x8d\xb1\x84\xd9\x89\xbb\x7e\xfa\xf0\x5e\x92\x3b\x11\xfc\xa1\x10\xfa\x9d\x52\x26\x3d\x11\x3f\x11\x25\xbe\x5f\x12\xba\x77\x16\x7d\xb0\x4f\x36\xeb\x3a\xcf\x1d\xd2\x2f\x26\x7d\x3c\x35\x37\xc8\xa9\xbe\xd6\x57\x7a\x26\x94\x7c\x46\xcd\xa6\x18\x92\x06\x18\xde\xdd\xef\x13\x3e\x08\x87\xab\xa0\xd7\xe3\xff\xbd\x4b\x69\xc7\x00\xfb\x80\x5f\x31\x9d\xc5\xcc\xe4\x20\x8c\x5b\xe6\x6f\x42\xd5\xb8\x5a\x33\x67\x1d\xc3\xd1\xdd\x37\xa8\xb3\x6f\xef\xee\x31\xe4\x09\xe7\x3a\x0f\x87\xd1\x81\xe8\x7d\xc9\x97\x98\x8b\x5a\x51\x83\x0a\x7a\xeb\x27\x61\x21\x5b\xa7\x74\x5a\x39\xf5\xf7\x74\x27\x57\x9a\xd0\xf2\x86\x4b\x41\x02\xa4\x03\x6d\x08\x5c\x5d\x55\xbe\xbc\xe0\x61\x09\x3f\x99\xaa\x40\xfb\xf3\x4d\xd2\x7f\x5e\xe9\xbf\x25\x15\xad\x94\x43\xb5\x67\x67\x70\x7b\x7d\x79\x1d\x6a\x9c\x3d\x1a\x4d\xe2\x91\x30\x82\xcf\xc6\x11\x98\x1c\xa8\x90\x0e\x18\x0f\x22\xa5\x5a\x28\xb5\x84\x4a\x38\x87\x2e\x86\x87\x9a\x80\x0a\xb4\xc8\x46\x39\x53\x22\x15\x52\x4f\xbd\x3c\xf1\x60\x6a\x02\x2c\x1f\x30\xcb\xa4\x9e\x42\x2e\x51\x65\x0e\xe6\x92\x0a\x60\x9c\xc9\x1c\x50\x21\x08\x52\xa1\xc1\x58\xfe\xf5\x82\xe0\x01\xc1\x91\xb1\x98\x81\xd4\x20\xb4\x97\x24\xb7\x76\xc3\x8c\xa3\x01\x99\x0f\xa0\x5a\x36\xdb\xb7\x9e\x43\x66\xd0\x41\x26\xf3\x1c\x2d\x6a\x66\xe7\xd6\x94\x50\x57\x8e\x2c\x8a\x32\x81\x77\xae\xb1\x0b\x2c\x3a\xce\x52\xbb\xf3\x85\x03\x59\x56\x0a\xb9\xfd\x08\x92\x46\xb3\xd3\xdb\xc0\x85\x91\x17\xcc\xb6\x55\x42\xcb\x14\xe6\xec\xae\x97\xb4\x15\xed\x01\x09\x5c\x11\x38\xc4\xd2\x01\x19\x76\x63\xab\x87\x85\x99\xda\x3e\x55\xc1\x19\xac\xac\xa9\xc4\x54\xd0\x36\x64\x54\x20\x3c\x4a\x9d\x75\x2a\x04\x72\x25\xa6\x1c\x0b\xe7\xed\x01\x5a\x56\xe8\x20\xb5\x28\x36\x89\xdf\xd9\xd9\x64\x43\x90\xcf\x97\x97\x57\x19\xa9\x09\xae\x60\x2e\xbc\xfd\xe2\x41\x21\x1b\x97\xcb\x69\x6d\x11\x38\x3d\xf3\xc2\xe3\x05\x35\x7a\xda\xfc\x96\x28\xb4\x63\xb5\x54\x34\xbe\xb6\x51\x4e\x8d\x26\x5c\x10\x67\xac\x30\x73\x90\x04\xa5\xa8\x1c\x18\x4d\xc6\xbb\x69\xe6\x7a\x7b\x2a\xd8\xcd\x7d\xaf\x93\x5d\x81\xef\xa5\x8d\xad\xdb\x94\xb3\x4f\x3f\xd7\x4b\xe3\x69\x9b\x6b\xa9\x77\x75\xe0\x36\x55\x3e\x13\x16\x32\xc4\xea\xe3\x97\x5a\x28\xae\x76\x07\x6f\xe1\xee\xfe\xb2\x4b\x6a\x8a\xdb\x2f\x25\x49\x74\x41\x6f\xa5\xa5\x8a\xc1\xff\x20\x5b\x23\x9f\xd4\xd5\x30\x86\x61\x67\x29\x35\x8d\xce\xf9\xbc\xc3\xee\xab\x65\x0e\x92\x57\x31\xf8\x1f\x2d\x29\x57\x46\x30\x6e\x90\xbc\x8a\x62\xd8\x5f\xb5\xa0\x7e\x81\x4a\x99\x7e\x0c\xed\x47\xcb\x2a\xc5\x23\x86\x77\xf7\x52\x53\x0c\xc3\x41\x14\xc3\x01\xa1\x85\xfe\x78\x37\x62\x32\x5b\x7c\x1e\xc3\x68\x1d\xc3\x21\xa5\x05\xbf\x17\x4e\xa6\xcc\x18\x24\xaf\xd6\x31\x3c\x59\xb6\x30\xb4\xd6\xd8\x50\x4b\x15\xc5\xd0\xfd\xee\xd8\x57\xdd\x49\x4d\xf7\x8e\x38\x35\xab\xe1\x18\xfa\x46\x63\x3f\x86\xf3\x31\xf4\x69\x6e\xfa\x6b\x36\x79\x0f\xb3\xe5\xc4\xb0\x45\x77\x35\xe6\x7a\x18\x43\xae\xcf\x5b\x92\xcf\xd2\x95\xc6\x6e\x9e\x1a\x87\x72\xa1\xdc\xf3\x59\x39\x8f\xba\xdc\x4d\x5a\x2e\xba\xb4\x63\x79\xb9\xd8\xdb\xd9\x4d\xcc\xb2\xdf\xe5\x7c\x3b\x2f\xc3\x3d\x29\xdf\x4b\xcc\xcb\x75\x17\x7d\x3c\x33\x17\x47\x70\x2d\xea\xbc\x59\x74\xad\x3c\x92\x9d\xd1\x1f\xcb\xce\x09\x12\xfd\xbe\xc5\x9f\x27\xf1\xff\x95\xf3\x2c\xfa\xb8\xae\x9d\x1c\x7f\xfc\x87\x5d\xca\x70\xd3\x13\x3a\xd5\xd3\x14\xe9\x68\x9f\x36\x3a\xa0\xdd\xdd\xfb\x8a\x58\xad\x86\xeb\x75\x0c\xed\xea\x7c\xfd\xc4\x72\x2a\x92\x89\x98\x84\xbe\x8c\x76\xdf\xdd\x0a\x1a\xde\xfb\x1a\xbd\x78\xd9\x41\xfb\x42\x3a\xc2\x38\x61\xaf\x43\x95\xaf\xba\x47\xef\xee\x79\xdc\xdd\xf7\x34\xdc\x9d\x28\x9f\xa3\xbf\x41\x3e\xb3\x63\x0c\xc3\x4d\x86\x9e\x62\x86\x63\x38\x3f\x48\xf5\xf7\x04\x3d\xd1\xee\xbb\xc8\x44\x2a\x98\x39\xc0\xb2\xa2\xe5\xd8\xdf\xb3\x7c\xaf\x3a\x51\x62\xe2\xdd\xe0\xe4\x78\x87\xa5\xa6\x4d\xa3\xeb\x7a\xd9\x65\x3f\x09\xdc\x6e\x43\xf7\xfb\xa0\x4b\x6e\x36\x76\x96\x07\x6a\x8e\x43\x0f\x62\xb9\x2f\xe2\x90\xd2\x75\xfd\xb3\x74\xa5\xa0\xb4\xc0\xac\xb9\x3e\x37\x37\x5b\x32\x38\xda\x46\x2f\x5e\x86\xc3\xc3\x36\xda\x76\xc4\xa7\x81\xd9\x35\xb7\x83\x6e\x77\xd0\x09\x9b\xbb\x7a\xb5\xee\xf4\xbf\xe7\x39\x7d\xd7\xff\x56\x6f\x9c\x18\x7a\x42\xd9\x8f\x63\xfd\x67\xdc\x4c\x5b\x91\x3e\x8c\xff\x32\xce\x49\x7e\x2c\x29\x63\x2a\xc7\x55\xf3\x23\x7f\x0d\x63\xd8\xfe\xde\x66\xe8\xec\x6c\x9f\xd5\x5e\x68\xb0\x79\x51\x8f\xe1\x93\x5c\xb4\x12\x96\x5b\xdc\xf2\x19\x19\x3b\xe6\x31\x29\xeb\x20\xe8\x12\xfc\x43\x2f\x81\x1b\x44\x28\x88\x2a\x37\x3e\x3b\x9b\x4a\x2a\xea\x87\x24\x35\xe5\xd9\xd4\x3f\xb0\x7e\x77\xbb\x0f\xe9\x5c\x8d\xee\xec\xf5\xc5\x28\xd9\x0d\x08\x57\x4c\x3c\x3f\x1f\xbc\x1e\x1d\x4e\x05\x25\x8c\xdf\x1e\x4c\x41\x13\xa3\x3f\x2e\x9a\xc1\xe3\x93\xb4\x8e\xc2\x41\x14\x25\x9f\xfd\x83\x3e\x1c\x44\x41\xd0\x93\x39\x4c\x0d\xf1\xd6\x32\xe1\x41\x38\x8c\x92\x49\x5d\x5e\xd7\x14\x46\x6f\x3c\xe7\x2f\x6f\x61\xe0\x67\x28\x4a\x3e\xf2\x6b\x23\x0f\xfb\x0d\x60\xec\xd9\x3f\xcc\x62\x98\x0b\x4d\x30\xe8\xc7\x4c\x88\x82\xde\x3a\x68\x47\x94\xae\xe7\xb7\x05\x42\x2a\x94\x82\x07\x54\x66\x0e\xb9\x90\xaa\x19\x30\xc6\x0c\xf7\x5b\x7a\xfc\x46\xfc\x9b\x07\xbd\x05\x76\x9a\x9f\xa1\x61\xae\x63\xb0\xe9\xcc\xc6\x20\xec\xd4\x45\xb0\x02\x8b\x54\x5b\x0d\xb9\x4e\x44\x55\xa9\x65\xd8\xe1\xbe\x81\xf5\x9b\x46\x16\xfc\xd1\x7f\xff\x69\xf6\x71\x14\xbc\xa7\x63\xf8\x20\x34\x77\x24\x8b\x22\xf3\xcf\x7f\xb4\xb4\x84\x17\x5e\xe7\x0b\x9e\x14\x6a\x9d\x61\x2e\x35\x66\x8d\xc7\x37\x85\xa9\x55\xd6\x0e\x1f\x09\x13\xcb\xe4\x83\x50\xca\x9f\xfe\xfd\xbf\x08\x08\xa5\x7e\xf5\x6e\xb8\x8f\xdc\xfb\x8e\x0f\x97\x7e\x96\xab\x1d\x3a\xb0\xb5\x26\x59\x62\x72\x83\xf4\x49\x6a\xa1\xe4\x57\xb4\x31\xcc\x0b\x99\x16\xdf\x1c\x33\x3b\x53\xa6\xd4\x92\xc2\xee\x10\x39\x86\x5b\x1e\x18\xa5\x03\xe1\x53\xc2\xb3\x86\xd4\x30\x4c\x86\xbe\xe8\x97\x3c\x82\x64\x48\x68\x4b\xa9\xd1\xf7\xe6\x54\xd4\x0e\x41\xe8\x0c\x72\x7f\x58\xb8\x77\x6d\x9f\xf3\xa2\xaa\x50\x67\x61\x4b\xba\x1b\x8f\x86\xf7\x31\xec\xd6\xa3\xf3\xf1\x7d\x92\x24\x11\x9f\x15\xf7\x28\xab\x66\x52\x4d\x85\x43\xf8\xeb\x68\xb8\x1f\x21\xa3\x67\x68\x69\x22\x26\xee\xf9\x11\xb8\x1d\x74\xa5\x03\x5c\x88\xcd\x90\xd9\x5c\x1e\x20\x9c\xff\xde\x4e\x7d\x31\xe0\x22\xc5\x8a\x78\x04\xf2\xb1\x14\xd0\xff\x52\x4b\x24\x98\x88\x49\xdf\xcb\x6b\xc6\x55\xa9\x1d\x71\xba\x4d\x0e\x7d\x27\xa7\x5a\x28\xc5\xf3\x0d\xa3\x12\xf8\x59\xcc\xc4\x4d\x6a\x65\x45\xde\x53\x61\xfd\xf8\x98\x1a\xb4\x29\x02\x57\x2d\x1b\xbb\x9d\x82\x0d\x34\x0a\x8c\xde\xce\xde\xb9\xb1\xde\xa8\xaa\xb6\x95\x71\xb8\x3f\xad\xa3\xe4\xd1\x9c\x7d\xe1\x8a\x4a\x82\xa0\x97\x1a\xed\x08\xbe\x68\xa1\xa1\xf6\xd7\x00\xbc\x85\xc1\xe2\x75\x9e\x0e\x06\x83\xc1\x90\x23\x78\x6d\xe5\x94\x0b\x41\x2d\xc7\x9e\xf3\x4f\xcf\xd9\xe4\x04\xca\xe5\xa7\xe6\x0d\xbd\x7d\x4b\x07\xbd\x05\x1f\xf4\xdf\xc2\x96\x13\xfa\x2b\x7a\xb3\xe0\x09\xfc\x41\x92\x0b\x59\x65\x14\x45\x41\x6f\xc9\xf0\x45\xb2\xc9\x44\xb8\x6d\x2e\x7c\x42\xae\xf3\xb0\x7d\xa1\x7b\xec\x57\xc6\x2e\x77\x7f\xfc\x08\xa3\x64\x8b\x88\xf6\xda\x4c\x47\xa3\xd7\xf6\x75\xd7\x68\xbc\xaf\xfb\xbd\xa6\x89\x21\xd3\x53\x6f\x85\xe3\x39\xd5\x37\x9e\xc5\xa6\xf1\xfc\xb0\x68\x3a\x4f\xec\xb7\xfb\xfe\xb3\x0e\xfe\x17\x00\x00\xff\xff\x9b\x0e\x04\x59\xf9\x14\x00\x00"), }, "/src/reflect/swapper.go": &vfsgen۰CompressedFileInfo{ name: "swapper.go", - modTime: time.Date(2018, 4, 6, 18, 15, 56, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 400792100, time.UTC), uncompressedSize: 834, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x52\x4d\x8f\xd3\x30\x10\x3d\x7b\x7e\xc5\x23\x42\x28\xd6\x56\x69\xf7\x5a\xa9\xdc\x00\xad\x58\xd8\x43\x25\xee\x6e\x3a\x6e\x6c\x5a\xdb\xb2\x9d\x16\x68\xf3\xdf\x91\x93\xb2\x95\x40\x5a\x2d\x87\x48\x93\x79\x6f\x3e\xde\x1b\xcf\xe7\xb8\xdb\xf4\x66\xbf\x85\x4d\x44\x41\xb5\xdf\xd5\x8e\x11\x59\xef\xb9\xcd\x44\xe6\x10\x7c\xcc\xa8\x76\x26\x77\xfd\xa6\x69\xfd\x61\xbe\xf3\xa1\xe3\x68\xd3\x2d\xb0\xa9\x22\xd2\xbd\x6b\xb1\x3e\xa9\x10\x38\xd6\x69\x6f\x5a\x86\x71\x99\xa3\x56\x2d\x9f\x07\x89\x82\xd7\x66\x06\x5b\xd2\x12\x67\x12\x47\x2c\x57\xf8\xa6\xf6\x3d\x3f\xe9\xa9\x42\x92\x30\x1a\xc7\xe6\xb3\x71\xdb\x5a\xe2\xcd\x0a\xeb\xb1\xd1\x99\x84\x08\xca\x99\xb6\x7e\x37\xf2\x3f\xc4\xe8\xe3\xf9\x0b\xe7\xce\x6f\x97\xa8\xae\x53\xab\x19\x4a\xe1\xf2\xb9\xc1\x20\x49\x0c\x24\xe6\x73\x7c\x54\x29\x23\xa8\xdc\x41\xfb\x88\x71\x56\x82\xd7\x48\xe6\x17\x63\x01\xe5\xb6\xb8\x6f\xf0\xd5\xe7\xce\xb8\x1d\xb2\x47\x3a\xa9\xd0\x90\x38\x3e\xb2\x2b\x5b\xf6\xc6\xe5\xfa\xd8\x3c\xb2\xab\xa5\x24\x91\x4e\x26\xb7\x1d\x46\xf4\x4c\xa2\x55\x89\xb1\x58\x92\x10\x91\x73\x1f\xdd\x3f\x5a\x31\x2d\x5f\x5d\x6d\x5d\xe2\x8f\x3f\x5b\xfe\x01\xdf\xe7\xb2\x4a\x54\x6e\xc7\x95\xc4\x70\xed\x77\xff\x42\x3f\x12\xa2\x18\x65\x8a\x43\x0b\x5c\x2e\xb0\x53\x34\x02\xe2\xf5\xc3\x0a\x7d\xa0\xf1\x1b\x48\xa8\xa2\xd4\xa6\xe6\xa1\x9c\xcd\xa9\xfd\xd3\xc6\x72\x9b\xaf\x97\x69\x3e\x71\xae\xab\xb7\x2a\x46\xf5\xb3\x14\x7a\xad\x5f\x41\xf7\x5a\x27\xce\x95\x2c\xa4\x5a\xd2\x0b\x7a\x8c\x9e\x4c\x36\x12\xef\x57\x93\xb3\x97\xcb\x94\xb2\xb7\xd4\x28\xf0\xbf\xf4\x15\x79\x06\x77\x2b\x78\xad\x49\x08\x7b\x0b\xf3\x21\x14\x05\xaa\x79\x28\x95\xb5\x29\x6c\xd5\xac\x39\x5f\xff\x67\xcf\x90\x95\x7f\x61\x76\x86\x7c\x08\xe3\xeb\x1a\xe8\x77\x00\x00\x00\xff\xff\xf3\x76\x65\x45\x42\x03\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x94\x52\x4d\x8f\xd3\x30\x10\x3d\x7b\x7e\xc5\x23\x42\x28\xd6\x56\x69\xf7\x5a\xa9\xdc\x00\xad\x58\xd8\x43\x25\xee\x6e\x3a\x6e\x6c\x5a\xdb\xb2\x9d\x16\x68\xf3\xdf\x91\x93\xb2\x95\x40\x5a\x2d\x87\x48\x93\x79\x6f\x3e\xde\x1b\xcf\xe7\xb8\xdb\xf4\x66\xbf\x85\x4d\x44\x41\xb5\xdf\xd5\x8e\x11\x59\xef\xb9\xcd\x44\xe6\x10\x7c\xcc\xa8\x76\x26\x77\xfd\xa6\x69\xfd\x61\xbe\xf3\xa1\xe3\x68\xd3\x2d\xb0\xa9\x22\xd2\xbd\x6b\xb1\x3e\xa9\x10\x38\xd6\x69\x6f\x5a\x86\x71\x99\xa3\x56\x2d\x9f\x07\x89\x82\xd7\x66\x06\x5b\xd2\x12\x67\x12\x47\x2c\x57\xf8\xa6\xf6\x3d\x3f\xe9\xa9\x42\x92\x30\x1a\xc7\xe6\xb3\x71\xdb\x5a\xe2\xcd\x0a\xeb\xb1\xd1\x99\x84\x08\xca\x99\xb6\x7e\x37\xf2\x3f\xc4\xe8\xe3\xf9\x0b\xe7\xce\x6f\x97\xa8\xae\x53\xab\x19\x4a\xe1\xf2\xb9\xc1\x20\x49\x0c\x24\xe6\x73\x7c\x54\x29\x23\xa8\xdc\x41\xfb\x88\x71\x56\x82\xd7\x48\xe6\x17\x63\x01\xe5\xb6\xb8\x6f\xf0\xd5\xe7\xce\xb8\x1d\xb2\x47\x3a\xa9\xd0\x90\x38\x3e\xb2\x2b\x5b\xf6\xc6\xe5\xfa\xd8\x3c\xb2\xab\xa5\x24\x91\x4e\x26\xb7\x1d\x46\xf4\x4c\xa2\x55\x89\xb1\x58\x92\x10\x91\x73\x1f\xdd\x3f\x5a\x31\x2d\x5f\x5d\x6d\x5d\xe2\x8f\x3f\x5b\xfe\x01\xdf\xe7\xb2\x4a\x54\x6e\xc7\x95\xc4\x70\xed\x77\xff\x42\x3f\x12\xa2\x18\x65\x8a\x43\x0b\x5c\x2e\xb0\x53\x34\x02\xe2\xf5\xc3\x0a\x7d\xa0\xf1\x1b\x48\xa8\xa2\xd4\xa6\xe6\xa1\x9c\xcd\xa9\xfd\xd3\xc6\x72\x9b\xaf\x97\x69\x3e\x71\xae\xab\xb7\x2a\x46\xf5\xb3\x14\x7a\xad\x5f\x41\xf7\x5a\x27\xce\x95\x2c\xa4\x5a\xd2\x0b\x7a\x8c\x9e\x4c\x36\x12\xef\x57\x93\xb3\x97\xcb\x94\xb2\xb7\xd4\x28\xf0\xbf\xf4\x15\x79\x06\x77\x2b\x78\xad\x49\x08\x7b\x0b\xf3\x21\x14\x05\xaa\x79\x28\x95\xb5\x29\x6c\xd5\xac\x39\x5f\xff\x67\xcf\x90\x95\x7f\x61\x76\x86\x7c\x08\xe3\xeb\x1a\xe8\x77\x00\x00\x00\xff\xff\xf3\x76\x65\x45\x42\x03\x00\x00"), }, "/src/regexp": &vfsgen۰DirInfo{ name: "regexp", - modTime: time.Date(2018, 4, 20, 9, 40, 48, 439830618, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 425782400, time.UTC), }, "/src/regexp/regexp_test.go": &vfsgen۰FileInfo{ name: "regexp_test.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 426780200, time.UTC), content: []byte("\x2f\x2f\x20\x2b\x62\x75\x69\x6c\x64\x20\x6a\x73\x0a\x0a\x70\x61\x63\x6b\x61\x67\x65\x20\x72\x65\x67\x65\x78\x70\x0a\x0a\x69\x6d\x70\x6f\x72\x74\x20\x28\x0a\x09\x22\x74\x65\x73\x74\x69\x6e\x67\x22\x0a\x29\x0a\x0a\x66\x75\x6e\x63\x20\x54\x65\x73\x74\x4f\x6e\x65\x50\x61\x73\x73\x43\x75\x74\x6f\x66\x66\x28\x74\x20\x2a\x74\x65\x73\x74\x69\x6e\x67\x2e\x54\x29\x20\x7b\x0a\x09\x74\x2e\x53\x6b\x69\x70\x28\x29\x20\x2f\x2f\x20\x22\x4d\x61\x78\x69\x6d\x75\x6d\x20\x63\x61\x6c\x6c\x20\x73\x74\x61\x63\x6b\x20\x73\x69\x7a\x65\x20\x65\x78\x63\x65\x65\x64\x65\x64\x22\x20\x6f\x6e\x20\x56\x38\x0a\x7d\x0a"), }, "/src/runtime": &vfsgen۰DirInfo{ name: "runtime", - modTime: time.Date(2018, 8, 25, 22, 2, 53, 555853579, time.UTC), + modTime: time.Date(2021, 4, 5, 14, 42, 28, 862250700, time.UTC), }, "/src/runtime/debug": &vfsgen۰DirInfo{ name: "debug", - modTime: time.Date(2018, 4, 20, 9, 43, 49, 192511745, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 462781500, time.UTC), }, "/src/runtime/debug/debug.go": &vfsgen۰CompressedFileInfo{ name: "debug.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 463781200, time.UTC), uncompressedSize: 298, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\xce\xb1\x4e\x03\x31\x0c\xc6\xf1\xb9\x7e\x8a\x6f\x2c\x02\x9a\x34\xa5\x3c\x00\x0c\x9d\x8a\x10\xf0\x02\x49\xce\x1c\xa6\x77\x6e\x75\x71\x24\x2a\xd4\x77\x47\xbd\x0e\x87\xd8\xf0\xe2\xe1\x2f\xff\x64\xe7\x70\x9d\xaa\x74\x0d\x3e\x0b\xd1\x21\xe6\x5d\x6c\x19\x0d\xa7\xda\x12\xbd\x57\xcd\x28\x6c\x9b\xc7\x67\x1e\x32\xab\xcd\x45\x6d\x15\xae\x30\x2e\x7c\xd3\xcc\x39\x3c\xed\x0d\xd2\x1f\x3a\xee\x59\x8d\x9b\x05\x5e\xd8\xea\xa0\x10\x15\x93\xd8\x9d\xef\x4d\xb4\x5d\xd0\x6c\xb8\x84\xa5\xf7\x74\x9a\xf0\x6d\xfc\x7a\xb5\x98\x77\xf3\x74\x34\x2e\x67\x7a\xf4\xff\xad\x3b\x87\xb7\x0f\xfe\x1b\x20\x05\x4b\x6c\x1e\xb0\x57\xdc\xdf\xdd\x26\x31\x94\x63\x31\xee\xcb\x0d\xc2\xda\x63\x3b\x96\x55\xf8\x5d\xa6\x57\xc3\xda\x5f\x86\x4e\xf4\x13\x00\x00\xff\xff\xad\x79\xbd\xd2\x2a\x01\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x94\xce\xb1\x4e\x03\x31\x0c\xc6\xf1\xb9\x7e\x8a\x6f\x2c\x02\x9a\x34\xa5\x3c\x00\x0c\x9d\x8a\x10\xf0\x02\x49\xce\x1c\xa6\x77\x6e\x75\x71\x24\x2a\xd4\x77\x47\xbd\x0e\x87\xd8\xf0\xe2\xe1\x2f\xff\x64\xe7\x70\x9d\xaa\x74\x0d\x3e\x0b\xd1\x21\xe6\x5d\x6c\x19\x0d\xa7\xda\x12\xbd\x57\xcd\x28\x6c\x9b\xc7\x67\x1e\x32\xab\xcd\x45\x6d\x15\xae\x30\x2e\x7c\xd3\xcc\x39\x3c\xed\x0d\xd2\x1f\x3a\xee\x59\x8d\x9b\x05\x5e\xd8\xea\xa0\x10\x15\x93\xd8\x9d\xef\x4d\xb4\x5d\xd0\x6c\xb8\x84\xa5\xf7\x74\x9a\xf0\x6d\xfc\x7a\xb5\x98\x77\xf3\x74\x34\x2e\x67\x7a\xf4\xff\xad\x3b\x87\xb7\x0f\xfe\x1b\x20\x05\x4b\x6c\x1e\xb0\x57\xdc\xdf\xdd\x26\x31\x94\x63\x31\xee\xcb\x0d\xc2\xda\x63\x3b\x96\x55\xf8\x5d\xa6\x57\xc3\xda\x5f\x86\x4e\xf4\x13\x00\x00\xff\xff\xad\x79\xbd\xd2\x2a\x01\x00\x00"), + }, + "/src/runtime/fastrand.go": &vfsgen۰CompressedFileInfo{ + name: "fastrand.go", + modTime: time.Date(2021, 3, 28, 19, 1, 23, 630000000, time.UTC), + uncompressedSize: 444, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x44\xd0\x4f\x6b\xdc\x30\x10\x05\xf0\x73\xf4\x29\x1e\x3e\xd9\xfd\x63\x93\xe4\x56\x72\x6b\x69\xe8\xa1\xe4\x52\xe8\x79\x6c\xcf\x5a\xb3\x1e\x49\x46\x1a\x25\x2c\xa5\xdf\xbd\x68\xb3\xd0\x9b\x40\xbc\x37\xbf\x99\x69\xfa\x38\x57\xd1\x15\xe7\xe2\xdc\x41\xcb\x4e\x1b\x23\xd7\x68\x12\xd8\x39\x09\x47\xca\x86\x6e\x13\xf3\x75\x1e\x97\x14\xa6\x2d\x1d\x9e\xf3\xb9\xfc\x7f\x9c\x4b\xe7\xdc\xa9\xc6\x05\x27\x2a\x96\x29\xae\xfd\x80\x2a\xd1\x1e\x1f\xf0\xc7\xdd\x4d\x13\x7e\x44\x98\x67\xd4\xa3\x58\x66\x0a\x30\x2f\x05\x2d\x61\x92\x22\xa4\x40\xc2\xa1\x1c\x38\x1a\xaf\x78\x13\xf3\xa0\x6b\x6e\xa9\xc5\x52\x00\xe9\x96\xb2\x98\x6f\x41\x32\xd4\xc2\x05\xb3\x18\x02\x45\x39\xaa\x52\x6b\xf9\x84\xb9\x1a\xc4\x5a\x9b\xca\xce\x7a\x81\x25\xcc\x8c\xa2\xe9\x8d\xf3\xb5\xce\x3c\x45\x2c\xa4\x2a\x71\xc3\x4f\x32\x3f\x36\x6c\x0a\xfd\x30\x5e\xff\x7f\xbd\x7c\x7b\xe9\x23\xbf\xee\x29\x1a\xed\xc6\xc3\x17\xfc\x66\x14\x9f\xaa\xae\x78\xe5\x2c\xa7\xcb\xbb\x40\x0c\xb4\x58\x25\xd5\x4b\x9b\xd7\xd6\xe6\x0c\x8a\x2b\x3c\x95\x9b\xbd\x48\x10\xa5\x8c\x55\x8a\x65\x99\x6b\x43\x8e\xee\x2e\xb3\xd5\x1c\x6f\xe7\xe9\xcf\x65\x7c\xd6\x34\x93\x8e\xcf\x6c\x7d\xd7\x4c\xdd\x30\x7e\x25\xd5\xbe\x7b\xb7\x75\xc3\xf8\x5d\x13\x59\x3f\xe0\x03\xfa\xfb\xa7\xa7\xc7\x07\x7c\xc6\xfd\x30\xb8\xbf\xee\x5f\x00\x00\x00\xff\xff\xcd\xa3\xdf\x8a\xbc\x01\x00\x00"), }, "/src/runtime/pprof": &vfsgen۰DirInfo{ name: "pprof", - modTime: time.Date(2018, 4, 20, 9, 43, 49, 197640393, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 491782100, time.UTC), }, "/src/runtime/pprof/pprof.go": &vfsgen۰CompressedFileInfo{ name: "pprof.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 492779700, time.UTC), uncompressedSize: 660, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x92\x4f\x6b\xc2\x40\x10\xc5\xcf\x99\x4f\x31\xe4\xb4\x69\x45\xfb\x15\x8a\x97\x1e\xda\x22\xb5\xa5\x07\xf1\xb0\x26\x13\xd9\x9a\xfd\xc3\x64\x56\x2b\xe2\x77\x2f\x6b\xa4\x2c\x18\x0a\x3d\xee\xcc\xfb\x0d\xef\x3d\x76\x36\xc3\xfb\x4d\x34\x5d\x83\x5f\x3d\x40\xd0\xf5\x4e\x6f\x09\x43\x60\xdf\x02\x18\x1b\x3c\x0b\x2a\x28\x4a\xe3\x4b\x28\xca\xfe\xe8\xea\x12\x2a\x00\x39\x06\xc2\x05\xfb\xd6\x74\x84\xbd\x70\xac\x05\x4f\x50\x38\x6d\x09\xd3\xdb\xb8\x2d\x14\x36\x22\x22\x26\x66\xfa\x12\x85\xbe\xa1\xb0\x69\x80\x56\x87\x95\x71\x42\xdc\xea\x9a\x4e\xe7\xf5\x6a\x1d\x8d\x93\x20\x0c\x45\xed\xa3\x13\x6c\xa3\xab\x55\x85\xc6\x09\x14\x07\x36\x42\xc3\xc4\xf8\xe9\x67\x7a\xf1\x24\xad\x2a\x24\x66\xcf\x70\x06\x48\x5b\x54\x01\xef\xae\x8e\x2a\xbc\xe8\xde\xbd\x3a\x60\x06\x35\xb4\x89\xdb\x0c\x4d\x8e\x99\x24\xb2\x43\x67\xba\xf1\x43\xf3\x64\x68\xf0\x92\xc9\x1f\xc6\xc5\xaf\xda\x92\xaa\xae\xf9\x33\x79\x59\x8e\xeb\x1f\x9b\x46\xed\x75\x17\x09\xb3\x3a\x26\xd8\xef\x4c\x18\x6c\x9e\xc6\xb9\x37\xb2\x7e\x4f\xb7\x68\x0e\x2c\x45\xb3\xcc\x17\x1f\x57\x28\x6f\xe2\xef\xf8\x4b\xf1\x21\xe3\xf2\x9b\x17\xfc\x89\x74\xf8\xf7\xd1\x67\xef\x77\x31\xa8\xcb\xff\x18\xea\xa9\x7e\xf3\xdc\x20\x3f\x01\x00\x00\xff\xff\x14\x4a\xfc\x56\x94\x02\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x94\x92\x4f\x6b\xc2\x40\x10\xc5\xcf\x99\x4f\x31\xe4\xb4\x69\x45\xfb\x15\x8a\x97\x1e\xda\x22\xb5\xa5\x07\xf1\xb0\x26\x13\xd9\x9a\xfd\xc3\x64\x56\x2b\xe2\x77\x2f\x6b\xa4\x2c\x18\x0a\x3d\xee\xcc\xfb\x0d\xef\x3d\x76\x36\xc3\xfb\x4d\x34\x5d\x83\x5f\x3d\x40\xd0\xf5\x4e\x6f\x09\x43\x60\xdf\x02\x18\x1b\x3c\x0b\x2a\x28\x4a\xe3\x4b\x28\xca\xfe\xe8\xea\x12\x2a\x00\x39\x06\xc2\x05\xfb\xd6\x74\x84\xbd\x70\xac\x05\x4f\x50\x38\x6d\x09\xd3\xdb\xb8\x2d\x14\x36\x22\x22\x26\x66\xfa\x12\x85\xbe\xa1\xb0\x69\x80\x56\x87\x95\x71\x42\xdc\xea\x9a\x4e\xe7\xf5\x6a\x1d\x8d\x93\x20\x0c\x45\xed\xa3\x13\x6c\xa3\xab\x55\x85\xc6\x09\x14\x07\x36\x42\xc3\xc4\xf8\xe9\x67\x7a\xf1\x24\xad\x2a\x24\x66\xcf\x70\x06\x48\x5b\x54\x01\xef\xae\x8e\x2a\xbc\xe8\xde\xbd\x3a\x60\x06\x35\xb4\x89\xdb\x0c\x4d\x8e\x99\x24\xb2\x43\x67\xba\xf1\x43\xf3\x64\x68\xf0\x92\xc9\x1f\xc6\xc5\xaf\xda\x92\xaa\xae\xf9\x33\x79\x59\x8e\xeb\x1f\x9b\x46\xed\x75\x17\x09\xb3\x3a\x26\xd8\xef\x4c\x18\x6c\x9e\xc6\xb9\x37\xb2\x7e\x4f\xb7\x68\x0e\x2c\x45\xb3\xcc\x17\x1f\x57\x28\x6f\xe2\xef\xf8\x4b\xf1\x21\xe3\xf2\x9b\x17\xfc\x89\x74\xf8\xf7\xd1\x67\xef\x77\x31\xa8\xcb\xff\x18\xea\xa9\x7e\xf3\xdc\x20\x3f\x01\x00\x00\xff\xff\x14\x4a\xfc\x56\x94\x02\x00\x00"), }, "/src/runtime/runtime.go": &vfsgen۰CompressedFileInfo{ name: "runtime.go", - modTime: time.Date(2020, 2, 8, 19, 36, 47, 229763096, time.UTC), - uncompressedSize: 5926, + modTime: time.Date(2021, 4, 5, 14, 42, 28, 862250700, time.UTC), + uncompressedSize: 10606, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x58\xdd\x72\xdb\xba\xf1\xbf\x26\x9f\x62\xff\x9c\x7f\xcf\x21\x1d\x45\xb2\xd3\x93\x74\x9a\xd6\x17\x89\x4e\xec\xe4\x34\xb6\x3c\x96\xd3\x9e\x99\x34\x93\x81\xc0\xa5\x04\x0b\x04\x58\x00\x94\xac\x78\xf4\x00\x7d\x90\xbe\x58\x9f\xa4\xb3\x00\x3f\x24\x5b\x49\xda\x4e\x79\x23\x71\xf1\xdb\xc5\x62\x3f\xb1\x1c\x8d\xe0\xc9\xac\x16\x32\x87\x5b\x1b\xc7\x15\xe3\x4b\x36\x47\x30\xb5\x72\xa2\xc4\x38\x16\x65\xa5\x8d\x83\x34\x8e\x92\x86\x36\x12\xca\xa1\x51\x4c\x8e\xec\xc6\x26\x71\x1c\x25\x73\xe1\x16\xf5\x6c\xc8\x75\x39\x9a\xeb\x6a\x81\xe6\xd6\xf6\x7f\x6e\x6d\x12\x67\x71\xcc\xb5\xb2\x0e\xce\x27\x93\x29\x9c\x82\xdd\xd8\x21\xfd\xed\xa8\xaf\xae\xc7\x6f\xe1\x14\x12\x02\x07\xda\x58\x97\x95\x90\x68\x88\xda\xca\x4a\xe2\x78\x34\x82\x82\x2d\x11\x0a\x6d\x00\x8d\xd1\x66\x38\xd7\xb1\xdb\x54\x08\x58\x30\x8e\x60\x9d\xa9\xb9\x83\xfb\x38\xfa\xec\xa9\x47\xfe\x27\xde\x06\x4c\xa0\xf5\x18\xeb\x0c\xbd\x09\x35\x8f\xb7\x71\x5c\xd4\x8a\x43\xea\x1a\x9e\xac\x59\x49\xdb\x3f\xc4\x60\xd0\xd5\x46\x81\x1b\x5a\x67\xe2\xed\x23\x8e\x6a\x39\xaf\x98\x5b\x1c\x62\x49\x92\x6e\x0b\xa1\x84\x4b\x33\x5a\xbb\xb5\x57\xcb\x39\xbc\x3c\x85\x5b\x3b\x3c\x97\x7a\xc6\xe4\xf0\x1c\x5d\x9a\xfc\x7f\xe3\x06\x9b\x64\x81\xf0\x3d\x0b\x67\x24\xab\x15\x31\xf5\x22\x6e\xed\x64\x76\x8b\xdc\x5d\x39\x93\x0c\xc0\xef\x14\x64\x05\x72\x2b\xb9\x72\x26\xc9\x0e\xb2\xbf\x21\xf3\x3e\xe2\xf6\xd4\xef\x31\xbb\x85\xd1\xeb\xeb\x10\x2e\x81\x81\x64\x0c\xdf\x35\x81\x13\x34\x48\x3d\x8a\xd8\x47\x23\x60\x2b\x2d\x72\xc8\x91\xe5\xc0\x75\x8e\x80\x52\x94\x42\x31\x27\xb4\x8a\xa3\x15\x33\x80\xc1\xdd\x71\x84\x70\x0a\x3f\xdc\x6c\x2a\x7c\x65\x2d\x1a\x02\xf8\x1d\xee\xb7\x71\xf4\x19\x4e\x01\x3b\x33\x9f\x4f\xae\x27\x93\x9b\x3d\x5f\x54\x46\x73\xb4\xf6\x80\xc5\x9b\x15\x32\xa4\x28\xa0\xc5\x9d\x7a\xdc\x07\x95\x63\x21\x14\xe6\x24\xa2\xf3\xe7\x28\x89\xa3\xad\x47\xaf\x48\x5e\xc3\x12\xa4\xa1\x5a\xb5\x26\x3a\x9f\x5c\xbd\x7d\x73\xfd\xcb\xf4\x73\x50\x27\xc9\xfe\x00\x2b\xf8\xbf\x03\x72\x47\x23\x38\xf7\x1e\xfd\x65\xfa\xd4\x56\xc8\x45\x21\xda\x33\xc0\x8a\xc9\x1a\xc1\xb1\x25\x5a\xa8\x0c\x72\xcc\x51\x71\x1c\xf6\xda\xac\x86\xd3\x26\x58\xe3\x68\x0b\x28\x2d\xc2\xf7\x15\xfb\xb6\x3e\x87\x24\x7b\x57\x51\xf2\xfe\x8c\x05\xab\xa5\x3b\xd7\x46\x6b\x07\xc2\x82\xd2\x6b\x98\x6b\x85\x03\xe0\x4c\xfd\xe8\xa0\x26\x0d\x1c\x30\x0b\x05\x93\x72\xc6\xf8\x12\x98\xda\x94\xda\x90\xd6\xa3\x11\xdc\x4c\x7e\x9e\xbc\x84\x29\x7a\x3d\x19\xcc\xd0\x39\x34\x60\xb5\xac\xc9\xa3\x5e\x22\x62\x8e\xf9\xb0\x4f\xa0\x51\x6d\xcd\x48\x6a\xce\xe4\x68\xae\xfb\x6c\x7a\x6d\x90\x2d\x2b\x2d\x54\x97\x53\xc3\x9f\x71\x56\xcf\xe7\x68\xd2\xac\x43\x8d\x99\x94\x68\x52\xbb\x14\x15\x08\xe5\x32\x48\x2b\x0e\xb5\x50\xae\x72\x66\x00\x85\x90\xd8\x84\xc9\x00\xa4\x50\x48\x98\x01\xe8\x25\xcc\xb4\x96\x5e\xac\x50\x85\x3e\x10\x37\x6d\x3a\x5c\xe2\x3a\x6d\x0c\x6b\x1d\xe3\xcb\x24\x1b\xd2\x96\x69\x62\x2b\x29\x5c\x32\x80\xe4\xaf\x2a\xc9\x86\xef\x54\x8e\x77\x41\x8b\x27\xf0\x2c\x04\x9b\x97\xfc\x8d\x48\x3b\x1e\x40\x92\x0c\xe8\xa7\x60\xd2\xa2\x77\x43\xc5\x8c\xf3\x61\x4c\xcc\xed\x4e\xf5\x2c\x1c\x21\x19\xec\x92\x05\x6d\x39\x29\x48\x85\xd4\x6b\xe0\xd2\xec\xc9\xc9\xd7\x20\x59\x0b\x79\xa4\xff\x4b\xca\x8d\x5e\x25\xaf\x41\x73\x9e\xe3\xac\x0b\x92\xfd\x85\x93\x46\xd8\x00\x9c\xa9\xf1\x81\x33\x6c\xe7\x8d\x01\x54\x1c\x3e\x7e\x6a\xdc\x91\x11\x69\xa7\x72\x1e\x13\xdf\x68\xd4\x72\x9d\x19\x56\xa2\x0d\x31\xe7\x40\x94\x95\xc4\x12\x95\xc3\xdc\xf7\x84\xd0\x4a\x4e\x6f\xed\x30\xee\xa2\xec\x5d\x8b\xa1\x58\xab\xb4\xb5\x62\x26\x71\xb8\xa7\x4a\x10\x9a\xf2\xf0\xb6\xab\xcb\x51\xb3\xdf\x3d\x34\xea\xfc\x10\x08\xf7\x5b\xd8\xc6\xa1\xab\x34\x88\xd0\x56\xee\xbb\x46\xc2\x45\xcb\x9c\xc1\x25\xde\x51\x78\xa6\x05\xbd\x07\x86\x01\x50\x36\xb4\x01\xd6\x4a\xdf\x93\xb9\xd3\xa9\xae\xc6\x10\x9e\x46\xb1\x38\x3a\xa3\x4d\xe8\x39\xa2\x7f\xe1\xdd\xe7\x4e\xd3\xd0\xa2\x33\x0a\x6a\x7a\x5a\xc2\x7b\x0a\x6c\x7a\x84\x72\x71\xf4\x46\x39\xb3\xd9\x95\xd8\xd5\xcd\xb1\x4f\xa4\xee\x55\xe3\x5d\xdf\xaf\xf6\xdb\x14\xaf\x0d\x95\x80\xda\x09\x85\x49\x16\x8a\x3f\xa1\x93\xe0\xf0\xbd\xce\x10\xc2\x29\xb4\x86\x64\x00\x4a\xc8\x6c\xa7\x54\x5f\xbc\xfa\xf5\xea\x7a\x32\x9e\xa6\x2a\xa4\xe7\x7e\x08\x9c\xec\x68\x63\xf9\x02\xf3\xa0\x0e\xa7\x0c\x28\xd9\x12\x53\xbe\x60\xaa\x73\xc0\xa1\x6d\x2d\xba\x1b\x51\xa2\xae\xdd\xc1\x56\x44\xb2\x49\x26\x70\xa9\x2d\xa6\x3c\x83\x6d\x36\x80\xe3\x2c\x8e\xfe\xf8\x94\x77\x9b\x5f\xd6\xe5\xf8\xea\x43\xfa\x75\xed\x2e\xeb\xb2\xb3\xc7\x23\xd8\x43\xe3\x39\xed\x98\xec\xe0\xb6\x4d\xbc\xb8\x0d\x81\x0b\x2c\xa7\x8e\x39\xbb\x13\x05\xd4\x23\x50\xa1\x61\x12\xac\x63\x4e\x58\x27\xb8\x1d\xc6\xd1\x2b\x29\x35\xef\xe3\xe3\xc5\x4f\x30\x1a\xc1\x6c\xe3\xd0\x02\xa3\x25\x46\xe9\xc1\x54\x0e\xd6\x09\x29\x41\x28\xaa\xcf\x71\x74\x43\x1a\x04\xde\xaf\xb3\xa5\xb8\x42\x45\x99\x53\x18\xc4\x3c\x8b\xa3\xe9\xc6\x02\x1c\xde\x4c\xcf\x1c\xf3\xe5\xab\x30\xba\xa4\x46\xe1\xb0\x84\xd4\xd6\x25\xe8\x02\x7e\xbd\xbb\x23\xd6\x19\x4a\xbd\xce\xe2\xe8\xbd\xd6\xcb\xba\xb2\xfb\x62\x54\x5d\xce\xd0\x10\xda\x57\x74\x34\x20\x03\x2c\x8e\x2e\xbc\x4a\x5f\xc5\x97\x61\x39\x8e\xce\x0c\xa2\x7d\xa8\x5e\x8f\xa3\x53\xd8\xd8\x9b\xf2\x82\x09\xd5\x1e\x94\x12\x67\x81\xac\xda\xb7\xeb\x5b\x64\x55\x67\xdb\xff\xc4\xb2\xc4\xd8\xd9\xe9\xdf\xb1\x52\x60\x79\x97\x37\x29\xfb\x90\x45\x28\x10\xb4\x66\x2b\xa6\x6c\x83\x55\xd4\x63\x0f\x63\x95\x56\x4f\x3b\x7c\x80\x5f\xa3\x44\x66\x31\x7f\x04\x37\xed\x82\xd3\xe0\x16\x08\x93\x69\x60\x08\x99\x61\x77\xe5\xfb\x88\xdd\xb1\x65\x6f\x01\x1d\xc0\xc1\xae\xef\xf5\xfa\xa9\xc4\x15\x4a\x28\xc4\x1d\xe6\x4f\xad\xf8\xd2\x96\xb2\xda\x60\xcb\xa5\xcd\xbe\xad\x47\xa3\x28\x1c\x49\xd8\x46\xb3\x9a\xb4\x52\x7a\x1d\x16\xc9\x9c\xdd\xd2\x21\x13\x0e\xe3\x68\x4a\xad\xb7\x31\xcc\xc3\x73\x7a\x69\xb3\x0d\xf8\xf6\xdc\x2b\xd1\x30\x35\xce\x0a\x4c\x71\x74\x31\xad\x98\x7a\x24\xa8\x24\x73\xf6\x27\xb1\x0d\xee\x21\xef\x98\xf1\x05\x06\xe6\x1d\x5e\x4e\xd4\x7d\x66\x0f\x0c\xdc\x2d\xf3\xeb\x9a\x2f\xdf\x32\xbb\x20\x6a\xcf\x5c\x19\x5d\x08\x49\x97\xd8\x59\xcd\x97\xe8\x60\xc1\xec\x02\x1c\x9b\x49\x8c\xa3\xf3\x71\x9f\x91\x3d\xcb\xf9\x18\x4a\x74\x2c\x67\x8e\xc5\xd1\xc4\x2d\xd0\xec\xa9\x49\x10\x4d\xd4\x36\x4b\xfb\x3c\x68\xbc\x78\xce\xcc\x8c\x26\x41\xae\xa5\x44\xfe\xc8\x5d\xd4\xd1\xce\xc7\x8f\x0b\x81\xc2\x3b\xd7\xf2\x50\x52\xad\x29\x2d\x16\xac\xaa\x50\xc1\x7a\x81\x0a\xfa\x9c\xfa\xe7\xdf\xff\x01\x6e\x21\x2c\xb0\x52\xd7\xd4\x92\xde\x33\x7b\x50\x26\xaa\x1c\x68\x94\xa0\x98\x93\xcc\xee\xc9\x4f\x15\x53\xda\x22\xd7\x2a\xb7\x60\x85\xe2\x08\x27\xbf\xff\x1d\x55\xee\x2b\x56\x5b\xf4\x25\xee\xd2\xf6\x06\xf6\xd4\xcb\xd6\x5e\x1f\x9f\x3d\x7f\xf1\xa9\xdf\x88\x0b\xc3\x6b\xc9\x0c\xcc\xea\xa2\x08\x31\x4e\xb7\x6d\xe5\xc8\x9c\x15\x71\x42\x5e\x9b\x60\x25\xea\xdf\xd6\xb5\xeb\xcc\xc1\xc7\x94\xca\xff\xf8\xc9\xb3\xe7\xcf\xb3\xdf\x90\xdc\x66\xb3\x37\x2a\xff\x6f\x37\x6b\x0f\x6e\xe3\xc8\xcb\x86\x5d\xdb\xfc\xf6\x19\xf9\x7e\x7c\xf5\xe1\xcc\xb0\x60\x8b\x42\x6a\xd6\x08\x2f\x5a\x9a\x2e\x60\x7c\xf5\x21\x98\xaf\x4d\x81\xf3\x31\xb5\x7f\x8a\x9e\x56\x24\xdd\x42\xe2\xc8\xdf\x9b\xbb\x5d\x3c\xcd\x87\xc2\x15\x9a\x90\xc4\x3b\xc5\xf2\x41\xee\xc2\x8b\x13\xca\xce\xcb\xba\x9c\x8a\x2f\x38\x96\xcc\xda\x50\x8a\xa8\xa4\x8c\xfd\x4c\x37\x8c\xa3\xd7\x1b\x5a\x85\x8f\x2f\x4e\x3e\xf5\x4d\x2d\xf2\xb4\x9d\x43\x75\xa5\xbe\xf5\x59\x57\xd3\x5b\xc2\xb6\xeb\xb8\xd7\xc8\xf2\xb6\x51\xa6\x25\x1c\xb5\xff\x77\x6f\x30\x53\x74\x67\x42\x31\x29\xbe\xa0\x49\xef\x06\x40\x57\x6e\x87\xa6\x60\x1c\xef\xb7\x0d\x30\x5c\xba\x08\xdd\x2b\xa6\x2b\xf6\xb7\x1a\xbb\x6b\x05\x99\xb5\x56\x78\x57\x69\xe3\x6f\x9b\x02\xa5\x2f\x9a\xb9\xb0\xa4\xef\x1a\xb8\x56\x2b\x34\xd6\xa7\x50\x77\x0b\xfc\x1c\xee\x67\x19\xf8\xfb\x56\x9a\xb5\xd7\x2d\xf8\xe6\xd3\xdd\x07\x8f\x61\xfb\x50\x10\xdd\xeb\xe8\x2a\xb7\x33\xc1\xd0\xcd\xf2\xd0\x08\xb3\x73\xb1\xf4\x23\xc4\x63\x61\x97\xac\xc4\x7e\x44\xfe\xce\xb3\x23\x0c\xda\x03\x92\x98\x33\x6d\xae\xc6\x7b\xea\x78\xe9\x3b\x77\x1f\x25\x24\x99\x84\x06\xf9\x0b\x2c\xaf\x7c\x39\xc3\x6b\xe6\xbc\x96\x70\x0a\xcf\x4f\x9e\xc1\x11\x9c\x1c\x3f\xfb\xa9\xf7\xd9\x6b\xa9\xf9\x72\x07\x9a\x9a\x06\xff\xc0\xb7\x17\xb5\xc3\xbb\x06\xd7\xa6\xc2\x0e\xb6\xb9\x84\xf5\xd3\x80\x5a\xa1\x75\x62\x4e\x00\xaa\x3e\x43\x78\x57\x80\x70\x3f\xda\x6e\x34\x20\xa7\x76\x73\xc5\x80\xdc\x6a\x45\x8e\x06\x72\x4d\x36\xb2\x7a\x10\x2a\xe7\x5a\x58\x04\x83\xa5\x5e\x05\x41\xc0\x75\x49\x1c\xc3\xfd\xc9\x25\xa8\x49\x3d\x26\x9d\xd5\x05\x7c\xfc\x44\xed\x68\x40\xa9\xd4\xdc\xfd\x1b\x05\x0f\x7d\x95\xf8\xfa\x74\xe9\x27\xc7\x6f\x7e\xa0\x38\xf6\x83\x62\xf3\xc2\x75\xb5\xa1\xed\x07\x60\xf7\xa6\xc5\xa4\x27\xec\x0c\x81\xcd\xa8\xea\x07\xc5\x7e\xb4\xeb\xaf\xeb\xef\x35\x5f\x4e\xa6\x37\x0b\x83\xcc\xdf\xc4\x5b\xfa\x07\x25\xbf\xb2\xf2\xe7\x90\x17\x87\x3e\x8c\xd9\x8d\x1d\xde\x2c\xb0\x41\xec\x5a\xcc\xb8\x1b\xc3\x38\x85\xa7\xff\xf4\xd3\x87\x9f\x12\xb2\x8d\xe4\xa9\xd3\x55\x8b\x6a\xa3\x74\xdb\x97\x86\x76\x29\x58\xdd\x8f\x91\x7f\xc1\xf0\x05\x91\x01\x9f\x6b\x40\xb5\x12\x46\x2b\x3f\x1d\x3a\x0d\x9c\x39\xbe\x08\xdb\xd9\x21\xdc\x2c\xd0\x20\x4d\x95\x6b\x84\x05\x5b\xed\x07\x46\xd3\xba\x54\x0e\x4c\xae\xd9\xc6\x76\x19\xdb\xcf\x0a\x73\xed\x4d\xeb\x5d\xfc\xe2\xa7\x87\x23\xad\x87\xf9\xaf\x96\x93\x22\xc5\x0a\x8e\xf6\xaa\xd2\x51\xf8\x9e\x79\x4f\xb3\xbe\x12\x3c\x4d\x1a\xe4\x4b\x3f\xf6\xda\xba\x0a\x65\x28\xe9\xbd\xf2\x27\xc4\xea\x95\x14\x2b\x4c\xf7\xcb\x5b\xbb\xee\x27\xaf\xd4\x36\x1e\xc8\x7a\xd1\xfe\xb8\x8d\x97\x6d\x70\x33\x65\xcb\x02\x2d\x02\x33\x7d\xdb\xf0\xe8\xb5\x61\xd5\x10\x2e\xff\x07\xa3\xf7\x1c\x5d\x98\xb7\x2b\x7e\xa0\x2c\x3e\xae\x80\x85\x50\xb9\x9f\xd3\x76\x0b\x0d\x11\xde\xa9\x42\xf7\xf8\x96\xe2\x07\xf4\xc0\x58\x2b\xae\xa8\xce\x15\xdd\xe2\x4e\xc5\x7b\x50\xd4\x7c\x23\xe8\xa4\x76\x33\xfd\xbf\x02\x00\x00\xff\xff\x81\xb9\x90\xc5\x26\x17\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xcc\x7a\xeb\x72\x1b\x37\x96\xf0\xef\xee\xa7\x38\xe9\xca\x97\x34\x2d\x9a\x94\x32\x89\xbf\x5a\x25\x9a\x2a\x87\x89\x15\x67\x6d\x4b\x65\x39\x3b\x53\xa5\x55\x79\x40\xf4\x69\x12\x16\x1a\xe8\x05\xd0\x94\x18\x8f\x1e\x60\x1f\x64\x5f\x6c\x9f\x64\xeb\xe0\xd2\xdd\xa4\xe8\x5c\xf6\xd7\xaa\x2a\x31\x09\x9c\x3b\xce\x15\xe0\x7c\x0e\x47\xcb\x4e\xc8\x0a\x3e\xd8\x3c\x6f\x19\xbf\x65\x2b\x04\xd3\x29\x27\x1a\xcc\x73\xd1\xb4\xda\x38\x28\xf3\xac\x88\x6b\x73\xa1\x1c\x1a\xc5\xe4\xdc\x6e\x6d\x91\xe7\x59\xb1\x12\x6e\xdd\x2d\x67\x5c\x37\xf3\x95\x6e\xd7\x68\x3e\xd8\xe1\xc3\x07\x5b\xe4\x93\x3c\xe7\x5a\x59\x07\xe7\x17\x17\x57\x70\x06\x76\x6b\x67\xf4\xb1\x5f\x7d\xfe\x76\xf1\x13\x9c\x41\x41\xc0\x61\x6d\xa1\x9b\x56\x48\x34\xb4\x9a\x68\x15\x79\x3e\x9f\xc3\xbb\x35\xc2\x8f\xc6\x68\x03\x5e\x90\x9a\x71\x04\x51\xa1\x72\xa2\x16\x68\x81\x91\xec\x40\x82\x02\x12\xd4\x2c\x77\xdb\xf6\x31\xc6\xc7\x3c\xf3\xdb\x79\x9e\xcd\xe7\xf0\x36\xa8\x16\x81\x88\x88\xd2\x4f\x75\x0b\x75\xa7\xb8\x13\x5a\xc1\xb2\x73\x1e\xd0\xa2\xd9\xa0\x05\xa7\xa1\x12\xd6\x09\xb5\xea\x84\x5d\x03\x71\xb0\xe0\xd6\xcc\x01\x33\xd8\x0b\xe0\x31\x3c\x17\x0b\xb5\xd1\x0d\x68\x53\x09\xc5\xcc\x36\x2e\x9e\x02\xf3\xa8\x9e\xa3\x07\xde\x15\x1d\x44\x0d\xc2\xc1\x9a\x91\x40\x3b\x22\x36\xe8\xd6\xba\x9a\xe5\xd9\x78\xb5\x9c\xe4\x0f\xc1\x42\x17\x3f\x5c\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\xec\x1b\x64\xca\x91\x5a\x4b\x04\xae\x9b\x96\x39\xb1\x94\x48\xc4\xee\x84\x5b\x83\xc1\x5a\x22\x77\x33\x43\xe2\x4e\xc9\x1a\xb0\x46\x83\x70\x87\xd0\x59\x04\x06\x8d\x50\xa2\x61\x12\xac\xeb\x96\xc1\x10\x96\x39\x61\xfd\x89\x10\xe3\xe7\x97\x2f\xbd\x64\xdb\x16\x9f\x5b\x8b\x86\x8c\x1a\x54\xc1\xfb\x16\xb9\xb3\x53\xb8\x5b\x0b\xbe\x26\x8a\xd5\x56\xb1\x46\x70\x26\xe5\x16\x84\xb2\x8e\x29\x27\x98\x43\x10\x0a\x3e\x67\x1e\x99\xc8\x94\x93\x78\xb2\xef\xfd\xff\x83\x2a\x1f\xe9\x5f\xfa\x4f\xa8\x15\x3c\xe4\x39\x9d\x1f\x94\x0e\x9e\x78\xa0\x49\xdc\x29\xd3\x07\x80\x8f\x60\xd0\x75\x46\x81\x9b\x11\xe6\xc3\x23\x8c\xf6\x76\xd5\x32\xb7\x1e\x50\x7a\x8c\xa2\x80\x60\xee\xe7\x9f\x50\x4b\x32\xa1\xe8\xe4\x6a\x26\x24\x56\xe1\xa4\x59\x82\x8a\xc2\x1f\xc0\x8c\x87\xf2\x31\xcf\xde\x0f\xee\x0a\x10\x25\xca\x33\xae\x15\x37\xe8\xfc\xda\xb0\x1a\x08\x63\xb5\xbb\xda\x08\x6b\x85\x5a\xbd\xf6\xee\x92\x34\x98\xcf\x41\x2b\x8c\x3e\x04\x0a\xb1\xc2\x0a\x96\x5b\x78\x99\xb8\x4d\x21\xe2\x05\xaf\x5d\x44\x86\x79\x6f\xd0\x27\x8f\xc5\x9e\xc0\xae\x2b\xc2\xc7\x1e\x1a\xe1\x20\x7c\x02\x4c\x76\xcd\x33\xaf\x2e\x9c\x9e\x41\xd1\x2b\x5e\xe4\x99\xa8\x01\x67\x23\x53\x7c\x76\x06\x4a\x48\x82\x8f\x08\x67\x3b\xfb\xb3\x74\xc6\x79\xf6\x40\x66\x21\x7a\x38\x4b\xe6\x19\xed\x7a\xba\xbd\x31\xcf\x06\xaa\xe9\x7c\x07\x96\x5c\xab\x0d\x1a\x2b\xb4\x3a\x85\x02\x8e\x42\x1a\x81\x23\x28\x28\x74\x94\x90\x53\x50\xda\xf9\x1d\x66\x3d\x5b\x1e\xd9\x26\xf2\xfb\x6c\x77\xcf\xe5\xec\x8c\x9c\x89\x58\x37\x76\xb5\xab\xff\x6f\xb3\xa6\x05\x6e\xe9\xdb\xae\x04\xc4\x84\x5b\xa2\xcb\xac\xa7\x4b\xb9\xa5\x35\x7a\x23\x2a\x04\x2b\xc5\x6a\xed\xe4\x16\xb8\x44\x66\xd0\xc4\x5c\xd3\xa0\xb5\x6c\x85\x04\xbc\x63\x99\xd9\x10\x01\x9f\xed\x58\x72\x58\xf7\x1c\xbc\xec\x47\x67\x50\x40\x19\xd2\xa1\xf7\x9d\x4a\xd4\x35\x1a\x54\x0e\x62\x65\xb1\x93\x82\xa0\x1f\x00\xa5\xc5\x3f\x86\x69\xb9\x6e\x7b\xbc\x3c\xfc\x17\xcf\xa8\xb1\x2b\x6f\xef\xdf\x3f\xb2\x60\x26\x7f\x5e\xbd\xa1\xe0\x28\xcf\xb2\xe2\xb4\xf7\xf6\x18\x11\xb4\xb9\x77\x44\xbd\xeb\x0b\x25\x5c\xd0\xf8\x83\xbd\xbc\xf5\x87\xf5\xc1\xce\xce\xa5\x5e\x32\x39\x3b\x47\x57\x16\x9f\x27\x45\x8b\x49\x58\xf8\xbd\xea\x38\x21\x5a\x89\xc4\x95\x27\xf1\xc1\x5e\x2c\x3f\x20\x77\x97\xce\x14\x53\xf0\x9c\x02\xad\xb0\x9c\x28\xb7\xce\x14\x93\x83\xe8\x3e\xb6\x1e\x61\xfb\xd5\xdf\x43\x76\x6b\xa3\xef\xc6\xb1\xec\x69\xcc\x5e\xc6\xa2\x1f\x24\x28\x3d\x14\xa1\xcf\xe7\xc0\x36\x5a\x54\x50\x21\xab\x80\xeb\x0a\x01\xa5\x68\x84\x62\x14\xea\x79\xb6\x61\x06\x62\x39\xcb\x33\x84\x33\xf8\xe2\x71\x2e\xf8\xf8\x90\x67\xef\x29\x8c\x7b\x33\x9f\x5f\xbc\xbd\xb8\x78\xb7\x93\x1c\x5a\xa3\x39\x5a\x7b\xc0\xe2\x71\xa7\x08\xc1\x95\xe0\xce\x3c\xdc\x2f\xaa\xc2\x5a\x28\xac\x76\x22\x7b\x5e\x78\xaf\x11\x35\x6c\x88\x5e\x44\x09\xd4\x50\x6d\x92\x89\xce\x2f\x2e\x7f\xfa\xf1\xed\xcf\x57\xef\x83\x38\xc5\xe4\x5b\xd8\x50\x10\xec\xd0\xfd\xe2\x0b\xd8\xcc\xae\x52\x5d\xf9\xac\x0f\xe5\xf9\x1c\xce\xfd\x29\xff\x7c\xf5\xd4\xb6\xc8\x45\x2d\x92\x5e\xb0\x61\xb2\x43\x70\xec\x16\x2d\xb4\x06\x39\x56\xa8\x38\xce\x06\x09\x07\x8a\x79\x0a\x95\xdf\x17\xf6\xcf\xcb\x78\x88\x5b\x68\x73\xb6\x76\xf6\x03\xd6\xac\x93\xee\x5c\x1b\xad\x5d\x08\x9c\x3b\x58\x69\x85\x53\xe0\x4c\x7d\xe9\x7c\xe5\x17\x8e\xe2\xa8\x66\x52\x2e\x19\xbf\x05\xa6\xb6\x8d\x36\xa4\x49\x6c\x43\x4e\xe1\x0a\xbd\xec\x0c\x96\xe8\x28\x75\x59\x2d\x3b\xdf\x52\x11\x45\x5f\x7b\x66\x43\xfc\xce\x3b\x6b\xe6\x52\x73\x26\xe7\x2b\x5d\xf4\xee\xf0\xbd\x41\x76\xdb\x6a\xa1\x7c\xec\x91\x6e\x3f\xe0\xb2\x5b\xad\x90\xea\xc7\x43\x9e\x93\x93\x95\x9e\xe7\xcf\x6c\xc3\xae\xb8\x11\xad\x4b\x2d\x2c\x54\x1a\x2d\x89\x9b\xf2\x1f\xe3\xde\x3f\x9c\x06\xa9\xef\x9e\x4a\xdc\xa0\x04\xbc\x47\x1e\xa4\x6a\xb5\x15\xc1\x73\xe7\x73\xe0\xba\x23\xb7\xb7\x53\xb0\x9a\x3a\x13\x6c\x3a\x49\x9d\x88\x5b\x63\x43\x15\xd3\x20\xf7\x2d\xdd\xaa\x47\xb3\x70\x87\x5f\x6e\x10\x50\x45\x5c\xac\x40\x04\x62\x0b\x26\xa5\x17\x98\xa9\x2a\x7e\xb1\xe5\xa4\x6f\x31\xad\x5f\x67\xd6\x8a\x95\x22\x8a\x9e\x07\x33\x4b\xe1\x0c\x75\x8c\x94\xd9\x56\x68\x82\xeb\x58\x6f\x60\x4f\xf5\x6f\xa1\x03\xa3\x1e\xab\x61\xad\xa7\x41\x9f\xad\x14\x1c\x61\x89\x52\xdf\x91\xa6\x21\x1b\x3a\x60\x50\xd4\x42\xe2\xa9\x14\x0a\x8b\x5d\x5d\x85\x72\x1a\x98\xea\x19\xa5\xcd\x64\x84\x44\x5a\x11\x3d\x06\x2f\x42\x36\xa4\xee\xcc\x7b\xee\xad\xd2\x77\xea\xb2\xb7\x02\xc0\x19\xc9\x73\x1d\xe2\xf7\xa6\x13\xca\xb5\xce\x07\x7a\xa2\xbb\x88\xb6\x85\x33\xb8\xbe\x79\x42\xe4\x3e\x3e\xd0\xa0\xe0\x0f\xdc\xe0\x4a\x58\x87\x26\x11\x2c\x69\xf5\x0d\x6b\x30\x26\x84\x29\x90\x1a\xfd\x17\x52\x87\x04\x9f\x40\x64\x44\xde\x7d\x8b\x5b\x8a\x17\x0f\x78\x04\xc5\xa9\xaf\x9e\x4e\xb3\x92\xa0\x63\xae\xe0\x53\xa8\x75\xa7\x2a\x02\xdc\xd5\xe0\xfa\x16\xb7\x37\xdf\xc6\xdd\x51\xac\xb4\xdc\xc7\x48\x4d\x18\x5f\x78\xa9\xf3\x2c\x53\xac\xc1\x53\x48\x32\x4e\xf3\x2c\xf3\x56\xf6\xbc\xe9\x1b\x71\x3c\xf5\x52\x4e\x3d\x76\xcb\x09\x3d\xca\x5a\x4a\x54\xe5\xbe\x55\x28\xb5\x1e\xb0\x14\x6b\x5b\x54\xd5\x23\xe8\x29\xd4\x93\xfd\x23\xf0\x0a\xc0\x99\x17\x78\x90\x3d\x74\xac\x64\x86\xe4\x13\x76\x7c\xe8\xfe\x68\x83\x55\x67\xf9\x7c\x9e\x7b\xb7\x4d\xb1\x6e\x9d\x21\x9c\xd9\x4b\x32\xe2\x84\xda\x71\xf2\xb4\x7f\xc4\x38\xfb\x47\xaa\xf0\x50\x51\x6e\x23\x42\x7c\xcb\xa5\xe0\x50\x21\x09\x8d\x8a\x6f\x67\xb1\x88\x12\x01\x11\x0e\x6c\x48\xf0\x51\xc8\xbd\xe4\x1e\x32\x53\x31\x99\xbd\xc1\xbb\x52\x4c\x86\x4c\x15\x34\x59\x32\x2b\xf8\x0b\x43\x9e\xc1\x69\xda\xa1\x8e\xdb\x3a\x4a\x45\xce\xf8\xc1\x50\xd5\xda\x34\xbe\x16\x01\xde\xd3\x1a\xf5\xc8\xbe\xc1\xf8\xf9\x6a\x0c\x19\xfb\xf1\x11\xbd\xa1\x0f\x7f\xb1\xeb\x7c\x79\xf6\x82\x7c\x8a\xfe\xd2\xc2\x2b\x72\x40\xfa\x13\xca\xf5\x59\x8b\x26\x18\xcf\xa1\xb4\xb7\xa2\x25\x2f\x6d\x84\x0b\x5a\x5f\xdf\x8c\x18\x7d\xcc\x33\x02\xa0\xb9\x98\xfe\x39\x82\x13\x98\x3f\xf1\x1f\x77\x3a\xb3\x27\xf3\xf1\x56\x4f\xfc\x4b\x0b\xfa\x4e\x41\x4d\xa4\x9e\xcc\x73\xef\x6b\x87\xaa\x64\x2a\xfe\x64\xc7\x58\x32\x3c\x7e\x31\x99\x51\x32\x2a\x0b\xdb\x4a\xe1\x8a\x29\x14\xff\xae\x86\x35\x4a\x23\xc5\xd4\x0b\x36\xc9\x33\xcf\xc4\x13\x1f\x2b\x40\x51\x2d\x69\xd1\xb3\x0e\xa4\x25\xaa\x95\x5b\x17\x13\xea\x1b\xa8\xac\xd4\x34\xcd\x12\xcc\xf1\xb7\x20\xe0\x3b\x90\x54\x93\xfc\x07\x32\xca\xb7\x20\x8e\x8e\x62\x47\x5f\xeb\x81\xd4\x4b\x55\xe1\x7d\x29\x26\x79\x46\xc1\x40\xeb\xb4\x9f\x64\xeb\x96\xc1\xfc\xc5\x74\xbc\x2c\x08\xe7\xa2\x26\x45\xca\xc4\xff\xe8\xe4\x53\x20\x93\x04\xe2\x79\x30\x0a\x07\xaa\xb1\xda\xee\x1b\xe5\xb4\x98\xe4\x14\xd7\xc1\x02\x7d\x24\x86\xef\xd3\x91\xdf\xf8\x96\xf6\x85\x0f\x7f\xfa\xf3\x34\xa3\x22\xc7\x83\xfb\x52\x56\xf0\x5e\xf3\x18\xea\x24\x4a\xe4\x41\x92\xeb\x9d\xfe\x39\xcd\x99\x83\x5e\xf7\xbf\x7c\x0a\x08\x7a\xfb\xec\xca\xf5\x30\x19\xf7\xd4\x41\xc3\xde\xa9\x63\x15\xf3\x3e\xe8\x5d\xb9\x6c\x79\xca\x64\x9f\xc8\xca\x53\xd0\xb7\xb0\xd4\x5a\x4e\x7e\xc3\xd5\x03\xdd\x7d\x67\x1e\x1c\x6e\x3f\x98\x4e\x42\x06\xa7\xdc\x19\x80\x7c\x5f\x73\x32\x4e\xd5\xc7\x53\x28\x8a\x29\xfd\x53\x33\x69\x31\x65\xde\xb3\x03\xd5\xc5\x53\xb8\x3e\xbe\x99\x25\x7b\x4f\x61\xb4\x46\x59\x7c\xf4\xfd\x55\xa8\x1f\x7d\x52\xfd\x3d\xd8\x29\x38\xd3\xe1\x9e\x05\x6d\x6f\xc2\x29\xb4\x1c\xae\x53\x89\xa4\xbc\xea\x93\xce\xa7\x55\xf7\xf5\x82\x4f\x52\x54\x45\x76\x04\x69\x98\x5a\x61\xe4\xee\x2d\xd1\xf2\x6b\x71\xf3\x49\x8d\xf7\xb5\x1d\x4b\x9f\xb4\x1c\x1c\x61\x64\xea\x7d\x5d\xbc\xe3\xdb\x92\x87\x6f\x63\x65\x9e\xbc\xe8\x85\x31\x68\x3b\xe9\x48\xcc\xb0\x46\x69\x83\x14\x78\xef\x0d\xd0\x4b\x9f\x88\x90\xf8\x75\xa7\x3c\x7c\xa7\xf8\x0b\x6d\x2e\x17\xa4\xb6\x3f\x5f\xa2\x34\xdb\x8f\xc5\x9d\xe5\x29\x0c\xd1\x78\xb9\x08\x51\x06\x74\x58\x29\xaa\xc2\x52\xdd\xa9\x7e\xc5\xf9\x61\xb1\xee\xd4\x4c\xc5\x2a\x3e\x8a\x63\x5a\x4e\xe5\x7c\x14\xb8\xb4\x1c\xeb\x7a\x96\xfd\xa8\x9c\xd9\x9e\xa6\x65\xff\xed\x50\x44\x7d\x11\x04\x25\x23\xfa\x9a\x13\x4d\x34\xd4\x9b\xa8\x18\x5c\xdf\xf8\xad\x3c\xe3\x9d\xf1\x93\xf0\xb8\xba\x94\x5c\x24\xeb\x4e\xe0\x0d\xde\x53\x6b\x1c\xce\x27\x10\x9c\x02\x75\xe2\x43\xdc\x89\x1a\xb8\x98\x25\x4a\x7f\x3d\xf3\xe7\xc9\xc5\x2c\x45\xcf\x28\x70\x62\x56\x1f\xc7\x8d\xef\x77\x7a\xe8\xeb\x81\xd2\x4d\x9e\x0d\x5f\x8e\x8e\x86\xb4\x31\x1d\xb3\xfb\x6e\x8f\xdb\xae\xee\x23\xd5\x2f\x17\xf1\xa4\xa2\x07\x85\xe2\x1b\xee\xb4\xe8\x53\xde\x9f\xd4\x1f\x2c\xc6\xe1\x50\xc6\x14\xfb\x19\x73\x31\xbe\xa5\x3a\xd7\x78\x3f\x8c\xf6\xbb\x13\x3d\xef\x0c\x4d\x41\x9d\xa3\xae\x79\x12\xe6\x64\x82\x2e\x42\x64\xef\x0c\xd1\x21\xcb\x86\x29\xba\x98\x82\x12\x72\x32\x9a\x6a\x5f\x3f\xff\xfb\xe5\xdb\x8b\xc5\x55\xe9\x53\xa7\x8f\xf4\x74\x9d\x78\x02\x83\x28\x96\xaf\xb1\x0a\xb2\xf8\xc8\x68\xd8\x2d\x96\x7c\xcd\x54\xba\xe6\x7c\x38\xc4\xd3\xa2\x7b\x27\x1a\xd4\x9d\x3b\x38\xb2\x13\x6d\x3f\x3e\x71\xa9\x2d\x96\x7c\x02\x0f\x93\x29\x1c\x4f\xf2\xec\xbb\xa7\xbc\x97\xf1\x4d\xd7\x2c\x2e\x7f\x29\x3f\x29\xdc\x9b\xae\xe9\x6d\x51\xf6\xc9\xea\x70\xef\xf6\xb9\xd3\x8e\xc9\x1e\xdc\xf6\xed\x40\x3a\xfd\xd7\xd8\x5c\x39\xe6\xc6\xbe\x4f\x63\x33\x2a\x34\xfe\x2e\x99\x39\x61\x9d\xe0\x34\xee\x3c\x97\x52\xf3\xc1\x35\x9e\x7d\x0d\xd4\xfd\x6d\x1d\x5a\x60\xb4\xc5\xa8\xaf\xa3\x11\xc5\x3a\x21\x25\x35\xa7\x1d\xb9\xee\x3b\x92\x20\xe0\x7e\x1a\xad\xc4\x0d\x2a\x1a\x52\x6b\x83\x58\x4d\xf2\xec\x6a\x6b\x01\x0e\x33\xd3\x4b\x6a\x32\x53\x0f\x69\xb7\xd6\x61\x03\xa5\xed\x1a\xd0\x35\xfc\xfd\xfe\x9e\x50\xfd\xd8\x35\xc9\xb3\x57\x5a\xdf\x76\xad\xdd\x25\xa3\xba\x66\x89\x86\xa0\xfd\x40\x8b\x06\x64\x00\xcb\xb3\xd7\x5e\xa4\x4f\xc2\x37\x61\x3b\xcf\x5e\x18\x44\xbb\x2f\xde\x00\x47\x5a\xd8\xf0\xae\xf1\x9a\x09\x95\x14\xa5\x98\x59\x23\x6b\x77\xed\xfa\x13\xb2\xb6\xb7\xed\x9f\xb1\x2c\x21\xf6\x76\xfa\x23\x56\x0a\x28\x2f\xab\x18\xad\xfb\x28\x42\x81\xa0\x3d\xdb\x32\x65\x23\xac\xa2\xb1\xe3\x30\xac\xd2\xea\x69\x0f\x1f\xc0\xdf\xa2\x44\x66\xb1\x7a\x04\x6e\xd2\x86\xd3\x7e\x64\xb9\xb8\x0a\x08\x21\x30\xec\x98\xbe\xf7\xd8\x91\x2d\x07\x0b\xe8\x00\x1c\xec\xfa\xaa\xbf\x39\xa8\xc5\x3d\x56\x4f\xad\xf8\x35\x65\xb1\xce\x60\xc2\xf2\x97\xf9\x23\x5b\xcf\xe7\x59\x50\x49\xd8\x28\x59\x47\x52\x29\x7d\x17\x36\xc9\x9c\xfd\xd6\x21\x13\xce\xf2\xec\x8a\x1a\x81\x68\x98\x7d\x3d\x3d\xb5\xe5\x36\x8e\x35\xbd\x10\x11\x29\x1e\x56\x40\xca\xb3\xd7\x57\x2d\x53\x8f\x08\x35\x64\xce\x41\x13\x1b\xe1\xf6\x71\x17\x8c\xaf\x31\x20\x8f\x70\x39\xad\xee\x22\x7b\xc0\x80\x9d\x90\xbf\xef\xf8\xed\x4f\xcc\xae\x69\x75\x40\x6e\x8d\xae\x85\xa4\x51\x70\xd9\xf1\x5b\xf4\xaf\x5e\x6b\x70\x6c\x29\x31\xcf\xce\x17\x43\x44\x0e\x28\xe7\x0b\x68\xd0\xb1\x8a\x39\x96\x67\x17\x6e\x8d\x66\x47\x4c\xff\xce\x41\xab\x29\x4a\x87\x38\x88\xa7\x78\xce\xcc\x92\x06\x56\xae\xa5\x44\xfe\xe8\xb8\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\x7f\xff\xe7\x7f\x85\x97\x36\xd6\xd0\xa8\x9e\x67\xaf\x98\x3d\x48\x13\x55\x15\x1e\xfe\x74\x0d\x92\xd9\x1d\xfa\xa5\x62\x4a\x5b\xe4\x5a\x55\x16\xac\x50\x1c\xe1\xe4\x5f\xfe\x3f\x25\xee\x4b\xd6\x59\xf4\x29\xee\x8d\x1d\x0c\xec\x57\xdf\x24\x7b\x5d\x7f\xf5\xcd\xb3\x9b\x81\x11\x17\x86\x77\x92\x19\x58\x76\x75\x1d\x7c\xdc\x20\xa7\x1a\x7d\xbe\x80\x96\x30\xa1\xea\x4c\xb0\x12\xb5\x10\xd6\xa5\x7d\xe6\xe0\xba\xa4\xf4\xbf\x38\xfa\xea\x9b\x6f\x26\xff\x8f\xe8\x46\x66\x3f\xaa\xea\x7f\xcb\x2c\x29\x6e\xf3\xcc\xd3\x86\xb1\x6d\xfe\xf2\x15\x9d\xfd\xe2\xf2\x97\x17\x34\xb8\x93\x2d\x6a\xa9\x59\x24\x5e\xa7\x35\x5d\xc3\xe2\xf2\x97\x60\xbe\x14\x02\xe7\x0b\xaa\xfc\xe4\x3d\x89\x24\x35\x42\x79\xe6\xef\x0d\x7b\x2e\x7e\xcd\xbb\xc2\x25\x9a\x10\xc4\xa3\x64\xb9\x17\xbb\xf0\xec\x84\xa2\xf3\x4d\xd7\x5c\x89\x5f\x71\x21\x99\xb5\x21\x15\x51\x4a\x59\xf8\xab\xef\x59\x9e\x7d\xbf\xa5\x5d\xb8\x7e\x76\x72\x33\x14\xb5\xcc\xaf\x8d\x94\xea\x53\x7d\x3a\xb3\x3e\xa7\xa7\x85\x87\xbe\x22\xbf\x45\x56\xa5\x42\x59\x36\xf0\x24\x7d\x9e\xc4\x72\x79\xe0\xb5\xf7\x1d\xb9\x5c\xff\x76\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\xd2\x19\x75\x2a\xbc\xcd\x92\x45\x71\xcd\x36\x42\x1b\x3b\x83\x85\x56\x56\x54\x68\xa0\x65\x4a\x70\x0a\x58\xbc\x6f\xa5\xe0\xc2\xc9\xed\xac\x17\xfa\x0a\xdd\x0b\xa1\x98\x14\xbf\xa2\x29\xef\xa7\x50\x0f\x4f\xef\x1f\x1f\xfe\xaf\x4a\x1e\x3a\x52\x12\x7f\x38\x3a\x35\xbe\xf7\x19\x8d\xb7\xe1\xa2\xc5\xb7\x98\x79\xa6\x5b\xf6\x1f\x5d\xff\x06\xfd\x40\xde\xe9\x45\xd0\xfe\x45\xb6\x16\x28\xab\xf8\x93\x01\x3a\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\x7c\x69\x6c\xdc\x7d\xbc\x1d\x11\xfe\xe7\x3f\xa1\xf6\x43\xd4\xe8\x69\x33\x31\xfa\xae\x53\xfe\xa2\xf2\xaf\xc5\x2e\x3b\x02\xef\x8d\x31\x9e\xf8\x60\x34\x4c\xd2\x1e\xf1\x0a\x03\xa3\x50\x2e\x4c\x84\xa2\x06\x5a\x8a\x43\xcd\xa3\xbb\xd4\xf4\x1e\x73\xe5\x73\xe7\x1d\xfa\x1f\x69\xd4\xec\x76\x7c\x71\x3f\xba\xeb\xa7\x78\xd6\x4a\x6e\x61\xc3\xa4\xa8\xe0\x8e\x6d\xe9\xf0\x42\x3d\x06\xad\x30\x10\x13\x16\xa8\xc9\xef\x56\x6b\x60\xc3\xdd\xbe\x36\x07\xae\xf6\x67\xf0\xb2\xa6\x19\x57\x58\xd0\x9d\x0b\xad\xdf\xae\x88\x81\xe4\x52\x77\x94\xe2\x85\x83\xa6\xb3\x54\x01\x37\x08\x4b\x44\x35\xf4\x02\x42\x81\xd5\x54\x25\x7c\x5d\xbb\x63\xdb\xf4\xb3\x09\x61\x47\x4e\x3f\x0b\xe4\x5e\xd6\xc0\x82\xaf\xfb\xb7\x0f\xff\xd6\xa4\x97\x12\x1b\xe6\x04\x9f\x92\x1d\x38\x53\xc9\xb7\x98\x3f\x38\x6f\xe1\xfe\xa7\x18\x42\xca\x3c\x3e\x1d\xa3\xf5\xf3\xa7\xb3\x28\x6b\xf0\xbf\x47\x59\x51\x97\x2e\x38\x14\xf1\x3c\x8b\x41\x5d\x7f\x95\xa6\x04\x2f\x8b\xf4\x02\x76\x0a\x2d\x3f\xeb\x2f\xe0\x45\xcb\x27\xe9\x35\x36\x1a\x24\xcc\xfe\xba\x0e\xb7\xf0\x8f\x4f\xa5\xd8\x99\xa0\xf7\xcd\x77\x2d\x5a\x7e\x93\xc7\x87\xa0\xd7\xd8\x5c\xfa\x66\x02\xdf\x86\x5f\x8d\x38\x38\x83\x6f\x4e\xbe\x82\x27\x70\x72\xfc\xd5\xd7\x43\x82\xfa\x5e\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\x4f\x5f\xb8\x2f\x2d\x89\x6d\xc5\x52\xfa\xdb\xf1\x3e\x93\x4d\x29\x1b\x84\xbc\x54\x69\xf2\x48\xab\xa7\xe1\x7c\xef\x84\x45\x30\xd8\xe8\x4d\x20\x04\x5c\x37\x84\x31\xbc\x97\x1d\x0f\x62\xfa\xfb\xa1\x65\x57\xc3\xf5\x0d\x35\x83\x53\x2a\x64\x71\xf8\x8f\x02\xfe\xb9\x4b\x61\x1f\x54\xbf\xf9\x8a\xba\x93\x2e\xb8\x6e\xb7\xc4\x7e\x0a\x76\xe7\x92\xb2\x18\x16\x46\x37\x8f\xfe\x86\x39\xde\xcc\x0e\x77\x8f\xc3\xa0\xfc\x4a\xf3\xdb\x8b\xab\x77\x6b\x83\xac\x1a\x0f\xe9\xbf\x28\xf9\x89\x9d\x7f\x0b\xe9\xb4\x3c\xf0\xa0\x60\xb7\x76\xf6\x6e\x8d\x11\x62\x6c\x31\xe3\xde\x19\xc6\x29\x8d\x85\x8b\xf6\x3e\xd1\x52\x28\x3c\x24\x30\xdd\x26\xa8\xf8\xf7\xf1\x61\x28\xcc\x69\x2b\x58\xdd\x3f\x49\xfc\xcd\xe7\x16\x04\x06\x7c\xa5\x01\xd5\x46\x18\xad\xe8\xdc\xfc\x43\x1c\x73\x7c\x1d\x7f\xfe\x35\x83\x77\x6b\x34\x58\x6b\x43\xb1\xe8\xa3\x7d\xec\x18\xb1\x71\x54\x15\x30\x79\xc7\xb6\xb6\xaf\x02\xc3\xa0\xbe\xd2\xde\xb4\xfe\x88\x9f\x7d\x3d\xd2\x79\x70\x8c\x7f\x45\x6c\x9f\x4b\xb1\xc1\x72\xb7\x00\xc7\x9f\x2e\xa9\x20\x4b\x38\x02\x30\x18\x23\x3d\xfe\x8c\x6e\xf4\x53\xb4\x0a\x2d\x37\x62\x19\xba\x2b\x46\x6d\xe8\xaa\x2f\x31\xf1\xed\x64\x4c\x29\x16\xc9\xfe\x17\x40\xa3\xbd\xdf\xfc\xa5\xd0\x0e\xdc\xe3\x5f\x08\xa5\x22\xb2\x23\x5b\xf8\x81\x47\xfc\x85\x0d\x0e\x5e\xe4\xef\x60\x4a\x1b\x77\x7c\x15\x08\x69\x69\xc4\xa4\xb4\x23\xb7\xa3\x3e\x9b\xc8\x1e\x30\xe8\x5e\xdc\xfc\xc0\x1c\xf6\x61\x13\xdc\x7b\x15\x6e\x5f\x82\x63\x3f\xfb\xba\x9c\xc0\x93\x40\xa5\x3c\x39\x3e\x3e\x7e\x7f\x7c\x7c\x4c\x8c\xfe\x27\x00\x00\xff\xff\x57\xdf\x5d\x0f\x6e\x29\x00\x00"), }, "/src/strings": &vfsgen۰DirInfo{ name: "strings", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 435049523, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 563781000, time.UTC), }, "/src/strings/strings.go": &vfsgen۰CompressedFileInfo{ name: "strings.go", - modTime: time.Date(2018, 2, 27, 18, 42, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 539781400, time.UTC), uncompressedSize: 1759, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x94\xd1\x6f\xe3\x44\x10\xc6\x9f\xbd\x7f\xc5\x60\x1e\xce\xa6\xa9\x9d\xb4\x4d\x49\x83\x82\x74\x0d\x52\x29\x42\xea\xe9\x0a\xe2\xe1\x74\x0f\xeb\xf5\x38\x9e\x64\xbd\x6b\xed\xac\xdb\x0b\xa8\xff\x3b\x5a\x3b\x6e\x73\xe5\x10\x02\xfa\xe4\xc6\xb3\xbf\xf9\xe6\xf3\x37\x9b\xe7\x70\x52\x74\xa4\x4b\xd8\xb2\x10\xad\x54\x3b\xb9\x41\x60\xef\xc8\x6c\x58\x08\x6a\x5a\xeb\x3c\x24\x22\x8a\x3b\x43\xca\x96\x98\x77\xbe\x5a\xc4\x42\x44\xf1\x86\x7c\xdd\x15\x99\xb2\x4d\xbe\xb1\x6d\x8d\x6e\xcb\x2f\x0f\x5b\x8e\x45\x2a\x44\xd5\x19\x05\xb7\xa6\xc4\x4f\xd7\x7b\x8f\x09\x1f\xc8\x13\x50\x50\xec\x3d\xa6\x40\xc6\xc3\x1f\x22\x72\xe8\x3b\x67\x60\xcb\xd9\xad\xf1\xe8\x8c\xd4\x77\xc5\x16\x95\x4f\x38\xcd\xd6\x52\xeb\x24\xa6\x00\xb9\xab\xe2\x49\x28\xba\xd1\xb6\x90\x3a\xbb\x41\x9f\xc4\xf7\x3d\x31\x1e\xeb\x2a\x67\x9b\x75\x2d\xdd\xda\x96\x18\x4f\x40\xa5\x69\x40\x26\xa9\x78\x3a\x56\x93\xf0\x04\x18\xdb\x83\x9c\xff\x2a\xe3\x75\x11\xb6\x7f\xe9\xf6\xb3\x64\xff\xff\x3a\xea\x91\xf0\x2f\xba\xae\x6d\x67\xfc\xdf\x74\x34\xb0\x5c\xc1\x54\x44\x79\x0e\xdc\xa2\x22\xa9\x41\x49\x46\x16\x11\x3f\x92\x57\x75\xa8\x09\x3f\x80\x46\xd3\xc3\x61\xb5\x82\xe9\x52\x44\xa3\xd6\x10\x80\xec\x7d\x67\xb0\xef\x72\x6b\x86\x0f\x90\x70\x0a\x27\x30\x7b\x7d\xf6\xfb\xe1\x31\x3d\x3a\x3f\xfd\x02\xff\xa5\x88\xaa\x5e\xf4\x6a\x05\x1c\x94\x3c\x9f\x9a\x89\x28\x7a\xfa\x0c\xf2\x24\x44\x54\x59\xd7\x57\xb5\x96\xc3\x58\xc7\x4e\xa7\x03\x2c\xbc\x59\xad\xe0\x74\x36\xd0\x0a\x87\x72\x77\x40\x99\x93\x13\x11\x45\x0c\x2b\xe0\x0f\xad\xe5\x93\x51\xd0\xf2\x63\x80\x8f\x9d\xcc\xb3\xab\x49\x01\xdf\x5c\x87\x5d\x41\x97\xc2\x61\xea\xf4\x60\x6f\xa0\xe7\x39\xfc\xda\xb2\x77\x28\x1b\x38\xd4\x65\x43\x19\x38\xd4\x84\x0c\xd6\xc0\xb8\x62\x9d\x61\x59\x61\x06\xbf\x21\x28\x69\xde\x78\x28\x2d\xf8\x5a\xfa\xac\xe7\xfc\x72\xf7\xc3\xdd\x12\x6e\xfd\x1b\x0e\x03\x30\x15\x1a\xfb\xb7\xe0\x6b\x04\x34\x9e\xdc\xf3\x92\x66\x87\x56\xf0\xf6\xdd\x6d\x40\x41\x81\x40\x4d\xab\xb1\x41\xe3\xb1\xec\x71\xc3\x5f\x63\x1d\x02\x56\x15\x29\x42\xe3\xf5\x1e\x82\x7b\x37\x77\x6f\xdf\xaf\x7f\x5c\x6d\x79\x48\x43\x45\x4a\x6a\xbd\x87\x44\x3e\x58\x2a\xa1\xe3\xa0\xfe\xc3\xc7\xb0\xac\x13\x20\xc3\x1e\xe5\x31\xb2\x63\x04\x79\xf0\x02\x4a\x72\xa8\xbc\xde\x7f\x07\xd6\x01\xdb\x06\xe1\x27\xf9\x20\xef\x95\xa3\xd6\x8f\x36\x15\x47\x62\xa9\x02\x6b\x10\xf0\x13\xb1\xe7\x34\x3b\xc2\x5e\x77\x61\x52\x62\x20\x1e\x54\x3f\x5a\xb7\x9b\x40\x89\x15\x3a\x28\x6d\x00\x91\x87\xce\x78\xd2\xc1\x11\x87\x6f\x18\x24\x18\xc4\x12\xb8\xb6\x8f\x06\x1e\x48\x42\xeb\x6c\x45\x3a\xdc\x36\x47\x64\x69\xca\xe1\x04\x48\x87\x50\xa0\x51\x75\x23\xdd\x8e\x41\x3e\x48\xd2\x32\xf8\x9c\x30\x22\xd4\xde\xb7\xbc\xcc\xf3\xcf\x2e\x39\x2d\xcd\x26\xdf\xd8\x9c\x98\x3b\xe4\x7c\xb6\xb8\xba\x9a\x7e\xdd\xff\xa3\x6c\x13\xec\x3e\x3d\x9f\x9f\x4d\x2f\x17\xf3\xf3\xf3\x30\xce\x21\x40\xc3\xe4\x49\x91\x15\x5d\x95\x7e\x39\x4c\xca\xb6\xfb\x75\x8d\x6a\x97\xa4\x21\x48\x54\x41\x91\xc9\xb2\x74\x21\xb9\x86\x74\x1f\xdd\xe3\x74\x3d\xd7\x87\x0f\xc0\x60\x2c\xb2\x92\x2d\x4e\xe0\xb1\x26\x55\x43\x8b\xae\xb2\xae\xe1\x31\x64\xef\x2c\x85\x3b\x03\x1a\x69\xa8\xed\xb4\xf4\x64\x4d\x36\x20\x5f\xc7\x6f\x02\x6c\x81\x77\xd4\x02\xf9\x0c\xee\xff\xc9\x89\x30\x37\xf9\xfc\x62\x71\x31\x5f\x5c\xaa\xc5\x4c\x4e\x67\x57\x97\x78\x71\x26\xd5\xfc\xac\xba\x9c\xcf\x0a\x35\xbf\x9c\xce\xbe\x55\xf2\x62\x7e\x71\xb6\x98\x86\xa6\xe3\x64\x50\x88\xe8\x09\x50\x33\xc2\xcb\xbc\x5f\xad\xa0\x18\x16\x5a\x1a\x52\x49\x7c\xc8\xf8\x12\x48\x6b\xdc\x48\xdd\x07\xce\x56\x60\xac\x39\xfd\x1d\x9d\x1d\xf7\x2c\x38\x42\x58\x42\xb1\x87\x07\xa9\x3b\x8c\xd3\xb0\xc2\x4f\xe2\xcf\x00\x00\x00\xff\xff\x3c\x43\xb4\x54\xdf\x06\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xa4\x94\xd1\x6f\xe3\x44\x10\xc6\x9f\xbd\x7f\xc5\x60\x1e\xce\xa6\xa9\x9d\xb4\x4d\x49\x83\x82\x74\x0d\x52\x29\x42\xea\xe9\x0a\xe2\xe1\x74\x0f\xeb\xf5\x38\x9e\x64\xbd\x6b\xed\xac\xdb\x0b\xa8\xff\x3b\x5a\x3b\x6e\x73\xe5\x10\x02\xfa\xe4\xc6\xb3\xbf\xf9\xe6\xf3\x37\x9b\xe7\x70\x52\x74\xa4\x4b\xd8\xb2\x10\xad\x54\x3b\xb9\x41\x60\xef\xc8\x6c\x58\x08\x6a\x5a\xeb\x3c\x24\x22\x8a\x3b\x43\xca\x96\x98\x77\xbe\x5a\xc4\x42\x44\xf1\x86\x7c\xdd\x15\x99\xb2\x4d\xbe\xb1\x6d\x8d\x6e\xcb\x2f\x0f\x5b\x8e\x45\x2a\x44\xd5\x19\x05\xb7\xa6\xc4\x4f\xd7\x7b\x8f\x09\x1f\xc8\x13\x50\x50\xec\x3d\xa6\x40\xc6\xc3\x1f\x22\x72\xe8\x3b\x67\x60\xcb\xd9\xad\xf1\xe8\x8c\xd4\x77\xc5\x16\x95\x4f\x38\xcd\xd6\x52\xeb\x24\xa6\x00\xb9\xab\xe2\x49\x28\xba\xd1\xb6\x90\x3a\xbb\x41\x9f\xc4\xf7\x3d\x31\x1e\xeb\x2a\x67\x9b\x75\x2d\xdd\xda\x96\x18\x4f\x40\xa5\x69\x40\x26\xa9\x78\x3a\x56\x93\xf0\x04\x18\xdb\x83\x9c\xff\x2a\xe3\x75\x11\xb6\x7f\xe9\xf6\xb3\x64\xff\xff\x3a\xea\x91\xf0\x2f\xba\xae\x6d\x67\xfc\xdf\x74\x34\xb0\x5c\xc1\x54\x44\x79\x0e\xdc\xa2\x22\xa9\x41\x49\x46\x16\x11\x3f\x92\x57\x75\xa8\x09\x3f\x80\x46\xd3\xc3\x61\xb5\x82\xe9\x52\x44\xa3\xd6\x10\x80\xec\x7d\x67\xb0\xef\x72\x6b\x86\x0f\x90\x70\x0a\x27\x30\x7b\x7d\xf6\xfb\xe1\x31\x3d\x3a\x3f\xfd\x02\xff\xa5\x88\xaa\x5e\xf4\x6a\x05\x1c\x94\x3c\x9f\x9a\x89\x28\x7a\xfa\x0c\xf2\x24\x44\x54\x59\xd7\x57\xb5\x96\xc3\x58\xc7\x4e\xa7\x03\x2c\xbc\x59\xad\xe0\x74\x36\xd0\x0a\x87\x72\x77\x40\x99\x93\x13\x11\x45\x0c\x2b\xe0\x0f\xad\xe5\x93\x51\xd0\xf2\x63\x80\x8f\x9d\xcc\xb3\xab\x49\x01\xdf\x5c\x87\x5d\x41\x97\xc2\x61\xea\xf4\x60\x6f\xa0\xe7\x39\xfc\xda\xb2\x77\x28\x1b\x38\xd4\x65\x43\x19\x38\xd4\x84\x0c\xd6\xc0\xb8\x62\x9d\x61\x59\x61\x06\xbf\x21\x28\x69\xde\x78\x28\x2d\xf8\x5a\xfa\xac\xe7\xfc\x72\xf7\xc3\xdd\x12\x6e\xfd\x1b\x0e\x03\x30\x15\x1a\xfb\xb7\xe0\x6b\x04\x34\x9e\xdc\xf3\x92\x66\x87\x56\xf0\xf6\xdd\x6d\x40\x41\x81\x40\x4d\xab\xb1\x41\xe3\xb1\xec\x71\xc3\x5f\x63\x1d\x02\x56\x15\x29\x42\xe3\xf5\x1e\x82\x7b\x37\x77\x6f\xdf\xaf\x7f\x5c\x6d\x79\x48\x43\x45\x4a\x6a\xbd\x87\x44\x3e\x58\x2a\xa1\xe3\xa0\xfe\xc3\xc7\xb0\xac\x13\x20\xc3\x1e\xe5\x31\xb2\x63\x04\x79\xf0\x02\x4a\x72\xa8\xbc\xde\x7f\x07\xd6\x01\xdb\x06\xe1\x27\xf9\x20\xef\x95\xa3\xd6\x8f\x36\x15\x47\x62\xa9\x02\x6b\x10\xf0\x13\xb1\xe7\x34\x3b\xc2\x5e\x77\x61\x52\x62\x20\x1e\x54\x3f\x5a\xb7\x9b\x40\x89\x15\x3a\x28\x6d\x00\x91\x87\xce\x78\xd2\xc1\x11\x87\x6f\x18\x24\x18\xc4\x12\xb8\xb6\x8f\x06\x1e\x48\x42\xeb\x6c\x45\x3a\xdc\x36\x47\x64\x69\xca\xe1\x04\x48\x87\x50\xa0\x51\x75\x23\xdd\x8e\x41\x3e\x48\xd2\x32\xf8\x9c\x30\x22\xd4\xde\xb7\xbc\xcc\xf3\xcf\x2e\x39\x2d\xcd\x26\xdf\xd8\x9c\x98\x3b\xe4\x7c\xb6\xb8\xba\x9a\x7e\xdd\xff\xa3\x6c\x13\xec\x3e\x3d\x9f\x9f\x4d\x2f\x17\xf3\xf3\xf3\x30\xce\x21\x40\xc3\xe4\x49\x91\x15\x5d\x95\x7e\x39\x4c\xca\xb6\xfb\x75\x8d\x6a\x97\xa4\x21\x48\x54\x41\x91\xc9\xb2\x74\x21\xb9\x86\x74\x1f\xdd\xe3\x74\x3d\xd7\x87\x0f\xc0\x60\x2c\xb2\x92\x2d\x4e\xe0\xb1\x26\x55\x43\x8b\xae\xb2\xae\xe1\x31\x64\xef\x2c\x85\x3b\x03\x1a\x69\xa8\xed\xb4\xf4\x64\x4d\x36\x20\x5f\xc7\x6f\x02\x6c\x81\x77\xd4\x02\xf9\x0c\xee\xff\xc9\x89\x30\x37\xf9\xfc\x62\x71\x31\x5f\x5c\xaa\xc5\x4c\x4e\x67\x57\x97\x78\x71\x26\xd5\xfc\xac\xba\x9c\xcf\x0a\x35\xbf\x9c\xce\xbe\x55\xf2\x62\x7e\x71\xb6\x98\x86\xa6\xe3\x64\x50\x88\xe8\x09\x50\x33\xc2\xcb\xbc\x5f\xad\xa0\x18\x16\x5a\x1a\x52\x49\x7c\xc8\xf8\x12\x48\x6b\xdc\x48\xdd\x07\xce\x56\x60\xac\x39\xfd\x1d\x9d\x1d\xf7\x2c\x38\x42\x58\x42\xb1\x87\x07\xa9\x3b\x8c\xd3\xb0\xc2\x4f\xe2\xcf\x00\x00\x00\xff\xff\x3c\x43\xb4\x54\xdf\x06\x00\x00"), }, "/src/strings/strings_test.go": &vfsgen۰CompressedFileInfo{ name: "strings_test.go", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 435119105, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 564780000, time.UTC), uncompressedSize: 388, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x90\xc1\x4a\xc4\x40\x0c\x86\xcf\xe6\x29\xc2\x9c\x76\x55\xba\xcf\xa0\x1e\x16\x04\x41\x3a\xbd\xcb\xd8\xa6\x75\x6c\x27\x33\x24\x19\x3c\x88\xef\x2e\xa5\xf5\x24\xe2\x6d\x8f\x81\xef\xcb\x07\xff\xe9\x84\x37\xaf\x35\x2e\x03\xbe\x2b\x40\x09\xfd\x1c\x26\x42\x35\x89\x3c\xe9\x8b\x91\x1a\x40\x4c\x25\x8b\xa1\x5b\xaf\xc8\x93\x03\x18\x2b\xf7\xd8\x91\xda\xfd\xaa\x92\xdc\x2d\x4b\xee\xf5\x60\x78\xbd\x33\x4d\x77\xc4\x4f\xb8\xb2\xc6\xcf\xb1\x1c\x9c\x54\xb6\x98\xa8\x69\x29\x0c\x4f\x94\xbc\x05\xd3\x5b\xfc\x61\x37\xfb\x99\xa4\xad\x8c\x9c\x0d\xb5\x96\xb5\x48\x03\x46\xc6\x73\x2e\x6f\x24\x8f\xde\x1d\xe1\xeb\x77\xf9\x2c\xf9\xe3\xa2\xdd\x87\x9c\x4a\x10\xf2\xdb\x42\x7f\xa7\x2b\x6b\x18\x77\xec\x9f\xe7\xdf\x01\x00\x00\xff\xff\xe9\xc8\x01\xe4\x84\x01\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xbc\x90\xc1\x4a\xc4\x40\x0c\x86\xcf\xe6\x29\xc2\x9c\x76\x55\xba\xcf\xa0\x1e\x16\x04\x41\x3a\xbd\xcb\xd8\xa6\x75\x6c\x27\x33\x24\x19\x3c\x88\xef\x2e\xa5\xf5\x24\xe2\x6d\x8f\x81\xef\xcb\x07\xff\xe9\x84\x37\xaf\x35\x2e\x03\xbe\x2b\x40\x09\xfd\x1c\x26\x42\x35\x89\x3c\xe9\x8b\x91\x1a\x40\x4c\x25\x8b\xa1\x5b\xaf\xc8\x93\x03\x18\x2b\xf7\xd8\x91\xda\xfd\xaa\x92\xdc\x2d\x4b\xee\xf5\x60\x78\xbd\x33\x4d\x77\xc4\x4f\xb8\xb2\xc6\xcf\xb1\x1c\x9c\x54\xb6\x98\xa8\x69\x29\x0c\x4f\x94\xbc\x05\xd3\x5b\xfc\x61\x37\xfb\x99\xa4\xad\x8c\x9c\x0d\xb5\x96\xb5\x48\x03\x46\xc6\x73\x2e\x6f\x24\x8f\xde\x1d\xe1\xeb\x77\xf9\x2c\xf9\xe3\xa2\xdd\x87\x9c\x4a\x10\xf2\xdb\x42\x7f\xa7\x2b\x6b\x18\x77\xec\x9f\xe7\xdf\x01\x00\x00\xff\xff\xe9\xc8\x01\xe4\x84\x01\x00\x00"), }, "/src/sync": &vfsgen۰DirInfo{ name: "sync", - modTime: time.Date(2019, 8, 11, 22, 43, 46, 32745917, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 15, 17, 156165800, time.UTC), }, "/src/sync/atomic": &vfsgen۰DirInfo{ name: "atomic", - modTime: time.Date(2018, 4, 20, 10, 43, 19, 305171943, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 15, 17, 31156200, time.UTC), }, "/src/sync/atomic/atomic.go": &vfsgen۰CompressedFileInfo{ name: "atomic.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 599799700, time.UTC), uncompressedSize: 3060, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x56\xcf\x6f\x9b\x3e\x14\x3f\xe3\xbf\xe2\x7d\x39\x54\xd0\x7e\x45\xa4\xad\xea\xa1\x52\x0e\xd5\x0e\x53\xa5\x49\x9b\x54\x75\x77\x07\x4c\xea\xcc\xb1\x91\xb1\x69\xa2\x28\xff\xfb\x64\x03\xc1\x80\x61\x5d\xb2\xf6\x84\x8b\xfc\xf9\xc1\x7b\x9f\xf7\x9a\xc5\x02\x6e\x56\x9a\xb2\x0c\x36\x25\x42\x05\x4e\x7f\xe1\x35\x01\xac\xc4\x96\xa6\x08\xd1\x6d\x21\xa4\x82\x08\x05\xa1\xe6\x25\xce\x49\x88\x50\x10\xae\xa9\x7a\xd1\xab\x24\x15\xdb\xc5\x5a\x14\x2f\x44\x6e\xca\xee\xb0\x29\x43\x14\x23\x94\x6b\x9e\xc2\xd3\x2b\x2e\x1e\xb9\xfa\xfc\x29\xc2\x59\x26\xe1\x9a\x9a\xf3\xff\xc0\xc9\x2b\xd8\x63\x5c\x3f\xe0\x80\x02\xc1\x32\xb8\x5f\xc2\xb5\xb9\x88\x02\xfb\x80\xa5\xb9\x89\x02\x49\x94\x96\x1c\x04\xcb\xd0\xb1\x4f\x7c\x77\xdb\x11\xdf\xdd\x9e\x88\xef\x6e\xe3\xfa\x71\x1e\xf1\x33\x75\x2c\x6b\xc7\xb3\x6e\x4c\xeb\x0b\x5c\x3f\x53\xc7\xb6\x76\x7c\xeb\xc6\xb8\xbe\xd0\x79\xa1\xa4\xc3\x5e\x28\xd9\xd1\x17\x4a\xc6\xed\xe1\x3c\x81\x1f\x82\x72\x45\x4e\x02\x36\x12\x49\xf3\xb2\xd1\xe9\xbd\x8b\x07\x7f\xff\xbd\xea\x17\xb1\x2d\xb0\x24\x0f\x3c\x9b\x08\x93\x60\x59\x2f\x51\x2b\x21\x98\x91\xa1\x39\x34\xdc\x4b\x73\xc7\xbc\xea\x8b\xb5\x6a\x4a\x6a\x82\x82\xe3\x49\x3d\xc7\xac\x24\xd3\xfa\xc3\xcc\xb9\xfa\xa6\x7f\xef\xaa\xef\x8d\xe6\xc9\x81\xfe\x88\x12\x78\x03\xdc\xb3\xf0\x21\x55\xf0\xc4\xbc\x67\xc2\x66\xfd\x5d\x5d\xcc\xcf\x42\x67\x66\x30\x10\xff\xd8\xd3\x43\x96\x79\x86\x22\x23\x4c\xe1\xd1\x8e\x35\x76\xda\xc9\x83\x9b\xfa\x92\x7f\x02\xcd\xd9\x51\xf0\xc6\xae\xd6\x18\xef\xc4\xb3\x55\x3c\xc3\x75\xfa\x8e\xde\x4a\xbf\xe8\x3b\x46\xd9\xed\xbe\xa3\xbf\x7e\x2f\x52\xf1\xc4\xb3\xd3\x19\xee\xe1\xf3\x94\xbe\x09\x3c\x6e\xbd\xd3\xed\x06\x52\xef\xd9\x01\xa8\x5f\x67\xa7\xb4\x93\x20\x4f\x04\xdc\xa6\xcf\xe2\x06\x25\x77\x8b\x3c\x8b\x1b\x15\xb1\x57\xb5\x49\xe8\xdc\x60\xfa\xfe\x21\x79\x89\x9e\x94\x90\xc4\x33\x59\x15\x66\xed\x5c\x1d\xba\x1e\x55\x98\x8d\x90\xc3\x2c\x37\x48\xf3\xfd\x73\x48\xef\xac\x19\xac\x7e\x83\xac\x37\xe0\x2d\xf8\x2d\xca\x9e\xdc\xb6\x70\x5b\xff\x39\xfc\xfc\x42\xb4\x34\x83\x5e\x4c\xb0\x45\x15\x5c\xff\xc4\x4c\x93\xd8\xf6\x33\x8a\x21\xda\x81\x85\xe4\x38\x25\x87\x63\xec\x74\xad\x4a\x2a\x1f\xce\x1a\xf2\xa0\x68\x0e\x3b\xb3\x71\x39\xb5\x4b\x38\x28\x30\xa7\x69\x14\x96\x7b\x9e\x2e\xea\x1f\xbd\xf7\x50\x1a\x2c\x88\xdc\x5e\xaa\x0c\x9f\xa1\x11\x60\xa9\xc3\xd8\xee\x62\x9a\x1b\x65\xf8\xaf\x66\xba\xba\x82\x4d\x99\x3c\x1a\x2d\x8e\xd9\xf7\xd5\x86\xa4\x2a\xda\xc5\xc9\x57\xa2\xa2\x30\x15\xbc\x54\x52\xa7\x4a\xc8\x30\x36\x88\xf1\xd5\x2a\xa9\xbc\x97\xff\xe8\x90\x72\x03\xa0\xa5\x22\x5c\xb1\x3d\xa8\x7d\x41\xb2\x29\xcb\xc6\xef\x12\x76\xe8\x88\x7e\x07\x00\x00\xff\xff\x2a\xf7\xf1\xfd\xf4\x0b\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xbc\x56\xcf\x6f\x9b\x3e\x14\x3f\xe3\xbf\xe2\x7d\x39\x54\xd0\x7e\x45\xa4\xad\xea\xa1\x52\x0e\xd5\x0e\x53\xa5\x49\x9b\x54\x75\x77\x07\x4c\xea\xcc\xb1\x91\xb1\x69\xa2\x28\xff\xfb\x64\x03\xc1\x80\x61\x5d\xb2\xf6\x84\x8b\xfc\xf9\xc1\x7b\x9f\xf7\x9a\xc5\x02\x6e\x56\x9a\xb2\x0c\x36\x25\x42\x05\x4e\x7f\xe1\x35\x01\xac\xc4\x96\xa6\x08\xd1\x6d\x21\xa4\x82\x08\x05\xa1\xe6\x25\xce\x49\x88\x50\x10\xae\xa9\x7a\xd1\xab\x24\x15\xdb\xc5\x5a\x14\x2f\x44\x6e\xca\xee\xb0\x29\x43\x14\x23\x94\x6b\x9e\xc2\xd3\x2b\x2e\x1e\xb9\xfa\xfc\x29\xc2\x59\x26\xe1\x9a\x9a\xf3\xff\xc0\xc9\x2b\xd8\x63\x5c\x3f\xe0\x80\x02\xc1\x32\xb8\x5f\xc2\xb5\xb9\x88\x02\xfb\x80\xa5\xb9\x89\x02\x49\x94\x96\x1c\x04\xcb\xd0\xb1\x4f\x7c\x77\xdb\x11\xdf\xdd\x9e\x88\xef\x6e\xe3\xfa\x71\x1e\xf1\x33\x75\x2c\x6b\xc7\xb3\x6e\x4c\xeb\x0b\x5c\x3f\x53\xc7\xb6\x76\x7c\xeb\xc6\xb8\xbe\xd0\x79\xa1\xa4\xc3\x5e\x28\xd9\xd1\x17\x4a\xc6\xed\xe1\x3c\x81\x1f\x82\x72\x45\x4e\x02\x36\x12\x49\xf3\xb2\xd1\xe9\xbd\x8b\x07\x7f\xff\xbd\xea\x17\xb1\x2d\xb0\x24\x0f\x3c\x9b\x08\x93\x60\x59\x2f\x51\x2b\x21\x98\x91\xa1\x39\x34\xdc\x4b\x73\xc7\xbc\xea\x8b\xb5\x6a\x4a\x6a\x82\x82\xe3\x49\x3d\xc7\xac\x24\xd3\xfa\xc3\xcc\xb9\xfa\xa6\x7f\xef\xaa\xef\x8d\xe6\xc9\x81\xfe\x88\x12\x78\x03\xdc\xb3\xf0\x21\x55\xf0\xc4\xbc\x67\xc2\x66\xfd\x5d\x5d\xcc\xcf\x42\x67\x66\x30\x10\xff\xd8\xd3\x43\x96\x79\x86\x22\x23\x4c\xe1\xd1\x8e\x35\x76\xda\xc9\x83\x9b\xfa\x92\x7f\x02\xcd\xd9\x51\xf0\xc6\xae\xd6\x18\xef\xc4\xb3\x55\x3c\xc3\x75\xfa\x8e\xde\x4a\xbf\xe8\x3b\x46\xd9\xed\xbe\xa3\xbf\x7e\x2f\x52\xf1\xc4\xb3\xd3\x19\xee\xe1\xf3\x94\xbe\x09\x3c\x6e\xbd\xd3\xed\x06\x52\xef\xd9\x01\xa8\x5f\x67\xa7\xb4\x93\x20\x4f\x04\xdc\xa6\xcf\xe2\x06\x25\x77\x8b\x3c\x8b\x1b\x15\xb1\x57\xb5\x49\xe8\xdc\x60\xfa\xfe\x21\x79\x89\x9e\x94\x90\xc4\x33\x59\x15\x66\xed\x5c\x1d\xba\x1e\x55\x98\x8d\x90\xc3\x2c\x37\x48\xf3\xfd\x73\x48\xef\xac\x19\xac\x7e\x83\xac\x37\xe0\x2d\xf8\x2d\xca\x9e\xdc\xb6\x70\x5b\xff\x39\xfc\xfc\x42\xb4\x34\x83\x5e\x4c\xb0\x45\x15\x5c\xff\xc4\x4c\x93\xd8\xf6\x33\x8a\x21\xda\x81\x85\xe4\x38\x25\x87\x63\xec\x74\xad\x4a\x2a\x1f\xce\x1a\xf2\xa0\x68\x0e\x3b\xb3\x71\x39\xb5\x4b\x38\x28\x30\xa7\x69\x14\x96\x7b\x9e\x2e\xea\x1f\xbd\xf7\x50\x1a\x2c\x88\xdc\x5e\xaa\x0c\x9f\xa1\x11\x60\xa9\xc3\xd8\xee\x62\x9a\x1b\x65\xf8\xaf\x66\xba\xba\x82\x4d\x99\x3c\x1a\x2d\x8e\xd9\xf7\xd5\x86\xa4\x2a\xda\xc5\xc9\x57\xa2\xa2\x30\x15\xbc\x54\x52\xa7\x4a\xc8\x30\x36\x88\xf1\xd5\x2a\xa9\xbc\x97\xff\xe8\x90\x72\x03\xa0\xa5\x22\x5c\xb1\x3d\xa8\x7d\x41\xb2\x29\xcb\xc6\xef\x12\x76\xe8\x88\x7e\x07\x00\x00\xff\xff\x2a\xf7\xf1\xfd\xf4\x0b\x00\x00"), }, - "/src/sync/atomic/atomic_test.go": &vfsgen۰FileInfo{ - name: "atomic_test.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), - content: []byte("\x2f\x2f\x20\x2b\x62\x75\x69\x6c\x64\x20\x6a\x73\x0a\x0a\x70\x61\x63\x6b\x61\x67\x65\x20\x61\x74\x6f\x6d\x69\x63\x5f\x74\x65\x73\x74\x0a\x0a\x69\x6d\x70\x6f\x72\x74\x20\x22\x74\x65\x73\x74\x69\x6e\x67\x22\x0a\x0a\x66\x75\x6e\x63\x20\x54\x65\x73\x74\x48\x61\x6d\x6d\x65\x72\x53\x74\x6f\x72\x65\x4c\x6f\x61\x64\x28\x74\x20\x2a\x74\x65\x73\x74\x69\x6e\x67\x2e\x54\x29\x20\x7b\x0a\x09\x74\x2e\x53\x6b\x69\x70\x28\x22\x75\x73\x65\x20\x6f\x66\x20\x75\x6e\x73\x61\x66\x65\x22\x29\x0a\x7d\x0a"), + "/src/sync/atomic/atomic_test.go": &vfsgen۰CompressedFileInfo{ + name: "atomic_test.go", + modTime: time.Date(2021, 3, 28, 16, 15, 17, 31156200, time.UTC), + uncompressedSize: 233, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x74\xce\x3d\x4e\xc4\x40\x0c\x05\xe0\x1a\x9f\xc2\x9a\x2a\x01\x94\x34\x88\x2b\x80\x10\x5d\x42\x8d\xcc\xc4\x49\x4c\xe6\x4f\x33\x1e\x28\x56\x7b\xf7\x55\x56\x29\xb6\xd9\xd2\xd6\xd3\xf7\x5e\xdf\xe3\xd3\x4f\x15\x37\xe1\x6f\x01\x48\x64\x37\x5a\x18\x49\xa3\x17\xfb\xad\x5c\x14\x40\x7c\x8a\x59\xd1\xec\x97\x84\xc5\x00\xcc\x35\x58\x1c\xb9\xe8\x3b\x79\xcf\x79\xd0\x98\xf9\x33\xd2\xd4\x28\x3e\x1e\xa9\x6e\x6c\xf1\x04\x0f\xda\x0d\x9b\xa4\xc6\xd4\xc2\x18\x67\xac\xa1\xd0\xcc\xa6\x85\xf3\x0d\xf2\x15\xc8\xc9\x12\x78\x7a\x7d\xb9\x0f\xbc\xc5\xb4\x72\xfe\x18\x90\x7d\x75\xa4\x5c\x8e\x8d\xe5\x19\xff\x57\xb1\x2b\x7a\xda\xf6\xe7\x2e\x79\x0e\x8a\x92\x33\x3b\xfe\xa3\xa0\xdd\xb5\xef\x12\x00\x00\xff\xff\x52\x1a\x3f\xba\xe9\x00\x00\x00"), }, "/src/sync/cond.go": &vfsgen۰CompressedFileInfo{ name: "cond.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 637780300, time.UTC), uncompressedSize: 511, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\x31\x73\xab\x30\x10\x84\x6b\xdd\xaf\xd8\x12\x1e\x83\x71\xfd\x6c\x9a\xe7\x96\xee\x4d\x26\xb5\x2c\x84\x7d\x41\x3e\x31\x20\x92\x61\x32\xfc\xf7\x8c\x90\x93\x14\xb6\x9a\x93\x76\x75\xfb\xcd\x56\x15\x8a\xf3\xcc\xae\xc5\xdb\x44\x34\x68\xd3\xeb\x8b\xc5\xb4\x88\x21\x0a\xcb\x60\x71\xf2\xd2\x62\x0a\xe3\x6c\x02\x3e\x49\x55\x15\x3a\xb6\xae\x9d\x30\x4f\xb6\xc5\x79\xc1\xbb\x16\x76\x4e\x83\x6f\x83\xb3\x37\x2b\x41\x07\xf6\x42\x4a\xfc\xc9\x0f\x0b\x90\x26\xa9\x06\xe9\x34\xde\xf4\x76\x8c\x7e\xe0\x6e\xf3\xe3\x6c\x78\x0a\xa4\xcc\xd5\x46\x13\xc6\x0f\xcb\x29\xdd\xe9\x19\x53\xec\xc7\x23\x0f\x60\xd9\x32\x60\xae\x5a\x70\xf6\xde\xd1\x4a\xd4\xcd\x62\x90\x19\xfc\x89\x4d\x72\xbc\x6a\x0e\x59\x1e\xab\x98\x9d\x14\x05\x29\xee\x60\x76\xe6\x8a\xba\x86\xb0\x8b\x86\x4a\x6f\xdc\x74\x6f\xb3\x9f\xac\x9c\xd4\x1a\x97\x9a\xdd\x8b\x38\x6f\xfa\x2c\x27\x75\x2c\xe3\xd7\xa4\x36\x49\x7b\x24\xfe\xe7\x8b\x68\x97\x98\x1b\x4c\x22\x6b\xbf\x91\x46\x1b\xe6\x51\xee\xc9\x52\x96\x94\xd8\xc7\x12\x61\x9c\xed\x93\xb0\x7f\xa3\xd7\xad\xd1\xd3\xbd\x83\xe0\x6f\x1d\x13\xb7\x75\xd4\xd8\x93\xea\xfc\x08\x8e\xf2\xfe\x00\xc6\x11\x72\x00\x17\xc5\x6f\xaf\xef\x6c\xb5\xd2\x4a\x5f\x01\x00\x00\xff\xff\x2c\xcb\x53\xaf\xff\x01\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x6c\x8f\x31\x73\xab\x30\x10\x84\x6b\xdd\xaf\xd8\x12\x1e\x83\x71\xfd\x6c\x9a\xe7\x96\xee\x4d\x26\xb5\x2c\x84\x7d\x41\x3e\x31\x20\x92\x61\x32\xfc\xf7\x8c\x90\x93\x14\xb6\x9a\x93\x76\x75\xfb\xcd\x56\x15\x8a\xf3\xcc\xae\xc5\xdb\x44\x34\x68\xd3\xeb\x8b\xc5\xb4\x88\x21\x0a\xcb\x60\x71\xf2\xd2\x62\x0a\xe3\x6c\x02\x3e\x49\x55\x15\x3a\xb6\xae\x9d\x30\x4f\xb6\xc5\x79\xc1\xbb\x16\x76\x4e\x83\x6f\x83\xb3\x37\x2b\x41\x07\xf6\x42\x4a\xfc\xc9\x0f\x0b\x90\x26\xa9\x06\xe9\x34\xde\xf4\x76\x8c\x7e\xe0\x6e\xf3\xe3\x6c\x78\x0a\xa4\xcc\xd5\x46\x13\xc6\x0f\xcb\x29\xdd\xe9\x19\x53\xec\xc7\x23\x0f\x60\xd9\x32\x60\xae\x5a\x70\xf6\xde\xd1\x4a\xd4\xcd\x62\x90\x19\xfc\x89\x4d\x72\xbc\x6a\x0e\x59\x1e\xab\x98\x9d\x14\x05\x29\xee\x60\x76\xe6\x8a\xba\x86\xb0\x8b\x86\x4a\x6f\xdc\x74\x6f\xb3\x9f\xac\x9c\xd4\x1a\x97\x9a\xdd\x8b\x38\x6f\xfa\x2c\x27\x75\x2c\xe3\xd7\xa4\x36\x49\x7b\x24\xfe\xe7\x8b\x68\x97\x98\x1b\x4c\x22\x6b\xbf\x91\x46\x1b\xe6\x51\xee\xc9\x52\x96\x94\xd8\xc7\x12\x61\x9c\xed\x93\xb0\x7f\xa3\xd7\xad\xd1\xd3\xbd\x83\xe0\x6f\x1d\x13\xb7\x75\xd4\xd8\x93\xea\xfc\x08\x8e\xf2\xfe\x00\xc6\x11\x72\x00\x17\xc5\x6f\xaf\xef\x6c\xb5\xd2\x4a\x5f\x01\x00\x00\xff\xff\x2c\xcb\x53\xaf\xff\x01\x00\x00"), }, - "/src/sync/export_test.go": &vfsgen۰CompressedFileInfo{ - name: "export_test.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), - uncompressedSize: 168, + "/src/sync/cond_test.go": &vfsgen۰CompressedFileInfo{ + name: "cond_test.go", + modTime: time.Date(2021, 3, 28, 16, 15, 17, 58157800, time.UTC), + uncompressedSize: 171, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\xca\x4d\x0a\xc2\x30\x10\x05\xe0\x7d\x4e\xf1\x96\x8a\x3f\xf1\x02\xde\x41\x0a\xae\x25\x4d\x5f\x35\xda\x4c\x42\x32\x29\x94\xd2\xbb\xbb\x15\xdc\x7f\xd6\xe2\xd0\xb7\x30\x0d\x78\x57\x63\xb2\xf3\x1f\xf7\x24\xea\x22\xde\x18\x6b\xd1\x71\x64\xa1\x78\x0e\xe8\x17\x28\xab\xd6\x23\x84\x1c\xa0\x09\x2f\x37\x13\x92\x4e\x29\x23\xc4\x3c\x31\x52\xd4\x69\x48\x52\xcf\x66\x76\x05\x5d\x13\x0d\x91\x8f\x5c\x92\xbf\x05\xc1\x15\x63\x13\xbf\xdb\x23\x88\x62\x45\xa1\xb6\x22\xb8\x60\xfb\xd3\x77\xc9\xbf\x7e\xdd\xcc\x37\x00\x00\xff\xff\x78\xcd\x49\xae\xa8\x00\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x2c\xcd\xb1\x6e\x83\x30\x10\x87\xf1\xb9\xf7\x14\x7f\x79\x29\xb4\x15\x3c\x04\x43\xa5\xae\xb0\x57\xc4\x1c\xd8\x81\xd8\x8e\xef\x2c\x84\xa2\xbc\x7b\x84\x94\xf1\xd3\x6f\xf8\xda\xf6\xfb\x52\xfc\x36\xe1\x2a\x44\x69\xb4\xeb\xb8\x30\xe4\x08\xf6\x5f\x59\x94\xc8\xdf\x52\xcc\x0a\x73\x96\x0f\x8b\x21\x9a\x4b\xb0\x18\x58\xb4\x8b\x61\xea\x62\x3a\x2a\xc5\xd7\x9b\x9b\xa1\xc6\x83\x3e\xb4\xe9\x57\x9f\x2a\x73\x2a\xac\x63\xbb\x72\x46\xe6\x7b\xf1\x99\x05\x79\xdc\x91\xa2\x0f\xca\x59\x7e\xb0\x3b\x6f\x1d\x7e\x63\x72\x9c\xff\x7a\x4c\x91\x25\x7c\x2a\xe6\xb2\x6d\x07\xa4\xa4\x73\xdf\x98\x9a\x9e\xf4\x0a\x00\x00\xff\xff\x89\x06\xd7\xea\xab\x00\x00\x00"), + }, + "/src/sync/map_test.go": &vfsgen۰CompressedFileInfo{ + name: "map_test.go", + modTime: time.Date(2021, 3, 28, 16, 15, 17, 82158200, time.UTC), + uncompressedSize: 170, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x2c\xcb\xb1\x6e\xc2\x30\x10\x80\xe1\xb9\xf7\x14\xa7\x4c\x49\x5b\x25\x1d\xba\xe4\x05\x5a\xb5\x6b\xb2\xa3\xe0\x1c\xc9\x11\xfb\x6c\xf9\xce\x42\x80\x78\x77\x04\x62\xfc\xa5\xff\xeb\xba\x8f\x7d\x61\x3f\xe3\x51\x01\xd2\xe4\xb6\x69\x21\xd4\xb3\xb8\x9d\x91\x1a\x00\x87\x14\xb3\x61\xf5\x28\x96\xa5\x02\x38\x14\x71\x38\x92\xda\x9f\x6a\xa1\xef\xaf\xbe\xef\x6b\xc3\xf7\xd7\xd0\x8e\x0d\x5e\xe1\xcd\xda\x61\xe3\x54\x3f\x19\x66\xf2\x4c\x8a\x51\x30\x17\x31\x0e\xd4\x0e\x64\x3f\x2c\x93\xe7\x0b\xe5\x4f\x3c\xad\xec\x56\xfc\x8d\x69\xa5\xfc\x3f\xe0\x1c\x49\x51\xa2\x21\x87\xe4\x29\x90\x58\xd5\xc0\x0d\xee\x01\x00\x00\xff\xff\x44\x24\xd3\x1f\xaa\x00\x00\x00"), }, "/src/sync/pool.go": &vfsgen۰CompressedFileInfo{ name: "pool.go", - modTime: time.Date(2019, 8, 11, 22, 43, 46, 32527631, time.UTC), - uncompressedSize: 505, + modTime: time.Date(2021, 3, 28, 16, 15, 17, 111162300, time.UTC), + uncompressedSize: 1385, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xcf\x4e\xf3\x30\x10\xc4\xcf\xde\xa7\x98\xaf\xa7\xe4\x03\x5a\xb8\x56\xca\x89\x03\x37\x54\x89\x63\x55\x21\xe3\x6e\x2a\x83\xeb\x58\xce\x5a\xa4\x54\x79\x77\xe4\x24\xfd\x83\x20\x97\x68\x77\x46\xbf\x99\xf5\x62\x81\x9b\xb7\x64\xdd\x16\xef\x2d\x51\xd0\xe6\x43\xef\x18\xed\xc1\x1b\x22\xbb\x0f\x4d\x14\xcc\x92\x6f\x75\xcd\x33\x22\x39\x04\xc6\xaa\x69\x1c\x5a\x89\xc9\x08\x8e\xa4\x5c\x63\xb4\x43\xfe\x46\xdb\x7c\xd5\x58\x2f\x1c\x27\xe5\xc5\x7e\x31\x92\xf5\x12\x24\x12\xa9\x56\x9a\xc8\x58\x6f\x06\x4b\xad\x0d\x1f\x7b\x52\xcf\xfc\x09\xa0\x4e\xde\x14\x25\xae\x95\x9e\x28\x6f\x51\x04\xfc\xcf\xb1\x25\x9e\x58\x7e\x7a\x72\x05\x5b\xc3\xb1\x2f\xc2\x7c\xa0\x97\xa8\x2a\xdc\xe7\x7d\x16\xc2\x3c\xd3\xff\x55\xf0\xd6\x0d\x3b\x15\x59\x52\xf4\xa3\x50\x94\xa4\x54\x4f\xe7\xa5\xb7\x8e\xf2\xdc\x61\x59\x61\xe2\xad\xaf\xd9\x77\x0f\x1b\x52\xd3\x80\x8b\x65\xf9\xcb\x33\x01\xbb\x3f\x6e\x58\x25\x29\xba\xeb\x1b\xca\xe9\x88\x2e\x37\x3f\xf5\x1c\x01\x43\x9b\x4b\x9e\x0e\x81\xfd\xf6\x94\x74\x8b\xae\x3c\xf3\x63\xf2\x62\xf7\xfc\x1a\x79\x67\x5b\xe1\x98\xb3\x1e\x1d\x6b\x9f\x42\x61\xc6\xff\xf4\xc4\x39\xae\xa7\xef\x00\x00\x00\xff\xff\xd6\xf1\x0f\x08\xf9\x01\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x6c\x94\x4f\x8f\x1b\x37\x0c\xc5\xcf\x9e\x4f\xf1\x7a\xaa\xdd\x7a\xed\xa4\x47\x03\x7b\x28\x5a\x20\x40\x0e\x49\x80\xa4\xa7\x20\x28\x68\x89\xe3\xe1\x5a\x23\x0a\x12\xc7\x7f\xba\xf0\x77\x2f\x34\x63\xd7\x9b\x6c\x6f\x16\x45\xff\xde\xe3\x13\x31\xeb\x35\x7e\xdd\x0e\x12\x3c\x9e\x4a\xd3\x24\x72\x7b\xda\x31\xca\x39\xba\xa6\x59\xaf\xf1\x3b\x3e\xa9\x06\x48\x01\xa1\xb0\x41\x5b\x18\xf7\x49\x33\xe5\x33\x74\xfb\xc4\xce\x0a\xac\x23\x43\x4f\x67\x6c\x19\x12\xbd\x1c\xc4\x0f\x14\xc2\x19\x85\x0e\xec\x41\xd1\x57\x54\x66\xcb\xc2\x07\xf6\xab\x66\xbd\xae\x85\x77\x9a\x3a\xce\xef\x3f\x23\x65\x3d\x88\xe7\x51\x43\xfa\x14\x38\x2f\x11\x49\x0e\x8c\xf1\xd4\x73\x34\x32\xd1\x88\xa3\x58\x87\xa8\xa3\xbd\x2e\x6b\x94\x7f\xa6\x3a\x59\xe5\x51\x08\x2b\x7c\xe9\xa4\x54\xbb\xc5\x24\x04\x38\xcd\x99\x9d\xa1\xd5\x0c\xeb\xf8\x2e\x99\x87\x68\xd2\x33\xb6\xec\x68\x28\xbc\xb9\x5a\xc2\xdb\x15\xde\xd3\x81\x3e\xbb\x2c\xc9\x46\x8e\xc4\x5d\xe0\x07\xeb\x32\x93\x67\xbf\x44\x51\xc8\x78\x23\x7d\xd2\x52\x64\x1b\x78\xc2\x1f\x15\x53\x57\x81\x29\xb6\x3c\xf2\x00\x90\x73\x5c\x2a\x66\x74\x90\x6a\x9c\x64\xe3\xef\x42\x3d\xa3\xd7\x3a\x1f\x24\xa2\x1a\x5a\x8d\xff\xfa\x6d\x75\x77\xba\xd3\xac\x83\x49\x7c\x15\xc6\x50\xb8\xc0\xa9\x26\xce\x64\x35\xac\x7e\x08\x26\x0f\x46\x65\x5f\xc5\x7a\xf5\x1c\x96\x37\x13\xc7\x4e\x5c\x07\x8d\xe1\x5c\x63\xd2\x63\x41\xa2\xc9\x94\xd3\x68\x59\x43\xf5\xac\xd6\x71\xbe\x0b\x16\x1c\x3b\x8e\xa3\xd3\x76\x88\xae\x8a\xde\x70\xbd\xec\x3a\xc3\x36\xa8\xdb\xdf\x5e\xf3\xcb\xc7\x3f\x3f\xce\x23\x1f\xf6\x1a\x8d\xf6\xc6\x8b\x0d\xfe\xd0\x58\xc4\x73\x06\x79\x5f\xa5\x08\xfd\x60\x7c\xc2\xd3\x50\x6c\xca\x08\x85\x5a\x86\xb4\x35\x52\xaf\x5c\xe2\xcf\xe3\x4b\xba\xcc\x64\x0c\x42\xa0\xbc\x63\x24\xce\xad\xe6\x9e\xa2\x63\x74\x62\x37\xc5\x0f\x6a\xbc\xa9\xf6\x32\x5f\x17\x34\xb1\x13\x0a\xe8\x28\xfa\x50\x05\x65\x72\xbf\x1b\xb3\x7c\x2a\xeb\x69\xd1\x6f\x4b\x3e\xae\x6d\x2b\xc1\x38\x97\xca\xd3\xc1\x6a\x38\xd0\x2c\x3b\x89\x14\xae\xab\xff\x7d\xea\x12\xa1\xb9\xce\x64\x0a\x3a\xa8\x78\xd0\x71\x7f\xa4\xec\x31\xc4\xa1\xb0\x47\x2b\x1c\x7c\x99\x16\xbe\xe5\xcc\xd1\xb1\xc7\xf6\x0c\xcf\xe4\xe1\xd4\xf3\xaa\xb1\x73\xe2\x09\x5e\x2c\x0f\xce\xf0\xdc\xcc\x8a\x69\x66\x7c\xfd\x26\xd1\x38\xb7\xe4\xf8\xf9\xd2\xcc\x3e\xf0\x11\x18\xc3\x9f\x2f\xf0\xf2\xe6\xd2\x34\xb5\x8a\x79\xc2\x2f\x15\xb4\xc0\x3b\xb6\xef\x7b\x2a\x54\x5a\x04\x8e\xf3\xb4\x1a\xe9\x0b\x3c\x3e\xe2\x4d\xad\xd7\x8b\xb4\xaa\xf4\x9f\x1e\x11\x25\x8c\xb5\x59\x66\x1b\x72\x9c\x2e\xe6\x8b\x66\x36\xbb\x34\xff\x15\xa3\x84\xa6\x9e\x4f\xd8\x3c\xe2\xca\xfb\xfa\x92\xfd\xf0\xf6\x5b\x33\xbb\x1e\x70\x6f\xd9\xbc\xea\xb9\x02\x4f\xff\x33\xc3\xa7\xc1\xe6\xa7\x97\x33\x2c\xae\x43\x9c\xaa\xf3\x9b\xcf\x09\x30\xba\xb9\xeb\x51\x4a\x1c\xfd\x4d\x69\x89\xd3\xa2\xf2\xeb\x5a\x76\x5c\x18\x94\xf9\x87\xe7\x30\x2e\x56\x96\xd8\xd6\x37\xcf\x8c\xa8\x0f\x9a\x4a\x7d\xdd\x1f\x3f\x11\xab\xc9\xe5\xf5\xf4\x77\xca\xea\x3e\x49\x9c\xb2\xc6\x33\xae\xe3\xbc\xc1\xe5\x75\xdf\x5f\x31\x8d\x9d\xc0\xf3\xa5\xf9\x37\x00\x00\xff\xff\xee\x6d\x8d\xe1\x69\x05\x00\x00"), }, - "/src/sync/sync.go": &vfsgen۰CompressedFileInfo{ - name: "sync.go", - modTime: time.Date(2019, 8, 11, 22, 43, 46, 32808177, time.UTC), - uncompressedSize: 2015, + "/src/sync/pool_test.go": &vfsgen۰CompressedFileInfo{ + name: "pool_test.go", + modTime: time.Date(2021, 3, 28, 16, 15, 17, 131163600, time.UTC), + uncompressedSize: 836, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x55\xdb\x6e\xe3\x36\x10\x7d\x36\xbf\x62\x60\x14\xa8\x94\xd8\x52\xd2\x2d\xb6\x40\xb0\x7e\x28\xb2\xc5\x22\x40\xbb\x0b\x34\x29\xfa\x10\x18\x0d\x25\x8d\x4c\xc6\x14\xa9\x72\x28\xab\x6e\x90\x7f\x5f\x0c\xa5\xf8\x92\x9b\x5f\x4c\x90\x33\x67\xce\x9c\xb9\x28\xcf\xe1\xb4\xe8\xb4\xa9\xe0\x9e\x84\x68\x65\xb9\x96\x2b\x04\xda\xda\x52\x08\xdd\xb4\xce\x07\x98\xae\x74\x50\x5d\x91\x95\xae\xc9\x57\xae\x55\xe8\xef\x69\x7f\xb8\xa7\xa9\x10\x1b\xe9\x81\xb0\xf9\x5b\xea\x80\x9e\x60\x01\x8d\x5c\x63\xd2\xc8\xf6\xf6\xa4\xd3\x36\x7c\xf8\x69\x79\xbb\x2c\x95\xb4\x50\x38\x67\x52\x21\xf2\x9c\xcd\x7f\xed\xdd\x1a\x2d\x04\x2f\xcb\x35\x41\x50\x08\xb6\x6b\x0a\xf4\xe0\x6a\xe8\x47\x28\x39\xd8\x14\x5b\xf0\x9d\x0d\xba\xc1\x7f\xae\xb1\xf1\x68\x50\x12\x42\x72\x57\x2a\xf8\x34\x87\xe0\x3b\xbc\x4b\x19\x35\x28\x19\x40\xc9\x0d\x82\x75\x01\xb6\x18\x40\x96\xff\x76\xda\x63\x15\xf1\x09\x1b\xd9\x2a\xe7\xd9\xf5\xd3\xbc\x54\x77\xa0\xed\x21\xf0\x68\xfc\x47\x17\xf0\xbf\x34\x13\x79\xce\x98\x37\x4a\x13\xb4\x1e\x37\x68\x03\x81\x04\x8b\x3d\x94\xd2\x18\x08\xee\x2d\x5f\x7e\xea\xbd\xb3\x2b\xb3\x7d\x22\x70\x1c\x9f\x71\xb5\x85\x02\x43\x8f\x68\x21\x29\xb0\x94\x1d\xe1\x6b\x49\x2a\x49\x20\x8d\x47\x59\x6d\x41\xdb\xd2\x63\x83\x36\xbc\xc8\xa7\x57\xda\x44\xd4\x48\x4c\x21\xb4\x68\x2b\x6d\x57\x91\x29\xbd\x47\xf5\x48\x2d\x8f\x25\xea\x0d\x56\x50\x7b\xd7\x44\x1c\x2e\x9b\x45\x13\xa1\x2d\x47\xed\x08\x2a\x7c\x83\xc6\x4e\xb3\x6b\x44\x50\x21\xb4\x74\x91\xe7\xef\xb6\x8f\x26\xea\x90\xf2\x5f\x3e\x7c\xcc\x9e\xba\x68\x6c\x8b\x57\x9a\x68\xf8\x4b\x85\xa8\x3b\x5b\xbe\x92\x50\x42\x30\x9a\xa6\xf0\x20\x26\x6f\x64\x9c\xd0\x0c\x6a\x69\x08\x53\xf1\x28\x06\xb2\xc7\x8a\x68\x02\xa3\xd7\x78\x70\x3f\x83\xa2\x0b\x50\x3b\x0f\xad\x77\xb5\x36\x51\x58\x67\x03\xda\x0a\x2b\x88\x5e\x48\x9c\xfb\x70\x3e\xb0\xd2\x14\xb5\xa5\xae\xe5\x59\xc2\x6a\x06\xe4\xe0\xbe\xa3\x00\x5c\xee\x28\x9e\x6c\x10\x74\xd3\x9a\xa8\xa8\x0c\xda\x59\x90\xf4\x4a\x76\x11\xff\xe6\xdb\xe7\x6f\x17\x70\x65\x37\x48\x41\xaf\x64\x60\x0c\x4d\x19\x5c\xd5\xa0\xc3\x8f\x04\xad\x23\xd2\x85\x41\xae\xf8\x0e\x74\xc6\x64\x49\x57\xe8\xa1\x72\xcc\x8a\xdc\x0c\x5c\x50\xe8\x7b\xcd\x4d\x87\x8d\xdb\x0c\x40\x50\xba\x86\x3d\xb2\xb7\x24\x1e\x15\x7c\xd2\x79\x06\x46\xd7\x6e\x18\x6b\x96\x5c\xd7\x90\x9c\x10\xcc\xf7\x75\xbc\xa5\x65\x0a\x8b\x05\x9c\xf1\xf3\xa4\x54\x70\x31\x16\xf6\x60\x1f\x4c\xd8\x2f\x02\xb1\xcd\x64\xbf\x49\x6e\x69\x09\x0b\x90\x2d\x37\x73\x72\xb0\x42\x1e\x4a\xf5\x38\x83\x23\xbb\x2c\xcb\x18\xe8\x11\xd0\x10\xbe\x8b\x73\x74\x3d\x83\x52\x45\x3f\x31\x99\xf0\x46\x10\xd1\x6d\x47\x1d\xe6\x0b\x38\x1f\xf8\x1d\x5d\xef\x12\x9a\x54\x68\x30\x60\xb2\x7b\x9d\x01\x8d\x78\x8f\x62\x72\x42\xf3\x39\x37\xd9\x73\x31\xc7\xd9\x3e\xd4\x51\x49\x5b\xb9\xba\xde\x4b\xb9\x2b\xf6\x5f\x71\x09\x0c\xaf\xba\x06\x8b\x58\x61\x95\x3f\x15\x3a\xe3\x28\xa7\xa7\x42\x4c\x7a\x96\xf6\x28\xb9\x58\x0f\x83\x36\xe9\x0f\x4a\xe0\x31\x74\xde\x32\x3d\x31\x96\xa3\xbf\x3d\x5b\xb2\x3b\x9f\xce\x2f\x96\xe2\x85\x70\xfd\xab\x40\xfb\xcc\x47\xe3\x21\x75\xc6\x3d\xd2\xea\x94\x25\x8c\xb1\xc6\x55\xfd\x42\x11\xeb\x82\xae\xb7\xbf\x6b\x0a\x97\x0a\xcb\x75\x42\xfa\x7f\x04\x16\xa6\x0d\x3e\x85\x87\xe7\xe6\xa5\xb4\xd7\xad\xb6\x89\x06\x6d\x43\x1a\x15\x8b\xe3\x1e\x13\x1b\x46\x7b\x9c\xec\x4b\xd7\x6e\xf9\x6b\xc2\x6e\xd9\xe8\xfe\x55\x5a\xf7\xac\xbd\xad\x64\x06\x0d\x26\x29\x23\x7e\xfc\x99\xd1\x78\x62\x02\x34\xda\x18\x4d\x58\x3a\x5b\xc1\x02\xce\xcf\xe2\x6f\x17\xea\x9e\xb2\x2f\xc6\x15\xd2\x64\x5f\x30\x24\xd3\xcf\x32\xe0\x34\xcd\xbe\x62\x9f\xa4\xd9\xa5\x34\x26\x99\xae\x30\xdc\xe8\x86\x6f\xaf\x18\x38\x49\xe1\xe4\x10\x73\xa4\x79\xf5\x34\xa8\x58\x1d\x7c\x90\x46\x92\x41\x79\xd7\x27\x04\x14\xbc\xb6\xab\xd8\x1a\xfb\xb8\x43\x94\x1f\xa2\xcd\x9f\x83\xdb\x6f\xde\x3b\x3f\x8d\xb5\x78\x14\xdf\x03\x00\x00\xff\xff\xaa\x5d\x20\xc4\xdf\x07\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xbc\x91\x41\x6b\xdc\x30\x10\x85\xcf\x9a\x5f\x31\x11\x94\xda\xad\x51\xee\x0b\x7b\xda\x52\x43\x4f\xa1\x59\xe8\x21\x84\x22\xdb\x63\x5b\x8d\x2d\xa9\xd2\xa8\xe9\xb2\xf8\xbf\x17\x89\x4d\x0e\x4d\x0f\x3d\xed\x4d\xd6\x7b\xf3\xde\xe7\xd1\xed\x2d\x7e\xec\x92\x59\x06\xfc\x11\x01\xbc\xee\x9f\xf4\x44\x18\x4f\xb6\xff\xce\x14\x19\xc0\xac\xde\x05\xc6\x0a\x84\x42\x99\xef\x25\x08\x99\x25\x63\x27\x09\x35\xc0\x98\x6c\x8f\x47\x8a\x7c\xe7\xdc\x52\x31\x7e\xb8\x88\xea\x58\xe3\x19\xc4\x2f\x1d\xd0\x63\xd6\x40\x98\x11\xbd\x6a\x89\xab\x1a\x6f\xf6\x68\xcd\x92\x0d\x82\xd5\x67\xcd\x7a\xa9\x24\xfd\xf6\xd4\x33\x0d\x48\xab\xe7\x93\xac\x41\x6c\x00\xc2\xab\xbb\xc4\x95\xd4\xf9\xfb\x72\xee\x64\x0d\x20\x9e\xb5\x65\xdc\xed\xf1\xe1\xd1\x58\xa6\x30\xea\x9e\xce\xdb\x59\x76\xb2\x41\xa9\x65\x93\xf3\x37\x10\xa3\x0b\x68\xb2\x2d\x68\x3b\x11\x96\xa1\xdc\x3a\xb9\x32\x7c\xe1\x01\x91\xe1\xf2\xdd\xcd\xbe\x78\x1e\xcc\x63\xb1\xbd\xd0\x8d\x95\x6c\x1d\xef\x5e\xf9\x03\x71\x0a\x96\x86\x1d\xbe\x8b\x0a\xbf\x69\xcb\xe5\x24\x9b\x1c\xd2\x94\x88\x1c\xba\x95\x7f\xd8\xfe\xda\x52\x7b\x78\xbb\x27\x56\xf7\x4f\xc6\x57\xf2\x38\x9b\x88\x59\xc2\x14\x29\x62\x48\x96\xcd\x4a\xaa\x3d\x54\x75\x83\xcf\xb3\xe9\x67\x6c\x9d\x9f\x29\x7c\xb9\xc7\xc1\x51\xb4\xef\x19\x63\xf2\xf9\x91\x94\xac\xdf\x54\x7d\xa5\x85\x74\xa4\xab\xf5\x7d\xa2\x9f\x89\xd2\x7f\xf5\xb1\x0e\x13\x71\xc4\xe4\x23\x07\xd2\x2b\x7a\xe7\x16\x34\xab\x5f\x68\x25\xcb\x9a\x8d\xb3\x2f\x08\x26\xa2\x75\x05\x71\xc0\xee\xf4\x4a\xf4\x2f\x82\xc3\xac\x8d\xbd\x6a\xff\x9f\x00\x00\x00\xff\xff\x4c\x8c\xfb\x16\x44\x03\x00\x00"), }, - "/src/sync/sync_test.go": &vfsgen۰CompressedFileInfo{ - name: "sync_test.go", - modTime: time.Date(2018, 1, 25, 23, 45, 7, 0, time.UTC), - uncompressedSize: 240, + "/src/sync/sync.go": &vfsgen۰CompressedFileInfo{ + name: "sync.go", + modTime: time.Date(2021, 3, 28, 16, 15, 17, 157172400, time.UTC), + uncompressedSize: 2050, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd2\xd7\x57\xd0\x4e\x2a\xcd\xcc\x49\x51\xc8\x2a\xe6\xe2\x2a\x48\x4c\xce\x4e\x4c\x4f\x55\x28\xae\xcc\x4b\x8e\x2f\x49\x2d\x2e\xe1\xe2\xca\xcc\x2d\xc8\x2f\x2a\x51\xd0\xe0\xe2\x54\x02\x09\x64\xe6\xa5\x2b\x71\x69\x72\x71\xa5\x95\xe6\x25\x2b\x84\xa4\x16\x97\x04\xe4\xe7\xe7\x68\x94\x28\x68\x41\x25\xf5\x42\x34\x15\xaa\xb9\x38\x4b\xf4\x82\xb3\x33\x0b\x34\x34\xb9\x6a\xd1\x94\xba\x3b\x93\xa0\x38\x28\x35\x27\x35\xb1\x38\x95\x48\x1d\xce\xf9\x79\x29\xce\xf9\x05\x95\x78\x95\x03\x02\x00\x00\xff\xff\x93\xcf\x90\x60\xf0\x00\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x7c\x55\x4d\x6f\xe3\x36\x10\x3d\x9b\xbf\x62\x60\x14\xa8\x94\xc8\x52\xd2\x2d\xb6\x40\xb0\x3e\x14\xd9\x62\x11\xa0\xdd\x05\x9a\x14\x3d\x04\x46\x43\x4b\x23\x93\x31\x45\xaa\x1c\xca\xaa\x1b\xe4\xbf\x2f\x86\x52\x1c\x3b\x89\xe3\x8b\x09\x72\xe6\xcd\x9b\x37\x1f\x2a\x0a\x38\x5d\x76\xda\x54\x70\x4f\x42\xb4\xb2\x5c\xcb\x15\x02\x6d\x6d\x29\x84\x6e\x5a\xe7\x03\x4c\x57\x3a\xa8\x6e\x99\x97\xae\x29\x56\xae\x55\xe8\xef\xe9\xf9\x70\x4f\x53\x21\x36\xd2\x03\x61\xf3\xb7\xd4\x01\x3d\xc1\x1c\x1a\xb9\xc6\xa4\x91\xed\xed\x49\xa7\x6d\xf8\xf0\xd3\xe2\x76\x51\x2a\x69\x61\xe9\x9c\x49\x85\x28\x0a\x36\xff\xb5\x77\x6b\xb4\x10\xbc\x2c\xd7\x04\x41\x21\xd8\xae\x59\xa2\x07\x57\x43\x3f\x42\xc9\xc1\x66\xb9\x05\xdf\xd9\xa0\x1b\xfc\xe7\x1a\x1b\x8f\x06\x25\x21\x24\x77\xa5\x82\x4f\x33\x08\xbe\xc3\xbb\x94\x51\x83\x92\x01\x94\xdc\x20\x58\x17\x60\x8b\x01\x64\xf9\x6f\xa7\x3d\x56\x11\x9f\xb0\x91\xad\x72\x9e\x5d\x3f\xcd\x4a\x75\x07\xda\xee\x03\x8f\xc6\x7f\x74\x01\xff\x4b\x73\x51\x14\x8c\x79\xa3\x34\x41\xeb\x71\x83\x36\x10\x48\xb0\xd8\x43\x29\x8d\x81\xe0\x8e\xf9\xf2\x53\xef\x9d\x5d\x99\xed\x13\x81\xc3\xf8\x8c\xab\x2d\x2c\x31\xf4\x88\x16\x92\x25\x96\xb2\x23\x7c\x2b\x49\x25\x09\xa4\xf1\x28\xab\x2d\x68\x5b\x7a\x6c\xd0\x86\x57\xf9\xf4\x4a\x9b\x88\x1a\x89\x29\x84\x16\x6d\xa5\xed\x2a\x32\xa5\xf7\xa8\x1e\xa8\xe5\xb1\x44\xbd\xc1\x0a\x6a\xef\x9a\x88\xc3\x65\xb3\x68\x22\xb4\xe5\xa8\x1d\x41\x85\x47\x68\xec\x34\xbb\x46\x04\x15\x42\x4b\x17\x45\xf1\x6e\xfb\x68\xa2\x0e\xa9\xf8\xe5\xc3\xc7\xfc\xa9\x8b\xc6\xb6\x78\xa3\x89\x86\xbf\x54\x88\xba\xb3\xe5\x1b\x09\x25\x04\xa3\x69\x0a\x0f\x62\x72\x24\xe3\x84\x32\xa8\xa5\x21\xcc\xe0\x3c\x15\x8f\x62\xe0\x7b\x28\x8a\x26\x30\x7a\x8d\x7b\xf7\x19\x2c\xbb\x00\xb5\xf3\xd0\x7a\x57\x6b\x13\xb5\x75\x36\xa0\xad\xb0\x82\xe8\x85\xc4\xe9\x0f\xe7\x3d\x2b\x4d\x51\x5e\xea\x5a\x1e\x27\xac\x32\x20\x07\xf7\x1d\x05\xe0\x8a\x47\xfd\x64\x83\xa0\x9b\xd6\x44\x51\x65\xd0\xce\x82\xa4\x37\x12\x8c\xf8\x37\xdf\x3e\x7f\xbb\x80\x2b\xbb\x41\x0a\x7a\x25\x03\x63\x68\xca\xe1\xaa\x06\x1d\x7e\x24\x68\x1d\x91\x5e\x1a\xe4\xa2\xef\x40\x33\x26\x4b\xba\x42\x0f\x95\x63\x56\xe4\x32\x70\x41\xa1\xef\x35\xf7\x1d\x36\x6e\x33\x00\x41\xe9\x1a\xf6\xc8\x8f\xa9\x3c\x8a\xf8\x24\x75\x06\x46\xd7\x2e\x4e\x76\x06\xb4\xd6\x6d\xed\x65\x83\x04\xda\x86\x58\x05\x5d\x43\x72\x42\x30\x7b\x2e\xed\x2d\x2d\x52\x98\xcf\xe1\x8c\x9f\x27\xa5\x82\x8b\xb1\xd6\x7b\x2b\x62\xc2\x7e\x11\x98\x6d\x26\xcf\xcb\xe5\x96\x16\x30\x07\xd9\x72\x7f\x27\x7b\x5b\xe5\xa1\x54\x8f\x19\x1c\xd8\xe5\x79\xce\x40\x8f\x80\x86\xf0\x5d\x9c\x83\xeb\x0c\x4a\x15\xfd\xc4\x64\xc2\x4b\x42\x44\xb7\x1d\x75\x98\xcd\xe1\x7c\xe0\x77\x70\xbd\x4b\x68\x52\xa1\xc1\x80\xc9\xee\x35\x03\x1a\xf1\x1e\xc5\xe4\x84\x66\x33\x6e\xba\x97\xe2\x8e\xe3\xbe\xaf\xab\x92\xb6\x72\x75\x7d\x5c\xda\x5d\x33\xfc\x15\xf7\xc4\x60\xad\x6b\xb0\x88\x15\x56\xc5\x53\x23\xe4\x1c\xf5\xf4\x54\x88\x49\xcf\x52\x1f\x24\x1b\xeb\x63\xd0\x26\xfd\x5e\x49\x3c\x86\xce\x5b\xa6\x2b\xc6\xf2\xf4\xb7\x67\x0b\x76\xe7\xd3\xf9\xc5\x42\xbc\x12\xb2\x7f\x13\xe8\x59\x89\xd1\x78\x90\x82\x71\x0f\xb4\x3b\x65\x49\x63\xac\x71\x9b\xbf\x52\xc8\xba\xa0\xeb\xed\xef\x9a\xc2\xa5\xc2\x72\x9d\x90\xfe\x1f\x81\x85\x6a\x83\x4f\xe1\xe1\xa5\x79\x29\xed\x75\xab\x6d\xa2\x07\xad\x58\xc1\xb8\x11\x62\x62\xc3\xf4\x8f\x93\x7f\xe9\xda\x2d\x7f\x70\xd8\x2d\x1f\xdd\xbf\x4a\xeb\x5e\xb4\xbf\x95\xcc\xa0\xc1\x24\x65\xc4\x8f\x3f\x33\x1a\x4f\x54\x80\x46\x1b\xa3\x09\x4b\x67\x2b\x98\xc3\xf9\x59\xfc\xed\x42\xdd\x53\xfe\xc5\xb8\xa5\x34\xf9\x17\x0c\xc9\xf4\xb3\x0c\x38\x4d\xf3\xaf\xd8\x27\x69\x7e\x29\x8d\x49\xa6\x2b\x0c\x37\xba\xe1\xdb\x2b\x06\x4e\x52\x38\xd9\xc7\x1c\x69\x5e\x3d\x0d\x32\x56\x7b\xdf\xac\x91\x64\x50\xde\xf5\x09\x01\x05\xaf\xed\x2a\xb6\xc6\x73\xdc\x21\xca\x0f\xd1\xe6\xcf\xc1\xed\x37\xef\x9d\x9f\xc6\x5a\x3c\x8a\xef\x01\x00\x00\xff\xff\x5e\x6c\xbf\x40\x02\x08\x00\x00"), }, "/src/sync/waitgroup.go": &vfsgen۰CompressedFileInfo{ name: "waitgroup.go", - modTime: time.Date(2018, 8, 25, 22, 2, 53, 557321982, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 734794100, time.UTC), uncompressedSize: 446, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xd0\x4d\x4e\xc3\x30\x10\x05\xe0\xb5\xe7\x14\x8f\x2e\x2a\x87\x0a\x5a\xe8\x0e\x35\x48\xac\x38\x02\x0b\xc4\xc2\x38\x6e\x62\x1a\x26\x51\x32\xa6\xaa\xaa\xdc\x1d\xd9\x04\x08\x3f\xcd\x2a\x7a\x1e\x7d\x7e\x9e\xe5\x12\x8b\xe7\xe0\xeb\x02\x2f\x3d\x51\x6b\xec\xce\x94\x0e\xfd\x81\x2d\x91\x1c\x5a\x87\x07\xe3\xe5\xbe\x6b\x42\x8b\x5e\xba\x60\x05\x47\x52\xb6\x09\x2c\xae\x83\x67\x21\x65\x2b\xa4\xcf\x56\x86\xc7\x99\xe3\x40\xa4\x7a\x31\xe2\xae\xf0\xb8\x7e\x0a\x9e\x65\x7d\x4d\x03\xd1\x36\xb0\x85\xde\x97\x38\xff\x62\x33\xdc\x15\x85\x2e\x5c\x2d\x26\x7a\x59\xf4\xf7\xe5\xe5\xe7\x15\x8b\x1c\xe9\x8c\x94\xdf\x62\x92\x6f\xb0\x8a\x93\xaa\x35\xec\xad\x9e\xc5\xc2\x37\x60\x57\x1a\xf1\x6f\xd3\xd2\xe3\xfc\x2c\x23\x35\xfc\x36\x6e\xb1\xc2\x7c\x9e\x92\x0a\x79\x0e\xf6\x75\x32\xc7\x00\xaf\x66\xe7\xf4\x8f\x67\xfd\xa7\xe4\xf9\x94\x39\xfb\x66\x6c\xdd\xf4\x4e\xa7\x38\x9b\xa8\xec\xeb\xa8\x9c\xda\x46\xfc\xd5\x69\x0b\x7f\xcb\x46\x75\x73\x91\xa0\x0f\xe2\x3d\x00\x00\xff\xff\x08\x4a\xda\xa3\xbe\x01\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x74\xd0\x4d\x4e\xc3\x30\x10\x05\xe0\xb5\xe7\x14\x8f\x2e\x2a\x87\x0a\x5a\xe8\x0e\x35\x48\xac\x38\x02\x0b\xc4\xc2\x38\x6e\x62\x1a\x26\x51\x32\xa6\xaa\xaa\xdc\x1d\xd9\x04\x08\x3f\xcd\x2a\x7a\x1e\x7d\x7e\x9e\xe5\x12\x8b\xe7\xe0\xeb\x02\x2f\x3d\x51\x6b\xec\xce\x94\x0e\xfd\x81\x2d\x91\x1c\x5a\x87\x07\xe3\xe5\xbe\x6b\x42\x8b\x5e\xba\x60\x05\x47\x52\xb6\x09\x2c\xae\x83\x67\x21\x65\x2b\xa4\xcf\x56\x86\xc7\x99\xe3\x40\xa4\x7a\x31\xe2\xae\xf0\xb8\x7e\x0a\x9e\x65\x7d\x4d\x03\xd1\x36\xb0\x85\xde\x97\x38\xff\x62\x33\xdc\x15\x85\x2e\x5c\x2d\x26\x7a\x59\xf4\xf7\xe5\xe5\xe7\x15\x8b\x1c\xe9\x8c\x94\xdf\x62\x92\x6f\xb0\x8a\x93\xaa\x35\xec\xad\x9e\xc5\xc2\x37\x60\x57\x1a\xf1\x6f\xd3\xd2\xe3\xfc\x2c\x23\x35\xfc\x36\x6e\xb1\xc2\x7c\x9e\x92\x0a\x79\x0e\xf6\x75\x32\xc7\x00\xaf\x66\xe7\xf4\x8f\x67\xfd\xa7\xe4\xf9\x94\x39\xfb\x66\x6c\xdd\xf4\x4e\xa7\x38\x9b\xa8\xec\xeb\xa8\x9c\xda\x46\xfc\xd5\x69\x0b\x7f\xcb\x46\x75\x73\x91\xa0\x0f\xe2\x3d\x00\x00\xff\xff\x08\x4a\xda\xa3\xbe\x01\x00\x00"), }, "/src/syscall": &vfsgen۰DirInfo{ name: "syscall", - modTime: time.Date(2019, 5, 1, 6, 1, 9, 584098940, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 904781100, time.UTC), }, "/src/syscall/js": &vfsgen۰DirInfo{ name: "js", - modTime: time.Date(2019, 5, 1, 6, 1, 9, 584179814, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 775791200, time.UTC), }, "/src/syscall/js/js.go": &vfsgen۰CompressedFileInfo{ name: "js.go", - modTime: time.Date(2019, 5, 1, 6, 1, 9, 584705329, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 776782300, time.UTC), uncompressedSize: 5729, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x58\xed\x6f\xdb\xbc\x11\xff\x6c\xfd\x15\x57\x7d\xe8\x23\x35\x9a\xfc\xbc\x74\x59\xe1\xc2\x1f\xba\x61\x2d\x5a\xac\xcd\xb0\x74\xdb\x87\x20\x58\x68\x99\xb2\xe9\xc8\x94\x21\x51\x8a\xbd\xc0\xff\xfb\x70\x47\x8a\x22\x15\x39\x71\xb1\xa7\x40\x1d\xfa\xf8\xbb\x17\x1e\xef\xcd\x9c\x4e\xe1\x62\xd1\x88\x62\x09\x9b\x3a\x08\x76\x2c\xbb\x67\x2b\x4e\x6b\xb1\xdd\x95\x95\x82\x28\x98\x84\x15\xcf\x0b\x9e\xa9\x30\x98\x84\x8d\xac\x59\xce\xc3\x20\x98\x84\x2b\xa1\xd6\xcd\x22\xcd\xca\xed\x74\x55\xee\xd6\xbc\xda\xd4\xfd\x62\x53\x87\x41\x1c\x04\xea\xb0\xe3\xf0\x1d\x3f\x84\x54\x41\x90\x95\xb2\x26\x91\x48\xfa\xa7\x5c\xf2\x5c\x48\xbe\xd4\x80\x39\x88\x52\x31\xbd\xf5\xad\x29\x0a\xbd\xfa\x73\x59\x16\x9c\xc9\x8e\xbc\x5d\xf0\x4a\xaf\xaf\x55\x25\xe4\xca\xac\x0f\xdb\x45\x69\x18\xae\x16\x1b\x9e\x29\xbd\xfe\xd8\xc8\x4c\x89\x52\xa2\x25\x79\x23\x33\x88\x14\xe9\x8a\x41\x73\x47\x31\xd4\xb4\x80\xc7\x60\x52\x3f\x08\x95\xad\x41\xe1\x3a\x63\xb5\x36\xdb\xda\x38\x0b\x26\x93\x8a\xab\xa6\x92\x10\x36\x1d\x31\x74\x90\x68\xb2\x0b\x92\x4d\x51\xb8\xfb\xe6\x20\x2e\x64\xa1\x49\xbe\x14\x3c\xa1\x2f\x07\x29\x2e\x46\xdb\xee\x62\xf4\x21\x3c\x0c\x79\xc4\xc3\x10\xc5\xc5\x68\x4f\xb9\x98\x92\x28\x2e\xa6\xf3\xa0\x8b\xca\x0d\x2d\x0c\x26\x4b\x9e\xb3\xa6\x20\x19\x3b\x26\x45\x16\x85\x0b\xb6\x04\xbc\xf4\x30\x0e\x26\xc7\xe0\x68\xfc\xfe\xa9\x28\x17\xac\x88\x62\xf8\x17\x2b\x1a\x8e\x1e\x36\xc2\xb4\xc6\xef\x25\xd1\xa3\x4d\x9d\x6a\x64\x6c\x39\xd1\xad\x2f\xf2\x49\xe1\x70\xd8\x2b\x3b\x47\x9d\x05\x13\x3f\x45\x2b\x1e\x19\xc3\xa2\xc9\x28\x14\x08\x6a\x85\x47\x39\xed\xc7\xf0\x0f\x5e\x70\x56\xf3\x28\x46\x4c\x9e\x6a\x45\x73\x63\xae\x85\x23\xf6\x2a\x8f\x72\x09\xf8\x35\x52\x6b\x51\x6b\x9b\x12\x60\xd5\xaa\x86\x9b\x5b\xfa\x16\x63\x76\xf0\x2a\x67\x19\x7f\x3c\xc6\xda\x82\xde\x68\xfc\xfa\x18\x4c\xb4\x25\xb3\xa7\x67\xf8\xca\xee\xe9\x9e\xa2\x5e\xc7\x9b\x4d\x9d\xea\xeb\xb5\x8a\x7a\x92\xa7\x0d\xf5\x4c\x26\x2d\x81\x66\x73\xd8\xb2\x7b\x1e\x19\xab\x12\x28\xb8\x8c\x70\x27\x8e\x11\x94\x97\x15\x88\x04\x18\xe2\x2a\x26\x57\x5c\x8b\x26\x01\x5a\xc2\x8d\xb8\x85\xf9\xc0\x40\x46\xbc\x47\xfc\x30\xe7\xc9\x65\xe4\x43\xd0\xe4\x38\x01\x12\x81\xe8\x63\x1c\x27\x26\x7a\xe8\x46\xfe\x5a\x55\x65\x75\xfa\x4a\x0c\x20\xd6\x7f\xbc\x9c\xee\x42\xf6\x0b\x6b\xd9\x75\x56\x89\x9d\x02\x8e\xa0\x19\x84\x70\x01\x3c\xfd\xc4\x55\x14\x6e\x79\x5d\xb3\x15\x0f\xe3\xb4\xab\x0a\x56\xb3\xbe\xd6\x5e\x73\xeb\x78\x36\x08\x26\xd3\x29\x08\x29\x14\x5f\x42\xc5\x77\x15\xaf\xb9\x54\x35\x3c\xac\xb9\x5a\xf3\xca\xf0\x8a\x1a\x64\x29\xff\xf0\x5f\x5e\x95\xd0\x22\x25\x05\x55\x35\xdc\x65\x50\x6b\xae\xb7\x34\x58\xc1\x4f\xb6\xc0\xfc\x94\x06\x13\xa3\x01\x8b\x85\x3d\xb3\xef\xbf\x72\xb1\x01\xf7\x7a\x6d\xd4\x8b\x1c\x91\x30\x9f\x83\x1b\xea\x74\x63\xc6\x33\x04\x7d\x3c\xa2\xb7\x7d\x52\xb9\xd8\x24\x64\x29\x5d\x43\xcb\x2a\xac\xda\x62\x09\xfd\x3f\xc7\x13\x13\x21\x6b\xc5\x64\xc6\xaf\xf2\xc1\xc6\x8a\x2b\x92\x47\x15\xde\xd9\xe8\x0a\x32\x1e\x4e\xe7\x90\xc8\xc1\xa6\x3f\xbc\x9a\x83\x14\x05\x19\x2a\x96\x30\xef\x77\xd2\xbf\xb0\xa2\x88\x42\xde\xb2\x22\x4c\x20\x8c\xba\x5a\x14\xed\x63\x78\x04\x73\x82\xfd\x7b\x38\xc6\x58\x80\x5c\xbb\xce\x12\x92\xc0\xc1\x95\x03\x1d\x7f\x99\xc3\xc1\x0a\xf5\xce\x74\x52\xec\x9d\x6f\x5b\x00\x20\x72\x88\x30\xaa\xca\x1c\x29\xf3\xf9\xdc\xed\x24\x1a\x02\x9d\xea\x9f\xdf\xc3\x74\xea\x77\xa0\x00\xe0\x68\xa4\xec\x89\x1b\x3b\xcc\x80\xed\x17\xcb\x46\x1d\xb4\xe7\x18\xe8\xed\x3a\xcf\x80\xfd\x57\xcb\xde\xb5\xdd\x93\x12\x4c\x5b\x1a\x08\xf8\xcd\xd1\x4f\xad\xfa\x24\xbf\x69\x59\x03\xfe\xb7\x96\xdf\xb4\xf7\xd3\xfc\xba\x9d\x0d\xf8\xff\xd8\xf3\xeb\x91\xe0\x24\xbf\x6d\x62\x03\x09\x7f\xb2\x12\xec\xf0\xa0\x65\x98\xfd\x4b\xbb\x6f\x22\xf9\x18\xdf\x79\xad\x8e\x42\xe3\x2a\x8f\xf6\x7e\x4d\xb7\x39\x69\xc6\x8c\x3d\x56\xd1\x7d\x4a\x66\xc5\x76\xe4\xd0\x25\xbe\x4f\xcf\xbd\xa1\xa3\x2d\x2e\x59\xf7\x1b\xa7\x4f\x2f\x3f\x54\x15\x3b\x9c\x84\x48\xe1\xce\x02\xa6\x49\xe9\x2d\x0c\x85\x04\x6d\xa5\x8f\x77\xf4\xf9\xcb\x25\xfd\xf9\xed\x57\xfa\x73\xf9\x36\x81\x86\x00\x8d\x46\x34\x06\xd2\x18\x4c\x63\x40\x79\x51\x32\x22\xd0\x82\xd8\x68\x5a\x4c\xff\x5e\x92\x2f\x12\x53\x99\x13\xd8\xb2\xdd\x8d\x5e\xdf\x3a\x5e\x4a\xe0\xc6\xfd\xea\x58\xec\xd7\x3b\xb1\x4c\x3f\xcb\xb6\xbc\xe7\xd1\x1e\x3b\xd3\x93\x21\xe4\x4e\xc8\x96\x15\x62\x89\xfd\x69\x06\x77\x70\x01\x66\x80\x4d\xe9\xde\x30\x08\x6c\xa9\xf7\xee\x2e\x6a\xc1\xed\xc7\x92\x46\x96\xbe\x6a\x99\x32\xf5\xaa\x4d\x4d\x4d\x76\x0a\xa9\x5b\x60\xdd\x6a\xda\xa6\xed\x88\x78\x4c\xaf\x28\x26\xdf\x1b\xa1\x2d\x55\x93\xd9\x1c\x5a\x32\x32\x8a\xdf\x1b\xd2\xab\xb9\x9b\x90\xa4\x52\x9f\xf2\x35\xc9\xa2\x9e\xf7\x18\xd2\x3a\x45\x50\x98\x68\xc6\x63\xec\x9b\xd1\x9f\x28\xd5\xda\xd1\xac\xe9\x14\xb2\x52\xb6\xbc\x52\x1f\xb0\x95\x9b\x75\x8d\x8e\x6b\xb6\xd4\x9c\x84\x54\xa6\x71\xd5\x80\x03\xc0\x27\x1a\xf0\xbf\x5c\xf7\x90\x54\x1f\xce\x91\x43\x33\x03\xa4\x69\xea\x65\x80\x77\xb7\x78\x0e\xc9\x1f\x3e\x98\xb1\xc3\xdb\xc3\x76\x84\xaa\xfe\x43\xb3\xcb\xc8\xb4\xd1\x22\xad\xcb\x33\x56\xad\xb0\x28\x77\xc2\xe6\xc0\x76\x3b\x2e\x97\x91\x21\x24\xde\xd1\x3d\x9f\x18\xc4\xc8\xf5\x50\x21\xdf\xda\x68\x1d\x3d\x8e\xdb\x64\x5f\xba\x3c\x13\x3e\xaf\x5f\xfb\xe4\xae\xc2\x3c\x7f\xa9\x68\xcc\xe0\x52\x45\x0e\xbb\xaa\xdc\xf5\x5a\x71\x8e\xd9\xc6\x56\xb9\xdd\x3c\xad\x28\xdc\xd4\x33\xe8\x15\xcc\x88\x87\x57\xea\x40\x93\xd1\x16\x2e\x20\xec\xc6\x11\x06\x5d\xb1\x4c\x60\x55\x2a\x02\x74\x1a\xfc\x3c\x1a\x4f\x57\x2f\xf6\xb4\x6b\x93\x27\xe1\x92\xa6\x69\x8c\xff\xe3\x91\xeb\xf8\x88\xe5\x24\x8a\xbb\xb2\x72\xa6\xd3\x75\x07\x7a\xde\xb7\x24\xf9\x8c\x8c\x31\x16\x8c\xd8\x86\x9e\xdf\x99\x48\x79\xe9\xf7\x86\x27\x92\x18\x47\x8f\xfb\x59\x2e\xf9\x3e\x12\x98\x7a\x3f\x24\xd1\xf0\x9d\x90\x89\x0e\x14\x52\xfd\x8e\xce\xfb\x2c\xcf\x71\x1d\x69\x1e\xb5\xa8\x1b\xcd\x22\xd5\xd1\xba\x7a\x68\xe4\xf4\xd3\x5b\x57\xef\x5d\xc9\x09\x28\x37\xb3\x9d\xaa\xf6\x44\x13\xf1\xfe\xdf\x59\x7c\x5e\xba\x6a\x6d\xe3\x8e\x79\xf6\xf2\xc8\xc8\x1f\x49\x8b\x2f\xd7\x5a\xce\xd3\x20\x19\x6b\x39\x7f\xe3\x72\xa5\xd6\x7d\x10\x8c\xdd\x55\x87\x19\x61\xff\xc6\x1f\x5e\xf0\xe0\xcb\x67\x44\x19\x3f\x72\xc0\x6b\x27\xb7\x12\x18\x0c\x54\xf8\x6b\xcc\x15\x4e\x60\xbf\xae\xec\xe3\x9b\x9f\x6f\x4f\x08\x76\x92\xec\x1c\xd1\x06\x7e\xae\xfc\xa7\xaf\x4b\x63\xee\x76\x7f\x6e\x0e\x24\x7c\xaf\x1a\xb5\x3e\x44\x4f\x52\xe2\x44\x1f\x1f\x72\x53\xf8\xea\x67\xb5\x9e\x97\xa8\xee\x8f\x97\xb1\xac\x32\x09\xdb\xff\x04\xee\xa7\xcb\x93\xbf\xc0\x7b\xc8\x55\x1e\xd5\x85\xc8\xb8\xef\x4f\x47\x44\x3f\x00\x6b\xdc\x6c\xae\x17\xc3\x41\x98\x06\x82\x77\x66\x20\xc4\x59\x93\x16\x38\x5b\xde\xdc\x36\xdd\x56\x63\xf7\x1a\xbb\x69\x67\x50\xb3\xbc\x7c\xeb\x8c\x91\xbd\x21\x8f\xa7\x26\x4a\xb2\x26\x8e\x8f\x63\x6f\x5b\xee\x39\x67\xa6\x35\xd6\xcd\x6e\x57\x56\x38\x0c\x12\xa7\xff\xec\x15\x29\x78\xd3\x33\x0d\x1e\x8d\x94\x7d\x34\xea\x7e\x84\x7b\xaf\x0e\xc3\x47\x8f\xaf\x5c\xad\xcb\xa5\x89\x28\xfd\xbc\x09\x40\x27\x72\x5f\x42\xde\xf4\xbc\xcf\xbd\x87\xd4\x87\x3a\x63\x45\x31\xc5\x21\x00\x17\x50\xe6\xe6\x45\xc4\xa8\xc1\xf6\x5f\x4a\x43\xf3\x1a\xbd\xb5\xf2\xdf\x15\x4e\x5a\x55\x7f\xd5\xa8\x60\x50\x93\x82\x63\xf0\xbf\x00\x00\x00\xff\xff\xf1\xb1\x58\x20\x61\x16\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xac\x58\xed\x6f\xdb\xbc\x11\xff\x6c\xfd\x15\x57\x7d\xe8\x23\x35\x9a\xfc\xbc\x74\x59\xe1\xc2\x1f\xba\x61\x2d\x5a\xac\xcd\xb0\x74\xdb\x87\x20\x58\x68\x99\xb2\xe9\xc8\x94\x21\x51\x8a\xbd\xc0\xff\xfb\x70\x47\x8a\x22\x15\x39\x71\xb1\xa7\x40\x1d\xfa\xf8\xbb\x17\x1e\xef\xcd\x9c\x4e\xe1\x62\xd1\x88\x62\x09\x9b\x3a\x08\x76\x2c\xbb\x67\x2b\x4e\x6b\xb1\xdd\x95\x95\x82\x28\x98\x84\x15\xcf\x0b\x9e\xa9\x30\x98\x84\x8d\xac\x59\xce\xc3\x20\x98\x84\x2b\xa1\xd6\xcd\x22\xcd\xca\xed\x74\x55\xee\xd6\xbc\xda\xd4\xfd\x62\x53\x87\x41\x1c\x04\xea\xb0\xe3\xf0\x1d\x3f\x84\x54\x41\x90\x95\xb2\x26\x91\x48\xfa\xa7\x5c\xf2\x5c\x48\xbe\xd4\x80\x39\x88\x52\x31\xbd\xf5\xad\x29\x0a\xbd\xfa\x73\x59\x16\x9c\xc9\x8e\xbc\x5d\xf0\x4a\xaf\xaf\x55\x25\xe4\xca\xac\x0f\xdb\x45\x69\x18\xae\x16\x1b\x9e\x29\xbd\xfe\xd8\xc8\x4c\x89\x52\xa2\x25\x79\x23\x33\x88\x14\xe9\x8a\x41\x73\x47\x31\xd4\xb4\x80\xc7\x60\x52\x3f\x08\x95\xad\x41\xe1\x3a\x63\xb5\x36\xdb\xda\x38\x0b\x26\x93\x8a\xab\xa6\x92\x10\x36\x1d\x31\x74\x90\x68\xb2\x0b\x92\x4d\x51\xb8\xfb\xe6\x20\x2e\x64\xa1\x49\xbe\x14\x3c\xa1\x2f\x07\x29\x2e\x46\xdb\xee\x62\xf4\x21\x3c\x0c\x79\xc4\xc3\x10\xc5\xc5\x68\x4f\xb9\x98\x92\x28\x2e\xa6\xf3\xa0\x8b\xca\x0d\x2d\x0c\x26\x4b\x9e\xb3\xa6\x20\x19\x3b\x26\x45\x16\x85\x0b\xb6\x04\xbc\xf4\x30\x0e\x26\xc7\xe0\x68\xfc\xfe\xa9\x28\x17\xac\x88\x62\xf8\x17\x2b\x1a\x8e\x1e\x36\xc2\xb4\xc6\xef\x25\xd1\xa3\x4d\x9d\x6a\x64\x6c\x39\xd1\xad\x2f\xf2\x49\xe1\x70\xd8\x2b\x3b\x47\x9d\x05\x13\x3f\x45\x2b\x1e\x19\xc3\xa2\xc9\x28\x14\x08\x6a\x85\x47\x39\xed\xc7\xf0\x0f\x5e\x70\x56\xf3\x28\x46\x4c\x9e\x6a\x45\x73\x63\xae\x85\x23\xf6\x2a\x8f\x72\x09\xf8\x35\x52\x6b\x51\x6b\x9b\x12\x60\xd5\xaa\x86\x9b\x5b\xfa\x16\x63\x76\xf0\x2a\x67\x19\x7f\x3c\xc6\xda\x82\xde\x68\xfc\xfa\x18\x4c\xb4\x25\xb3\xa7\x67\xf8\xca\xee\xe9\x9e\xa2\x5e\xc7\x9b\x4d\x9d\xea\xeb\xb5\x8a\x7a\x92\xa7\x0d\xf5\x4c\x26\x2d\x81\x66\x73\xd8\xb2\x7b\x1e\x19\xab\x12\x28\xb8\x8c\x70\x27\x8e\x11\x94\x97\x15\x88\x04\x18\xe2\x2a\x26\x57\x5c\x8b\x26\x01\x5a\xc2\x8d\xb8\x85\xf9\xc0\x40\x46\xbc\x47\xfc\x30\xe7\xc9\x65\xe4\x43\xd0\xe4\x38\x01\x12\x81\xe8\x63\x1c\x27\x26\x7a\xe8\x46\xfe\x5a\x55\x65\x75\xfa\x4a\x0c\x20\xd6\x7f\xbc\x9c\xee\x42\xf6\x0b\x6b\xd9\x75\x56\x89\x9d\x02\x8e\xa0\x19\x84\x70\x01\x3c\xfd\xc4\x55\x14\x6e\x79\x5d\xb3\x15\x0f\xe3\xb4\xab\x0a\x56\xb3\xbe\xd6\x5e\x73\xeb\x78\x36\x08\x26\xd3\x29\x08\x29\x14\x5f\x42\xc5\x77\x15\xaf\xb9\x54\x35\x3c\xac\xb9\x5a\xf3\xca\xf0\x8a\x1a\x64\x29\xff\xf0\x5f\x5e\x95\xd0\x22\x25\x05\x55\x35\xdc\x65\x50\x6b\xae\xb7\x34\x58\xc1\x4f\xb6\xc0\xfc\x94\x06\x13\xa3\x01\x8b\x85\x3d\xb3\xef\xbf\x72\xb1\x01\xf7\x7a\x6d\xd4\x8b\x1c\x91\x30\x9f\x83\x1b\xea\x74\x63\xc6\x33\x04\x7d\x3c\xa2\xb7\x7d\x52\xb9\xd8\x24\x64\x29\x5d\x43\xcb\x2a\xac\xda\x62\x09\xfd\x3f\xc7\x13\x13\x21\x6b\xc5\x64\xc6\xaf\xf2\xc1\xc6\x8a\x2b\x92\x47\x15\xde\xd9\xe8\x0a\x32\x1e\x4e\xe7\x90\xc8\xc1\xa6\x3f\xbc\x9a\x83\x14\x05\x19\x2a\x96\x30\xef\x77\xd2\xbf\xb0\xa2\x88\x42\xde\xb2\x22\x4c\x20\x8c\xba\x5a\x14\xed\x63\x78\x04\x73\x82\xfd\x7b\x38\xc6\x58\x80\x5c\xbb\xce\x12\x92\xc0\xc1\x95\x03\x1d\x7f\x99\xc3\xc1\x0a\xf5\xce\x74\x52\xec\x9d\x6f\x5b\x00\x20\x72\x88\x30\xaa\xca\x1c\x29\xf3\xf9\xdc\xed\x24\x1a\x02\x9d\xea\x9f\xdf\xc3\x74\xea\x77\xa0\x00\xe0\x68\xa4\xec\x89\x1b\x3b\xcc\x80\xed\x17\xcb\x46\x1d\xb4\xe7\x18\xe8\xed\x3a\xcf\x80\xfd\x57\xcb\xde\xb5\xdd\x93\x12\x4c\x5b\x1a\x08\xf8\xcd\xd1\x4f\xad\xfa\x24\xbf\x69\x59\x03\xfe\xb7\x96\xdf\xb4\xf7\xd3\xfc\xba\x9d\x0d\xf8\xff\xd8\xf3\xeb\x91\xe0\x24\xbf\x6d\x62\x03\x09\x7f\xb2\x12\xec\xf0\xa0\x65\x98\xfd\x4b\xbb\x6f\x22\xf9\x18\xdf\x79\xad\x8e\x42\xe3\x2a\x8f\xf6\x7e\x4d\xb7\x39\x69\xc6\x8c\x3d\x56\xd1\x7d\x4a\x66\xc5\x76\xe4\xd0\x25\xbe\x4f\xcf\xbd\xa1\xa3\x2d\x2e\x59\xf7\x1b\xa7\x4f\x2f\x3f\x54\x15\x3b\x9c\x84\x48\xe1\xce\x02\xa6\x49\xe9\x2d\x0c\x85\x04\x6d\xa5\x8f\x77\xf4\xf9\xcb\x25\xfd\xf9\xed\x57\xfa\x73\xf9\x36\x81\x86\x00\x8d\x46\x34\x06\xd2\x18\x4c\x63\x40\x79\x51\x32\x22\xd0\x82\xd8\x68\x5a\x4c\xff\x5e\x92\x2f\x12\x53\x99\x13\xd8\xb2\xdd\x8d\x5e\xdf\x3a\x5e\x4a\xe0\xc6\xfd\xea\x58\xec\xd7\x3b\xb1\x4c\x3f\xcb\xb6\xbc\xe7\xd1\x1e\x3b\xd3\x93\x21\xe4\x4e\xc8\x96\x15\x62\x89\xfd\x69\x06\x77\x70\x01\x66\x80\x4d\xe9\xde\x30\x08\x6c\xa9\xf7\xee\x2e\x6a\xc1\xed\xc7\x92\x46\x96\xbe\x6a\x99\x32\xf5\xaa\x4d\x4d\x4d\x76\x0a\xa9\x5b\x60\xdd\x6a\xda\xa6\xed\x88\x78\x4c\xaf\x28\x26\xdf\x1b\xa1\x2d\x55\x93\xd9\x1c\x5a\x32\x32\x8a\xdf\x1b\xd2\xab\xb9\x9b\x90\xa4\x52\x9f\xf2\x35\xc9\xa2\x9e\xf7\x18\xd2\x3a\x45\x50\x98\x68\xc6\x63\xec\x9b\xd1\x9f\x28\xd5\xda\xd1\xac\xe9\x14\xb2\x52\xb6\xbc\x52\x1f\xb0\x95\x9b\x75\x8d\x8e\x6b\xb6\xd4\x9c\x84\x54\xa6\x71\xd5\x80\x03\xc0\x27\x1a\xf0\xbf\x5c\xf7\x90\x54\x1f\xce\x91\x43\x33\x03\xa4\x69\xea\x65\x80\x77\xb7\x78\x0e\xc9\x1f\x3e\x98\xb1\xc3\xdb\xc3\x76\x84\xaa\xfe\x43\xb3\xcb\xc8\xb4\xd1\x22\xad\xcb\x33\x56\xad\xb0\x28\x77\xc2\xe6\xc0\x76\x3b\x2e\x97\x91\x21\x24\xde\xd1\x3d\x9f\x18\xc4\xc8\xf5\x50\x21\xdf\xda\x68\x1d\x3d\x8e\xdb\x64\x5f\xba\x3c\x13\x3e\xaf\x5f\xfb\xe4\xae\xc2\x3c\x7f\xa9\x68\xcc\xe0\x52\x45\x0e\xbb\xaa\xdc\xf5\x5a\x71\x8e\xd9\xc6\x56\xb9\xdd\x3c\xad\x28\xdc\xd4\x33\xe8\x15\xcc\x88\x87\x57\xea\x40\x93\xd1\x16\x2e\x20\xec\xc6\x11\x06\x5d\xb1\x4c\x60\x55\x2a\x02\x74\x1a\xfc\x3c\x1a\x4f\x57\x2f\xf6\xb4\x6b\x93\x27\xe1\x92\xa6\x69\x8c\xff\xe3\x91\xeb\xf8\x88\xe5\x24\x8a\xbb\xb2\x72\xa6\xd3\x75\x07\x7a\xde\xb7\x24\xf9\x8c\x8c\x31\x16\x8c\xd8\x86\x9e\xdf\x99\x48\x79\xe9\xf7\x86\x27\x92\x18\x47\x8f\xfb\x59\x2e\xf9\x3e\x12\x98\x7a\x3f\x24\xd1\xf0\x9d\x90\x89\x0e\x14\x52\xfd\x8e\xce\xfb\x2c\xcf\x71\x1d\x69\x1e\xb5\xa8\x1b\xcd\x22\xd5\xd1\xba\x7a\x68\xe4\xf4\xd3\x5b\x57\xef\x5d\xc9\x09\x28\x37\xb3\x9d\xaa\xf6\x44\x13\xf1\xfe\xdf\x59\x7c\x5e\xba\x6a\x6d\xe3\x8e\x79\xf6\xf2\xc8\xc8\x1f\x49\x8b\x2f\xd7\x5a\xce\xd3\x20\x19\x6b\x39\x7f\xe3\x72\xa5\xd6\x7d\x10\x8c\xdd\x55\x87\x19\x61\xff\xc6\x1f\x5e\xf0\xe0\xcb\x67\x44\x19\x3f\x72\xc0\x6b\x27\xb7\x12\x18\x0c\x54\xf8\x6b\xcc\x15\x4e\x60\xbf\xae\xec\xe3\x9b\x9f\x6f\x4f\x08\x76\x92\xec\x1c\xd1\x06\x7e\xae\xfc\xa7\xaf\x4b\x63\xee\x76\x7f\x6e\x0e\x24\x7c\xaf\x1a\xb5\x3e\x44\x4f\x52\xe2\x44\x1f\x1f\x72\x53\xf8\xea\x67\xb5\x9e\x97\xa8\xee\x8f\x97\xb1\xac\x32\x09\xdb\xff\x04\xee\xa7\xcb\x93\xbf\xc0\x7b\xc8\x55\x1e\xd5\x85\xc8\xb8\xef\x4f\x47\x44\x3f\x00\x6b\xdc\x6c\xae\x17\xc3\x41\x98\x06\x82\x77\x66\x20\xc4\x59\x93\x16\x38\x5b\xde\xdc\x36\xdd\x56\x63\xf7\x1a\xbb\x69\x67\x50\xb3\xbc\x7c\xeb\x8c\x91\xbd\x21\x8f\xa7\x26\x4a\xb2\x26\x8e\x8f\x63\x6f\x5b\xee\x39\x67\xa6\x35\xd6\xcd\x6e\x57\x56\x38\x0c\x12\xa7\xff\xec\x15\x29\x78\xd3\x33\x0d\x1e\x8d\x94\x7d\x34\xea\x7e\x84\x7b\xaf\x0e\xc3\x47\x8f\xaf\x5c\xad\xcb\xa5\x89\x28\xfd\xbc\x09\x40\x27\x72\x5f\x42\xde\xf4\xbc\xcf\xbd\x87\xd4\x87\x3a\x63\x45\x31\xc5\x21\x00\x17\x50\xe6\xe6\x45\xc4\xa8\xc1\xf6\x5f\x4a\x43\xf3\x1a\xbd\xb5\xf2\xdf\x15\x4e\x5a\x55\x7f\xd5\xa8\x60\x50\x93\x82\x63\xf0\xbf\x00\x00\x00\xff\xff\xf1\xb1\x58\x20\x61\x16\x00\x00"), }, "/src/syscall/syscall.go": &vfsgen۰CompressedFileInfo{ name: "syscall.go", - modTime: time.Date(2018, 2, 27, 18, 42, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 17, 21, 25, 840000000, time.UTC), uncompressedSize: 1346, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x94\x41\x6f\xf3\x36\x0c\x86\xcf\xd6\xaf\x60\x8d\x01\xb1\xf1\xb9\x76\x7b\x0d\x90\x4b\x8b\xa1\xe8\x69\x05\xda\x61\x87\xae\x07\xd9\xa6\x1d\xa6\x0a\x65\x48\x74\x96\x6e\xc8\x7f\x1f\x64\x39\x6d\x92\x02\x1b\xf0\xdd\x0c\x8b\xa4\xf8\xf2\x79\xc5\xaa\x82\x1f\xf5\x48\xa6\x85\x8d\x57\x6a\xd0\xcd\xbb\xee\x11\xfc\x87\x6f\xb4\x31\x4a\xd1\x76\xb0\x4e\x20\x53\x49\x3a\xb2\xd7\x1d\xa6\x4a\x25\x69\x4f\xb2\x1e\xeb\xb2\xb1\xdb\xaa\xb7\xc3\x1a\xdd\xc6\x7f\x7d\x6c\x7c\xaa\x72\xa5\x76\xda\xc1\x5f\xda\x31\x71\xff\xe4\x88\x05\x5b\x58\x41\xa7\x8d\xc7\xe9\xc8\x10\xe3\xdd\xd8\x75\xe8\xe0\xf5\xad\xfe\x10\x54\xaa\x1b\xb9\x01\x62\x92\x2c\x87\x7f\x54\xb2\xf1\xe5\x83\xb1\xb5\x36\xe5\x33\x4a\x96\xfe\xd2\x99\xd1\xaf\xef\x2d\x7b\x6b\x30\x2d\x60\xe3\xcb\x47\x16\x74\xac\xcd\x6f\xf5\x06\x1b\xc9\x42\x7e\x4c\x4d\xa8\x03\x83\x9c\x7d\x5d\x92\xc3\xd5\x0a\x6e\xa6\xb3\x93\xc2\x0f\xa1\x70\x33\x97\xcc\xcb\x7b\x6d\x4c\x96\x1a\xdb\xa7\x05\x78\x71\xc4\xfd\x69\x85\x3c\xe4\x9e\xb4\xbd\x02\x26\xa3\x92\xe4\xa0\x92\x43\x9e\xab\xc3\x2c\x60\x08\x62\xff\x88\xc2\x63\x37\xd4\xc1\xd5\xc5\x24\x42\x1f\xff\xd3\x06\x3a\x67\x5d\x5a\x40\x3a\xa7\x2e\x03\x14\xc1\x2d\x04\x30\x1e\xd8\x0a\xe8\x9d\x26\xa3\x6b\x83\x05\x78\x44\x58\x8b\x0c\x7e\x59\x55\xff\x49\xa7\x36\xb6\xae\xb6\xda\x0b\xba\xaa\xb5\x4d\x35\x93\xf6\xe5\xb6\x4d\x73\x15\xc4\x7c\x83\x26\x6e\xc4\x73\x79\x2f\x76\xe6\x90\xd5\x33\xbd\x49\x68\x6f\x9f\xce\x4e\x61\xb9\x82\x0b\x95\x97\x21\xe1\x4e\xea\xe0\x5b\xe6\xd5\x94\xf9\x3b\xb7\xd8\x11\xcf\x03\xbb\x0c\x2a\x1f\x79\x67\xdf\x31\xfb\xee\x84\x7a\x82\xe5\x50\x46\xc7\x41\x93\x3a\xe7\xa6\x87\x01\xb9\x3d\x61\x5b\x40\x5d\x96\x65\xae\x92\xce\xba\xe8\x9f\xd0\x3a\x71\x8b\xfb\xbb\x0f\xc1\xb3\xc8\xc5\x9f\xbc\xc8\xa3\xc5\x08\x56\x2b\xb8\xbe\x8d\xae\xaa\x1d\xea\xf7\x68\x87\x9f\x74\xd8\xeb\x92\xde\xf2\x1c\xaa\x0a\x5a\xcb\x0b\x81\xd1\x63\x1c\xb7\xe1\x02\x3c\x71\x83\x40\x02\xad\xc5\x48\x1f\xf7\x51\x33\xfd\x8d\xb0\x1d\x8d\x50\xe0\x00\xcd\x5a\x3b\xdd\x08\x3a\xaf\x2e\xdc\x7a\x72\x11\xfd\xb8\x5d\xbe\x85\xc1\x1c\xa9\x8e\x1e\xb3\x01\xe2\x0b\x2f\x9f\x6c\x20\xef\x26\xa4\x55\x05\x6c\xaf\xed\xf0\x19\xf9\xeb\x9e\x24\x6b\x6c\x8b\x40\x2c\x53\xc8\x73\x74\x50\x86\x7b\x92\x17\xa7\x87\x02\x46\x62\x19\xc4\x4d\x61\x79\x01\x37\x05\xdc\x4c\xef\xa3\xaa\xbe\x66\x0a\xe4\xa1\xb1\x03\x61\x0b\x9d\xb3\x5b\x08\xcd\x7b\x38\xee\x1f\xb1\xa0\x77\x96\x5a\x88\xfb\x87\xb8\x0f\xd2\xb3\x38\x04\x59\x23\x38\xd4\xe6\xb8\xa5\x3e\xb3\xc2\x68\x78\x21\x79\x79\x5c\x25\x47\x7e\x7e\x76\x69\x01\x0d\x44\xb7\x12\x4b\xe8\x3d\xf0\xa6\x02\xea\x80\xdb\x69\x0e\x9b\xef\xb8\x3f\xea\x00\xb7\x89\x6c\xa3\x93\x80\xe6\xd7\xae\x8e\x3f\xae\x6f\xd5\x41\xfd\x1b\x00\x00\xff\xff\xa9\xfc\xcd\x86\x42\x05\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x9c\x94\x41\x6f\xf3\x36\x0c\x86\xcf\xd6\xaf\x60\x8d\x01\xb1\xf1\xb9\x76\x7b\x0d\x90\x4b\x8b\xa1\xe8\x69\x05\xda\x61\x87\xae\x07\xd9\xa6\x1d\xa6\x0a\x65\x48\x74\x96\x6e\xc8\x7f\x1f\x64\x39\x6d\x92\x02\x1b\xf0\xdd\x0c\x8b\xa4\xf8\xf2\x79\xc5\xaa\x82\x1f\xf5\x48\xa6\x85\x8d\x57\x6a\xd0\xcd\xbb\xee\x11\xfc\x87\x6f\xb4\x31\x4a\xd1\x76\xb0\x4e\x20\x53\x49\x3a\xb2\xd7\x1d\xa6\x4a\x25\x69\x4f\xb2\x1e\xeb\xb2\xb1\xdb\xaa\xb7\xc3\x1a\xdd\xc6\x7f\x7d\x6c\x7c\xaa\x72\xa5\x76\xda\xc1\x5f\xda\x31\x71\xff\xe4\x88\x05\x5b\x58\x41\xa7\x8d\xc7\xe9\xc8\x10\xe3\xdd\xd8\x75\xe8\xe0\xf5\xad\xfe\x10\x54\xaa\x1b\xb9\x01\x62\x92\x2c\x87\x7f\x54\xb2\xf1\xe5\x83\xb1\xb5\x36\xe5\x33\x4a\x96\xfe\xd2\x99\xd1\xaf\xef\x2d\x7b\x6b\x30\x2d\x60\xe3\xcb\x47\x16\x74\xac\xcd\x6f\xf5\x06\x1b\xc9\x42\x7e\x4c\x4d\xa8\x03\x83\x9c\x7d\x5d\x92\xc3\xd5\x0a\x6e\xa6\xb3\x93\xc2\x0f\xa1\x70\x33\x97\xcc\xcb\x7b\x6d\x4c\x96\x1a\xdb\xa7\x05\x78\x71\xc4\xfd\x69\x85\x3c\xe4\x9e\xb4\xbd\x02\x26\xa3\x92\xe4\xa0\x92\x43\x9e\xab\xc3\x2c\x60\x08\x62\xff\x88\xc2\x63\x37\xd4\xc1\xd5\xc5\x24\x42\x1f\xff\xd3\x06\x3a\x67\x5d\x5a\x40\x3a\xa7\x2e\x03\x14\xc1\x2d\x04\x30\x1e\xd8\x0a\xe8\x9d\x26\xa3\x6b\x83\x05\x78\x44\x58\x8b\x0c\x7e\x59\x55\xff\x49\xa7\x36\xb6\xae\xb6\xda\x0b\xba\xaa\xb5\x4d\x35\x93\xf6\xe5\xb6\x4d\x73\x15\xc4\x7c\x83\x26\x6e\xc4\x73\x79\x2f\x76\xe6\x90\xd5\x33\xbd\x49\x68\x6f\x9f\xce\x4e\x61\xb9\x82\x0b\x95\x97\x21\xe1\x4e\xea\xe0\x5b\xe6\xd5\x94\xf9\x3b\xb7\xd8\x11\xcf\x03\xbb\x0c\x2a\x1f\x79\x67\xdf\x31\xfb\xee\x84\x7a\x82\xe5\x50\x46\xc7\x41\x93\x3a\xe7\xa6\x87\x01\xb9\x3d\x61\x5b\x40\x5d\x96\x65\xae\x92\xce\xba\xe8\x9f\xd0\x3a\x71\x8b\xfb\xbb\x0f\xc1\xb3\xc8\xc5\x9f\xbc\xc8\xa3\xc5\x08\x56\x2b\xb8\xbe\x8d\xae\xaa\x1d\xea\xf7\x68\x87\x9f\x74\xd8\xeb\x92\xde\xf2\x1c\xaa\x0a\x5a\xcb\x0b\x81\xd1\x63\x1c\xb7\xe1\x02\x3c\x71\x83\x40\x02\xad\xc5\x48\x1f\xf7\x51\x33\xfd\x8d\xb0\x1d\x8d\x50\xe0\x00\xcd\x5a\x3b\xdd\x08\x3a\xaf\x2e\xdc\x7a\x72\x11\xfd\xb8\x5d\xbe\x85\xc1\x1c\xa9\x8e\x1e\xb3\x01\xe2\x0b\x2f\x9f\x6c\x20\xef\x26\xa4\x55\x05\x6c\xaf\xed\xf0\x19\xf9\xeb\x9e\x24\x6b\x6c\x8b\x40\x2c\x53\xc8\x73\x74\x50\x86\x7b\x92\x17\xa7\x87\x02\x46\x62\x19\xc4\x4d\x61\x79\x01\x37\x05\xdc\x4c\xef\xa3\xaa\xbe\x66\x0a\xe4\xa1\xb1\x03\x61\x0b\x9d\xb3\x5b\x08\xcd\x7b\x38\xee\x1f\xb1\xa0\x77\x96\x5a\x88\xfb\x87\xb8\x0f\xd2\xb3\x38\x04\x59\x23\x38\xd4\xe6\xb8\xa5\x3e\xb3\xc2\x68\x78\x21\x79\x79\x5c\x25\x47\x7e\x7e\x76\x69\x01\x0d\x44\xb7\x12\x4b\xe8\x3d\xf0\xa6\x02\xea\x80\xdb\x69\x0e\x9b\xef\xb8\x3f\xea\x00\xb7\x89\x6c\xa3\x93\x80\xe6\xd7\xae\x8e\x3f\xae\x6f\xd5\x41\xfd\x1b\x00\x00\xff\xff\xa9\xfc\xcd\x86\x42\x05\x00\x00"), }, "/src/syscall/syscall_darwin.go": &vfsgen۰CompressedFileInfo{ name: "syscall_darwin.go", - modTime: time.Date(2019, 9, 15, 5, 27, 17, 41195793, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 824782300, time.UTC), uncompressedSize: 2676, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\xd5\xcf\x6f\xe2\x38\x14\x07\xf0\x33\xf9\x2b\x9e\x38\x25\xda\x2c\xa8\xdd\x2e\x07\x6e\x15\xcd\x76\xa3\x52\x40\x49\xaa\xdd\x9e\x90\x71\x5e\x82\xc1\x71\x22\xfb\x65\x98\x6a\xd4\xff\x7d\x14\x0a\x53\xf5\x97\xcd\x54\xa3\xb9\xa0\x08\x87\xcf\x7b\xfe\xda\xe8\x0d\x87\xf0\xc7\xaa\x15\x32\x87\x8d\xf1\xbc\x86\xf1\x2d\x2b\x11\xcc\x83\xe1\x4c\x4a\xcf\x13\x55\x53\x6b\x82\x7e\x29\x68\xdd\xae\x06\xbc\xae\x86\x65\xdd\xac\x51\x6f\xcc\xf3\xc3\xc6\xf4\x3d\xaf\x68\x15\x87\xee\x63\x31\xf1\x8b\xfd\x83\x1f\x04\xd0\x0a\x45\x0d\x69\xf8\xe6\xf5\xcc\x4e\x10\x5f\xc3\xc6\x0c\x62\x45\xa8\x15\x93\xf3\xd5\x06\x39\xf9\x45\xd0\x2d\x73\x66\xf0\x9d\x45\x29\x56\x7c\x59\x37\xa8\x96\xa4\x59\xd5\xd4\x52\x28\x0c\xc6\x5e\xaf\xa7\x91\x5a\xad\x20\xbd\x4f\x97\xf3\x45\x34\xb3\x03\x86\x18\x8d\x2e\x2c\x44\x9a\x5d\x66\xa3\x0b\x3b\x52\x38\x95\x7f\x4e\x61\xa4\x93\x99\x9e\xc2\x54\xdb\x5c\x68\x0b\x72\x7b\x73\x15\x27\x76\x82\xaf\xed\xc4\xe4\x5f\x27\xa1\x2b\x3b\x91\xdc\x3a\x89\xe5\xb2\x44\xca\x85\x46\x45\x5a\xa0\xb1\x26\x73\x1d\x65\x57\x71\x12\xcd\xb2\x24\x8e\x52\x57\x42\x25\x12\x23\xd2\x52\x18\xb2\x93\x97\x59\x96\x4c\xe3\x34\x73\xdc\xa1\x87\x4a\x0a\xb5\xb5\x5d\xa2\xfb\xdb\x69\x3c\xbb\x71\x24\x86\x2c\x77\x38\x49\x74\x79\xe5\x86\x0a\xae\x48\xda\x2e\xe3\x64\x96\x4d\xdd\xbd\x38\xfa\xb0\x03\x8d\x43\x58\xb8\x89\x9d\x16\x84\x16\xe2\xbf\x24\xce\x22\xd7\x3f\x0a\xd1\x96\xe7\x34\x8d\x22\x47\x98\x5c\xd6\xc6\xd6\xc5\x64\x3a\x4f\x1d\x5d\xb4\xca\x71\xac\x77\x33\xf7\xa1\x96\x48\x8d\xb0\x25\x7a\x1d\x65\x8b\xd8\x11\x69\x89\xd4\xba\x90\xbb\x13\x90\xd2\x85\x5c\x77\x48\x8e\x05\x6b\x25\x75\xab\xc3\x21\xc4\x05\xec\x10\x36\xad\x21\x38\xbc\xfb\xe7\x59\x08\xb4\x46\xe8\x06\x0a\x6a\xe0\x4c\x41\xad\xe4\x03\x34\x5a\x28\x02\xa6\xa0\x55\x6b\x94\x4d\xd1\x4a\x28\x51\xa1\x16\x1c\x50\xeb\x5a\x43\x85\xc6\xb0\x12\x43\x90\x62\x8b\x4f\x7a\xdf\x88\x52\x31\x39\x86\x15\xcb\xbb\x21\x45\x58\xed\xdd\xfe\xe0\x69\x3d\xad\x43\xc0\xaf\xc8\x5b\x42\x28\xfc\x00\xa8\x86\x12\x09\x18\x54\xb5\x46\x38\x96\x79\xc1\x03\xad\x19\x81\x50\x5c\xb6\x39\x9a\x7d\xa7\x87\xe9\x07\x8a\x55\x2f\xab\xeb\x56\x91\xa8\xf0\x09\x18\x83\x62\x24\xbe\xe0\x7e\xd6\x91\xa8\x15\xa8\x9a\x40\x54\x8d\xc4\x0a\x15\x61\x3e\x3e\x42\x83\xf7\x8f\x76\xdf\x74\xe1\x07\xcf\xb1\x1e\xa6\xa5\x5f\x09\xd5\x9a\xb9\xc2\xc0\xeb\x3d\x7a\x8f\x87\xd9\x7a\xc0\x7c\xd2\xac\x09\x81\x9d\x85\xc0\xce\x43\x60\x7f\x1d\x7f\x15\x80\xaf\xcf\x42\xd0\xe7\xc7\x2f\xc2\xae\x4f\x88\xb4\x56\xf5\x7e\xc2\x1e\xcf\xee\x03\x27\x78\x5d\xe9\xff\xdf\x57\x6a\xf4\xe6\x95\x10\xd8\x45\x08\xec\xef\x10\xd8\xe8\x93\x65\xed\xe8\xdb\x1e\xde\xee\xf7\x53\x4d\x34\x4c\x09\xee\xf7\x7f\xa8\x20\xcc\xeb\x9b\xd1\x7f\x2e\xae\xd9\xee\xa3\x94\x7e\x76\xdb\xc9\xc7\xd4\x7b\xf5\x7e\x6d\xe6\xc9\x89\x6e\xd7\xc9\xf7\x00\x00\x00\xff\xff\x6c\x7a\x2b\x57\x74\x0a\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xbc\xd5\x4d\x6f\xf2\x46\x10\x07\xf0\x33\xfe\x14\x23\x4e\xb6\xea\x82\x92\xa6\x1c\xb8\x45\xe0\xa6\x56\x08\x20\xdb\x51\x93\x13\x5a\xd6\x63\xb3\xb0\x5e\x5b\xbb\xe3\xd2\xa8\xca\x77\xaf\x4c\xa0\x51\xde\x76\xd1\xa3\xe8\xb9\x44\x56\xd6\xfc\xe6\xaf\xd9\xb1\x66\x38\x84\x5f\xd6\xad\x90\x39\x6c\x8d\xe7\x35\x8c\xef\x58\x89\x60\x9e\x0c\x67\x52\x7a\x9e\xa8\x9a\x5a\x13\xf4\x4b\x41\x9b\x76\x3d\xe0\x75\x35\x2c\xeb\x66\x83\x7a\x6b\x5e\x1f\xb6\xa6\xef\x79\x45\xab\x38\x74\x7f\x96\x13\xbf\x38\x3c\xf8\x41\x00\xad\x50\xd4\x90\x86\x7f\xbd\x9e\xd9\x0b\xe2\x1b\xd8\x9a\x41\xac\x08\xb5\x62\x72\xb1\xde\x22\x27\xbf\x08\xba\x63\xce\x0c\x7e\x72\x28\xc5\x9a\xaf\xea\x06\xd5\x8a\x34\xab\x9a\x5a\x0a\x85\xc1\xd8\xeb\xf5\x34\x52\xab\x15\xa4\x8f\xe9\x6a\xb1\x8c\xe6\x76\xc0\x10\xa3\xd1\x95\x85\x48\xb3\xeb\x6c\x74\x65\x47\x0a\xa7\xf2\xc7\x39\x8c\x74\x32\xb3\x73\x98\x6a\x97\x0b\x6d\x41\xee\x6e\xa7\x71\x62\x27\xf8\xc6\x4e\x4c\xfe\x74\x12\xba\xb2\x13\xc9\x9d\x93\x58\xad\x4a\xa4\x5c\x68\x54\xa4\x05\x1a\x6b\x67\x6e\xa2\x6c\x1a\x27\xd1\x3c\x4b\xe2\x28\x75\x75\xa8\x44\x62\x44\x5a\x0a\x43\x76\xf2\x3a\xcb\x92\x59\x9c\x66\x8e\x19\x7a\xaa\xa4\x50\x3b\xdb\x10\x3d\xde\xcd\xe2\xf9\xad\xa3\x63\xc8\x72\x87\x93\x44\xd7\x53\x37\x54\x70\x45\xd2\x36\x8c\x93\x79\x36\x73\x67\x71\xe4\xb0\x03\x8d\x43\x58\xba\x89\xbd\x16\x84\x16\xe2\xaf\x24\xce\x22\xd7\x17\x85\xb8\xb3\x7e\x4f\x51\xe4\x68\x26\x97\xb5\xb1\xa5\x98\xcc\x16\xa9\x23\x45\xab\x1c\xd7\x7a\x3f\x77\x5f\x6a\x89\xd4\x88\xdc\x3e\xae\xcb\x78\xea\x44\x5a\x17\x72\x7f\x06\x52\xba\x90\x9b\x0e\xc9\xb1\x60\xad\xa4\xee\x74\x38\x84\xb8\x80\x3d\xc2\xb6\x35\x04\xc7\x77\x7f\xbd\x08\x81\x36\x08\xdd\x42\x41\x0d\x9c\x29\xa8\x95\x7c\x82\x46\x0b\x45\xc0\x14\xb4\x6a\x83\xb2\x29\x5a\x09\x25\x2a\xd4\x82\x03\x6a\x5d\x6b\xa8\xd0\x18\x56\x62\x08\x52\xec\xf0\x45\xef\x1b\x51\x2a\x26\xc7\xb0\x66\x79\xb7\xa4\x08\xab\x83\xdb\x1f\xbc\x9c\xa7\x75\x08\xf8\x0f\xf2\x96\x10\x0a\x3f\x00\xaa\xa1\x44\x02\x06\x55\xad\x11\x4e\x65\xde\xf0\x40\x1b\x46\x20\x14\x97\x6d\x8e\xe6\x90\xf4\xb8\xfd\x40\xb1\xea\x6d\x75\xdd\x2a\x12\x15\xbe\x00\x63\x50\x8c\xc4\xdf\x78\xd8\x75\x24\x6a\x05\xaa\x26\x10\x55\x23\xb1\x42\x45\x98\x8f\x4f\xd0\xe0\xf3\xab\x3d\x84\x2e\xfc\xe0\xb5\xad\xc7\x6d\xe9\x57\x42\xb5\x66\xa1\x30\xf0\x7a\xcf\xde\xf3\x71\xb7\x1e\x31\x9f\x34\x6b\x42\x60\x17\x21\xb0\xcb\x10\xd8\x6f\xa7\x5f\x05\xe0\xeb\x8b\x10\xf4\xe5\xe9\x1f\x61\x97\x13\x22\xad\x55\x7d\xd8\xb0\xa7\xbb\xfb\xc2\x09\xde\x57\x7a\xf8\x79\xa5\x46\x1f\x5e\x09\x81\x5d\x85\xc0\x7e\x0f\x81\x8d\x7e\xb0\xac\x1d\xfd\x98\xe1\xe1\x7b\x42\x34\x4c\x09\xee\xf7\xff\x57\x41\x98\xf7\x93\xd1\x7f\x2d\xae\xd9\x3e\xfd\xa6\x8b\x4d\xbe\xa6\x3e\xab\xf7\xbd\x3d\x4f\xce\x74\xbb\x24\xff\x05\x00\x00\xff\xff\x6c\x7a\x2b\x57\x74\x0a\x00\x00"), }, "/src/syscall/syscall_linux.go": &vfsgen۰FileInfo{ name: "syscall_linux.go", - modTime: time.Date(2018, 2, 27, 18, 42, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 845781800, time.UTC), content: []byte("\x2f\x2f\x20\x2b\x62\x75\x69\x6c\x64\x20\x6a\x73\x0a\x0a\x70\x61\x63\x6b\x61\x67\x65\x20\x73\x79\x73\x63\x61\x6c\x6c\x0a\x0a\x63\x6f\x6e\x73\x74\x20\x65\x78\x69\x74\x54\x72\x61\x70\x20\x3d\x20\x53\x59\x53\x5f\x45\x58\x49\x54\x5f\x47\x52\x4f\x55\x50\x0a"), }, "/src/syscall/syscall_nonlinux.go": &vfsgen۰FileInfo{ name: "syscall_nonlinux.go", - modTime: time.Date(2018, 2, 27, 18, 42, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 864784500, time.UTC), content: []byte("\x2f\x2f\x20\x2b\x62\x75\x69\x6c\x64\x20\x6a\x73\x2c\x21\x6c\x69\x6e\x75\x78\x0a\x0a\x70\x61\x63\x6b\x61\x67\x65\x20\x73\x79\x73\x63\x61\x6c\x6c\x0a\x0a\x63\x6f\x6e\x73\x74\x20\x65\x78\x69\x74\x54\x72\x61\x70\x20\x3d\x20\x53\x59\x53\x5f\x45\x58\x49\x54\x0a"), }, "/src/syscall/syscall_unix.go": &vfsgen۰CompressedFileInfo{ name: "syscall_unix.go", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 435672650, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 883783000, time.UTC), uncompressedSize: 3370, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x57\x4d\x6f\x1b\x37\x10\x3d\xef\xfe\x8a\x09\x51\x04\xdc\x88\x5d\x7d\xb4\x0d\x8a\xba\x3a\x38\xae\x6a\x08\x70\xed\x20\xb2\x9b\x16\x41\x60\x50\xda\x59\x99\xd2\x8a\x54\x49\xae\x1c\x21\xd1\x7f\x2f\xf8\xb1\x96\x2c\xe9\x50\x23\x41\x50\x20\x37\x61\xe7\xcd\xcc\xe3\x9b\x21\x67\xd4\x6e\x43\x6b\x5c\x8b\xaa\x80\x99\x61\xcf\xee\x85\x2c\xd4\xbd\x49\xd3\x25\x9f\xcc\xf9\x14\xc1\xac\xcd\x84\x57\x55\x9a\x8a\xc5\x52\x69\x0b\x34\x4d\x88\xae\xa5\x15\x0b\x24\x69\x42\x6a\x69\x78\x89\x24\x4d\x13\x32\x15\xf6\xae\x1e\xe7\x13\xb5\x68\x4f\xd5\xf2\x0e\xf5\xcc\x6c\x7f\xcc\x0c\x49\xb3\x34\x2d\x6b\x39\x81\xe8\x7e\x8b\x72\x65\x68\x06\xef\xde\x1b\xab\x85\x9c\xc2\xc7\x34\x59\x6a\x35\x41\x63\xe0\x97\x3e\xcc\x4c\x7e\x5e\xa9\x31\xaf\xf2\x73\xb4\x94\x44\x0b\xc9\xd2\x44\x94\xd0\xe0\xfa\x1e\x77\x23\x0b\x2c\x85\xc4\xc2\x85\x48\x34\xda\x5a\x4b\x90\xa2\x4a\x93\x4d\x9a\xcc\xcc\x40\xae\x5c\xc0\xe8\x13\xc2\xa1\x5c\xb9\x50\x28\x57\x73\x5c\x1f\xcb\x77\x35\x9e\xe1\xc4\x92\x2c\x3f\xe3\x55\x45\x89\x43\x11\x06\x3e\x58\xf0\xf3\x4e\x0b\x3e\x47\xda\x1c\x80\x41\x0c\x97\x5f\xa0\x9c\xda\x3b\x9a\x65\x69\x52\x2a\x0d\xc2\x41\x3b\x27\x20\xe0\xd7\x03\xc8\x09\x88\x56\xcb\xf3\x9e\xe3\xda\xe1\x1a\xc0\x50\x16\xf8\x81\x8a\x2c\x1f\xf9\xe0\x34\x4b\x13\x9f\xf6\x9d\x78\x0f\x7d\x70\xe0\x16\x90\x3e\x81\x56\x20\xe5\x59\xcf\x71\xbd\x8b\xdf\xa4\x8d\x18\xce\x31\xdd\x44\xfd\x0d\x5a\x94\xab\xdb\x09\x9d\x33\x58\x41\xe0\x9e\x7d\x59\xf5\x7d\xee\x43\xc1\xf3\x91\x23\xc9\x60\x95\x3d\x90\xa9\xe5\x96\xce\xd7\xe5\xf2\x1b\x56\x68\x91\xce\x3d\x97\x15\xd7\x4d\xab\xff\xa1\x8a\xba\x42\x78\x31\x33\x79\x68\x02\x6f\xe4\x95\x46\x5e\xac\xaf\xb5\xc0\xe2\x5a\x5d\x28\x5e\x40\x1f\x4a\x5e\x19\xf4\xe6\x85\x90\xb5\xb9\x92\x08\x7d\xf8\xbe\xdb\xe8\x1c\xe2\xbd\x5a\x5f\xf2\x05\x52\xc9\x17\xf8\x70\xc0\x6d\x70\x47\xb4\xc0\x12\x35\x38\x1f\x9a\x45\xe2\x13\xb5\x42\xed\x6b\xde\x6e\xc3\xb6\xa3\x41\x94\x10\x8d\x58\xa4\xc9\x86\x06\x11\x1e\x33\xef\xf7\x3d\xd4\x05\x12\xe5\x31\xe2\xce\xf2\xe8\x9a\x38\x85\x92\xa3\x27\xb4\xba\x46\x4f\xe8\x9f\x5a\x68\x3c\x52\x8d\x68\x71\xd5\x48\x3c\xb9\x00\x3c\x56\x8e\x64\xc9\xa5\x98\x50\xe2\xb1\x2e\xe3\x1e\xed\xc6\x39\x1f\xca\x95\x9a\x23\x25\xd1\x4e\x1e\xb5\xf2\x23\x27\xcf\xc1\x29\xbb\x6d\xa8\x51\xb0\x53\xab\xf9\x92\x01\xef\x32\xe0\x3d\x06\xfc\x07\xa8\x85\xb4\x4b\xab\x33\xa0\xba\xcb\x40\xf7\x9a\x0f\x0c\x50\x6b\x18\x68\x2d\x95\x57\x5f\x94\x50\xba\x83\x3e\x2e\x1f\x19\x35\x64\x4e\xa0\x84\x67\x5b\x89\xb5\xc3\x96\x0d\xe7\xfd\xac\xd9\xf6\x41\x8a\xe9\xa8\x8e\x57\xbb\x93\xe5\x43\x69\x69\x96\xb1\x03\x53\x77\x6b\xf2\xbc\x1e\x0c\xbd\xc6\xe0\x15\x11\x25\xb8\x7c\x4e\xec\xd1\xdf\xa3\xdb\xb7\x6f\x86\xd7\x03\x78\xfe\x1c\x28\xef\xba\x6f\x5d\xf8\xf4\x09\xc2\xcf\x5e\xe8\x2b\xae\x35\x5f\xc7\x22\x0e\xa5\x45\x2d\x79\x15\xda\x90\xf2\x9e\xa3\x6a\x2a\x31\xc1\x9d\x87\x6d\xbc\xb6\xc8\xc0\xbb\xed\x3e\x6a\xc9\xa1\xbf\xf7\x0c\x17\x9c\x7c\xe7\x1d\x48\x74\x74\xf8\xa5\x16\xd2\x5e\xab\x33\x25\x8d\xaa\x30\x82\x0f\xa5\xd9\x4b\xc4\xa0\xc3\xa0\xb3\x7f\x54\xfc\x20\xec\xb5\xfb\xed\xd5\x0f\xb3\x24\x3f\x57\xee\x73\x7c\xf4\x7c\xb6\xb7\x5c\xcb\xf8\x0e\xee\x65\x69\xee\x6a\x88\x3f\x38\x3d\x3b\x1b\x8c\xf6\xdb\xe7\xe5\x41\x25\x19\xf0\x1f\x19\xf0\x9f\x18\xf0\x97\x5f\xa8\x97\x5e\x3e\xb1\x99\x76\x29\x7c\x95\xc6\x7a\xd6\x87\x5e\xa7\x07\x1f\xa1\xdd\x86\x39\x6a\x99\x2b\xa3\xb1\x42\x6e\x10\x94\x84\xab\x11\xfc\xc5\xe0\x8e\x2f\x97\x28\x0d\x08\x09\x42\x0a\x0b\xaa\x04\xa2\x0c\x81\xb8\x40\x34\xc5\xdf\x29\xc7\xe6\x69\x15\x79\xc3\xef\xbf\xa1\x3b\xfd\x39\xbd\xab\x1f\x94\xba\x54\x03\xad\x95\xfe\xef\x82\xfd\xef\x54\x7a\xaa\x18\x47\xda\xe5\xdb\xbe\xc3\x9f\xd3\x48\xaf\xd6\x16\x5f\x5b\xfd\xbb\x56\x8b\xb8\x4d\x9a\x87\xd5\x85\xbe\x08\x43\x01\x5d\x83\x79\x81\x76\xa7\xca\xee\x6a\x70\x23\xa4\xfd\xf9\xd4\x8f\x82\x2c\xbf\xc4\x7b\x5a\xa1\xa4\x26\x83\x16\x74\x9b\xc5\x98\xc1\xd8\x39\x6a\x2e\xa7\x08\x61\xdc\x38\x44\x5c\x5d\xc6\xee\xb9\xef\xec\xaf\x2b\x0c\x06\xc3\xcb\x3f\x4f\x2f\x9a\xb5\xc5\xcf\x8c\x11\xda\xb8\x30\x33\x18\x07\x01\xf6\x0c\x21\x39\x83\xce\x56\x8b\x70\x94\x8c\x86\x3f\x31\xf9\x6b\x25\xdc\x4c\x8b\x53\xe8\xc6\x7f\xa4\x99\xd3\xd9\x2d\x49\x9b\xf4\xdf\x00\x00\x00\xff\xff\x77\x4c\x60\x3e\x2a\x0d\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xe4\x57\x4d\x6f\x1b\x37\x10\x3d\xef\xfe\x8a\x09\x51\x04\xdc\x88\x5d\x7d\xb4\x0d\x8a\xba\x3a\x38\xae\x6a\x08\x70\xed\x20\xb2\x9b\x16\x41\x60\x50\xda\x59\x99\xd2\x8a\x54\x49\xae\x1c\x21\xd1\x7f\x2f\xf8\xb1\x96\x2c\xe9\x50\x23\x41\x50\x20\x37\x61\xe7\xcd\xcc\xe3\x9b\x21\x67\xd4\x6e\x43\x6b\x5c\x8b\xaa\x80\x99\x61\xcf\xee\x85\x2c\xd4\xbd\x49\xd3\x25\x9f\xcc\xf9\x14\xc1\xac\xcd\x84\x57\x55\x9a\x8a\xc5\x52\x69\x0b\x34\x4d\x88\xae\xa5\x15\x0b\x24\x69\x42\x6a\x69\x78\x89\x24\x4d\x13\x32\x15\xf6\xae\x1e\xe7\x13\xb5\x68\x4f\xd5\xf2\x0e\xf5\xcc\x6c\x7f\xcc\x0c\x49\xb3\x34\x2d\x6b\x39\x81\xe8\x7e\x8b\x72\x65\x68\x06\xef\xde\x1b\xab\x85\x9c\xc2\xc7\x34\x59\x6a\x35\x41\x63\xe0\x97\x3e\xcc\x4c\x7e\x5e\xa9\x31\xaf\xf2\x73\xb4\x94\x44\x0b\xc9\xd2\x44\x94\xd0\xe0\xfa\x1e\x77\x23\x0b\x2c\x85\xc4\xc2\x85\x48\x34\xda\x5a\x4b\x90\xa2\x4a\x93\x4d\x9a\xcc\xcc\x40\xae\x5c\xc0\xe8\x13\xc2\xa1\x5c\xb9\x50\x28\x57\x73\x5c\x1f\xcb\x77\x35\x9e\xe1\xc4\x92\x2c\x3f\xe3\x55\x45\x89\x43\x11\x06\x3e\x58\xf0\xf3\x4e\x0b\x3e\x47\xda\x1c\x80\x41\x0c\x97\x5f\xa0\x9c\xda\x3b\x9a\x65\x69\x52\x2a\x0d\xc2\x41\x3b\x27\x20\xe0\xd7\x03\xc8\x09\x88\x56\xcb\xf3\x9e\xe3\xda\xe1\x1a\xc0\x50\x16\xf8\x81\x8a\x2c\x1f\xf9\xe0\x34\x4b\x13\x9f\xf6\x9d\x78\x0f\x7d\x70\xe0\x16\x90\x3e\x81\x56\x20\xe5\x59\xcf\x71\xbd\x8b\xdf\xa4\x8d\x18\xce\x31\xdd\x44\xfd\x0d\x5a\x94\xab\xdb\x09\x9d\x33\x58\x41\xe0\x9e\x7d\x59\xf5\x7d\xee\x43\xc1\xf3\x91\x23\xc9\x60\x95\x3d\x90\xa9\xe5\x96\xce\xd7\xe5\xf2\x1b\x56\x68\x91\xce\x3d\x97\x15\xd7\x4d\xab\xff\xa1\x8a\xba\x42\x78\x31\x33\x79\x68\x02\x6f\xe4\x95\x46\x5e\xac\xaf\xb5\xc0\xe2\x5a\x5d\x28\x5e\x40\x1f\x4a\x5e\x19\xf4\xe6\x85\x90\xb5\xb9\x92\x08\x7d\xf8\xbe\xdb\xe8\x1c\xe2\xbd\x5a\x5f\xf2\x05\x52\xc9\x17\xf8\x70\xc0\x6d\x70\x47\xb4\xc0\x12\x35\x38\x1f\x9a\x45\xe2\x13\xb5\x42\xed\x6b\xde\x6e\xc3\xb6\xa3\x41\x94\x10\x8d\x58\xa4\xc9\x86\x06\x11\x1e\x33\xef\xf7\x3d\xd4\x05\x12\xe5\x31\xe2\xce\xf2\xe8\x9a\x38\x85\x92\xa3\x27\xb4\xba\x46\x4f\xe8\x9f\x5a\x68\x3c\x52\x8d\x68\x71\xd5\x48\x3c\xb9\x00\x3c\x56\x8e\x64\xc9\xa5\x98\x50\xe2\xb1\x2e\xe3\x1e\xed\xc6\x39\x1f\xca\x95\x9a\x23\x25\xd1\x4e\x1e\xb5\xf2\x23\x27\xcf\xc1\x29\xbb\x6d\xa8\x51\xb0\x53\xab\xf9\x92\x01\xef\x32\xe0\x3d\x06\xfc\x07\xa8\x85\xb4\x4b\xab\x33\xa0\xba\xcb\x40\xf7\x9a\x0f\x0c\x50\x6b\x18\x68\x2d\x95\x57\x5f\x94\x50\xba\x83\x3e\x2e\x1f\x19\x35\x64\x4e\xa0\x84\x67\x5b\x89\xb5\xc3\x96\x0d\xe7\xfd\xac\xd9\xf6\x41\x8a\xe9\xa8\x8e\x57\xbb\x93\xe5\x43\x69\x69\x96\xb1\x03\x53\x77\x6b\xf2\xbc\x1e\x0c\xbd\xc6\xe0\x15\x11\x25\xb8\x7c\x4e\xec\xd1\xdf\xa3\xdb\xb7\x6f\x86\xd7\x03\x78\xfe\x1c\x28\xef\xba\x6f\x5d\xf8\xf4\x09\xc2\xcf\x5e\xe8\x2b\xae\x35\x5f\xc7\x22\x0e\xa5\x45\x2d\x79\x15\xda\x90\xf2\x9e\xa3\x6a\x2a\x31\xc1\x9d\x87\x6d\xbc\xb6\xc8\xc0\xbb\xed\x3e\x6a\xc9\xa1\xbf\xf7\x0c\x17\x9c\x7c\xe7\x1d\x48\x74\x74\xf8\xa5\x16\xd2\x5e\xab\x33\x25\x8d\xaa\x30\x82\x0f\xa5\xd9\x4b\xc4\xa0\xc3\xa0\xb3\x7f\x54\xfc\x20\xec\xb5\xfb\xed\xd5\x0f\xb3\x24\x3f\x57\xee\x73\x7c\xf4\x7c\xb6\xb7\x5c\xcb\xf8\x0e\xee\x65\x69\xee\x6a\x88\x3f\x38\x3d\x3b\x1b\x8c\xf6\xdb\xe7\xe5\x41\x25\x19\xf0\x1f\x19\xf0\x9f\x18\xf0\x97\x5f\xa8\x97\x5e\x3e\xb1\x99\x76\x29\x7c\x95\xc6\x7a\xd6\x87\x5e\xa7\x07\x1f\xa1\xdd\x86\x39\x6a\x99\x2b\xa3\xb1\x42\x6e\x10\x94\x84\xab\x11\xfc\xc5\xe0\x8e\x2f\x97\x28\x0d\x08\x09\x42\x0a\x0b\xaa\x04\xa2\x0c\x81\xb8\x40\x34\xc5\xdf\x29\xc7\xe6\x69\x15\x79\xc3\xef\xbf\xa1\x3b\xfd\x39\xbd\xab\x1f\x94\xba\x54\x03\xad\x95\xfe\xef\x82\xfd\xef\x54\x7a\xaa\x18\x47\xda\xe5\xdb\xbe\xc3\x9f\xd3\x48\xaf\xd6\x16\x5f\x5b\xfd\xbb\x56\x8b\xb8\x4d\x9a\x87\xd5\x85\xbe\x08\x43\x01\x5d\x83\x79\x81\x76\xa7\xca\xee\x6a\x70\x23\xa4\xfd\xf9\xd4\x8f\x82\x2c\xbf\xc4\x7b\x5a\xa1\xa4\x26\x83\x16\x74\x9b\xc5\x98\xc1\xd8\x39\x6a\x2e\xa7\x08\x61\xdc\x38\x44\x5c\x5d\xc6\xee\xb9\xef\xec\xaf\x2b\x0c\x06\xc3\xcb\x3f\x4f\x2f\x9a\xb5\xc5\xcf\x8c\x11\xda\xb8\x30\x33\x18\x07\x01\xf6\x0c\x21\x39\x83\xce\x56\x8b\x70\x94\x8c\x86\x3f\x31\xf9\x6b\x25\xdc\x4c\x8b\x53\xe8\xc6\x7f\xa4\x99\xd3\xd9\x2d\x49\x9b\xf4\xdf\x00\x00\x00\xff\xff\x77\x4c\x60\x3e\x2a\x0d\x00\x00"), }, "/src/syscall/syscall_windows.go": &vfsgen۰CompressedFileInfo{ name: "syscall_windows.go", - modTime: time.Date(2019, 3, 29, 2, 9, 7, 436090736, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 905784400, time.UTC), uncompressedSize: 2566, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x96\xdf\x6f\xdb\x36\x10\xc7\x9f\xad\xbf\xe2\xe0\x87\x81\xf4\xb8\x38\x72\x97\xcc\x29\xe0\x87\x20\x76\xd3\x01\xee\x52\x24\x2e\x0a\xac\x28\x0a\x4a\x3c\xc9\x6c\x29\x52\x20\x29\xa3\x4e\x9a\xff\x7d\xa0\x7e\xd8\xca\x92\x02\x1b\x1a\x18\x7d\x91\x45\xde\x97\x77\x9f\xfb\x21\xc2\xe3\x31\xfc\x9a\x54\x52\x09\xf8\xec\xa2\xa8\xe4\xe9\x17\x9e\x23\xb8\xad\x4b\xb9\x52\x51\x24\x8b\xd2\x58\x0f\x43\x5b\x69\x2f\x0b\x1c\x46\xd1\x86\x5b\x28\xa4\xae\xdc\x95\x46\x98\xc1\x6f\x71\x14\x65\x95\x4e\xe1\xa6\x39\x42\xbc\xe5\x25\x03\xcd\x6d\xee\x18\xf0\x98\x01\x9f\x30\xe0\x2f\xa0\x92\xda\x97\xde\x52\x20\x36\x66\x60\x27\xdd\x06\x03\xb4\x16\x16\xd6\x6a\x43\xe1\x2e\x1a\x94\x56\x6a\xff\x9e\x5b\x2d\x75\x4e\x68\x34\xb0\xe8\x2b\xab\x3b\x35\xe9\x42\x53\x06\xc7\x0c\x16\xe7\x17\x17\x8b\x9b\xe8\xfe\x21\xc3\xe9\xf7\x20\x18\xf0\xdf\x19\xf0\x13\x06\xfc\xf4\x90\x40\x67\xff\x05\x88\x01\xff\x83\x01\x9f\x32\xe0\x67\x87\x84\x8b\x27\xff\x97\x2e\x68\x8e\xc3\x23\x28\xe3\xc9\x41\x61\x4f\x7e\x10\x36\x3c\x82\x36\x0e\xe2\xf8\xe4\xa0\xec\xd3\xe7\x65\x0f\x8f\x20\x8f\x83\x3e\x9e\x1e\x24\x15\x65\xb8\x50\x32\xb1\xdc\x6e\x49\x26\x15\x6a\x5e\x20\x8c\xc2\xd1\xf8\x94\x02\x59\x73\x2d\x14\xfe\x78\xe0\x7f\x45\xcd\xd1\x97\xd6\xa4\x5c\x08\x8b\xce\x3d\x8a\x12\x6c\x7b\x90\x29\x05\x12\x76\x9e\x9d\x82\x08\x18\x2d\xf9\xed\x76\xbe\x5c\x52\x58\x1a\x2e\x08\x0d\xae\x8d\x0d\x5e\x5b\x2f\xbf\xcc\x97\xcb\x45\xd8\xbb\x7b\xe3\xf2\x97\x30\x74\x5b\xe7\xb1\x80\xd0\x7e\x07\xda\x78\xe0\x1b\x2e\x15\x4f\x14\x32\x70\x88\xb0\xf6\xbe\x74\x2f\xc7\xe3\x5c\xfa\x75\x95\x1c\xa5\xa6\x18\xe7\xa6\x5c\xa3\xfd\xec\xf6\x2f\x89\x32\xc9\xb8\xe0\xce\xa3\x1d\x0b\x93\x8e\xdb\xdb\xd9\x1d\x15\x62\x78\xbf\xc7\x2b\x1b\xbc\xb7\xd6\xa4\x14\x5e\x49\xfd\x93\xf1\xe5\xe8\x6f\xbc\x78\x5d\xf7\x8e\xac\x41\x6a\x4f\x81\x64\x02\x9a\x9d\xba\x35\x32\x83\x35\xcc\x66\x70\xb3\x9a\x7f\xba\x7a\xb7\x7a\xfb\x6e\xf5\xe9\xf5\xf9\x5f\xf3\xe5\x22\x18\xbb\x14\xe2\x68\x70\xff\x50\xba\xb8\xbe\xbe\xba\x7e\x42\x39\xa9\x95\xed\xe2\x78\x07\x72\x89\xfe\xc2\x68\x67\x14\xbe\x31\x02\x49\xda\xbc\xb7\x1c\x0c\x0a\x23\xda\x49\x7a\x31\xa1\x40\xc2\xf0\xd4\x55\xa4\xbd\x32\xce\xab\xa2\xd8\x36\x75\xdc\x27\xf8\xde\x4a\x8f\xaf\x64\xc8\xae\x19\xd0\xce\x63\x52\x65\xf0\xe1\x63\xb2\xf5\xc8\x40\x18\xbd\xf3\xce\xc0\x6c\xd0\x2a\x5e\x96\x28\x60\x74\xb5\x7b\x7f\x14\x35\x24\xdb\xb8\x9c\xcd\x20\x86\x6f\xdf\x7a\xcb\x49\x9d\x71\x3d\xd4\x2b\xd3\xe6\x45\x92\x2a\xa3\xd1\x60\x30\xaa\xa3\xcd\xa0\x09\x47\x14\xea\xda\x42\xf7\x25\xd2\x52\xd5\x45\xfa\xce\x47\x11\xcc\x5d\x7a\x8b\xaf\xd2\x87\xd9\x0a\x5f\x20\x7e\x95\x3e\x0d\x75\xea\xca\x14\x4a\xd3\xfc\x45\x38\xba\x34\xc1\x4a\xe8\xc3\x7a\x17\x05\xd7\x62\x29\x35\x12\x0a\x24\x2d\xc4\xfe\xd2\xd8\x55\x75\x77\xa0\xa7\x5e\x99\x73\x9b\x6f\xfa\x07\x18\x70\x9b\xa7\x30\xea\xfa\xc3\x6d\xbe\x81\xd1\x87\x69\x7c\x36\xf9\xd8\xfe\x74\xc2\x27\x5b\xa7\xa5\x62\x4f\xf7\xef\x12\x3d\xea\x0d\xf9\x82\x5b\x70\xde\x4a\x9d\x53\x20\x1b\xae\x2a\x6c\x97\x0c\x32\x53\x69\x01\x89\x31\xaa\xef\x71\x38\x64\x90\x71\xe5\xb0\xef\x69\x25\x0b\xfc\xdb\x68\xfc\x53\x67\xc6\x16\xdc\x4b\xa3\x89\xbf\x95\x30\x0a\x86\x5b\xa3\x51\xee\x0d\xe1\xc6\x4e\xa1\x9b\x89\x27\xa9\x8f\x1f\x33\xfb\x6d\x89\xbd\xcd\x00\x59\xa5\xfe\x6e\x77\x1d\xf4\x8d\x14\xea\x1f\x42\xdb\x54\x1e\xd0\x47\xf7\xd1\x3f\x01\x00\x00\xff\xff\x47\x14\x60\x60\x06\x0a\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xcc\x96\xdf\x6f\xdb\x36\x10\xc7\x9f\xad\xbf\xe2\xe0\x87\x81\xf4\xb8\x38\x72\x97\xcc\x29\xe0\x87\x20\x76\xd3\x01\xee\x52\x24\x2e\x0a\xac\x28\x0a\x4a\x3c\xc9\x6c\x29\x52\x20\x29\xa3\x4e\x9a\xff\x7d\xa0\x7e\xd8\xca\x92\x02\x1b\x1a\x18\x7d\x91\x45\xde\x97\x77\x9f\xfb\x21\xc2\xe3\x31\xfc\x9a\x54\x52\x09\xf8\xec\xa2\xa8\xe4\xe9\x17\x9e\x23\xb8\xad\x4b\xb9\x52\x51\x24\x8b\xd2\x58\x0f\x43\x5b\x69\x2f\x0b\x1c\x46\xd1\x86\x5b\x28\xa4\xae\xdc\x95\x46\x98\xc1\x6f\x71\x14\x65\x95\x4e\xe1\xa6\x39\x42\xbc\xe5\x25\x03\xcd\x6d\xee\x18\xf0\x98\x01\x9f\x30\xe0\x2f\xa0\x92\xda\x97\xde\x52\x20\x36\x66\x60\x27\xdd\x06\x03\xb4\x16\x16\xd6\x6a\x43\xe1\x2e\x1a\x94\x56\x6a\xff\x9e\x5b\x2d\x75\x4e\x68\x34\xb0\xe8\x2b\xab\x3b\x35\xe9\x42\x53\x06\xc7\x0c\x16\xe7\x17\x17\x8b\x9b\xe8\xfe\x21\xc3\xe9\xf7\x20\x18\xf0\xdf\x19\xf0\x13\x06\xfc\xf4\x90\x40\x67\xff\x05\x88\x01\xff\x83\x01\x9f\x32\xe0\x67\x87\x84\x8b\x27\xff\x97\x2e\x68\x8e\xc3\x23\x28\xe3\xc9\x41\x61\x4f\x7e\x10\x36\x3c\x82\x36\x0e\xe2\xf8\xe4\xa0\xec\xd3\xe7\x65\x0f\x8f\x20\x8f\x83\x3e\x9e\x1e\x24\x15\x65\xb8\x50\x32\xb1\xdc\x6e\x49\x26\x15\x6a\x5e\x20\x8c\xc2\xd1\xf8\x94\x02\x59\x73\x2d\x14\xfe\x78\xe0\x7f\x45\xcd\xd1\x97\xd6\xa4\x5c\x08\x8b\xce\x3d\x8a\x12\x6c\x7b\x90\x29\x05\x12\x76\x9e\x9d\x82\x08\x18\x2d\xf9\xed\x76\xbe\x5c\x52\x58\x1a\x2e\x08\x0d\xae\x8d\x0d\x5e\x5b\x2f\xbf\xcc\x97\xcb\x45\xd8\xbb\x7b\xe3\xf2\x97\x30\x74\x5b\xe7\xb1\x80\xd0\x7e\x07\xda\x78\xe0\x1b\x2e\x15\x4f\x14\x32\x70\x88\xb0\xf6\xbe\x74\x2f\xc7\xe3\x5c\xfa\x75\x95\x1c\xa5\xa6\x18\xe7\xa6\x5c\xa3\xfd\xec\xf6\x2f\x89\x32\xc9\xb8\xe0\xce\xa3\x1d\x0b\x93\x8e\xdb\xdb\xd9\x1d\x15\x62\x78\xbf\xc7\x2b\x1b\xbc\xb7\xd6\xa4\x14\x5e\x49\xfd\x93\xf1\xe5\xe8\x6f\xbc\x78\x5d\xf7\x8e\xac\x41\x6a\x4f\x81\x64\x02\x9a\x9d\xba\x35\x32\x83\x35\xcc\x66\x70\xb3\x9a\x7f\xba\x7a\xb7\x7a\xfb\x6e\xf5\xe9\xf5\xf9\x5f\xf3\xe5\x22\x18\xbb\x14\xe2\x68\x70\xff\x50\xba\xb8\xbe\xbe\xba\x7e\x42\x39\xa9\x95\xed\xe2\x78\x07\x72\x89\xfe\xc2\x68\x67\x14\xbe\x31\x02\x49\xda\xbc\xb7\x1c\x0c\x0a\x23\xda\x49\x7a\x31\xa1\x40\xc2\xf0\xd4\x55\xa4\xbd\x32\xce\xab\xa2\xd8\x36\x75\xdc\x27\xf8\xde\x4a\x8f\xaf\x64\xc8\xae\x19\xd0\xce\x63\x52\x65\xf0\xe1\x63\xb2\xf5\xc8\x40\x18\xbd\xf3\xce\xc0\x6c\xd0\x2a\x5e\x96\x28\x60\x74\xb5\x7b\x7f\x14\x35\x24\xdb\xb8\x9c\xcd\x20\x86\x6f\xdf\x7a\xcb\x49\x9d\x71\x3d\xd4\x2b\xd3\xe6\x45\x92\x2a\xa3\xd1\x60\x30\xaa\xa3\xcd\xa0\x09\x47\x14\xea\xda\x42\xf7\x25\xd2\x52\xd5\x45\xfa\xce\x47\x11\xcc\x5d\x7a\x8b\xaf\xd2\x87\xd9\x0a\x5f\x20\x7e\x95\x3e\x0d\x75\xea\xca\x14\x4a\xd3\xfc\x45\x38\xba\x34\xc1\x4a\xe8\xc3\x7a\x17\x05\xd7\x62\x29\x35\x12\x0a\x24\x2d\xc4\xfe\xd2\xd8\x55\x75\x77\xa0\xa7\x5e\x99\x73\x9b\x6f\xfa\x07\x18\x70\x9b\xa7\x30\xea\xfa\xc3\x6d\xbe\x81\xd1\x87\x69\x7c\x36\xf9\xd8\xfe\x74\xc2\x27\x5b\xa7\xa5\x62\x4f\xf7\xef\x12\x3d\xea\x0d\xf9\x82\x5b\x70\xde\x4a\x9d\x53\x20\x1b\xae\x2a\x6c\x97\x0c\x32\x53\x69\x01\x89\x31\xaa\xef\x71\x38\x64\x90\x71\xe5\xb0\xef\x69\x25\x0b\xfc\xdb\x68\xfc\x53\x67\xc6\x16\xdc\x4b\xa3\x89\xbf\x95\x30\x0a\x86\x5b\xa3\x51\xee\x0d\xe1\xc6\x4e\xa1\x9b\x89\x27\xa9\x8f\x1f\x33\xfb\x6d\x89\xbd\xcd\x00\x59\xa5\xfe\x6e\x77\x1d\xf4\x8d\x14\xea\x1f\x42\xdb\x54\x1e\xd0\x47\xf7\xd1\x3f\x01\x00\x00\xff\xff\x47\x14\x60\x60\x06\x0a\x00\x00"), }, "/src/testing": &vfsgen۰DirInfo{ name: "testing", - modTime: time.Date(2018, 8, 25, 22, 2, 53, 558121153, time.UTC), + modTime: time.Date(2021, 4, 4, 19, 27, 41, 492250700, time.UTC), + }, + "/src/testing/allocs_test.go": &vfsgen۰CompressedFileInfo{ + name: "allocs_test.go", + modTime: time.Date(2021, 3, 28, 16, 15, 17, 184160300, time.UTC), + uncompressedSize: 158, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x2c\x8c\x4d\x0b\x82\x40\x10\x40\xcf\xcd\xaf\x18\xf6\xa4\x05\xeb\x6f\xe8\x14\x04\x41\xa8\xf7\x58\x75\xb2\x49\xf7\x83\x9d\xd9\x43\x44\xff\x3d\x04\x4f\x0f\x1e\x8f\xd7\x34\x78\x1a\x0a\xaf\x13\xbe\x05\x20\xb9\x71\x71\x33\xa1\x92\x28\x87\xf9\xb1\x11\x80\x7d\x8a\x59\xd1\xec\xd6\x00\x3c\x4b\x18\xb1\x27\xd1\xf3\xba\xc6\x51\xee\x94\xdb\x12\x2a\xc5\xe3\x9e\xd8\xbe\xc6\x2f\x1c\xd4\x76\x0b\xa7\xca\xe4\x12\x94\x3d\xd9\x96\xdc\x74\x23\xdf\xa9\x53\xa9\x6a\x64\xc1\x10\x15\xa5\xa4\xed\x4f\x13\x0e\x1f\xbc\xc4\xf4\xa2\x7c\xed\xac\xa9\xe1\x07\xff\x00\x00\x00\xff\xff\x50\xd0\xa8\x29\x9e\x00\x00\x00"), }, "/src/testing/example.go": &vfsgen۰CompressedFileInfo{ name: "example.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 937789100, time.UTC), uncompressedSize: 1424, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x54\x5d\x6b\xf3\x36\x14\xbe\x96\x7e\xc5\xa9\x20\x45\x5a\x5d\x85\xdd\x06\x7c\x51\xb6\x06\x0a\xa5\x2b\xcd\x7a\x57\x18\xaa\x73\xec\x6a\xb5\x25\x23\xc9\x49\xc7\x9a\xff\x3e\x74\xec\x7c\x8e\xf7\xe6\xbd\x09\x91\x2c\x3d\xe7\xf9\x38\x47\xf3\x39\xdc\xbc\x0f\xb6\x5d\xc3\xdf\x91\xf3\xde\x54\x9f\xa6\x41\x48\x18\x93\x75\x0d\xe7\xb6\xeb\x7d\x48\x20\x39\x13\x75\x97\x04\x67\xc2\xc7\xfc\x1b\x53\xb0\xae\xa1\xbf\xc9\x76\x28\xb8\xe2\xbc\x1e\x5c\x05\x61\x70\xf7\x5f\xa6\xeb\x5b\x94\xd8\xc0\x83\x4b\x18\x9c\x69\xa7\x2d\x05\xd2\x7f\xc2\xbb\xf7\xad\x82\x7f\x39\xb3\x35\xfc\x52\x7d\x98\x94\xfe\xc9\x2b\x56\x77\x49\x3f\x07\xeb\x52\x2d\x45\x59\x96\xf0\xf2\xfa\x04\x00\xb3\xf8\xe6\x44\x01\xd8\xe8\x27\xd3\xa1\xe2\x6c\xc7\x39\x9b\xcf\xe1\x37\xd3\xa7\x21\x20\xc4\xb4\xf6\x43\xd2\x9c\x8d\x7f\x60\x51\x82\x8f\x7a\x45\x0b\xce\xb6\x05\x60\x08\x79\x33\x61\xd7\x2f\x6d\x8b\x52\x68\x01\x37\x7b\x3c\xb8\x01\xa1\x27\x08\xa1\x88\x52\x3e\x7f\x55\x82\xb3\xed\x81\xd5\xb2\xcf\xb4\x5a\x27\x47\x64\x0c\x81\x60\x15\x67\xcc\x47\x7d\xff\x65\x93\xfc\x95\x98\xb1\x43\x69\x28\x61\xcb\x33\x29\x13\x88\x53\x76\x49\x3f\xf9\xad\x54\x9c\xf9\x4f\x28\x21\x85\x01\x27\x25\x2d\x1a\x07\x43\x0f\xd6\x81\x81\x35\xd6\x18\x02\xae\xa1\x32\x6d\x0b\xd1\xc3\x16\xa1\x32\x0e\x02\x56\x7e\x83\x01\x6c\x0d\xe9\x03\x01\x47\x47\xa1\x37\xce\x56\x51\x73\x46\xf7\x20\x67\x20\xc9\x5c\xb6\x8e\x89\x84\xd7\x5d\xfa\x7d\x08\x26\x59\xef\xe4\x91\x85\x5e\x0d\xef\x92\xd8\x29\xc5\x39\x1b\x79\xf8\x88\x50\xdb\x16\x0b\x08\x18\x93\x3f\xb8\x5b\x40\x83\x09\xfc\x90\x7a\x72\x9a\x6d\x35\x9d\x95\x93\x01\x07\xc5\x71\x72\x9d\xd1\x9d\x80\x66\x9d\x1d\xbf\x1f\x03\xd8\x2f\xe5\x96\x9c\x97\x2a\xdf\xfe\x0b\x28\xae\x17\xec\xfc\xe6\xfc\x8b\xad\xcf\x00\x4e\x12\x39\x89\xa4\x3e\x4d\x44\x4c\x5d\xbb\xa0\x8b\xd6\x35\x13\x1f\x92\xb4\x80\xd9\x86\x1a\xe9\x04\x34\x97\x39\x0b\x90\x7a\x8b\x6d\x4c\x80\xda\xd8\x16\xc6\x26\xe7\x8c\xe1\x5e\x01\x45\x40\xb2\x1b\x4f\xb1\x4e\x73\xa0\xff\x0c\xb6\x5b\xf5\xa6\x42\xe9\x87\x94\xbf\x6f\x8d\xfb\xc1\x01\x6c\xf4\x1f\xe4\xe4\xa4\x12\x1b\xfd\xea\x7c\x58\x63\x0e\x9d\xf4\xd9\x1a\xa2\x0f\xe9\xd1\x3a\x8c\xb2\xf1\x49\x65\xf5\xc7\x9d\x0c\xad\xe0\xfa\x9a\x3a\xb5\x3c\xf1\x85\x11\x6b\x4a\x5c\xaf\x26\x7f\x44\xe3\xd3\xe2\xcd\xe5\x29\x22\x4a\x72\xd8\xd7\x52\xd3\xb6\x28\x80\xe2\x3a\xe3\x95\x7b\x99\xed\x00\xdb\x88\x07\x4e\x59\xf2\x55\x09\x04\xf3\x73\xd5\x8f\x15\x1b\x9f\x0a\x42\x3a\x16\x1b\xdd\x20\x90\xab\x12\x84\x80\xef\xef\xcb\x59\x3c\x7b\x22\x6e\x6f\x6f\x61\x79\xf7\xf0\xb8\x80\x59\x04\x39\x8b\x2a\x83\x1f\x5f\x8a\x02\xf2\x00\x14\x04\x38\x06\x9d\xa7\xae\x36\x6d\xc4\xa3\xb4\x8b\x17\xe8\x7f\xf8\xcf\x77\xab\xd5\x09\xfe\x25\xba\x3a\xf2\xbe\x64\x4a\x73\x29\xa7\x47\x62\xc7\xd9\x4e\xaa\x71\xda\x5f\x06\xb7\x1f\x5e\xcd\x19\x36\x7a\x99\xfb\x29\x60\x1a\x82\xe3\x3b\xfe\x5f\x00\x00\x00\xff\xff\x6d\xa8\x39\x72\x90\x05\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x9c\x54\x5d\x6b\xf3\x36\x14\xbe\x96\x7e\xc5\xa9\x20\x45\x5a\x5d\x85\xdd\x06\x7c\x51\xb6\x06\x0a\xa5\x2b\xcd\x7a\x57\x18\xaa\x73\xec\x6a\xb5\x25\x23\xc9\x49\xc7\x9a\xff\x3e\x74\xec\x7c\x8e\xf7\xe6\xbd\x09\x91\x2c\x3d\xe7\xf9\x38\x47\xf3\x39\xdc\xbc\x0f\xb6\x5d\xc3\xdf\x91\xf3\xde\x54\x9f\xa6\x41\x48\x18\x93\x75\x0d\xe7\xb6\xeb\x7d\x48\x20\x39\x13\x75\x97\x04\x67\xc2\xc7\xfc\x1b\x53\xb0\xae\xa1\xbf\xc9\x76\x28\xb8\xe2\xbc\x1e\x5c\x05\x61\x70\xf7\x5f\xa6\xeb\x5b\x94\xd8\xc0\x83\x4b\x18\x9c\x69\xa7\x2d\x05\xd2\x7f\xc2\xbb\xf7\xad\x82\x7f\x39\xb3\x35\xfc\x52\x7d\x98\x94\xfe\xc9\x2b\x56\x77\x49\x3f\x07\xeb\x52\x2d\x45\x59\x96\xf0\xf2\xfa\x04\x00\xb3\xf8\xe6\x44\x01\xd8\xe8\x27\xd3\xa1\xe2\x6c\xc7\x39\x9b\xcf\xe1\x37\xd3\xa7\x21\x20\xc4\xb4\xf6\x43\xd2\x9c\x8d\x7f\x60\x51\x82\x8f\x7a\x45\x0b\xce\xb6\x05\x60\x08\x79\x33\x61\xd7\x2f\x6d\x8b\x52\x68\x01\x37\x7b\x3c\xb8\x01\xa1\x27\x08\xa1\x88\x52\x3e\x7f\x55\x82\xb3\xed\x81\xd5\xb2\xcf\xb4\x5a\x27\x47\x64\x0c\x81\x60\x15\x67\xcc\x47\x7d\xff\x65\x93\xfc\x95\x98\xb1\x43\x69\x28\x61\xcb\x33\x29\x13\x88\x53\x76\x49\x3f\xf9\xad\x54\x9c\xf9\x4f\x28\x21\x85\x01\x27\x25\x2d\x1a\x07\x43\x0f\xd6\x81\x81\x35\xd6\x18\x02\xae\xa1\x32\x6d\x0b\xd1\xc3\x16\xa1\x32\x0e\x02\x56\x7e\x83\x01\x6c\x0d\xe9\x03\x01\x47\x47\xa1\x37\xce\x56\x51\x73\x46\xf7\x20\x67\x20\xc9\x5c\xb6\x8e\x89\x84\xd7\x5d\xfa\x7d\x08\x26\x59\xef\xe4\x91\x85\x5e\x0d\xef\x92\xd8\x29\xc5\x39\x1b\x79\xf8\x88\x50\xdb\x16\x0b\x08\x18\x93\x3f\xb8\x5b\x40\x83\x09\xfc\x90\x7a\x72\x9a\x6d\x35\x9d\x95\x93\x01\x07\xc5\x71\x72\x9d\xd1\x9d\x80\x66\x9d\x1d\xbf\x1f\x03\xd8\x2f\xe5\x96\x9c\x97\x2a\xdf\xfe\x0b\x28\xae\x17\xec\xfc\xe6\xfc\x8b\xad\xcf\x00\x4e\x12\x39\x89\xa4\x3e\x4d\x44\x4c\x5d\xbb\xa0\x8b\xd6\x35\x13\x1f\x92\xb4\x80\xd9\x86\x1a\xe9\x04\x34\x97\x39\x0b\x90\x7a\x8b\x6d\x4c\x80\xda\xd8\x16\xc6\x26\xe7\x8c\xe1\x5e\x01\x45\x40\xb2\x1b\x4f\xb1\x4e\x73\xa0\xff\x0c\xb6\x5b\xf5\xa6\x42\xe9\x87\x94\xbf\x6f\x8d\xfb\xc1\x01\x6c\xf4\x1f\xe4\xe4\xa4\x12\x1b\xfd\xea\x7c\x58\x63\x0e\x9d\xf4\xd9\x1a\xa2\x0f\xe9\xd1\x3a\x8c\xb2\xf1\x49\x65\xf5\xc7\x9d\x0c\xad\xe0\xfa\x9a\x3a\xb5\x3c\xf1\x85\x11\x6b\x4a\x5c\xaf\x26\x7f\x44\xe3\xd3\xe2\xcd\xe5\x29\x22\x4a\x72\xd8\xd7\x52\xd3\xb6\x28\x80\xe2\x3a\xe3\x95\x7b\x99\xed\x00\xdb\x88\x07\x4e\x59\xf2\x55\x09\x04\xf3\x73\xd5\x8f\x15\x1b\x9f\x0a\x42\x3a\x16\x1b\xdd\x20\x90\xab\x12\x84\x80\xef\xef\xcb\x59\x3c\x7b\x22\x6e\x6f\x6f\x61\x79\xf7\xf0\xb8\x80\x59\x04\x39\x8b\x2a\x83\x1f\x5f\x8a\x02\xf2\x00\x14\x04\x38\x06\x9d\xa7\xae\x36\x6d\xc4\xa3\xb4\x8b\x17\xe8\x7f\xf8\xcf\x77\xab\xd5\x09\xfe\x25\xba\x3a\xf2\xbe\x64\x4a\x73\x29\xa7\x47\x62\xc7\xd9\x4e\xaa\x71\xda\x5f\x06\xb7\x1f\x5e\xcd\x19\x36\x7a\x99\xfb\x29\x60\x1a\x82\xe3\x3b\xfe\x5f\x00\x00\x00\xff\xff\x6d\xa8\x39\x72\x90\x05\x00\x00"), + }, + "/src/testing/helper_test.go": &vfsgen۰FileInfo{ + name: "helper_test.go", + modTime: time.Date(2021, 4, 4, 19, 27, 41, 492250700, time.UTC), + content: []byte("\x2f\x2f\x20\x2b\x62\x75\x69\x6c\x64\x20\x6a\x73\x0a\x0a\x70\x61\x63\x6b\x61\x67\x65\x20\x74\x65\x73\x74\x69\x6e\x67\x0a"), }, "/src/testing/ioutil.go": &vfsgen۰CompressedFileInfo{ name: "ioutil.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 11, 963786300, time.UTC), uncompressedSize: 1163, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x53\x61\x6f\x23\x35\x10\xfd\x6c\xff\x8a\x21\x12\xc8\xbe\x8d\x36\xbb\x69\x2f\x52\x7b\x04\xe9\xc8\x05\x74\x52\x29\x28\x6d\x05\x12\x42\x95\xb3\x3b\x2e\x43\x37\xf6\xca\xf6\x96\x44\xd0\xff\x8e\x6c\x6f\xb7\x94\x4f\x7c\x48\x76\x3c\x9e\x7d\xf3\xe6\xcd\xdb\xc5\x02\x8a\xfd\x40\x5d\x0b\x7f\x78\xce\x7b\xd5\x3c\xaa\x07\x84\x80\x3e\x90\x79\xe0\x9c\x0e\xbd\x75\x01\x04\x67\xb3\xfd\x29\xa0\x9f\x71\x36\x23\x1b\xff\x6d\x8a\x7d\x70\x8d\x35\x4f\x29\x3c\x99\x26\x3e\x03\x1d\x70\xc6\x25\xe7\x4f\xca\x81\x53\xa6\x85\x81\x4c\x38\x5b\x4e\xe7\xc3\x00\xb1\xb6\xfc\x61\x08\x78\xe4\x5c\x0f\xa6\x01\x87\x1e\xb1\x15\x72\xac\x85\xbf\x38\x73\x18\x06\x67\xc6\x84\x88\xa8\xe5\xb5\xfd\x53\xc8\xf2\xce\xd0\xf1\x5a\x19\x2b\x24\x14\x40\x26\xac\xce\x85\xf5\xe5\xf7\x18\x7a\x6a\x85\x94\x92\x3f\x8f\xa0\x06\x8f\xe1\x66\xd0\x9a\x8e\x42\x82\x0f\x8e\xcc\x43\x02\x4e\x1c\xca\x2b\xdb\x3c\x0a\xc9\x99\x83\xcb\x75\xe2\xc5\x19\x69\x70\xb0\x5e\x43\x15\xcb\x98\x83\xf5\xc4\x8b\xb3\x67\x9e\x13\xef\xea\xd5\xea\xfc\xfd\xf2\x3d\x14\x50\x57\xf5\xd9\x45\x75\xbe\x5c\x9e\xc1\x62\x01\x8d\x35\x3e\x28\x13\x3c\x68\x67\x0f\x70\x3d\x1c\xd0\x51\xa3\x3a\xd8\x61\x43\x3d\xfa\xdc\x38\x42\x4c\x14\xee\x4c\xf7\x42\x22\x0f\x3b\xca\x59\x7e\x0e\x56\x09\x32\x41\xd4\x78\x01\x05\xb8\x2f\x6b\xbc\x90\xf2\xd7\xfa\xf2\xb7\x38\xdc\x62\x01\x1f\x21\x4e\x18\xc8\x1a\xd5\x41\x63\xfb\x13\x58\x0d\x64\x87\x40\x5d\x79\x8b\x87\xfe\x3b\xea\x70\x0e\xc1\x82\x7a\xb2\xd4\x02\x1e\x83\x53\x90\x97\xe9\xcb\xac\x4e\x18\xcb\x44\xef\x50\xd3\x71\x14\x48\x82\xd0\xf0\xce\xfa\x32\x23\xa0\x73\xf1\x67\x9d\x8c\x92\xb4\x94\xc4\xb2\x3e\xf5\xf8\x44\x4e\x48\xce\x99\x69\xac\xd1\x1d\x35\x21\xde\x55\x9c\x69\xeb\x80\x52\xfc\x01\x08\xbe\x86\xba\xaa\xaa\x18\x16\x45\x92\xd5\xa8\x03\xc6\xdb\x08\x56\x8c\x5d\xe3\x02\x7f\x52\xe1\xf7\x1b\xec\x95\x53\x21\xb6\x2b\x60\xe4\x55\xbc\xd9\x23\x67\x4c\x67\x5a\x89\xc7\x8f\x3d\x9a\x34\x44\x44\x9d\xa7\xcc\xfd\xee\xd3\xcf\xbb\xbf\x53\xb4\xd9\x6d\x3f\xde\x6e\x73\xbc\xfd\x65\x73\x35\x87\x6a\x55\x55\x11\x83\x74\xac\xfd\xec\xb7\x47\xf2\x41\xa0\xcb\xf3\xa5\xfc\x34\x4e\x51\x7c\x78\x3d\xc0\x37\x50\x67\x5b\xb0\xff\x1a\x68\xcc\xbc\x71\xcb\x6b\xd5\xeb\x8e\x59\xf4\x10\x63\x8d\x35\x81\xcc\x80\x3c\x9f\xf7\x0e\xd5\x63\xb6\x57\xf2\xc0\xe4\x5e\x87\xaa\x4d\xa3\x69\xea\x30\x89\x36\x6d\x28\x07\xf3\x7f\x6d\x66\xd4\xe4\x72\x12\x65\x7a\x4b\x26\x5b\xc7\xcb\x2f\xd6\x60\xa8\xcb\xd6\xce\x76\x9b\xcd\xd2\x6b\xa9\x7b\x8b\x1a\x1d\xe8\x72\xd3\x59\x8f\x91\x6e\xfc\x5c\xf7\x83\x86\xf4\xdd\x97\xdf\x0e\x5a\xa3\xe3\xec\xfe\x45\x7c\xb2\xe5\xc6\xf6\x27\xf1\xd5\x7e\xd0\x73\xd0\xff\xb7\xcd\x98\xda\x0f\xba\xbc\xc9\xab\x97\xf3\x58\xcf\x9f\xf9\x3f\x01\x00\x00\xff\xff\x2f\x92\x73\x9b\x8b\x04\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x8c\x53\x61\x6f\x23\x35\x10\xfd\x6c\xff\x8a\x21\x12\xc8\xbe\x8d\x36\xbb\x69\x2f\x52\x7b\x04\xe9\xc8\x05\x74\x52\x29\x28\x6d\x05\x12\x42\x95\xb3\x3b\x2e\x43\x37\xf6\xca\xf6\x96\x44\xd0\xff\x8e\x6c\x6f\xb7\x94\x4f\x7c\x48\x76\x3c\x9e\x7d\xf3\xe6\xcd\xdb\xc5\x02\x8a\xfd\x40\x5d\x0b\x7f\x78\xce\x7b\xd5\x3c\xaa\x07\x84\x80\x3e\x90\x79\xe0\x9c\x0e\xbd\x75\x01\x04\x67\xb3\xfd\x29\xa0\x9f\x71\x36\x23\x1b\xff\x6d\x8a\x7d\x70\x8d\x35\x4f\x29\x3c\x99\x26\x3e\x03\x1d\x70\xc6\x25\xe7\x4f\xca\x81\x53\xa6\x85\x81\x4c\x38\x5b\x4e\xe7\xc3\x00\xb1\xb6\xfc\x61\x08\x78\xe4\x5c\x0f\xa6\x01\x87\x1e\xb1\x15\x72\xac\x85\xbf\x38\x73\x18\x06\x67\xc6\x84\x88\xa8\xe5\xb5\xfd\x53\xc8\xf2\xce\xd0\xf1\x5a\x19\x2b\x24\x14\x40\x26\xac\xce\x85\xf5\xe5\xf7\x18\x7a\x6a\x85\x94\x92\x3f\x8f\xa0\x06\x8f\xe1\x66\xd0\x9a\x8e\x42\x82\x0f\x8e\xcc\x43\x02\x4e\x1c\xca\x2b\xdb\x3c\x0a\xc9\x99\x83\xcb\x75\xe2\xc5\x19\x69\x70\xb0\x5e\x43\x15\xcb\x98\x83\xf5\xc4\x8b\xb3\x67\x9e\x13\xef\xea\xd5\xea\xfc\xfd\xf2\x3d\x14\x50\x57\xf5\xd9\x45\x75\xbe\x5c\x9e\xc1\x62\x01\x8d\x35\x3e\x28\x13\x3c\x68\x67\x0f\x70\x3d\x1c\xd0\x51\xa3\x3a\xd8\x61\x43\x3d\xfa\xdc\x38\x42\x4c\x14\xee\x4c\xf7\x42\x22\x0f\x3b\xca\x59\x7e\x0e\x56\x09\x32\x41\xd4\x78\x01\x05\xb8\x2f\x6b\xbc\x90\xf2\xd7\xfa\xf2\xb7\x38\xdc\x62\x01\x1f\x21\x4e\x18\xc8\x1a\xd5\x41\x63\xfb\x13\x58\x0d\x64\x87\x40\x5d\x79\x8b\x87\xfe\x3b\xea\x70\x0e\xc1\x82\x7a\xb2\xd4\x02\x1e\x83\x53\x90\x97\xe9\xcb\xac\x4e\x18\xcb\x44\xef\x50\xd3\x71\x14\x48\x82\xd0\xf0\xce\xfa\x32\x23\xa0\x73\xf1\x67\x9d\x8c\x92\xb4\x94\xc4\xb2\x3e\xf5\xf8\x44\x4e\x48\xce\x99\x69\xac\xd1\x1d\x35\x21\xde\x55\x9c\x69\xeb\x80\x52\xfc\x01\x08\xbe\x86\xba\xaa\xaa\x18\x16\x45\x92\xd5\xa8\x03\xc6\xdb\x08\x56\x8c\x5d\xe3\x02\x7f\x52\xe1\xf7\x1b\xec\x95\x53\x21\xb6\x2b\x60\xe4\x55\xbc\xd9\x23\x67\x4c\x67\x5a\x89\xc7\x8f\x3d\x9a\x34\x44\x44\x9d\xa7\xcc\xfd\xee\xd3\xcf\xbb\xbf\x53\xb4\xd9\x6d\x3f\xde\x6e\x73\xbc\xfd\x65\x73\x35\x87\x6a\x55\x55\x11\x83\x74\xac\xfd\xec\xb7\x47\xf2\x41\xa0\xcb\xf3\xa5\xfc\x34\x4e\x51\x7c\x78\x3d\xc0\x37\x50\x67\x5b\xb0\xff\x1a\x68\xcc\xbc\x71\xcb\x6b\xd5\xeb\x8e\x59\xf4\x10\x63\x8d\x35\x81\xcc\x80\x3c\x9f\xf7\x0e\xd5\x63\xb6\x57\xf2\xc0\xe4\x5e\x87\xaa\x4d\xa3\x69\xea\x30\x89\x36\x6d\x28\x07\xf3\x7f\x6d\x66\xd4\xe4\x72\x12\x65\x7a\x4b\x26\x5b\xc7\xcb\x2f\xd6\x60\xa8\xcb\xd6\xce\x76\x9b\xcd\xd2\x6b\xa9\x7b\x8b\x1a\x1d\xe8\x72\xd3\x59\x8f\x91\x6e\xfc\x5c\xf7\x83\x86\xf4\xdd\x97\xdf\x0e\x5a\xa3\xe3\xec\xfe\x45\x7c\xb2\xe5\xc6\xf6\x27\xf1\xd5\x7e\xd0\x73\xd0\xff\xb7\xcd\x98\xda\x0f\xba\xbc\xc9\xab\x97\xf3\x58\xcf\x9f\xf9\x3f\x01\x00\x00\xff\xff\x2f\x92\x73\x9b\x8b\x04\x00\x00"), }, - "/src/testing/testing.go": &vfsgen۰CompressedFileInfo{ - name: "testing.go", - modTime: time.Date(2018, 8, 25, 22, 2, 53, 558360921, time.UTC), - uncompressedSize: 642, + "/src/testing/sub_test.go": &vfsgen۰CompressedFileInfo{ + name: "sub_test.go", + modTime: time.Date(2021, 4, 4, 18, 51, 2, 392250700, time.UTC), + uncompressedSize: 792, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x91\x4f\x6f\xd3\x40\x10\xc5\xcf\xde\x4f\xf1\xc8\x85\x16\x2c\xfb\x1e\x01\x17\x50\xf9\x23\x44\x0f\x6d\xcf\x68\x63\x8f\xe3\xc1\xeb\x59\xb3\x33\x4b\x04\x55\xbe\x3b\xda\xa4\x11\x21\xea\x79\xe7\xf7\x7b\x6f\x66\xdb\x16\xaf\x37\x99\x43\x8f\x1f\xea\xdc\xe2\xbb\xc9\x6f\x09\x46\x6a\x2c\x5b\xe7\x78\x5e\x62\x32\xac\x52\x16\xe3\x99\x56\xce\xb5\x2d\xee\x47\x42\x5e\xd4\x12\xf9\x19\x9d\x0f\x81\xd2\x37\x3f\x13\xbc\xf4\x18\x92\x9f\xe9\x6e\xe2\x05\x89\xc2\x6f\x44\xc1\x13\xda\xbc\x3f\x0c\x6a\x5d\x0c\x65\x72\xf1\xc2\x1d\x78\x80\x8d\x94\x08\x3e\x11\xfe\x50\x8a\x4f\x42\xc5\x10\xb3\xf4\x0d\x3e\xc5\x1d\xfd\xa2\x54\x5f\x7a\x8a\x86\x15\x12\x0d\x3c\x2f\x81\x66\x12\xa3\x1e\x43\x4c\xf8\x18\x97\x91\xd2\x97\x3b\x78\x83\x8d\xac\x28\x5c\x0d\x8d\xd8\x11\x3a\x2f\x2f\x0d\x59\xa9\x08\x6c\xf4\x67\xb8\x37\x8e\xd2\xe0\x41\xa9\x74\x52\x82\x5a\xde\x28\x58\xd4\xc8\xf7\x8d\x1b\xb2\x74\x67\xfb\x5e\x69\x59\x93\xc5\xae\xa1\x96\x58\xb6\x78\x74\x55\xdb\xe2\xe1\x99\xd3\x24\xfa\x99\x39\x91\xc2\xa3\x58\x4a\x90\x0f\x97\x2b\x35\x07\xfc\xfe\xf6\xc3\xed\x1a\x9f\x4f\xa5\xca\x85\x96\xa8\xca\x9b\x40\x8d\xab\x12\x59\x4e\x82\xd5\x9b\x2c\x93\xc4\x9d\xbc\x5b\xb9\xbd\x3b\x36\xbb\x7a\xd5\xc5\x79\x8e\x72\xfd\xef\x13\xce\x2a\x9e\xb2\x6e\xca\x5b\x69\xfa\xbd\xc6\xc0\x81\x6a\x04\x16\xaa\x11\x27\xac\xdf\x5e\x34\x3a\xe0\xd7\xae\xe2\x01\x2f\xe2\x54\xa0\x53\xfe\x7f\xb6\xc7\xbd\xab\xf6\xee\xf9\x27\x57\x55\x37\x1c\x68\x7d\xcc\x72\x55\xf5\x95\x85\xd6\xc7\xcc\x42\xed\xdd\xdf\x00\x00\x00\xff\xff\x1b\x9f\xb2\xfc\x82\x02\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xec\x90\xc1\xaa\xd4\x40\x10\x45\xd7\xe6\x2b\x2e\xb3\x71\x46\x25\xb3\x17\x71\x31\x88\x82\x20\x0f\xde\x64\xff\xe8\x74\x2a\x93\x32\xe9\xea\xa6\xaa\x5a\x1c\xc4\x7f\x97\x04\x1d\x47\x97\xae\xfd\x80\x7b\xea\xd4\x39\x1e\xf1\xb2\xaf\xbc\x0c\xf8\x6c\x4d\x53\x42\x9c\xc3\x85\xe0\x64\xce\x72\x69\x9a\xb1\x4a\x44\x47\xe6\x27\x92\x38\xa5\xa0\xf3\x23\x85\xe1\x13\xa5\xb3\x07\xb7\x13\x8d\x59\xe9\x3d\xab\xf9\x63\x95\xbd\xe3\x45\x77\xc0\xb7\xe6\x99\xb7\xe7\x99\xcb\x7e\xa7\x55\x9c\x13\xb5\xf7\x9b\xfd\x01\x6c\x90\xec\xb0\x5a\x4a\x56\xa7\x01\xfd\x15\x1f\x72\x99\x48\x3f\x9e\xdb\xdd\xa1\xf9\x7e\x77\xb7\xfb\x03\x7c\x3c\xa2\x7b\x78\xf7\xb0\x17\xfa\x32\x67\xf1\x30\x3b\x1d\x5e\xa3\x9b\xd8\x36\x65\x14\xd2\x31\x6b\x32\x98\x2b\xcb\x05\x31\xa7\x12\x94\x2d\x8b\x81\xbe\x16\x8a\xeb\x57\xf0\x8c\x91\x65\xd8\x70\x56\xfb\xa7\x75\xda\x5e\x32\x58\xe0\x13\x21\x57\x2f\xd5\x5f\xa1\xaf\x7e\xd3\x42\xac\xaa\x24\xbe\x5c\xa1\xb4\x5a\x1b\x62\x58\x16\xd2\x0d\xb2\xe4\x18\x9c\xd7\x23\xc1\xb0\xdb\x70\x6f\x34\xc8\x90\xd3\x93\xd4\xd4\x93\xbe\xdd\x61\xa8\xb4\x1e\x4e\x2c\x9c\xc2\xf2\x73\x8d\x20\x03\x2c\x57\x8d\x84\x14\xca\xaf\x24\xed\xef\x84\x37\x81\x21\x93\xc9\xf3\x5b\xb5\xbb\x95\xc1\xea\x38\x72\xe4\xcd\xef\xef\x80\xa7\xff\x01\xff\x25\xe0\x8f\x00\x00\x00\xff\xff\x4f\xfa\xa1\x7c\x18\x03\x00\x00"), }, "/src/text": &vfsgen۰DirInfo{ name: "text", - modTime: time.Date(2018, 4, 20, 9, 17, 51, 715639756, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 12, 16782000, time.UTC), }, "/src/text/template": &vfsgen۰DirInfo{ name: "template", - modTime: time.Date(2018, 4, 20, 10, 35, 24, 780257322, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 12, 26781500, time.UTC), }, "/src/text/template/template.go": &vfsgen۰FileInfo{ name: "template.go", - modTime: time.Date(2017, 10, 12, 19, 45, 13, 0, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 12, 28783500, time.UTC), content: []byte("\x2f\x2f\x20\x2b\x62\x75\x69\x6c\x64\x20\x6a\x73\x0a\x0a\x70\x61\x63\x6b\x61\x67\x65\x20\x74\x65\x6d\x70\x6c\x61\x74\x65\x0a\x0a\x63\x6f\x6e\x73\x74\x20\x6d\x61\x78\x45\x78\x65\x63\x44\x65\x70\x74\x68\x20\x3d\x20\x33\x30\x30\x30\x0a"), }, "/src/time": &vfsgen۰DirInfo{ name: "time", - modTime: time.Date(2019, 4, 14, 20, 40, 36, 659127630, time.UTC), + modTime: time.Date(2021, 3, 28, 19, 2, 1, 650000000, time.UTC), }, "/src/time/time.go": &vfsgen۰CompressedFileInfo{ name: "time.go", - modTime: time.Date(2018, 2, 27, 18, 42, 13, 0, time.UTC), - uncompressedSize: 2155, + modTime: time.Date(2021, 3, 28, 19, 2, 1, 650000000, time.UTC), + uncompressedSize: 2120, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x55\xdf\x6f\xdb\x36\x10\x7e\x26\xff\x8a\x9b\xb0\x21\x64\xa3\x48\xf9\x51\x64\x58\x10\x0f\xd8\x92\x35\x08\xd0\xd4\xc0\x92\xbe\xac\x28\x06\x9a\x3a\xd9\x74\x64\x52\x20\xa9\x38\x8e\xeb\xff\x7d\x20\x29\x2b\x76\xbb\x15\x98\x9e\xc4\xe3\xf1\xee\xfb\x3e\x1e\xef\xca\x12\x0e\x27\x9d\x6a\x2a\x98\x3b\x4a\x5b\x21\x1f\xc5\x14\xc1\xab\x05\x52\xaa\x16\xad\xb1\x1e\x18\x25\x99\xed\x74\xb0\x65\x94\x92\x6c\xaa\xfc\xac\x9b\x14\xd2\x2c\xca\xa9\x69\x67\x68\xe7\xee\xf5\x67\xee\x32\xca\x29\x2d\x4b\xb8\x13\x8f\x08\xae\xb3\x29\x5a\xf1\x51\xab\x67\xa8\x3b\x2d\x41\xe8\x2a\x99\x1e\xd4\x02\xc1\x79\xdb\x49\x0f\xca\x83\x45\xdf\x59\xed\x40\x58\x04\xd1\x2c\xc5\xca\x81\xd2\xb2\xe9\x2a\xac\x60\xa9\xfc\x0c\xfc\x4c\x39\xd8\x42\x64\x15\xba\x56\x79\x84\xeb\xab\x3f\x78\x1e\x12\x4e\x50\x8a\xce\x21\xf8\x19\xae\x0e\x2c\x82\x46\x0c\x47\x6b\x63\x41\x69\x8f\x56\x8b\x46\xbd\x08\xaf\x8c\x2e\xf1\x79\x6f\x0d\xa6\x7e\x45\x54\x5e\x0b\x8f\x05\xdc\x23\x82\x72\xae\x43\x98\x79\xdf\xba\x8b\xb2\xfc\x2e\xef\xe8\xea\xca\xd3\x9f\x7f\x29\x68\x64\xa9\xb4\xf2\x8c\xc3\x9a\x92\xb2\x04\xf1\x64\x54\x05\x15\x8a\x0a\xa4\xa9\x10\xb0\x51\x0b\xa5\x63\x6e\x4a\x9e\x84\x85\xbf\x21\x8a\x31\x82\x20\x13\x3b\xce\xe1\x98\xd3\x0d\xa5\x7e\xd5\x22\xf4\xda\x07\x07\xbb\x95\x6b\x4d\x89\x82\xf4\x29\xed\xcf\x4e\x29\x59\xce\x50\xf7\xcb\xf3\xb7\x94\xb4\x68\x95\xa9\x86\x65\xdd\x3b\x07\x68\x2c\xaa\x51\x0b\x89\xeb\x4d\x0e\x9d\xd2\xbe\xf5\x96\x53\x22\xec\x74\x1b\x70\xbb\x4d\x49\xc8\x6c\x3a\x0f\x6f\xe6\xae\x18\x4f\xe6\x28\x3d\x25\x42\x7a\xf5\x84\x00\x13\x63\x9a\x80\x72\xe0\xfb\xde\x48\xd1\x24\xd2\x15\x5c\x8c\x60\xee\x8a\x9b\xc6\x4c\x44\x53\xdc\xa0\x67\x59\x10\x36\xe3\xc5\x07\x5c\x32\x4e\x89\x0b\x1e\x55\x71\xef\xad\xd2\xd3\x60\x50\xc1\xa0\x74\x85\xcf\xbf\xaf\x3c\x32\x97\xc3\x01\x3b\xe0\x94\xcc\xbf\xb5\xf3\x60\x57\x35\x28\x18\x8d\xe0\xe8\x04\xbe\x7c\x81\x79\xff\xbb\xa6\x84\x34\x01\xc7\x7b\x23\x0b\x2d\xa2\xa8\xd9\xc7\x87\xab\x8c\x12\x92\x2a\x8c\x92\x0d\xfd\xc6\xc5\x7d\x52\x87\x27\x70\x01\xf3\xcf\x3b\x7b\x2f\x46\x87\xbd\x4f\x9f\xc3\xcf\x7a\xbd\x77\x26\x87\xaa\xb8\x12\x4d\xc3\xb2\x29\xfa\x70\x37\xc1\x67\x5c\xd7\x0e\x7d\xc6\x8b\x5b\x1d\x2e\xff\x0d\x1c\x9d\x1f\xe7\x50\x8b\xc6\xe1\x66\x33\x48\xd5\x5f\xe8\x07\xa1\x0d\xe3\xe9\x86\x02\xec\x84\xee\x7b\xa2\xed\x27\x4c\x69\xce\xdf\xc6\x44\x31\x0a\xbb\x53\x4d\xa3\x1c\x4a\xa3\x2b\x3e\xa4\xd3\x66\xc9\x38\x30\x87\x32\x79\xe5\xa0\xfb\xff\xb3\xd3\x1c\x16\x46\x9b\x64\x8f\xf7\xa6\x83\xd8\x7b\x00\x07\x60\x1a\xca\x3e\xcd\x7d\xca\x90\xa7\x18\x4c\xc3\x4f\xfb\x1b\x3c\x07\x3d\xa4\xbf\x6f\x10\x5b\x56\xc1\x75\x67\x63\xc1\xc7\x34\x32\xa4\x59\x88\x47\x64\x72\x26\x74\x5f\xd5\xeb\x4d\xb8\xed\x81\x7e\x22\xfb\xa3\x4b\x6c\x4d\xe7\xb3\x3c\x88\x73\xdb\xbf\xe5\x54\x8d\x2c\x56\x34\x87\x35\xc8\xc6\x38\x64\x92\xc3\x26\x01\x63\x55\xb9\x2b\x07\xa7\xe4\xf2\x48\x0e\xa8\x9c\x17\x36\xc6\xb5\xcc\xc3\x9b\xdd\x27\x16\xf1\xf9\xa2\x2f\xf2\x11\x78\xdb\x21\x25\x95\xaa\xeb\x80\x99\xf9\x22\xbe\xb4\xa3\x7d\x91\xf8\xa0\xcd\xde\x15\x84\x1a\x8d\x27\x7f\x85\x93\xcb\xcb\xb3\x93\x50\x9f\x50\x96\xb0\x10\x7e\x56\xdc\x89\xe7\xdb\xf4\x76\x77\x0b\x73\x7b\xe2\x12\x8e\x63\x2d\xc7\xc5\x08\x8e\xe3\xa6\x2f\xb6\xef\x71\xf7\x71\xfd\x3f\xa1\x28\xd9\x65\x17\x6b\x93\x92\x90\xd6\x17\x7d\xd3\xf8\x61\xd4\xe7\x26\x3d\xd9\xc3\xd1\xb0\x19\xac\xbb\xda\x71\x4a\x02\x30\x32\x35\xe0\x8b\x9a\xf9\x42\xd8\x69\xec\x5e\x24\x5c\x43\x00\x7f\x78\xc2\x77\x54\x37\xed\x7f\x88\x1e\x9a\x49\x48\xfa\x35\x2d\xd9\xa0\xb0\xaf\xbc\x06\x05\x38\x25\x4b\xe1\x7e\x4b\x3c\x2e\x02\xc0\xc4\x89\xfe\x0b\xbb\xbe\x80\x07\xff\x01\x4f\x6d\xac\xc4\xbf\x54\xfb\x4e\x35\xf8\xce\xd8\x07\x74\x3e\x34\xa3\x17\xd5\x8e\x75\xb3\x8a\x98\x82\x62\x1b\x4a\x43\x93\x0e\x2f\xfc\xde\x74\x56\xa2\x8b\x5d\xc1\xc5\xd6\x15\x5e\x6e\x62\x52\xdc\x8c\xff\x1c\x8f\x1f\x18\x87\x43\xc8\xca\x46\x4d\xca\x60\x2d\xc3\x31\xa5\x6b\x53\xbc\xa8\x36\xcb\x43\xb0\xb2\x7c\xed\x67\xa0\x1c\x48\xd3\xaa\x30\xa9\xac\x59\x40\x0a\xfa\x3a\xe7\xbc\xe9\xa7\x47\x9a\xc6\x4a\x4f\xc3\xac\x64\x4e\x69\x19\x47\x1d\x58\x14\x4d\x9c\x5e\xc3\x91\xca\xa0\xd3\x07\x9e\x0f\x93\x68\x68\x9d\x7d\xf4\x1c\x24\x4c\x56\x1e\x63\xf3\xd9\x6f\x3d\x5f\x15\x8d\xdb\xf6\x9c\x18\x64\x5c\xa7\xca\xda\xed\x4f\xa9\x7f\x67\x5b\xbf\xc0\xe1\x6a\x26\xec\x95\xa9\x30\xcb\x41\xf2\xbe\x17\xd2\x0d\xfd\x27\x00\x00\xff\xff\xbc\xb4\x65\x1c\x6b\x08\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x9c\x95\xdf\x6f\xdb\x36\x10\xc7\x9f\xc9\xbf\xe2\x66\x6c\x28\xd9\xa8\x52\xd2\x0e\x1b\x56\x44\x03\xb6\x74\x2d\xfa\xd0\x19\x58\xb2\x97\x0d\xc3\x40\x53\x27\x9b\xae\x4c\x6a\x24\xd5\xc4\x31\xfc\xbf\x0f\x47\x51\xb6\xd3\x35\x79\x58\x1e\x02\xf1\xd7\xdd\xf7\xfb\x21\xcf\x57\x55\x70\xb6\x18\x4c\xd7\xc0\x3a\x70\xde\x2b\xfd\x51\x2d\x11\xa2\xd9\x20\xe7\x66\xd3\x3b\x1f\x41\x70\x36\xf3\x83\xa5\xb9\x19\xe7\x6c\xb6\x34\x71\x35\x2c\x4a\xed\x36\xd5\xd2\xf5\x2b\xf4\xeb\x70\xfc\x58\x87\x19\x97\x9c\x57\x15\x7c\x50\x1f\x11\xc2\xe0\xc7\x68\xe5\xef\xd6\xdc\x41\x3b\x58\x0d\xca\x36\xe3\xd4\x8d\xd9\x20\x84\xe8\x07\x1d\xc1\x44\xf0\x18\x07\x6f\x03\x28\x8f\xa0\xba\x5b\xb5\x0d\x60\xac\xee\x86\x06\x1b\xb8\x35\x71\x05\x71\x65\x02\x4c\x12\x45\x83\xa1\x37\x11\xe1\xcd\xd5\x2f\xb2\xa0\x84\x0b\xd4\x6a\x08\x08\x71\x85\xdb\x67\x1e\xc1\x22\xd2\xd1\xd6\x79\x30\x36\xa2\xb7\xaa\x33\xf7\x2a\x1a\x67\x2b\xbc\x7b\x30\x06\xd7\x1e\x15\x55\x6f\x54\xc4\x12\xae\x11\xc1\x84\x30\x20\xac\x62\xec\xc3\xeb\xaa\x7a\xd2\x77\xda\x1a\xaa\x97\xdf\xff\x50\xf2\xe4\xd2\x58\x13\x85\x84\x1d\x67\x55\x05\xea\x93\x33\x0d\x34\xa8\x1a\xd0\xae\x41\xc0\xce\x6c\x8c\x4d\xb9\x39\xfb\xa4\x3c\xfc\x0d\x09\x46\x0d\x84\x49\x9c\x17\x70\x2e\xf9\x9e\xf3\xb8\xed\x11\x32\x7b\xda\xe0\x27\x5c\x3b\xce\x0c\x8c\x7f\xc6\xc6\x57\x2f\x39\xbb\x5d\xa1\xcd\xc3\xef\xbe\xe5\xac\x47\x6f\x5c\x73\x18\xb6\x79\x33\x49\x13\x89\x46\xab\x34\xee\xf6\x05\x0c\xc6\xc6\x3e\x7a\xc9\x99\xf2\xcb\x29\xe0\xb4\xcc\x59\xc0\x7f\xd2\x64\xde\xc6\x19\x49\x71\x43\x84\xe7\xeb\x50\xce\x17\x6b\xd4\x91\x33\xa5\xa3\xf9\x84\x00\x0b\xe7\x3a\x92\x9d\x00\x58\x77\x2b\x24\x88\x80\x7a\x14\x51\x80\xcd\xdf\xaf\x5e\x16\xb0\x71\xd6\x8d\xf3\x89\x91\x85\xd7\xf5\x64\xf4\x57\x65\x9d\x90\x9c\x8d\xef\x01\x2c\x54\xe3\x46\x71\x8d\xda\xd9\x46\x16\x63\x0c\x61\xe1\x9b\x87\x0b\xb2\x00\x7b\x48\x7f\xdd\x21\xf6\xa2\x81\x37\x83\x4f\x9c\x53\x1a\x4d\x69\x36\xea\x23\x0a\xbd\x52\x36\xc3\xdc\xed\x25\x67\xeb\x50\xbe\xeb\xdc\x42\x75\xe5\x95\xea\x3a\x31\xfb\x3a\x60\xbc\x19\xad\xce\x0a\x58\x87\xf2\x7d\x7e\x42\xa3\x67\x91\x40\x4a\xd8\x81\xee\x5c\x40\xa1\x25\xec\x47\x61\xa2\xa9\x3e\x98\xae\x33\x21\x6b\xe2\xec\xf2\x85\x3e\xa8\x0a\x51\xf9\x14\xd7\x8b\x08\xcf\x4f\x6f\x36\xe9\x8b\x65\x46\x59\x43\xf4\x03\x72\xd6\x98\xb6\x25\xcd\x22\x96\xe9\x82\x5f\x3c\x84\x24\x0f\x6c\x4e\x73\x72\x66\x5a\x48\x27\x7f\x84\x8b\xcb\xcb\x57\x17\x2f\x2e\x60\x07\x55\x05\x1b\x15\x57\xe5\x07\x75\xf7\x7e\x7c\x32\x99\x30\x67\xfb\xe3\x89\x4b\x38\x27\x21\x63\xe2\x1a\xce\xd3\x62\x2c\xa7\x5b\xaf\xe1\xff\x82\xe2\xec\xd4\x5d\xab\xba\x80\x9c\x51\xda\x58\xe6\xb7\xfa\x55\x9d\x73\xb3\x6c\xf6\xac\x3e\x2c\xd2\xec\x29\x3b\xc9\x19\x09\x63\x4b\x07\xb1\x6c\x45\x2c\x95\x5f\xa6\xa2\x61\x74\x0d\x24\xfe\xec\x42\x9e\x50\x77\xfd\x23\xd0\xe9\xc9\x52\xd2\xcf\x6d\xe9\x0e\x95\x3f\xfa\x3a\x10\x90\x9c\xdd\xaa\xf0\xd3\xe8\xe3\x35\x09\x1c\x3d\xf1\x2f\xb8\xcb\x0f\xf8\xb0\xff\xa0\x67\xe3\x9a\x2f\xca\x29\x80\x7c\x17\x90\x81\xe4\xb2\x69\x9f\xa8\xda\x02\xa8\x6a\x1f\x2c\x51\xc5\x4e\xcb\xe4\xec\xc4\xbc\xe4\x13\xda\x3a\x65\xa2\x61\xce\x55\xc3\x04\x3a\x96\x74\xf1\x6d\x32\xe4\x97\x50\x53\x06\x1a\x50\xdc\x9a\xa2\xf3\xcf\x6e\x62\x72\xe5\x31\x3f\x85\x47\x7c\x4d\xe5\x3e\x21\x7f\x84\xe3\x11\xce\x84\x63\x12\x49\x5f\x2d\xfd\x4b\x97\x9d\x14\xc9\x27\x28\xb7\xce\x6b\xfc\xc3\xf4\x6f\x4d\x87\x6f\x9d\xbf\xc1\x10\x8d\x5d\x8a\x7b\xd3\xcf\x6d\xb7\x4d\x32\x08\xd0\x9e\x73\xfa\x05\xbe\x77\x16\xaf\xdd\xe0\x35\x06\xa8\xe1\xcf\xbf\x42\xf4\xc6\x2e\x77\x9c\x65\x23\xe5\xbb\xf9\x6f\xf3\xf9\x8d\x90\x70\x06\xb3\xaa\x33\x8b\x8a\x66\x2b\x3a\x66\x6c\xeb\xca\x7b\xd3\xcf\x0a\x0a\x56\x51\x49\x36\x78\xf7\xf3\x36\x52\x07\x01\xed\x7a\x43\x6d\xc8\xbb\x0d\x8c\x41\x8f\x4d\x2c\xba\xdc\x1a\xc6\x56\x6b\xec\x92\x1a\xa1\x08\xc6\xea\xd4\xc7\xc0\xa3\xea\x52\x6b\x3a\x1c\x69\x1c\x06\xfb\x2c\xca\x43\x9b\xc9\xa9\x44\xc8\xd1\x0b\xd0\xb0\xd8\x46\x94\xc4\x9b\x38\x67\x40\xff\x2d\xcd\x20\xf3\x63\x4f\x41\xe6\xed\x58\xbf\xb9\x0c\xde\x61\x14\xb3\xeb\x14\x71\x36\xed\x23\x0f\x57\x2b\xe5\xaf\x5c\x83\xb3\x02\xb4\x94\x14\x52\xd0\x13\xf8\x37\x00\x00\xff\xff\xa0\x20\x9e\x50\x48\x08\x00\x00"), }, "/src/time/time_test.go": &vfsgen۰CompressedFileInfo{ name: "time_test.go", - modTime: time.Date(2019, 4, 14, 20, 40, 36, 659553958, time.UTC), - uncompressedSize: 147, + modTime: time.Date(2021, 3, 28, 19, 2, 1, 650000000, time.UTC), + uncompressedSize: 263, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8c\xc1\x0e\x82\x30\x10\x05\xcf\xec\x57\xbc\xf4\xd4\x6a\x02\x7f\xe2\x05\xee\xa6\xd6\x05\x56\xa0\x6d\xe8\x36\x1e\x8c\xff\x6e\x9a\x78\x9d\xc9\xcc\x30\xe0\xfa\xa8\xb2\x3f\xf1\x2a\x44\xd9\x87\xcd\x2f\x0c\x95\x83\xef\xca\x45\x89\xe4\xc8\xe9\x54\x58\xea\x4c\x03\x12\x17\x43\x8e\x68\xae\x31\x60\xe2\xa2\xe3\xce\x9c\xad\xe2\xf2\xb7\xfd\xe4\xf0\xa1\x4e\xfb\x71\x93\x6c\x4d\x3b\xf5\xb7\xf4\xb6\x0e\x52\x10\x93\xc2\x87\x50\x4f\xaf\x0c\x8e\xa9\x2e\x2b\xe6\x74\x42\x57\x46\xeb\x8d\xa3\x2f\xfd\x02\x00\x00\xff\xff\x49\x24\xa9\x3b\x93\x00\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x74\xcd\x3d\x4e\xc4\x40\x0c\xc5\xf1\x7a\x7d\x8a\xa7\x54\x09\x48\xd9\x53\xd0\xd2\x6c\x68\xb6\x41\x93\xc1\x9b\x35\x9b\xd8\xa3\x19\x27\x41\x42\xdc\x1d\x0d\x1f\x12\x0d\xed\xb3\xfc\xff\x1d\x8f\xb8\x1f\x57\x99\x5f\xf0\x5a\x88\x52\x88\xb7\x30\x31\x5c\x16\x7e\x76\x2e\x4e\x24\x4b\xb2\xec\x68\xe9\xd0\xd4\x41\x74\x6a\xa8\x23\xba\xac\x1a\x31\x70\xf1\xd3\xcc\x9c\x5a\xc7\xdd\xcf\xb5\x1f\x3a\xbc\xd3\xc1\xfb\xd3\x4d\x52\xdb\xd4\x52\xff\x68\x7b\xdb\x41\x0a\xd4\x1c\x21\xc6\x35\x07\x67\xb0\xda\x3a\x5d\x71\xb1\x0c\xbf\x32\xea\x7f\xd3\xd1\xc7\x9f\xf6\x83\x6e\xc3\xf9\xa9\x84\x89\xff\x07\x86\x33\x58\x37\xc9\xa6\x0b\xab\x63\x0b\x59\xc2\x38\x33\x44\xbf\xb5\x94\x66\x89\xbf\x4b\x75\xc6\x6c\x7b\xe1\x8c\x68\xea\xfc\xe6\xfd\x97\xf9\x19\x00\x00\xff\xff\xe2\x6d\x05\x22\x07\x01\x00\x00"), + }, + "/src/time/zoneinfo_js.go": &vfsgen۰CompressedFileInfo{ + name: "zoneinfo_js.go", + modTime: time.Date(2021, 3, 28, 19, 2, 1, 650000000, time.UTC), + uncompressedSize: 1382, + + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x64\x53\x4b\x6f\xe4\x36\x13\x3c\x0f\x7f\x45\x7f\xfa\x10\x60\xe4\xb1\x25\x3e\x24\x4a\x32\x76\x0e\x8b\x0d\xb0\x31\xb0\x48\x0e\x71\x90\x83\x61\x04\x94\xd4\xd2\xd0\x96\xc8\x81\xc8\xb1\x63\x2f\xfc\xdf\x03\x72\xe4\xdd\x3c\x6e\x54\x57\xf5\xab\xaa\x95\xe7\xbb\xf6\xa4\xa7\x1e\x1e\x1c\x21\x47\xd5\x3d\xaa\x11\xc1\xeb\x19\x09\xd1\xf3\xd1\x2e\x1e\x92\x51\xfb\xc3\xa9\xcd\x3a\x3b\xe7\xa3\x3d\x1e\x70\x79\x70\xdf\x1f\x0f\x2e\x21\x24\xcf\xe1\xf6\x80\xd0\xd9\x1e\xa1\xc5\xc9\x3e\x83\x76\xd0\x2a\x87\x3d\x58\x03\xfe\x80\x70\x3a\x3a\xbf\xa0\x9a\xe1\xd5\x1a\xd4\x66\xb0\x7f\x3c\xb8\x6c\xb4\xe0\x2d\x74\x93\x75\xb8\xc0\xac\x7c\x77\x08\x95\x7e\xc7\xf6\xa3\x73\x38\xb7\xd3\x0b\xb4\x78\x50\x4f\xda\x2e\x19\x21\xc3\xc9\x74\xa0\x8d\xf6\x5f\x6c\xa7\xa6\x6d\x0a\x5f\xc9\x66\x0a\xcf\x2f\xb6\xcb\x8c\x9a\x11\xf6\x90\x44\x2c\x21\x64\xf3\x0a\xd7\xfb\xd8\xeb\xeb\x1b\xd9\xf4\xe1\xe3\xc1\x65\x9f\x27\xdb\xaa\x29\xfb\x8c\x7e\x9b\xfc\xa8\x3c\x26\x69\xf6\x33\x3e\x6f\x53\xb2\xb1\xc3\xe0\xd0\x07\x5a\x9f\x7d\x52\xd3\xb4\x4d\x46\xf4\xb7\x7a\xc6\x50\xe2\x97\x08\x26\x69\x76\x63\xfc\x36\x85\x0b\xb8\x62\x64\xf3\x9a\xad\x39\x7b\x58\x1f\x17\x20\x29\xd9\xe4\x39\x7c\xec\x3a\xbb\xf4\xda\x8c\x61\xbb\x83\xf7\x47\x77\x9d\xe7\xbe\x13\x4d\xb6\x2a\xa9\x6d\x8e\xdd\xac\xb8\xe4\xf9\xff\x1d\x76\x57\x7e\x6d\x84\xce\x2f\xda\x8c\x97\xb1\x4a\x50\xed\x1d\x80\xb8\xdf\xb0\xd8\x19\xb6\x06\x9f\x21\x0c\xbf\x4d\xd3\xcc\xdb\x30\xe3\xaf\x31\x6b\x9b\x06\xd1\x95\x01\x3d\x1f\x27\x9c\xd1\x78\xe5\xb5\x35\x57\x3d\x1e\xd1\xf4\x68\x7c\xac\xba\xa0\x3b\x4d\xfe\x12\x94\xe9\x41\x1b\xf8\x6c\xed\x38\x21\x7c\x3a\x2c\x76\xc6\x4b\xd0\x1e\x46\xfd\x84\x2e\x36\x1f\x4e\xd3\xf4\x02\xf8\xe7\x51\x99\x1e\xfb\xf3\x08\x8b\xf2\x07\x5c\xc0\x1f\x94\xf9\x36\xa4\x6a\xdb\x05\x9f\x74\xec\x96\xc5\xe8\x4f\x68\x3a\xbc\x84\xe7\x70\x11\xc6\xf9\xe5\xd4\xf9\xc8\xfc\xbe\x45\xf8\x3a\xcb\x96\x05\x29\xdf\xed\xfb\xed\xf6\x53\x42\x36\x7a\x78\x97\xf4\x03\xd0\x60\xf3\x3b\x63\xb7\x87\xe4\x2a\x21\x9b\x77\xbb\x2e\xf6\xd1\x8a\x37\xc0\xc9\xe1\xbf\x89\xbb\x84\x6c\xde\xc8\xdf\x22\xda\x5b\xb5\x5d\x33\x73\x90\x34\x25\x9b\x59\x9b\xe0\xf9\x1a\xfc\x21\x1a\xa8\x07\x08\xe1\xff\xed\xff\xdb\xfb\x3a\x81\xdd\xb9\xcc\xac\x4d\x1a\xcb\x7f\xbb\xc0\x68\xd3\x1e\xee\xee\xe3\xd1\xbd\xbe\x91\xb7\xf8\x5b\x04\x76\xf0\x65\xd2\x8f\x08\xce\x2f\x9d\x35\x4f\xd9\x4d\x08\xb6\x27\x0f\xd6\x4c\x2f\xf0\x6c\x97\x47\x07\x83\x5d\xe0\x49\x4d\x27\x74\x60\x07\xd0\xc1\x9c\x45\x99\x11\xe1\x8e\x5e\x36\xcd\x7d\x16\x8a\xdd\x78\x38\x2a\xa3\x3b\x07\x3a\x52\x1c\xd8\x50\x64\x38\x33\xb3\xf5\x17\x09\xf3\x85\x7c\x9f\xc2\xf9\x9e\xc2\x1a\x31\xe1\x03\xb0\xf3\x4e\x0b\xfa\xd3\x62\xa0\xd7\xa3\xf6\xee\x4e\xc3\x35\xe8\x1d\xbb\x8f\x0b\xad\x90\x9b\xd5\x34\xb9\xf3\x65\xdd\xe9\x0b\x1e\x28\x17\x7c\xc7\xef\xc3\x5e\xd1\xd5\x7f\x50\x82\x79\x94\x52\x46\x39\x15\xb4\xa0\x25\x95\xb4\xa2\x35\x6d\x12\xd8\x91\x4d\xc2\x28\x63\x8c\x33\xc1\x0a\x56\x32\xc9\x2a\x56\xb3\x15\xe1\x94\x33\xce\xb9\xe0\x05\x2f\xb9\xe4\x15\xaf\xf9\x8a\x08\x2a\x98\xe0\x42\x88\x42\x94\x42\x8a\x4a\xd4\x62\x45\x0a\x5a\xb0\x82\x17\xa2\x28\x8a\xb2\x90\x45\x55\xd4\xc5\x8a\x94\xb4\x64\x25\x2f\x45\x59\x94\x65\x29\xcb\xaa\xac\xcb\x15\x91\x54\x32\xc9\xa5\x90\x85\x2c\xa5\x94\x95\xac\xe5\x8a\x54\xb4\x62\x15\xaf\x44\x55\x54\x65\x25\xab\xaa\xaa\xab\x15\xa9\x69\xcd\x6a\x5e\x8b\xba\xa8\xcb\x5a\xd6\x55\x5d\xd7\x2b\xd2\xd0\x86\x35\xbc\x11\x4d\xd1\x94\x8d\x6c\xaa\xa6\x6e\x9a\x64\x55\xe5\xac\x69\xd4\x83\x71\x51\x94\xb2\xaa\x9b\x84\xfc\x15\x00\x00\xff\xff\xfa\x0d\x01\xc1\x66\x05\x00\x00"), }, "/src/unicode": &vfsgen۰DirInfo{ name: "unicode", - modTime: time.Date(2018, 8, 25, 22, 2, 53, 558751983, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 12, 109797500, time.UTC), }, "/src/unicode/unicode.go": &vfsgen۰CompressedFileInfo{ name: "unicode.go", - modTime: time.Date(2018, 8, 25, 22, 2, 53, 559085211, time.UTC), + modTime: time.Date(2021, 3, 28, 16, 13, 12, 111784900, time.UTC), uncompressedSize: 658, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\x41\x8f\xd3\x30\x10\x85\xcf\xf6\xaf\x78\xa7\x28\x51\xba\x64\xcb\x71\xd5\x72\x29\x12\x08\xb1\x97\x72\xac\x0a\xf2\x3a\x93\xc6\xe0\xd8\xd6\xc4\x91\x40\xdb\xfe\x77\x64\x27\x0d\xcb\xcd\x9e\x79\xf3\x66\xe6\x9b\xa6\x41\xfd\x32\x19\xdb\xe2\xe7\x28\x65\x50\xfa\x97\xba\x10\x26\x67\xb4\x6f\x49\xca\x6e\x72\x1a\xd1\x97\x3f\xb4\x1a\x09\xc6\xc5\x0d\x18\x3c\x39\xda\x20\x45\x8e\xca\x5d\x08\xa7\xf3\xe1\xfe\xae\x50\x0e\x2a\x04\x6a\x8f\x93\xa3\x45\xd8\xf9\xc9\xb5\xcf\x2a\x04\xe3\x2e\x78\xf1\xde\x56\x78\x95\xc2\x74\x98\x4d\x77\x78\xc4\xf5\x8a\x67\xf5\xfb\x90\xbf\xfb\x25\xfe\x2a\x85\x60\x8a\x13\x3b\x1c\x29\x58\xa5\x69\x20\x17\x0f\xbd\xe2\x0d\x3a\x65\x47\x92\xe2\x26\x85\xf5\x78\xda\xe3\x51\x8a\xde\xa4\x87\x25\x57\xae\x83\x55\x52\x74\x9e\x61\x3d\x76\xe8\x4d\x36\x1c\xb2\xc8\xa3\x46\xd9\x9b\x07\xeb\xab\xe6\xbd\x14\x42\x73\x0a\x17\x6b\xe1\x69\x38\xa3\x69\x10\x88\x3b\xcf\x83\x72\x9a\xa0\xd9\x44\xa3\x95\x45\x72\xfc\xe4\x43\x4f\xfc\xe5\xdb\x13\x2e\x14\xa1\xda\x96\x69\x1c\xd1\x13\x27\x44\x63\x24\xd5\xc2\x77\xd0\x3e\xfc\x49\x2b\xc7\x9e\xb0\x02\x92\x22\x6d\x9e\xc0\x94\x9a\xdf\x7d\xf5\x55\x5a\x98\x51\x14\xe0\xfc\x5a\x12\x9f\x4d\x86\x24\x44\x4b\x36\xaa\x34\xdd\x3d\xf3\x31\x05\x4e\x19\xd1\xb9\x4a\x0a\xd3\x61\x16\x7d\x48\x0c\x33\xf7\x5c\x79\x87\xf7\xb6\x57\x8d\xb2\xe4\x87\x37\x91\xaa\xf8\xbe\xc5\x75\xd6\x64\xcf\x62\x5b\x55\x1b\x44\x9e\xd2\xa4\x09\xf0\x3f\x1f\xd4\x73\xa3\x35\x7d\x5b\x96\xc1\xee\xbf\x26\xb9\x7b\x6f\xb0\xc7\x90\x44\x20\xbb\x5c\x33\x1d\x6b\x8f\x01\x35\xb6\x73\xf5\x4d\xae\xe6\xf7\x9b\xde\xe4\xdf\x00\x00\x00\xff\xff\x20\xe3\x22\xd1\x92\x02\x00\x00"), + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x54\x91\x41\x8f\xd3\x30\x10\x85\xcf\xf6\xaf\x78\xa7\x28\x51\xba\x64\xcb\x71\xd5\x72\x29\x12\x08\xb1\x97\x72\xac\x0a\xf2\x3a\x93\xc6\xe0\xd8\xd6\xc4\x91\x40\xdb\xfe\x77\x64\x27\x0d\xcb\xcd\x9e\x79\xf3\x66\xe6\x9b\xa6\x41\xfd\x32\x19\xdb\xe2\xe7\x28\x65\x50\xfa\x97\xba\x10\x26\x67\xb4\x6f\x49\xca\x6e\x72\x1a\xd1\x97\x3f\xb4\x1a\x09\xc6\xc5\x0d\x18\x3c\x39\xda\x20\x45\x8e\xca\x5d\x08\xa7\xf3\xe1\xfe\xae\x50\x0e\x2a\x04\x6a\x8f\x93\xa3\x45\xd8\xf9\xc9\xb5\xcf\x2a\x04\xe3\x2e\x78\xf1\xde\x56\x78\x95\xc2\x74\x98\x4d\x77\x78\xc4\xf5\x8a\x67\xf5\xfb\x90\xbf\xfb\x25\xfe\x2a\x85\x60\x8a\x13\x3b\x1c\x29\x58\xa5\x69\x20\x17\x0f\xbd\xe2\x0d\x3a\x65\x47\x92\xe2\x26\x85\xf5\x78\xda\xe3\x51\x8a\xde\xa4\x87\x25\x57\xae\x83\x55\x52\x74\x9e\x61\x3d\x76\xe8\x4d\x36\x1c\xb2\xc8\xa3\x46\xd9\x9b\x07\xeb\xab\xe6\xbd\x14\x42\x73\x0a\x17\x6b\xe1\x69\x38\xa3\x69\x10\x88\x3b\xcf\x83\x72\x9a\xa0\xd9\x44\xa3\x95\x45\x72\xfc\xe4\x43\x4f\xfc\xe5\xdb\x13\x2e\x14\xa1\xda\x96\x69\x1c\xd1\x13\x27\x44\x63\x24\xd5\xc2\x77\xd0\x3e\xfc\x49\x2b\xc7\x9e\xb0\x02\x92\x22\x6d\x9e\xc0\x94\x9a\xdf\x7d\xf5\x55\x5a\x98\x51\x14\xe0\xfc\x5a\x12\x9f\x4d\x86\x24\x44\x4b\x36\xaa\x34\xdd\x3d\xf3\x31\x05\x4e\x19\xd1\xb9\x4a\x0a\xd3\x61\x16\x7d\x48\x0c\x33\xf7\x5c\x79\x87\xf7\xb6\x57\x8d\xb2\xe4\x87\x37\x91\xaa\xf8\xbe\xc5\x75\xd6\x64\xcf\x62\x5b\x55\x1b\x44\x9e\xd2\xa4\x09\xf0\x3f\x1f\xd4\x73\xa3\x35\x7d\x5b\x96\xc1\xee\xbf\x26\xb9\x7b\x6f\xb0\xc7\x90\x44\x20\xbb\x5c\x33\x1d\x6b\x8f\x01\x35\xb6\x73\xf5\x4d\xae\xe6\xf7\x9b\xde\xe4\xdf\x00\x00\x00\xff\xff\x20\xe3\x22\xd1\x92\x02\x00\x00"), }, } fs["/"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src"].(os.FileInfo), } fs["/src"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ + fs["/src/bufio"].(os.FileInfo), fs["/src/bytes"].(os.FileInfo), fs["/src/crypto"].(os.FileInfo), fs["/src/database"].(os.FileInfo), @@ -660,6 +800,7 @@ var FS = func() http.FileSystem { fs["/src/encoding"].(os.FileInfo), fs["/src/fmt"].(os.FileInfo), fs["/src/go"].(os.FileInfo), + fs["/src/hash"].(os.FileInfo), fs["/src/internal"].(os.FileInfo), fs["/src/io"].(os.FileInfo), fs["/src/math"].(os.FileInfo), @@ -676,6 +817,9 @@ var FS = func() http.FileSystem { fs["/src/time"].(os.FileInfo), fs["/src/unicode"].(os.FileInfo), } + fs["/src/bufio"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ + fs["/src/bufio/bufio_test.go"].(os.FileInfo), + } fs["/src/bytes"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/bytes/bytes.go"].(os.FileInfo), fs["/src/bytes/bytes_test.go"].(os.FileInfo), @@ -732,13 +876,21 @@ var FS = func() http.FileSystem { fs["/src/go/token"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/go/token/token_test.go"].(os.FileInfo), } + fs["/src/hash"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ + fs["/src/hash/maphash"].(os.FileInfo), + } + fs["/src/hash/maphash"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ + fs["/src/hash/maphash/maphash.go"].(os.FileInfo), + } fs["/src/internal"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/internal/bytealg"].(os.FileInfo), fs["/src/internal/cpu"].(os.FileInfo), fs["/src/internal/fmtsort"].(os.FileInfo), fs["/src/internal/poll"].(os.FileInfo), + fs["/src/internal/reflectlite"].(os.FileInfo), fs["/src/internal/syscall"].(os.FileInfo), fs["/src/internal/testenv"].(os.FileInfo), + fs["/src/internal/unsafeheader"].(os.FileInfo), } fs["/src/internal/bytealg"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/internal/bytealg/bytealg.go"].(os.FileInfo), @@ -752,6 +904,16 @@ var FS = func() http.FileSystem { fs["/src/internal/poll"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/internal/poll/fd_poll.go"].(os.FileInfo), } + fs["/src/internal/reflectlite"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ + fs["/src/internal/reflectlite/all_test.go"].(os.FileInfo), + fs["/src/internal/reflectlite/export_test.go"].(os.FileInfo), + fs["/src/internal/reflectlite/reflect_mirror_test.go"].(os.FileInfo), + fs["/src/internal/reflectlite/reflectlite.go"].(os.FileInfo), + fs["/src/internal/reflectlite/swapper.go"].(os.FileInfo), + fs["/src/internal/reflectlite/type.go"].(os.FileInfo), + fs["/src/internal/reflectlite/utils.go"].(os.FileInfo), + fs["/src/internal/reflectlite/value.go"].(os.FileInfo), + } fs["/src/internal/syscall"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/internal/syscall/unix"].(os.FileInfo), } @@ -761,6 +923,9 @@ var FS = func() http.FileSystem { fs["/src/internal/testenv"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/internal/testenv/testenv.go"].(os.FileInfo), } + fs["/src/internal/unsafeheader"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ + fs["/src/internal/unsafeheader/unsafeheader_test.go"].(os.FileInfo), + } fs["/src/io"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/io/io_test.go"].(os.FileInfo), } @@ -795,6 +960,7 @@ var FS = func() http.FileSystem { } fs["/src/os"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/os/os.go"].(os.FileInfo), + fs["/src/os/removeall_noat.go"].(os.FileInfo), fs["/src/os/signal"].(os.FileInfo), } fs["/src/os/signal"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ @@ -811,6 +977,7 @@ var FS = func() http.FileSystem { } fs["/src/runtime"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/runtime/debug"].(os.FileInfo), + fs["/src/runtime/fastrand.go"].(os.FileInfo), fs["/src/runtime/pprof"].(os.FileInfo), fs["/src/runtime/runtime.go"].(os.FileInfo), } @@ -827,10 +994,11 @@ var FS = func() http.FileSystem { fs["/src/sync"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/sync/atomic"].(os.FileInfo), fs["/src/sync/cond.go"].(os.FileInfo), - fs["/src/sync/export_test.go"].(os.FileInfo), + fs["/src/sync/cond_test.go"].(os.FileInfo), + fs["/src/sync/map_test.go"].(os.FileInfo), fs["/src/sync/pool.go"].(os.FileInfo), + fs["/src/sync/pool_test.go"].(os.FileInfo), fs["/src/sync/sync.go"].(os.FileInfo), - fs["/src/sync/sync_test.go"].(os.FileInfo), fs["/src/sync/waitgroup.go"].(os.FileInfo), } fs["/src/sync/atomic"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ @@ -850,9 +1018,11 @@ var FS = func() http.FileSystem { fs["/src/syscall/js/js.go"].(os.FileInfo), } fs["/src/testing"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ + fs["/src/testing/allocs_test.go"].(os.FileInfo), fs["/src/testing/example.go"].(os.FileInfo), + fs["/src/testing/helper_test.go"].(os.FileInfo), fs["/src/testing/ioutil.go"].(os.FileInfo), - fs["/src/testing/testing.go"].(os.FileInfo), + fs["/src/testing/sub_test.go"].(os.FileInfo), } fs["/src/text"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/text/template"].(os.FileInfo), @@ -863,6 +1033,7 @@ var FS = func() http.FileSystem { fs["/src/time"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/time/time.go"].(os.FileInfo), fs["/src/time/time_test.go"].(os.FileInfo), + fs["/src/time/zoneinfo_js.go"].(os.FileInfo), } fs["/src/unicode"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/src/unicode/unicode.go"].(os.FileInfo), diff --git a/compiler/natives/src/bufio/bufio_test.go b/compiler/natives/src/bufio/bufio_test.go new file mode 100644 index 000000000..136d442a6 --- /dev/null +++ b/compiler/natives/src/bufio/bufio_test.go @@ -0,0 +1,9 @@ +//+build js + +package bufio_test + +import "testing" + +func TestReadStringAllocs(t *testing.T) { + t.Skip("Memory allocation counters are not available in GopherJS.") +} diff --git a/compiler/natives/src/crypto/x509/x509_test.go b/compiler/natives/src/crypto/x509/x509_test.go index 7a99c3882..3519156e3 100644 --- a/compiler/natives/src/crypto/x509/x509_test.go +++ b/compiler/natives/src/crypto/x509/x509_test.go @@ -12,6 +12,10 @@ func TestSystemRoots(t *testing.T) { t.Skip("no system roots") } +func TestLoadSystemCertsLoadColonSeparatedDirs(t *testing.T) { + t.Skip("no system roots") +} + func TestEnvVars(t *testing.T) { t.Skip("no system roots") } diff --git a/compiler/natives/src/hash/maphash/maphash.go b/compiler/natives/src/hash/maphash/maphash.go new file mode 100644 index 000000000..c96b3a1eb --- /dev/null +++ b/compiler/natives/src/hash/maphash/maphash.go @@ -0,0 +1,77 @@ +//+build js + +package maphash + +// used in hash{32,64}.go to seed the hash function +var hashkey [4]uint32 + +func init() { + for i := range hashkey { + hashkey[i] = runtime_fastrand() + } + hashkey[0] |= 1 // make sure these numbers are odd + hashkey[1] |= 1 + hashkey[2] |= 1 + hashkey[3] |= 1 +} + +func rthash(b []byte, seed uint64) uint64 { + if len(b) == 0 { + return seed + } + // The runtime hasher only works on uintptr. Since GopherJS implements a + // 32-bit environment, we use two parallel hashers on the lower and upper 32 + // bits. + lo := memhash(b, uint32(seed), uint32(len(b))) + hi := memhash(b, uint32(seed>>32), uint32(len(b))) + return uint64(hi)<<32 | uint64(lo) +} + +// The implementation below is adapted from the upstream runtime/hash32.go +// and avoids use of unsafe, which GopherJS doesn't support well and leads to +// worse performance. +// +// Note that this hashing function is not actually used by GopherJS maps, since +// we use JS maps instead, but it may be still applicable for use with custom +// map types. +// +// Hashing algorithm inspired by wyhash: +// https://github.com/wangyi-fudan/wyhash/blob/ceb019b530e2c1c14d70b79bfa2bc49de7d95bc1/Modern%20Non-Cryptographic%20Hash%20Function%20and%20Pseudorandom%20Number%20Generator.pdf +func memhash(p []byte, seed uint32, s uint32) uintptr { + a, b := mix32(uint32(seed), uint32(s^hashkey[0])) + if s == 0 { + return uintptr(a ^ b) + } + for ; s > 8; s -= 8 { + a ^= readUnaligned32(p) + b ^= readUnaligned32(add(p, 4)) + a, b = mix32(a, b) + p = add(p, 8) + } + if s >= 4 { + a ^= readUnaligned32(p) + b ^= readUnaligned32(add(p, s-4)) + } else { + t := uint32(p[0]) + t |= uint32(add(p, s>>1)[0]) << 8 + t |= uint32(add(p, s-1)[0]) << 16 + b ^= t + } + a, b = mix32(a, b) + a, b = mix32(a, b) + return uintptr(a ^ b) +} + +func add(p []byte, x uint32) []byte { + return p[x:] +} + +// Note: These routines perform the read in little endian. +func readUnaligned32(p []byte) uint32 { + return uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 | uint32(p[3])<<24 +} + +func mix32(a, b uint32) (uint32, uint32) { + c := uint64(a^uint32(hashkey[1])) * uint64(b^uint32(hashkey[2])) + return uint32(c), uint32(c >> 32) +} diff --git a/compiler/natives/src/internal/cpu/cpu.go b/compiler/natives/src/internal/cpu/cpu.go index 7777d3ae2..99c85cbbd 100644 --- a/compiler/natives/src/internal/cpu/cpu.go +++ b/compiler/natives/src/internal/cpu/cpu.go @@ -6,3 +6,5 @@ const ( CacheLineSize = 0 CacheLinePadSize = 0 ) + +func doinit() {} diff --git a/compiler/natives/src/internal/fmtsort/fmtsort_test.go b/compiler/natives/src/internal/fmtsort/fmtsort_test.go index a3ceb7608..2e9686421 100644 --- a/compiler/natives/src/internal/fmtsort/fmtsort_test.go +++ b/compiler/natives/src/internal/fmtsort/fmtsort_test.go @@ -13,7 +13,7 @@ import ( // needsSkip reports whether the kind doesn't work for sorting on GopherJS. func needsSkip(k reflect.Kind) bool { switch k { - case reflect.Ptr, reflect.Chan: + case reflect.Ptr, reflect.Chan, reflect.UnsafePointer: return true } return false diff --git a/compiler/natives/src/internal/poll/fd_poll.go b/compiler/natives/src/internal/poll/fd_poll.go index 5690f9fe8..afaf76413 100644 --- a/compiler/natives/src/internal/poll/fd_poll.go +++ b/compiler/natives/src/internal/poll/fd_poll.go @@ -33,7 +33,7 @@ func (pd *pollDesc) wait(mode int, isFile bool) error { if pd.closing { return errClosing(isFile) } - return ErrTimeout + return ErrDeadlineExceeded } func (pd *pollDesc) waitRead(isFile bool) error { return pd.wait('r', isFile) } diff --git a/compiler/natives/src/internal/reflectlite/all_test.go b/compiler/natives/src/internal/reflectlite/all_test.go new file mode 100644 index 000000000..bfaf360df --- /dev/null +++ b/compiler/natives/src/internal/reflectlite/all_test.go @@ -0,0 +1,21 @@ +// +build js + +package reflectlite_test + +import ( + . "internal/reflectlite" + "testing" +) + +func TestTypes(t *testing.T) { + for i, tt := range typeTests { + if i == 30 { + continue + } + testReflectType(t, i, Field(ValueOf(tt.i), 0).Type(), tt.s) + } +} + +func TestNameBytesAreAligned(t *testing.T) { + t.Skip("TestNameBytesAreAligned") +} diff --git a/compiler/natives/src/internal/reflectlite/export_test.go b/compiler/natives/src/internal/reflectlite/export_test.go new file mode 100644 index 000000000..519b936f8 --- /dev/null +++ b/compiler/natives/src/internal/reflectlite/export_test.go @@ -0,0 +1,34 @@ +// +build js + +package reflectlite + +import ( + "unsafe" +) + +// Field returns the i'th field of the struct v. +// It panics if v's Kind is not Struct or i is out of range. +func Field(v Value, i int) Value { + if v.kind() != Struct { + panic(&ValueError{"reflect.Value.Field", v.kind()}) + } + return v.Field(i) +} + +func TField(typ Type, i int) Type { + t := typ.(*rtype) + if t.Kind() != Struct { + panic("reflect: Field of non-struct type") + } + tt := (*structType)(unsafe.Pointer(t)) + return StructFieldType(tt, i) +} + +// Field returns the i'th struct field. +func StructFieldType(t *structType, i int) Type { + if i < 0 || i >= len(t.fields) { + panic("reflect: Field index out of bounds") + } + p := &t.fields[i] + return toType(p.typ) +} diff --git a/compiler/natives/src/internal/reflectlite/reflect_mirror_test.go b/compiler/natives/src/internal/reflectlite/reflect_mirror_test.go new file mode 100644 index 000000000..0f97bb9d0 --- /dev/null +++ b/compiler/natives/src/internal/reflectlite/reflect_mirror_test.go @@ -0,0 +1,11 @@ +// +build js + +package reflectlite_test + +import ( + "testing" +) + +func TestMirrorWithReflect(t *testing.T) { + t.Skip("TestMirrorWithReflect") +} diff --git a/compiler/natives/src/internal/reflectlite/reflectlite.go b/compiler/natives/src/internal/reflectlite/reflectlite.go new file mode 100644 index 000000000..a38cd4afb --- /dev/null +++ b/compiler/natives/src/internal/reflectlite/reflectlite.go @@ -0,0 +1,962 @@ +// +build js + +package reflectlite + +import ( + "unsafe" + + "github.com/gopherjs/gopherjs/js" +) + +var initialized = false + +func init() { + // avoid dead code elimination + used := func(i interface{}) {} + used(rtype{}) + used(uncommonType{}) + used(method{}) + used(arrayType{}) + used(chanType{}) + used(funcType{}) + used(interfaceType{}) + used(mapType{}) + used(ptrType{}) + used(sliceType{}) + used(structType{}) + used(imethod{}) + used(structField{}) + + initialized = true + uint8Type = TypeOf(uint8(0)).(*rtype) // set for real +} + +var ( + uint8Type *rtype +) + +var ( + idJsType = "_jsType" + idReflectType = "_reflectType" + idKindType = "kindType" + idRtype = "_rtype" +) + +func jsType(typ Type) *js.Object { + return js.InternalObject(typ).Get(idJsType) +} + +func reflectType(typ *js.Object) *rtype { + if typ.Get(idReflectType) == js.Undefined { + rt := &rtype{ + size: uintptr(typ.Get("size").Int()), + kind: uint8(typ.Get("kind").Int()), + str: newNameOff(newName(internalStr(typ.Get("string")), "", typ.Get("exported").Bool())), + } + js.InternalObject(rt).Set(idJsType, typ) + typ.Set(idReflectType, js.InternalObject(rt)) + + methodSet := js.Global.Call("$methodSet", typ) + if methodSet.Length() != 0 || typ.Get("named").Bool() { + rt.tflag |= tflagUncommon + if typ.Get("named").Bool() { + rt.tflag |= tflagNamed + } + var reflectMethods []method + for i := 0; i < methodSet.Length(); i++ { // Exported methods first. + m := methodSet.Index(i) + exported := internalStr(m.Get("pkg")) == "" + if !exported { + continue + } + reflectMethods = append(reflectMethods, method{ + name: newNameOff(newName(internalStr(m.Get("name")), "", exported)), + mtyp: newTypeOff(reflectType(m.Get("typ"))), + }) + } + xcount := uint16(len(reflectMethods)) + for i := 0; i < methodSet.Length(); i++ { // Unexported methods second. + m := methodSet.Index(i) + exported := internalStr(m.Get("pkg")) == "" + if exported { + continue + } + reflectMethods = append(reflectMethods, method{ + name: newNameOff(newName(internalStr(m.Get("name")), "", exported)), + mtyp: newTypeOff(reflectType(m.Get("typ"))), + }) + } + ut := &uncommonType{ + pkgPath: newNameOff(newName(internalStr(typ.Get("pkg")), "", false)), + mcount: uint16(methodSet.Length()), + xcount: xcount, + _methods: reflectMethods, + } + uncommonTypeMap[rt] = ut + js.InternalObject(ut).Set(idJsType, typ) + } + + switch rt.Kind() { + case Array: + setKindType(rt, &arrayType{ + elem: reflectType(typ.Get("elem")), + len: uintptr(typ.Get("len").Int()), + }) + case Chan: + dir := BothDir + if typ.Get("sendOnly").Bool() { + dir = SendDir + } + if typ.Get("recvOnly").Bool() { + dir = RecvDir + } + setKindType(rt, &chanType{ + elem: reflectType(typ.Get("elem")), + dir: uintptr(dir), + }) + case Func: + params := typ.Get("params") + in := make([]*rtype, params.Length()) + for i := range in { + in[i] = reflectType(params.Index(i)) + } + results := typ.Get("results") + out := make([]*rtype, results.Length()) + for i := range out { + out[i] = reflectType(results.Index(i)) + } + outCount := uint16(results.Length()) + if typ.Get("variadic").Bool() { + outCount |= 1 << 15 + } + setKindType(rt, &funcType{ + rtype: *rt, + inCount: uint16(params.Length()), + outCount: outCount, + _in: in, + _out: out, + }) + case Interface: + methods := typ.Get("methods") + imethods := make([]imethod, methods.Length()) + for i := range imethods { + m := methods.Index(i) + imethods[i] = imethod{ + name: newNameOff(newName(internalStr(m.Get("name")), "", internalStr(m.Get("pkg")) == "")), + typ: newTypeOff(reflectType(m.Get("typ"))), + } + } + setKindType(rt, &interfaceType{ + rtype: *rt, + pkgPath: newName(internalStr(typ.Get("pkg")), "", false), + methods: imethods, + }) + case Map: + setKindType(rt, &mapType{ + key: reflectType(typ.Get("key")), + elem: reflectType(typ.Get("elem")), + }) + case Ptr: + setKindType(rt, &ptrType{ + elem: reflectType(typ.Get("elem")), + }) + case Slice: + setKindType(rt, &sliceType{ + elem: reflectType(typ.Get("elem")), + }) + case Struct: + fields := typ.Get("fields") + reflectFields := make([]structField, fields.Length()) + for i := range reflectFields { + f := fields.Index(i) + offsetEmbed := uintptr(i) << 1 + if f.Get("embedded").Bool() { + offsetEmbed |= 1 + } + reflectFields[i] = structField{ + name: newName(internalStr(f.Get("name")), internalStr(f.Get("tag")), f.Get("exported").Bool()), + typ: reflectType(f.Get("typ")), + offsetEmbed: offsetEmbed, + } + } + setKindType(rt, &structType{ + rtype: *rt, + pkgPath: newName(internalStr(typ.Get("pkgPath")), "", false), + fields: reflectFields, + }) + } + } + + return (*rtype)(unsafe.Pointer(typ.Get(idReflectType).Unsafe())) +} + +func setKindType(rt *rtype, kindType interface{}) { + js.InternalObject(rt).Set(idKindType, js.InternalObject(kindType)) + js.InternalObject(kindType).Set(idRtype, js.InternalObject(rt)) +} + +type uncommonType struct { + pkgPath nameOff + mcount uint16 + xcount uint16 + moff uint32 + + _methods []method +} + +func (t *uncommonType) methods() []method { + return t._methods +} + +func (t *uncommonType) exportedMethods() []method { + return t._methods[:t.xcount:t.xcount] +} + +var uncommonTypeMap = make(map[*rtype]*uncommonType) + +func (t *rtype) uncommon() *uncommonType { + return uncommonTypeMap[t] +} + +type funcType struct { + rtype `reflect:"func"` + inCount uint16 + outCount uint16 + + _in []*rtype + _out []*rtype +} + +func (t *funcType) in() []*rtype { + return t._in +} + +func (t *funcType) out() []*rtype { + return t._out +} + +type name struct { + bytes *byte +} + +type nameData struct { + name string + tag string + exported bool +} + +var nameMap = make(map[*byte]*nameData) + +func (n name) name() (s string) { return nameMap[n.bytes].name } +func (n name) tag() (s string) { return nameMap[n.bytes].tag } +func (n name) pkgPath() string { return "" } +func (n name) isExported() bool { return nameMap[n.bytes].exported } + +func newName(n, tag string, exported bool) name { + b := new(byte) + nameMap[b] = &nameData{ + name: n, + tag: tag, + exported: exported, + } + return name{ + bytes: b, + } +} + +var nameOffList []name + +func (t *rtype) nameOff(off nameOff) name { + return nameOffList[int(off)] +} + +func newNameOff(n name) nameOff { + i := len(nameOffList) + nameOffList = append(nameOffList, n) + return nameOff(i) +} + +var typeOffList []*rtype + +func (t *rtype) typeOff(off typeOff) *rtype { + return typeOffList[int(off)] +} + +func newTypeOff(t *rtype) typeOff { + i := len(typeOffList) + typeOffList = append(typeOffList, t) + return typeOff(i) +} + +func internalStr(strObj *js.Object) string { + var c struct{ str string } + js.InternalObject(c).Set("str", strObj) // get string without internalizing + return c.str +} + +func isWrapped(typ Type) bool { + return jsType(typ).Get("wrapped").Bool() +} + +func copyStruct(dst, src *js.Object, typ Type) { + fields := jsType(typ).Get("fields") + for i := 0; i < fields.Length(); i++ { + prop := fields.Index(i).Get("prop").String() + dst.Set(prop, src.Get(prop)) + } +} + +func makeValue(t Type, v *js.Object, fl flag) Value { + rt := t.common() + if t.Kind() == Array || t.Kind() == Struct || t.Kind() == Ptr { + return Value{rt, unsafe.Pointer(v.Unsafe()), fl | flag(t.Kind())} + } + return Value{rt, unsafe.Pointer(js.Global.Call("$newDataPointer", v, jsType(rt.ptrTo())).Unsafe()), fl | flag(t.Kind()) | flagIndir} +} + +func MakeSlice(typ Type, len, cap int) Value { + if typ.Kind() != Slice { + panic("reflect.MakeSlice of non-slice type") + } + if len < 0 { + panic("reflect.MakeSlice: negative len") + } + if cap < 0 { + panic("reflect.MakeSlice: negative cap") + } + if len > cap { + panic("reflect.MakeSlice: len > cap") + } + + return makeValue(typ, js.Global.Call("$makeSlice", jsType(typ), len, cap, js.InternalObject(func() *js.Object { return jsType(typ.Elem()).Call("zero") })), 0) +} + +func TypeOf(i interface{}) Type { + if !initialized { // avoid error of uint8Type + return &rtype{} + } + if i == nil { + return nil + } + return reflectType(js.InternalObject(i).Get("constructor")) +} + +func ValueOf(i interface{}) Value { + if i == nil { + return Value{} + } + return makeValue(reflectType(js.InternalObject(i).Get("constructor")), js.InternalObject(i).Get("$val"), 0) +} + +func ArrayOf(count int, elem Type) Type { + return reflectType(js.Global.Call("$arrayType", jsType(elem), count)) +} + +func ChanOf(dir ChanDir, t Type) Type { + return reflectType(js.Global.Call("$chanType", jsType(t), dir == SendDir, dir == RecvDir)) +} + +func FuncOf(in, out []Type, variadic bool) Type { + if variadic && (len(in) == 0 || in[len(in)-1].Kind() != Slice) { + panic("reflect.FuncOf: last arg of variadic func must be slice") + } + + jsIn := make([]*js.Object, len(in)) + for i, v := range in { + jsIn[i] = jsType(v) + } + jsOut := make([]*js.Object, len(out)) + for i, v := range out { + jsOut[i] = jsType(v) + } + return reflectType(js.Global.Call("$funcType", jsIn, jsOut, variadic)) +} + +func MapOf(key, elem Type) Type { + switch key.Kind() { + case Func, Map, Slice: + panic("reflect.MapOf: invalid key type " + key.String()) + } + + return reflectType(js.Global.Call("$mapType", jsType(key), jsType(elem))) +} + +func (t *rtype) ptrTo() *rtype { + return reflectType(js.Global.Call("$ptrType", jsType(t))) +} + +func SliceOf(t Type) Type { + return reflectType(js.Global.Call("$sliceType", jsType(t))) +} + +func Zero(typ Type) Value { + return makeValue(typ, jsType(typ).Call("zero"), 0) +} + +func unsafe_New(typ *rtype) unsafe.Pointer { + switch typ.Kind() { + case Struct: + return unsafe.Pointer(jsType(typ).Get("ptr").New().Unsafe()) + case Array: + return unsafe.Pointer(jsType(typ).Call("zero").Unsafe()) + default: + return unsafe.Pointer(js.Global.Call("$newDataPointer", jsType(typ).Call("zero"), jsType(typ.ptrTo())).Unsafe()) + } +} + +func makeInt(f flag, bits uint64, t Type) Value { + typ := t.common() + ptr := unsafe_New(typ) + switch typ.Kind() { + case Int8: + *(*int8)(ptr) = int8(bits) + case Int16: + *(*int16)(ptr) = int16(bits) + case Int, Int32: + *(*int32)(ptr) = int32(bits) + case Int64: + *(*int64)(ptr) = int64(bits) + case Uint8: + *(*uint8)(ptr) = uint8(bits) + case Uint16: + *(*uint16)(ptr) = uint16(bits) + case Uint, Uint32, Uintptr: + *(*uint32)(ptr) = uint32(bits) + case Uint64: + *(*uint64)(ptr) = uint64(bits) + } + return Value{typ, ptr, f | flagIndir | flag(typ.Kind())} +} + +func MakeFunc(typ Type, fn func(args []Value) (results []Value)) Value { + if typ.Kind() != Func { + panic("reflect: call of MakeFunc with non-Func type") + } + + t := typ.common() + ftyp := (*funcType)(unsafe.Pointer(t)) + + fv := js.MakeFunc(func(this *js.Object, arguments []*js.Object) interface{} { + args := make([]Value, ftyp.NumIn()) + for i := range args { + argType := ftyp.In(i).common() + args[i] = makeValue(argType, arguments[i], 0) + } + resultsSlice := fn(args) + switch ftyp.NumOut() { + case 0: + return nil + case 1: + return resultsSlice[0].object() + default: + results := js.Global.Get("Array").New(ftyp.NumOut()) + for i, r := range resultsSlice { + results.SetIndex(i, r.object()) + } + return results + } + }) + + return Value{t, unsafe.Pointer(fv.Unsafe()), flag(Func)} +} + +func typedmemmove(t *rtype, dst, src unsafe.Pointer) { + js.InternalObject(dst).Call("$set", js.InternalObject(src).Call("$get")) +} + +func loadScalar(p unsafe.Pointer, n uintptr) uintptr { + return js.InternalObject(p).Call("$get").Unsafe() +} + +func makechan(typ *rtype, size int) (ch unsafe.Pointer) { + ctyp := (*chanType)(unsafe.Pointer(typ)) + return unsafe.Pointer(js.Global.Get("$Chan").New(jsType(ctyp.elem), size).Unsafe()) +} + +func makemap(t *rtype, cap int) (m unsafe.Pointer) { + return unsafe.Pointer(js.Global.Get("Object").New().Unsafe()) +} + +func keyFor(t *rtype, key unsafe.Pointer) (*js.Object, string) { + kv := js.InternalObject(key) + if kv.Get("$get") != js.Undefined { + kv = kv.Call("$get") + } + k := jsType(t.Key()).Call("keyFor", kv).String() + return kv, k +} + +func mapaccess(t *rtype, m, key unsafe.Pointer) unsafe.Pointer { + _, k := keyFor(t, key) + entry := js.InternalObject(m).Get(k) + if entry == js.Undefined { + return nil + } + return unsafe.Pointer(js.Global.Call("$newDataPointer", entry.Get("v"), jsType(PtrTo(t.Elem()))).Unsafe()) +} + +func mapassign(t *rtype, m, key, val unsafe.Pointer) { + kv, k := keyFor(t, key) + jsVal := js.InternalObject(val).Call("$get") + et := t.Elem() + if et.Kind() == Struct { + newVal := jsType(et).Call("zero") + copyStruct(newVal, jsVal, et) + jsVal = newVal + } + entry := js.Global.Get("Object").New() + entry.Set("k", kv) + entry.Set("v", jsVal) + js.InternalObject(m).Set(k, entry) +} + +func mapdelete(t *rtype, m unsafe.Pointer, key unsafe.Pointer) { + _, k := keyFor(t, key) + js.InternalObject(m).Delete(k) +} + +type mapIter struct { + t Type + m *js.Object + keys *js.Object + i int + + // last is the last object the iterator indicates. If this object exists, the functions that return the + // current key or value returns this object, regardless of the current iterator. It is because the current + // iterator might be stale due to key deletion in a loop. + last *js.Object +} + +func (iter *mapIter) skipUntilValidKey() { + for iter.i < iter.keys.Length() { + k := iter.keys.Index(iter.i) + if iter.m.Get(k.String()) != js.Undefined { + break + } + // The key is already deleted. Move on the next item. + iter.i++ + } +} + +func mapiterinit(t *rtype, m unsafe.Pointer) unsafe.Pointer { + return unsafe.Pointer(&mapIter{t, js.InternalObject(m), js.Global.Call("$keys", js.InternalObject(m)), 0, nil}) +} + +type TypeEx interface { + Type + Key() Type +} + +func mapiterkey(it unsafe.Pointer) unsafe.Pointer { + iter := (*mapIter)(it) + var kv *js.Object + if iter.last != nil { + kv = iter.last + } else { + iter.skipUntilValidKey() + if iter.i == iter.keys.Length() { + return nil + } + k := iter.keys.Index(iter.i) + kv = iter.m.Get(k.String()) + + // Record the key-value pair for later accesses. + iter.last = kv + } + return unsafe.Pointer(js.Global.Call("$newDataPointer", kv.Get("k"), jsType(PtrTo(iter.t.(TypeEx).Key()))).Unsafe()) +} + +func mapiternext(it unsafe.Pointer) { + iter := (*mapIter)(it) + iter.last = nil + iter.i++ +} + +func maplen(m unsafe.Pointer) int { + return js.Global.Call("$keys", js.InternalObject(m)).Length() +} + +func cvtDirect(v Value, typ Type) Value { + var srcVal = v.object() + if srcVal == jsType(v.typ).Get("nil") { + return makeValue(typ, jsType(typ).Get("nil"), v.flag) + } + + var val *js.Object + switch k := typ.Kind(); k { + case Slice: + slice := jsType(typ).New(srcVal.Get("$array")) + slice.Set("$offset", srcVal.Get("$offset")) + slice.Set("$length", srcVal.Get("$length")) + slice.Set("$capacity", srcVal.Get("$capacity")) + val = js.Global.Call("$newDataPointer", slice, jsType(PtrTo(typ))) + case Ptr: + if typ.Elem().Kind() == Struct { + if typ.Elem() == v.typ.Elem() { + val = srcVal + break + } + val = jsType(typ).New() + copyStruct(val, srcVal, typ.Elem()) + break + } + val = jsType(typ).New(srcVal.Get("$get"), srcVal.Get("$set")) + case Struct: + val = jsType(typ).Get("ptr").New() + copyStruct(val, srcVal, typ) + case Array, Bool, Chan, Func, Interface, Map, String: + val = js.InternalObject(v.ptr) + default: + panic(&ValueError{"reflect.Convert", k}) + } + return Value{typ.common(), unsafe.Pointer(val.Unsafe()), v.flag.ro() | v.flag&flagIndir | flag(typ.Kind())} +} + +func Copy(dst, src Value) int { + dk := dst.kind() + if dk != Array && dk != Slice { + panic(&ValueError{"reflect.Copy", dk}) + } + if dk == Array { + dst.mustBeAssignable() + } + dst.mustBeExported() + + sk := src.kind() + var stringCopy bool + if sk != Array && sk != Slice { + stringCopy = sk == String && dst.typ.Elem().Kind() == Uint8 + if !stringCopy { + panic(&ValueError{"reflect.Copy", sk}) + } + } + src.mustBeExported() + + if !stringCopy { + typesMustMatch("reflect.Copy", dst.typ.Elem(), src.typ.Elem()) + } + + dstVal := dst.object() + if dk == Array { + dstVal = jsType(SliceOf(dst.typ.Elem())).New(dstVal) + } + + srcVal := src.object() + if sk == Array { + srcVal = jsType(SliceOf(src.typ.Elem())).New(srcVal) + } + + if stringCopy { + return js.Global.Call("$copyString", dstVal, srcVal).Int() + } + return js.Global.Call("$copySlice", dstVal, srcVal).Int() +} + +func methodReceiver(op string, v Value, i int) (_ *rtype, t *funcType, fn unsafe.Pointer) { + var prop string + if v.typ.Kind() == Interface { + tt := (*interfaceType)(unsafe.Pointer(v.typ)) + if i < 0 || i >= len(tt.methods) { + panic("reflect: internal error: invalid method index") + } + m := &tt.methods[i] + if !tt.nameOff(m.name).isExported() { + panic("reflect: " + op + " of unexported method") + } + t = (*funcType)(unsafe.Pointer(tt.typeOff(m.typ))) + prop = tt.nameOff(m.name).name() + } else { + ms := v.typ.exportedMethods() + if uint(i) >= uint(len(ms)) { + panic("reflect: internal error: invalid method index") + } + m := ms[i] + if !v.typ.nameOff(m.name).isExported() { + panic("reflect: " + op + " of unexported method") + } + t = (*funcType)(unsafe.Pointer(v.typ.typeOff(m.mtyp))) + prop = js.Global.Call("$methodSet", jsType(v.typ)).Index(i).Get("prop").String() + } + rcvr := v.object() + if isWrapped(v.typ) { + rcvr = jsType(v.typ).New(rcvr) + } + fn = unsafe.Pointer(rcvr.Get(prop).Unsafe()) + return +} + +func valueInterface(v Value) interface{} { + if v.flag == 0 { + panic(&ValueError{"reflect.Value.Interface", 0}) + } + + if v.flag&flagMethod != 0 { + v = makeMethodValue("Interface", v) + } + + if isWrapped(v.typ) { + return interface{}(unsafe.Pointer(jsType(v.typ).New(v.object()).Unsafe())) + } + return interface{}(unsafe.Pointer(v.object().Unsafe())) +} + +func ifaceE2I(t *rtype, src interface{}, dst unsafe.Pointer) { + js.InternalObject(dst).Call("$set", js.InternalObject(src)) +} + +func methodName() string { + return "?FIXME?" +} + +func makeMethodValue(op string, v Value) Value { + if v.flag&flagMethod == 0 { + panic("reflect: internal error: invalid use of makePartialFunc") + } + + _, _, fn := methodReceiver(op, v, int(v.flag)>>flagMethodShift) + rcvr := v.object() + if isWrapped(v.typ) { + rcvr = jsType(v.typ).New(rcvr) + } + fv := js.MakeFunc(func(this *js.Object, arguments []*js.Object) interface{} { + return js.InternalObject(fn).Call("apply", rcvr, arguments) + }) + return Value{v.Type().common(), unsafe.Pointer(fv.Unsafe()), v.flag.ro() | flag(Func)} +} + +var jsObjectPtr = reflectType(js.Global.Get("$jsObjectPtr")) + +func wrapJsObject(typ Type, val *js.Object) *js.Object { + if typ == jsObjectPtr { + return jsType(jsObjectPtr).New(val) + } + return val +} + +func unwrapJsObject(typ Type, val *js.Object) *js.Object { + if typ == jsObjectPtr { + return val.Get("object") + } + return val +} + +func getJsTag(tag string) string { + for tag != "" { + // skip leading space + i := 0 + for i < len(tag) && tag[i] == ' ' { + i++ + } + tag = tag[i:] + if tag == "" { + break + } + + // scan to colon. + // a space or a quote is a syntax error + i = 0 + for i < len(tag) && tag[i] != ' ' && tag[i] != ':' && tag[i] != '"' { + i++ + } + if i+1 >= len(tag) || tag[i] != ':' || tag[i+1] != '"' { + break + } + name := string(tag[:i]) + tag = tag[i+1:] + + // scan quoted string to find value + i = 1 + for i < len(tag) && tag[i] != '"' { + if tag[i] == '\\' { + i++ + } + i++ + } + if i >= len(tag) { + break + } + qvalue := string(tag[:i+1]) + tag = tag[i+1:] + + if name == "js" { + value, _ := unquote(qvalue) + return value + } + } + return "" +} + +// PtrTo returns the pointer type with element t. +// For example, if t represents type Foo, PtrTo(t) represents *Foo. +func PtrTo(t Type) Type { + return t.(*rtype).ptrTo() +} + +// copyVal returns a Value containing the map key or value at ptr, +// allocating a new variable as needed. +func copyVal(typ *rtype, fl flag, ptr unsafe.Pointer) Value { + if ifaceIndir(typ) { + // Copy result so future changes to the map + // won't change the underlying value. + c := unsafe_New(typ) + typedmemmove(typ, c, ptr) + return Value{typ, c, fl | flagIndir} + } + return Value{typ, *(*unsafe.Pointer)(ptr), fl} +} + +var selectHelper = js.Global.Get("$select").Interface().(func(...interface{}) *js.Object) + +func chanrecv(ch unsafe.Pointer, nb bool, val unsafe.Pointer) (selected, received bool) { + comms := [][]*js.Object{{js.InternalObject(ch)}} + if nb { + comms = append(comms, []*js.Object{}) + } + selectRes := selectHelper(comms) + if nb && selectRes.Index(0).Int() == 1 { + return false, false + } + recvRes := selectRes.Index(1) + js.InternalObject(val).Call("$set", recvRes.Index(0)) + return true, recvRes.Index(1).Bool() +} + +func chansend(ch unsafe.Pointer, val unsafe.Pointer, nb bool) bool { + comms := [][]*js.Object{{js.InternalObject(ch), js.InternalObject(val).Call("$get")}} + if nb { + comms = append(comms, []*js.Object{}) + } + selectRes := selectHelper(comms) + if nb && selectRes.Index(0).Int() == 1 { + return false + } + return true +} + +func rselect(rselects []runtimeSelect) (chosen int, recvOK bool) { + comms := make([][]*js.Object, len(rselects)) + for i, s := range rselects { + switch SelectDir(s.dir) { + case SelectDefault: + comms[i] = []*js.Object{} + case SelectRecv: + ch := js.Global.Get("$chanNil") + if js.InternalObject(s.ch) != js.InternalObject(0) { + ch = js.InternalObject(s.ch) + } + comms[i] = []*js.Object{ch} + case SelectSend: + ch := js.Global.Get("$chanNil") + var val *js.Object + if js.InternalObject(s.ch) != js.InternalObject(0) { + ch = js.InternalObject(s.ch) + val = js.InternalObject(s.val).Call("$get") + } + comms[i] = []*js.Object{ch, val} + } + } + selectRes := selectHelper(comms) + c := selectRes.Index(0).Int() + if SelectDir(rselects[c].dir) == SelectRecv { + recvRes := selectRes.Index(1) + js.InternalObject(rselects[c].val).Call("$set", recvRes.Index(0)) + return c, recvRes.Index(1).Bool() + } + return c, false +} + +func DeepEqual(a1, a2 interface{}) bool { + i1 := js.InternalObject(a1) + i2 := js.InternalObject(a2) + if i1 == i2 { + return true + } + if i1 == nil || i2 == nil || i1.Get("constructor") != i2.Get("constructor") { + return false + } + return deepValueEqualJs(ValueOf(a1), ValueOf(a2), nil) +} + +func deepValueEqualJs(v1, v2 Value, visited [][2]unsafe.Pointer) bool { + if !v1.IsValid() || !v2.IsValid() { + return !v1.IsValid() && !v2.IsValid() + } + if v1.Type() != v2.Type() { + return false + } + if v1.Type() == jsObjectPtr { + return unwrapJsObject(jsObjectPtr, v1.object()) == unwrapJsObject(jsObjectPtr, v2.object()) + } + + switch v1.Kind() { + case Array, Map, Slice, Struct: + for _, entry := range visited { + if v1.ptr == entry[0] && v2.ptr == entry[1] { + return true + } + } + visited = append(visited, [2]unsafe.Pointer{v1.ptr, v2.ptr}) + } + + switch v1.Kind() { + case Array, Slice: + if v1.Kind() == Slice { + if v1.IsNil() != v2.IsNil() { + return false + } + if v1.object() == v2.object() { + return true + } + } + var n = v1.Len() + if n != v2.Len() { + return false + } + for i := 0; i < n; i++ { + if !deepValueEqualJs(v1.Index(i), v2.Index(i), visited) { + return false + } + } + return true + case Interface: + if v1.IsNil() || v2.IsNil() { + return v1.IsNil() && v2.IsNil() + } + return deepValueEqualJs(v1.Elem(), v2.Elem(), visited) + case Ptr: + return deepValueEqualJs(v1.Elem(), v2.Elem(), visited) + case Struct: + var n = v1.NumField() + for i := 0; i < n; i++ { + if !deepValueEqualJs(v1.Field(i), v2.Field(i), visited) { + return false + } + } + return true + case Map: + if v1.IsNil() != v2.IsNil() { + return false + } + if v1.object() == v2.object() { + return true + } + var keys = v1.MapKeys() + if len(keys) != v2.Len() { + return false + } + for _, k := range keys { + val1 := v1.MapIndex(k) + val2 := v2.MapIndex(k) + if !val1.IsValid() || !val2.IsValid() || !deepValueEqualJs(val1, val2, visited) { + return false + } + } + return true + case Func: + return v1.IsNil() && v2.IsNil() + case UnsafePointer: + return v1.object() == v2.object() + } + + return js.Global.Call("$interfaceIsEqual", js.InternalObject(valueInterface(v1)), js.InternalObject(valueInterface(v2))).Bool() +} diff --git a/compiler/natives/src/internal/reflectlite/swapper.go b/compiler/natives/src/internal/reflectlite/swapper.go new file mode 100644 index 000000000..7e61d254a --- /dev/null +++ b/compiler/natives/src/internal/reflectlite/swapper.go @@ -0,0 +1,36 @@ +// +build js + +package reflectlite + +import "github.com/gopherjs/gopherjs/js" + +func Swapper(slice interface{}) func(i, j int) { + v := ValueOf(slice) + if v.Kind() != Slice { + panic(&ValueError{Method: "Swapper", Kind: v.Kind()}) + } + // Fast path for slices of size 0 and 1. Nothing to swap. + vLen := uint(v.Len()) + switch vLen { + case 0: + return func(i, j int) { panic("reflect: slice index out of range") } + case 1: + return func(i, j int) { + if i != 0 || j != 0 { + panic("reflect: slice index out of range") + } + } + } + a := js.InternalObject(slice).Get("$array") + off := js.InternalObject(slice).Get("$offset").Int() + return func(i, j int) { + if uint(i) >= vLen || uint(j) >= vLen { + panic("reflect: slice index out of range") + } + i += off + j += off + tmp := a.Index(i) + a.SetIndex(i, a.Index(j)) + a.SetIndex(j, tmp) + } +} diff --git a/compiler/natives/src/internal/reflectlite/type.go b/compiler/natives/src/internal/reflectlite/type.go new file mode 100644 index 000000000..4a0e209b3 --- /dev/null +++ b/compiler/natives/src/internal/reflectlite/type.go @@ -0,0 +1,102 @@ +// +build js + +package reflectlite + +import ( + "unsafe" + + "github.com/gopherjs/gopherjs/js" +) + +func (t *rtype) Comparable() bool { + switch t.Kind() { + case Func, Slice, Map: + return false + case Array: + return t.Elem().Comparable() + case Struct: + for i := 0; i < t.NumField(); i++ { + ft := t.Field(i) + if !ft.typ.Comparable() { + return false + } + } + } + return true +} + +func (t *rtype) IsVariadic() bool { + if t.Kind() != Func { + panic("reflect: IsVariadic of non-func type") + } + tt := (*funcType)(unsafe.Pointer(t)) + return tt.outCount&(1<<15) != 0 +} + +func (t *rtype) kindType() *rtype { + return (*rtype)(unsafe.Pointer(js.InternalObject(t).Get(idKindType))) +} + +func (t *rtype) Field(i int) structField { + if t.Kind() != Struct { + panic("reflect: Field of non-struct type") + } + tt := (*structType)(unsafe.Pointer(t)) + if i < 0 || i >= len(tt.fields) { + panic("reflect: Field index out of bounds") + } + return tt.fields[i] +} + +func (t *rtype) Key() Type { + if t.Kind() != Map { + panic("reflect: Key of non-map type") + } + tt := (*mapType)(unsafe.Pointer(t)) + return toType(tt.key) +} + +func (t *rtype) NumField() int { + if t.Kind() != Struct { + panic("reflect: NumField of non-struct type") + } + tt := (*structType)(unsafe.Pointer(t)) + return len(tt.fields) +} + +func (t *rtype) Method(i int) (m Method) { + if t.Kind() == Interface { + tt := (*interfaceType)(unsafe.Pointer(t)) + return tt.Method(i) + } + methods := t.exportedMethods() + if i < 0 || i >= len(methods) { + panic("reflect: Method index out of range") + } + p := methods[i] + pname := t.nameOff(p.name) + m.Name = pname.name() + fl := flag(Func) + mtyp := t.typeOff(p.mtyp) + ft := (*funcType)(unsafe.Pointer(mtyp)) + in := make([]Type, 0, 1+len(ft.in())) + in = append(in, t) + for _, arg := range ft.in() { + in = append(in, arg) + } + out := make([]Type, 0, len(ft.out())) + for _, ret := range ft.out() { + out = append(out, ret) + } + mt := FuncOf(in, out, ft.IsVariadic()) + m.Type = mt + prop := js.Global.Call("$methodSet", js.InternalObject(t).Get(idJsType)).Index(i).Get("prop").String() + fn := js.MakeFunc(func(this *js.Object, arguments []*js.Object) interface{} { + rcvr := arguments[0] + return rcvr.Get(prop).Call("apply", rcvr, arguments[1:]) + }) + m.Func = Value{mt.(*rtype), unsafe.Pointer(fn.Unsafe()), fl} + + m.Index = i + return m +} diff --git a/compiler/natives/src/internal/reflectlite/utils.go b/compiler/natives/src/internal/reflectlite/utils.go new file mode 100644 index 000000000..c4185826a --- /dev/null +++ b/compiler/natives/src/internal/reflectlite/utils.go @@ -0,0 +1,100 @@ +// +build js + +package reflectlite + +import ( + "unsafe" +) + +type ChanDir int + +const ( + RecvDir ChanDir = 1 << iota // <-chan + SendDir // chan<- + BothDir = RecvDir | SendDir // chan +) + +type errorString struct { + s string +} + +func (e *errorString) Error() string { + return e.s +} + +var ( + ErrSyntax = &errorString{"invalid syntax"} +) + +func unquote(s string) (string, error) { + if len(s) < 2 { + return s, nil + } + if s[0] == '\'' || s[0] == '"' { + if s[len(s)-1] == s[0] { + return s[1 : len(s)-1], nil + } + return "", ErrSyntax + } + return s, nil +} + +// Method represents a single method. +type Method struct { + // Name is the method name. + // PkgPath is the package path that qualifies a lower case (unexported) + // method name. It is empty for upper case (exported) method names. + // The combination of PkgPath and Name uniquely identifies a method + // in a method set. + // See https://golang.org/ref/spec#Uniqueness_of_identifiers + Name string + PkgPath string + + Type Type // method type + Func Value // func with receiver as first argument + Index int // index for Type.Method +} + +// A SelectDir describes the communication direction of a select case. +type SelectDir int + +// NOTE: These values must match ../runtime/select.go:/selectDir. + +const ( + _ SelectDir = iota + SelectSend // case Chan <- Send + SelectRecv // case <-Chan: + SelectDefault // default +) + +// A runtimeSelect is a single case passed to rselect. +// This must match ../runtime/select.go:/runtimeSelect +type runtimeSelect struct { + dir SelectDir // SelectSend, SelectRecv or SelectDefault + typ *rtype // channel type + ch unsafe.Pointer // channel + val unsafe.Pointer // ptr to data (SendDir) or ptr to receive buffer (RecvDir) +} + +func (f flag) mustBe(expected Kind) { + // TODO(mvdan): use f.kind() again once mid-stack inlining gets better + if Kind(f&flagKindMask) != expected { + panic(&ValueError{methodName(), f.kind()}) + } +} + +// A StructTag is the tag string in a struct field. +// +// By convention, tag strings are a concatenation of +// optionally space-separated key:"value" pairs. +// Each key is a non-empty string consisting of non-control +// characters other than space (U+0020 ' '), quote (U+0022 '"'), +// and colon (U+003A ':'). Each value is quoted using U+0022 '"' +// characters and Go string literal syntax. +type StructTag string + +func typesMustMatch(what string, t1, t2 Type) { + if t1 != t2 { + panic(what + ": " + t1.String() + " != " + t2.String()) + } +} diff --git a/compiler/natives/src/internal/reflectlite/value.go b/compiler/natives/src/internal/reflectlite/value.go new file mode 100644 index 000000000..e7248127c --- /dev/null +++ b/compiler/natives/src/internal/reflectlite/value.go @@ -0,0 +1,585 @@ +// +build js + +package reflectlite + +import ( + "unsafe" + + "github.com/gopherjs/gopherjs/js" +) + +func (v Value) object() *js.Object { + if v.typ.Kind() == Array || v.typ.Kind() == Struct { + return js.InternalObject(v.ptr) + } + if v.flag&flagIndir != 0 { + val := js.InternalObject(v.ptr).Call("$get") + if val != js.Global.Get("$ifaceNil") && val.Get("constructor") != jsType(v.typ) { + switch v.typ.Kind() { + case Uint64, Int64: + val = jsType(v.typ).New(val.Get("$high"), val.Get("$low")) + case Complex64, Complex128: + val = jsType(v.typ).New(val.Get("$real"), val.Get("$imag")) + case Slice: + if val == val.Get("constructor").Get("nil") { + val = jsType(v.typ).Get("nil") + break + } + newVal := jsType(v.typ).New(val.Get("$array")) + newVal.Set("$offset", val.Get("$offset")) + newVal.Set("$length", val.Get("$length")) + newVal.Set("$capacity", val.Get("$capacity")) + val = newVal + } + } + return js.InternalObject(val.Unsafe()) + } + return js.InternalObject(v.ptr) +} + +func (v Value) assignTo(context string, dst *rtype, target unsafe.Pointer) Value { + if v.flag&flagMethod != 0 { + v = makeMethodValue(context, v) + } + switch { + case directlyAssignable(dst, v.typ): + // Overwrite type so that they match. + // Same memory layout, so no harm done. + fl := v.flag&(flagAddr|flagIndir) | v.flag.ro() + fl |= flag(dst.Kind()) + return Value{dst, v.ptr, fl} + + case implements(dst, v.typ): + if target == nil { + target = unsafe_New(dst) + } + // GopherJS: Skip the v.Kind() == Interface && v.IsNil() if statement + // from upstream. ifaceE2I below does not panic, and it needs + // to run, given its custom implementation. + x := valueInterface(v) + if dst.NumMethod() == 0 { + *(*interface{})(target) = x + } else { + ifaceE2I(dst, x, target) + } + return Value{dst, target, flagIndir | flag(Interface)} + } + + // Failed. + panic(context + ": value of type " + v.typ.String() + " is not assignable to type " + dst.String()) +} + +var callHelper = js.Global.Get("$call").Interface().(func(...interface{}) *js.Object) + +func (v Value) call(op string, in []Value) []Value { + var ( + t *funcType + fn unsafe.Pointer + rcvr *js.Object + ) + if v.flag&flagMethod != 0 { + _, t, fn = methodReceiver(op, v, int(v.flag)>>flagMethodShift) + rcvr = v.object() + if isWrapped(v.typ) { + rcvr = jsType(v.typ).New(rcvr) + } + } else { + t = (*funcType)(unsafe.Pointer(v.typ)) + fn = unsafe.Pointer(v.object().Unsafe()) + rcvr = js.Undefined + } + + if fn == nil { + panic("reflect.Value.Call: call of nil function") + } + + isSlice := op == "CallSlice" + n := t.NumIn() + if isSlice { + if !t.IsVariadic() { + panic("reflect: CallSlice of non-variadic function") + } + if len(in) < n { + panic("reflect: CallSlice with too few input arguments") + } + if len(in) > n { + panic("reflect: CallSlice with too many input arguments") + } + } else { + if t.IsVariadic() { + n-- + } + if len(in) < n { + panic("reflect: Call with too few input arguments") + } + if !t.IsVariadic() && len(in) > n { + panic("reflect: Call with too many input arguments") + } + } + for _, x := range in { + if x.Kind() == Invalid { + panic("reflect: " + op + " using zero Value argument") + } + } + for i := 0; i < n; i++ { + if xt, targ := in[i].Type(), t.In(i); !xt.AssignableTo(targ) { + panic("reflect: " + op + " using " + xt.String() + " as type " + targ.String()) + } + } + if !isSlice && t.IsVariadic() { + // prepare slice for remaining values + m := len(in) - n + slice := MakeSlice(t.In(n), m, m) + elem := t.In(n).Elem() + for i := 0; i < m; i++ { + x := in[n+i] + if xt := x.Type(); !xt.AssignableTo(elem) { + panic("reflect: cannot use " + xt.String() + " as type " + elem.String() + " in " + op) + } + slice.Index(i).Set(x) + } + origIn := in + in = make([]Value, n+1) + copy(in[:n], origIn) + in[n] = slice + } + + nin := len(in) + if nin != t.NumIn() { + panic("reflect.Value.Call: wrong argument count") + } + nout := t.NumOut() + + argsArray := js.Global.Get("Array").New(t.NumIn()) + for i, arg := range in { + argsArray.SetIndex(i, unwrapJsObject(t.In(i), arg.assignTo("reflect.Value.Call", t.In(i).common(), nil).object())) + } + results := callHelper(js.InternalObject(fn), rcvr, argsArray) + + switch nout { + case 0: + return nil + case 1: + return []Value{makeValue(t.Out(0), wrapJsObject(t.Out(0), results), 0)} + default: + ret := make([]Value, nout) + for i := range ret { + ret[i] = makeValue(t.Out(i), wrapJsObject(t.Out(i), results.Index(i)), 0) + } + return ret + } +} + +func (v Value) Cap() int { + k := v.kind() + switch k { + case Array: + return v.typ.Len() + case Chan, Slice: + return v.object().Get("$capacity").Int() + } + panic(&ValueError{"reflect.Value.Cap", k}) +} + +func (v Value) Index(i int) Value { + switch k := v.kind(); k { + case Array: + tt := (*arrayType)(unsafe.Pointer(v.typ)) + if i < 0 || i > int(tt.len) { + panic("reflect: array index out of range") + } + typ := tt.elem + fl := v.flag&(flagIndir|flagAddr) | v.flag.ro() | flag(typ.Kind()) + + a := js.InternalObject(v.ptr) + if fl&flagIndir != 0 && typ.Kind() != Array && typ.Kind() != Struct { + return Value{typ, unsafe.Pointer(jsType(PtrTo(typ)).New( + js.InternalObject(func() *js.Object { return wrapJsObject(typ, a.Index(i)) }), + js.InternalObject(func(x *js.Object) { a.SetIndex(i, unwrapJsObject(typ, x)) }), + ).Unsafe()), fl} + } + return makeValue(typ, wrapJsObject(typ, a.Index(i)), fl) + + case Slice: + s := v.object() + if i < 0 || i >= s.Get("$length").Int() { + panic("reflect: slice index out of range") + } + tt := (*sliceType)(unsafe.Pointer(v.typ)) + typ := tt.elem + fl := flagAddr | flagIndir | v.flag.ro() | flag(typ.Kind()) + + i += s.Get("$offset").Int() + a := s.Get("$array") + if fl&flagIndir != 0 && typ.Kind() != Array && typ.Kind() != Struct { + return Value{typ, unsafe.Pointer(jsType(PtrTo(typ)).New( + js.InternalObject(func() *js.Object { return wrapJsObject(typ, a.Index(i)) }), + js.InternalObject(func(x *js.Object) { a.SetIndex(i, unwrapJsObject(typ, x)) }), + ).Unsafe()), fl} + } + return makeValue(typ, wrapJsObject(typ, a.Index(i)), fl) + + case String: + str := *(*string)(v.ptr) + if i < 0 || i >= len(str) { + panic("reflect: string index out of range") + } + fl := v.flag.ro() | flag(Uint8) | flagIndir + c := str[i] + return Value{uint8Type, unsafe.Pointer(&c), fl} + + default: + panic(&ValueError{"reflect.Value.Index", k}) + } +} + +func (v Value) InterfaceData() [2]uintptr { + panic("InterfaceData is not supported by GopherJS") +} + +func (v Value) IsNil() bool { + switch k := v.kind(); k { + case Ptr, Slice: + return v.object() == jsType(v.typ).Get("nil") + case Chan: + return v.object() == js.Global.Get("$chanNil") + case Func: + return v.object() == js.Global.Get("$throwNilPointerError") + case Map: + return v.object() == js.InternalObject(false) + case Interface: + return v.object() == js.Global.Get("$ifaceNil") + case UnsafePointer: + return v.object().Unsafe() == 0 + default: + panic(&ValueError{"reflect.Value.IsNil", k}) + } +} + +func (v Value) Len() int { + switch k := v.kind(); k { + case Array, String: + return v.object().Length() + case Slice: + return v.object().Get("$length").Int() + case Chan: + return v.object().Get("$buffer").Get("length").Int() + case Map: + return js.Global.Call("$keys", v.object()).Length() + default: + panic(&ValueError{"reflect.Value.Len", k}) + } +} + +func (v Value) Pointer() uintptr { + switch k := v.kind(); k { + case Chan, Map, Ptr, UnsafePointer: + if v.IsNil() { + return 0 + } + return v.object().Unsafe() + case Func: + if v.IsNil() { + return 0 + } + return 1 + case Slice: + if v.IsNil() { + return 0 + } + return v.object().Get("$array").Unsafe() + default: + panic(&ValueError{"reflect.Value.Pointer", k}) + } +} + +func (v Value) Set(x Value) { + v.mustBeAssignable() + x.mustBeExported() + x = x.assignTo("reflect.Set", v.typ, nil) + if v.flag&flagIndir != 0 { + switch v.typ.Kind() { + case Array: + jsType(v.typ).Call("copy", js.InternalObject(v.ptr), js.InternalObject(x.ptr)) + case Interface: + js.InternalObject(v.ptr).Call("$set", js.InternalObject(valueInterface(x))) + case Struct: + copyStruct(js.InternalObject(v.ptr), js.InternalObject(x.ptr), v.typ) + default: + js.InternalObject(v.ptr).Call("$set", x.object()) + } + return + } + v.ptr = x.ptr +} + +func (v Value) SetBytes(x []byte) { + v.mustBeAssignable() + v.mustBe(Slice) + if v.typ.Elem().Kind() != Uint8 { + panic("reflect.Value.SetBytes of non-byte slice") + } + slice := js.InternalObject(x) + if v.typ.Name() != "" || v.typ.Elem().Name() != "" { + typedSlice := jsType(v.typ).New(slice.Get("$array")) + typedSlice.Set("$offset", slice.Get("$offset")) + typedSlice.Set("$length", slice.Get("$length")) + typedSlice.Set("$capacity", slice.Get("$capacity")) + slice = typedSlice + } + js.InternalObject(v.ptr).Call("$set", slice) +} + +func (v Value) SetCap(n int) { + v.mustBeAssignable() + v.mustBe(Slice) + s := js.InternalObject(v.ptr).Call("$get") + if n < s.Get("$length").Int() || n > s.Get("$capacity").Int() { + panic("reflect: slice capacity out of range in SetCap") + } + newSlice := jsType(v.typ).New(s.Get("$array")) + newSlice.Set("$offset", s.Get("$offset")) + newSlice.Set("$length", s.Get("$length")) + newSlice.Set("$capacity", n) + js.InternalObject(v.ptr).Call("$set", newSlice) +} + +func (v Value) SetLen(n int) { + v.mustBeAssignable() + v.mustBe(Slice) + s := js.InternalObject(v.ptr).Call("$get") + if n < 0 || n > s.Get("$capacity").Int() { + panic("reflect: slice length out of range in SetLen") + } + newSlice := jsType(v.typ).New(s.Get("$array")) + newSlice.Set("$offset", s.Get("$offset")) + newSlice.Set("$length", n) + newSlice.Set("$capacity", s.Get("$capacity")) + js.InternalObject(v.ptr).Call("$set", newSlice) +} + +func (v Value) Slice(i, j int) Value { + var ( + cap int + typ Type + s *js.Object + ) + switch kind := v.kind(); kind { + case Array: + if v.flag&flagAddr == 0 { + panic("reflect.Value.Slice: slice of unaddressable array") + } + tt := (*arrayType)(unsafe.Pointer(v.typ)) + cap = int(tt.len) + typ = SliceOf(tt.elem) + s = jsType(typ).New(v.object()) + + case Slice: + typ = v.typ + s = v.object() + cap = s.Get("$capacity").Int() + + case String: + str := *(*string)(v.ptr) + if i < 0 || j < i || j > len(str) { + panic("reflect.Value.Slice: string slice index out of bounds") + } + return ValueOf(str[i:j]) + + default: + panic(&ValueError{"reflect.Value.Slice", kind}) + } + + if i < 0 || j < i || j > cap { + panic("reflect.Value.Slice: slice index out of bounds") + } + + return makeValue(typ, js.Global.Call("$subslice", s, i, j), v.flag.ro()) +} + +func (v Value) Slice3(i, j, k int) Value { + var ( + cap int + typ Type + s *js.Object + ) + switch kind := v.kind(); kind { + case Array: + if v.flag&flagAddr == 0 { + panic("reflect.Value.Slice: slice of unaddressable array") + } + tt := (*arrayType)(unsafe.Pointer(v.typ)) + cap = int(tt.len) + typ = SliceOf(tt.elem) + s = jsType(typ).New(v.object()) + + case Slice: + typ = v.typ + s = v.object() + cap = s.Get("$capacity").Int() + + default: + panic(&ValueError{"reflect.Value.Slice3", kind}) + } + + if i < 0 || j < i || k < j || k > cap { + panic("reflect.Value.Slice3: slice index out of bounds") + } + + return makeValue(typ, js.Global.Call("$subslice", s, i, j, k), v.flag.ro()) +} + +func (v Value) Close() { + v.mustBe(Chan) + v.mustBeExported() + js.Global.Call("$close", v.object()) +} + +func (v Value) Elem() Value { + switch k := v.kind(); k { + case Interface: + val := v.object() + if val == js.Global.Get("$ifaceNil") { + return Value{} + } + typ := reflectType(val.Get("constructor")) + return makeValue(typ, val.Get("$val"), v.flag.ro()) + + case Ptr: + if v.IsNil() { + return Value{} + } + val := v.object() + tt := (*ptrType)(unsafe.Pointer(v.typ)) + fl := v.flag&flagRO | flagIndir | flagAddr + fl |= flag(tt.elem.Kind()) + return Value{tt.elem, unsafe.Pointer(wrapJsObject(tt.elem, val).Unsafe()), fl} + + default: + panic(&ValueError{"reflect.Value.Elem", k}) + } +} + +// NumField returns the number of fields in the struct v. +// It panics if v's Kind is not Struct. +func (v Value) NumField() int { + v.mustBe(Struct) + tt := (*structType)(unsafe.Pointer(v.typ)) + return len(tt.fields) +} + +// MapKeys returns a slice containing all the keys present in the map, +// in unspecified order. +// It panics if v's Kind is not Map. +// It returns an empty slice if v represents a nil map. +func (v Value) MapKeys() []Value { + v.mustBe(Map) + tt := (*mapType)(unsafe.Pointer(v.typ)) + keyType := tt.key + + fl := v.flag.ro() | flag(keyType.Kind()) + + m := v.pointer() + mlen := int(0) + if m != nil { + mlen = maplen(m) + } + it := mapiterinit(v.typ, m) + a := make([]Value, mlen) + var i int + for i = 0; i < len(a); i++ { + key := mapiterkey(it) + if key == nil { + // Someone deleted an entry from the map since we + // called maplen above. It's a data race, but nothing + // we can do about it. + break + } + a[i] = copyVal(keyType, fl, key) + mapiternext(it) + } + return a[:i] +} + +// MapIndex returns the value associated with key in the map v. +// It panics if v's Kind is not Map. +// It returns the zero Value if key is not found in the map or if v represents a nil map. +// As in Go, the key's value must be assignable to the map's key type. +func (v Value) MapIndex(key Value) Value { + v.mustBe(Map) + tt := (*mapType)(unsafe.Pointer(v.typ)) + + // Do not require key to be exported, so that DeepEqual + // and other programs can use all the keys returned by + // MapKeys as arguments to MapIndex. If either the map + // or the key is unexported, though, the result will be + // considered unexported. This is consistent with the + // behavior for structs, which allow read but not write + // of unexported fields. + key = key.assignTo("reflect.Value.MapIndex", tt.key, nil) + + var k unsafe.Pointer + if key.flag&flagIndir != 0 { + k = key.ptr + } else { + k = unsafe.Pointer(&key.ptr) + } + e := mapaccess(v.typ, v.pointer(), k) + if e == nil { + return Value{} + } + typ := tt.elem + fl := (v.flag | key.flag).ro() + fl |= flag(typ.Kind()) + return copyVal(typ, fl, e) +} + +func (v Value) Field(i int) Value { + if v.kind() != Struct { + panic(&ValueError{"reflect.Value.Field", v.kind()}) + } + tt := (*structType)(unsafe.Pointer(v.typ)) + if uint(i) >= uint(len(tt.fields)) { + panic("reflect: Field index out of range") + } + + prop := jsType(v.typ).Get("fields").Index(i).Get("prop").String() + field := &tt.fields[i] + typ := field.typ + + fl := v.flag&(flagStickyRO|flagIndir|flagAddr) | flag(typ.Kind()) + if !field.name.isExported() { + if field.embedded() { + fl |= flagEmbedRO + } else { + fl |= flagStickyRO + } + } + + if tag := tt.fields[i].name.tag(); tag != "" && i != 0 { + if jsTag := getJsTag(tag); jsTag != "" { + for { + v = v.Field(0) + if v.typ == jsObjectPtr { + o := v.object().Get("object") + return Value{typ, unsafe.Pointer(jsType(PtrTo(typ)).New( + js.InternalObject(func() *js.Object { return js.Global.Call("$internalize", o.Get(jsTag), jsType(typ)) }), + js.InternalObject(func(x *js.Object) { o.Set(jsTag, js.Global.Call("$externalize", x, jsType(typ))) }), + ).Unsafe()), fl} + } + if v.typ.Kind() == Ptr { + v = v.Elem() + } + } + } + } + + s := js.InternalObject(v.ptr) + if fl&flagIndir != 0 && typ.Kind() != Array && typ.Kind() != Struct { + return Value{typ, unsafe.Pointer(jsType(PtrTo(typ)).New( + js.InternalObject(func() *js.Object { return wrapJsObject(typ, s.Get(prop)) }), + js.InternalObject(func(x *js.Object) { s.Set(prop, unwrapJsObject(typ, x)) }), + ).Unsafe()), fl} + } + return makeValue(typ, wrapJsObject(typ, s.Get(prop)), fl) +} diff --git a/compiler/natives/src/internal/syscall/unix/unix.go b/compiler/natives/src/internal/syscall/unix/unix.go index 583259037..e63aaca04 100644 --- a/compiler/natives/src/internal/syscall/unix/unix.go +++ b/compiler/natives/src/internal/syscall/unix/unix.go @@ -4,8 +4,12 @@ package unix import "syscall" -const randomTrap = 0 -const fstatatTrap = 0 +const ( + randomTrap uintptr = 0 + fstatatTrap uintptr = 0 + getrandomTrap uintptr = 0 + copyFileRangeTrap uintptr = 0 +) func IsNonblock(fd int) (nonblocking bool, err error) { return false, nil diff --git a/compiler/natives/src/internal/unsafeheader/unsafeheader_test.go b/compiler/natives/src/internal/unsafeheader/unsafeheader_test.go new file mode 100644 index 000000000..23278ce1a --- /dev/null +++ b/compiler/natives/src/internal/unsafeheader/unsafeheader_test.go @@ -0,0 +1,9 @@ +//+build js + +package unsafeheader_test + +import "testing" + +func TestWriteThroughHeader(t *testing.T) { + t.Skip("GopherJS uses different slice and string implementation than internal/unsafeheader.") +} diff --git a/compiler/natives/src/io/io_test.go b/compiler/natives/src/io/io_test.go index a436fe023..9bc6744be 100644 --- a/compiler/natives/src/io/io_test.go +++ b/compiler/natives/src/io/io_test.go @@ -10,14 +10,13 @@ func TestMultiWriter_WriteStringSingleAlloc(t *testing.T) { t.Skip() } -func TestMultiReaderFlatten(t *testing.T) { - t.Skip("test relies on runtime.Callers and runtime.CallersFrames, which GopherJS doesn't support") -} - -func TestMultiWriterSingleChainFlatten(t *testing.T) { - t.Skip("test relies on runtime.Callers and runtime.CallersFrames, which GopherJS doesn't support") -} - func TestMultiReaderFreesExhaustedReaders(t *testing.T) { t.Skip("test relies on runtime.SetFinalizer, which GopherJS does not implement") } + +func TestCopyLargeWriter(t *testing.T) { + // This test actually behaves more or less correctly, but it triggers a + // different code path that panics instead of returning an error due to a bug + // referenced below. + t.Skip("https://github.com/gopherjs/gopherjs/issues/1003") +} diff --git a/compiler/natives/src/math/math.go b/compiler/natives/src/math/math.go index ca09bfcd0..3b5cd5fc6 100644 --- a/compiler/natives/src/math/math.go +++ b/compiler/natives/src/math/math.go @@ -7,10 +7,10 @@ import ( ) var math = js.Global.Get("Math") -var zero float64 = 0 -var posInf = 1 / zero -var negInf = -1 / zero -var nan = 0 / zero +var _zero float64 = 0 +var posInf = 1 / _zero +var negInf = -1 / _zero +var nan = 0 / _zero func Acos(x float64) float64 { return math.Call("acos", x).Float() diff --git a/compiler/natives/src/os/os.go b/compiler/natives/src/os/os.go index 96f36d28b..45cf1bc3e 100644 --- a/compiler/natives/src/os/os.go +++ b/compiler/natives/src/os/os.go @@ -4,10 +4,13 @@ package os import ( "errors" + _ "unsafe" // for go:linkname "github.com/gopherjs/gopherjs/js" ) +const isBigEndian = false + func runtime_args() []string { // not called on Windows return Args } @@ -30,3 +33,6 @@ func runtime_beforeExit() {} func executable() (string, error) { return "", errors.New("Executable not implemented for GOARCH=js") } + +//go:linkname fastrand runtime.fastrand +func fastrand() uint32 diff --git a/compiler/natives/src/os/removeall_noat.go b/compiler/natives/src/os/removeall_noat.go new file mode 100644 index 000000000..84171fa06 --- /dev/null +++ b/compiler/natives/src/os/removeall_noat.go @@ -0,0 +1,146 @@ +// Copyright 2018 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. + +// GopherJS uses "noat" implementation of os.RemoveAll() because our node-syscall +// module can't handle passing a struct in correctly. +// https://github.com/gopherjs/gopherjs/issues/993 + +// +build js + +package os + +import ( + "io" + "runtime" + "syscall" +) + +func removeAll(path string) error { + if path == "" { + // fail silently to retain compatibility with previous behavior + // of RemoveAll. See issue 28830. + return nil + } + + // The rmdir system call permits removing "." on Plan 9, + // so we don't permit it to remain consistent with the + // "at" implementation of RemoveAll. + if endsWithDot(path) { + return &PathError{Op: "RemoveAll", Path: path, Err: syscall.EINVAL} + } + + // Simple case: if Remove works, we're done. + err := Remove(path) + if err == nil || IsNotExist(err) { + return nil + } + + // Otherwise, is this a directory we need to recurse into? + dir, serr := Lstat(path) + if serr != nil { + if serr, ok := serr.(*PathError); ok && (IsNotExist(serr.Err) || serr.Err == syscall.ENOTDIR) { + return nil + } + return serr + } + if !dir.IsDir() { + // Not a directory; return the error from Remove. + return err + } + + // Remove contents & return first error. + err = nil + for { + fd, err := Open(path) + if err != nil { + if IsNotExist(err) { + // Already deleted by someone else. + return nil + } + return err + } + + const reqSize = 1024 + var names []string + var readErr error + + for { + numErr := 0 + names, readErr = fd.Readdirnames(reqSize) + + for _, name := range names { + err1 := RemoveAll(path + string(PathSeparator) + name) + if err == nil { + err = err1 + } + if err1 != nil { + numErr++ + } + } + + // If we can delete any entry, break to start new iteration. + // Otherwise, we discard current names, get next entries and try deleting them. + if numErr != reqSize { + break + } + } + + // Removing files from the directory may have caused + // the OS to reshuffle it. Simply calling Readdirnames + // again may skip some entries. The only reliable way + // to avoid this is to close and re-open the + // directory. See issue 20841. + fd.Close() + + if readErr == io.EOF { + break + } + // If Readdirnames returned an error, use it. + if err == nil { + err = readErr + } + if len(names) == 0 { + break + } + + // We don't want to re-open unnecessarily, so if we + // got fewer than request names from Readdirnames, try + // simply removing the directory now. If that + // succeeds, we are done. + if len(names) < reqSize { + err1 := Remove(path) + if err1 == nil || IsNotExist(err1) { + return nil + } + + if err != nil { + // We got some error removing the + // directory contents, and since we + // read fewer names than we requested + // there probably aren't more files to + // remove. Don't loop around to read + // the directory again. We'll probably + // just get the same error. + return err + } + } + } + + // Remove directory. + err1 := Remove(path) + if err1 == nil || IsNotExist(err1) { + return nil + } + if runtime.GOOS == "windows" && IsPermission(err1) { + if fs, err := Stat(path); err == nil { + if err = Chmod(path, FileMode(0200|int(fs.Mode()))); err == nil { + err1 = Remove(path) + } + } + } + if err == nil { + err = err1 + } + return err +} diff --git a/compiler/natives/src/reflect/reflect.go b/compiler/natives/src/reflect/reflect.go index 3d0cc4e0f..f4f95a401 100644 --- a/compiler/natives/src/reflect/reflect.go +++ b/compiler/natives/src/reflect/reflect.go @@ -279,6 +279,15 @@ func newTypeOff(t *rtype) typeOff { return typeOff(i) } +// addReflectOff adds a pointer to the reflection lookup map in the runtime. +// It returns a new ID that can be used as a typeOff or textOff, and will +// be resolved correctly. Implemented in the runtime package. +func addReflectOff(ptr unsafe.Pointer) int32 { + i := len(typeOffList) + typeOffList = append(typeOffList, (*rtype)(ptr)) + return int32(i) +} + func internalStr(strObj *js.Object) string { var c struct{ str string } js.InternalObject(c).Set("str", strObj) // get string without internalizing @@ -380,44 +389,95 @@ func SliceOf(t Type) Type { return reflectType(js.Global.Call("$sliceType", jsType(t))) } -// func StructOf(fields []StructField) Type { -// jsFields := make([]*js.Object, len(fields)) -// fset := map[string]struct{}{} -// for i, f := range fields { -// if f.Type == nil { -// panic("reflect.StructOf: field " + strconv.Itoa(i) + " has no type") -// } - -// name := f.Name -// if name == "" { -// // Embedded field -// if f.Type.Kind() == Ptr { -// // Embedded ** and *interface{} are illegal -// elem := f.Type.Elem() -// if k := elem.Kind(); k == Ptr || k == Interface { -// panic("reflect.StructOf: illegal anonymous field type " + f.Type.String()) -// } -// name = elem.String() -// } else { -// name = f.Type.String() -// } -// } - -// if _, dup := fset[name]; dup { -// panic("reflect.StructOf: duplicate field " + name) -// } -// fset[name] = struct{}{} - -// jsf := js.Global.Get("Object").New() -// jsf.Set("prop", name) -// jsf.Set("name", name) -// jsf.Set("exported", true) -// jsf.Set("typ", jsType(f.Type)) -// jsf.Set("tag", f.Tag) -// jsFields[i] = jsf -// } -// return reflectType(js.Global.Call("$structType", "", jsFields)) -// } +func StructOf(fields []StructField) Type { + var ( + jsFields = make([]*js.Object, len(fields)) + fset = map[string]struct{}{} + pkgpath string + hasGCProg bool + ) + for i, field := range fields { + if field.Name == "" { + panic("reflect.StructOf: field " + strconv.Itoa(i) + " has no name") + } + if !isValidFieldName(field.Name) { + panic("reflect.StructOf: field " + strconv.Itoa(i) + " has invalid name") + } + if field.Type == nil { + panic("reflect.StructOf: field " + strconv.Itoa(i) + " has no type") + } + f, fpkgpath := runtimeStructField(field) + ft := f.typ + if ft.kind&kindGCProg != 0 { + hasGCProg = true + } + if fpkgpath != "" { + if pkgpath == "" { + pkgpath = fpkgpath + } else if pkgpath != fpkgpath { + panic("reflect.Struct: fields with different PkgPath " + pkgpath + " and " + fpkgpath) + } + } + name := field.Name + if f.embedded() { + // Embedded field + if field.Type.Kind() == Ptr { + // Embedded ** and *interface{} are illegal + elem := field.Type.Elem() + if k := elem.Kind(); k == Ptr || k == Interface { + panic("reflect.StructOf: illegal anonymous field type " + field.Type.String()) + } + } + switch field.Type.Kind() { + case Interface: + case Ptr: + ptr := (*ptrType)(unsafe.Pointer(ft)) + if unt := ptr.uncommon(); unt != nil { + if i > 0 && unt.mcount > 0 { + // Issue 15924. + panic("reflect: embedded type with methods not implemented if type is not first field") + } + if len(fields) > 1 { + panic("reflect: embedded type with methods not implemented if there is more than one field") + } + } + default: + if unt := ft.uncommon(); unt != nil { + if i > 0 && unt.mcount > 0 { + // Issue 15924. + panic("reflect: embedded type with methods not implemented if type is not first field") + } + if len(fields) > 1 && ft.kind&kindDirectIface != 0 { + panic("reflect: embedded type with methods not implemented for non-pointer type") + } + } + } + } + + if _, dup := fset[name]; dup { + panic("reflect.StructOf: duplicate field " + name) + } + fset[name] = struct{}{} + // To be consistent with Compiler's behavior we need to avoid externalizing + // the "name" property. The line below is effectively an inverse of the + // internalStr() function. + jsf := js.InternalObject(struct{ name string }{name}) + // The rest is set through the js.Object() interface, which the compiler will + // externalize for us. + jsf.Set("prop", name) + jsf.Set("exported", f.name.isExported()) + jsf.Set("typ", jsType(field.Type)) + jsf.Set("tag", field.Tag) + jsf.Set("embedded", field.Anonymous) + jsFields[i] = jsf + } + _ = hasGCProg + typ := js.Global.Call("$structType", "", jsFields) + if pkgpath != "" { + typ.Set("pkgPath", pkgpath) + } + return reflectType(typ) +} func Zero(typ Type) Value { return makeValue(typ, jsType(typ).Call("zero"), 0) @@ -467,12 +527,27 @@ func MakeFunc(typ Type, fn func(args []Value) (results []Value)) Value { ftyp := (*funcType)(unsafe.Pointer(t)) fv := js.MakeFunc(func(this *js.Object, arguments []*js.Object) interface{} { + // Convert raw JS arguments into []Value the user-supplied function expects. args := make([]Value, ftyp.NumIn()) for i := range args { argType := ftyp.In(i).common() args[i] = makeValue(argType, arguments[i], 0) } + + // Call the user-supplied function. resultsSlice := fn(args) + + // Verify that returned value types are compatible with the function type specified by the caller. + if want, got := ftyp.NumOut(), len(resultsSlice); want != got { + panic("reflect: expected " + strconv.Itoa(want) + " return values, got " + strconv.Itoa(got)) + } + for i, rtyp := range ftyp.out() { + if !resultsSlice[i].Type().AssignableTo(rtyp) { + panic("reflect: " + strconv.Itoa(i) + " return value type is not compatible with the function declaration") + } + } + + // Rearrange return values according to the expected function signature. switch ftyp.NumOut() { case 0: return nil @@ -591,7 +666,7 @@ func mapiterkey(it unsafe.Pointer) unsafe.Pointer { return unsafe.Pointer(js.Global.Call("$newDataPointer", kv.Get("k"), jsType(PtrTo(iter.t.Key()))).Unsafe()) } -func mapitervalue(it unsafe.Pointer) unsafe.Pointer { +func mapiterelem(it unsafe.Pointer) unsafe.Pointer { iter := (*mapIter)(it) var kv *js.Object if iter.last != nil { @@ -646,7 +721,7 @@ func cvtDirect(v Value, typ Type) Value { case Struct: val = jsType(typ).Get("ptr").New() copyStruct(val, srcVal, typ) - case Array, Bool, Chan, Func, Interface, Map, String: + case Array, Bool, Chan, Func, Interface, Map, String, UnsafePointer: val = js.InternalObject(v.ptr) default: panic(&ValueError{"reflect.Convert", k}) @@ -748,10 +823,6 @@ func ifaceE2I(t *rtype, src interface{}, dst unsafe.Pointer) { js.InternalObject(dst).Call("$set", js.InternalObject(src)) } -func methodName() string { - return "?FIXME?" -} - func makeMethodValue(op string, v Value) Value { if v.flag&flagMethod == 0 { panic("reflect: internal error: invalid use of makePartialFunc") diff --git a/compiler/natives/src/reflect/reflect_test.go b/compiler/natives/src/reflect/reflect_test.go index 878a685cc..68c7a4ec2 100644 --- a/compiler/natives/src/reflect/reflect_test.go +++ b/compiler/natives/src/reflect/reflect_test.go @@ -59,40 +59,20 @@ func TestSelectOnInvalid(t *testing.T) { }) } -func TestStructOfFieldName(t *testing.T) { - t.Skip("StructOf") -} - -func TestStructOf(t *testing.T) { - t.Skip("StructOf") -} - -func TestStructOfExportRules(t *testing.T) { - t.Skip("StructOf") -} - -func TestStructOfGC(t *testing.T) { - t.Skip("StructOf") -} - -func TestStructOfAlg(t *testing.T) { - t.Skip("StructOf") -} - -func TestStructOfGenericAlg(t *testing.T) { - t.Skip("StructOf") -} - func TestStructOfDirectIface(t *testing.T) { - t.Skip("StructOf") + t.Skip("reflect.Value.InterfaceData is not supported by GopherJS.") } func TestStructOfWithInterface(t *testing.T) { - t.Skip("StructOf") -} - -func TestStructOfTooManyFields(t *testing.T) { - t.Skip("StructOf") + // TODO(nevkontakte) Most of this test actually passes, but there is something + // about embedding fields with methods that can or can't be stored in an + // interface value directly that GopherJS does differently from upstream. As + // a result, GopherJS's implementation of StructOf() doesn't panic where + // upstream does. It seems to be a result of our implementation not propagating + // the kindDirectIface flag in struct types created by StructOf(), but at this + // point I wasn't able to figure out what that flag actually means in the + // GopherJS context or how it maps onto our own reflection implementation. + t.Skip("GopherJS doesn't support storing types directly in interfaces.") } var deepEqualTests = []DeepEqualTest{ @@ -187,3 +167,18 @@ func init() { // TODO: This is a failure in 1.11, try to determine the cause and fix. typeTests = append(typeTests[:31], typeTests[32:]...) // skip test case #31 } + +func TestConvertNaNs(t *testing.T) { + // This test is exactly the same as the upstream, except it uses a "quiet NaN" + // value instead of "signalling NaN". JavaScript appears to coerce all NaNs + // into quiet ones, but for the purpose of this test either is fine. + + const qnan uint32 = 0x7fc00001 // Originally: 0x7f800001. + type myFloat32 float32 + x := V(myFloat32(math.Float32frombits(qnan))) + y := x.Convert(reflect.TypeOf(float32(0))) + z := y.Interface().(float32) + if got := math.Float32bits(z); got != qnan { + t.Errorf("quiet nan conversion got %x, want %x", got, qnan) + } +} diff --git a/compiler/natives/src/runtime/fastrand.go b/compiler/natives/src/runtime/fastrand.go new file mode 100644 index 000000000..79b377437 --- /dev/null +++ b/compiler/natives/src/runtime/fastrand.go @@ -0,0 +1,14 @@ +//+build js + +package runtime + +import "github.com/gopherjs/gopherjs/js" + +func fastrand() uint32 { + // In the upstream this function is implemented with a + // custom algorithm that uses bit manipulation, but it is likely to be slower + // than calling Math.random(). + // TODO(nevkontakte): We should verify that it actually is faster and has a + // similar distribution. + return uint32(js.Global.Get("Math").Call("random").Float() * (1<<32 - 1)) +} diff --git a/compiler/natives/src/runtime/runtime.go b/compiler/natives/src/runtime/runtime.go index 3239b182f..e568e3188 100644 --- a/compiler/natives/src/runtime/runtime.go +++ b/compiler/natives/src/runtime/runtime.go @@ -12,19 +12,59 @@ const GOOS = sys.GOOS const GOARCH = "js" const Compiler = "gopherjs" -// fake for error.go -type eface struct { - _type *_type -} -type _type struct { - str string +// The Error interface identifies a run time error. +type Error interface { + error + + // RuntimeError is a no-op function but + // serves to distinguish types that are run time + // errors from ordinary errors: a type is a + // run time error if it has a RuntimeError method. + RuntimeError() } -func (t *_type) string() string { - return t.str +// TODO(nevkontakte): In the upstream, this struct is meant to be compatible +// with reflect.rtype, but here we use a minimal stub that satisfies the API +// TypeAssertionError expects, which we dynamically instantiate in $assertType(). +type _type struct{ str string } + +func (t *_type) string() string { return t.str } +func (t *_type) pkgpath() string { return "" } + +// A TypeAssertionError explains a failed type assertion. +type TypeAssertionError struct { + _interface *_type + concrete *_type + asserted *_type + missingMethod string // one method needed by Interface, missing from Concrete } -func (t *_type) pkgpath() string { - return "" + +func (*TypeAssertionError) RuntimeError() {} + +func (e *TypeAssertionError) Error() string { + inter := "interface" + if e._interface != nil { + inter = e._interface.string() + } + as := e.asserted.string() + if e.concrete == nil { + return "interface conversion: " + inter + " is nil, not " + as + } + cs := e.concrete.string() + if e.missingMethod == "" { + msg := "interface conversion: " + inter + " is " + cs + ", not " + as + if cs == as { + // provide slightly clearer error message + if e.concrete.pkgpath() != e.asserted.pkgpath() { + msg += " (types from different packages)" + } else { + msg += " (types from different scopes)" + } + } + return msg + } + return "interface conversion: " + cs + " is not " + as + + ": missing method " + e.missingMethod } func init() { @@ -43,10 +83,10 @@ func GOROOT() string { if process == js.Undefined { return "/" } - if v := process.Get("env").Get("GOPHERJS_GOROOT"); v != js.Undefined { + if v := process.Get("env").Get("GOPHERJS_GOROOT"); v != js.Undefined && v.String() != "" { // GopherJS-specific GOROOT value takes precedence. return v.String() - } else if v := process.Get("env").Get("GOROOT"); v != js.Undefined { + } else if v := process.Get("env").Get("GOROOT"); v != js.Undefined && v.String() != "" { return v.String() } // sys.DefaultGoroot is now gone, can't use it as fallback anymore. @@ -54,30 +94,115 @@ func GOROOT() string { return "/usr/local/go" } -func Breakpoint() { - js.Debugger() +func Breakpoint() { js.Debugger() } + +var ( + // JavaScript runtime doesn't provide access to low-level execution position + // counters, so we emulate them by recording positions we've encountered in + // Caller() and Callers() functions and assigning them arbitrary integer values. + // + // We use the map and the slice below to convert a "file:line" position + // into an integer position counter and then to a Func instance. + knownPositions = map[string]uintptr{} + positionCounters = []*Func{} +) + +func registerPosition(funcName string, file string, line int) uintptr { + key := file + ":" + itoa(line) + if pc, found := knownPositions[key]; found { + return pc + } + f := &Func{ + name: funcName, + file: file, + line: line, + } + pc := uintptr(len(positionCounters)) + positionCounters = append(positionCounters, f) + knownPositions[key] = pc + return pc +} + +// itoa converts an integer to a string. +// +// Can't use strconv.Itoa() in the `runtime` package due to a cyclic dependency. +func itoa(i int) string { + return js.Global.Get("String").New(i).String() +} + +// basicFrame contains stack trace information extracted from JS stack trace. +type basicFrame struct { + FuncName string + File string + Line int +} + +func callstack(skip, limit int) []basicFrame { + skip = skip + 1 /*skip error message*/ + 1 /*skip callstack's own frame*/ + lines := js.Global.Get("Error").New().Get("stack").Call("split", "\n").Call("slice", skip) + frames := []basicFrame{} + l := lines.Get("length").Int() + for i := 0; i < l && i < limit; i++ { + info := lines.Index(i) + pos := info.Call("substring", info.Call("indexOf", "(").Int()+1, info.Call("indexOf", ")").Int()) + parts := pos.Call("split", ":") + + frames = append(frames, basicFrame{ + File: parts.Index(0).String(), + Line: parts.Index(1).Int(), + FuncName: info.Call("substring", info.Call("indexOf", "at ").Int()+3, info.Call("indexOf", " (").Int()).String(), + }) + } + return frames } func Caller(skip int) (pc uintptr, file string, line int, ok bool) { - info := js.Global.Get("Error").New().Get("stack").Call("split", "\n").Index(skip + 2) - if info == js.Undefined { + skip = skip + 1 /*skip Caller's own frame*/ + frames := callstack(skip, 1) + if len(frames) != 1 { return 0, "", 0, false } - parts := info.Call("substring", info.Call("indexOf", "(").Int()+1, info.Call("indexOf", ")").Int()).Call("split", ":") - return 0, parts.Index(0).String(), parts.Index(1).Int(), true + pc = registerPosition(frames[0].FuncName, frames[0].File, frames[0].Line) + return pc, frames[0].File, frames[0].Line, true } func Callers(skip int, pc []uintptr) int { - return 0 + frames := callstack(skip, len(pc)) + for i, frame := range frames { + pc[i] = registerPosition(frame.FuncName, frame.File, frame.Line) + } + return len(frames) } -// CallersFrames is not implemented for GOARCH=js. -// TODO: Implement if possible. -func CallersFrames(callers []uintptr) *Frames { return &Frames{} } +func CallersFrames(callers []uintptr) *Frames { + result := Frames{} + for _, pc := range callers { + fun := FuncForPC(pc) + result.frames = append(result.frames, Frame{ + PC: pc, + Func: fun, + Function: fun.name, + File: fun.file, + Line: fun.line, + Entry: fun.Entry(), + }) + } + return &result +} -type Frames struct{} +type Frames struct { + frames []Frame + current int +} -func (ci *Frames) Next() (frame Frame, more bool) { return } +func (ci *Frames) Next() (frame Frame, more bool) { + if ci.current >= len(ci.frames) { + return Frame{}, false + } + f := ci.frames[ci.current] + ci.current++ + return f, ci.current < len(ci.frames) +} type Frame struct { PC uintptr @@ -88,17 +213,14 @@ type Frame struct { Entry uintptr } -func GC() { -} +func GC() {} func Goexit() { js.Global.Get("$curGoroutine").Set("exit", true) js.Global.Call("$throw", nil) } -func GOMAXPROCS(n int) int { - return 1 -} +func GOMAXPROCS(int) int { return 1 } func Gosched() { c := make(chan struct{}) @@ -106,9 +228,7 @@ func Gosched() { <-c } -func NumCPU() int { - return 1 -} +func NumCPU() int { return 1 } func NumGoroutine() int { return js.Global.Get("$totalGoroutines").Int() @@ -165,21 +285,49 @@ type MemStats struct { } func ReadMemStats(m *MemStats) { + // TODO(nevkontakte): This function is effectively unimplemented and may + // lead to silent unexpected behaviors. Consider panicing explicitly. } func SetFinalizer(x, f interface{}) { + // TODO(nevkontakte): This function is effectively unimplemented and may + // lead to silent unexpected behaviors. Consider panicing explicitly. } type Func struct { + name string + file string + line int + opaque struct{} // unexported field to disallow conversions } -func (_ *Func) Entry() uintptr { return 0 } -func (_ *Func) FileLine(pc uintptr) (file string, line int) { return "", 0 } -func (_ *Func) Name() string { return "" } +func (_ *Func) Entry() uintptr { return 0 } + +func (f *Func) FileLine(pc uintptr) (file string, line int) { + if f == nil { + return "", 0 + } + return f.file, f.line +} +func (f *Func) Name() string { + if f == nil || f.name == "" { + return "" + } + return f.name +} func FuncForPC(pc uintptr) *Func { - return nil + ipc := int(pc) + if ipc >= len(positionCounters) { + // Since we are faking position counters, the only valid way to obtain one + // is through a Caller() or Callers() function. If pc is out of positionCounters + // bounds it must have been obtained in some other way, which is unexpected. + // If a panic proves problematic, we can return a nil *Func, which will + // present itself as a generic "unknown" function. + panic("GopherJS: pc=" + itoa(ipc) + " is out of range of known position counters") + } + return positionCounters[ipc] } var MemProfileRate int = 512 * 1024 @@ -217,20 +365,21 @@ func NumCgoCall() int64 { return 0 } -func efaceOf(ep *interface{}) *eface { - panic("efaceOf: not supported") -} - func KeepAlive(interface{}) {} +// An errorString represents a runtime error described by a single string. +type errorString string + +func (e errorString) RuntimeError() {} + +func (e errorString) Error() string { + return "runtime error: " + string(e) +} + func throw(s string) { panic(errorString(s)) } -// These are used by panicwrap. Not implemented for GOARCH=js. -// TODO: Implement if possible. -func getcallerpc() uintptr { return 0 } -func findfunc(pc uintptr) funcInfo { return funcInfo{} } -func funcname(f funcInfo) string { return "" } - -type funcInfo struct{} +func nanotime() int64 { + return js.Global.Get("Date").New().Call("getTime").Int64() * int64(1000_000) +} diff --git a/compiler/natives/src/sync/atomic/atomic_test.go b/compiler/natives/src/sync/atomic/atomic_test.go index 9ad30a2c7..d2e783ee1 100644 --- a/compiler/natives/src/sync/atomic/atomic_test.go +++ b/compiler/natives/src/sync/atomic/atomic_test.go @@ -7,3 +7,7 @@ import "testing" func TestHammerStoreLoad(t *testing.T) { t.Skip("use of unsafe") } + +func TestUnaligned64(t *testing.T) { + t.Skip("GopherJS emulates atomics, which makes alignment irrelevant.") +} diff --git a/compiler/natives/src/sync/cond_test.go b/compiler/natives/src/sync/cond_test.go new file mode 100644 index 000000000..d81982cef --- /dev/null +++ b/compiler/natives/src/sync/cond_test.go @@ -0,0 +1,9 @@ +//+build js + +package sync_test + +import "testing" + +func TestCondCopy(t *testing.T) { + t.Skip("Copy checker requires raw pointers, which GopherJS doesn't fully support.") +} diff --git a/compiler/natives/src/sync/export_test.go b/compiler/natives/src/sync/export_test.go deleted file mode 100644 index f23a87331..000000000 --- a/compiler/natives/src/sync/export_test.go +++ /dev/null @@ -1,7 +0,0 @@ -// +build js - -package sync - -// Referenced by tests, need to have no-op implementations. -var Runtime_procPin = func() int { return 0 } -var Runtime_procUnpin = func() {} diff --git a/compiler/natives/src/sync/map_test.go b/compiler/natives/src/sync/map_test.go new file mode 100644 index 000000000..6185070c4 --- /dev/null +++ b/compiler/natives/src/sync/map_test.go @@ -0,0 +1,9 @@ +//+build js + +package sync_test + +import "testing" + +func TestIssue40999(t *testing.T) { + t.Skip("test relies on runtime.SetFinalizer, which GopherJS does not implement") +} diff --git a/compiler/natives/src/sync/pool.go b/compiler/natives/src/sync/pool.go index 629010d9e..988b0b1b2 100644 --- a/compiler/natives/src/sync/pool.go +++ b/compiler/natives/src/sync/pool.go @@ -2,12 +2,25 @@ package sync -import "unsafe" - +// A Pool is a set of temporary objects that may be individually saved and +// retrieved. +// +// GopherJS provides a simpler, naive implementation with no synchronization at +// all. This is still correct for the GopherJS runtime because: +// +// 1. JavaScript is single-threaded, so it is impossible for two threads to be +// accessing the pool at the same moment in time. +// 2. GopherJS goroutine implementation uses cooperative multi-tasking model, +// which only allows passing control to other goroutines when the function +// might block. +// +// TODO(nevkontakte): Consider adding a mutex just to be safe if it doesn't +// create a large performance hit. +// +// Note: there is a special handling in the gopherjs/build package that filters +// out all original Pool implementation in order to avoid awkward unused fields +// referenced by dead code. type Pool struct { - local unsafe.Pointer - localSize uintptr - store []interface{} New func() interface{} } @@ -31,5 +44,6 @@ func (p *Pool) Put(x interface{}) { p.store = append(p.store, x) } -func runtime_registerPoolCleanup(cleanup func()) { -} +// These are referenced by tests, but are no-ops in GopherJS runtime. +func runtime_procPin() int { return 0 } +func runtime_procUnpin() {} diff --git a/compiler/natives/src/sync/pool_test.go b/compiler/natives/src/sync/pool_test.go new file mode 100644 index 000000000..3ee407cff --- /dev/null +++ b/compiler/natives/src/sync/pool_test.go @@ -0,0 +1,43 @@ +// +build js + +package sync_test + +import ( + . "sync" + "testing" +) + +func TestPool(t *testing.T) { + var p Pool + if p.Get() != nil { + t.Fatal("expected empty") + } + + p.Put("a") + p.Put("b") + + want := []interface{}{"b", "a", nil} + for i := range want { + got := p.Get() + if got != want[i] { + t.Fatalf("Got: p.Get() returned: %s. Want: %s.", got, want) + } + } + +} + +func TestPoolGC(t *testing.T) { + t.Skip("This test uses runtime.GC(), which GopherJS doesn't support.") +} + +func TestPoolRelease(t *testing.T) { + t.Skip("This test uses runtime.GC(), which GopherJS doesn't support.") +} + +func TestPoolDequeue(t *testing.T) { + t.Skip("This test targets upstream pool implementation, which is not used by GopherJS.") +} + +func TestPoolChain(t *testing.T) { + t.Skip("This test targets upstream pool implementation, which is not used by GopherJS.") +} diff --git a/compiler/natives/src/sync/sync.go b/compiler/natives/src/sync/sync.go index 2ae46e0a6..9d7f71a19 100644 --- a/compiler/natives/src/sync/sync.go +++ b/compiler/natives/src/sync/sync.go @@ -18,13 +18,13 @@ var semWaiters = make(map[*uint32][]chan bool) var semAwoken = make(map[*uint32]uint32) func runtime_Semacquire(s *uint32) { - runtime_SemacquireMutex(s, false) + runtime_SemacquireMutex(s, false, 1) } // SemacquireMutex is like Semacquire, but for profiling contended Mutexes. // Mutex profiling is not supported, so just use the same implementation as runtime_Semacquire. // TODO: Investigate this. If it's possible to implement, consider doing so, otherwise remove this comment. -func runtime_SemacquireMutex(s *uint32, lifo bool) { +func runtime_SemacquireMutex(s *uint32, lifo bool, skipframes int) { if (*s - semAwoken[s]) == 0 { ch := make(chan bool) if lifo { @@ -41,7 +41,7 @@ func runtime_SemacquireMutex(s *uint32, lifo bool) { *s-- } -func runtime_Semrelease(s *uint32, handoff bool) { +func runtime_Semrelease(s *uint32, handoff bool, skipframes int) { // TODO: Use handoff if needed/possible. *s++ diff --git a/compiler/natives/src/sync/sync_test.go b/compiler/natives/src/sync/sync_test.go deleted file mode 100644 index a61bcf3e1..000000000 --- a/compiler/natives/src/sync/sync_test.go +++ /dev/null @@ -1,23 +0,0 @@ -// +build js - -package sync_test - -import ( - "testing" -) - -func TestPool(t *testing.T) { - t.Skip() -} - -func TestPoolGC(t *testing.T) { - t.Skip() -} - -func TestPoolRelease(t *testing.T) { - t.Skip() -} - -func TestCondCopy(t *testing.T) { - t.Skip() -} diff --git a/compiler/natives/src/testing/allocs_test.go b/compiler/natives/src/testing/allocs_test.go new file mode 100644 index 000000000..963e02d1d --- /dev/null +++ b/compiler/natives/src/testing/allocs_test.go @@ -0,0 +1,9 @@ +// +build js + +package testing_test + +import "testing" + +func TestAllocsPerRun(t *testing.T) { + t.Skip("runtime.ReadMemStats() is not supported by GopherJS.") +} diff --git a/compiler/natives/src/testing/helper_test.go b/compiler/natives/src/testing/helper_test.go new file mode 100644 index 000000000..3d6429146 --- /dev/null +++ b/compiler/natives/src/testing/helper_test.go @@ -0,0 +1,3 @@ +// +build js + +package testing diff --git a/compiler/natives/src/testing/sub_test.go b/compiler/natives/src/testing/sub_test.go new file mode 100644 index 000000000..877d53fee --- /dev/null +++ b/compiler/natives/src/testing/sub_test.go @@ -0,0 +1,21 @@ +// +build js + +package testing + +func TestBenchmarkReadMemStatsBeforeFirstRun(t *T) { + t.Skip("runtime.ReadMemStats() is not supported by GopherJS.") +} + +func TestTRun(t *T) { + // TODO(nevkontakte): This test performs string comparisons expecting to find + // sub_test.go in the output, but GopherJS currently reports caller + // locations as "test." due to minimal caller and source map support. + t.Skip("GopherJS doesn't support source maps sufficiently.") +} + +func TestBRun(t *T) { + // TODO(nevkontakte): This test performs string comparisons expecting to find + // sub_test.go in the output, but GopherJS currently reports caller + // locations as "test." due to minimal caller and source map support. + t.Skip("GopherJS doesn't support source maps sufficiently.") +} diff --git a/compiler/natives/src/testing/testing.go b/compiler/natives/src/testing/testing.go deleted file mode 100644 index 392f1f87c..000000000 --- a/compiler/natives/src/testing/testing.go +++ /dev/null @@ -1,26 +0,0 @@ -// +build js - -package testing - -import "runtime" - -// The upstream callerName and frameSkip rely on runtime.Callers, -// and panic if there are zero callers found. However, runtime.Callers -// is not implemented for GopherJS at this time, so we can't use -// that implementation. Use these stubs instead. -func callerName(skip int) string { - // Upstream callerName requires a functional runtime.Callers. - // TODO: Implement if possible. - return "" -} - -func (*common) frameSkip(skip int) runtime.Frame { - _, file, line, ok := runtime.Caller(skip) - if !ok { - return runtime.Frame{} - } - return runtime.Frame{ - File: file, - Line: line, - } -} diff --git a/compiler/natives/src/time/time.go b/compiler/natives/src/time/time.go index e89889775..7457aece3 100644 --- a/compiler/natives/src/time/time.go +++ b/compiler/natives/src/time/time.go @@ -21,27 +21,11 @@ type runtimeTimer struct { period int64 f func(interface{}, uintptr) arg interface{} + seq uintptr timeout *js.Object active bool } -func initLocal() { - d := js.Global.Get("Date").New() - s := d.String() - i := indexByte(s, '(') - j := indexByte(s, ')') - if i == -1 || j == -1 { - localLoc.name = "UTC" - return - } - localLoc.name = s[i+1 : j] - localLoc.zone = []zone{{localLoc.name, d.Call("getTimezoneOffset").Int() * -60, false}} -} - -func runtimeNano() int64 { - return js.Global.Get("Date").New().Call("getTime").Int64() * int64(Millisecond) -} - func now() (sec int64, nsec int32, mono int64) { n := runtimeNano() return n / int64(Second), int32(n % int64(Second)), n @@ -79,6 +63,22 @@ func stopTimer(t *runtimeTimer) bool { return wasActive } +func modTimer(t *runtimeTimer, when, period int64, f func(interface{}, uintptr), arg interface{}, seq uintptr) { + stopTimer(t) + t.when = when + t.period = period + t.f = f + t.arg = arg + t.seq = seq + startTimer(t) +} + +func resetTimer(t *runtimeTimer, when int64) bool { + wasActive := t.active + modTimer(t, when, t.period, t.f, t.arg, t.seq) + return wasActive +} + func forceZipFileForTesting(zipOnly bool) { } diff --git a/compiler/natives/src/time/time_test.go b/compiler/natives/src/time/time_test.go index 410a6358f..11ed7ff0f 100644 --- a/compiler/natives/src/time/time_test.go +++ b/compiler/natives/src/time/time_test.go @@ -9,3 +9,7 @@ import ( func TestSleep(t *testing.T) { t.Skip("time.Now() is not accurate enough for the test") } + +func TestEnvTZUsage(t *testing.T) { + t.Skip("TZ environment variable in not applicable in the browser context.") +} diff --git a/compiler/natives/src/time/zoneinfo_js.go b/compiler/natives/src/time/zoneinfo_js.go new file mode 100644 index 000000000..2df9d5256 --- /dev/null +++ b/compiler/natives/src/time/zoneinfo_js.go @@ -0,0 +1,56 @@ +//+build js + +package time + +import "github.com/gopherjs/gopherjs/js" + +// The code below is based on the upstream zoneinfo_js.go to closer match +// WebAssembly behavior. + +func initLocal() { + localLoc.name = "Local" + + z := zone{} + d := js.Global.Get("Date").New() + offset := d.Call("getTimezoneOffset").Int() * -1 + z.offset = offset * 60 + // According to https://tc39.github.io/ecma262/#sec-timezoneestring, + // the timezone name from (new Date()).toTimeString() is an implementation-dependent + // result, and in Google Chrome, it gives the fully expanded name rather than + // the abbreviation. + // Hence, we construct the name from the offset. + z.name = "UTC" + if offset < 0 { + z.name += "-" + offset *= -1 + } else { + z.name += "+" + } + z.name += itoa(offset / 60) + min := offset % 60 + if min != 0 { + z.name += ":" + itoa(min) + } + localLoc.zone = []zone{z} +} + +// itoa is like strconv.Itoa but only works for values of i in range [0,99]. +// It panics if i is out of range. +func itoa(i int) string { + if i < 10 { + return digits[i : i+1] + } + return smallsString[i*2 : i*2+2] +} + +const smallsString = "00010203040506070809" + + "10111213141516171819" + + "20212223242526272829" + + "30313233343536373839" + + "40414243444546474849" + + "50515253545556575859" + + "60616263646566676869" + + "70717273747576777879" + + "80818283848586878889" + + "90919293949596979899" +const digits = "0123456789" diff --git a/compiler/package.go b/compiler/package.go index f841b145b..37097b7d5 100644 --- a/compiler/package.go +++ b/compiler/package.go @@ -17,6 +17,7 @@ import ( "golang.org/x/tools/go/types/typeutil" ) +// pkgContext maintains compiler context for a specific package. type pkgContext struct { *analysis.Info additionalSelections map[*ast.SelectorExpr]selection @@ -67,9 +68,10 @@ func (sel *fakeSelection) Index() []int { return sel.index } func (sel *fakeSelection) Obj() types.Object { return sel.obj } func (sel *fakeSelection) Type() types.Type { return sel.typ } +// funcContext maintains compiler context for a specific function (lexical scope?). type funcContext struct { *analysis.FuncInfo - p *pkgContext + pkgCtx *pkgContext parent *funcContext sig *types.Signature allVars map[string]int @@ -128,8 +130,23 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor Scopes: make(map[ast.Node]*types.Scope), } - var importError error var errList ErrorList + + // Extract all go:linkname compiler directives from the package source. + goLinknames := []GoLinkname{} + for _, file := range files { + found, err := parseGoLinknames(fileSet, importPath, file) + if err != nil { + if errs, ok := err.(ErrorList); ok { + errList = append(errList, errs...) + } else { + errList = append(errList, err) + } + } + goLinknames = append(goLinknames, found...) + } + + var importError error var previousErr error config := &types.Config{ Importer: packageImporter{ @@ -192,9 +209,9 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor panic(fullName) } pkgInfo := analysis.AnalyzePkg(simplifiedFiles, fileSet, typesInfo, typesPkg, isBlocking) - c := &funcContext{ + funcCtx := &funcContext{ FuncInfo: pkgInfo.InitFuncInfo, - p: &pkgContext{ + pkgCtx: &pkgContext{ Info: pkgInfo, additionalSelections: make(map[*ast.SelectorExpr]selection), @@ -213,7 +230,7 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor labelCases: make(map[*types.Label]int), } for name := range reservedKeywords { - c.allVars[name] = 1 + funcCtx.allVars[name] = 1 } // imports @@ -225,19 +242,19 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor // but now we do it here to maintain previous behavior. continue } - c.p.pkgVars[importedPkg.Path()] = c.newVariableWithLevel(importedPkg.Name(), true) + funcCtx.pkgCtx.pkgVars[importedPkg.Path()] = funcCtx.newVariableWithLevel(importedPkg.Name(), true) importedPaths = append(importedPaths, importedPkg.Path()) } sort.Strings(importedPaths) for _, impPath := range importedPaths { - id := c.newIdent(fmt.Sprintf(`%s.$init`, c.p.pkgVars[impPath]), types.NewSignature(nil, nil, nil, false)) + id := funcCtx.newIdent(fmt.Sprintf(`%s.$init`, funcCtx.pkgCtx.pkgVars[impPath]), types.NewSignature(nil, nil, nil, false)) call := &ast.CallExpr{Fun: id} - c.Blocking[call] = true - c.Flattened[call] = true + funcCtx.Blocking[call] = true + funcCtx.Flattened[call] = true importDecls = append(importDecls, &Decl{ - Vars: []string{c.p.pkgVars[impPath]}, - DeclCode: []byte(fmt.Sprintf("\t%s = $packages[\"%s\"];\n", c.p.pkgVars[impPath], impPath)), - InitCode: c.CatchOutput(1, func() { c.translateStmt(&ast.ExprStmt{X: call}, nil) }), + Vars: []string{funcCtx.pkgCtx.pkgVars[impPath]}, + DeclCode: []byte(fmt.Sprintf("\t%s = $packages[\"%s\"];\n", funcCtx.pkgCtx.pkgVars[impPath], impPath)), + InitCode: funcCtx.CatchOutput(1, func() { funcCtx.translateStmt(&ast.ExprStmt{X: call}, nil) }), }) } @@ -247,7 +264,7 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor for _, decl := range file.Decls { switch d := decl.(type) { case *ast.FuncDecl: - sig := c.p.Defs[d.Name].(*types.Func).Type().(*types.Signature) + sig := funcCtx.pkgCtx.Defs[d.Name].(*types.Func).Type().(*types.Signature) var recvType types.Type if sig.Recv() != nil { recvType = sig.Recv().Type() @@ -256,7 +273,7 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor } } if sig.Recv() == nil { - c.objectName(c.p.Defs[d.Name].(*types.Func)) // register toplevel name + funcCtx.objectName(funcCtx.pkgCtx.Defs[d.Name].(*types.Func)) // register toplevel name } if !isBlank(d.Name) { functions = append(functions, d) @@ -265,17 +282,17 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor switch d.Tok { case token.TYPE: for _, spec := range d.Specs { - o := c.p.Defs[spec.(*ast.TypeSpec).Name].(*types.TypeName) - c.p.typeNames = append(c.p.typeNames, o) - c.objectName(o) // register toplevel name + o := funcCtx.pkgCtx.Defs[spec.(*ast.TypeSpec).Name].(*types.TypeName) + funcCtx.pkgCtx.typeNames = append(funcCtx.pkgCtx.typeNames, o) + funcCtx.objectName(o) // register toplevel name } case token.VAR: for _, spec := range d.Specs { for _, name := range spec.(*ast.ValueSpec).Names { if !isBlank(name) { - o := c.p.Defs[name].(*types.Var) + o := funcCtx.pkgCtx.Defs[name].(*types.Var) vars = append(vars, o) - c.objectName(o) // register toplevel name + funcCtx.objectName(o) // register toplevel name } } } @@ -287,10 +304,10 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor } collectDependencies := func(f func()) []string { - c.p.dependencies = make(map[types.Object]bool) + funcCtx.pkgCtx.dependencies = make(map[types.Object]bool) f() var deps []string - for o := range c.p.dependencies { + for o := range funcCtx.pkgCtx.dependencies { qualifiedName := o.Pkg().Path() + "." + o.Name() if f, ok := o.(*types.Func); ok && f.Type().(*types.Signature).Recv() != nil { deps = append(deps, qualifiedName+"~") @@ -305,7 +322,7 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor // variables var varDecls []*Decl varsWithInit := make(map[*types.Var]bool) - for _, init := range c.p.InitOrder { + for _, init := range funcCtx.pkgCtx.InitOrder { for _, o := range init.Lhs { varsWithInit[o] = true } @@ -313,41 +330,41 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor for _, o := range vars { var d Decl if !o.Exported() { - d.Vars = []string{c.objectName(o)} + d.Vars = []string{funcCtx.objectName(o)} } - if c.p.HasPointer[o] && !o.Exported() { - d.Vars = append(d.Vars, c.varPtrName(o)) + if funcCtx.pkgCtx.HasPointer[o] && !o.Exported() { + d.Vars = append(d.Vars, funcCtx.varPtrName(o)) } if _, ok := varsWithInit[o]; !ok { d.DceDeps = collectDependencies(func() { - d.InitCode = []byte(fmt.Sprintf("\t\t%s = %s;\n", c.objectName(o), c.translateExpr(c.zeroValue(o.Type())).String())) + d.InitCode = []byte(fmt.Sprintf("\t\t%s = %s;\n", funcCtx.objectName(o), funcCtx.translateExpr(funcCtx.zeroValue(o.Type())).String())) }) } d.DceObjectFilter = o.Name() varDecls = append(varDecls, &d) } - for _, init := range c.p.InitOrder { + for _, init := range funcCtx.pkgCtx.InitOrder { lhs := make([]ast.Expr, len(init.Lhs)) for i, o := range init.Lhs { ident := ast.NewIdent(o.Name()) - c.p.Defs[ident] = o - lhs[i] = c.setType(ident, o.Type()) + funcCtx.pkgCtx.Defs[ident] = o + lhs[i] = funcCtx.setType(ident, o.Type()) varsWithInit[o] = true } var d Decl d.DceDeps = collectDependencies(func() { - c.localVars = nil - d.InitCode = c.CatchOutput(1, func() { - c.translateStmt(&ast.AssignStmt{ + funcCtx.localVars = nil + d.InitCode = funcCtx.CatchOutput(1, func() { + funcCtx.translateStmt(&ast.AssignStmt{ Lhs: lhs, Tok: token.DEFINE, Rhs: []ast.Expr{init.Rhs}, }, nil) }) - d.Vars = append(d.Vars, c.localVars...) + d.Vars = append(d.Vars, funcCtx.localVars...) }) if len(init.Lhs) == 1 { - if !analysis.HasSideEffect(init.Rhs, c.p.Info.Info) { + if !analysis.HasSideEffect(init.Rhs, funcCtx.pkgCtx.Info.Info) { d.DceObjectFilter = init.Lhs[0].Name() } } @@ -358,28 +375,29 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor var funcDecls []*Decl var mainFunc *types.Func for _, fun := range functions { - o := c.p.Defs[fun.Name].(*types.Func) - funcInfo := c.p.FuncDeclInfos[o] + o := funcCtx.pkgCtx.Defs[fun.Name].(*types.Func) + funcInfo := funcCtx.pkgCtx.FuncDeclInfos[o] d := Decl{ FullName: o.FullName(), Blocking: len(funcInfo.Blocking) != 0, } if fun.Recv == nil { - d.Vars = []string{c.objectName(o)} + d.LinkingName = newSymName(o) + d.Vars = []string{funcCtx.objectName(o)} d.DceObjectFilter = o.Name() switch o.Name() { case "main": mainFunc = o d.DceObjectFilter = "" case "init": - d.InitCode = c.CatchOutput(1, func() { - id := c.newIdent("", types.NewSignature(nil, nil, nil, false)) - c.p.Uses[id] = o + d.InitCode = funcCtx.CatchOutput(1, func() { + id := funcCtx.newIdent("", types.NewSignature(nil, nil, nil, false)) + funcCtx.pkgCtx.Uses[id] = o call := &ast.CallExpr{Fun: id} - if len(c.p.FuncDeclInfos[o].Blocking) != 0 { - c.Blocking[call] = true + if len(funcCtx.pkgCtx.FuncDeclInfos[o].Blocking) != 0 { + funcCtx.Blocking[call] = true } - c.translateStmt(&ast.ExprStmt{X: call}, nil) + funcCtx.translateStmt(&ast.ExprStmt{X: call}, nil) }) d.DceObjectFilter = "" } @@ -398,7 +416,7 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor } d.DceDeps = collectDependencies(func() { - d.DeclCode = c.translateToplevelFunction(fun, funcInfo) + d.DeclCode = funcCtx.translateToplevelFunction(fun, funcInfo) }) funcDecls = append(funcDecls, &d) } @@ -406,47 +424,47 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor if mainFunc == nil { return nil, fmt.Errorf("missing main function") } - id := c.newIdent("", types.NewSignature(nil, nil, nil, false)) - c.p.Uses[id] = mainFunc + id := funcCtx.newIdent("", types.NewSignature(nil, nil, nil, false)) + funcCtx.pkgCtx.Uses[id] = mainFunc call := &ast.CallExpr{Fun: id} ifStmt := &ast.IfStmt{ - Cond: c.newIdent("$pkg === $mainPkg", types.Typ[types.Bool]), + Cond: funcCtx.newIdent("$pkg === $mainPkg", types.Typ[types.Bool]), Body: &ast.BlockStmt{ List: []ast.Stmt{ &ast.ExprStmt{X: call}, &ast.AssignStmt{ - Lhs: []ast.Expr{c.newIdent("$mainFinished", types.Typ[types.Bool])}, + Lhs: []ast.Expr{funcCtx.newIdent("$mainFinished", types.Typ[types.Bool])}, Tok: token.ASSIGN, - Rhs: []ast.Expr{c.newConst(types.Typ[types.Bool], constant.MakeBool(true))}, + Rhs: []ast.Expr{funcCtx.newConst(types.Typ[types.Bool], constant.MakeBool(true))}, }, }, }, } - if len(c.p.FuncDeclInfos[mainFunc].Blocking) != 0 { - c.Blocking[call] = true - c.Flattened[ifStmt] = true + if len(funcCtx.pkgCtx.FuncDeclInfos[mainFunc].Blocking) != 0 { + funcCtx.Blocking[call] = true + funcCtx.Flattened[ifStmt] = true } funcDecls = append(funcDecls, &Decl{ - InitCode: c.CatchOutput(1, func() { - c.translateStmt(ifStmt, nil) + InitCode: funcCtx.CatchOutput(1, func() { + funcCtx.translateStmt(ifStmt, nil) }), }) } // named types var typeDecls []*Decl - for _, o := range c.p.typeNames { + for _, o := range funcCtx.pkgCtx.typeNames { if o.IsAlias() { continue } - typeName := c.objectName(o) + typeName := funcCtx.objectName(o) d := Decl{ Vars: []string{typeName}, DceObjectFilter: o.Name(), } d.DceDeps = collectDependencies(func() { - d.DeclCode = c.CatchOutput(0, func() { - typeName := c.objectName(o) + d.DeclCode = funcCtx.CatchOutput(0, func() { + typeName := funcCtx.objectName(o) lhs := typeName if isPkgLevel(o) { lhs += " = $pkg." + encodeIdent(o.Name()) @@ -461,7 +479,7 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor } constructor = fmt.Sprintf("function(%s) {\n\t\tthis.$val = this;\n\t\tif (arguments.length === 0) {\n", strings.Join(params, ", ")) for i := 0; i < t.NumFields(); i++ { - constructor += fmt.Sprintf("\t\t\tthis.%s = %s;\n", fieldName(t, i), c.translateExpr(c.zeroValue(t.Field(i).Type())).String()) + constructor += fmt.Sprintf("\t\t\tthis.%s = %s;\n", fieldName(t, i), funcCtx.translateExpr(funcCtx.zeroValue(t.Field(i).Type())).String()) } constructor += "\t\t\treturn;\n\t\t}\n" for i := 0; i < t.NumFields(); i++ { @@ -471,9 +489,9 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor case *types.Basic, *types.Array, *types.Slice, *types.Chan, *types.Signature, *types.Interface, *types.Pointer, *types.Map: size = sizes32.Sizeof(t) } - c.Printf(`%s = $newType(%d, %s, "%s.%s", %t, "%s", %t, %s);`, lhs, size, typeKind(o.Type()), o.Pkg().Name(), o.Name(), o.Name() != "", o.Pkg().Path(), o.Exported(), constructor) + funcCtx.Printf(`%s = $newType(%d, %s, "%s.%s", %t, "%s", %t, %s);`, lhs, size, typeKind(o.Type()), o.Pkg().Name(), o.Name(), o.Name() != "", o.Pkg().Path(), o.Exported(), constructor) }) - d.MethodListCode = c.CatchOutput(0, func() { + d.MethodListCode = funcCtx.CatchOutput(0, func() { named := o.Type().(*types.Named) if _, ok := named.Underlying().(*types.Interface); ok { return @@ -491,7 +509,7 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor pkgPath = method.Pkg().Path() } t := method.Type().(*types.Signature) - entry := fmt.Sprintf(`{prop: "%s", name: %s, pkg: "%s", typ: $funcType(%s)}`, name, encodeString(method.Name()), pkgPath, c.initArgs(t)) + entry := fmt.Sprintf(`{prop: "%s", name: %s, pkg: "%s", typ: $funcType(%s)}`, name, encodeString(method.Name()), pkgPath, funcCtx.initArgs(t)) if _, isPtr := t.Recv().Type().(*types.Pointer); isPtr { ptrMethods = append(ptrMethods, entry) continue @@ -499,16 +517,16 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor methods = append(methods, entry) } if len(methods) > 0 { - c.Printf("%s.methods = [%s];", c.typeName(named), strings.Join(methods, ", ")) + funcCtx.Printf("%s.methods = [%s];", funcCtx.typeName(named), strings.Join(methods, ", ")) } if len(ptrMethods) > 0 { - c.Printf("%s.methods = [%s];", c.typeName(types.NewPointer(named)), strings.Join(ptrMethods, ", ")) + funcCtx.Printf("%s.methods = [%s];", funcCtx.typeName(types.NewPointer(named)), strings.Join(ptrMethods, ", ")) } }) switch t := o.Type().Underlying().(type) { case *types.Array, *types.Chan, *types.Interface, *types.Map, *types.Pointer, *types.Slice, *types.Signature, *types.Struct: - d.TypeInitCode = c.CatchOutput(0, func() { - c.Printf("%s.init(%s);", c.objectName(o), c.initArgs(t)) + d.TypeInitCode = funcCtx.CatchOutput(0, func() { + funcCtx.Printf("%s.init(%s);", funcCtx.objectName(o), funcCtx.initArgs(t)) }) } }) @@ -516,13 +534,13 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor } // anonymous types - for _, t := range c.p.anonTypes { + for _, t := range funcCtx.pkgCtx.anonTypes { d := Decl{ Vars: []string{t.Name()}, DceObjectFilter: t.Name(), } d.DceDeps = collectDependencies(func() { - d.DeclCode = []byte(fmt.Sprintf("\t%s = $%sType(%s);\n", t.Name(), strings.ToLower(typeKind(t.Type())[5:]), c.initArgs(t.Type()))) + d.DeclCode = []byte(fmt.Sprintf("\t%s = $%sType(%s);\n", t.Name(), strings.ToLower(typeKind(t.Type())[5:]), funcCtx.initArgs(t.Type()))) }) typeDecls = append(typeDecls, &d) } @@ -536,8 +554,8 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor allDecls = append(allDecls, d) } - if len(c.p.errList) != 0 { - return nil, c.p.errList + if len(funcCtx.pkgCtx.errList) != 0 { + return nil, funcCtx.pkgCtx.errList } return &Archive{ @@ -548,15 +566,16 @@ func Compile(importPath string, files []*ast.File, fileSet *token.FileSet, impor Declarations: allDecls, FileSet: encodedFileSet.Bytes(), Minified: minify, + GoLinknames: goLinknames, }, nil } -func (c *funcContext) initArgs(ty types.Type) string { +func (fc *funcContext) initArgs(ty types.Type) string { switch t := ty.(type) { case *types.Array: - return fmt.Sprintf("%s, %d", c.typeName(t.Elem()), t.Len()) + return fmt.Sprintf("%s, %d", fc.typeName(t.Elem()), t.Len()) case *types.Chan: - return fmt.Sprintf("%s, %t, %t", c.typeName(t.Elem()), t.Dir()&types.SendOnly != 0, t.Dir()&types.RecvOnly != 0) + return fmt.Sprintf("%s, %t, %t", fc.typeName(t.Elem()), t.Dir()&types.SendOnly != 0, t.Dir()&types.RecvOnly != 0) case *types.Interface: methods := make([]string, t.NumMethods()) for i := range methods { @@ -565,23 +584,23 @@ func (c *funcContext) initArgs(ty types.Type) string { if !method.Exported() { pkgPath = method.Pkg().Path() } - methods[i] = fmt.Sprintf(`{prop: "%s", name: "%s", pkg: "%s", typ: $funcType(%s)}`, method.Name(), method.Name(), pkgPath, c.initArgs(method.Type())) + methods[i] = fmt.Sprintf(`{prop: "%s", name: "%s", pkg: "%s", typ: $funcType(%s)}`, method.Name(), method.Name(), pkgPath, fc.initArgs(method.Type())) } return fmt.Sprintf("[%s]", strings.Join(methods, ", ")) case *types.Map: - return fmt.Sprintf("%s, %s", c.typeName(t.Key()), c.typeName(t.Elem())) + return fmt.Sprintf("%s, %s", fc.typeName(t.Key()), fc.typeName(t.Elem())) case *types.Pointer: - return fmt.Sprintf("%s", c.typeName(t.Elem())) + return fmt.Sprintf("%s", fc.typeName(t.Elem())) case *types.Slice: - return fmt.Sprintf("%s", c.typeName(t.Elem())) + return fmt.Sprintf("%s", fc.typeName(t.Elem())) case *types.Signature: params := make([]string, t.Params().Len()) for i := range params { - params[i] = c.typeName(t.Params().At(i).Type()) + params[i] = fc.typeName(t.Params().At(i).Type()) } results := make([]string, t.Results().Len()) for i := range results { - results[i] = c.typeName(t.Results().At(i).Type()) + results[i] = fc.typeName(t.Results().At(i).Type()) } return fmt.Sprintf("[%s], [%s], %t", strings.Join(params, ", "), strings.Join(results, ", "), t.Variadic()) case *types.Struct: @@ -592,7 +611,7 @@ func (c *funcContext) initArgs(ty types.Type) string { if !field.Exported() { pkgPath = field.Pkg().Path() } - fields[i] = fmt.Sprintf(`{prop: "%s", name: %s, embedded: %t, exported: %t, typ: %s, tag: %s}`, fieldName(t, i), encodeString(field.Name()), field.Anonymous(), field.Exported(), c.typeName(field.Type()), encodeString(t.Tag(i))) + fields[i] = fmt.Sprintf(`{prop: "%s", name: %s, embedded: %t, exported: %t, typ: %s, tag: %s}`, fieldName(t, i), encodeString(field.Name()), field.Anonymous(), field.Exported(), fc.typeName(field.Type()), encodeString(t.Tag(i))) } return fmt.Sprintf(`"%s", [%s]`, pkgPath, strings.Join(fields, ", ")) default: @@ -600,8 +619,8 @@ func (c *funcContext) initArgs(ty types.Type) string { } } -func (c *funcContext) translateToplevelFunction(fun *ast.FuncDecl, info *analysis.FuncInfo) []byte { - o := c.p.Defs[fun.Name].(*types.Func) +func (fc *funcContext) translateToplevelFunction(fun *ast.FuncDecl, info *analysis.FuncInfo) []byte { + o := fc.pkgCtx.Defs[fun.Name].(*types.Func) sig := o.Type().(*types.Signature) var recv *ast.Ident if fun.Recv != nil && fun.Recv.List[0].Names != nil { @@ -614,7 +633,7 @@ func (c *funcContext) translateToplevelFunction(fun *ast.FuncDecl, info *analysi return []byte(fmt.Sprintf("\t%s = function() {\n\t\t$throwRuntimeError(\"native function not implemented: %s\");\n\t};\n", funcRef, o.FullName())) } - params, fun := translateFunction(fun.Type, recv, fun.Body, c, sig, info, funcRef) + params, fun := translateFunction(fun.Type, recv, fun.Body, fc, sig, info, funcRef) joinedParams = strings.Join(params, ", ") return []byte(fmt.Sprintf("\t%s = %s;\n", funcRef, fun)) } @@ -622,7 +641,7 @@ func (c *funcContext) translateToplevelFunction(fun *ast.FuncDecl, info *analysi code := bytes.NewBuffer(nil) if fun.Recv == nil { - funcRef := c.objectName(o) + funcRef := fc.objectName(o) code.Write(primaryFunction(funcRef)) if fun.Name.IsExported() { fmt.Fprintf(code, "\t$pkg.%s = %s;\n", encodeIdent(fun.Name.Name), funcRef) @@ -636,7 +655,7 @@ func (c *funcContext) translateToplevelFunction(fun *ast.FuncDecl, info *analysi if isPointer { namedRecvType = ptr.Elem().(*types.Named) } - typeName := c.objectName(namedRecvType.Obj()) + typeName := fc.objectName(namedRecvType.Obj()) funName := fun.Name.Name if reservedKeywords[funName] { funName += "$" @@ -673,7 +692,7 @@ func translateFunction(typ *ast.FuncType, recv *ast.Ident, body *ast.BlockStmt, c := &funcContext{ FuncInfo: info, - p: outerContext.p, + pkgCtx: outerContext.pkgCtx, parent: outerContext, sig: sig, allVars: make(map[string]int, len(outerContext.allVars)), @@ -685,7 +704,7 @@ func translateFunction(typ *ast.FuncType, recv *ast.Ident, body *ast.BlockStmt, for k, v := range outerContext.allVars { c.allVars[k] = v } - prevEV := c.p.escapingVars + prevEV := c.pkgCtx.escapingVars var params []string for _, param := range typ.Params.List { @@ -698,13 +717,13 @@ func translateFunction(typ *ast.FuncType, recv *ast.Ident, body *ast.BlockStmt, params = append(params, c.newVariable("param")) continue } - params = append(params, c.objectName(c.p.Defs[ident])) + params = append(params, c.objectName(c.pkgCtx.Defs[ident])) } } bodyOutput := string(c.CatchOutput(1, func() { if len(c.Blocking) != 0 { - c.p.Scopes[body] = c.p.Scopes[typ] + c.pkgCtx.Scopes[body] = c.pkgCtx.Scopes[typ] c.handleEscapingVars(body) } @@ -714,14 +733,14 @@ func translateFunction(typ *ast.FuncType, recv *ast.Ident, body *ast.BlockStmt, result := c.sig.Results().At(i) c.Printf("%s = %s;", c.objectName(result), c.translateExpr(c.zeroValue(result.Type())).String()) id := ast.NewIdent("") - c.p.Uses[id] = result + c.pkgCtx.Uses[id] = result c.resultNames[i] = c.setType(id, result.Type()) } } if recv != nil && !isBlank(recv) { this := "this" - if isWrapped(c.p.TypeOf(recv)) { + if isWrapped(c.pkgCtx.TypeOf(recv)) { this = "this.$val" } c.Printf("%s = %s;", c.translateExpr(recv), this) @@ -794,16 +813,16 @@ func translateFunction(typ *ast.FuncType, recv *ast.Ident, body *ast.BlockStmt, } if prefix != "" { - bodyOutput = strings.Repeat("\t", c.p.indentation+1) + "/* */" + prefix + "\n" + bodyOutput + bodyOutput = strings.Repeat("\t", c.pkgCtx.indentation+1) + "/* */" + prefix + "\n" + bodyOutput } if suffix != "" { - bodyOutput = bodyOutput + strings.Repeat("\t", c.p.indentation+1) + "/* */" + suffix + "\n" + bodyOutput = bodyOutput + strings.Repeat("\t", c.pkgCtx.indentation+1) + "/* */" + suffix + "\n" } if len(c.localVars) != 0 { - bodyOutput = fmt.Sprintf("%svar %s;\n", strings.Repeat("\t", c.p.indentation+1), strings.Join(c.localVars, ", ")) + bodyOutput + bodyOutput = fmt.Sprintf("%svar %s;\n", strings.Repeat("\t", c.pkgCtx.indentation+1), strings.Join(c.localVars, ", ")) + bodyOutput } - c.p.escapingVars = prevEV + c.pkgCtx.escapingVars = prevEV - return params, fmt.Sprintf("function%s(%s) {\n%s%s}", functionName, strings.Join(params, ", "), bodyOutput, strings.Repeat("\t", c.p.indentation)) + return params, fmt.Sprintf("function%s(%s) {\n%s%s}", functionName, strings.Join(params, ", "), bodyOutput, strings.Repeat("\t", c.pkgCtx.indentation)) } diff --git a/compiler/prelude/goroutines.go b/compiler/prelude/goroutines.go index d9780b65d..0b238ed74 100644 --- a/compiler/prelude/goroutines.go +++ b/compiler/prelude/goroutines.go @@ -83,7 +83,11 @@ var $callDeferred = function(deferred, jsErr, fromPanic) { } if (localPanicValue !== undefined && $panicStackDepth === null) { - throw null; /* error was recovered */ + /* error was recovered */ + if (fromPanic) { + throw null; + } + return; } } } finally { diff --git a/compiler/prelude/prelude.go b/compiler/prelude/prelude.go index c27601e88..3c3323368 100644 --- a/compiler/prelude/prelude.go +++ b/compiler/prelude/prelude.go @@ -25,7 +25,7 @@ if ($global === undefined || $global.Array === undefined) { if (typeof module !== "undefined") { $module = module; } - +var $linknames = {} // Collection of functions referenced by a go:linkname directive. var $packages = {}, $idCounter = 0; var $keys = function(m) { return m ? Object.keys(m) : []; }; var $flushConsole = function() {}; @@ -34,6 +34,27 @@ var $throwNilPointerError = function() { $throwRuntimeError("invalid memory addr var $call = function(fn, rcvr, args) { return fn.apply(rcvr, args); }; var $makeFunc = function(fn) { return function() { return $externalize(fn(this, new ($sliceType($jsObjectPtr))($global.Array.prototype.slice.call(arguments, []))), $emptyInterface); }; }; var $unused = function(v) {}; +var $print = console.log; +// Under Node we can emulate print() more closely by avoiding a newline. +if (($global.process !== undefined) && $global.require) { + try { + var util = $global.require('util'); + $print = function() { $global.process.stderr.write(util.format.apply(this, arguments)); }; + } catch (e) { + // Failed to require util module, keep using console.log(). + } +} +var $println = console.log + +var $initAllLinknames = function() { + var names = $keys($packages); + for (var i = 0; i < names.length; i++) { + var f = $packages[names[i]]["$initLinknames"]; + if (typeof f == 'function') { + f(); + } + } +} var $mapArray = function(array, f) { var newArray = new array.constructor(array.length); diff --git a/compiler/prelude/prelude_min.go b/compiler/prelude/prelude_min.go index 0918ffa0b..91d0be98a 100644 --- a/compiler/prelude/prelude_min.go +++ b/compiler/prelude/prelude_min.go @@ -3,4 +3,4 @@ package prelude // Minified is an uglifyjs-minified version of Prelude. -const Minified = "var $global,$module;if(Error.stackTraceLimit=1/0,\"undefined\"!=typeof window?$global=window:\"undefined\"!=typeof self?$global=self:\"undefined\"!=typeof global?($global=global).require=require:$global=this,void 0===$global||void 0===$global.Array)throw new Error(\"no global object found\");\"undefined\"!=typeof module&&($module=module);var $throwRuntimeError,$packages={},$idCounter=0,$keys=function(e){return e?Object.keys(e):[]},$flushConsole=function(){},$throwNilPointerError=function(){$throwRuntimeError(\"invalid memory address or nil pointer dereference\")},$call=function(e,n,r){return e.apply(n,r)},$makeFunc=function(e){return function(){return $externalize(e(this,new($sliceType($jsObjectPtr))($global.Array.prototype.slice.call(arguments,[]))),$emptyInterface)}},$unused=function(e){},$mapArray=function(e,n){for(var r=new e.constructor(e.length),t=0;te.$capacity||t>e.$capacity)&&$throwRuntimeError(\"slice bounds out of range\"),e===e.constructor.nil)return e;var i=new e.constructor(e.$array);return i.$offset=e.$offset+n,i.$length=r-n,i.$capacity=t-n,i},$substring=function(e,n,r){return(n<0||re.length)&&$throwRuntimeError(\"slice bounds out of range\"),e.substring(n,r)},$sliceToArray=function(e){return e.$array.constructor!==Array?e.$array.subarray(e.$offset,e.$offset+e.$length):e.$array.slice(e.$offset,e.$offset+e.$length)},$decodeRune=function(e,n){var r=e.charCodeAt(n);if(r<128)return[r,1];if(r!=r||r<192)return[65533,1];var t=e.charCodeAt(n+1);if(t!=t||t<128||192<=t)return[65533,1];if(r<224)return(a=(31&r)<<6|63&t)<=127?[65533,1]:[a,2];var i=e.charCodeAt(n+2);if(i!=i||i<128||192<=i)return[65533,1];if(r<240)return(a=(15&r)<<12|(63&t)<<6|63&i)<=2047?[65533,1]:55296<=a&&a<=57343?[65533,1]:[a,3];var a,o=e.charCodeAt(n+3);return o!=o||o<128||192<=o?[65533,1]:r<248?(a=(7&r)<<18|(63&t)<<12|(63&i)<<6|63&o)<=65535||11141111114111||55296<=e&&e<=57343)&&(e=65533),e<=127?String.fromCharCode(e):e<=2047?String.fromCharCode(192|e>>6,128|63&e):e<=65535?String.fromCharCode(224|e>>12,128|e>>6&63,128|63&e):String.fromCharCode(240|e>>18,128|e>>12&63,128|e>>6&63,128|63&e)},$stringToBytes=function(e){for(var n=new Uint8Array(e.length),r=0;rt){for(var o=i-1;o>=0;o--)a.copy(e[r+o],n[t+o]);return}for(o=0;ot)for(o=i-1;o>=0;o--)e[r+o]=n[t+o];else for(o=0;o$)if(a=0,$=Math.max(o,e.$capacity<1024?2*e.$capacity:Math.floor(5*e.$capacity/4)),e.$array.constructor===Array){(i=e.$array.slice(e.$offset,e.$offset+e.$length)).length=$;for(var c=e.constructor.elem.zero,u=e.$length;u<$;u++)i[u]=c()}else(i=new e.$array.constructor($)).set(e.$array.subarray(e.$offset,e.$offset+e.$length));$copyArray(i,n,a+e.$length,r,t,e.constructor.elem);var l=new e.constructor(i);return l.$offset=a,l.$length=o,l.$capacity=$,l},$equal=function(e,n,r){if(r===$jsObjectPtr)return e===n;switch(r.kind){case $kindComplex64:case $kindComplex128:return e.$real===n.$real&&e.$imag===n.$imag;case $kindInt64:case $kindUint64:return e.$high===n.$high&&e.$low===n.$low;case $kindArray:if(e.length!==n.length)return!1;for(var t=0;t>>16&65535)*t+r*(n>>>16&65535)<<16>>>0)>>0},$floatKey=function(e){return e!=e?\"NaN$\"+ ++$idCounter:String(e)},$flatten64=function(e){return 4294967296*e.$high+e.$low},$shiftLeft64=function(e,n){return 0===n?e:n<32?new e.constructor(e.$high<>>32-n,e.$low<>>0):n<64?new e.constructor(e.$low<>n,(e.$low>>>n|e.$high<<32-n)>>>0):n<64?new e.constructor(e.$high>>31,e.$high>>n-32>>>0):e.$high<0?new e.constructor(-1,4294967295):new e.constructor(0,0)},$shiftRightUint64=function(e,n){return 0===n?e:n<32?new e.constructor(e.$high>>>n,(e.$low>>>n|e.$high<<32-n)>>>0):n<64?new e.constructor(0,e.$high>>>n-32):new e.constructor(0,0)},$mul64=function(e,n){var r=0,t=0;0!=(1&n.$low)&&(r=e.$high,t=e.$low);for(var i=1;i<32;i++)0!=(n.$low&1<>>32-i,t+=e.$low<>>0);for(i=0;i<32;i++)0!=(n.$high&1<$||a===$&&o>c);)$=($<<1|c>>>31)>>>0,c=c<<1>>>0,s++;for(var f=0;f<=s;f++)u=u<<1|l>>>31,l=l<<1>>>0,(a>$||a===$&&o>=c)&&(a-=$,(o-=c)<0&&(a--,o+=4294967296),4294967296===++l&&(u++,l=0)),c=(c>>>1|$<<31)>>>0,$>>>=1;return r?new e.constructor(a*i,o*i):new e.constructor(u*t,l*t)},$divComplex=function(e,n){var r=e.$real===1/0||e.$real===-1/0||e.$imag===1/0||e.$imag===-1/0,t=n.$real===1/0||n.$real===-1/0||n.$imag===1/0||n.$imag===-1/0,i=!r&&(e.$real!=e.$real||e.$imag!=e.$imag),a=!t&&(n.$real!=n.$real||n.$imag!=n.$imag);if(i||a)return new e.constructor(NaN,NaN);if(r&&!t)return new e.constructor(1/0,1/0);if(!r&&t)return new e.constructor(0,0);if(0===n.$real&&0===n.$imag)return 0===e.$real&&0===e.$imag?new e.constructor(NaN,NaN):new e.constructor(1/0,1/0);if(Math.abs(n.$real)<=Math.abs(n.$imag)){var o=n.$real/n.$imag,$=n.$real*o+n.$imag;return new e.constructor((e.$real*o+e.$imag)/$,(e.$imag*o-e.$real)/$)}o=n.$imag/n.$real,$=n.$imag*o+n.$real;return new e.constructor((e.$imag*o+e.$real)/$,(e.$imag-e.$real*o)/$)},$kindBool=1,$kindInt=2,$kindInt8=3,$kindInt16=4,$kindInt32=5,$kindInt64=6,$kindUint=7,$kindUint8=8,$kindUint16=9,$kindUint32=10,$kindUint64=11,$kindUintptr=12,$kindFloat32=13,$kindFloat64=14,$kindComplex64=15,$kindComplex128=16,$kindArray=17,$kindChan=18,$kindFunc=19,$kindInterface=20,$kindMap=21,$kindPtr=22,$kindSlice=23,$kindString=24,$kindStruct=25,$kindUnsafePointer=26,$methodSynthesizers=[],$addMethodSynthesizer=function(e){null!==$methodSynthesizers?$methodSynthesizers.push(e):e()},$synthesizeMethods=function(){$methodSynthesizers.forEach(function(e){e()}),$methodSynthesizers=null},$ifaceKeyFor=function(e){if(e===$ifaceNil)return\"nil\";var n=e.constructor;return n.string+\"$\"+n.keyFor(e.$val)},$identity=function(e){return e},$typeIDCounter=0,$idKey=function(e){return void 0===e.$id&&($idCounter++,e.$id=$idCounter),String(e.$id)},$newType=function(e,n,r,t,i,a,o){var $;switch(n){case $kindBool:case $kindInt:case $kindInt8:case $kindInt16:case $kindInt32:case $kindUint:case $kindUint8:case $kindUint16:case $kindUint32:case $kindUintptr:case $kindUnsafePointer:($=function(e){this.$val=e}).wrapped=!0,$.keyFor=$identity;break;case $kindString:($=function(e){this.$val=e}).wrapped=!0,$.keyFor=function(e){return\"$\"+e};break;case $kindFloat32:case $kindFloat64:($=function(e){this.$val=e}).wrapped=!0,$.keyFor=function(e){return $floatKey(e)};break;case $kindInt64:($=function(e,n){this.$high=e+Math.floor(Math.ceil(n)/4294967296)>>0,this.$low=n>>>0,this.$val=this}).keyFor=function(e){return e.$high+\"$\"+e.$low};break;case $kindUint64:($=function(e,n){this.$high=e+Math.floor(Math.ceil(n)/4294967296)>>>0,this.$low=n>>>0,this.$val=this}).keyFor=function(e){return e.$high+\"$\"+e.$low};break;case $kindComplex64:($=function(e,n){this.$real=$fround(e),this.$imag=$fround(n),this.$val=this}).keyFor=function(e){return e.$real+\"$\"+e.$imag};break;case $kindComplex128:($=function(e,n){this.$real=e,this.$imag=n,this.$val=this}).keyFor=function(e){return e.$real+\"$\"+e.$imag};break;case $kindArray:($=function(e){this.$val=e}).wrapped=!0,$.ptr=$newType(4,$kindPtr,\"*\"+r,!1,\"\",!1,function(e){this.$get=function(){return e},this.$set=function(e){$.copy(this,e)},this.$val=e}),$.init=function(e,n){$.elem=e,$.len=n,$.comparable=e.comparable,$.keyFor=function(n){return Array.prototype.join.call($mapArray(n,function(n){return String(e.keyFor(n)).replace(/\\\\/g,\"\\\\\\\\\").replace(/\\$/g,\"\\\\$\")}),\"$\")},$.copy=function(n,r){$copyArray(n,r,0,0,r.length,e)},$.ptr.init($),Object.defineProperty($.ptr.nil,\"nilCheck\",{get:$throwNilPointerError})};break;case $kindChan:($=function(e){this.$val=e}).wrapped=!0,$.keyFor=$idKey,$.init=function(e,n,r){$.elem=e,$.sendOnly=n,$.recvOnly=r};break;case $kindFunc:($=function(e){this.$val=e}).wrapped=!0,$.init=function(e,n,r){$.params=e,$.results=n,$.variadic=r,$.comparable=!1};break;case $kindInterface:($={implementedBy:{},missingMethodFor:{}}).keyFor=$ifaceKeyFor,$.init=function(e){$.methods=e,e.forEach(function(e){$ifaceNil[e.prop]=$throwNilPointerError})};break;case $kindMap:($=function(e){this.$val=e}).wrapped=!0,$.init=function(e,n){$.key=e,$.elem=n,$.comparable=!1};break;case $kindPtr:($=o||function(e,n,r){this.$get=e,this.$set=n,this.$target=r,this.$val=this}).keyFor=$idKey,$.init=function(e){$.elem=e,$.wrapped=e.kind===$kindArray,$.nil=new $($throwNilPointerError,$throwNilPointerError)};break;case $kindSlice:($=function(e){e.constructor!==$.nativeArray&&(e=new $.nativeArray(e)),this.$array=e,this.$offset=0,this.$length=e.length,this.$capacity=e.length,this.$val=this}).init=function(e){$.elem=e,$.comparable=!1,$.nativeArray=$nativeArray(e.kind),$.nil=new $([])};break;case $kindStruct:($=function(e){this.$val=e}).wrapped=!0,$.ptr=$newType(4,$kindPtr,\"*\"+r,!1,i,a,o),$.ptr.elem=$,$.ptr.prototype.$get=function(){return this},$.ptr.prototype.$set=function(e){$.copy(this,e)},$.init=function(e,n){$.pkgPath=e,$.fields=n,n.forEach(function(e){e.typ.comparable||($.comparable=!1)}),$.keyFor=function(e){var r=e.$val;return $mapArray(n,function(e){return String(e.typ.keyFor(r[e.prop])).replace(/\\\\/g,\"\\\\\\\\\").replace(/\\$/g,\"\\\\$\")}).join(\"$\")},$.copy=function(e,r){for(var t=0;t0;){var a=[],o=[];t.forEach(function(e){if(!i[e.typ.string])switch(i[e.typ.string]=!0,e.typ.named&&(o=o.concat(e.typ.methods),e.indirect&&(o=o.concat($ptrType(e.typ).methods))),e.typ.kind){case $kindStruct:e.typ.fields.forEach(function(n){if(n.embedded){var r=n.typ,t=r.kind===$kindPtr;a.push({typ:t?r.elem:r,indirect:e.indirect||t})}});break;case $kindInterface:o=o.concat(e.typ.methods)}}),o.forEach(function(e){void 0===n[e.name]&&(n[e.name]=e)}),t=a}return e.methodSetCache=[],Object.keys(n).sort().forEach(function(r){e.methodSetCache.push(n[r])}),e.methodSetCache},$Bool=$newType(1,$kindBool,\"bool\",!0,\"\",!1,null),$Int=$newType(4,$kindInt,\"int\",!0,\"\",!1,null),$Int8=$newType(1,$kindInt8,\"int8\",!0,\"\",!1,null),$Int16=$newType(2,$kindInt16,\"int16\",!0,\"\",!1,null),$Int32=$newType(4,$kindInt32,\"int32\",!0,\"\",!1,null),$Int64=$newType(8,$kindInt64,\"int64\",!0,\"\",!1,null),$Uint=$newType(4,$kindUint,\"uint\",!0,\"\",!1,null),$Uint8=$newType(1,$kindUint8,\"uint8\",!0,\"\",!1,null),$Uint16=$newType(2,$kindUint16,\"uint16\",!0,\"\",!1,null),$Uint32=$newType(4,$kindUint32,\"uint32\",!0,\"\",!1,null),$Uint64=$newType(8,$kindUint64,\"uint64\",!0,\"\",!1,null),$Uintptr=$newType(4,$kindUintptr,\"uintptr\",!0,\"\",!1,null),$Float32=$newType(4,$kindFloat32,\"float32\",!0,\"\",!1,null),$Float64=$newType(8,$kindFloat64,\"float64\",!0,\"\",!1,null),$Complex64=$newType(8,$kindComplex64,\"complex64\",!0,\"\",!1,null),$Complex128=$newType(16,$kindComplex128,\"complex128\",!0,\"\",!1,null),$String=$newType(8,$kindString,\"string\",!0,\"\",!1,null),$UnsafePointer=$newType(4,$kindUnsafePointer,\"unsafe.Pointer\",!0,\"\",!1,null),$nativeArray=function(e){switch(e){case $kindInt:return Int32Array;case $kindInt8:return Int8Array;case $kindInt16:return Int16Array;case $kindInt32:return Int32Array;case $kindUint:return Uint32Array;case $kindUint8:return Uint8Array;case $kindUint16:return Uint16Array;case $kindUint32:case $kindUintptr:return Uint32Array;case $kindFloat32:return Float32Array;case $kindFloat64:return Float64Array;default:return Array}},$toNativeArray=function(e,n){var r=$nativeArray(e);return r===Array?n:new r(n)},$arrayTypes={},$arrayType=function(e,n){var r=e.id+\"$\"+n,t=$arrayTypes[r];return void 0===t&&(t=$newType(12,$kindArray,\"[\"+n+\"]\"+e.string,!1,\"\",!1,null),$arrayTypes[r]=t,t.init(e,n)),t},$chanType=function(e,n,r){var t=(r?\"<-\":\"\")+\"chan\"+(n?\"<- \":\" \")+e.string,i=n?\"SendChan\":r?\"RecvChan\":\"Chan\",a=e[i];return void 0===a&&(a=$newType(4,$kindChan,t,!1,\"\",!1,null),e[i]=a,a.init(e,n,r)),a},$Chan=function(e,n){(n<0||n>2147483647)&&$throwRuntimeError(\"makechan: size out of range\"),this.$elem=e,this.$capacity=n,this.$buffer=[],this.$sendQueue=[],this.$recvQueue=[],this.$closed=!1},$chanNil=new $Chan(null,0);$chanNil.$sendQueue=$chanNil.$recvQueue={length:0,push:function(){},shift:function(){},indexOf:function(){return-1}};var $funcTypes={},$funcType=function(e,n,r){var t=$mapArray(e,function(e){return e.id}).join(\",\")+\"$\"+$mapArray(n,function(e){return e.id}).join(\",\")+\"$\"+r,i=$funcTypes[t];if(void 0===i){var a=$mapArray(e,function(e){return e.string});r&&(a[a.length-1]=\"...\"+a[a.length-1].substr(2));var o=\"func(\"+a.join(\", \")+\")\";1===n.length?o+=\" \"+n[0].string:n.length>1&&(o+=\" (\"+$mapArray(n,function(e){return e.string}).join(\", \")+\")\"),i=$newType(4,$kindFunc,o,!1,\"\",!1,null),$funcTypes[t]=i,i.init(e,n,r)}return i},$interfaceTypes={},$interfaceType=function(e){var n=$mapArray(e,function(e){return e.pkg+\",\"+e.name+\",\"+e.typ.id}).join(\"$\"),r=$interfaceTypes[n];if(void 0===r){var t=\"interface {}\";0!==e.length&&(t=\"interface { \"+$mapArray(e,function(e){return(\"\"!==e.pkg?e.pkg+\".\":\"\")+e.name+e.typ.string.substr(4)}).join(\"; \")+\" }\"),r=$newType(8,$kindInterface,t,!1,\"\",!1,null),$interfaceTypes[n]=r,r.init(e)}return r},$emptyInterface=$interfaceType([]),$ifaceNil={},$error=$newType(8,$kindInterface,\"error\",!0,\"\",!1,null);$error.init([{prop:\"Error\",name:\"Error\",pkg:\"\",typ:$funcType([],[$String],!1)}]);var $panicValue,$jsObjectPtr,$jsErrorPtr,$mapTypes={},$mapType=function(e,n){var r=e.id+\"$\"+n.id,t=$mapTypes[r];return void 0===t&&(t=$newType(4,$kindMap,\"map[\"+e.string+\"]\"+n.string,!1,\"\",!1,null),$mapTypes[r]=t,t.init(e,n)),t},$makeMap=function(e,n){for(var r={},t=0;t2147483647)&&$throwRuntimeError(\"makeslice: len out of range\"),(r<0||r2147483647)&&$throwRuntimeError(\"makeslice: cap out of range\");var t=new e.nativeArray(r);if(e.nativeArray===Array)for(var i=0;i=$curGoroutine.deferStack.length)throw n;if(null!==n){var t=null;try{$curGoroutine.deferStack.push(e),$panic(new $jsErrorPtr(n))}catch(e){t=e}return $curGoroutine.deferStack.pop(),void $callDeferred(e,t)}if(!$curGoroutine.asleep){$stackDepthOffset--;var i=$panicStackDepth,a=$panicValue,o=$curGoroutine.panicStack.pop();void 0!==o&&($panicStackDepth=$getStackDepth(),$panicValue=o);try{for(;;){if(null===e&&void 0===(e=$curGoroutine.deferStack[$curGoroutine.deferStack.length-1])){if($panicStackDepth=null,o.Object instanceof Error)throw o.Object;var $;throw $=o.constructor===$String?o.$val:void 0!==o.Error?o.Error():void 0!==o.String?o.String():o,new Error($)}var c=e.pop();if(void 0===c){if($curGoroutine.deferStack.pop(),void 0!==o){e=null;continue}return}var u=c[0].apply(c[2],c[1]);if(u&&void 0!==u.$blk){if(e.push([u.$blk,[],u]),r)throw null;return}if(void 0!==o&&null===$panicStackDepth)throw null}}finally{void 0!==o&&(null!==$panicStackDepth&&$curGoroutine.panicStack.push(o),$panicStackDepth=i,$panicValue=a),$stackDepthOffset++}}},$panic=function(e){$curGoroutine.panicStack.push(e),$callDeferred(null,null,!0)},$recover=function(){return null===$panicStackDepth||void 0!==$panicStackDepth&&$panicStackDepth!==$getStackDepth()-2?$ifaceNil:($panicStackDepth=null,$panicValue)},$throw=function(e){throw e},$noGoroutine={asleep:!1,exit:!1,deferStack:[],panicStack:[]},$curGoroutine=$noGoroutine,$totalGoroutines=0,$awakeGoroutines=0,$checkForDeadlock=!0,$mainFinished=!1,$go=function(e,n){$totalGoroutines++,$awakeGoroutines++;var r=function(){try{$curGoroutine=r;var t=e.apply(void 0,n);if(t&&void 0!==t.$blk)return e=function(){return t.$blk()},void(n=[]);r.exit=!0}catch(e){if(!r.exit)throw e}finally{$curGoroutine=$noGoroutine,r.exit&&($totalGoroutines--,r.asleep=!0),r.asleep&&($awakeGoroutines--,!$mainFinished&&0===$awakeGoroutines&&$checkForDeadlock&&(console.error(\"fatal error: all goroutines are asleep - deadlock!\"),void 0!==$global.process&&$global.process.exit(2)))}};r.asleep=!1,r.exit=!1,r.deferStack=[],r.panicStack=[],$schedule(r)},$scheduled=[],$runScheduled=function(){try{for(var e;void 0!==(e=$scheduled.shift());)e()}finally{$scheduled.length>0&&setTimeout($runScheduled,0)}},$schedule=function(e){e.asleep&&(e.asleep=!1,$awakeGoroutines++),$scheduled.push(e),$curGoroutine===$noGoroutine&&$runScheduled()},$setTimeout=function(e,n){return $awakeGoroutines++,setTimeout(function(){$awakeGoroutines--,e()},n)},$block=function(){$curGoroutine===$noGoroutine&&$throwRuntimeError(\"cannot block in JavaScript callback, fix by wrapping code in goroutine\"),$curGoroutine.asleep=!0},$send=function(e,n){e.$closed&&$throwRuntimeError(\"send on closed channel\");var r=e.$recvQueue.shift();if(void 0===r){if(!(e.$buffer.length65535){var u=Math.floor((c-65536)/1024)+55296,l=(c-65536)%1024+56320;$+=String.fromCharCode(u,l)}else $+=String.fromCharCode(c)}return $;case $kindStruct:var s=$packages.time;if(void 0!==s&&e.constructor===s.Time.ptr){var f=$div64(e.UnixNano(),new $Int64(0,1e6));return new Date($flatten64(f))}var d={},p=function(e,n){if(n===$jsObjectPtr)return e;switch(n.kind){case $kindPtr:return e===n.nil?d:p(e.$get(),n.elem);case $kindStruct:var r=n.fields[0];return p(e[r.prop],r.typ);case $kindInterface:return p(e.$val,e.constructor);default:return d}},h=p(e,n);if(h!==d)return h;h={};for(i=0;i>24;case $kindInt16:return parseInt(e)<<16>>16;case $kindInt32:return parseInt(e)>>0;case $kindUint:return parseInt(e);case $kindUint8:return parseInt(e)<<24>>>24;case $kindUint16:return parseInt(e)<<16>>>16;case $kindUint32:case $kindUintptr:return parseInt(e)>>>0;case $kindInt64:case $kindUint64:return new n(0,e);case $kindFloat32:case $kindFloat64:return parseFloat(e);case $kindArray:return e.length!==n.len&&$throwRuntimeError(\"got array with wrong size from JavaScript native\"),$mapArray(e,function(e){return $internalize(e,n.elem)});case $kindFunc:return function(){for(var t=[],i=0;i=128)return!1;return!0};\n" +const Minified = "var $global,$module;if(Error.stackTraceLimit=1/0,\"undefined\"!=typeof window?$global=window:\"undefined\"!=typeof self?$global=self:\"undefined\"!=typeof global?($global=global).require=require:$global=this,void 0===$global||void 0===$global.Array)throw new Error(\"no global object found\");\"undefined\"!=typeof module&&($module=module);var $throwRuntimeError,$linknames={},$packages={},$idCounter=0,$keys=function(e){return e?Object.keys(e):[]},$flushConsole=function(){},$throwNilPointerError=function(){$throwRuntimeError(\"invalid memory address or nil pointer dereference\")},$call=function(e,n,r){return e.apply(n,r)},$makeFunc=function(e){return function(){return $externalize(e(this,new($sliceType($jsObjectPtr))($global.Array.prototype.slice.call(arguments,[]))),$emptyInterface)}},$unused=function(e){},$print=console.log;if(void 0!==$global.process&&$global.require)try{var util=$global.require(\"util\");$print=function(){$global.process.stderr.write(util.format.apply(this,arguments))}}catch(e){}var $println=console.log,$initAllLinknames=function(){for(var e=$keys($packages),n=0;ne.$capacity||t>e.$capacity)&&$throwRuntimeError(\"slice bounds out of range\"),e===e.constructor.nil)return e;var i=new e.constructor(e.$array);return i.$offset=e.$offset+n,i.$length=r-n,i.$capacity=t-n,i},$substring=function(e,n,r){return(n<0||re.length)&&$throwRuntimeError(\"slice bounds out of range\"),e.substring(n,r)},$sliceToArray=function(e){return e.$array.constructor!==Array?e.$array.subarray(e.$offset,e.$offset+e.$length):e.$array.slice(e.$offset,e.$offset+e.$length)},$decodeRune=function(e,n){var r=e.charCodeAt(n);if(r<128)return[r,1];if(r!=r||r<192)return[65533,1];var t=e.charCodeAt(n+1);if(t!=t||t<128||192<=t)return[65533,1];if(r<224)return(a=(31&r)<<6|63&t)<=127?[65533,1]:[a,2];var i=e.charCodeAt(n+2);if(i!=i||i<128||192<=i)return[65533,1];if(r<240)return(a=(15&r)<<12|(63&t)<<6|63&i)<=2047?[65533,1]:55296<=a&&a<=57343?[65533,1]:[a,3];var a,o=e.charCodeAt(n+3);return o!=o||o<128||192<=o?[65533,1]:r<248?(a=(7&r)<<18|(63&t)<<12|(63&i)<<6|63&o)<=65535||11141111114111||55296<=e&&e<=57343)&&(e=65533),e<=127?String.fromCharCode(e):e<=2047?String.fromCharCode(192|e>>6,128|63&e):e<=65535?String.fromCharCode(224|e>>12,128|e>>6&63,128|63&e):String.fromCharCode(240|e>>18,128|e>>12&63,128|e>>6&63,128|63&e)},$stringToBytes=function(e){for(var n=new Uint8Array(e.length),r=0;rt){for(var o=i-1;o>=0;o--)a.copy(e[r+o],n[t+o]);return}for(o=0;ot)for(o=i-1;o>=0;o--)e[r+o]=n[t+o];else for(o=0;o$)if(a=0,$=Math.max(o,e.$capacity<1024?2*e.$capacity:Math.floor(5*e.$capacity/4)),e.$array.constructor===Array){(i=e.$array.slice(e.$offset,e.$offset+e.$length)).length=$;for(var c=e.constructor.elem.zero,u=e.$length;u<$;u++)i[u]=c()}else(i=new e.$array.constructor($)).set(e.$array.subarray(e.$offset,e.$offset+e.$length));$copyArray(i,n,a+e.$length,r,t,e.constructor.elem);var l=new e.constructor(i);return l.$offset=a,l.$length=o,l.$capacity=$,l},$equal=function(e,n,r){if(r===$jsObjectPtr)return e===n;switch(r.kind){case $kindComplex64:case $kindComplex128:return e.$real===n.$real&&e.$imag===n.$imag;case $kindInt64:case $kindUint64:return e.$high===n.$high&&e.$low===n.$low;case $kindArray:if(e.length!==n.length)return!1;for(var t=0;t>>16&65535)*t+r*(n>>>16&65535)<<16>>>0)>>0},$floatKey=function(e){return e!=e?\"NaN$\"+ ++$idCounter:String(e)},$flatten64=function(e){return 4294967296*e.$high+e.$low},$shiftLeft64=function(e,n){return 0===n?e:n<32?new e.constructor(e.$high<>>32-n,e.$low<>>0):n<64?new e.constructor(e.$low<>n,(e.$low>>>n|e.$high<<32-n)>>>0):n<64?new e.constructor(e.$high>>31,e.$high>>n-32>>>0):e.$high<0?new e.constructor(-1,4294967295):new e.constructor(0,0)},$shiftRightUint64=function(e,n){return 0===n?e:n<32?new e.constructor(e.$high>>>n,(e.$low>>>n|e.$high<<32-n)>>>0):n<64?new e.constructor(0,e.$high>>>n-32):new e.constructor(0,0)},$mul64=function(e,n){var r=0,t=0;0!=(1&n.$low)&&(r=e.$high,t=e.$low);for(var i=1;i<32;i++)0!=(n.$low&1<>>32-i,t+=e.$low<>>0);for(i=0;i<32;i++)0!=(n.$high&1<$||a===$&&o>c);)$=($<<1|c>>>31)>>>0,c=c<<1>>>0,s++;for(var f=0;f<=s;f++)u=u<<1|l>>>31,l=l<<1>>>0,(a>$||a===$&&o>=c)&&(a-=$,(o-=c)<0&&(a--,o+=4294967296),4294967296===++l&&(u++,l=0)),c=(c>>>1|$<<31)>>>0,$>>>=1;return r?new e.constructor(a*i,o*i):new e.constructor(u*t,l*t)},$divComplex=function(e,n){var r=e.$real===1/0||e.$real===-1/0||e.$imag===1/0||e.$imag===-1/0,t=n.$real===1/0||n.$real===-1/0||n.$imag===1/0||n.$imag===-1/0,i=!r&&(e.$real!=e.$real||e.$imag!=e.$imag),a=!t&&(n.$real!=n.$real||n.$imag!=n.$imag);if(i||a)return new e.constructor(NaN,NaN);if(r&&!t)return new e.constructor(1/0,1/0);if(!r&&t)return new e.constructor(0,0);if(0===n.$real&&0===n.$imag)return 0===e.$real&&0===e.$imag?new e.constructor(NaN,NaN):new e.constructor(1/0,1/0);if(Math.abs(n.$real)<=Math.abs(n.$imag)){var o=n.$real/n.$imag,$=n.$real*o+n.$imag;return new e.constructor((e.$real*o+e.$imag)/$,(e.$imag*o-e.$real)/$)}o=n.$imag/n.$real,$=n.$imag*o+n.$real;return new e.constructor((e.$imag*o+e.$real)/$,(e.$imag-e.$real*o)/$)},$kindBool=1,$kindInt=2,$kindInt8=3,$kindInt16=4,$kindInt32=5,$kindInt64=6,$kindUint=7,$kindUint8=8,$kindUint16=9,$kindUint32=10,$kindUint64=11,$kindUintptr=12,$kindFloat32=13,$kindFloat64=14,$kindComplex64=15,$kindComplex128=16,$kindArray=17,$kindChan=18,$kindFunc=19,$kindInterface=20,$kindMap=21,$kindPtr=22,$kindSlice=23,$kindString=24,$kindStruct=25,$kindUnsafePointer=26,$methodSynthesizers=[],$addMethodSynthesizer=function(e){null!==$methodSynthesizers?$methodSynthesizers.push(e):e()},$synthesizeMethods=function(){$methodSynthesizers.forEach(function(e){e()}),$methodSynthesizers=null},$ifaceKeyFor=function(e){if(e===$ifaceNil)return\"nil\";var n=e.constructor;return n.string+\"$\"+n.keyFor(e.$val)},$identity=function(e){return e},$typeIDCounter=0,$idKey=function(e){return void 0===e.$id&&($idCounter++,e.$id=$idCounter),String(e.$id)},$newType=function(e,n,r,t,i,a,o){var $;switch(n){case $kindBool:case $kindInt:case $kindInt8:case $kindInt16:case $kindInt32:case $kindUint:case $kindUint8:case $kindUint16:case $kindUint32:case $kindUintptr:case $kindUnsafePointer:($=function(e){this.$val=e}).wrapped=!0,$.keyFor=$identity;break;case $kindString:($=function(e){this.$val=e}).wrapped=!0,$.keyFor=function(e){return\"$\"+e};break;case $kindFloat32:case $kindFloat64:($=function(e){this.$val=e}).wrapped=!0,$.keyFor=function(e){return $floatKey(e)};break;case $kindInt64:($=function(e,n){this.$high=e+Math.floor(Math.ceil(n)/4294967296)>>0,this.$low=n>>>0,this.$val=this}).keyFor=function(e){return e.$high+\"$\"+e.$low};break;case $kindUint64:($=function(e,n){this.$high=e+Math.floor(Math.ceil(n)/4294967296)>>>0,this.$low=n>>>0,this.$val=this}).keyFor=function(e){return e.$high+\"$\"+e.$low};break;case $kindComplex64:($=function(e,n){this.$real=$fround(e),this.$imag=$fround(n),this.$val=this}).keyFor=function(e){return e.$real+\"$\"+e.$imag};break;case $kindComplex128:($=function(e,n){this.$real=e,this.$imag=n,this.$val=this}).keyFor=function(e){return e.$real+\"$\"+e.$imag};break;case $kindArray:($=function(e){this.$val=e}).wrapped=!0,$.ptr=$newType(4,$kindPtr,\"*\"+r,!1,\"\",!1,function(e){this.$get=function(){return e},this.$set=function(e){$.copy(this,e)},this.$val=e}),$.init=function(e,n){$.elem=e,$.len=n,$.comparable=e.comparable,$.keyFor=function(n){return Array.prototype.join.call($mapArray(n,function(n){return String(e.keyFor(n)).replace(/\\\\/g,\"\\\\\\\\\").replace(/\\$/g,\"\\\\$\")}),\"$\")},$.copy=function(n,r){$copyArray(n,r,0,0,r.length,e)},$.ptr.init($),Object.defineProperty($.ptr.nil,\"nilCheck\",{get:$throwNilPointerError})};break;case $kindChan:($=function(e){this.$val=e}).wrapped=!0,$.keyFor=$idKey,$.init=function(e,n,r){$.elem=e,$.sendOnly=n,$.recvOnly=r};break;case $kindFunc:($=function(e){this.$val=e}).wrapped=!0,$.init=function(e,n,r){$.params=e,$.results=n,$.variadic=r,$.comparable=!1};break;case $kindInterface:($={implementedBy:{},missingMethodFor:{}}).keyFor=$ifaceKeyFor,$.init=function(e){$.methods=e,e.forEach(function(e){$ifaceNil[e.prop]=$throwNilPointerError})};break;case $kindMap:($=function(e){this.$val=e}).wrapped=!0,$.init=function(e,n){$.key=e,$.elem=n,$.comparable=!1};break;case $kindPtr:($=o||function(e,n,r){this.$get=e,this.$set=n,this.$target=r,this.$val=this}).keyFor=$idKey,$.init=function(e){$.elem=e,$.wrapped=e.kind===$kindArray,$.nil=new $($throwNilPointerError,$throwNilPointerError)};break;case $kindSlice:($=function(e){e.constructor!==$.nativeArray&&(e=new $.nativeArray(e)),this.$array=e,this.$offset=0,this.$length=e.length,this.$capacity=e.length,this.$val=this}).init=function(e){$.elem=e,$.comparable=!1,$.nativeArray=$nativeArray(e.kind),$.nil=new $([])};break;case $kindStruct:($=function(e){this.$val=e}).wrapped=!0,$.ptr=$newType(4,$kindPtr,\"*\"+r,!1,i,a,o),$.ptr.elem=$,$.ptr.prototype.$get=function(){return this},$.ptr.prototype.$set=function(e){$.copy(this,e)},$.init=function(e,n){$.pkgPath=e,$.fields=n,n.forEach(function(e){e.typ.comparable||($.comparable=!1)}),$.keyFor=function(e){var r=e.$val;return $mapArray(n,function(e){return String(e.typ.keyFor(r[e.prop])).replace(/\\\\/g,\"\\\\\\\\\").replace(/\\$/g,\"\\\\$\")}).join(\"$\")},$.copy=function(e,r){for(var t=0;t0;){var a=[],o=[];t.forEach(function(e){if(!i[e.typ.string])switch(i[e.typ.string]=!0,e.typ.named&&(o=o.concat(e.typ.methods),e.indirect&&(o=o.concat($ptrType(e.typ).methods))),e.typ.kind){case $kindStruct:e.typ.fields.forEach(function(n){if(n.embedded){var r=n.typ,t=r.kind===$kindPtr;a.push({typ:t?r.elem:r,indirect:e.indirect||t})}});break;case $kindInterface:o=o.concat(e.typ.methods)}}),o.forEach(function(e){void 0===n[e.name]&&(n[e.name]=e)}),t=a}return e.methodSetCache=[],Object.keys(n).sort().forEach(function(r){e.methodSetCache.push(n[r])}),e.methodSetCache},$Bool=$newType(1,$kindBool,\"bool\",!0,\"\",!1,null),$Int=$newType(4,$kindInt,\"int\",!0,\"\",!1,null),$Int8=$newType(1,$kindInt8,\"int8\",!0,\"\",!1,null),$Int16=$newType(2,$kindInt16,\"int16\",!0,\"\",!1,null),$Int32=$newType(4,$kindInt32,\"int32\",!0,\"\",!1,null),$Int64=$newType(8,$kindInt64,\"int64\",!0,\"\",!1,null),$Uint=$newType(4,$kindUint,\"uint\",!0,\"\",!1,null),$Uint8=$newType(1,$kindUint8,\"uint8\",!0,\"\",!1,null),$Uint16=$newType(2,$kindUint16,\"uint16\",!0,\"\",!1,null),$Uint32=$newType(4,$kindUint32,\"uint32\",!0,\"\",!1,null),$Uint64=$newType(8,$kindUint64,\"uint64\",!0,\"\",!1,null),$Uintptr=$newType(4,$kindUintptr,\"uintptr\",!0,\"\",!1,null),$Float32=$newType(4,$kindFloat32,\"float32\",!0,\"\",!1,null),$Float64=$newType(8,$kindFloat64,\"float64\",!0,\"\",!1,null),$Complex64=$newType(8,$kindComplex64,\"complex64\",!0,\"\",!1,null),$Complex128=$newType(16,$kindComplex128,\"complex128\",!0,\"\",!1,null),$String=$newType(8,$kindString,\"string\",!0,\"\",!1,null),$UnsafePointer=$newType(4,$kindUnsafePointer,\"unsafe.Pointer\",!0,\"\",!1,null),$nativeArray=function(e){switch(e){case $kindInt:return Int32Array;case $kindInt8:return Int8Array;case $kindInt16:return Int16Array;case $kindInt32:return Int32Array;case $kindUint:return Uint32Array;case $kindUint8:return Uint8Array;case $kindUint16:return Uint16Array;case $kindUint32:case $kindUintptr:return Uint32Array;case $kindFloat32:return Float32Array;case $kindFloat64:return Float64Array;default:return Array}},$toNativeArray=function(e,n){var r=$nativeArray(e);return r===Array?n:new r(n)},$arrayTypes={},$arrayType=function(e,n){var r=e.id+\"$\"+n,t=$arrayTypes[r];return void 0===t&&(t=$newType(12,$kindArray,\"[\"+n+\"]\"+e.string,!1,\"\",!1,null),$arrayTypes[r]=t,t.init(e,n)),t},$chanType=function(e,n,r){var t=(r?\"<-\":\"\")+\"chan\"+(n?\"<- \":\" \");n||r||\"<\"!=e.string[0]?t+=e.string:t+=\"(\"+e.string+\")\";var i=n?\"SendChan\":r?\"RecvChan\":\"Chan\",a=e[i];return void 0===a&&(a=$newType(4,$kindChan,t,!1,\"\",!1,null),e[i]=a,a.init(e,n,r)),a},$Chan=function(e,n){(n<0||n>2147483647)&&$throwRuntimeError(\"makechan: size out of range\"),this.$elem=e,this.$capacity=n,this.$buffer=[],this.$sendQueue=[],this.$recvQueue=[],this.$closed=!1},$chanNil=new $Chan(null,0);$chanNil.$sendQueue=$chanNil.$recvQueue={length:0,push:function(){},shift:function(){},indexOf:function(){return-1}};var $funcTypes={},$funcType=function(e,n,r){var t=$mapArray(e,function(e){return e.id}).join(\",\")+\"$\"+$mapArray(n,function(e){return e.id}).join(\",\")+\"$\"+r,i=$funcTypes[t];if(void 0===i){var a=$mapArray(e,function(e){return e.string});r&&(a[a.length-1]=\"...\"+a[a.length-1].substr(2));var o=\"func(\"+a.join(\", \")+\")\";1===n.length?o+=\" \"+n[0].string:n.length>1&&(o+=\" (\"+$mapArray(n,function(e){return e.string}).join(\", \")+\")\"),i=$newType(4,$kindFunc,o,!1,\"\",!1,null),$funcTypes[t]=i,i.init(e,n,r)}return i},$interfaceTypes={},$interfaceType=function(e){var n=$mapArray(e,function(e){return e.pkg+\",\"+e.name+\",\"+e.typ.id}).join(\"$\"),r=$interfaceTypes[n];if(void 0===r){var t=\"interface {}\";0!==e.length&&(t=\"interface { \"+$mapArray(e,function(e){return(\"\"!==e.pkg?e.pkg+\".\":\"\")+e.name+e.typ.string.substr(4)}).join(\"; \")+\" }\"),r=$newType(8,$kindInterface,t,!1,\"\",!1,null),$interfaceTypes[n]=r,r.init(e)}return r},$emptyInterface=$interfaceType([]),$ifaceNil={},$error=$newType(8,$kindInterface,\"error\",!0,\"\",!1,null);$error.init([{prop:\"Error\",name:\"Error\",pkg:\"\",typ:$funcType([],[$String],!1)}]);var $panicValue,$jsObjectPtr,$jsErrorPtr,$mapTypes={},$mapType=function(e,n){var r=e.id+\"$\"+n.id,t=$mapTypes[r];return void 0===t&&(t=$newType(4,$kindMap,\"map[\"+e.string+\"]\"+n.string,!1,\"\",!1,null),$mapTypes[r]=t,t.init(e,n)),t},$makeMap=function(e,n){for(var r={},t=0;t2147483647)&&$throwRuntimeError(\"makeslice: len out of range\"),(r<0||r2147483647)&&$throwRuntimeError(\"makeslice: cap out of range\");var t=new e.nativeArray(r);if(e.nativeArray===Array)for(var i=0;i=$curGoroutine.deferStack.length)throw n;if(null!==n){var t=null;try{$curGoroutine.deferStack.push(e),$panic(new $jsErrorPtr(n))}catch(e){t=e}return $curGoroutine.deferStack.pop(),void $callDeferred(e,t)}if(!$curGoroutine.asleep){$stackDepthOffset--;var i=$panicStackDepth,a=$panicValue,o=$curGoroutine.panicStack.pop();void 0!==o&&($panicStackDepth=$getStackDepth(),$panicValue=o);try{for(;;){if(null===e&&void 0===(e=$curGoroutine.deferStack[$curGoroutine.deferStack.length-1])){if($panicStackDepth=null,o.Object instanceof Error)throw o.Object;var $;throw $=o.constructor===$String?o.$val:void 0!==o.Error?o.Error():void 0!==o.String?o.String():o,new Error($)}var c=e.pop();if(void 0===c){if($curGoroutine.deferStack.pop(),void 0!==o){e=null;continue}return}var u=c[0].apply(c[2],c[1]);if(u&&void 0!==u.$blk){if(e.push([u.$blk,[],u]),r)throw null;return}if(void 0!==o&&null===$panicStackDepth){if(r)throw null;return}}}finally{void 0!==o&&(null!==$panicStackDepth&&$curGoroutine.panicStack.push(o),$panicStackDepth=i,$panicValue=a),$stackDepthOffset++}}},$panic=function(e){$curGoroutine.panicStack.push(e),$callDeferred(null,null,!0)},$recover=function(){return null===$panicStackDepth||void 0!==$panicStackDepth&&$panicStackDepth!==$getStackDepth()-2?$ifaceNil:($panicStackDepth=null,$panicValue)},$throw=function(e){throw e},$noGoroutine={asleep:!1,exit:!1,deferStack:[],panicStack:[]},$curGoroutine=$noGoroutine,$totalGoroutines=0,$awakeGoroutines=0,$checkForDeadlock=!0,$mainFinished=!1,$go=function(e,n){$totalGoroutines++,$awakeGoroutines++;var r=function(){try{$curGoroutine=r;var t=e.apply(void 0,n);if(t&&void 0!==t.$blk)return e=function(){return t.$blk()},void(n=[]);r.exit=!0}catch(e){if(!r.exit)throw e}finally{$curGoroutine=$noGoroutine,r.exit&&($totalGoroutines--,r.asleep=!0),r.asleep&&($awakeGoroutines--,!$mainFinished&&0===$awakeGoroutines&&$checkForDeadlock&&(console.error(\"fatal error: all goroutines are asleep - deadlock!\"),void 0!==$global.process&&$global.process.exit(2)))}};r.asleep=!1,r.exit=!1,r.deferStack=[],r.panicStack=[],$schedule(r)},$scheduled=[],$runScheduled=function(){try{for(var e;void 0!==(e=$scheduled.shift());)e()}finally{$scheduled.length>0&&setTimeout($runScheduled,0)}},$schedule=function(e){e.asleep&&(e.asleep=!1,$awakeGoroutines++),$scheduled.push(e),$curGoroutine===$noGoroutine&&$runScheduled()},$setTimeout=function(e,n){return $awakeGoroutines++,setTimeout(function(){$awakeGoroutines--,e()},n)},$block=function(){$curGoroutine===$noGoroutine&&$throwRuntimeError(\"cannot block in JavaScript callback, fix by wrapping code in goroutine\"),$curGoroutine.asleep=!0},$send=function(e,n){e.$closed&&$throwRuntimeError(\"send on closed channel\");var r=e.$recvQueue.shift();if(void 0===r){if(!(e.$buffer.length65535){var u=Math.floor((c-65536)/1024)+55296,l=(c-65536)%1024+56320;$+=String.fromCharCode(u,l)}else $+=String.fromCharCode(c)}return $;case $kindStruct:var s=$packages.time;if(void 0!==s&&e.constructor===s.Time.ptr){var f=$div64(e.UnixNano(),new $Int64(0,1e6));return new Date($flatten64(f))}var d={},p=function(e,n){if(n===$jsObjectPtr)return e;switch(n.kind){case $kindPtr:return e===n.nil?d:p(e.$get(),n.elem);case $kindStruct:var r=n.fields[0];return p(e[r.prop],r.typ);case $kindInterface:return p(e.$val,e.constructor);default:return d}},h=p(e,n);if(h!==d)return h;h={};for(i=0;i>24;case $kindInt16:return parseInt(e)<<16>>16;case $kindInt32:return parseInt(e)>>0;case $kindUint:return parseInt(e);case $kindUint8:return parseInt(e)<<24>>>24;case $kindUint16:return parseInt(e)<<16>>>16;case $kindUint32:case $kindUintptr:return parseInt(e)>>>0;case $kindInt64:case $kindUint64:return new n(0,e);case $kindFloat32:case $kindFloat64:return parseFloat(e);case $kindArray:return e.length!==n.len&&$throwRuntimeError(\"got array with wrong size from JavaScript native\"),$mapArray(e,function(e){return $internalize(e,n.elem)});case $kindFunc:return function(){for(var t=[],i=0;i=128)return!1;return!0};\n" diff --git a/compiler/prelude/types.go b/compiler/prelude/types.go index 0d37509ba..901200aea 100644 --- a/compiler/prelude/types.go +++ b/compiler/prelude/types.go @@ -526,7 +526,12 @@ var $arrayType = function(elem, len) { }; var $chanType = function(elem, sendOnly, recvOnly) { - var string = (recvOnly ? "<-" : "") + "chan" + (sendOnly ? "<- " : " ") + elem.string; + var string = (recvOnly ? "<-" : "") + "chan" + (sendOnly ? "<- " : " "); + if (!sendOnly && !recvOnly && (elem.string[0] == "<")) { + string += "(" + elem.string + ")"; + } else { + string += elem.string; + } var field = sendOnly ? "SendChan" : (recvOnly ? "RecvChan" : "Chan"); var typ = elem[field]; if (typ === undefined) { @@ -670,7 +675,11 @@ var $structType = function(pkgPath, fields) { var typ = $structTypes[typeKey]; if (typ === undefined) { var string = "struct { " + $mapArray(fields, function(f) { - return f.name + " " + f.typ.string + (f.tag !== "" ? (" \"" + f.tag.replace(/\\/g, "\\\\").replace(/"/g, "\\\"") + "\"") : ""); + var str = f.typ.string + (f.tag !== "" ? (" \"" + f.tag.replace(/\\/g, "\\\\").replace(/"/g, "\\\"") + "\"") : ""); + if (f.embedded) { + return str; + } + return f.name + " " + str; }).join("; ") + " }"; if (fields.length === 0) { string = "struct {}"; @@ -679,6 +688,9 @@ var $structType = function(pkgPath, fields) { this.$val = this; for (var i = 0; i < fields.length; i++) { var f = fields[i]; + if (f.name == '_') { + continue; + } var arg = arguments[i]; this[f.prop] = arg !== undefined ? arg : f.typ.zero(); } diff --git a/compiler/statements.go b/compiler/statements.go index b83396235..64cd328c5 100644 --- a/compiler/statements.go +++ b/compiler/statements.go @@ -14,22 +14,22 @@ import ( "github.com/gopherjs/gopherjs/compiler/typesutil" ) -func (c *funcContext) translateStmtList(stmts []ast.Stmt) { +func (fc *funcContext) translateStmtList(stmts []ast.Stmt) { for _, stmt := range stmts { - c.translateStmt(stmt, nil) + fc.translateStmt(stmt, nil) } - c.SetPos(token.NoPos) + fc.SetPos(token.NoPos) } -func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { - c.SetPos(stmt.Pos()) +func (fc *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { + fc.SetPos(stmt.Pos()) - stmt = filter.IncDecStmt(stmt, c.p.Info.Info) - stmt = filter.Assign(stmt, c.p.Info.Info, c.p.Info.Pkg) + stmt = filter.IncDecStmt(stmt, fc.pkgCtx.Info.Info) + stmt = filter.Assign(stmt, fc.pkgCtx.Info.Info, fc.pkgCtx.Info.Pkg) switch s := stmt.(type) { case *ast.BlockStmt: - c.translateStmtList(s.List) + fc.translateStmtList(s.List) case *ast.IfStmt: var caseClauses []*ast.CaseClause @@ -49,7 +49,7 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { if block, ok := ifStmt.Else.(*ast.BlockStmt); ok { defaultClause = &ast.CaseClause{Body: block.List} } - c.translateBranchingStmt(caseClauses, defaultClause, false, c.translateExpr, nil, c.Flattened[s]) + fc.translateBranchingStmt(caseClauses, defaultClause, false, fc.translateExpr, nil, fc.Flattened[s]) case *ast.SwitchStmt: if s.Init != nil || s.Tag != nil || len(s.Body.List) != 1 { @@ -60,48 +60,48 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { panic("simplification error") } - prevFlowData := c.flowDatas[nil] + prevFlowData := fc.flowDatas[nil] data := &flowData{ postStmt: prevFlowData.postStmt, // for "continue" of outer loop beginCase: prevFlowData.beginCase, // same } - c.flowDatas[nil] = data - c.flowDatas[label] = data + fc.flowDatas[nil] = data + fc.flowDatas[label] = data defer func() { - delete(c.flowDatas, label) - c.flowDatas[nil] = prevFlowData + delete(fc.flowDatas, label) + fc.flowDatas[nil] = prevFlowData }() - if c.Flattened[s] { - data.endCase = c.caseCounter - c.caseCounter++ + if fc.Flattened[s] { + data.endCase = fc.caseCounter + fc.caseCounter++ - c.Indent(func() { - c.translateStmtList(clause.Body) + fc.Indent(func() { + fc.translateStmtList(clause.Body) }) - c.Printf("case %d:", data.endCase) + fc.Printf("case %d:", data.endCase) return } if label != nil || analysis.HasBreak(clause) { if label != nil { - c.Printf("%s:", label.Name()) + fc.Printf("%s:", label.Name()) } - c.Printf("switch (0) { default:") - c.Indent(func() { - c.translateStmtList(clause.Body) + fc.Printf("switch (0) { default:") + fc.Indent(func() { + fc.translateStmtList(clause.Body) }) - c.Printf("}") + fc.Printf("}") return } - c.translateStmtList(clause.Body) + fc.translateStmtList(clause.Body) case *ast.TypeSwitchStmt: if s.Init != nil { - c.translateStmt(s.Init, nil) + fc.translateStmt(s.Init, nil) } - refVar := c.newVariable("_ref") + refVar := fc.newVariable("_ref") var expr ast.Expr switch a := s.Assign.(type) { case *ast.AssignStmt: @@ -109,19 +109,19 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { case *ast.ExprStmt: expr = a.X.(*ast.TypeAssertExpr).X } - c.Printf("%s = %s;", refVar, c.translateExpr(expr)) + fc.Printf("%s = %s;", refVar, fc.translateExpr(expr)) translateCond := func(cond ast.Expr) *expression { - if types.Identical(c.p.TypeOf(cond), types.Typ[types.UntypedNil]) { - return c.formatExpr("%s === $ifaceNil", refVar) + if types.Identical(fc.pkgCtx.TypeOf(cond), types.Typ[types.UntypedNil]) { + return fc.formatExpr("%s === $ifaceNil", refVar) } - return c.formatExpr("$assertType(%s, %s, true)[1]", refVar, c.typeName(c.p.TypeOf(cond))) + return fc.formatExpr("$assertType(%s, %s, true)[1]", refVar, fc.typeName(fc.pkgCtx.TypeOf(cond))) } var caseClauses []*ast.CaseClause var defaultClause *ast.CaseClause for _, cc := range s.Body.List { clause := cc.(*ast.CaseClause) var bodyPrefix []ast.Stmt - if implicit := c.p.Implicits[clause]; implicit != nil { + if implicit := fc.pkgCtx.Implicits[clause]; implicit != nil { value := refVar if typesutil.IsJsObject(implicit.Type().Underlying()) { value += ".$val.object" @@ -129,9 +129,9 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { value += ".$val" } bodyPrefix = []ast.Stmt{&ast.AssignStmt{ - Lhs: []ast.Expr{c.newIdent(c.objectName(implicit), implicit.Type())}, + Lhs: []ast.Expr{fc.newIdent(fc.objectName(implicit), implicit.Type())}, Tok: token.DEFINE, - Rhs: []ast.Expr{c.newIdent(value, implicit.Type())}, + Rhs: []ast.Expr{fc.newIdent(value, implicit.Type())}, }} } c := &ast.CaseClause{ @@ -144,66 +144,66 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { } caseClauses = append(caseClauses, c) } - c.translateBranchingStmt(caseClauses, defaultClause, true, translateCond, label, c.Flattened[s]) + fc.translateBranchingStmt(caseClauses, defaultClause, true, translateCond, label, fc.Flattened[s]) case *ast.ForStmt: if s.Init != nil { - c.translateStmt(s.Init, nil) + fc.translateStmt(s.Init, nil) } cond := func() string { if s.Cond == nil { return "true" } - return c.translateExpr(s.Cond).String() + return fc.translateExpr(s.Cond).String() } - c.translateLoopingStmt(cond, s.Body, nil, func() { + fc.translateLoopingStmt(cond, s.Body, nil, func() { if s.Post != nil { - c.translateStmt(s.Post, nil) + fc.translateStmt(s.Post, nil) } - }, label, c.Flattened[s]) + }, label, fc.Flattened[s]) case *ast.RangeStmt: - refVar := c.newVariable("_ref") - c.Printf("%s = %s;", refVar, c.translateExpr(s.X)) + refVar := fc.newVariable("_ref") + fc.Printf("%s = %s;", refVar, fc.translateExpr(s.X)) - switch t := c.p.TypeOf(s.X).Underlying().(type) { + switch t := fc.pkgCtx.TypeOf(s.X).Underlying().(type) { case *types.Basic: - iVar := c.newVariable("_i") - c.Printf("%s = 0;", iVar) - runeVar := c.newVariable("_rune") - c.translateLoopingStmt(func() string { return iVar + " < " + refVar + ".length" }, s.Body, func() { - c.Printf("%s = $decodeRune(%s, %s);", runeVar, refVar, iVar) + iVar := fc.newVariable("_i") + fc.Printf("%s = 0;", iVar) + runeVar := fc.newVariable("_rune") + fc.translateLoopingStmt(func() string { return iVar + " < " + refVar + ".length" }, s.Body, func() { + fc.Printf("%s = $decodeRune(%s, %s);", runeVar, refVar, iVar) if !isBlank(s.Key) { - c.Printf("%s", c.translateAssign(s.Key, c.newIdent(iVar, types.Typ[types.Int]), s.Tok == token.DEFINE)) + fc.Printf("%s", fc.translateAssign(s.Key, fc.newIdent(iVar, types.Typ[types.Int]), s.Tok == token.DEFINE)) } if !isBlank(s.Value) { - c.Printf("%s", c.translateAssign(s.Value, c.newIdent(runeVar+"[0]", types.Typ[types.Rune]), s.Tok == token.DEFINE)) + fc.Printf("%s", fc.translateAssign(s.Value, fc.newIdent(runeVar+"[0]", types.Typ[types.Rune]), s.Tok == token.DEFINE)) } }, func() { - c.Printf("%s += %s[1];", iVar, runeVar) - }, label, c.Flattened[s]) + fc.Printf("%s += %s[1];", iVar, runeVar) + }, label, fc.Flattened[s]) case *types.Map: - iVar := c.newVariable("_i") - c.Printf("%s = 0;", iVar) - keysVar := c.newVariable("_keys") - c.Printf("%s = $keys(%s);", keysVar, refVar) - c.translateLoopingStmt(func() string { return iVar + " < " + keysVar + ".length" }, s.Body, func() { - entryVar := c.newVariable("_entry") - c.Printf("%s = %s[%s[%s]];", entryVar, refVar, keysVar, iVar) - c.translateStmt(&ast.IfStmt{ - Cond: c.newIdent(entryVar+" === undefined", types.Typ[types.Bool]), + iVar := fc.newVariable("_i") + fc.Printf("%s = 0;", iVar) + keysVar := fc.newVariable("_keys") + fc.Printf("%s = $keys(%s);", keysVar, refVar) + fc.translateLoopingStmt(func() string { return iVar + " < " + keysVar + ".length" }, s.Body, func() { + entryVar := fc.newVariable("_entry") + fc.Printf("%s = %s[%s[%s]];", entryVar, refVar, keysVar, iVar) + fc.translateStmt(&ast.IfStmt{ + Cond: fc.newIdent(entryVar+" === undefined", types.Typ[types.Bool]), Body: &ast.BlockStmt{List: []ast.Stmt{&ast.BranchStmt{Tok: token.CONTINUE}}}, }, nil) if !isBlank(s.Key) { - c.Printf("%s", c.translateAssign(s.Key, c.newIdent(entryVar+".k", t.Key()), s.Tok == token.DEFINE)) + fc.Printf("%s", fc.translateAssign(s.Key, fc.newIdent(entryVar+".k", t.Key()), s.Tok == token.DEFINE)) } if !isBlank(s.Value) { - c.Printf("%s", c.translateAssign(s.Value, c.newIdent(entryVar+".v", t.Elem()), s.Tok == token.DEFINE)) + fc.Printf("%s", fc.translateAssign(s.Value, fc.newIdent(entryVar+".v", t.Elem()), s.Tok == token.DEFINE)) } }, func() { - c.Printf("%s++;", iVar) - }, label, c.Flattened[s]) + fc.Printf("%s++;", iVar) + }, label, fc.Flattened[s]) case *types.Array, *types.Pointer, *types.Slice: var length string @@ -219,24 +219,24 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { length = refVar + ".$length" elemType = t2.Elem() } - iVar := c.newVariable("_i") - c.Printf("%s = 0;", iVar) - c.translateLoopingStmt(func() string { return iVar + " < " + length }, s.Body, func() { + iVar := fc.newVariable("_i") + fc.Printf("%s = 0;", iVar) + fc.translateLoopingStmt(func() string { return iVar + " < " + length }, s.Body, func() { if !isBlank(s.Key) { - c.Printf("%s", c.translateAssign(s.Key, c.newIdent(iVar, types.Typ[types.Int]), s.Tok == token.DEFINE)) + fc.Printf("%s", fc.translateAssign(s.Key, fc.newIdent(iVar, types.Typ[types.Int]), s.Tok == token.DEFINE)) } if !isBlank(s.Value) { - c.Printf("%s", c.translateAssign(s.Value, c.setType(&ast.IndexExpr{ - X: c.newIdent(refVar, t), - Index: c.newIdent(iVar, types.Typ[types.Int]), + fc.Printf("%s", fc.translateAssign(s.Value, fc.setType(&ast.IndexExpr{ + X: fc.newIdent(refVar, t), + Index: fc.newIdent(iVar, types.Typ[types.Int]), }, elemType), s.Tok == token.DEFINE)) } }, func() { - c.Printf("%s++;", iVar) - }, label, c.Flattened[s]) + fc.Printf("%s++;", iVar) + }, label, fc.Flattened[s]) case *types.Chan: - okVar := c.newIdent(c.newVariable("_ok"), types.Typ[types.Bool]) + okVar := fc.newIdent(fc.newVariable("_ok"), types.Typ[types.Bool]) key := s.Key tok := s.Tok if key == nil { @@ -252,7 +252,7 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { okVar, }, Rhs: []ast.Expr{ - c.setType(&ast.UnaryExpr{X: c.newIdent(refVar, t), Op: token.ARROW}, types.NewTuple(types.NewVar(0, nil, "", t.Elem()), types.NewVar(0, nil, "", types.Typ[types.Bool]))), + fc.setType(&ast.UnaryExpr{X: fc.newIdent(refVar, t), Op: token.ARROW}, types.NewTuple(types.NewVar(0, nil, "", t.Elem()), types.NewVar(0, nil, "", types.Typ[types.Bool]))), }, Tok: tok, }, @@ -264,8 +264,8 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { }, }, } - c.Flattened[forStmt] = true - c.translateStmt(forStmt, label) + fc.Flattened[forStmt] = true + fc.translateStmt(forStmt, label) default: panic("") @@ -274,20 +274,20 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { case *ast.BranchStmt: normalLabel := "" blockingLabel := "" - data := c.flowDatas[nil] + data := fc.flowDatas[nil] if s.Label != nil { normalLabel = " " + s.Label.Name blockingLabel = " s" // use explicit label "s", because surrounding loop may not be flattened - data = c.flowDatas[c.p.Uses[s.Label].(*types.Label)] + data = fc.flowDatas[fc.pkgCtx.Uses[s.Label].(*types.Label)] } switch s.Tok { case token.BREAK: - c.PrintCond(data.endCase == 0, fmt.Sprintf("break%s;", normalLabel), fmt.Sprintf("$s = %d; continue%s;", data.endCase, blockingLabel)) + fc.PrintCond(data.endCase == 0, fmt.Sprintf("break%s;", normalLabel), fmt.Sprintf("$s = %d; continue%s;", data.endCase, blockingLabel)) case token.CONTINUE: data.postStmt() - c.PrintCond(data.beginCase == 0, fmt.Sprintf("continue%s;", normalLabel), fmt.Sprintf("$s = %d; continue%s;", data.beginCase, blockingLabel)) + fc.PrintCond(data.beginCase == 0, fmt.Sprintf("continue%s;", normalLabel), fmt.Sprintf("$s = %d; continue%s;", data.beginCase, blockingLabel)) case token.GOTO: - c.PrintCond(false, "goto "+s.Label.Name, fmt.Sprintf("$s = %d; continue;", c.labelCase(c.p.Uses[s.Label].(*types.Label)))) + fc.PrintCond(false, "goto "+s.Label.Name, fmt.Sprintf("$s = %d; continue;", fc.labelCase(fc.pkgCtx.Uses[s.Label].(*types.Label)))) case token.FALLTHROUGH: // handled in CaseClause default: @@ -296,22 +296,22 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { case *ast.ReturnStmt: results := s.Results - if c.resultNames != nil { + if fc.resultNames != nil { if len(s.Results) != 0 { - c.translateStmt(&ast.AssignStmt{ - Lhs: c.resultNames, + fc.translateStmt(&ast.AssignStmt{ + Lhs: fc.resultNames, Tok: token.ASSIGN, Rhs: s.Results, }, nil) } - results = c.resultNames + results = fc.resultNames } - rVal := c.translateResults(results) - if len(c.Flattened) != 0 { - c.Printf("$s = -1; return%s;", rVal) + rVal := fc.translateResults(results) + if len(fc.Flattened) != 0 { + fc.Printf("$s = -1; return%s;", rVal) return } - c.Printf("return%s;", rVal) + fc.Printf("return%s;", rVal) case *ast.DeferStmt: isBuiltin := false @@ -319,33 +319,42 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { switch fun := s.Call.Fun.(type) { case *ast.Ident: var builtin *types.Builtin - builtin, isBuiltin = c.p.Uses[fun].(*types.Builtin) + builtin, isBuiltin = fc.pkgCtx.Uses[fun].(*types.Builtin) if isBuiltin && builtin.Name() == "recover" { - c.Printf("$deferred.push([$recover, []]);") + fc.Printf("$deferred.push([$recover, []]);") return } case *ast.SelectorExpr: - isJs = typesutil.IsJsPackage(c.p.Uses[fun.Sel].Pkg()) + isJs = typesutil.IsJsPackage(fc.pkgCtx.Uses[fun.Sel].Pkg()) } - sig := c.p.TypeOf(s.Call.Fun).Underlying().(*types.Signature) - args := c.translateArgs(sig, s.Call.Args, s.Call.Ellipsis.IsValid()) + sig := fc.pkgCtx.TypeOf(s.Call.Fun).Underlying().(*types.Signature) + sigTypes := signatureTypes{Sig: sig} + args := fc.translateArgs(sig, s.Call.Args, s.Call.Ellipsis.IsValid()) if isBuiltin || isJs { + // Since some builtins or js.Object methods may not transpile into + // callable expressions, we need to wrap then in a proxy lambda in order + // to push them onto the deferral stack. vars := make([]string, len(s.Call.Args)) callArgs := make([]ast.Expr, len(s.Call.Args)) - for i, arg := range s.Call.Args { - v := c.newVariable("_arg") + ellipsis := s.Call.Ellipsis + + for i := range s.Call.Args { + v := fc.newVariable("_arg") vars[i] = v - callArgs[i] = c.newIdent(v, c.p.TypeOf(arg)) + // Subtle: the proxy lambda argument needs to be assigned with the type + // that the original function expects, and not with the argument + // expression result type, or we may do implicit type conversion twice. + callArgs[i] = fc.newIdent(v, sigTypes.Param(i, ellipsis.IsValid())) } - call := c.translateExpr(&ast.CallExpr{ + call := fc.translateExpr(&ast.CallExpr{ Fun: s.Call.Fun, Args: callArgs, Ellipsis: s.Call.Ellipsis, }) - c.Printf("$deferred.push([function(%s) { %s; }, [%s]]);", strings.Join(vars, ", "), call, strings.Join(args, ", ")) + fc.Printf("$deferred.push([function(%s) { %s; }, [%s]]);", strings.Join(vars, ", "), call, strings.Join(args, ", ")) return } - c.Printf("$deferred.push([%s, [%s]]);", c.translateExpr(s.Call.Fun), strings.Join(args, ", ")) + fc.Printf("$deferred.push([%s, [%s]]);", fc.translateExpr(s.Call.Fun), strings.Join(args, ", ")) case *ast.AssignStmt: if s.Tok != token.ASSIGN && s.Tok != token.DEFINE { @@ -356,35 +365,35 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { case len(s.Lhs) == 1 && len(s.Rhs) == 1: lhs := astutil.RemoveParens(s.Lhs[0]) if isBlank(lhs) { - c.Printf("$unused(%s);", c.translateExpr(s.Rhs[0])) + fc.Printf("$unused(%s);", fc.translateExpr(s.Rhs[0])) return } - c.Printf("%s", c.translateAssign(lhs, s.Rhs[0], s.Tok == token.DEFINE)) + fc.Printf("%s", fc.translateAssign(lhs, s.Rhs[0], s.Tok == token.DEFINE)) case len(s.Lhs) > 1 && len(s.Rhs) == 1: - tupleVar := c.newVariable("_tuple") - c.Printf("%s = %s;", tupleVar, c.translateExpr(s.Rhs[0])) - tuple := c.p.TypeOf(s.Rhs[0]).(*types.Tuple) + tupleVar := fc.newVariable("_tuple") + fc.Printf("%s = %s;", tupleVar, fc.translateExpr(s.Rhs[0])) + tuple := fc.pkgCtx.TypeOf(s.Rhs[0]).(*types.Tuple) for i, lhs := range s.Lhs { lhs = astutil.RemoveParens(lhs) if !isBlank(lhs) { - c.Printf("%s", c.translateAssign(lhs, c.newIdent(fmt.Sprintf("%s[%d]", tupleVar, i), tuple.At(i).Type()), s.Tok == token.DEFINE)) + fc.Printf("%s", fc.translateAssign(lhs, fc.newIdent(fmt.Sprintf("%s[%d]", tupleVar, i), tuple.At(i).Type()), s.Tok == token.DEFINE)) } } case len(s.Lhs) == len(s.Rhs): tmpVars := make([]string, len(s.Rhs)) for i, rhs := range s.Rhs { - tmpVars[i] = c.newVariable("_tmp") + tmpVars[i] = fc.newVariable("_tmp") if isBlank(astutil.RemoveParens(s.Lhs[i])) { - c.Printf("$unused(%s);", c.translateExpr(rhs)) + fc.Printf("$unused(%s);", fc.translateExpr(rhs)) continue } - c.Printf("%s", c.translateAssign(c.newIdent(tmpVars[i], c.p.TypeOf(s.Lhs[i])), rhs, true)) + fc.Printf("%s", fc.translateAssign(fc.newIdent(tmpVars[i], fc.pkgCtx.TypeOf(s.Lhs[i])), rhs, true)) } for i, lhs := range s.Lhs { lhs = astutil.RemoveParens(lhs) if !isBlank(lhs) { - c.Printf("%s", c.translateAssign(lhs, c.newIdent(tmpVars[i], c.p.TypeOf(lhs)), s.Tok == token.DEFINE)) + fc.Printf("%s", fc.translateAssign(lhs, fc.newIdent(tmpVars[i], fc.pkgCtx.TypeOf(lhs)), s.Tok == token.DEFINE)) } } @@ -407,10 +416,10 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { if len(rhs) == 0 { rhs = make([]ast.Expr, len(lhs)) for i, e := range lhs { - rhs[i] = c.zeroValue(c.p.TypeOf(e)) + rhs[i] = fc.zeroValue(fc.pkgCtx.TypeOf(e)) } } - c.translateStmt(&ast.AssignStmt{ + fc.translateStmt(&ast.AssignStmt{ Lhs: lhs, Tok: token.DEFINE, Rhs: rhs, @@ -418,42 +427,42 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { } case token.TYPE: for _, spec := range decl.Specs { - o := c.p.Defs[spec.(*ast.TypeSpec).Name].(*types.TypeName) - c.p.typeNames = append(c.p.typeNames, o) - c.p.objectNames[o] = c.newVariableWithLevel(o.Name(), true) - c.p.dependencies[o] = true + o := fc.pkgCtx.Defs[spec.(*ast.TypeSpec).Name].(*types.TypeName) + fc.pkgCtx.typeNames = append(fc.pkgCtx.typeNames, o) + fc.pkgCtx.objectNames[o] = fc.newVariableWithLevel(o.Name(), true) + fc.pkgCtx.dependencies[o] = true } case token.CONST: // skip, constants are inlined } case *ast.ExprStmt: - expr := c.translateExpr(s.X) + expr := fc.translateExpr(s.X) if expr != nil && expr.String() != "" { - c.Printf("%s;", expr) + fc.Printf("%s;", expr) } case *ast.LabeledStmt: - label := c.p.Defs[s.Label].(*types.Label) - if c.GotoLabel[label] { - c.PrintCond(false, s.Label.Name+":", fmt.Sprintf("case %d:", c.labelCase(label))) + label := fc.pkgCtx.Defs[s.Label].(*types.Label) + if fc.GotoLabel[label] { + fc.PrintCond(false, s.Label.Name+":", fmt.Sprintf("case %d:", fc.labelCase(label))) } - c.translateStmt(s.Stmt, label) + fc.translateStmt(s.Stmt, label) case *ast.GoStmt: - c.Printf("$go(%s, [%s]);", c.translateExpr(s.Call.Fun), strings.Join(c.translateArgs(c.p.TypeOf(s.Call.Fun).Underlying().(*types.Signature), s.Call.Args, s.Call.Ellipsis.IsValid()), ", ")) + fc.Printf("$go(%s, [%s]);", fc.translateExpr(s.Call.Fun), strings.Join(fc.translateArgs(fc.pkgCtx.TypeOf(s.Call.Fun).Underlying().(*types.Signature), s.Call.Args, s.Call.Ellipsis.IsValid()), ", ")) case *ast.SendStmt: - chanType := c.p.TypeOf(s.Chan).Underlying().(*types.Chan) + chanType := fc.pkgCtx.TypeOf(s.Chan).Underlying().(*types.Chan) call := &ast.CallExpr{ - Fun: c.newIdent("$send", types.NewSignature(nil, types.NewTuple(types.NewVar(0, nil, "", chanType), types.NewVar(0, nil, "", chanType.Elem())), nil, false)), - Args: []ast.Expr{s.Chan, c.newIdent(c.translateImplicitConversionWithCloning(s.Value, chanType.Elem()).String(), chanType.Elem())}, + Fun: fc.newIdent("$send", types.NewSignature(nil, types.NewTuple(types.NewVar(0, nil, "", chanType), types.NewVar(0, nil, "", chanType.Elem())), nil, false)), + Args: []ast.Expr{s.Chan, fc.newIdent(fc.translateImplicitConversionWithCloning(s.Value, chanType.Elem()).String(), chanType.Elem())}, } - c.Blocking[call] = true - c.translateStmt(&ast.ExprStmt{X: call}, label) + fc.Blocking[call] = true + fc.translateStmt(&ast.ExprStmt{X: call}, label) case *ast.SelectStmt: - selectionVar := c.newVariable("_selection") + selectionVar := fc.newVariable("_selection") var channels []string var caseClauses []*ast.CaseClause flattened := false @@ -465,26 +474,26 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { channels = append(channels, "[]") hasDefault = true case *ast.ExprStmt: - channels = append(channels, c.formatExpr("[%e]", astutil.RemoveParens(comm.X).(*ast.UnaryExpr).X).String()) + channels = append(channels, fc.formatExpr("[%e]", astutil.RemoveParens(comm.X).(*ast.UnaryExpr).X).String()) case *ast.AssignStmt: - channels = append(channels, c.formatExpr("[%e]", astutil.RemoveParens(comm.Rhs[0]).(*ast.UnaryExpr).X).String()) + channels = append(channels, fc.formatExpr("[%e]", astutil.RemoveParens(comm.Rhs[0]).(*ast.UnaryExpr).X).String()) case *ast.SendStmt: - chanType := c.p.TypeOf(comm.Chan).Underlying().(*types.Chan) - channels = append(channels, c.formatExpr("[%e, %s]", comm.Chan, c.translateImplicitConversionWithCloning(comm.Value, chanType.Elem())).String()) + chanType := fc.pkgCtx.TypeOf(comm.Chan).Underlying().(*types.Chan) + channels = append(channels, fc.formatExpr("[%e, %s]", comm.Chan, fc.translateImplicitConversionWithCloning(comm.Value, chanType.Elem())).String()) default: panic(fmt.Sprintf("unhandled: %T", comm)) } indexLit := &ast.BasicLit{Kind: token.INT} - c.p.Types[indexLit] = types.TypeAndValue{Type: types.Typ[types.Int], Value: constant.MakeInt64(int64(i))} + fc.pkgCtx.Types[indexLit] = types.TypeAndValue{Type: types.Typ[types.Int], Value: constant.MakeInt64(int64(i))} var bodyPrefix []ast.Stmt if assign, ok := clause.Comm.(*ast.AssignStmt); ok { - switch rhsType := c.p.TypeOf(assign.Rhs[0]).(type) { + switch rhsType := fc.pkgCtx.TypeOf(assign.Rhs[0]).(type) { case *types.Tuple: - bodyPrefix = []ast.Stmt{&ast.AssignStmt{Lhs: assign.Lhs, Rhs: []ast.Expr{c.newIdent(selectionVar+"[1]", rhsType)}, Tok: assign.Tok}} + bodyPrefix = []ast.Stmt{&ast.AssignStmt{Lhs: assign.Lhs, Rhs: []ast.Expr{fc.newIdent(selectionVar+"[1]", rhsType)}, Tok: assign.Tok}} default: - bodyPrefix = []ast.Stmt{&ast.AssignStmt{Lhs: assign.Lhs, Rhs: []ast.Expr{c.newIdent(selectionVar+"[1][0]", rhsType)}, Tok: assign.Tok}} + bodyPrefix = []ast.Stmt{&ast.AssignStmt{Lhs: assign.Lhs, Rhs: []ast.Expr{fc.newIdent(selectionVar+"[1][0]", rhsType)}, Tok: assign.Tok}} } } @@ -493,21 +502,21 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { Body: append(bodyPrefix, clause.Body...), }) - flattened = flattened || c.Flattened[clause] + flattened = flattened || fc.Flattened[clause] } - selectCall := c.setType(&ast.CallExpr{ - Fun: c.newIdent("$select", types.NewSignature(nil, types.NewTuple(types.NewVar(0, nil, "", types.NewInterface(nil, nil))), types.NewTuple(types.NewVar(0, nil, "", types.Typ[types.Int])), false)), - Args: []ast.Expr{c.newIdent(fmt.Sprintf("[%s]", strings.Join(channels, ", ")), types.NewInterface(nil, nil))}, + selectCall := fc.setType(&ast.CallExpr{ + Fun: fc.newIdent("$select", types.NewSignature(nil, types.NewTuple(types.NewVar(0, nil, "", types.NewInterface(nil, nil))), types.NewTuple(types.NewVar(0, nil, "", types.Typ[types.Int])), false)), + Args: []ast.Expr{fc.newIdent(fmt.Sprintf("[%s]", strings.Join(channels, ", ")), types.NewInterface(nil, nil))}, }, types.Typ[types.Int]) - c.Blocking[selectCall] = !hasDefault - c.Printf("%s = %s;", selectionVar, c.translateExpr(selectCall)) + fc.Blocking[selectCall] = !hasDefault + fc.Printf("%s = %s;", selectionVar, fc.translateExpr(selectCall)) if len(caseClauses) != 0 { translateCond := func(cond ast.Expr) *expression { - return c.formatExpr("%s[0] === %e", selectionVar, cond) + return fc.formatExpr("%s[0] === %e", selectionVar, cond) } - c.translateBranchingStmt(caseClauses, nil, true, translateCond, label, flattened) + fc.translateBranchingStmt(caseClauses, nil, true, translateCond, label, flattened) } case *ast.EmptyStmt: @@ -519,31 +528,31 @@ func (c *funcContext) translateStmt(stmt ast.Stmt, label *types.Label) { } } -func (c *funcContext) translateBranchingStmt(caseClauses []*ast.CaseClause, defaultClause *ast.CaseClause, canBreak bool, translateCond func(ast.Expr) *expression, label *types.Label, flatten bool) { +func (fc *funcContext) translateBranchingStmt(caseClauses []*ast.CaseClause, defaultClause *ast.CaseClause, canBreak bool, translateCond func(ast.Expr) *expression, label *types.Label, flatten bool) { var caseOffset, defaultCase, endCase int if flatten { - caseOffset = c.caseCounter + caseOffset = fc.caseCounter defaultCase = caseOffset + len(caseClauses) endCase = defaultCase if defaultClause != nil { endCase++ } - c.caseCounter = endCase + 1 + fc.caseCounter = endCase + 1 } hasBreak := false if canBreak { - prevFlowData := c.flowDatas[nil] + prevFlowData := fc.flowDatas[nil] data := &flowData{ postStmt: prevFlowData.postStmt, // for "continue" of outer loop beginCase: prevFlowData.beginCase, // same endCase: endCase, } - c.flowDatas[nil] = data - c.flowDatas[label] = data + fc.flowDatas[nil] = data + fc.flowDatas[label] = data defer func() { - delete(c.flowDatas, label) - c.flowDatas[nil] = prevFlowData + delete(fc.flowDatas, label) + fc.flowDatas[nil] = prevFlowData }() for _, child := range caseClauses { @@ -558,7 +567,7 @@ func (c *funcContext) translateBranchingStmt(caseClauses []*ast.CaseClause, defa } if label != nil && !flatten { - c.Printf("%s:", label.Name()) + fc.Printf("%s:", label.Name()) } condStrs := make([]string, len(caseClauses)) @@ -569,12 +578,12 @@ func (c *funcContext) translateBranchingStmt(caseClauses []*ast.CaseClause, defa } condStrs[i] = strings.Join(conds, " || ") if flatten { - c.Printf("/* */ if (%s) { $s = %d; continue; }", condStrs[i], caseOffset+i) + fc.Printf("/* */ if (%s) { $s = %d; continue; }", condStrs[i], caseOffset+i) } } if flatten { - c.Printf("/* */ $s = %d; continue;", defaultCase) + fc.Printf("/* */ $s = %d; continue;", defaultCase) } prefix := "" @@ -585,61 +594,61 @@ func (c *funcContext) translateBranchingStmt(caseClauses []*ast.CaseClause, defa } for i, clause := range caseClauses { - c.SetPos(clause.Pos()) - c.PrintCond(!flatten, fmt.Sprintf("%sif (%s) {", prefix, condStrs[i]), fmt.Sprintf("case %d:", caseOffset+i)) - c.Indent(func() { - c.translateStmtList(clause.Body) + fc.SetPos(clause.Pos()) + fc.PrintCond(!flatten, fmt.Sprintf("%sif (%s) {", prefix, condStrs[i]), fmt.Sprintf("case %d:", caseOffset+i)) + fc.Indent(func() { + fc.translateStmtList(clause.Body) if flatten && (i < len(caseClauses)-1 || defaultClause != nil) && !endsWithReturn(clause.Body) { - c.Printf("$s = %d; continue;", endCase) + fc.Printf("$s = %d; continue;", endCase) } }) prefix = "} else " } if defaultClause != nil { - c.PrintCond(!flatten, prefix+"{", fmt.Sprintf("case %d:", caseOffset+len(caseClauses))) - c.Indent(func() { - c.translateStmtList(defaultClause.Body) + fc.PrintCond(!flatten, prefix+"{", fmt.Sprintf("case %d:", caseOffset+len(caseClauses))) + fc.Indent(func() { + fc.translateStmtList(defaultClause.Body) }) } - c.PrintCond(!flatten, "}"+suffix, fmt.Sprintf("case %d:", endCase)) + fc.PrintCond(!flatten, "}"+suffix, fmt.Sprintf("case %d:", endCase)) } -func (c *funcContext) translateLoopingStmt(cond func() string, body *ast.BlockStmt, bodyPrefix, post func(), label *types.Label, flatten bool) { - prevFlowData := c.flowDatas[nil] +func (fc *funcContext) translateLoopingStmt(cond func() string, body *ast.BlockStmt, bodyPrefix, post func(), label *types.Label, flatten bool) { + prevFlowData := fc.flowDatas[nil] data := &flowData{ postStmt: post, } if flatten { - data.beginCase = c.caseCounter - data.endCase = c.caseCounter + 1 - c.caseCounter += 2 + data.beginCase = fc.caseCounter + data.endCase = fc.caseCounter + 1 + fc.caseCounter += 2 } - c.flowDatas[nil] = data - c.flowDatas[label] = data + fc.flowDatas[nil] = data + fc.flowDatas[label] = data defer func() { - delete(c.flowDatas, label) - c.flowDatas[nil] = prevFlowData + delete(fc.flowDatas, label) + fc.flowDatas[nil] = prevFlowData }() if !flatten && label != nil { - c.Printf("%s:", label.Name()) + fc.Printf("%s:", label.Name()) } - c.PrintCond(!flatten, "while (true) {", fmt.Sprintf("case %d:", data.beginCase)) - c.Indent(func() { + fc.PrintCond(!flatten, "while (true) {", fmt.Sprintf("case %d:", data.beginCase)) + fc.Indent(func() { condStr := cond() if condStr != "true" { - c.PrintCond(!flatten, fmt.Sprintf("if (!(%s)) { break; }", condStr), fmt.Sprintf("if(!(%s)) { $s = %d; continue; }", condStr, data.endCase)) + fc.PrintCond(!flatten, fmt.Sprintf("if (!(%s)) { break; }", condStr), fmt.Sprintf("if(!(%s)) { $s = %d; continue; }", condStr, data.endCase)) } - prevEV := c.p.escapingVars - c.handleEscapingVars(body) + prevEV := fc.pkgCtx.escapingVars + fc.handleEscapingVars(body) if bodyPrefix != nil { bodyPrefix() } - c.translateStmtList(body.List) + fc.translateStmtList(body.List) isTerminated := false if len(body.List) != 0 { switch body.List[len(body.List)-1].(type) { @@ -651,31 +660,31 @@ func (c *funcContext) translateLoopingStmt(cond func() string, body *ast.BlockSt post() } - c.p.escapingVars = prevEV + fc.pkgCtx.escapingVars = prevEV }) - c.PrintCond(!flatten, "}", fmt.Sprintf("$s = %d; continue; case %d:", data.beginCase, data.endCase)) + fc.PrintCond(!flatten, "}", fmt.Sprintf("$s = %d; continue; case %d:", data.beginCase, data.endCase)) } -func (c *funcContext) translateAssign(lhs, rhs ast.Expr, define bool) string { +func (fc *funcContext) translateAssign(lhs, rhs ast.Expr, define bool) string { lhs = astutil.RemoveParens(lhs) if isBlank(lhs) { panic("translateAssign with blank lhs") } if l, ok := lhs.(*ast.IndexExpr); ok { - if t, ok := c.p.TypeOf(l.X).Underlying().(*types.Map); ok { - if typesutil.IsJsObject(c.p.TypeOf(l.Index)) { - c.p.errList = append(c.p.errList, types.Error{Fset: c.p.fileSet, Pos: l.Index.Pos(), Msg: "cannot use js.Object as map key"}) + if t, ok := fc.pkgCtx.TypeOf(l.X).Underlying().(*types.Map); ok { + if typesutil.IsJsObject(fc.pkgCtx.TypeOf(l.Index)) { + fc.pkgCtx.errList = append(fc.pkgCtx.errList, types.Error{Fset: fc.pkgCtx.fileSet, Pos: l.Index.Pos(), Msg: "cannot use js.Object as map key"}) } - keyVar := c.newVariable("_key") - return fmt.Sprintf(`%s = %s; (%s || $throwRuntimeError("assignment to entry in nil map"))[%s.keyFor(%s)] = { k: %s, v: %s };`, keyVar, c.translateImplicitConversionWithCloning(l.Index, t.Key()), c.translateExpr(l.X), c.typeName(t.Key()), keyVar, keyVar, c.translateImplicitConversionWithCloning(rhs, t.Elem())) + keyVar := fc.newVariable("_key") + return fmt.Sprintf(`%s = %s; (%s || $throwRuntimeError("assignment to entry in nil map"))[%s.keyFor(%s)] = { k: %s, v: %s };`, keyVar, fc.translateImplicitConversionWithCloning(l.Index, t.Key()), fc.translateExpr(l.X), fc.typeName(t.Key()), keyVar, keyVar, fc.translateImplicitConversionWithCloning(rhs, t.Elem())) } } - lhsType := c.p.TypeOf(lhs) - rhsExpr := c.translateImplicitConversion(rhs, lhsType) + lhsType := fc.pkgCtx.TypeOf(lhs) + rhsExpr := fc.translateImplicitConversion(rhs, lhsType) if _, ok := rhs.(*ast.CompositeLit); ok && define { - return fmt.Sprintf("%s = %s;", c.translateExpr(lhs), rhsExpr) // skip $copy + return fmt.Sprintf("%s = %s;", fc.translateExpr(lhs), rhsExpr) // skip $copy } isReflectValue := false @@ -686,38 +695,38 @@ func (c *funcContext) translateAssign(lhs, rhs ast.Expr, define bool) string { switch lhsType.Underlying().(type) { case *types.Array, *types.Struct: if define { - return fmt.Sprintf("%s = $clone(%s, %s);", c.translateExpr(lhs), rhsExpr, c.typeName(lhsType)) + return fmt.Sprintf("%s = $clone(%s, %s);", fc.translateExpr(lhs), rhsExpr, fc.typeName(lhsType)) } - return fmt.Sprintf("%s.copy(%s, %s);", c.typeName(lhsType), c.translateExpr(lhs), rhsExpr) + return fmt.Sprintf("%s.copy(%s, %s);", fc.typeName(lhsType), fc.translateExpr(lhs), rhsExpr) } } switch l := lhs.(type) { case *ast.Ident: - return fmt.Sprintf("%s = %s;", c.objectName(c.p.ObjectOf(l)), rhsExpr) + return fmt.Sprintf("%s = %s;", fc.objectName(fc.pkgCtx.ObjectOf(l)), rhsExpr) case *ast.SelectorExpr: - sel, ok := c.p.SelectionOf(l) + sel, ok := fc.pkgCtx.SelectionOf(l) if !ok { // qualified identifier - return fmt.Sprintf("%s = %s;", c.objectName(c.p.Uses[l.Sel]), rhsExpr) + return fmt.Sprintf("%s = %s;", fc.objectName(fc.pkgCtx.Uses[l.Sel]), rhsExpr) } - fields, jsTag := c.translateSelection(sel, l.Pos()) + fields, jsTag := fc.translateSelection(sel, l.Pos()) if jsTag != "" { - return fmt.Sprintf("%s.%s%s = %s;", c.translateExpr(l.X), strings.Join(fields, "."), formatJSStructTagVal(jsTag), c.externalize(rhsExpr.String(), sel.Type())) + return fmt.Sprintf("%s.%s%s = %s;", fc.translateExpr(l.X), strings.Join(fields, "."), formatJSStructTagVal(jsTag), fc.externalize(rhsExpr.String(), sel.Type())) } - return fmt.Sprintf("%s.%s = %s;", c.translateExpr(l.X), strings.Join(fields, "."), rhsExpr) + return fmt.Sprintf("%s.%s = %s;", fc.translateExpr(l.X), strings.Join(fields, "."), rhsExpr) case *ast.StarExpr: - return fmt.Sprintf("%s.$set(%s);", c.translateExpr(l.X), rhsExpr) + return fmt.Sprintf("%s.$set(%s);", fc.translateExpr(l.X), rhsExpr) case *ast.IndexExpr: - switch t := c.p.TypeOf(l.X).Underlying().(type) { + switch t := fc.pkgCtx.TypeOf(l.X).Underlying().(type) { case *types.Array, *types.Pointer: - pattern := rangeCheck("%1e[%2f] = %3s", c.p.Types[l.Index].Value != nil, true) + pattern := rangeCheck("%1e[%2f] = %3s", fc.pkgCtx.Types[l.Index].Value != nil, true) if _, ok := t.(*types.Pointer); ok { // check pointer for nil (attribute getter causes a panic) pattern = `%1e.nilCheck, ` + pattern } - return c.formatExpr(pattern, l.X, l.Index, rhsExpr).String() + ";" + return fc.formatExpr(pattern, l.X, l.Index, rhsExpr).String() + ";" case *types.Slice: - return c.formatExpr(rangeCheck("%1e.$array[%1e.$offset + %2f] = %3s", c.p.Types[l.Index].Value != nil, false), l.X, l.Index, rhsExpr).String() + ";" + return fc.formatExpr(rangeCheck("%1e.$array[%1e.$offset + %2f] = %3s", fc.pkgCtx.Types[l.Index].Value != nil, false), l.X, l.Index, rhsExpr).String() + ";" default: panic(fmt.Sprintf("Unhandled lhs type: %T\n", t)) } @@ -726,61 +735,61 @@ func (c *funcContext) translateAssign(lhs, rhs ast.Expr, define bool) string { } } -func (c *funcContext) translateResults(results []ast.Expr) string { - tuple := c.sig.Results() +func (fc *funcContext) translateResults(results []ast.Expr) string { + tuple := fc.sig.Results() switch tuple.Len() { case 0: return "" case 1: - result := c.zeroValue(tuple.At(0).Type()) + result := fc.zeroValue(tuple.At(0).Type()) if results != nil { result = results[0] } - v := c.translateImplicitConversion(result, tuple.At(0).Type()) - c.delayedOutput = nil + v := fc.translateImplicitConversion(result, tuple.At(0).Type()) + fc.delayedOutput = nil return " " + v.String() default: if len(results) == 1 { - resultTuple := c.p.TypeOf(results[0]).(*types.Tuple) + resultTuple := fc.pkgCtx.TypeOf(results[0]).(*types.Tuple) if resultTuple.Len() != tuple.Len() { panic("invalid tuple return assignment") } - resultExpr := c.translateExpr(results[0]).String() + resultExpr := fc.translateExpr(results[0]).String() if types.Identical(resultTuple, tuple) { return " " + resultExpr } - tmpVar := c.newVariable("_returncast") - c.Printf("%s = %s;", tmpVar, resultExpr) + tmpVar := fc.newVariable("_returncast") + fc.Printf("%s = %s;", tmpVar, resultExpr) // Not all the return types matched, map everything out for implicit casting results = make([]ast.Expr, resultTuple.Len()) for i := range results { - results[i] = c.newIdent(fmt.Sprintf("%s[%d]", tmpVar, i), resultTuple.At(i).Type()) + results[i] = fc.newIdent(fmt.Sprintf("%s[%d]", tmpVar, i), resultTuple.At(i).Type()) } } values := make([]string, tuple.Len()) for i := range values { - result := c.zeroValue(tuple.At(i).Type()) + result := fc.zeroValue(tuple.At(i).Type()) if results != nil { result = results[i] } - values[i] = c.translateImplicitConversion(result, tuple.At(i).Type()).String() + values[i] = fc.translateImplicitConversion(result, tuple.At(i).Type()).String() } - c.delayedOutput = nil + fc.delayedOutput = nil return " [" + strings.Join(values, ", ") + "]" } } -func (c *funcContext) labelCase(label *types.Label) int { - labelCase, ok := c.labelCases[label] +func (fc *funcContext) labelCase(label *types.Label) int { + labelCase, ok := fc.labelCases[label] if !ok { - labelCase = c.caseCounter - c.caseCounter++ - c.labelCases[label] = labelCase + labelCase = fc.caseCounter + fc.caseCounter++ + fc.labelCases[label] = labelCase } return labelCase } diff --git a/compiler/utils.go b/compiler/utils.go index d5452e0a6..64946c69f 100644 --- a/compiler/utils.go +++ b/compiler/utils.go @@ -19,115 +19,127 @@ import ( "github.com/gopherjs/gopherjs/compiler/typesutil" ) -func (c *funcContext) Write(b []byte) (int, error) { - c.writePos() - c.output = append(c.output, b...) +func (fc *funcContext) Write(b []byte) (int, error) { + fc.writePos() + fc.output = append(fc.output, b...) return len(b), nil } -func (c *funcContext) Printf(format string, values ...interface{}) { - c.Write([]byte(strings.Repeat("\t", c.p.indentation))) - fmt.Fprintf(c, format, values...) - c.Write([]byte{'\n'}) - c.Write(c.delayedOutput) - c.delayedOutput = nil +func (fc *funcContext) Printf(format string, values ...interface{}) { + fc.Write([]byte(strings.Repeat("\t", fc.pkgCtx.indentation))) + fmt.Fprintf(fc, format, values...) + fc.Write([]byte{'\n'}) + fc.Write(fc.delayedOutput) + fc.delayedOutput = nil } -func (c *funcContext) PrintCond(cond bool, onTrue, onFalse string) { +func (fc *funcContext) PrintCond(cond bool, onTrue, onFalse string) { if !cond { - c.Printf("/* %s */ %s", strings.Replace(onTrue, "*/", "/", -1), onFalse) + fc.Printf("/* %s */ %s", strings.Replace(onTrue, "*/", "/", -1), onFalse) return } - c.Printf("%s", onTrue) + fc.Printf("%s", onTrue) } -func (c *funcContext) SetPos(pos token.Pos) { - c.posAvailable = true - c.pos = pos +func (fc *funcContext) SetPos(pos token.Pos) { + fc.posAvailable = true + fc.pos = pos } -func (c *funcContext) writePos() { - if c.posAvailable { - c.posAvailable = false - c.Write([]byte{'\b'}) - binary.Write(c, binary.BigEndian, uint32(c.pos)) +func (fc *funcContext) writePos() { + if fc.posAvailable { + fc.posAvailable = false + fc.Write([]byte{'\b'}) + binary.Write(fc, binary.BigEndian, uint32(fc.pos)) } } -func (c *funcContext) Indent(f func()) { - c.p.indentation++ +func (fc *funcContext) Indent(f func()) { + fc.pkgCtx.indentation++ f() - c.p.indentation-- + fc.pkgCtx.indentation-- } -func (c *funcContext) CatchOutput(indent int, f func()) []byte { - origoutput := c.output - c.output = nil - c.p.indentation += indent +func (fc *funcContext) CatchOutput(indent int, f func()) []byte { + origoutput := fc.output + fc.output = nil + fc.pkgCtx.indentation += indent f() - c.writePos() - catched := c.output - c.output = origoutput - c.p.indentation -= indent - return catched + fc.writePos() + caught := fc.output + fc.output = origoutput + fc.pkgCtx.indentation -= indent + return caught } -func (c *funcContext) Delayed(f func()) { - c.delayedOutput = c.CatchOutput(0, f) +func (fc *funcContext) Delayed(f func()) { + fc.delayedOutput = fc.CatchOutput(0, f) } -func (c *funcContext) translateArgs(sig *types.Signature, argExprs []ast.Expr, ellipsis bool) []string { - if len(argExprs) == 1 { - if tuple, isTuple := c.p.TypeOf(argExprs[0]).(*types.Tuple); isTuple { - tupleVar := c.newVariable("_tuple") - c.Printf("%s = %s;", tupleVar, c.translateExpr(argExprs[0])) - argExprs = make([]ast.Expr, tuple.Len()) - for i := range argExprs { - argExprs[i] = c.newIdent(c.formatExpr("%s[%d]", tupleVar, i).String(), tuple.At(i).Type()) - } - } +// expandTupleArgs converts a function call which argument is a tuple returned +// by another function into a set of individual call arguments corresponding to +// tuple elements. +// +// For example, for functions defined as: +// func a() (int, string) {return 42, "foo"} +// func b(a1 int, a2 string) {} +// ...the following statement: +// b(a()) +// ...will be transformed into: +// _tuple := a() +// b(_tuple[0], _tuple[1]) +func (fc *funcContext) expandTupleArgs(argExprs []ast.Expr) []ast.Expr { + if len(argExprs) != 1 { + return argExprs } - paramsLen := sig.Params().Len() + tuple, isTuple := fc.pkgCtx.TypeOf(argExprs[0]).(*types.Tuple) + if !isTuple { + return argExprs + } - var varargType *types.Slice - if sig.Variadic() && !ellipsis { - varargType = sig.Params().At(paramsLen - 1).Type().(*types.Slice) + tupleVar := fc.newVariable("_tuple") + fc.Printf("%s = %s;", tupleVar, fc.translateExpr(argExprs[0])) + argExprs = make([]ast.Expr, tuple.Len()) + for i := range argExprs { + argExprs[i] = fc.newIdent(fc.formatExpr("%s[%d]", tupleVar, i).String(), tuple.At(i).Type()) } + return argExprs +} + +func (fc *funcContext) translateArgs(sig *types.Signature, argExprs []ast.Expr, ellipsis bool) []string { + argExprs = fc.expandTupleArgs(argExprs) + + sigTypes := signatureTypes{Sig: sig} preserveOrder := false for i := 1; i < len(argExprs); i++ { - preserveOrder = preserveOrder || c.Blocking[argExprs[i]] + preserveOrder = preserveOrder || fc.Blocking[argExprs[i]] } args := make([]string, len(argExprs)) for i, argExpr := range argExprs { - var argType types.Type - switch { - case varargType != nil && i >= paramsLen-1: - argType = varargType.Elem() - default: - argType = sig.Params().At(i).Type() - } - - arg := c.translateImplicitConversionWithCloning(argExpr, argType).String() + arg := fc.translateImplicitConversionWithCloning(argExpr, sigTypes.Param(i, ellipsis)).String() - if preserveOrder && c.p.Types[argExpr].Value == nil { - argVar := c.newVariable("_arg") - c.Printf("%s = %s;", argVar, arg) + if preserveOrder && fc.pkgCtx.Types[argExpr].Value == nil { + argVar := fc.newVariable("_arg") + fc.Printf("%s = %s;", argVar, arg) arg = argVar } args[i] = arg } - if varargType != nil { - return append(args[:paramsLen-1], fmt.Sprintf("new %s([%s])", c.typeName(varargType), strings.Join(args[paramsLen-1:], ", "))) + // If variadic arguments were passed in as individual elements, regroup them + // into a slice and pass it as a single argument. + if sig.Variadic() && !ellipsis { + return append(args[:sigTypes.RequiredParams()], + fmt.Sprintf("new %s([%s])", fc.typeName(sigTypes.VariadicType()), strings.Join(args[sigTypes.RequiredParams():], ", "))) } return args } -func (c *funcContext) translateSelection(sel selection, pos token.Pos) ([]string, string) { +func (fc *funcContext) translateSelection(sel selection, pos token.Pos) ([]string, string) { var fields []string t := sel.Recv() for _, index := range sel.Index() { @@ -150,7 +162,7 @@ func (c *funcContext) translateSelection(sel selection, pos token.Pos) ([]string var ok bool s, ok = ft.(*types.Struct) if !ok || s.NumFields() == 0 { - c.p.errList = append(c.p.errList, types.Error{Fset: c.p.fileSet, Pos: pos, Msg: fmt.Sprintf("could not find field with type *js.Object for 'js' tag of field '%s'", jsFieldName), Soft: true}) + fc.pkgCtx.errList = append(fc.pkgCtx.errList, types.Error{Fset: fc.pkgCtx.fileSet, Pos: pos, Msg: fmt.Sprintf("could not find field with type *js.Object for 'js' tag of field '%s'", jsFieldName), Soft: true}) return nil, "" } } @@ -163,16 +175,16 @@ func (c *funcContext) translateSelection(sel selection, pos token.Pos) ([]string var nilObj = types.Universe.Lookup("nil") -func (c *funcContext) zeroValue(ty types.Type) ast.Expr { +func (fc *funcContext) zeroValue(ty types.Type) ast.Expr { switch t := ty.Underlying().(type) { case *types.Basic: switch { case isBoolean(t): - return c.newConst(ty, constant.MakeBool(false)) + return fc.newConst(ty, constant.MakeBool(false)) case isNumeric(t): - return c.newConst(ty, constant.MakeInt64(0)) + return fc.newConst(ty, constant.MakeInt64(0)) case isString(t): - return c.newConst(ty, constant.MakeString("")) + return fc.newConst(ty, constant.MakeString("")) case t.Kind() == types.UnsafePointer: // fall through to "nil" case t.Kind() == types.UntypedNil: @@ -181,33 +193,33 @@ func (c *funcContext) zeroValue(ty types.Type) ast.Expr { panic(fmt.Sprintf("Unhandled basic type: %v\n", t)) } case *types.Array, *types.Struct: - return c.setType(&ast.CompositeLit{}, ty) + return fc.setType(&ast.CompositeLit{}, ty) case *types.Chan, *types.Interface, *types.Map, *types.Signature, *types.Slice, *types.Pointer: // fall through to "nil" default: panic(fmt.Sprintf("Unhandled type: %T\n", t)) } - id := c.newIdent("nil", ty) - c.p.Uses[id] = nilObj + id := fc.newIdent("nil", ty) + fc.pkgCtx.Uses[id] = nilObj return id } -func (c *funcContext) newConst(t types.Type, value constant.Value) ast.Expr { +func (fc *funcContext) newConst(t types.Type, value constant.Value) ast.Expr { id := &ast.Ident{} - c.p.Types[id] = types.TypeAndValue{Type: t, Value: value} + fc.pkgCtx.Types[id] = types.TypeAndValue{Type: t, Value: value} return id } -func (c *funcContext) newVariable(name string) string { - return c.newVariableWithLevel(name, false) +func (fc *funcContext) newVariable(name string) string { + return fc.newVariableWithLevel(name, false) } -func (c *funcContext) newVariableWithLevel(name string, pkgLevel bool) string { +func (fc *funcContext) newVariableWithLevel(name string, pkgLevel bool) string { if name == "" { panic("newVariable: empty name") } name = encodeIdent(name) - if c.p.minify { + if fc.pkgCtx.minify { i := 0 for { offset := int('a') @@ -217,56 +229,56 @@ func (c *funcContext) newVariableWithLevel(name string, pkgLevel bool) string { j := i name = "" for { - name = string(offset+(j%26)) + name + name = string(rune(offset+(j%26))) + name j = j/26 - 1 if j == -1 { break } } - if c.allVars[name] == 0 { + if fc.allVars[name] == 0 { break } i++ } } - n := c.allVars[name] - c.allVars[name] = n + 1 + n := fc.allVars[name] + fc.allVars[name] = n + 1 varName := name if n > 0 { varName = fmt.Sprintf("%s$%d", name, n) } if pkgLevel { - for c2 := c.parent; c2 != nil; c2 = c2.parent { + for c2 := fc.parent; c2 != nil; c2 = c2.parent { c2.allVars[name] = n + 1 } return varName } - c.localVars = append(c.localVars, varName) + fc.localVars = append(fc.localVars, varName) return varName } -func (c *funcContext) newIdent(name string, t types.Type) *ast.Ident { +func (fc *funcContext) newIdent(name string, t types.Type) *ast.Ident { ident := ast.NewIdent(name) - c.setType(ident, t) - obj := types.NewVar(0, c.p.Pkg, name, t) - c.p.Uses[ident] = obj - c.p.objectNames[obj] = name + fc.setType(ident, t) + obj := types.NewVar(0, fc.pkgCtx.Pkg, name, t) + fc.pkgCtx.Uses[ident] = obj + fc.pkgCtx.objectNames[obj] = name return ident } -func (c *funcContext) setType(e ast.Expr, t types.Type) ast.Expr { - c.p.Types[e] = types.TypeAndValue{Type: t} +func (fc *funcContext) setType(e ast.Expr, t types.Type) ast.Expr { + fc.pkgCtx.Types[e] = types.TypeAndValue{Type: t} return e } -func (c *funcContext) pkgVar(pkg *types.Package) string { - if pkg == c.p.Pkg { +func (fc *funcContext) pkgVar(pkg *types.Package) string { + if pkg == fc.pkgCtx.Pkg { return "$pkg" } - pkgVar, found := c.p.pkgVars[pkg.Path()] + pkgVar, found := fc.pkgCtx.pkgVars[pkg.Path()] if !found { pkgVar = fmt.Sprintf(`$packages["%s"]`, pkg.Path()) } @@ -285,41 +297,41 @@ func isPkgLevel(o types.Object) bool { return o.Parent() != nil && o.Parent().Parent() == types.Universe } -func (c *funcContext) objectName(o types.Object) string { +func (fc *funcContext) objectName(o types.Object) string { if isPkgLevel(o) { - c.p.dependencies[o] = true + fc.pkgCtx.dependencies[o] = true - if o.Pkg() != c.p.Pkg || (isVarOrConst(o) && o.Exported()) { - return c.pkgVar(o.Pkg()) + "." + o.Name() + if o.Pkg() != fc.pkgCtx.Pkg || (isVarOrConst(o) && o.Exported()) { + return fc.pkgVar(o.Pkg()) + "." + o.Name() } } - name, ok := c.p.objectNames[o] + name, ok := fc.pkgCtx.objectNames[o] if !ok { - name = c.newVariableWithLevel(o.Name(), isPkgLevel(o)) - c.p.objectNames[o] = name + name = fc.newVariableWithLevel(o.Name(), isPkgLevel(o)) + fc.pkgCtx.objectNames[o] = name } - if v, ok := o.(*types.Var); ok && c.p.escapingVars[v] { + if v, ok := o.(*types.Var); ok && fc.pkgCtx.escapingVars[v] { return name + "[0]" } return name } -func (c *funcContext) varPtrName(o *types.Var) string { +func (fc *funcContext) varPtrName(o *types.Var) string { if isPkgLevel(o) && o.Exported() { - return c.pkgVar(o.Pkg()) + "." + o.Name() + "$ptr" + return fc.pkgVar(o.Pkg()) + "." + o.Name() + "$ptr" } - name, ok := c.p.varPtrNames[o] + name, ok := fc.pkgCtx.varPtrNames[o] if !ok { - name = c.newVariableWithLevel(o.Name()+"$ptr", isPkgLevel(o)) - c.p.varPtrNames[o] = name + name = fc.newVariableWithLevel(o.Name()+"$ptr", isPkgLevel(o)) + fc.pkgCtx.varPtrNames[o] = name } return name } -func (c *funcContext) typeName(ty types.Type) string { +func (fc *funcContext) typeName(ty types.Type) string { switch t := ty.(type) { case *types.Basic: return "$" + toJavaScriptType(t) @@ -327,26 +339,26 @@ func (c *funcContext) typeName(ty types.Type) string { if t.Obj().Name() == "error" { return "$error" } - return c.objectName(t.Obj()) + return fc.objectName(t.Obj()) case *types.Interface: if t.Empty() { return "$emptyInterface" } } - anonType, ok := c.p.anonTypeMap.At(ty).(*types.TypeName) + anonType, ok := fc.pkgCtx.anonTypeMap.At(ty).(*types.TypeName) if !ok { - c.initArgs(ty) // cause all embedded types to be registered - varName := c.newVariableWithLevel(strings.ToLower(typeKind(ty)[5:])+"Type", true) - anonType = types.NewTypeName(token.NoPos, c.p.Pkg, varName, ty) // fake types.TypeName - c.p.anonTypes = append(c.p.anonTypes, anonType) - c.p.anonTypeMap.Set(ty, anonType) + fc.initArgs(ty) // cause all embedded types to be registered + varName := fc.newVariableWithLevel(strings.ToLower(typeKind(ty)[5:])+"Type", true) + anonType = types.NewTypeName(token.NoPos, fc.pkgCtx.Pkg, varName, ty) // fake types.TypeName + fc.pkgCtx.anonTypes = append(fc.pkgCtx.anonTypes, anonType) + fc.pkgCtx.anonTypeMap.Set(ty, anonType) } - c.p.dependencies[anonType] = true + fc.pkgCtx.dependencies[anonType] = true return anonType.Name() } -func (c *funcContext) externalize(s string, t types.Type) string { +func (fc *funcContext) externalize(s string, t types.Type) string { if typesutil.IsJsObject(t) { return s } @@ -359,18 +371,18 @@ func (c *funcContext) externalize(s string, t types.Type) string { return "null" } } - return fmt.Sprintf("$externalize(%s, %s)", s, c.typeName(t)) + return fmt.Sprintf("$externalize(%s, %s)", s, fc.typeName(t)) } -func (c *funcContext) handleEscapingVars(n ast.Node) { +func (fc *funcContext) handleEscapingVars(n ast.Node) { newEscapingVars := make(map[*types.Var]bool) - for escaping := range c.p.escapingVars { + for escaping := range fc.pkgCtx.escapingVars { newEscapingVars[escaping] = true } - c.p.escapingVars = newEscapingVars + fc.pkgCtx.escapingVars = newEscapingVars var names []string - objs := analysis.EscapingObjects(n, c.p.Info.Info) + objs := analysis.EscapingObjects(n, fc.pkgCtx.Info.Info) sort.Slice(objs, func(i, j int) bool { if objs[i].Name() == objs[j].Name() { return objs[i].Pos() < objs[j].Pos() @@ -378,12 +390,12 @@ func (c *funcContext) handleEscapingVars(n ast.Node) { return objs[i].Name() < objs[j].Name() }) for _, obj := range objs { - names = append(names, c.objectName(obj)) - c.p.escapingVars[obj] = true + names = append(names, fc.objectName(obj)) + fc.pkgCtx.escapingVars[obj] = true } sort.Strings(names) for _, name := range names { - c.Printf("%s = [%s];", name, name) + fc.Printf("%s = [%s];", name, name) } } @@ -671,3 +683,58 @@ func formatJSStructTagVal(jsTag string) string { // Safe to use dot notation without any escaping. return "." + jsTag } + +// signatureTypes is a helper that provides convenient access to function +// signature type information. +type signatureTypes struct { + Sig *types.Signature +} + +// RequiredParams returns the number of required parameters in the function signature. +func (st signatureTypes) RequiredParams() int { + l := st.Sig.Params().Len() + if st.Sig.Variadic() { + return l - 1 // Last parameter is a slice of variadic params. + } + return l +} + +// VariadicType returns the slice-type corresponding to the signature's variadic +// parameter, or nil of the signature is not variadic. With the exception of +// the special-case `append([]byte{}, "string"...)`, the returned type is +// `*types.Slice` and `.Elem()` method can be used to get the type of individual +// arguments. +func (st signatureTypes) VariadicType() types.Type { + if !st.Sig.Variadic() { + return nil + } + return st.Sig.Params().At(st.Sig.Params().Len() - 1).Type() +} + +// Returns the expected argument type for the i'th argument position. +// +// This function is able to return correct expected types for variadic calls +// both when ellipsis syntax (e.g. myFunc(requiredArg, optionalArgSlice...)) +// is used and when optional args are passed individually. +// +// The returned types may differ from the actual argument expression types if +// there is an implicit type conversion involved (e.g. passing a struct into a +// function that expects an interface). +func (st signatureTypes) Param(i int, ellipsis bool) types.Type { + if i < st.RequiredParams() { + return st.Sig.Params().At(i).Type() + } + if !st.Sig.Variadic() { + // This should never happen if the code was type-checked successfully. + panic(fmt.Errorf("Tried to access parameter %d of a non-variadic signature %s", i, st.Sig)) + } + if ellipsis { + return st.VariadicType() + } + return st.VariadicType().(*types.Slice).Elem() +} + +// ErrorAt annotates an error with a position in the source code. +func ErrorAt(err error, fset *token.FileSet, pos token.Pos) error { + return fmt.Errorf("%s: %w", fset.Position(pos), err) +} diff --git a/compiler/version_check.go b/compiler/version_check.go index b248bebff..cc6e3f33f 100644 --- a/compiler/version_check.go +++ b/compiler/version_check.go @@ -1,4 +1,4 @@ -// +build go1.12 +// +build go1.16 package compiler @@ -10,10 +10,10 @@ import ( ) // Version is the GopherJS compiler version string. -const Version = "1.12-3" +const Version = "1.16.0+go1.16.3" // GoVersion is the current Go 1.x version that GopherJS is compatible with. -const GoVersion = 12 +const GoVersion = 16 // CheckGoVersion checks the version of the Go distribution // at goroot, and reports an error if it's not compatible @@ -21,10 +21,10 @@ const GoVersion = 12 func CheckGoVersion(goroot string) error { v, err := ioutil.ReadFile(filepath.Join(goroot, "VERSION")) if err != nil { - return fmt.Errorf("GopherJS %s requires a Go 1.12.x distribution, but failed to read its VERSION file: %v", Version, err) + return fmt.Errorf("GopherJS %s requires a Go 1.16.x distribution, but failed to read its VERSION file: %v", Version, err) } - if !bytes.HasPrefix(v, []byte("go1.12")) { // TODO(dmitshur): Change this before Go 1.120 comes out. - return fmt.Errorf("GopherJS %s requires a Go 1.12.x distribution, but found version %s", Version, v) + if !bytes.HasPrefix(v, []byte("go1.16")) { + return fmt.Errorf("GopherJS %s requires a Go 1.16.x distribution, but found version %s", Version, v) } return nil } diff --git a/doc/compatibility.md b/doc/compatibility.md new file mode 100644 index 000000000..6a4a7ded3 --- /dev/null +++ b/doc/compatibility.md @@ -0,0 +1,67 @@ +# GopherJS compatibility + +_TL;DR: GopherJS aims to provide full compatibility with regular Go, but JavaScript runtime introduces unavoidable differences._ + +Go ecosystem is broad and complex, which means there are several dimensions in which different levels of compatibility can be achieved: + + 1. **[Go Language Specification](https://golang.org/ref/spec)**: full compatibility. With the exception of several minor differences documented below, GopherJS _should_ be fully compliant with the language specification (e.g. type system, goroutines, operations, built-ins, etc.). + 2. **[Go Standard Library](https://pkg.go.dev/std)**: mostly compatible. GopherJS attempts to support as much of standard library as possible, but certain functionality is impossible or difficult to implement within the JavaScript runtime, most of which is related to os interaction, low-level runtime manipulation or `unsafe`. See [package compatibility table](packages.md) and [syscall support](syscalls.md) for details. + 3. **Build system and tooling**: partially compatible. The `gopherjs` CLI tool is used to build and test GopherJS code. It currently supports building `GOPATH` projects, but Go Modules support is missing (see https://github.com/gopherjs/gopherjs/issues/855). Our goal is to reach complete feature parity with the `go` tool, but there is a large amount of work required to get there. Other notable challenges include: + - Limited [compiler directive](pragma.md) (a.k.a. "pragma") support. Those are considered compiler implementation-specific and are generally not portable. + - GopherJS ships with [standard library augmentations](../compiler/natives/src/), that are required to make it work in a browser. Those are applied on-the-fly during the build process and are generally invisible to any third-party tooling such as linters. In most cases that shouldn't matter, since they never change public interfaces of the standard library packages, but this is something to be aware of. + - Runtime debuggers and profilers. Since GopherJS compiles Go to JavaScript, one must use JavaScript debuggers and profilers (e.g. browser dev tools) instead of the normal Go ones (e.g. delve or pprof). Unfortunately, limited sourcemap support makes this experience less than ideal at the moment. + +## Go version compatibility + +In general, for a given release of GopherJS the following statements _should_ be true: + + - GopherJS compiler can be built from source with the latest stable Go release at the time when the GopherJS release is created, or any newer Go release. + + Example: you can build GopherJS `1.12-3` with Go `1.12` or newer. + + - GopherJS compiler can build code using standard library of a specific Go version, normally the latest stable at the time of GopherJS release. In most cases, it should be compatible with all patch versions within the minor Go version, but this is not guaranteed. + + Example: GopherJS `1.16.0+go1.16.2` (see [developer documentation](https://github.com/gopherjs/gopherjs/wiki/Developer-Guidelines#versions) about GopherJS versioning schema) can build code with GOROOT pointing at Go `1.16.0` or `1.16.2`, but not at Go `1.15.x` or `1.17.x`. + + - Users can use older GopherJS releases if they need to target older Go versions, but only the latest GopherJS release is officially supported at this time. + +_Note_: we would love to make GopherJS compatible with more Go releases, but the amount of effort required to support that exceeds amount of time we currently have available. If you wish to lend your help to make that possible, please reach out to us! + +## How to report a incompatibility issue? + +First of all, please check the list of known issues below, [package support table](packages.md), as well as [open issues](https://github.com/gopherjs/gopherjs/issues) on GitHub. If the issue is already known, great! You've saved yourself a bit of time. Feel free to add any extra details you think are relevant, though. + +If the issue is not known yet, please open a new issue on GitHub and include the following information: + + 1. Go and GopherJS versions you are using. + 2. In which environment do you see the issue (browser, nodejs, etc.). + 3. A minimal program that behaves differently when compiled with the regular Go compiler and GopherJS. + +Now that the issue exists, we (GopherJS maintainers) will do our best to address it as promptly as we can. Note, however, that all of us are working on GopherJS in our spare time after our job and family responsibilities, so we can't guarantee an immediate fix. + +🚧 If you would like to help, please consider [submitting a pull request](https://github.com/gopherjs/gopherjs/wiki/Developer-Guidelines) with a fix. If you are unsure of the best way to approach the issue, we will be happy to share whatever knowledge we can! 😃 + +## How to write portable code + +For the most part, GopherJS shouldn't require any special support for the code that only uses [supported standard packages](packages.md). + +However, if you do need to provide different implementations depending on the target architecture, you can use [build constraints](https://golang.org/cmd/go/#hdr-Build_constraints) to do so: + + - `//+build js` — the source will be used for GopherJS and Go WebAssembly, but not for native builds. + - `//+build js,-wasm` — the source will be used for GopherJS only, and not WebAssembly or native builds. + - `//+build js,wasm` — the source will be used for Go WebAssembly, and not GopherJS or native builds. + +Also be careful about using GopherJS-specific packages (e.g. `github.com/gopherjs/gopherjs/js`) or features (e.g. [wrapping JavaScript objects](https://github.com/gopherjs/gopherjs/wiki/JavaScript-Tips-and-Gotchas#tips) into Go structs), since those won't work outside of GopherJS. + +### Portability between Go and TinyGo WebAssembly implementations + +GopherJS implements `syscall/js` package, so it _should_ be able to run most code written for WebAssembly. However, in practice this topic is largely unexplored at this time. + +It is worth noting that GopherJS emulates 32-bit environment, whereas Go WebAssembly is 64 bit, so you should use fixed-size types if you need to guarantee consistent behavior between the two architectures. + +🚧 If you have first-hand experience with this, please consider adding it to this section! + +## Known Go specification violations + + - Bit shifts of a negative amount (e.g. `42 << -1`) panic in Go, but not in GopherJS. + - See also [open issues](https://github.com/gopherjs/gopherjs/issues) and [known failing compiler tests](https://github.com/gopherjs/gopherjs/blob/master/tests/run.go). \ No newline at end of file diff --git a/doc/packages.md b/doc/packages.md index c86c36f32..547062530 100644 --- a/doc/packages.md +++ b/doc/packages.md @@ -22,12 +22,14 @@ container | | -- heap | ✅ yes | -- list | ✅ yes | -- ring | ✅ yes | -crypto | | +context | ✅ yes | +crypto | ✅ yes | -- aes | ✅ yes | -- cipher | ✅ yes | -- des | ✅ yes | -- dsa | ✅ yes | -- ecdsa | ✅ yes | +-- ed25519 | ✅ yes | -- elliptic | ✅ yes | -- hmac | ✅ yes | -- md5 | ✅ yes | @@ -50,6 +52,8 @@ debug | | -- gosym | ☑️ partially | on binaries generated by gc -- macho | ✅ yes | -- pe | ✅ yes | +-- plan9obj | ✅ yes | +embed | ❌ no | Not implemented yet: https://github.com/gopherjs/gopherjs/issues/997. encoding | | -- ascii85 | ✅ yes | -- asn1 | ✅ yes | @@ -69,6 +73,7 @@ fmt | ✅ yes | go | | -- ast | ✅ yes | -- build | ❌ no | +-- build/constraint | ✅ yes | -- constant | ✅ yes | -- doc | ✅ yes | -- format | ✅ yes | @@ -78,11 +83,12 @@ go | | -- scanner | ✅ yes | -- token | ✅ yes | -- types | ❌ no | -hash | | +hash | ✅ yes | -- adler32 | ✅ yes | -- crc32 | ✅ yes | -- crc64 | ✅ yes | -- fnv | ✅ yes | +-- maphash | ✅ yes | html | ✅ yes | -- template | ✅ yes | image | ✅ yes | @@ -95,6 +101,7 @@ image | ✅ yes | index | | -- suffixarray | ✅ yes | io | ✅ yes | +-- fs | ✅ yes | -- ioutil | ✅ yes | log | ✅ yes | -- syslog | ❌ no | @@ -127,10 +134,11 @@ os | ☑️ partially | node.js only path | ✅ yes | -- filepath | ✅ yes | plugin | ❌ no | -reflect | ✅ yes | except StructOf (pending) +reflect | ✅ yes | regexp | ✅ yes | -- syntax | ✅ yes | -runtime | ☑️ partially | SetMutexProfileFraction, SetFinalizer, ReadMemStats, Callers, CallersFrames unsupported +runtime | ☑️ partially | SetMutexProfileFraction, SetFinalizer, ReadMemStats unsupported +-- metrics | ☑️ partially | Same as runtime. -- cgo | ❌ no | -- debug | ❌ no | -- pprof | ❌ no | @@ -142,8 +150,9 @@ strings | ✅ yes | sync | ✅ yes | -- atomic | ✅ yes | syscall | ☑️ partially | node.js only -testing | ☑️ partially | AllocsPerRun unsupported +testing | ☑️ partially | AllocsPerRun and T.Helper are unsupported. -- iotest | ✅ yes | +-- fstest | ✅ yes | -- quick | ✅ yes | text | | -- scanner | ✅ yes | @@ -151,6 +160,7 @@ text | | -- template | ✅ yes | -- -- parse | ✅ yes | time | ✅ yes | UTC and Local only (see [issue](https://github.com/gopherjs/gopherjs/issues/64)) +-- tzdata | ✅ yes | unicode | ✅ yes | -- utf16 | ✅ yes | -- utf8 | ✅ yes | diff --git a/doc/pargma.md b/doc/pargma.md new file mode 100644 index 000000000..55b1eaca0 --- /dev/null +++ b/doc/pargma.md @@ -0,0 +1,35 @@ +# Compiler directives + +Compiler directives allow to provide low-level instructions to the GopherJS +compiler, which are outside of the Go language itself. Compiler directives are +specific to each Go compiler implementation and may be a source of portability +issues, so it is recommended to avoid using them if possible. + +GopherJS compiler supports the following directives: + +## `go:linkname` + +This is a limited version of the `go:linkname` directive the upstream Go +compiler implements. Usage: + +```go +import _ "unsafe" // for go:linkname + +//go:linkname localname import/path.remotename +func localname(arg1 type1, arg2 type2) (returnType, error) +``` + +This directive has an effect of making a `remotename` function from +`import/path` package available to the current package as `localname`. +Signatures of `remotename` and `localname` must be identical. Since this +directive can subvert package incapsulation, the source file that uses the +directive must also import `unsafe`. + +Compared to the upstream Go, the following limitations exist in GopherJS: + + - The directive only works on package-level functions (variables and methods + are not supported). + - The directive can only be used to "import" implementation from another + package, and not to "provide" local implementation to another package. + +See https://github.com/gopherjs/gopherjs/issues/1000 for details. diff --git a/tests/gorepo_test.go b/tests/gorepo_test.go index 957db3e9f..456cf1ebd 100644 --- a/tests/gorepo_test.go +++ b/tests/gorepo_test.go @@ -9,6 +9,9 @@ import ( // Go repository basic compiler tests, and regression tests for fixed compiler bugs. func TestGoRepositoryCompilerTests(t *testing.T) { + if testing.Short() { + t.Skip("skipping Go repository tests in the short mode") + } if runtime.GOARCH == "js" { t.Skip("test meant to be run using normal Go compiler (needs os/exec)") } diff --git a/tests/linkname_test.go b/tests/linkname_test.go new file mode 100644 index 000000000..147ec74bc --- /dev/null +++ b/tests/linkname_test.go @@ -0,0 +1,26 @@ +package tests + +import ( + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/gopherjs/gopherjs/tests/testdata/linkname/one" +) + +func TestLinknames(t *testing.T) { + defer func() { + if err := recover(); err != nil { + t.Fatalf("one.DoAll() paniced: %s", err) + } + }() + want := "doing one\n" + + "doing two\n" + + "doing imported one: doing internal one: one secret\n" + + "doing three\n" + + "doing imported three: doing internal three: three secret\n" + got := one.DoAll() + + if diff := cmp.Diff(want, got); diff != "" { + t.Fatalf("Callink linknamed functions returned a diff (-want,+got):\n%s", diff) + } +} diff --git a/tests/lowlevel_test.go b/tests/lowlevel_test.go index 2d0e7fb9f..4a872407f 100644 --- a/tests/lowlevel_test.go +++ b/tests/lowlevel_test.go @@ -32,3 +32,14 @@ func TestTimeInternalizationExternalization(t *testing.T) { t.Fatalf("got != want:\ngot:\n%s\nwant:\n%s", got, want) } } + +func TestDeferBuiltin(t *testing.T) { + if runtime.GOARCH == "js" { + t.Skip("test meant to be run using normal Go compiler (needs os/exec)") + } + + got, err := exec.Command("gopherjs", "run", filepath.Join("testdata", "defer_builtin.go")).CombinedOutput() + if err != nil { + t.Fatalf("%v:\n%s", err, got) + } +} diff --git a/tests/misc_test.go b/tests/misc_test.go index c3d7835cd..0d9a63e19 100644 --- a/tests/misc_test.go +++ b/tests/misc_test.go @@ -683,7 +683,7 @@ func TestInterfaceConversionRuntimeError(t *testing.T) { } re, ok := r.(runtime.Error) if !ok { - t.Fatalf("got %T, want runtime.Error", r) + t.Fatalf("got %T (%s), want runtime.Error", r, r) } if got, want := re.Error(), "interface conversion: int is not tests.I: missing method Get"; got != want { t.Fatalf("got %q, want %q", got, want) diff --git a/tests/run.go b/tests/run.go index 6968359b3..d53a7915f 100644 --- a/tests/run.go +++ b/tests/run.go @@ -57,7 +57,6 @@ var knownFails = map[string]failReason{ "fixedbugs/bug352.go": {desc: "BUG: bug352 struct{}"}, "fixedbugs/bug409.go": {desc: "1 2 3 4"}, "fixedbugs/bug433.go": {desc: "Error: [object Object]"}, - "fixedbugs/issue10353.go": {desc: "incorrect output"}, "fixedbugs/issue11656.go": {desc: "Error: Native function not implemented: runtime/debug.setPanicOnFault"}, "fixedbugs/issue4085b.go": {desc: "Error: got panic JavaScript error: Invalid typed array length, want len out of range"}, "fixedbugs/issue4316.go": {desc: "Error: runtime error: invalid memory address or nil pointer dereference"}, @@ -103,7 +102,6 @@ var knownFails = map[string]failReason{ // These are new tests in Go 1.10. "fixedbugs/issue21879.go": {desc: "incorrect output related to runtime.Callers, runtime.CallersFrames, etc."}, "fixedbugs/issue21887.go": {desc: "incorrect output (although within spec, not worth fixing) for println(^uint64(0)). got: { '$high': 4294967295, '$low': 4294967295, '$val': [Circular] } want: 18446744073709551615"}, - "fixedbugs/issue22083.go": {category: requiresSourceMapSupport}, // Technically, added in Go 1.9.2. "fixedbugs/issue22660.go": {category: notApplicable, desc: "test of gc compiler, uses os/exec.Command"}, "fixedbugs/issue23305.go": {desc: "GopherJS fails to compile println(0xffffffff), maybe because 32-bit arch"}, @@ -127,6 +125,21 @@ var knownFails = map[string]failReason{ "fixedbugs/issue30977.go": {category: neverTerminates, desc: "does for { runtime.GC() }"}, "fixedbugs/issue32477.go": {category: notApplicable, desc: "uses runtime.SetFinalizer and runtime.GC"}, "fixedbugs/issue32680.go": {category: notApplicable, desc: "uses -gcflags=-d=ssa/check/on flag"}, + + // These are new tests in Go 1.13-1.16. + "fixedbugs/issue19113.go": {category: lowLevelRuntimeDifference, desc: "JavaScript bit shifts by negative amount don't cause an exception"}, + "fixedbugs/issue24491a.go": {category: notApplicable, desc: "tests interaction between unsafe and GC; uses runtime.SetFinalizer()"}, + "fixedbugs/issue24491b.go": {category: notApplicable, desc: "tests interaction between unsafe and GC; uses runtime.SetFinalizer()"}, + "fixedbugs/issue29504.go": {category: notApplicable, desc: "requires source map support beyond what GopherJS currently provides"}, + // This test incorrectly passes because main function's name is returned as "main" and not "main.main". Even number of bugs cancel each other out ¯\_(ツ)_/¯ + // "fixedbugs/issue29735.go": {category: usesUnsupportedPackage, desc: "GopherJS only supports runtime.FuncForPC() with position counters previously returned by runtime.Callers() or runtime.Caller()"}, + "fixedbugs/issue30116.go": {desc: "GopherJS doesn't specify the array/slice index selector in the out-of-bounds message"}, + "fixedbugs/issue30116u.go": {desc: "GopherJS doesn't specify the array/slice index selector in the out-of-bounds message"}, + "fixedbugs/issue34395.go": {category: neverTerminates, desc: "https://github.com/gopherjs/gopherjs/issues/1007"}, + "fixedbugs/issue35027.go": {category: usesUnsupportedPackage, desc: "uses unsupported conversion to reflect.SliceHeader and -gcflags=-d=checkptr"}, + "fixedbugs/issue35073.go": {category: usesUnsupportedPackage, desc: "uses unsupported flag -gcflags=-d=checkptr"}, + "fixedbugs/issue35576.go": {category: lowLevelRuntimeDifference, desc: "GopherJS print/println format for floats differs from Go's"}, + "fixedbugs/issue40917.go": {category: notApplicable, desc: "uses pointer arithmetic and unsupported flag -gcflags=-d=checkptr"}, } type failCategory uint8 @@ -138,7 +151,8 @@ const ( requiresSourceMapSupport // Test fails without source map support (as configured in CI), because it tries to check filename/line number via runtime.Caller. compilerPanic unsureIfGopherJSSupportsThisFeature - notApplicable // Test that doesn't need to run under GopherJS; it doesn't apply to the Go language in a general way. + lowLevelRuntimeDifference // JavaScript runtime behaves differently from Go in ways that are difficult to work around. + notApplicable // Test that doesn't need to run under GopherJS; it doesn't apply to the Go language in a general way. ) type failReason struct { diff --git a/tests/testdata/defer_builtin.go b/tests/testdata/defer_builtin.go new file mode 100644 index 000000000..95d22f4a6 --- /dev/null +++ b/tests/testdata/defer_builtin.go @@ -0,0 +1,22 @@ +package main + +type set map[interface{}]struct{} +type key struct{ a int } + +var m = set{} + +func deferredDelete(k key) { + // This built-in deferral will transpile into a "delete" statement wrapped + // into a proxy lambda. This test ensures we correctly assign proxy lambda + // argument types. + defer delete(m, k) +} + +func main() { + k := key{a: 42} + m[k] = struct{}{} + deferredDelete(k) + if _, found := m[k]; found { + panic("deferred delete didn't work!") + } +} diff --git a/tests/testdata/linkname/main.go b/tests/testdata/linkname/main.go new file mode 100644 index 000000000..203f04d2d --- /dev/null +++ b/tests/testdata/linkname/main.go @@ -0,0 +1,8 @@ +// A test program to demonstrate go:linkname directive support. +package main + +import "github.com/gopherjs/gopherjs/tests/testdata/linkname/one" + +func main() { + print(one.DoAll()) +} diff --git a/tests/testdata/linkname/one/one.go b/tests/testdata/linkname/one/one.go new file mode 100644 index 000000000..0ec753525 --- /dev/null +++ b/tests/testdata/linkname/one/one.go @@ -0,0 +1,52 @@ +// Package one is a root of test dependency tree, importing packages two and +// three. It ensures a deterministic import and initialization order of the +// test packages. +package one + +import ( + _ "unsafe" // for go:linkname + + "github.com/gopherjs/gopherjs/tests/testdata/linkname/three" + "github.com/gopherjs/gopherjs/tests/testdata/linkname/two" +) + +// DoOne is a regular function from the package one to demonstrate a call +// without any special linking trickery. +func DoOne() string { + return "doing one" +} + +// doInternalOne is a function implemented in package one, but actually called +// by package two using a go:linkname directive to gain access to it. Note: +// dead-code elimination must be able to preserve this function. +// +// This is a demonstration that an imported package can linkname a function +// from an importer package. +func doInternalOne() string { + return "doing internal one: " + oneSecret +} + +// oneSecret is an unexported variable in the package one, which doInternalOne() +// must be able to access even when called from another package using a linkname +// mechanism. +var oneSecret = "one secret" + +// doInternalThree is implemented in the package three, but not exported (for +// example, to not make it a public API), which package one gains access to +// via a go:linkname directive. +// +// This is a demonstration that an importer package can linkname a non-exported +// function from an imported package. +// +//go:linkname doInternalThree github.com/gopherjs/gopherjs/tests/testdata/linkname/three.doInternalThree +func doInternalThree() string + +func DoAll() string { + result := "" + + DoOne() + "\n" + // Normal function call in the same package. + two.DoTwo() + "\n" + // Normal cross-package function call. + two.DoImportedOne() + "\n" + // Call a function that package two linknamed. + three.DoThree() + "\n" + // Normal cross-package function call. + "doing imported three: " + doInternalThree() + "\n" // Call a function from another package this package linknamed. + return result +} diff --git a/tests/testdata/linkname/three/three.go b/tests/testdata/linkname/three/three.go new file mode 100644 index 000000000..4943d3c1d --- /dev/null +++ b/tests/testdata/linkname/three/three.go @@ -0,0 +1,19 @@ +package three + +func DoThree() string { + return "doing three" +} + +func init() { + // Avoid dead-code elimination. + // TODO(nevkontakte): This should not be necessary. + var _ = doInternalThree +} + +var threeSecret = "three secret" + +// This function is unexported and can't be accessed by other packages via a +// conventional import. +func doInternalThree() string { + return "doing internal three: " + threeSecret +} diff --git a/tests/testdata/linkname/two/two.go b/tests/testdata/linkname/two/two.go new file mode 100644 index 000000000..10f8f9a37 --- /dev/null +++ b/tests/testdata/linkname/two/two.go @@ -0,0 +1,22 @@ +package two + +import _ "unsafe" // for go:linkname + +func init() { + // Avoid dead-code elimination. + // TODO(nevkontakte): This should not be necessary. + var _ = doInternalOne +} + +func DoTwo() string { + return "doing two" +} + +// The function below can't be imported from the package one the normal way because +// that would create an import cycle. +//go:linkname doInternalOne github.com/gopherjs/gopherjs/tests/testdata/linkname/one.doInternalOne +func doInternalOne() string + +func DoImportedOne() string { + return "doing imported one: " + doInternalOne() +}